aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--doc/ScintillaDoc.html13
-rw-r--r--include/Scintilla.h1
-rw-r--r--include/Scintilla.iface24
-rw-r--r--src/Editor.cxx19
-rw-r--r--src/Editor.h2
5 files changed, 53 insertions, 6 deletions
diff --git a/doc/ScintillaDoc.html b/doc/ScintillaDoc.html
index 51c40b36a..495d93dff 100644
--- a/doc/ScintillaDoc.html
+++ b/doc/ScintillaDoc.html
@@ -3582,11 +3582,15 @@ struct RangeToFormat {
<p><b id="SCI_SETPRINTWRAPMODE">SCI_SETPRINTWRAPMODE(int wrapMode)</b><br />
<b id="SCI_GETPRINTWRAPMODE">SCI_GETPRINTWRAPMODE</b><br />
These two functions get and set the printer wrap mode. <code>wrapMode</code> can be
- set to <code>SC_WRAP_NONE</code> (0) or <code>SC_WRAP_WORD</code> (1). The default is
+ set to <code>SC_WRAP_NONE</code> (0), <code>SC_WRAP_WORD</code> (1) or
+ <code>SC_WRAP_CHAR</code> (2). The default is
<code>SC_WRAP_WORD</code>, which wraps printed output so that all characters fit
into the print rectangle. If you set <code>SC_WRAP_NONE</code>, each line of text
generates one line of output and the line is truncated if it is too long to fit
- into the print area.</p>
+ into the print area.<br />It is important that <code>SC_WRAP_WORD</code> is
+ not only for low spec computers but for some languages/situations. This makes
+ wrapping after any characters but it is OK. Some language don't have whitespaces
+ between words.</p>
<h2 id="DirectAccess">Direct access</h2>
<code><a class="message" href="#SCI_GETDIRECTFUNCTION">SCI_GETDIRECTFUNCTION</a><br />
@@ -3928,7 +3932,10 @@ sptr_t CallScintilla(unsigned int iMessage, uptr_t wParam, sptr_t lParam){
<p><b id="SCI_SETWRAPMODE">SCI_SETWRAPMODE(int wrapMode)</b><br />
<b id="SCI_GETWRAPMODE">SCI_GETWRAPMODE</b><br />
Set wrapMode to <code>SC_WRAP_WORD</code> (1) to enable line wrapping and to
- <code>SC_WRAP_NONE</code> (0) to disable line wrapping.</p>
+ <code>SC_WRAP_NONE</code> (0) to disable line wrapping. And to
+ <code>SC_WRAP_CHAR</code> (2), it is highly recommended to implement for i18n
+ product, enables character wrapping mode.</p>
+
<p><b id="SCI_SETWRAPVISUALFLAGS">SCI_SETWRAPVISUALFLAGS(int wrapVisualFlags)</b><br />
<b id="SCI_GETWRAPVISUALFLAGS">SCI_GETWRAPVISUALFLAGS</b><br />
diff --git a/include/Scintilla.h b/include/Scintilla.h
index f20f0de22..d263d5026 100644
--- a/include/Scintilla.h
+++ b/include/Scintilla.h
@@ -386,6 +386,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_WORDENDPOSITION 2267
#define SC_WRAP_NONE 0
#define SC_WRAP_WORD 1
+#define SC_WRAP_CHAR 2
#define SCI_SETWRAPMODE 2268
#define SCI_GETWRAPMODE 2269
#define SC_WRAPVISUALFLAG_NONE 0x0000
diff --git a/include/Scintilla.iface b/include/Scintilla.iface
index de1377847..eaebaaeca 100644
--- a/include/Scintilla.iface
+++ b/include/Scintilla.iface
@@ -994,6 +994,7 @@ fun int WordEndPosition=2267(position pos, bool onlyWordCharacters)
enu Wrap=SC_WRAP_
val SC_WRAP_NONE=0
val SC_WRAP_WORD=1
+val SC_WRAP_CHAR=2
# Sets whether text is word wrapped.
set void SetWrapMode=2268(int mode,)
@@ -1751,6 +1752,9 @@ val SCLEX_APDL=61
val SCLEX_BASH=62
val SCLEX_ASN1=63
val SCLEX_VHDL=64
+val SCLEX_CAML=65
+val SCLEX_BLITZBASIC=66
+val SCLEX_PUREBASIC=67
# When a lexer specifies its language as SCLEX_AUTOMATIC it receives a
# value assigned in sequence from SCLEX_AUTOMATIC+1.
@@ -1977,6 +1981,10 @@ val SCE_B_KEYWORD3=11
val SCE_B_KEYWORD4=12
val SCE_B_CONSTANT=13
val SCE_B_ASM=14
+val SCE_B_LABEL=15
+val SCE_B_ERROR=16
+val SCE_B_HEXNUMBER=17
+val SCE_B_BINNUMBER=18
# Lexical states for SCLEX_PROPERTIES
lex Properties=SCLEX_PROPERTIES SCE_PROPS_
val SCE_PROPS_DEFAULT=0
@@ -2579,6 +2587,22 @@ val SCE_VHDL_STDFUNCTION=11
val SCE_VHDL_STDPACKAGE=12
val SCE_VHDL_STDTYPE=13
val SCE_VHDL_USERWORD=14
+# Lexical states for SCLEX_CAML
+lex Caml=SCLEX_CAML SCE_CAML_
+val SCE_CAML_DEFAULT=0
+val SCE_CAML_IDENTIFIER=1
+val SCE_CAML_TAGNAME=2
+val SCE_CAML_KEYWORD=3
+val SCE_CAML_KEYWORD2=4
+val SCE_CAML_LINENUM=5
+val SCE_CAML_OPERATOR=6
+val SCE_CAML_NUMBER=7
+val SCE_CAML_CHAR=8
+val SCE_CAML_STRING=9
+val SCE_CAML_COMMENT=10
+val SCE_CAML_COMMENT1=11
+val SCE_CAML_COMMENT2=12
+val SCE_CAML_COMMENT3=13
# Events
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 59bc76e9d..e049485f2 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -2063,7 +2063,12 @@ void Editor::LayoutLine(int line, Surface *surface, ViewStyle &vstyle, LineLayou
continue;
}
if (p > 0) {
- if (ll->styles[p] != ll->styles[p - 1]) {
+ if (wrapState == eWrapChar){
+ lastGoodBreak = pdoc->MovePositionOutsideChar(p + posLineStart, -1)
+ - posLineStart;
+ p = pdoc->MovePositionOutsideChar(p + 1 + posLineStart, 1) - posLineStart;
+ continue;
+ } else if (ll->styles[p] != ll->styles[p - 1]) {
lastGoodBreak = p;
} else if (IsSpaceOrTab(ll->chars[p - 1]) && !IsSpaceOrTab(ll->chars[p])) {
lastGoodBreak = p;
@@ -6231,7 +6236,17 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
return pdoc->ExtendWordSelect(wParam, 1, lParam != 0);
case SCI_SETWRAPMODE:
- wrapState = (wParam == SC_WRAP_WORD) ? eWrapWord : eWrapNone;
+ switch(wParam){
+ case SC_WRAP_WORD:
+ wrapState = eWrapWord;
+ break;
+ case SC_WRAP_CHAR:
+ wrapState = eWrapChar;
+ break;
+ default:
+ wrapState = eWrapNone;
+ break;
+ }
xOffset = 0;
InvalidateStyleRedraw();
ReconfigureScrollBars();
diff --git a/src/Editor.h b/src/Editor.h
index e14cb5ed9..bace500bd 100644
--- a/src/Editor.h
+++ b/src/Editor.h
@@ -301,7 +301,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
int hsEnd;
// Wrapping support
- enum { eWrapNone, eWrapWord } wrapState;
+ enum { eWrapNone, eWrapWord, eWrapChar } wrapState;
bool backgroundWrapEnabled;
int wrapWidth;
int docLineLastWrapped;