aboutsummaryrefslogtreecommitdiff
path: root/src/scintilla_backports/6425_73343682cbda.patch
diff options
context:
space:
mode:
Diffstat (limited to 'src/scintilla_backports/6425_73343682cbda.patch')
-rw-r--r--src/scintilla_backports/6425_73343682cbda.patch168
1 files changed, 168 insertions, 0 deletions
diff --git a/src/scintilla_backports/6425_73343682cbda.patch b/src/scintilla_backports/6425_73343682cbda.patch
new file mode 100644
index 00000000..80225666
--- /dev/null
+++ b/src/scintilla_backports/6425_73343682cbda.patch
@@ -0,0 +1,168 @@
+# HG changeset patch
+# User Neil <nyamatongwe@gmail.com>
+# Date 1513656040 -39600
+# Node ID 73343682cbda0937c5427ee45ea6c9104d97ac1e
+# Parent 5246ca55cf2443dbd6d37bc6dfede6d5f3a14a36
+Start of bidirectional code - implement SCI_SETBIDIRECTIONAL.
+
+diff -r 5246ca55cf24 -r 73343682cbda doc/ScintillaDoc.html
+--- a/doc/ScintillaDoc.html Wed Jan 10 10:04:03 2018 +1100
++++ b/doc/ScintillaDoc.html Tue Dec 19 15:00:40 2017 +1100
+@@ -119,7 +119,7 @@
+
+ <h1>Scintilla Documentation</h1>
+
+- <p>Last edited 11 August 2017 NH</p>
++ <p>Last edited 10 January 2018 NH</p>
+
+ <p>There is <a class="jump" href="Design.html">an overview of the internal design of
+ Scintilla</a>.<br />
+@@ -3594,6 +3594,10 @@
+ <a class="message" href="#SCI_GETCODEPAGE">SCI_GETCODEPAGE &rarr; int</a><br />
+ <a class="message" href="#SCI_SETIMEINTERACTION">SCI_SETIMEINTERACTION(int imeInteraction)</a><br />
+ <a class="message" href="#SCI_GETIMEINTERACTION">SCI_GETIMEINTERACTION &rarr; int</a><br />
++<div class="provisional">
++ <a class="message" href="#SCI_SETBIDIRECTIONAL"><span class="provisional">SCI_SETBIDIRECTIONAL(int bidirectional)</span></a><br />
++ <a class="message" href="#SCI_GETBIDIRECTIONAL">SCI_GETBIDIRECTIONAL &rarr; int</a><br />
++</div>
+ <a class="message" href="#SCI_GRABFOCUS">SCI_GRABFOCUS</a><br />
+ <a class="message" href="#SCI_SETFOCUS">SCI_SETFOCUS(bool focus)</a><br />
+ <a class="message" href="#SCI_GETFOCUS">SCI_GETFOCUS &rarr; bool</a><br />
+@@ -3718,6 +3722,27 @@
+ and the inline behaviour with <code>SCI_SETIMEINTERACTION(SC_IME_INLINE)</code>.
+ Scintilla may ignore this call in some cases. For example, the inline behaviour might only be supported for some languages.</p>
+
++<div class="provisional">
++ <a href="#ProvisionalMessages">These bidirectional features are not yet implemented and the API is provisional</a><br />
++ <p><b id="SCI_SETBIDIRECTIONAL">SCI_SETBIDIRECTIONAL(int bidirectional)</b><br />
++ <b id="SCI_GETBIDIRECTIONAL">SCI_GETBIDIRECTIONAL &rarr; int</b><br />
++ Some languages, like Arabic and Hebrew, are written from right to left instead of from left to right as English is.
++ Documents that use multiple languages may contain both directions and this is termed "bidirectional".
++ The default text direction may be right to left or left to right.
++ Scintilla only correctly displays bidirectional text on some platforms and there can be additional processing and storage
++ costs to this.
++ Currently, bidirectional text only works on Win32 using DirectWrite.
++ As some applications may not want to pay the costs, bidirectional support must be explicitly enabled by calling
++ <code>SCI_SETBIDIRECTIONAL(SC_BIDIRECTIONAL_L2R)</code> (1) which chooses left to right as the default direction or
++ <code>SCI_SETBIDIRECTIONAL(SC_BIDIRECTIONAL_R2L)</code> (2) for default right to left.
++ This should be done after setting the technology to <code>SC_TECHNOLOGY_DIRECTWRITE</code>,
++ <code>SC_TECHNOLOGY_DIRECTWRITERETAIN</code>, or
++ <code>SC_TECHNOLOGY_DIRECTWRITEDC</code>.</p>
++ <p>If the call succeeded <code>SCI_GETBIDIRECTIONAL</code> will return the same value otherwise
++ <code>SC_BIDIRECTIONAL_DISABLED</code> (0) is returned.
++ </p>
++</div>
++
+ <p><b id="SCI_GRABFOCUS">SCI_GRABFOCUS</b><br />
+ <b id="SCI_SETFOCUS">SCI_SETFOCUS(bool focus)</b><br />
+ <b id="SCI_GETFOCUS">SCI_GETFOCUS &rarr; bool</b><br />
+@@ -8073,8 +8098,6 @@
+
+ <p>Provisional features are displayed in this document with <span class="provisional">a distinctive background colour</span>.</p>
+
+- <p>There are currently no provisional messages or values.</p>
+-
+ <p>Some developers may want to only use features that are stable and have graduated from
+ provisional status. To avoid using provisional messages compile with the symbol
+ <code>SCI_DISABLE_PROVISIONAL</code> defined.</p>
+diff -r 5246ca55cf24 -r 73343682cbda include/Scintilla.h
+--- a/include/Scintilla.h Wed Jan 10 10:04:03 2018 +1100
++++ b/include/Scintilla.h Tue Dec 19 15:00:40 2017 +1100
+@@ -1103,5 +1103,12 @@
+ #define SCN_AUTOCCOMPLETED 2030
+ #define SCN_MARGINRIGHTCLICK 2031
++#ifndef SCI_DISABLE_PROVISIONAL
++#define SC_BIDIRECTIONAL_DISABLED 0
++#define SC_BIDIRECTIONAL_L2R 1
++#define SC_BIDIRECTIONAL_R2L 2
++#define SCI_GETBIDIRECTIONAL 2708
++#define SCI_SETBIDIRECTIONAL 2709
++#endif
+ /* --Autogenerated -- end of section automatically generated from Scintilla.iface */
+
+ /* These structures are defined to be exactly the same shape as the Win32
+diff -r 5246ca55cf24 -r 73343682cbda include/Scintilla.iface
+--- a/include/Scintilla.iface Wed Jan 10 10:04:03 2018 +1100
++++ b/include/Scintilla.iface Tue Dec 19 15:00:40 2017 +1100
+@@ -4861,9 +4861,18 @@
+ evt void MarginRightClick=2031(int modifiers, int position, int margin)
+
+-# There are no provisional APIs currently, but some arguments to SCI_SETTECHNOLOGY are provisional.
+-
+ cat Provisional
+
++enu Bidirectional=SC_BIDIRECTIONAL_
++val SC_BIDIRECTIONAL_DISABLED=0
++val SC_BIDIRECTIONAL_L2R=1
++val SC_BIDIRECTIONAL_R2L=2
++
++# Retrieve bidirectional text display state.
++get int GetBidirectional=2708(,)
++
++# Set bidirectional text display state.
++set void SetBidirectional=2709(int bidirectional,)
++
+ cat Deprecated
+
+ # Divide each styling byte into lexical class bits (default: 5) and indicator
+diff -r 5246ca55cf24 -r 73343682cbda src/EditModel.cxx
+--- a/src/EditModel.cxx Wed Jan 10 10:04:03 2018 +1100
++++ b/src/EditModel.cxx Tue Dec 19 15:00:40 2017 +1100
+@@ -63,6 +63,7 @@
+ highlightGuideColumn = 0;
+ primarySelection = true;
+ imeInteraction = imeWindowed;
++ bidirectional = Bidirectional::bidiDisabled;
+ foldFlags = 0;
+ foldDisplayTextStyle = SC_FOLDDISPLAYTEXT_HIDDEN;
+ hotspot = Range(Sci::invalidPosition);
+diff -r 5246ca55cf24 -r 73343682cbda src/EditModel.h
+--- a/src/EditModel.h Wed Jan 10 10:04:03 2018 +1100
++++ b/src/EditModel.h Tue Dec 19 15:00:40 2017 +1100
+@@ -38,6 +38,8 @@
+
+ enum IMEInteraction { imeWindowed, imeInline } imeInteraction;
+
++ enum class Bidirectional { bidiDisabled, bidiL2R, bidiR2L } bidirectional;
++
+ int foldFlags;
+ int foldDisplayTextStyle;
+ ContractionState cs;
+diff -r 5246ca55cf24 -r 73343682cbda src/Editor.cxx
+--- a/src/Editor.cxx Wed Jan 10 10:04:03 2018 +1100
++++ b/src/Editor.cxx Tue Dec 19 15:00:40 2017 +1100
+@@ -6736,6 +6736,13 @@
+ case SCI_GETIMEINTERACTION:
+ return imeInteraction;
+
++ case SCI_SETBIDIRECTIONAL:
++ // SCI_SETBIDIRECTIONAL is implemented on platform subclasses if they support bidirectional text.
++ break;
++
++ case SCI_GETBIDIRECTIONAL:
++ return static_cast<sptr_t>(bidirectional);
++
+ // Marker definition and setting
+ case SCI_MARKERDEFINE:
+ if (wParam <= MARKER_MAX) {
+diff -r 5246ca55cf24 -r 73343682cbda win32/ScintillaWin.cxx
+--- a/win32/ScintillaWin.cxx Wed Jan 10 10:04:03 2018 +1100
++++ b/win32/ScintillaWin.cxx Tue Dec 19 15:00:40 2017 +1100
+@@ -1744,6 +1744,17 @@
+ }
+ break;
+
++ case SCI_SETBIDIRECTIONAL:
++ if (technology == SC_TECHNOLOGY_DEFAULT) {
++ bidirectional = EditModel::Bidirectional::bidiDisabled;
++ } else if ((wParam >= SC_BIDIRECTIONAL_DISABLED) && (wParam <= SC_BIDIRECTIONAL_R2L)) {
++ bidirectional = static_cast<EditModel::Bidirectional>(wParam);
++ }
++ // Invalidate all cached information including layout.
++ DropGraphics(true);
++ InvalidateStyleRedraw();
++ break;
++
+ #ifdef SCI_LEXER
+ case SCI_LOADLEXERLIBRARY:
+ LexerManager::GetInstance()->Load(reinterpret_cast<const char *>(lParam));