play around with Scintilla and Lexilla

This commit is contained in:
2024-07-02 23:47:26 +08:00
parent d7c71f41b2
commit 727a2ec214
992 changed files with 281111 additions and 195 deletions

View File

@ -0,0 +1,4 @@
root = true
[**]
indent_style = tab

View File

@ -0,0 +1,6 @@
repo: bdf8c3ef2fb01ea24578e726337888e706d10b92
node: 460ca6454f7f7f682198e2779f5c69fe577add25
branch: default
latesttag: rel-5-5-0
latesttagdistance: 1
changessincelatesttag: 1

48
3rdparty/scintilla550/scintilla/.hgeol vendored Normal file
View File

@ -0,0 +1,48 @@
[patterns]
**.cxx = native
**.cpp = native
**.c = native
**.h = native
**.m = native
**.mm = native
**.iface = native
**.template = native
**.mk = native
**.py = native
**.rc = native
**.html = native
**.bat = native
**.mak = native
**.def = native
**.manifest = native
**.properties = native
**.styled = native
**.asp = native
**.php = native
**.vb = native
**.d = native
**.lua = native
**.nim = native
**.pl = native
**.p6 = native
**.rb = native
**.tcl = native
**.err = native
**.mms = native
**.tex = native
**.txt = native
**.pch = native
**.hgeol = native
**.dsp = native
**.sln = native
**.vcproj = native
**.pro = native
**.gen = native
**makefile = native
README = native
**.bmp = BIN
**.cur = BIN
**.ico = BIN
**.jpg = BIN
**.png = BIN
tgzsrc = LF

View File

@ -0,0 +1,81 @@
syntax: glob
*.o
*.a
*.asm
*.lib
*.obj
*.iobj
__pycache__
*.pyc
*.dll
*.so
*.dylib
*.framework
*.pyd
*.exe
*.exp
*.lib
*.pdb
*.ipdb
*.res
*.bak
*.sbr
*.suo
*.aps
*.sln
*.vcxproj.*
*.idb
*.bsc
*.intermediate.manifest
*.lastbuildstate
*.cache
*.ilk
*.ncb
*.tlog
*.sdf
gtk/*.plist
win32/*.plist
*.opt
*.plg
*.pbxbtree
*.mode1v3
*.pbxuser
*.pbproj
*.tgz
*.log
*.xcbkptlist
*.xcuserstate
xcuserdata/
*.xcsettings
xcschememanagement.plist
.DS_Store
Release
Debug
x64
ARM64
cocoa/build
cocoa/ScintillaFramework/build
cocoa/ScintillaTest/build
macosx/SciTest/build
*.cppcheck
Makefile.Debug
Makefile.Release
*_resource.rc
moc_*
*.pro.user
.qmake.stash
ScintillaEdit.cpp
ScintillaEdit.h
ScintillaConstants.py
ScintillaEditBase.intermediate.manifest
ScintillaEdit.intermediate.manifest
qt/*/Makefile
cov-int
.vs
meson-private
meson-logs
build.ninja
.ninja*
compile_commands.json
.vscode
VTune Profiler Results

211
3rdparty/scintilla550/scintilla/.hgtags vendored Normal file
View File

@ -0,0 +1,211 @@
01f406ccdce315e9870c44036e18ebf0fa74df22 rel-1-64
038d4e745187fddd764fda49b12b878ece14c0bd rel-1-63
03dff61592cf2abbabd9e383f1c8417af3e9d87b rel-1-34
11a62bd24819d0044dcf4b8621f79924cab781bd rel-1-56
1804bf43c2443fb8db7468a36e8022891dfc32c5 rel-1-73
1c4055eaf77fb0e2730adcba2b04a9c40318bdf1 rel-1-74
2abff14b87854b56df577a96d6d87e06bbb44251 rel-1-27
3a80173ef6320433ac4ab05ff97774f186d878ba rel-1-75
4107ec8a3a14b68b832dd12ce568d6517da063f1 rel-2-03
4479fb32e7238069d4ed81d7e586b6bcbc2a94ce rel-1-39
4af05ea4430505d34c9832313c1e5aaac7a54237 rel-1-61
4b0ff01c39b7b9c7aa65d1965bd49daaffe05ea8 rel-1-40
4ec090359e447b59d24c3e970fc9faede13ec187 rel-1-45
4f3e52891003743da45d4464020f59849240d278 rel-1-37
4f77dabcfbab1de33dc2ef89029a4536a1c6c697 rel-1-25
4ff6778c456258929c6f9074bdc03d90c28968bf rel-2-00
58c51367e4127167fe7be54681b788618732d65b rel-1-51
668816d0fd5d75dee228bca98b183969c4b1de53 rel-1-52
67a79ce06212780dc0592bbcf3a3172244cf18c8 rel-1-76
67aaa980e972a75e9aa11e1fbfe66b4b9c1d78fe rel-1-48
6a3e91c35d19e241621c10b2a37c6233e33c1c0a rel-1-66
6a3e91c35d19e241621c10b2a37c6233e33c1c0a rel-1-66-carbon
6aa816d746280a68821eb90efad0fb5f2d3b751e rel-1-35
6b44857e410f45ad5c9e9b48a481fb902c20a2dc rel-1-26
6b9c7f104c6160507212e5412ba79ecffc6f9057 initial
7681410bf25abb8fa8f51552fd61ec83bdf1a8b0 rel-1-65
7c87fe602c2c1fd973eb89675813192723f7f368 rel-1-30
85fbbc9b421bdc97a34bead08cdd34cf4c6271f3 rel-1-58
86d8875ed69c96026e9ec4b77fff3f9d369bfcb6 rel-1-60
87f60a6fb558871ef85a781e5d03321f77e1d11a rel-1-38
89b230d9f013855747841b3b3bc8b229259e0c81 rel-1-79
8af30946bc0ad1196ddf51b51545929cab3fa2e6 rel-1-69
8c2d64c399e5d823e2b2ef547a260357be0428c0 rel-1-54
8d11fc4c543f6228d73fa385ec9fca5723f8c832 rel-2-11
94801bf860900c9dde428db66c5e01a63e521c05 rel-1-44
988c66dff88ed44913d8d6303f7e136c19f5d6ea rel-2-02
9d268dfb34560f2aeb817148ca746814fd85115d rel-1-46
9e813ff6f15778dd6c6d2f6ab20f9aa8e91b2e47 rel-1-47
9eda4d6efdd657f2ce8ad1034bdd20998f573a40 rel-1-49
a313740fe8b8ee9df5cfc6f4bae7c665d160f4dd rel-1-78
a5905b21afdbee56912e039eeb2e2f7fdcf155df rel-1-42
ade751c9a7e7945e48428e32cdf41d6f7d189f08 rel-1-62
ae7bd57a9dcedb67467a4b43a27bdf802479bc9e rel-1-33
af2def618260df6bde2fdb3fd1f22ad532b18270 rel-1-77
b618c255982d76d4d554c456888cd705b1a52d33 rel-1-68
b6b5e68dd21fa2f5015e1b45f5b1880aa1c9ecef rel-1-55
bd0f312842328a1118c43ebd54899916f1009b86 rel-1-57
c019d05d7131f21ccf7abedb979ca29f2ff5fe32 rel-1-71
c2c0575d28f000d925d4c0ec689df9b1e572af2d rel-1-43
c6733869c489c4e39aeb84ffe5d28378e9fb121d rel-1-31
cc4d999c38f16be78e8ba54749bd4e3711b66882 rel-1-41
d125f70deea4580ead7cb72814bdb17ad9c16258 rel-1-36
d2316766e67ea2a10effe85e6e27ea7b520df409 rel-1-70
d940969f5c6f78c252ac110884aa89014c7d1349 rel-2-10
ed67316cd7395abf840d8c9d10eb6a23f693d4fc rel-1-28
ee4e67b4a9fe76e85230216340dc7eff3978fbf8 rel-1-59
f04248111a542b559402f0e08253b613d7dec849 rel-1-32
f394f7465aa354dfdea57599f8c7d0e424313144 rel-1-53
f4d4bb4d5fd70e9affe63460161cf2779f9dfdb3 rel-1-24
f6af29ca9c6e9ffd457d9f6b9477d03f2d944f64 rel-1-67
f99c7dfc2bffb16cd478633526b4cba883e266ab rel-2-12
fd3e6bb269b1c38e003202dc5856cf120667ed88 rel-1-72
fdf95390299493c05c0e11c3c2ef98293c552908 rel-1-50
fe112bae056a00c5e0b7218dd3903b16e3d43d24 rel-1-23
ffde119d297ecdce968737c68f0e21410a0c36c4 rel-2-20
bae0795bc8950108a5265dd3a1b231dbb1c0a92f rel-2-21
91d53a344450102a73387dd591cecc4294574891 rel-2-22
338e9c43eb8339b293aa5cb069aa84c60bbac6ba rel-2-23
3a0d1edb7ae5478426346dab2219e10606238bd0 rel-2-24
930e2f7d36165066fffd5cef6225c7774a2d7996 rel-2-25
221dae018a0dd86d4adc91370dfc507ca078b452 rel-2-26
02d0b25c22c3a4d672aca5fa37b3e5bffc30fa32 rel-2-27
265b4ffceb4a356fd7917ce938051e8a206bac3e rel-2-28
6f590a14726334be3256c55e8bab9119c71f3160 rel-2-29
7a59b936e02452b66dff32264e5bc72c038ade19 rel-3-0-0
ad485b918c5a81dbf591eab1916afa3d600b0639 rel-3-0-1
16f620503ab2e3ae463e39c36f897385fd73b9d1 rel-3-0-2
d147d5b894708a5c7d3e7b81513fe02f0075e62c rel-3-0-3
2faf55888eeb76e40d5b286cd45f4f40c331b1c2 rel-3-0-4
a9219577729080874f5f46e0a634d5d117cc2eed rel-3-1-0
ae4d2f897a8fd92294f61d4d56e90e7700a912df rel-3-2-0
41bdec833d4a9bb108bd3e4890371b22d1132f1a rel-3-2-1
183c117293e78c4264dca7afac9f66cb5d585ddc rel-3-2-2
7d54d6d61ace06828cb0850b53a8008672d67f33 rel-3-2-3
1092d3d2495955cfe1a227e360e14d5358b5136f rel-3-2-4
74f6ed8c5737db179f791d6fe6cab2dc119f65fb rel-3-2-5
04c9afc26342f4c1b9492c4b27efb33585d6a56d rel-3-3-0
5f9c0934513bf8d9dfe64127ad19cb95800415e9 scitex-3-3-0
d2022a5e4948379ab0aa89b510b850209d6cbb01 rel-3-3-1
d887fce163757c50ec95ed204d50b02675db830c rel-3-3-2
1cd0ebd585926933259e776ac380ef17a20e2d5d rel-3-3-3
e1c3afb1c5d42c664558839b1d68ed4dcc50e5d1 rel-3-3-4
c343e43079c4458fae69f82ff3b6569b7bba0821 rel-3-3-5
da3cbb774e02f626fd9ee5446608f0f63665042a rel-3-3-6
5693714a8b0b30e481ba4f089f2ecc93fc80c80d rel-3-3-7
61cdae165698c4b904349094f596ae519c5be6a0 rel-3-3-8
d086394244f486c3f628518db177c265d694b8e7 rel-3-3-9
eea0ac7e5c8ff58e3145ddbb8b271c51965780bf rel-3-4-0
e73e34b23c598ab42e44e77141f6138555ed9d62 rel-3-4-1
a4286bbf7081a4eb570bc62a9e5f7beef51e83a1 rel-3-4-2
a3c10db89cc33783cf5a0c8d76d482bb1434af89 rel-3-4-3
0df282b2c489231eb4fdc2cdaa6dfb7f6283a9c0 rel-3-4-4
a431f85e13c9499923b79d4890e8642604863a27 rel-3-5-0
01c4696a39a913866f9852e06aff66d48ff39722 rel-3-5-1
a797ff255bdf2085f0475b9202527da6a16d507a rel-3-5-2
8b21bf82adac0a3fe9923b7148d183b7a6792dde rel-3-5-3
16ffc2a3ae1554d2c49513a44188224f8235f13c rel-3-5-4
1916c3602692d06f410df15b100b55ee79ae46f9 rel-3-5-5
1916c3602692d06f410df15b100b55ee79ae46f9 rel-3-5-5
0000000000000000000000000000000000000000 rel-3-5-5
0000000000000000000000000000000000000000 rel-3-5-5
dea417bad80a9225d72b4f839ab04b1f7ffd936f rel-3-5-5
e9bfc7a0cb83a972e8bfa5dbaa8aabd359549b57 rel-3-5-6
49ce1d4c2dea737f1e4c92858921dd403a61cb20 rel-3-5-7
87a4e0fa293ec1dc47d9d4d4288a139a5e240c6f rel-3-6-0
59165fbb6b9d51efae82d13ce1c4471310b90bde rel-3-6-1
d906ba5d62cbb79a3b25d29aa4dae3f3d1fdf22a rel-3-6-2
e575024931f89fbc70e06d1faaf73a2e8721a2da rel-3-6-3
d2d4928e3e6a3e79ed7dbfd949968d5fc9818424 rel-3-6-4
afd67be6f0b141ba23be25ea1f472258bb4d976f rel-3-6-5
bfdfb44eb77717778c7a3ac2c3726903e66c81b8 rel-3-6-6
f9ff5b9b1a485d742fb7bfae14ba323a3f990663 rel-3-6-7
13cdacbbe2515620b0f582c4c274b17cae06180c rel-3-7-0
a7dfda6c85859a9aa9f5c4ae43af005d3b7ce5fb rel-3-7-1
e02540a3097449da69003d37c116c9b2104e3448 rel-3-7-2
e99b1a2bfbf808a12ec988bcab2121b6c4cbb556 rel-3-7-3
535c34f64993f3ef7367e773950e22a37d2475be rel-3-7-4
535c34f64993f3ef7367e773950e22a37d2475be rel-3-7-4
0000000000000000000000000000000000000000 rel-3-7-4
0000000000000000000000000000000000000000 rel-3-7-4
ddcae5344fa5390b352c1075d01e95379e145b43 rel-3-7-4
7c0d4e81e9388f87a648208b834f58516797be31 rel-3-7-5
ec8e68de4ddba09c062e427e774355a2f8c6e1c0 rel-4-0-0
bd5c44cb0ab8518410475a9c0f48935e1b9f6c11 rel-4-0-1
96becb885ce4f0e9c95286128713d503bf2644fd rel-4-0-2
1bf8b7c5099584e8a267a96f1a361e59a48f62b7 rel-4-0-3
d48bdae67b339304c76435aa4ba4d6fe9176848a rel-4-0-4
b9ab83221b03910ae4c6871bf61cf3b138abae2c rel-4-0-5
0dc20d87a4f93ea3d51469c7f0ae5afe136b8473 rel-4-1-0
892c361b3969dcd7919db73dea54c40793218288 rel-4-1-1
892c361b3969dcd7919db73dea54c40793218288 rel-4-1-1
0000000000000000000000000000000000000000 rel-4-1-1
0000000000000000000000000000000000000000 rel-4-1-1
fcf47c3528327f7c29332bee7b06478e130b4c45 rel-4-1-1
927e7d62e9177d09711bf9dce41f28842bbbdc5c rel-4-1-2
1484a537b3803312278ace83c334b34178be3f76 rel-4-1-3
cd35899fef5ea18e099c61577daf1133cd21bed4 rel-4-1-4
cd35899fef5ea18e099c61577daf1133cd21bed4 rel-4-1-4
45a4a9d10821af1f925727ed4c5725888752d233 rel-4-1-4
72074cd809c599d30230126b9f07ec2ee752a4d8 rel-4-1-5
72074cd809c599d30230126b9f07ec2ee752a4d8 rel-4-1-5
0000000000000000000000000000000000000000 rel-4-1-5
0000000000000000000000000000000000000000 rel-4-1-5
6a6bf370ae9ff7771331e1cc2cc1a1adf5bc9e00 rel-4-1-5
6ccb029fd955cc69c186acd5b3e677e01f4590e3 rel-4-1-6
8fdc0159b0df23b8b1d5abc31c80b757aa206a44 rel-4-1-7
70fe3bd38a3d8567acdb57a7d554f3c78aea6315 rel-4-2-0
4f8c3b19095af4f0d333f1b6aa1ff1e3a69d9f4c rel-4-2-1
1b8ce5991cb9e5c27fe2701e6d61c35e697e7207 rel-4-2-2
01a9cbbef0f001bc38bead54c9e993e1f35c3977 rel-4-2-3
7137777f9be8bbdd6eacf3b17b6778eb2e7fa4fe rel-4-3-0
32e2c934bcc6d09c711958eab8e924851fd82bd3 rel-4-3-1
c4e53c985ef6fdf0c4ef660a8c39d8976c42a921 rel-4-3-2
4c6aee014e729256c92dc836a661c73eae0fc79a rel-4-3-3
12e2a7acacecd22d7ec4b0d18f99452f77f7b5b0 rel-4-4-0
41a534b0add8069329e3ccaf6d933fbfaf0078e5 rel-4-4-2
e454eae1f1eb65e6a9676696540358cbcad47b25 rel-4-4-3
f422793aa52f30e0ff6c9a9261303ce2b97be30b rel-4-4-4
71b428eed36a7f52a07cbcbd31979c2340f8d925 rel-4-4-5
64a5230d30ba2385450a3323d4e79b05ce261096 rel-4-4-6
64a5230d30ba2385450a3323d4e79b05ce261096 rel-4-4-6
0000000000000000000000000000000000000000 rel-4-4-6
0000000000000000000000000000000000000000 rel-4-4-6
1b54292f459098031062d16af79f0eef4e785cd0 rel-4-4-6
70561ad12a873e641720cb8a60286a49b1a7c951 start-5
8c2f906208a2f6de5b8d07e4a5e0033ac639a1f6 rel-5-0-0
6b462b5bd706461acfd6b81c4484794710dd0299 start-platform-changes
91a02e4309053a9fb6d05a3d1586d7217168ae95 rel-5-0-1
91a02e4309053a9fb6d05a3d1586d7217168ae95 rel-5-0-1
52d56f79dc0f38a401457d81ff61a5006142ba65 rel-5-0-1
5b51130729ea2c0971d3d6ce608c08a64a44f8d1 rel-5-0-2
e4a0d6eb9c84702e9e9ca6a79d079412a7e6d173 rel-5-0-3
b152bb68c5843e368e217809fba5dd1b122367ce rel-5-1-0
8075a4c6e184836186f0bc997dfa5d57d475bd20 rel-5-1-1
b45f5b5ee3e3b4de00e47093a478c83b931ac534 rel-5-1-2
beeb51d2c64560c6db7554c0e291a322eea5c3bd rel-5-1-3
ae7f6a2ad9ad485d58845248987262c3a6962d8b rel-5-1-4
c9556e17e892216db2a5734903fc6dbe57110a0c rel-5-1-5
b6b3e7f6ef41ce8b3efe3c22d96adfc854763a81 rel-5-2-0
c37b11edab223903183f0471c3463507dc9669d8 rel-5-2-1
2d3ce0c81e64818c79e560da1e1bf7185e650880 rel-5-2-2
03d65839fa48877340bdac4b40a4aca467ef06a7 rel-5-2-3
7dd0480eccaa12ea7f8e799005a748f4b3aa3669 rel-5-2-4
dddfab2f1d052afc677cb6e693d1d859877e45b7 rel-5-3-0
072c537a8b358e670e57744b3b17d41feab35370 rel-5-3-1
cd20da25b81f68b300143828ab94887448dac385 rel-5-3-2
da729553c76b8769b7400a381b1785cee50216a1 rel-5-3-3
10f4ff8763bc0b2c862bc1732fe940472e07cc5a rel-5-3-4
1c5360ebe7b0c824c535d0d10a788be573b3adc3 rel-5-3-5
57bcb62d635cc6bd2ef8c295fc2a53c5d86a433f rel-5-3-6
540baa6ea9e0a08eadf952e6d944d04fa74b5d5c rel-5-3-7
540baa6ea9e0a08eadf952e6d944d04fa74b5d5c rel-5-3-7
0000000000000000000000000000000000000000 rel-5-3-7
0000000000000000000000000000000000000000 rel-5-3-7
cc94762d429e3e2b1cd25c1e4337200ff4acb676 rel-5-3-7
14acdf9e85ac028eea63e8504b5af42f3462ffd3 rel-5-3-8
d5477c63f5f60a2869a1b46cafb1687c020701f9 rel-5-4-0
07bf3219bad2334df18cbc1c5e778d2e694331dc rel-5-4-1
741427d54cd52799a697ee93fc13e406fd5d7d48 rel-5-4-2
c171b756efc76359f0795ca0a1bfb7eb16d4c04b rel-5-4-3
3a219b13a5d88a9e1bfe6ff76c91a07e08e59003 rel-5-5-0

View File

@ -0,0 +1,20 @@
Fixes should be posted to the Bug Tracker
http://sourceforge.net/p/scintilla/bugs/
Features should be posted to the Feature Request Tracker
http://sourceforge.net/p/scintilla/feature-requests/
Either send unified diffs (or patch files) or zip archives with whole files.
Mercurial patch files are best as they include author information and commit
messages.
Questions should go to the scintilla-interest mailing list
https://groups.google.com/forum/#!forum/scintilla-interest
Code should follow the guidelines at
http://www.scintilla.org/SciCoding.html
Do not use SourceForge's Merge Request mechanism or message sending
feature as no one is monitoring these.
The neilh @ scintilla.org account receives much spam and is only checked
occasionally. Almost all Scintilla mail should go to the mailing list.

View File

@ -0,0 +1,20 @@
License for Lexilla, Scintilla, and SciTE
Copyright 1998-2021 by Neil Hodgson <neilh@scintilla.org>
All Rights Reserved
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation.
NEIL HODGSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS, IN NO EVENT SHALL NEIL HODGSON BE LIABLE FOR ANY
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
OR PERFORMANCE OF THIS SOFTWARE.

92
3rdparty/scintilla550/scintilla/README vendored Normal file
View File

@ -0,0 +1,92 @@
README for building of Scintilla, Lexilla, and SciTE
Scintilla and Lexilla can be built by themselves.
To build SciTE, Scintilla and Lexilla should first be built.
See lexilla/README for information on building Lexilla.
*** GTK+/Linux version ***
You must first have GTK+ 2.24 or later and GCC (7.1 or better) installed.
Clang may be used by adding CLANG=1 to the make command line.
Other C++ compilers may work but may require tweaking the make file.
Either GTK+ 2.x or 3.x may be used with 2.x the default and 3.x
chosen with the make argument GTK3=1.
To build Scintilla, use the makefile located in the scintilla/gtk directory
cd scintilla/gtk
make
cd ../..
To build and install SciTE, use the makefile located in the scite/gtk directory
cd scite/gtk
make
sudo make install
This installs SciTE into $prefix/bin. The value of $prefix is determined from
the location of Gnome if it is installed. This is usually /usr if installed
with Linux or /usr/local if built from source. If Gnome is not installed
/usr/bin is used as the prefix. The prefix can be overridden on the command
line like "make prefix=/opt" but the same value should be used for both make
and make install as this location is compiled into the executable. The global
properties file is installed at $prefix/share/scite/SciTEGlobal.properties.
The language specific properties files are also installed into this directory.
To remove SciTE
sudo make uninstall
To clean the object files which may be needed to change $prefix
make clean
The current make file supports static and dynamic linking between SciTE, Scintilla, and Lexilla.
*** Windows version ***
A C++ 17 compiler is required.
Visual Studio 2019 is the development system used for most development
although Mingw-w64 9.2 is also supported.
To build Scintilla, make in the scintilla/win32 directory
cd scintilla\win32
GCC: mingw32-make
Visual C++: nmake -f scintilla.mak
cd ..\..
To build SciTE, use the makefiles located in the scite/win32 directory
cd scite\win32
GCC: mingw32-make
Visual C++: nmake -f scite.mak
An executable SciTE will now be in scite/bin.
*** GTK+/Windows version ***
Mingw-w64 is known to work. Other compilers will probably not work.
Only Scintilla will build with GTK+ on Windows. SciTE will not work.
Make builds both a static library version of Scintilla with lexers (scintilla.a) and
a shared library without lexers (libscintilla.so or or libscintilla.dll).
To build Scintilla, make in the scintilla/gtk directory
cd scintilla\gtk
mingw32-make
*** macOS Cocoa version ***
Xcode 9.2 or later may be used to build Scintilla on macOS.
There is no open source version of SciTE for macOS but there is a commercial
version available through the App Store.
To build Scintilla, run xcodebuild in the scintilla/cocoa/ScintillaFramework or
scintilla/cocoa/Scintilla directory
cd cocoa/Scintilla
xcodebuild
*** Qt version ***
See the qt/README file to build Scintilla with Qt.

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@
This empty files ensures that the directory is created.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,53 @@
/**
* Scintilla source code edit control
* @file InfoBar.h - Implements special info bar with zoom info, caret position etc. to be used with
* ScintillaView.
*
* Mike Lischke <mlischke@sun.com>
*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
*/
#import <Cocoa/Cocoa.h>
#import "InfoBarCommunicator.h"
/**
* Extended text cell for vertically aligned text.
*/
@interface VerticallyCenteredTextFieldCell : NSTextFieldCell {
BOOL mIsEditingOrSelecting;
}
@end
@interface InfoBar : NSView <InfoBarCommunicator> {
@private
NSImage *mBackground;
IBDisplay mDisplayMask;
float mScaleFactor;
NSPopUpButton *mZoomPopup;
int mCurrentCaretX;
int mCurrentCaretY;
NSTextField *mCaretPositionLabel;
NSTextField *mStatusTextLabel;
id <InfoBarCommunicator> mCallback;
}
- (void) notify: (NotificationType) type message: (NSString *) message location: (NSPoint) location
value: (float) value;
- (void) setCallback: (id <InfoBarCommunicator>) callback;
- (void) createItems;
- (void) positionSubViews;
- (void) setDisplay: (IBDisplay) display;
- (void) zoomItemAction: (id) sender;
- (void) setScaleFactor: (float) newScaleFactor adjustPopup: (BOOL) flag;
- (void) setCaretPosition: (NSPoint) position;
- (void) sizeToFit;
@end

View File

@ -0,0 +1,410 @@
/**
* Scintilla source code edit control
* @file InfoBar.mm - Implements special info bar with zoom info, caret position etc. to be used with
* ScintillaView.
*
* Mike Lischke <mlischke@sun.com>
*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
*/
#include <cmath>
#import "InfoBar.h"
//--------------------------------------------------------------------------------------------------
@implementation VerticallyCenteredTextFieldCell
// Inspired by code from Daniel Jalkut, Red Sweater Software.
- (NSRect) drawingRectForBounds: (NSRect) theRect {
// Get the parent's idea of where we should draw
NSRect newRect = [super drawingRectForBounds: theRect];
// When the text field is being edited or selected, we have to turn off the magic because it
// screws up the configuration of the field editor. We sneak around this by intercepting
// selectWithFrame and editWithFrame and sneaking a reduced, centered rect in at the last minute.
if (mIsEditingOrSelecting == NO) {
// Get our ideal size for current text
NSSize textSize = [self cellSizeForBounds: theRect];
// Center that in the proposed rect
CGFloat heightDelta = newRect.size.height - textSize.height;
if (heightDelta > 0) {
newRect.size.height -= heightDelta;
newRect.origin.y += std::ceil(heightDelta / 2);
}
}
return newRect;
}
//--------------------------------------------------------------------------------------------------
- (void) selectWithFrame: (NSRect) aRect inView: (NSView *) controlView editor: (NSText *) textObj
delegate: (id) anObject start: (NSInteger) selStart length: (NSInteger) selLength {
aRect = [self drawingRectForBounds: aRect];
mIsEditingOrSelecting = YES;
[super selectWithFrame: aRect
inView: controlView
editor: textObj
delegate: anObject
start: selStart
length: selLength];
mIsEditingOrSelecting = NO;
}
//--------------------------------------------------------------------------------------------------
- (void) editWithFrame: (NSRect) aRect inView: (NSView *) controlView editor: (NSText *) textObj
delegate: (id) anObject event: (NSEvent *) theEvent {
aRect = [self drawingRectForBounds: aRect];
mIsEditingOrSelecting = YES;
[super editWithFrame: aRect
inView: controlView
editor: textObj
delegate: anObject
event: theEvent];
mIsEditingOrSelecting = NO;
}
@end
//--------------------------------------------------------------------------------------------------
@implementation InfoBar
- (instancetype) initWithFrame: (NSRect) frame {
self = [super initWithFrame: frame];
if (self) {
NSBundle *bundle = [NSBundle bundleForClass: [InfoBar class]];
NSString *path = [bundle pathForResource: @"info_bar_bg" ofType: @"tiff" inDirectory: nil];
// macOS 10.13 introduced bug where pathForResource: fails on SMB share
if (path == nil) {
path = [bundle.bundlePath stringByAppendingPathComponent: @"Resources/info_bar_bg.tiff"];
}
mBackground = [[NSImage alloc] initWithContentsOfFile: path];
if (!mBackground.valid)
NSLog(@"Background image for info bar is invalid.");
mScaleFactor = 1.0;
mCurrentCaretX = 0;
mCurrentCaretY = 0;
[self createItems];
self.clipsToBounds = TRUE;
}
return self;
}
//--------------------------------------------------------------------------------------------------
/**
* Called by a connected component (usually the info bar) if something changed there.
*
* @param type The type of the notification.
* @param message Carries the new status message if the type is a status message change.
* @param location Carries the new location (e.g. caret) if the type is a caret change or similar type.
* @param value Carries the new zoom value if the type is a zoom change.
*/
- (void) notify: (NotificationType) type message: (NSString *) message location: (NSPoint) location
value: (float) value {
switch (type) {
case IBNZoomChanged:
[self setScaleFactor: value adjustPopup: YES];
break;
case IBNCaretChanged:
[self setCaretPosition: location];
break;
case IBNStatusChanged:
mStatusTextLabel.stringValue = message;
break;
}
}
//--------------------------------------------------------------------------------------------------
/**
* Used to set a protocol object we can use to send change notifications to.
*/
- (void) setCallback: (id <InfoBarCommunicator>) callback {
mCallback = callback;
}
//--------------------------------------------------------------------------------------------------
static NSString *DefaultScaleMenuLabels[] = {
@"20%", @"30%", @"50%", @"75%", @"100%", @"130%", @"160%", @"200%", @"250%", @"300%"
};
static float DefaultScaleMenuFactors[] = {
0.2f, 0.3f, 0.5f, 0.75f, 1.0f, 1.3f, 1.6f, 2.0f, 2.5f, 3.0f
};
static unsigned DefaultScaleMenuSelectedItemIndex = 4;
static float BarFontSize = 10.0;
- (void) createItems {
// 1) The zoom popup.
unsigned numberOfDefaultItems = sizeof(DefaultScaleMenuLabels) / sizeof(NSString *);
// Create the popup button.
mZoomPopup = [[NSPopUpButton alloc] initWithFrame: NSMakeRect(0.0, 0.0, 1.0, 1.0) pullsDown: NO];
// No border or background please.
[mZoomPopup.cell setBordered: NO];
[mZoomPopup.cell setArrowPosition: NSPopUpArrowAtBottom];
// Fill it.
for (unsigned count = 0; count < numberOfDefaultItems; count++) {
[mZoomPopup addItemWithTitle: NSLocalizedStringFromTable(DefaultScaleMenuLabels[count], @"ZoomValues", nil)];
id currentItem = [mZoomPopup itemAtIndex: count];
if (DefaultScaleMenuFactors[count] != 0.0)
[currentItem setRepresentedObject: @(DefaultScaleMenuFactors[count])];
}
[mZoomPopup selectItemAtIndex: DefaultScaleMenuSelectedItemIndex];
// Hook it up.
mZoomPopup.target = self;
mZoomPopup.action = @selector(zoomItemAction:);
// Set a suitable font.
mZoomPopup.font = [NSFont menuBarFontOfSize: BarFontSize];
// Make sure the popup is big enough to fit the cells.
[mZoomPopup sizeToFit];
// Don't let it become first responder
[mZoomPopup setRefusesFirstResponder: YES];
// put it in the scrollview.
[self addSubview: mZoomPopup];
// 2) The caret position label.
Class oldCellClass = [NSTextField cellClass];
[NSTextField setCellClass: [VerticallyCenteredTextFieldCell class]];
mCaretPositionLabel = [[NSTextField alloc] initWithFrame: NSMakeRect(0.0, 0.0, 50.0, 1.0)];
[mCaretPositionLabel setBezeled: NO];
[mCaretPositionLabel setBordered: NO];
[mCaretPositionLabel setEditable: NO];
[mCaretPositionLabel setSelectable: NO];
[mCaretPositionLabel setDrawsBackground: NO];
mCaretPositionLabel.font = [NSFont menuBarFontOfSize: BarFontSize];
NSTextFieldCell *cell = mCaretPositionLabel.cell;
cell.placeholderString = @"0:0";
cell.alignment = NSTextAlignmentCenter;
[self addSubview: mCaretPositionLabel];
// 3) The status text.
mStatusTextLabel = [[NSTextField alloc] initWithFrame: NSMakeRect(0.0, 0.0, 1.0, 1.0)];
[mStatusTextLabel setBezeled: NO];
[mStatusTextLabel setBordered: NO];
[mStatusTextLabel setEditable: NO];
[mStatusTextLabel setSelectable: NO];
[mStatusTextLabel setDrawsBackground: NO];
mStatusTextLabel.font = [NSFont menuBarFontOfSize: BarFontSize];
cell = mStatusTextLabel.cell;
cell.placeholderString = @"";
[self addSubview: mStatusTextLabel];
// Restore original cell class so that everything else doesn't get broken
[NSTextField setCellClass: oldCellClass];
}
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
/**
* Fill the background.
*/
- (void) drawRect: (NSRect) rect {
[[NSColor controlBackgroundColor] set];
[NSBezierPath fillRect: rect];
// Since the background is seamless, we don't need to take care for the proper offset.
// Simply tile the background over the invalid rectangle.
if (mBackground.size.width != 0) {
NSPoint target = {rect.origin.x, 0};
while (target.x < rect.origin.x + rect.size.width) {
[mBackground drawAtPoint: target fromRect: NSZeroRect operation: NSCompositingOperationSourceOver fraction: 1];
target.x += mBackground.size.width;
}
}
// Draw separator lines between items.
NSRect verticalLineRect;
CGFloat component = 190.0 / 255.0;
NSColor *lineColor = [NSColor colorWithDeviceRed: component green: component blue: component alpha: 1];
if (mDisplayMask & IBShowZoom) {
verticalLineRect = mZoomPopup.frame;
verticalLineRect.origin.x += verticalLineRect.size.width + 1.0;
verticalLineRect.size.width = 1.0;
if (NSIntersectsRect(rect, verticalLineRect)) {
[lineColor set];
NSRectFill(verticalLineRect);
}
}
if (mDisplayMask & IBShowCaretPosition) {
verticalLineRect = mCaretPositionLabel.frame;
verticalLineRect.origin.x += verticalLineRect.size.width + 1.0;
verticalLineRect.size.width = 1.0;
if (NSIntersectsRect(rect, verticalLineRect)) {
[lineColor set];
NSRectFill(verticalLineRect);
}
}
}
//--------------------------------------------------------------------------------------------------
- (BOOL) isOpaque {
return YES;
}
//--------------------------------------------------------------------------------------------------
/**
* Used to reposition our content depending on the size of the view.
*/
- (void) setFrame: (NSRect) newFrame {
super.frame = newFrame;
[self positionSubViews];
}
//--------------------------------------------------------------------------------------------------
- (void) positionSubViews {
NSRect currentBounds = {{0, 0}, {0, self.frame.size.height}};
if (mDisplayMask & IBShowZoom) {
[mZoomPopup setHidden: NO];
currentBounds.size.width = mZoomPopup.frame.size.width;
mZoomPopup.frame = currentBounds;
currentBounds.origin.x += currentBounds.size.width + 1; // Add 1 for the separator.
} else
[mZoomPopup setHidden: YES];
if (mDisplayMask & IBShowCaretPosition) {
[mCaretPositionLabel setHidden: NO];
currentBounds.size.width = mCaretPositionLabel.frame.size.width;
mCaretPositionLabel.frame = currentBounds;
currentBounds.origin.x += currentBounds.size.width + 1;
} else
[mCaretPositionLabel setHidden: YES];
if (mDisplayMask & IBShowStatusText) {
// The status text always takes the rest of the available space.
[mStatusTextLabel setHidden: NO];
currentBounds.size.width = self.frame.size.width - currentBounds.origin.x;
mStatusTextLabel.frame = currentBounds;
} else
[mStatusTextLabel setHidden: YES];
}
//--------------------------------------------------------------------------------------------------
/**
* Used to switch the visible parts of the info bar.
*
* @param display Bitwise ORed IBDisplay values which determine what to show on the bar.
*/
- (void) setDisplay: (IBDisplay) display {
if (mDisplayMask != display) {
mDisplayMask = display;
[self positionSubViews];
self.needsDisplay = YES;
}
}
//--------------------------------------------------------------------------------------------------
/**
* Handler for selection changes in the zoom menu.
*/
- (void) zoomItemAction: (id) sender {
NSNumber *selectedFactorObject = [[sender selectedCell] representedObject];
if (selectedFactorObject == nil) {
NSLog(@"Scale popup action: setting arbitrary zoom factors is not yet supported.");
return;
} else {
[self setScaleFactor: selectedFactorObject.floatValue adjustPopup: NO];
}
}
//--------------------------------------------------------------------------------------------------
- (void) setScaleFactor: (float) newScaleFactor adjustPopup: (BOOL) flag {
if (mScaleFactor != newScaleFactor) {
mScaleFactor = newScaleFactor;
if (flag) {
unsigned count = 0;
unsigned numberOfDefaultItems = sizeof(DefaultScaleMenuFactors) / sizeof(float);
// We only work with some preset zoom values. If the given value does not correspond
// to one then show no selection.
while (count < numberOfDefaultItems && (std::abs(newScaleFactor - DefaultScaleMenuFactors[count]) > 0.07))
count++;
if (count == numberOfDefaultItems)
[mZoomPopup selectItemAtIndex: -1];
else {
[mZoomPopup selectItemAtIndex: count];
// Set scale factor to found preset value if it comes close.
mScaleFactor = DefaultScaleMenuFactors[count];
}
} else {
// Internally set. Notify owner.
[mCallback notify: IBNZoomChanged message: nil location: NSZeroPoint value: newScaleFactor];
}
}
}
//--------------------------------------------------------------------------------------------------
/**
* Called from the notification method to update the caret position display.
*/
- (void) setCaretPosition: (NSPoint) position {
// Make the position one-based.
int newX = (int) position.x + 1;
int newY = (int) position.y + 1;
if (mCurrentCaretX != newX || mCurrentCaretY != newY) {
mCurrentCaretX = newX;
mCurrentCaretY = newY;
mCaretPositionLabel.stringValue = [NSString stringWithFormat: @"%d:%d", newX, newY];
}
}
//--------------------------------------------------------------------------------------------------
/**
* Makes the bar resize to the smallest width that can accommodate the currently enabled items.
*/
- (void) sizeToFit {
NSRect frame = self.frame;
frame.size.width = 0;
if (mDisplayMask & IBShowZoom)
frame.size.width += mZoomPopup.frame.size.width;
if (mDisplayMask & IBShowCaretPosition)
frame.size.width += mCaretPositionLabel.frame.size.width;
if (mDisplayMask & IBShowStatusText)
frame.size.width += mStatusTextLabel.frame.size.width;
self.frame = frame;
}
@end

View File

@ -0,0 +1,35 @@
/*
* InfoBarCommunicator.h - Definitions of a communication protocol and other data types used for
* the info bar implementation.
*
* Mike Lischke <mlischke@sun.com>
*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
*/
typedef NS_OPTIONS(NSUInteger, IBDisplay) {
IBShowZoom = 0x01,
IBShowCaretPosition = 0x02,
IBShowStatusText = 0x04,
IBShowAll = 0xFF
};
/**
* The info bar communicator protocol is used for communication between ScintillaView and its
* information bar component. Using this protocol decouples any potential info target from the main
* ScintillaView implementation. The protocol is used two-way.
*/
typedef NS_ENUM(NSInteger, NotificationType) {
IBNZoomChanged, // The user selected another zoom value.
IBNCaretChanged, // The caret in the editor changed.
IBNStatusChanged, // The application set a new status message.
};
@protocol InfoBarCommunicator
- (void) notify: (NotificationType) type message: (NSString *) message location: (NSPoint) location
value: (float) value;
- (void) setCallback: (id <InfoBarCommunicator>) callback;
@end

View File

@ -0,0 +1,141 @@
/**
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
* @file PlatCocoa.h
*/
#ifndef PLATCOCOA_H
#define PLATCOCOA_H
#include <cstdlib>
#include <cassert>
#include <cstring>
#include <cstdio>
#include <Cocoa/Cocoa.h>
#include "ScintillaTypes.h"
#include "ScintillaMessages.h"
#include "Debugging.h"
#include "Geometry.h"
#include "Platform.h"
#include "QuartzTextLayout.h"
NSRect PRectangleToNSRect(const Scintilla::Internal::PRectangle &rc);
Scintilla::Internal::PRectangle NSRectToPRectangle(const NSRect &rc);
CFStringEncoding EncodingFromCharacterSet(bool unicode, Scintilla::CharacterSet characterSet);
@interface ScintillaContextMenu : NSMenu {
Scintilla::Internal::ScintillaCocoa *owner;
}
- (void) handleCommand: (NSMenuItem *) sender;
- (void) setOwner: (Scintilla::Internal::ScintillaCocoa *) newOwner;
@end
namespace Scintilla::Internal {
// A class to do the actual text rendering for us using Quartz 2D.
class SurfaceImpl : public Surface {
private:
SurfaceMode mode;
CGContextRef gc;
/** If the surface is a bitmap context, contains a reference to the bitmap data. */
std::unique_ptr<uint8_t[]> bitmapData;
/** If the surface is a bitmap context, stores the dimensions of the bitmap. */
int bitmapWidth;
int bitmapHeight;
/** Set the CGContext's fill colour to the specified desired colour. */
void FillColour(ColourRGBA fill);
void PenColourAlpha(ColourRGBA fore);
void SetFillStroke(FillStroke fillStroke);
// 24-bit RGB+A bitmap data constants
static const int BITS_PER_COMPONENT = 8;
static const int BITS_PER_PIXEL = BITS_PER_COMPONENT * 4;
static const int BYTES_PER_PIXEL = BITS_PER_PIXEL / 8;
bool UnicodeMode() const noexcept;
void Clear();
public:
SurfaceImpl();
SurfaceImpl(const SurfaceImpl *surface, int width, int height);
~SurfaceImpl() override;
void Init(WindowID wid) override;
void Init(SurfaceID sid, WindowID wid) override;
std::unique_ptr<Surface> AllocatePixMap(int width, int height) override;
std::unique_ptr<SurfaceImpl> AllocatePixMapImplementation(int width, int height);
CGContextRef GetContext() { return gc; }
void SetMode(SurfaceMode mode) override;
void Release() noexcept override;
int SupportsFeature(Scintilla::Supports feature) noexcept override;
bool Initialised() override;
/** Returns a CGImageRef that represents the surface. Returns NULL if this is not possible. */
CGImageRef CreateImage();
void CopyImageRectangle(SurfaceImpl *source, PRectangle srcRect, PRectangle dstRect);
int LogPixelsY() override;
int PixelDivisions() override;
int DeviceHeightFont(int points) override;
void LineDraw(Point start, Point end, Stroke stroke) override;
void PolyLine(const Point *pts, size_t npts, Stroke stroke) override;
void Polygon(const Scintilla::Internal::Point *pts, size_t npts, FillStroke fillStroke) override;
void RectangleDraw(PRectangle rc, FillStroke fillStroke) override;
void RectangleFrame(PRectangle rc, Stroke stroke) override;
void FillRectangle(PRectangle rc, Fill fill) override;
void FillRectangleAligned(PRectangle rc, Fill fill) override;
void FillRectangle(PRectangle rc, Surface &surfacePattern) override;
void RoundedRectangle(PRectangle rc, FillStroke fillStroke) override;
void AlphaRectangle(PRectangle rc, XYPOSITION cornerSize, FillStroke fillStroke) override;
void GradientRectangle(PRectangle rc, const std::vector<ColourStop> &stops, GradientOptions options) override;
void DrawRGBAImage(PRectangle rc, int width, int height, const unsigned char *pixelsImage) override;
void Ellipse(PRectangle rc, FillStroke fillStroke) override;
void Stadium(PRectangle rc, FillStroke fillStroke, Ends ends) override;
void Copy(PRectangle rc, Scintilla::Internal::Point from, Surface &surfaceSource) override;
std::unique_ptr<IScreenLineLayout> Layout(const IScreenLine *screenLine) override;
void DrawTextNoClip(PRectangle rc, const Font *font_, XYPOSITION ybase, std::string_view text, ColourRGBA fore,
ColourRGBA back) override;
void DrawTextClipped(PRectangle rc, const Font *font_, XYPOSITION ybase, std::string_view text, ColourRGBA fore,
ColourRGBA back) override;
void DrawTextTransparent(PRectangle rc, const Font *font_, XYPOSITION ybase, std::string_view text, ColourRGBA fore) override;
void MeasureWidths(const Font *font_, std::string_view text, XYPOSITION *positions) override;
XYPOSITION WidthText(const Font *font_, std::string_view text) override;
void DrawTextNoClipUTF8(PRectangle rc, const Font *font_, XYPOSITION ybase, std::string_view text, ColourRGBA fore,
ColourRGBA back) override;
void DrawTextClippedUTF8(PRectangle rc, const Font *font_, XYPOSITION ybase, std::string_view text, ColourRGBA fore,
ColourRGBA back) override;
void DrawTextTransparentUTF8(PRectangle rc, const Font *font_, XYPOSITION ybase, std::string_view text, ColourRGBA fore) override;
void MeasureWidthsUTF8(const Font *font_, std::string_view text, XYPOSITION *positions) override;
XYPOSITION WidthTextUTF8(const Font *font_, std::string_view text) override;
XYPOSITION Ascent(const Font *font_) override;
XYPOSITION Descent(const Font *font_) override;
XYPOSITION InternalLeading(const Font *font_) override;
XYPOSITION Height(const Font *font_) override;
XYPOSITION AverageCharWidth(const Font *font_) override;
void SetClip(PRectangle rc) override;
void PopClip() override;
void FlushCachedState() override;
void FlushDrawing() override;
}; // SurfaceImpl class
} // Scintilla namespace
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,101 @@
/*
* QuartzTextLayout.h
*
* Original Code by Evan Jones on Wed Oct 02 2002.
* Contributors:
* Shane Caraveo, ActiveState
* Bernd Paradies, Adobe
*
*/
#ifndef QUARTZTEXTLAYOUT_H
#define QUARTZTEXTLAYOUT_H
#include <Cocoa/Cocoa.h>
#include "QuartzTextStyle.h"
class QuartzTextLayout {
public:
/** Create a text layout for drawing. */
QuartzTextLayout(std::string_view sv, CFStringEncoding encoding, const QuartzTextStyle *r) {
encodingUsed = encoding;
const UInt8 *puiBuffer = reinterpret_cast<const UInt8 *>(sv.data());
CFStringRef str = CFStringCreateWithBytes(NULL, puiBuffer, sv.length(), encodingUsed, false);
if (!str) {
// Failed to decode bytes into string with given encoding so try
// MacRoman which should accept any byte.
encodingUsed = kCFStringEncodingMacRoman;
str = CFStringCreateWithBytes(NULL, puiBuffer, sv.length(), encodingUsed, false);
}
if (!str) {
return;
}
stringLength = CFStringGetLength(str);
CFMutableDictionaryRef stringAttribs = r->getCTStyle();
mString = ::CFAttributedStringCreate(NULL, str, stringAttribs);
mLine = ::CTLineCreateWithAttributedString(mString);
CFRelease(str);
}
~QuartzTextLayout() {
if (mString) {
CFRelease(mString);
mString = NULL;
}
if (mLine) {
CFRelease(mLine);
mLine = NULL;
}
}
/** Draw the text layout into a CGContext at the specified position.
* @param gc The CGContext in which to draw the text.
* @param x The x axis position to draw the baseline in the current CGContext.
* @param y The y axis position to draw the baseline in the current CGContext. */
void draw(CGContextRef gc, double x, double y) {
if (!mLine)
return;
::CGContextSetTextMatrix(gc, CGAffineTransformMakeScale(1.0, -1.0));
// Set the text drawing position.
::CGContextSetTextPosition(gc, x, y);
// And finally, draw!
::CTLineDraw(mLine, gc);
}
float MeasureStringWidth() {
if (mLine == NULL)
return 0.0f;
return static_cast<float>(::CTLineGetTypographicBounds(mLine, NULL, NULL, NULL));
}
CTLineRef getCTLine() {
return mLine;
}
CFIndex getStringLength() {
return stringLength;
}
CFStringEncoding getEncoding() {
return encodingUsed;
}
private:
CFAttributedStringRef mString = NULL;
CTLineRef mLine = NULL;
CFIndex stringLength = 0;
CFStringEncoding encodingUsed = kCFStringEncodingMacRoman;
};
#endif

View File

@ -0,0 +1,95 @@
/*
* QuartzTextStyle.h
*
* Created by Evan Jones on Wed Oct 02 2002.
*
*/
#ifndef QUARTZTEXTSTYLE_H
#define QUARTZTEXTSTYLE_H
#include "QuartzTextStyleAttribute.h"
class QuartzTextStyle {
public:
QuartzTextStyle() {
fontRef = NULL;
styleDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 2,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
characterSet = Scintilla::CharacterSet::Ansi;
}
QuartzTextStyle(const QuartzTextStyle *other) {
// Does not copy font colour attribute
fontRef = static_cast<CTFontRef>(CFRetain(other->fontRef));
styleDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 2,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
CFDictionaryAddValue(styleDict, kCTFontAttributeName, fontRef);
characterSet = other->characterSet;
}
~QuartzTextStyle() {
if (styleDict != NULL) {
CFRelease(styleDict);
styleDict = NULL;
}
if (fontRef) {
CFRelease(fontRef);
fontRef = NULL;
}
}
CFMutableDictionaryRef getCTStyle() const {
return styleDict;
}
void setCTStyleColour(CGColor *inColour) {
CFDictionarySetValue(styleDict, kCTForegroundColorAttributeName, inColour);
}
float getAscent() const {
return static_cast<float>(::CTFontGetAscent(fontRef));
}
float getDescent() const {
return static_cast<float>(::CTFontGetDescent(fontRef));
}
float getLeading() const {
return static_cast<float>(::CTFontGetLeading(fontRef));
}
void setFontRef(CTFontRef inRef, Scintilla::CharacterSet characterSet_) {
fontRef = inRef;
characterSet = characterSet_;
if (styleDict != NULL)
CFRelease(styleDict);
styleDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 2,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
CFDictionaryAddValue(styleDict, kCTFontAttributeName, fontRef);
}
CTFontRef getFontRef() const noexcept {
return fontRef;
}
Scintilla::CharacterSet getCharacterSet() const noexcept {
return characterSet;
}
private:
CFMutableDictionaryRef styleDict;
CTFontRef fontRef;
Scintilla::CharacterSet characterSet;
};
#endif

View File

@ -0,0 +1,72 @@
/**
* QuartzTextStyleAttribute.h
*
* Original Code by Evan Jones on Wed Oct 02 2002.
* Contributors:
* Shane Caraveo, ActiveState
* Bernd Paradies, Adobe
*
*/
#ifndef QUARTZTEXTSTYLEATTRIBUTE_H
#define QUARTZTEXTSTYLEATTRIBUTE_H
class QuartzFont {
public:
/** Create a font style from a name. */
QuartzFont(const char *name, size_t length, float size, Scintilla::FontWeight weight, bool italic) {
assert(name != NULL && length > 0 && name[length] == '\0');
CFStringRef fontName = CFStringCreateWithCString(kCFAllocatorDefault, name, kCFStringEncodingMacRoman);
assert(fontName != NULL);
bool bold = weight > Scintilla::FontWeight::Normal;
if (bold || italic) {
CTFontSymbolicTraits desiredTrait = 0;
CTFontSymbolicTraits traitMask = 0;
// if bold was specified, add the trait
if (bold) {
desiredTrait |= kCTFontBoldTrait;
traitMask |= kCTFontBoldTrait;
}
// if italic was specified, add the trait
if (italic) {
desiredTrait |= kCTFontItalicTrait;
traitMask |= kCTFontItalicTrait;
}
// create a font and then a copy of it with the sym traits
CTFontRef iFont = ::CTFontCreateWithName(fontName, size, NULL);
fontid = ::CTFontCreateCopyWithSymbolicTraits(iFont, size, NULL, desiredTrait, traitMask);
if (fontid) {
CFRelease(iFont);
} else {
// Traits failed so use base font
fontid = iFont;
}
} else {
// create the font, no traits
fontid = ::CTFontCreateWithName(fontName, size, NULL);
}
if (!fontid) {
// Failed to create requested font so use font always present
fontid = ::CTFontCreateWithName((CFStringRef)@"Monaco", size, NULL);
}
CFRelease(fontName);
}
CTFontRef getFontID() {
return fontid;
}
private:
CTFontRef fontid;
};
#endif

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>5.5.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2020 Neil Hodgson. All rights reserved.</string>
</dict>
</plist>

View File

@ -0,0 +1,769 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
2807B4EA28964CA40063A31A /* ChangeHistory.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2807B4E828964CA40063A31A /* ChangeHistory.cxx */; };
2807B4EB28964CA40063A31A /* ChangeHistory.h in Headers */ = {isa = PBXBuildFile; fileRef = 2807B4E928964CA40063A31A /* ChangeHistory.h */; };
282936DF24E2D55D00C84BA2 /* QuartzTextLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936D324E2D55D00C84BA2 /* QuartzTextLayout.h */; };
282936E024E2D55D00C84BA2 /* InfoBar.mm in Sources */ = {isa = PBXBuildFile; fileRef = 282936D424E2D55D00C84BA2 /* InfoBar.mm */; };
282936E124E2D55D00C84BA2 /* QuartzTextStyleAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936D524E2D55D00C84BA2 /* QuartzTextStyleAttribute.h */; };
282936E224E2D55D00C84BA2 /* ScintillaCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936D624E2D55D00C84BA2 /* ScintillaCocoa.h */; };
282936E324E2D55D00C84BA2 /* PlatCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 282936D724E2D55D00C84BA2 /* PlatCocoa.mm */; };
282936E424E2D55D00C84BA2 /* PlatCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936D824E2D55D00C84BA2 /* PlatCocoa.h */; };
282936E524E2D55D00C84BA2 /* InfoBarCommunicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936D924E2D55D00C84BA2 /* InfoBarCommunicator.h */; settings = {ATTRIBUTES = (Public, ); }; };
282936E624E2D55D00C84BA2 /* InfoBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936DA24E2D55D00C84BA2 /* InfoBar.h */; settings = {ATTRIBUTES = (Public, ); }; };
282936E724E2D55D00C84BA2 /* QuartzTextStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936DB24E2D55D00C84BA2 /* QuartzTextStyle.h */; };
282936E824E2D55D00C84BA2 /* ScintillaView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 282936DC24E2D55D00C84BA2 /* ScintillaView.mm */; };
282936E924E2D55D00C84BA2 /* ScintillaCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 282936DD24E2D55D00C84BA2 /* ScintillaCocoa.mm */; };
282936EA24E2D55D00C84BA2 /* ScintillaView.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936DE24E2D55D00C84BA2 /* ScintillaView.h */; settings = {ATTRIBUTES = (Public, ); }; };
2829372E24E2D58800C84BA2 /* DBCS.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 282936EB24E2D58400C84BA2 /* DBCS.cxx */; };
2829372F24E2D58800C84BA2 /* ElapsedPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936EC24E2D58400C84BA2 /* ElapsedPeriod.h */; };
2829373024E2D58800C84BA2 /* CallTip.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936ED24E2D58400C84BA2 /* CallTip.h */; };
2829373124E2D58800C84BA2 /* PositionCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936EE24E2D58400C84BA2 /* PositionCache.h */; };
2829373224E2D58800C84BA2 /* KeyMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936EF24E2D58400C84BA2 /* KeyMap.h */; };
2829373324E2D58800C84BA2 /* LineMarker.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 282936F024E2D58400C84BA2 /* LineMarker.cxx */; };
2829373524E2D58800C84BA2 /* Style.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936F224E2D58400C84BA2 /* Style.h */; };
2829373624E2D58800C84BA2 /* UniqueString.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 282936F324E2D58400C84BA2 /* UniqueString.cxx */; };
2829373724E2D58800C84BA2 /* RunStyles.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936F424E2D58400C84BA2 /* RunStyles.h */; };
2829373824E2D58800C84BA2 /* RESearch.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936F524E2D58400C84BA2 /* RESearch.h */; };
2829373924E2D58800C84BA2 /* Indicator.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 282936F624E2D58400C84BA2 /* Indicator.cxx */; };
2829373A24E2D58800C84BA2 /* MarginView.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936F724E2D58400C84BA2 /* MarginView.h */; };
2829373B24E2D58800C84BA2 /* Position.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936F824E2D58400C84BA2 /* Position.h */; };
2829373C24E2D58800C84BA2 /* CaseFolder.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 282936F924E2D58400C84BA2 /* CaseFolder.cxx */; };
2829373D24E2D58800C84BA2 /* PerLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936FA24E2D58400C84BA2 /* PerLine.h */; };
2829373E24E2D58800C84BA2 /* Indicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936FB24E2D58400C84BA2 /* Indicator.h */; };
2829373F24E2D58800C84BA2 /* UniConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936FC24E2D58400C84BA2 /* UniConversion.h */; };
2829374024E2D58800C84BA2 /* XPM.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 282936FD24E2D58400C84BA2 /* XPM.cxx */; };
2829374124E2D58800C84BA2 /* CharClassify.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936FE24E2D58400C84BA2 /* CharClassify.h */; };
2829374224E2D58800C84BA2 /* Decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = 282936FF24E2D58400C84BA2 /* Decoration.h */; };
2829374524E2D58800C84BA2 /* PositionCache.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829370224E2D58500C84BA2 /* PositionCache.cxx */; };
2829374724E2D58800C84BA2 /* Style.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829370424E2D58500C84BA2 /* Style.cxx */; };
2829374824E2D58800C84BA2 /* RESearch.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829370524E2D58500C84BA2 /* RESearch.cxx */; };
2829374924E2D58800C84BA2 /* CallTip.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829370624E2D58500C84BA2 /* CallTip.cxx */; };
2829374A24E2D58800C84BA2 /* ContractionState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829370724E2D58500C84BA2 /* ContractionState.h */; };
2829374B24E2D58800C84BA2 /* Decoration.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829370824E2D58500C84BA2 /* Decoration.cxx */; };
2829374C24E2D58800C84BA2 /* DBCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829370924E2D58500C84BA2 /* DBCS.h */; };
2829374D24E2D58800C84BA2 /* AutoComplete.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829370A24E2D58500C84BA2 /* AutoComplete.h */; };
2829374E24E2D58800C84BA2 /* KeyMap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829370B24E2D58500C84BA2 /* KeyMap.cxx */; };
2829374F24E2D58800C84BA2 /* ViewStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829370C24E2D58500C84BA2 /* ViewStyle.h */; };
2829375024E2D58800C84BA2 /* Selection.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829370D24E2D58500C84BA2 /* Selection.cxx */; };
2829375124E2D58800C84BA2 /* ContractionState.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829370E24E2D58500C84BA2 /* ContractionState.cxx */; };
2829375224E2D58800C84BA2 /* UniConversion.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829370F24E2D58500C84BA2 /* UniConversion.cxx */; };
2829375324E2D58800C84BA2 /* PerLine.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829371024E2D58500C84BA2 /* PerLine.cxx */; };
2829375424E2D58800C84BA2 /* SparseVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829371124E2D58500C84BA2 /* SparseVector.h */; };
2829375524E2D58800C84BA2 /* EditModel.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829371224E2D58500C84BA2 /* EditModel.cxx */; };
2829375624E2D58800C84BA2 /* EditView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829371324E2D58600C84BA2 /* EditView.h */; };
2829375724E2D58800C84BA2 /* CaseConvert.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829371424E2D58600C84BA2 /* CaseConvert.cxx */; };
2829375824E2D58800C84BA2 /* CharClassify.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829371524E2D58600C84BA2 /* CharClassify.cxx */; };
2829375924E2D58800C84BA2 /* AutoComplete.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829371624E2D58600C84BA2 /* AutoComplete.cxx */; };
2829375A24E2D58800C84BA2 /* ViewStyle.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829371724E2D58600C84BA2 /* ViewStyle.cxx */; };
2829375B24E2D58800C84BA2 /* MarginView.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829371824E2D58600C84BA2 /* MarginView.cxx */; };
2829375C24E2D58800C84BA2 /* CellBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829371924E2D58600C84BA2 /* CellBuffer.h */; };
2829375D24E2D58800C84BA2 /* Document.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829371A24E2D58600C84BA2 /* Document.cxx */; };
2829375E24E2D58800C84BA2 /* LineMarker.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829371B24E2D58600C84BA2 /* LineMarker.h */; };
2829375F24E2D58800C84BA2 /* Editor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829371C24E2D58600C84BA2 /* Editor.h */; };
2829376024E2D58800C84BA2 /* XPM.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829371D24E2D58600C84BA2 /* XPM.h */; };
2829376124E2D58800C84BA2 /* ScintillaBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829371E24E2D58600C84BA2 /* ScintillaBase.h */; };
2829376224E2D58800C84BA2 /* Partitioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829371F24E2D58700C84BA2 /* Partitioning.h */; };
2829376424E2D58800C84BA2 /* SplitVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829372124E2D58700C84BA2 /* SplitVector.h */; };
2829376524E2D58800C84BA2 /* UniqueString.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829372224E2D58700C84BA2 /* UniqueString.h */; };
2829376624E2D58800C84BA2 /* CaseConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829372324E2D58700C84BA2 /* CaseConvert.h */; };
2829376724E2D58800C84BA2 /* ScintillaBase.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829372424E2D58700C84BA2 /* ScintillaBase.cxx */; };
2829376824E2D58800C84BA2 /* CaseFolder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829372524E2D58700C84BA2 /* CaseFolder.h */; };
2829376924E2D58800C84BA2 /* CellBuffer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829372624E2D58700C84BA2 /* CellBuffer.cxx */; };
2829376A24E2D58800C84BA2 /* EditModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829372724E2D58700C84BA2 /* EditModel.h */; };
2829376B24E2D58800C84BA2 /* Editor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829372824E2D58700C84BA2 /* Editor.cxx */; };
2829376C24E2D58800C84BA2 /* Selection.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829372924E2D58700C84BA2 /* Selection.h */; };
2829376D24E2D58800C84BA2 /* RunStyles.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829372A24E2D58800C84BA2 /* RunStyles.cxx */; };
2829376F24E2D58800C84BA2 /* Document.h in Headers */ = {isa = PBXBuildFile; fileRef = 2829372C24E2D58800C84BA2 /* Document.h */; };
2829377024E2D58800C84BA2 /* EditView.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2829372D24E2D58800C84BA2 /* EditView.cxx */; };
282937AA24E2D60E00C84BA2 /* res in Resources */ = {isa = PBXBuildFile; fileRef = 282937A924E2D60E00C84BA2 /* res */; };
2867917C26BB448C007C2905 /* mac_cursor_busy.png in Resources */ = {isa = PBXBuildFile; fileRef = 2867917626BB448C007C2905 /* mac_cursor_busy.png */; };
2867917D26BB448C007C2905 /* mac_cursor_flipped@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2867917726BB448C007C2905 /* mac_cursor_flipped@2x.png */; };
2867917E26BB448C007C2905 /* info_bar_bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 2867917826BB448C007C2905 /* info_bar_bg.png */; };
2867917F26BB448C007C2905 /* mac_cursor_busy@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2867917926BB448C007C2905 /* mac_cursor_busy@2x.png */; };
2867918026BB448C007C2905 /* mac_cursor_flipped.png in Resources */ = {isa = PBXBuildFile; fileRef = 2867917A26BB448C007C2905 /* mac_cursor_flipped.png */; };
2867918126BB448C007C2905 /* info_bar_bg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2867917B26BB448C007C2905 /* info_bar_bg@2x.png */; };
286F8E6325F84F7400EC8D60 /* Sci_Position.h in Headers */ = {isa = PBXBuildFile; fileRef = 286F8E5F25F84F7400EC8D60 /* Sci_Position.h */; settings = {ATTRIBUTES = (Public, ); }; };
286F8E6425F84F7400EC8D60 /* ILexer.h in Headers */ = {isa = PBXBuildFile; fileRef = 286F8E6025F84F7400EC8D60 /* ILexer.h */; settings = {ATTRIBUTES = (Public, ); }; };
286F8E6525F84F7400EC8D60 /* ILoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 286F8E6125F84F7400EC8D60 /* ILoader.h */; settings = {ATTRIBUTES = (Public, ); }; };
286F8E6625F84F7400EC8D60 /* Scintilla.h in Headers */ = {isa = PBXBuildFile; fileRef = 286F8E6225F84F7400EC8D60 /* Scintilla.h */; settings = {ATTRIBUTES = (Public, ); }; };
286F8EDE260448C300EC8D60 /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 286F8EDB260448C300EC8D60 /* Platform.h */; };
286F8EDF260448C300EC8D60 /* Geometry.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 286F8EDC260448C300EC8D60 /* Geometry.cxx */; };
286F8EE0260448C300EC8D60 /* Geometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 286F8EDD260448C300EC8D60 /* Geometry.h */; };
287F3C6A246F90240040E76F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 287F3C69246F90240040E76F /* Cocoa.framework */; };
287F3C6C246F90300040E76F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 287F3C6B246F90300040E76F /* QuartzCore.framework */; };
28B962A52B6AF44F00ACCD96 /* UndoHistory.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28B962A32B6AF44F00ACCD96 /* UndoHistory.cxx */; };
28B962A62B6AF44F00ACCD96 /* UndoHistory.h in Headers */ = {isa = PBXBuildFile; fileRef = 28B962A42B6AF44F00ACCD96 /* UndoHistory.h */; };
28EA9CAE255894B4007710C4 /* CharacterCategoryMap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28EA9CAA255894B4007710C4 /* CharacterCategoryMap.cxx */; };
28EA9CAF255894B4007710C4 /* CharacterType.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28EA9CAB255894B4007710C4 /* CharacterType.cxx */; };
28EA9CB0255894B4007710C4 /* CharacterCategoryMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 28EA9CAC255894B4007710C4 /* CharacterCategoryMap.h */; };
28EA9CB1255894B4007710C4 /* CharacterType.h in Headers */ = {isa = PBXBuildFile; fileRef = 28EA9CAD255894B4007710C4 /* CharacterType.h */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
2807B4E828964CA40063A31A /* ChangeHistory.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChangeHistory.cxx; path = ../../src/ChangeHistory.cxx; sourceTree = "<group>"; };
2807B4E928964CA40063A31A /* ChangeHistory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChangeHistory.h; path = ../../src/ChangeHistory.h; sourceTree = "<group>"; };
282936D324E2D55D00C84BA2 /* QuartzTextLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = QuartzTextLayout.h; path = ../QuartzTextLayout.h; sourceTree = "<group>"; };
282936D424E2D55D00C84BA2 /* InfoBar.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = InfoBar.mm; path = ../InfoBar.mm; sourceTree = "<group>"; };
282936D524E2D55D00C84BA2 /* QuartzTextStyleAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = QuartzTextStyleAttribute.h; path = ../QuartzTextStyleAttribute.h; sourceTree = "<group>"; };
282936D624E2D55D00C84BA2 /* ScintillaCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScintillaCocoa.h; path = ../ScintillaCocoa.h; sourceTree = "<group>"; };
282936D724E2D55D00C84BA2 /* PlatCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = PlatCocoa.mm; path = ../PlatCocoa.mm; sourceTree = "<group>"; };
282936D824E2D55D00C84BA2 /* PlatCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlatCocoa.h; path = ../PlatCocoa.h; sourceTree = "<group>"; };
282936D924E2D55D00C84BA2 /* InfoBarCommunicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InfoBarCommunicator.h; path = ../InfoBarCommunicator.h; sourceTree = "<group>"; };
282936DA24E2D55D00C84BA2 /* InfoBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InfoBar.h; path = ../InfoBar.h; sourceTree = "<group>"; };
282936DB24E2D55D00C84BA2 /* QuartzTextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = QuartzTextStyle.h; path = ../QuartzTextStyle.h; sourceTree = "<group>"; };
282936DC24E2D55D00C84BA2 /* ScintillaView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ScintillaView.mm; path = ../ScintillaView.mm; sourceTree = "<group>"; };
282936DD24E2D55D00C84BA2 /* ScintillaCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ScintillaCocoa.mm; path = ../ScintillaCocoa.mm; sourceTree = "<group>"; };
282936DE24E2D55D00C84BA2 /* ScintillaView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScintillaView.h; path = ../ScintillaView.h; sourceTree = "<group>"; };
282936EB24E2D58400C84BA2 /* DBCS.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DBCS.cxx; path = ../../src/DBCS.cxx; sourceTree = "<group>"; };
282936EC24E2D58400C84BA2 /* ElapsedPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ElapsedPeriod.h; path = ../../src/ElapsedPeriod.h; sourceTree = "<group>"; };
282936ED24E2D58400C84BA2 /* CallTip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CallTip.h; path = ../../src/CallTip.h; sourceTree = "<group>"; };
282936EE24E2D58400C84BA2 /* PositionCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PositionCache.h; path = ../../src/PositionCache.h; sourceTree = "<group>"; };
282936EF24E2D58400C84BA2 /* KeyMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KeyMap.h; path = ../../src/KeyMap.h; sourceTree = "<group>"; };
282936F024E2D58400C84BA2 /* LineMarker.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LineMarker.cxx; path = ../../src/LineMarker.cxx; sourceTree = "<group>"; };
282936F224E2D58400C84BA2 /* Style.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Style.h; path = ../../src/Style.h; sourceTree = "<group>"; };
282936F324E2D58400C84BA2 /* UniqueString.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UniqueString.cxx; path = ../../src/UniqueString.cxx; sourceTree = "<group>"; };
282936F424E2D58400C84BA2 /* RunStyles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RunStyles.h; path = ../../src/RunStyles.h; sourceTree = "<group>"; };
282936F524E2D58400C84BA2 /* RESearch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RESearch.h; path = ../../src/RESearch.h; sourceTree = "<group>"; };
282936F624E2D58400C84BA2 /* Indicator.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Indicator.cxx; path = ../../src/Indicator.cxx; sourceTree = "<group>"; };
282936F724E2D58400C84BA2 /* MarginView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MarginView.h; path = ../../src/MarginView.h; sourceTree = "<group>"; };
282936F824E2D58400C84BA2 /* Position.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Position.h; path = ../../src/Position.h; sourceTree = "<group>"; };
282936F924E2D58400C84BA2 /* CaseFolder.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CaseFolder.cxx; path = ../../src/CaseFolder.cxx; sourceTree = "<group>"; };
282936FA24E2D58400C84BA2 /* PerLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PerLine.h; path = ../../src/PerLine.h; sourceTree = "<group>"; };
282936FB24E2D58400C84BA2 /* Indicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Indicator.h; path = ../../src/Indicator.h; sourceTree = "<group>"; };
282936FC24E2D58400C84BA2 /* UniConversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UniConversion.h; path = ../../src/UniConversion.h; sourceTree = "<group>"; };
282936FD24E2D58400C84BA2 /* XPM.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = XPM.cxx; path = ../../src/XPM.cxx; sourceTree = "<group>"; };
282936FE24E2D58400C84BA2 /* CharClassify.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CharClassify.h; path = ../../src/CharClassify.h; sourceTree = "<group>"; };
282936FF24E2D58400C84BA2 /* Decoration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Decoration.h; path = ../../src/Decoration.h; sourceTree = "<group>"; };
2829370224E2D58500C84BA2 /* PositionCache.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PositionCache.cxx; path = ../../src/PositionCache.cxx; sourceTree = "<group>"; };
2829370424E2D58500C84BA2 /* Style.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Style.cxx; path = ../../src/Style.cxx; sourceTree = "<group>"; };
2829370524E2D58500C84BA2 /* RESearch.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RESearch.cxx; path = ../../src/RESearch.cxx; sourceTree = "<group>"; };
2829370624E2D58500C84BA2 /* CallTip.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CallTip.cxx; path = ../../src/CallTip.cxx; sourceTree = "<group>"; };
2829370724E2D58500C84BA2 /* ContractionState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ContractionState.h; path = ../../src/ContractionState.h; sourceTree = "<group>"; };
2829370824E2D58500C84BA2 /* Decoration.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Decoration.cxx; path = ../../src/Decoration.cxx; sourceTree = "<group>"; };
2829370924E2D58500C84BA2 /* DBCS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DBCS.h; path = ../../src/DBCS.h; sourceTree = "<group>"; };
2829370A24E2D58500C84BA2 /* AutoComplete.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AutoComplete.h; path = ../../src/AutoComplete.h; sourceTree = "<group>"; };
2829370B24E2D58500C84BA2 /* KeyMap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KeyMap.cxx; path = ../../src/KeyMap.cxx; sourceTree = "<group>"; };
2829370C24E2D58500C84BA2 /* ViewStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ViewStyle.h; path = ../../src/ViewStyle.h; sourceTree = "<group>"; };
2829370D24E2D58500C84BA2 /* Selection.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Selection.cxx; path = ../../src/Selection.cxx; sourceTree = "<group>"; };
2829370E24E2D58500C84BA2 /* ContractionState.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ContractionState.cxx; path = ../../src/ContractionState.cxx; sourceTree = "<group>"; };
2829370F24E2D58500C84BA2 /* UniConversion.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UniConversion.cxx; path = ../../src/UniConversion.cxx; sourceTree = "<group>"; };
2829371024E2D58500C84BA2 /* PerLine.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PerLine.cxx; path = ../../src/PerLine.cxx; sourceTree = "<group>"; };
2829371124E2D58500C84BA2 /* SparseVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SparseVector.h; path = ../../src/SparseVector.h; sourceTree = "<group>"; };
2829371224E2D58500C84BA2 /* EditModel.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EditModel.cxx; path = ../../src/EditModel.cxx; sourceTree = "<group>"; };
2829371324E2D58600C84BA2 /* EditView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditView.h; path = ../../src/EditView.h; sourceTree = "<group>"; };
2829371424E2D58600C84BA2 /* CaseConvert.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CaseConvert.cxx; path = ../../src/CaseConvert.cxx; sourceTree = "<group>"; };
2829371524E2D58600C84BA2 /* CharClassify.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CharClassify.cxx; path = ../../src/CharClassify.cxx; sourceTree = "<group>"; };
2829371624E2D58600C84BA2 /* AutoComplete.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AutoComplete.cxx; path = ../../src/AutoComplete.cxx; sourceTree = "<group>"; };
2829371724E2D58600C84BA2 /* ViewStyle.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ViewStyle.cxx; path = ../../src/ViewStyle.cxx; sourceTree = "<group>"; };
2829371824E2D58600C84BA2 /* MarginView.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MarginView.cxx; path = ../../src/MarginView.cxx; sourceTree = "<group>"; };
2829371924E2D58600C84BA2 /* CellBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CellBuffer.h; path = ../../src/CellBuffer.h; sourceTree = "<group>"; };
2829371A24E2D58600C84BA2 /* Document.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Document.cxx; path = ../../src/Document.cxx; sourceTree = "<group>"; };
2829371B24E2D58600C84BA2 /* LineMarker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LineMarker.h; path = ../../src/LineMarker.h; sourceTree = "<group>"; };
2829371C24E2D58600C84BA2 /* Editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Editor.h; path = ../../src/Editor.h; sourceTree = "<group>"; };
2829371D24E2D58600C84BA2 /* XPM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XPM.h; path = ../../src/XPM.h; sourceTree = "<group>"; };
2829371E24E2D58600C84BA2 /* ScintillaBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScintillaBase.h; path = ../../src/ScintillaBase.h; sourceTree = "<group>"; };
2829371F24E2D58700C84BA2 /* Partitioning.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Partitioning.h; path = ../../src/Partitioning.h; sourceTree = "<group>"; };
2829372124E2D58700C84BA2 /* SplitVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SplitVector.h; path = ../../src/SplitVector.h; sourceTree = "<group>"; };
2829372224E2D58700C84BA2 /* UniqueString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UniqueString.h; path = ../../src/UniqueString.h; sourceTree = "<group>"; };
2829372324E2D58700C84BA2 /* CaseConvert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CaseConvert.h; path = ../../src/CaseConvert.h; sourceTree = "<group>"; };
2829372424E2D58700C84BA2 /* ScintillaBase.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScintillaBase.cxx; path = ../../src/ScintillaBase.cxx; sourceTree = "<group>"; };
2829372524E2D58700C84BA2 /* CaseFolder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CaseFolder.h; path = ../../src/CaseFolder.h; sourceTree = "<group>"; };
2829372624E2D58700C84BA2 /* CellBuffer.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CellBuffer.cxx; path = ../../src/CellBuffer.cxx; sourceTree = "<group>"; };
2829372724E2D58700C84BA2 /* EditModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditModel.h; path = ../../src/EditModel.h; sourceTree = "<group>"; };
2829372824E2D58700C84BA2 /* Editor.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Editor.cxx; path = ../../src/Editor.cxx; sourceTree = "<group>"; };
2829372924E2D58700C84BA2 /* Selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Selection.h; path = ../../src/Selection.h; sourceTree = "<group>"; };
2829372A24E2D58800C84BA2 /* RunStyles.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RunStyles.cxx; path = ../../src/RunStyles.cxx; sourceTree = "<group>"; };
2829372C24E2D58800C84BA2 /* Document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Document.h; path = ../../src/Document.h; sourceTree = "<group>"; };
2829372D24E2D58800C84BA2 /* EditView.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EditView.cxx; path = ../../src/EditView.cxx; sourceTree = "<group>"; };
282937A924E2D60E00C84BA2 /* res */ = {isa = PBXFileReference; lastKnownFileType = folder; name = res; path = ../res; sourceTree = "<group>"; };
282937AF24E2D80E00C84BA2 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
2867917626BB448C007C2905 /* mac_cursor_busy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mac_cursor_busy.png; path = ../res/mac_cursor_busy.png; sourceTree = "<group>"; };
2867917726BB448C007C2905 /* mac_cursor_flipped@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "mac_cursor_flipped@2x.png"; path = "../res/mac_cursor_flipped@2x.png"; sourceTree = "<group>"; };
2867917826BB448C007C2905 /* info_bar_bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = info_bar_bg.png; path = ../res/info_bar_bg.png; sourceTree = "<group>"; };
2867917926BB448C007C2905 /* mac_cursor_busy@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "mac_cursor_busy@2x.png"; path = "../res/mac_cursor_busy@2x.png"; sourceTree = "<group>"; };
2867917A26BB448C007C2905 /* mac_cursor_flipped.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mac_cursor_flipped.png; path = ../res/mac_cursor_flipped.png; sourceTree = "<group>"; };
2867917B26BB448C007C2905 /* info_bar_bg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "info_bar_bg@2x.png"; path = "../res/info_bar_bg@2x.png"; sourceTree = "<group>"; };
286F8E5F25F84F7400EC8D60 /* Sci_Position.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Sci_Position.h; path = ../../include/Sci_Position.h; sourceTree = "<group>"; };
286F8E6025F84F7400EC8D60 /* ILexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ILexer.h; path = ../../include/ILexer.h; sourceTree = "<group>"; };
286F8E6125F84F7400EC8D60 /* ILoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ILoader.h; path = ../../include/ILoader.h; sourceTree = "<group>"; };
286F8E6225F84F7400EC8D60 /* Scintilla.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Scintilla.h; path = ../../include/Scintilla.h; sourceTree = "<group>"; };
286F8EDB260448C300EC8D60 /* Platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Platform.h; path = ../../src/Platform.h; sourceTree = "<group>"; };
286F8EDC260448C300EC8D60 /* Geometry.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Geometry.cxx; path = ../../src/Geometry.cxx; sourceTree = "<group>"; };
286F8EDD260448C300EC8D60 /* Geometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Geometry.h; path = ../../src/Geometry.h; sourceTree = "<group>"; };
287F3C41246F8DC70040E76F /* Scintilla.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Scintilla.framework; sourceTree = BUILT_PRODUCTS_DIR; };
287F3C69246F90240040E76F /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
287F3C6B246F90300040E76F /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
287F3E0F246F9AE50040E76F /* module.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = SOURCE_ROOT; };
28B962A32B6AF44F00ACCD96 /* UndoHistory.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UndoHistory.cxx; path = ../../src/UndoHistory.cxx; sourceTree = "<group>"; };
28B962A42B6AF44F00ACCD96 /* UndoHistory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UndoHistory.h; path = ../../src/UndoHistory.h; sourceTree = "<group>"; };
28EA9CAA255894B4007710C4 /* CharacterCategoryMap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CharacterCategoryMap.cxx; path = ../../src/CharacterCategoryMap.cxx; sourceTree = "<group>"; };
28EA9CAB255894B4007710C4 /* CharacterType.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CharacterType.cxx; path = ../../src/CharacterType.cxx; sourceTree = "<group>"; };
28EA9CAC255894B4007710C4 /* CharacterCategoryMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CharacterCategoryMap.h; path = ../../src/CharacterCategoryMap.h; sourceTree = "<group>"; };
28EA9CAD255894B4007710C4 /* CharacterType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CharacterType.h; path = ../../src/CharacterType.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
287F3C3E246F8DC70040E76F /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
287F3C6C246F90300040E76F /* QuartzCore.framework in Frameworks */,
287F3C6A246F90240040E76F /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
287F3C37246F8DC70040E76F = {
isa = PBXGroup;
children = (
287F3C4D246F8E4A0040E76F /* Backend */,
287F3C4E246F8E560040E76F /* Classes */,
287F3C4F246F8E6E0040E76F /* Resources */,
287F3C42246F8DC70040E76F /* Products */,
287F3C68246F90240040E76F /* Frameworks */,
);
sourceTree = "<group>";
};
287F3C42246F8DC70040E76F /* Products */ = {
isa = PBXGroup;
children = (
287F3C41246F8DC70040E76F /* Scintilla.framework */,
);
name = Products;
sourceTree = "<group>";
};
287F3C4D246F8E4A0040E76F /* Backend */ = {
isa = PBXGroup;
children = (
2829371624E2D58600C84BA2 /* AutoComplete.cxx */,
2829370A24E2D58500C84BA2 /* AutoComplete.h */,
2829370624E2D58500C84BA2 /* CallTip.cxx */,
282936ED24E2D58400C84BA2 /* CallTip.h */,
2829371424E2D58600C84BA2 /* CaseConvert.cxx */,
2829372324E2D58700C84BA2 /* CaseConvert.h */,
282936F924E2D58400C84BA2 /* CaseFolder.cxx */,
2829372524E2D58700C84BA2 /* CaseFolder.h */,
2829372624E2D58700C84BA2 /* CellBuffer.cxx */,
2829371924E2D58600C84BA2 /* CellBuffer.h */,
2807B4E828964CA40063A31A /* ChangeHistory.cxx */,
2807B4E928964CA40063A31A /* ChangeHistory.h */,
28EA9CAA255894B4007710C4 /* CharacterCategoryMap.cxx */,
28EA9CAC255894B4007710C4 /* CharacterCategoryMap.h */,
28EA9CAB255894B4007710C4 /* CharacterType.cxx */,
28EA9CAD255894B4007710C4 /* CharacterType.h */,
2829371524E2D58600C84BA2 /* CharClassify.cxx */,
282936FE24E2D58400C84BA2 /* CharClassify.h */,
2829370E24E2D58500C84BA2 /* ContractionState.cxx */,
2829370724E2D58500C84BA2 /* ContractionState.h */,
282936EB24E2D58400C84BA2 /* DBCS.cxx */,
2829370924E2D58500C84BA2 /* DBCS.h */,
2829370824E2D58500C84BA2 /* Decoration.cxx */,
282936FF24E2D58400C84BA2 /* Decoration.h */,
2829371A24E2D58600C84BA2 /* Document.cxx */,
2829372C24E2D58800C84BA2 /* Document.h */,
2829371224E2D58500C84BA2 /* EditModel.cxx */,
2829372724E2D58700C84BA2 /* EditModel.h */,
2829372824E2D58700C84BA2 /* Editor.cxx */,
2829371C24E2D58600C84BA2 /* Editor.h */,
2829372D24E2D58800C84BA2 /* EditView.cxx */,
2829371324E2D58600C84BA2 /* EditView.h */,
282936EC24E2D58400C84BA2 /* ElapsedPeriod.h */,
286F8EDC260448C300EC8D60 /* Geometry.cxx */,
286F8EDD260448C300EC8D60 /* Geometry.h */,
286F8E6025F84F7400EC8D60 /* ILexer.h */,
286F8E6125F84F7400EC8D60 /* ILoader.h */,
282936F624E2D58400C84BA2 /* Indicator.cxx */,
282936FB24E2D58400C84BA2 /* Indicator.h */,
2829370B24E2D58500C84BA2 /* KeyMap.cxx */,
282936EF24E2D58400C84BA2 /* KeyMap.h */,
282936F024E2D58400C84BA2 /* LineMarker.cxx */,
2829371B24E2D58600C84BA2 /* LineMarker.h */,
2829371824E2D58600C84BA2 /* MarginView.cxx */,
282936F724E2D58400C84BA2 /* MarginView.h */,
2829371F24E2D58700C84BA2 /* Partitioning.h */,
2829371024E2D58500C84BA2 /* PerLine.cxx */,
282936FA24E2D58400C84BA2 /* PerLine.h */,
286F8EDB260448C300EC8D60 /* Platform.h */,
282936F824E2D58400C84BA2 /* Position.h */,
2829370224E2D58500C84BA2 /* PositionCache.cxx */,
282936EE24E2D58400C84BA2 /* PositionCache.h */,
2829370524E2D58500C84BA2 /* RESearch.cxx */,
282936F524E2D58400C84BA2 /* RESearch.h */,
2829372A24E2D58800C84BA2 /* RunStyles.cxx */,
282936F424E2D58400C84BA2 /* RunStyles.h */,
286F8E5F25F84F7400EC8D60 /* Sci_Position.h */,
286F8E6225F84F7400EC8D60 /* Scintilla.h */,
2829372424E2D58700C84BA2 /* ScintillaBase.cxx */,
2829371E24E2D58600C84BA2 /* ScintillaBase.h */,
2829370D24E2D58500C84BA2 /* Selection.cxx */,
2829372924E2D58700C84BA2 /* Selection.h */,
2829371124E2D58500C84BA2 /* SparseVector.h */,
2829372124E2D58700C84BA2 /* SplitVector.h */,
2829370424E2D58500C84BA2 /* Style.cxx */,
282936F224E2D58400C84BA2 /* Style.h */,
28B962A32B6AF44F00ACCD96 /* UndoHistory.cxx */,
28B962A42B6AF44F00ACCD96 /* UndoHistory.h */,
2829370F24E2D58500C84BA2 /* UniConversion.cxx */,
282936FC24E2D58400C84BA2 /* UniConversion.h */,
282936F324E2D58400C84BA2 /* UniqueString.cxx */,
2829372224E2D58700C84BA2 /* UniqueString.h */,
2829371724E2D58600C84BA2 /* ViewStyle.cxx */,
2829370C24E2D58500C84BA2 /* ViewStyle.h */,
282936FD24E2D58400C84BA2 /* XPM.cxx */,
2829371D24E2D58600C84BA2 /* XPM.h */,
);
name = Backend;
sourceTree = "<group>";
};
287F3C4E246F8E560040E76F /* Classes */ = {
isa = PBXGroup;
children = (
282936DA24E2D55D00C84BA2 /* InfoBar.h */,
282936D424E2D55D00C84BA2 /* InfoBar.mm */,
282936D924E2D55D00C84BA2 /* InfoBarCommunicator.h */,
287F3E0F246F9AE50040E76F /* module.modulemap */,
282936D824E2D55D00C84BA2 /* PlatCocoa.h */,
282936D724E2D55D00C84BA2 /* PlatCocoa.mm */,
282936D324E2D55D00C84BA2 /* QuartzTextLayout.h */,
282936DB24E2D55D00C84BA2 /* QuartzTextStyle.h */,
282936D524E2D55D00C84BA2 /* QuartzTextStyleAttribute.h */,
282936D624E2D55D00C84BA2 /* ScintillaCocoa.h */,
282936DD24E2D55D00C84BA2 /* ScintillaCocoa.mm */,
282936DE24E2D55D00C84BA2 /* ScintillaView.h */,
282936DC24E2D55D00C84BA2 /* ScintillaView.mm */,
);
name = Classes;
sourceTree = "<group>";
};
287F3C4F246F8E6E0040E76F /* Resources */ = {
isa = PBXGroup;
children = (
282937AF24E2D80E00C84BA2 /* Info.plist */,
2867917826BB448C007C2905 /* info_bar_bg.png */,
2867917B26BB448C007C2905 /* info_bar_bg@2x.png */,
2867917626BB448C007C2905 /* mac_cursor_busy.png */,
2867917926BB448C007C2905 /* mac_cursor_busy@2x.png */,
2867917A26BB448C007C2905 /* mac_cursor_flipped.png */,
2867917726BB448C007C2905 /* mac_cursor_flipped@2x.png */,
282937A924E2D60E00C84BA2 /* res */,
);
name = Resources;
sourceTree = "<group>";
};
287F3C68246F90240040E76F /* Frameworks */ = {
isa = PBXGroup;
children = (
287F3C6B246F90300040E76F /* QuartzCore.framework */,
287F3C69246F90240040E76F /* Cocoa.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
287F3C3C246F8DC70040E76F /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
2829374C24E2D58800C84BA2 /* DBCS.h in Headers */,
2829373024E2D58800C84BA2 /* CallTip.h in Headers */,
2829374224E2D58800C84BA2 /* Decoration.h in Headers */,
2829375624E2D58800C84BA2 /* EditView.h in Headers */,
2829375424E2D58800C84BA2 /* SparseVector.h in Headers */,
286F8E6325F84F7400EC8D60 /* Sci_Position.h in Headers */,
2829373224E2D58800C84BA2 /* KeyMap.h in Headers */,
2829373E24E2D58800C84BA2 /* Indicator.h in Headers */,
286F8EDE260448C300EC8D60 /* Platform.h in Headers */,
2829375C24E2D58800C84BA2 /* CellBuffer.h in Headers */,
2829373F24E2D58800C84BA2 /* UniConversion.h in Headers */,
2829373D24E2D58800C84BA2 /* PerLine.h in Headers */,
2829373724E2D58800C84BA2 /* RunStyles.h in Headers */,
28EA9CB0255894B4007710C4 /* CharacterCategoryMap.h in Headers */,
282936E624E2D55D00C84BA2 /* InfoBar.h in Headers */,
2829375E24E2D58800C84BA2 /* LineMarker.h in Headers */,
2829376824E2D58800C84BA2 /* CaseFolder.h in Headers */,
286F8E6425F84F7400EC8D60 /* ILexer.h in Headers */,
2829376524E2D58800C84BA2 /* UniqueString.h in Headers */,
2829375F24E2D58800C84BA2 /* Editor.h in Headers */,
2829376624E2D58800C84BA2 /* CaseConvert.h in Headers */,
2829374F24E2D58800C84BA2 /* ViewStyle.h in Headers */,
282936DF24E2D55D00C84BA2 /* QuartzTextLayout.h in Headers */,
2829376A24E2D58800C84BA2 /* EditModel.h in Headers */,
282936E724E2D55D00C84BA2 /* QuartzTextStyle.h in Headers */,
2829376F24E2D58800C84BA2 /* Document.h in Headers */,
2829374A24E2D58800C84BA2 /* ContractionState.h in Headers */,
2829376024E2D58800C84BA2 /* XPM.h in Headers */,
28B962A62B6AF44F00ACCD96 /* UndoHistory.h in Headers */,
2829372F24E2D58800C84BA2 /* ElapsedPeriod.h in Headers */,
28EA9CB1255894B4007710C4 /* CharacterType.h in Headers */,
2829373A24E2D58800C84BA2 /* MarginView.h in Headers */,
286F8E6525F84F7400EC8D60 /* ILoader.h in Headers */,
282936EA24E2D55D00C84BA2 /* ScintillaView.h in Headers */,
282936E124E2D55D00C84BA2 /* QuartzTextStyleAttribute.h in Headers */,
2829376224E2D58800C84BA2 /* Partitioning.h in Headers */,
286F8E6625F84F7400EC8D60 /* Scintilla.h in Headers */,
2829376424E2D58800C84BA2 /* SplitVector.h in Headers */,
2829373B24E2D58800C84BA2 /* Position.h in Headers */,
282936E224E2D55D00C84BA2 /* ScintillaCocoa.h in Headers */,
2829373524E2D58800C84BA2 /* Style.h in Headers */,
282936E424E2D55D00C84BA2 /* PlatCocoa.h in Headers */,
2807B4EB28964CA40063A31A /* ChangeHistory.h in Headers */,
2829376C24E2D58800C84BA2 /* Selection.h in Headers */,
2829376124E2D58800C84BA2 /* ScintillaBase.h in Headers */,
2829373824E2D58800C84BA2 /* RESearch.h in Headers */,
282936E524E2D55D00C84BA2 /* InfoBarCommunicator.h in Headers */,
2829374D24E2D58800C84BA2 /* AutoComplete.h in Headers */,
2829374124E2D58800C84BA2 /* CharClassify.h in Headers */,
2829373124E2D58800C84BA2 /* PositionCache.h in Headers */,
286F8EE0260448C300EC8D60 /* Geometry.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
287F3C40246F8DC70040E76F /* Scintilla */ = {
isa = PBXNativeTarget;
buildConfigurationList = 287F3C49246F8DC70040E76F /* Build configuration list for PBXNativeTarget "Scintilla" */;
buildPhases = (
287F3C3C246F8DC70040E76F /* Headers */,
287F3C3F246F8DC70040E76F /* Resources */,
287F3C3D246F8DC70040E76F /* Sources */,
287F3C3E246F8DC70040E76F /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = Scintilla;
productName = Scintilla;
productReference = 287F3C41246F8DC70040E76F /* Scintilla.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
287F3C38246F8DC70040E76F /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1500;
ORGANIZATIONNAME = "Neil Hodgson";
TargetAttributes = {
287F3C40246F8DC70040E76F = {
CreatedOnToolsVersion = 11.4.1;
};
};
};
buildConfigurationList = 287F3C3B246F8DC70040E76F /* Build configuration list for PBXProject "Scintilla" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 287F3C37246F8DC70040E76F;
productRefGroup = 287F3C42246F8DC70040E76F /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
287F3C40246F8DC70040E76F /* Scintilla */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
287F3C3F246F8DC70040E76F /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2867917C26BB448C007C2905 /* mac_cursor_busy.png in Resources */,
2867918126BB448C007C2905 /* info_bar_bg@2x.png in Resources */,
282937AA24E2D60E00C84BA2 /* res in Resources */,
2867917F26BB448C007C2905 /* mac_cursor_busy@2x.png in Resources */,
2867917E26BB448C007C2905 /* info_bar_bg.png in Resources */,
2867918026BB448C007C2905 /* mac_cursor_flipped.png in Resources */,
2867917D26BB448C007C2905 /* mac_cursor_flipped@2x.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
287F3C3D246F8DC70040E76F /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2829375024E2D58800C84BA2 /* Selection.cxx in Sources */,
2829375224E2D58800C84BA2 /* UniConversion.cxx in Sources */,
282936E324E2D55D00C84BA2 /* PlatCocoa.mm in Sources */,
282936E924E2D55D00C84BA2 /* ScintillaCocoa.mm in Sources */,
2829372E24E2D58800C84BA2 /* DBCS.cxx in Sources */,
2829375924E2D58800C84BA2 /* AutoComplete.cxx in Sources */,
2829375724E2D58800C84BA2 /* CaseConvert.cxx in Sources */,
2829374524E2D58800C84BA2 /* PositionCache.cxx in Sources */,
2829375B24E2D58800C84BA2 /* MarginView.cxx in Sources */,
2829373924E2D58800C84BA2 /* Indicator.cxx in Sources */,
2829375D24E2D58800C84BA2 /* Document.cxx in Sources */,
2829375524E2D58800C84BA2 /* EditModel.cxx in Sources */,
2829375124E2D58800C84BA2 /* ContractionState.cxx in Sources */,
2829374924E2D58800C84BA2 /* CallTip.cxx in Sources */,
2807B4EA28964CA40063A31A /* ChangeHistory.cxx in Sources */,
2829375824E2D58800C84BA2 /* CharClassify.cxx in Sources */,
2829373324E2D58800C84BA2 /* LineMarker.cxx in Sources */,
2829374E24E2D58800C84BA2 /* KeyMap.cxx in Sources */,
2829376D24E2D58800C84BA2 /* RunStyles.cxx in Sources */,
28EA9CAF255894B4007710C4 /* CharacterType.cxx in Sources */,
2829376B24E2D58800C84BA2 /* Editor.cxx in Sources */,
2829373C24E2D58800C84BA2 /* CaseFolder.cxx in Sources */,
2829374824E2D58800C84BA2 /* RESearch.cxx in Sources */,
2829377024E2D58800C84BA2 /* EditView.cxx in Sources */,
28B962A52B6AF44F00ACCD96 /* UndoHistory.cxx in Sources */,
2829376724E2D58800C84BA2 /* ScintillaBase.cxx in Sources */,
2829374724E2D58800C84BA2 /* Style.cxx in Sources */,
2829375A24E2D58800C84BA2 /* ViewStyle.cxx in Sources */,
282936E024E2D55D00C84BA2 /* InfoBar.mm in Sources */,
28EA9CAE255894B4007710C4 /* CharacterCategoryMap.cxx in Sources */,
2829374024E2D58800C84BA2 /* XPM.cxx in Sources */,
2829374B24E2D58800C84BA2 /* Decoration.cxx in Sources */,
286F8EDF260448C300EC8D60 /* Geometry.cxx in Sources */,
2829373624E2D58800C84BA2 /* UniqueString.cxx in Sources */,
282936E824E2D55D00C84BA2 /* ScintillaView.mm in Sources */,
2829376924E2D58800C84BA2 /* CellBuffer.cxx in Sources */,
2829375324E2D58800C84BA2 /* PerLine.cxx in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
287F3C47246F8DC70040E76F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 5.5.0;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
DEBUG,
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.13;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
"OTHER_LDFLAGS[arch=*]" = "-Wl,-ld_classic";
SDKROOT = macosx;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Debug;
};
287F3C48246F8DC70040E76F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 5.5.0;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_PREPROCESSOR_DEFINITIONS = NDEBUG;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.13;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
"OTHER_LDFLAGS[arch=*]" = "-Wl,-ld_classic";
SDKROOT = macosx;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Release;
};
287F3C4A246F8DC70040E76F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_WARN_UNGUARDED_AVAILABILITY = YES;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 5.5.0;
DEAD_CODE_STRIPPING = YES;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
HEADER_SEARCH_PATHS = (
../../include,
../../src,
);
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.13;
PRODUCT_BUNDLE_IDENTIFIER = org.scintilla.Scintilla;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
};
name = Debug;
};
287F3C4B246F8DC70040E76F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_WARN_UNGUARDED_AVAILABILITY = YES;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 5.5.0;
DEAD_CODE_STRIPPING = YES;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
GCC_PREPROCESSOR_DEFINITIONS = NDEBUG;
HEADER_SEARCH_PATHS = (
../../include,
../../src,
);
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.13;
PRODUCT_BUNDLE_IDENTIFIER = org.scintilla.Scintilla;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
287F3C3B246F8DC70040E76F /* Build configuration list for PBXProject "Scintilla" */ = {
isa = XCConfigurationList;
buildConfigurations = (
287F3C47246F8DC70040E76F /* Debug */,
287F3C48246F8DC70040E76F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
287F3C49246F8DC70040E76F /* Build configuration list for PBXNativeTarget "Scintilla" */ = {
isa = XCConfigurationList;
buildConfigurations = (
287F3C4A246F8DC70040E76F /* Debug */,
287F3C4B246F8DC70040E76F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 287F3C38246F8DC70040E76F /* Project object */;
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:Scintilla.xcodeproj">
</FileRef>
</Workspace>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@ -0,0 +1,10 @@
framework module Scintilla {
umbrella header "ScintillaView.h"
module InfoBar {
header "InfoBar.h"
}
// ILexer.h is not included as Swift doesn't yet interoperate with C++
exclude header "ILexer.h"
export *
module * { export * }
}

View File

@ -0,0 +1,270 @@
/*
* ScintillaCocoa.h
*
* Mike Lischke <mlischke@sun.com>
*
* Based on ScintillaMacOSX.h
* Original code by Evan Jones on Sun Sep 01 2002.
* Contributors:
* Shane Caraveo, ActiveState
* Bernd Paradies, Adobe
*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
*/
#include <cstddef>
#include <cstdlib>
#include <cstdint>
#include <cstdio>
#include <ctime>
#include <stdexcept>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <memory>
#include "ILoader.h"
#include "ILexer.h"
#include "CharacterCategoryMap.h"
#include "Position.h"
#include "UniqueString.h"
#include "SplitVector.h"
#include "Partitioning.h"
#include "RunStyles.h"
#include "ContractionState.h"
#include "CellBuffer.h"
#include "CallTip.h"
#include "KeyMap.h"
#include "Indicator.h"
#include "LineMarker.h"
#include "Style.h"
#include "ViewStyle.h"
#include "CharClassify.h"
#include "Decoration.h"
#include "CaseFolder.h"
#include "Document.h"
#include "CaseConvert.h"
#include "UniConversion.h"
#include "DBCS.h"
#include "Selection.h"
#include "PositionCache.h"
#include "EditModel.h"
#include "MarginView.h"
#include "EditView.h"
#include "Editor.h"
#include "AutoComplete.h"
#include "ScintillaBase.h"
extern "C" NSString *ScintillaRecPboardType;
@class SCIContentView;
@class SCIMarginView;
@class ScintillaView;
@class FindHighlightLayer;
/**
* Helper class to be used as timer target (NSTimer).
*/
@interface TimerTarget : NSObject {
void *mTarget;
NSNotificationQueue *notificationQueue;
}
- (id) init: (void *) target;
- (void) timerFired: (NSTimer *) timer;
- (void) idleTimerFired: (NSTimer *) timer;
- (void) idleTriggered: (NSNotification *) notification;
@end
namespace Scintilla::Internal {
CGContextRef CGContextCurrent();
/**
* Main scintilla class, implemented for macOS (Cocoa).
*/
class ScintillaCocoa : public ScintillaBase {
private:
__weak ScintillaView *sciView;
TimerTarget *timerTarget;
NSEvent *lastMouseEvent;
__weak id<ScintillaNotificationProtocol> delegate;
SciNotifyFunc notifyProc;
intptr_t notifyObj;
bool capturedMouse;
bool isFirstResponder;
bool isActive;
Point sizeClient;
bool enteredSetScrollingSize;
bool GetPasteboardData(NSPasteboard *board, SelectionText *selectedText);
void SetPasteboardData(NSPasteboard *board, const SelectionText &selectedText);
Sci::Position TargetAsUTF8(char *text) const;
Sci::Position EncodedFromUTF8(const char *utf8, char *encoded) const;
int scrollSpeed;
int scrollTicks;
CFRunLoopObserverRef observer;
FindHighlightLayer *layerFindIndicator;
protected:
Point GetVisibleOriginInMain() const override;
Point ClientSize() const override;
PRectangle GetClientRectangle() const override;
PRectangle GetClientDrawingRectangle() override;
Point ConvertPoint(NSPoint point);
void RedrawRect(PRectangle rc) override;
void DiscardOverdraw() override;
void Redraw() override;
void Init();
std::unique_ptr<CaseFolder> CaseFolderForEncoding() override;
std::string CaseMapString(const std::string &s, CaseMapping caseMapping) override;
void CancelModes() override;
public:
ScintillaCocoa(ScintillaView *sciView_, SCIContentView *viewContent, SCIMarginView *viewMargin);
// Deleted so ScintillaCocoa objects can not be copied.
ScintillaCocoa(const ScintillaCocoa &) = delete;
ScintillaCocoa &operator=(const ScintillaCocoa &) = delete;
~ScintillaCocoa() override;
void Finalise() override;
void SetDelegate(id<ScintillaNotificationProtocol> delegate_);
void RegisterNotifyCallback(intptr_t windowid, SciNotifyFunc callback);
sptr_t WndProc(Scintilla::Message iMessage, uptr_t wParam, sptr_t lParam) override;
NSScrollView *ScrollContainer() const;
SCIContentView *ContentView();
bool SyncPaint(void *gc, PRectangle rc);
bool Draw(NSRect rect, CGContextRef gc);
void PaintMargin(NSRect aRect);
sptr_t DefWndProc(Scintilla::Message iMessage, uptr_t wParam, sptr_t lParam) override;
void TickFor(TickReason reason) override;
bool FineTickerRunning(TickReason reason) override;
void FineTickerStart(TickReason reason, int millis, int tolerance) override;
void FineTickerCancel(TickReason reason) override;
bool SetIdle(bool on) override;
void SetMouseCapture(bool on) override;
bool HaveMouseCapture() override;
void WillDraw(NSRect rect);
void ScrollText(Sci::Line linesToMove) override;
void SetVerticalScrollPos() override;
void SetHorizontalScrollPos() override;
bool ModifyScrollBars(Sci::Line nMax, Sci::Line nPage) override;
bool SetScrollingSize();
void Resize();
void UpdateForScroll();
// Notifications for the owner.
void NotifyChange() override;
void NotifyFocus(bool focus) override;
void NotifyParent(Scintilla::NotificationData scn) override;
void NotifyURIDropped(const char *uri);
bool HasSelection();
bool CanUndo();
bool CanRedo();
void CopyToClipboard(const SelectionText &selectedText) override;
void Copy() override;
bool CanPaste() override;
void Paste() override;
void Paste(bool rectangular);
void CTPaint(void *gc, NSRect rc);
void CallTipMouseDown(NSPoint pt);
void CreateCallTipWindow(PRectangle rc) override;
void AddToPopUp(const char *label, int cmd = 0, bool enabled = true) override;
void ClaimSelection() override;
NSPoint GetCaretPosition();
std::string UTF8FromEncoded(std::string_view encoded) const override;
std::string EncodedFromUTF8(std::string_view utf8) const override;
static sptr_t DirectFunction(sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam);
static sptr_t DirectStatusFunction(sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam, int *pStatus);
NSTimer *timers[static_cast<size_t>(TickReason::platform)+1];
void TimerFired(NSTimer *timer);
void IdleTimerFired();
static void UpdateObserver(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *sci);
void ObserverAdd();
void ObserverRemove();
void IdleWork() override;
void QueueIdleWork(WorkItems items, Sci::Position upTo) override;
ptrdiff_t InsertText(NSString *input, Scintilla::CharacterSource charSource);
NSRange PositionsFromCharacters(NSRange rangeCharacters) const;
NSRange CharactersFromPositions(NSRange rangePositions) const;
NSString *RangeTextAsString(NSRange rangePositions) const;
NSInteger VisibleLineForIndex(NSInteger index);
NSRange RangeForVisibleLine(NSInteger lineVisible);
NSRect FrameForRange(NSRange rangeCharacters);
NSRect GetBounds() const;
void SelectOnlyMainSelection();
void ConvertSelectionVirtualSpace();
bool ClearAllSelections();
void CompositionStart();
void CompositionCommit();
void CompositionUndo();
void SetDocPointer(Document *document) override;
bool KeyboardInput(NSEvent *event);
void MouseDown(NSEvent *event);
void RightMouseDown(NSEvent *event);
void MouseMove(NSEvent *event);
void MouseUp(NSEvent *event);
void MouseEntered(NSEvent *event);
void MouseExited(NSEvent *event);
void MouseWheel(NSEvent *event);
// Drag and drop
void StartDrag() override;
bool GetDragData(id <NSDraggingInfo> info, NSPasteboard &pasteBoard, SelectionText *selectedText);
NSDragOperation DraggingEntered(id <NSDraggingInfo> info);
NSDragOperation DraggingUpdated(id <NSDraggingInfo> info);
void DraggingExited(id <NSDraggingInfo> info);
bool PerformDragOperation(id <NSDraggingInfo> info);
void DragScroll();
// Promote some methods needed for NSResponder actions.
void SelectAll() override;
void DeleteBackward();
void Cut() override;
void Undo() override;
void Redo() override;
bool ShouldDisplayPopupOnMargin();
bool ShouldDisplayPopupOnText();
NSMenu *CreateContextMenu(NSEvent *event);
void HandleCommand(NSInteger command);
void SetFirstResponder(bool isFirstResponder_);
void ActiveStateChanged(bool isActive_);
void SetFocusActiveState();
void UpdateBaseElements() override;
void WindowWillMove();
// Find indicator
void ShowFindIndicatorForRange(NSRange charRange, BOOL retaining);
void MoveFindIndicatorWithBounce(BOOL bounce);
void HideFindIndicator();
};
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,31 @@
/**
* AppController.h
* SciTest
*
* Created by Mike Lischke on 01.04.09.
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
*/
#import <Cocoa/Cocoa.h>
#include <dlfcn.h>
#import "Scintilla/ILexer.h"
#import "Scintilla/ScintillaView.h"
#import "Scintilla/InfoBar.h"
#include <SciLexer.h>
#include <Lexilla.h>
@interface AppController : NSObject {
IBOutlet NSBox *mEditHost;
ScintillaView* mEditor;
ScintillaView* sciExtra; // For testing Scintilla tear-down
}
- (void) awakeFromNib;
- (void) setupEditor;
- (IBAction) searchText: (id) sender;
- (IBAction) addRemoveExtra: (id) sender;
@end

View File

@ -0,0 +1,321 @@
/**
* AppController.mm
* ScintillaTest
*
* Created by Mike Lischke on 01.04.09.
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
*/
#import "AppController.h"
const char major_keywords[] =
"accessible add all alter analyze and as asc asensitive "
"before between bigint binary blob both by "
"call cascade case change char character check collate column condition connection constraint "
"continue convert create cross current_date current_time current_timestamp current_user cursor "
"database databases day_hour day_microsecond day_minute day_second dec decimal declare default "
"delayed delete desc describe deterministic distinct distinctrow div double drop dual "
"each else elseif enclosed escaped exists exit explain "
"false fetch float float4 float8 for force foreign from fulltext "
"goto grant group "
"having high_priority hour_microsecond hour_minute hour_second "
"if ignore in index infile inner inout insensitive insert int int1 int2 int3 int4 int8 integer "
"interval into is iterate "
"join "
"key keys kill "
"label leading leave left like limit linear lines load localtime localtimestamp lock long "
"longblob longtext loop low_priority "
"master_ssl_verify_server_cert match mediumblob mediumint mediumtext middleint minute_microsecond "
"minute_second mod modifies "
"natural not no_write_to_binlog null numeric "
"on optimize option optionally or order out outer outfile "
"precision primary procedure purge "
"range read reads read_only read_write real references regexp release rename repeat replace "
"require restrict return revoke right rlike "
"schema schemas second_microsecond select sensitive separator set show smallint spatial specific "
"sql sqlexception sqlstate sqlwarning sql_big_result sql_calc_found_rows sql_small_result ssl "
"starting straight_join "
"table terminated then tinyblob tinyint tinytext to trailing trigger true "
"undo union unique unlock unsigned update upgrade usage use using utc_date utc_time utc_timestamp "
"values varbinary varchar varcharacter varying "
"when where while with write "
"xor "
"year_month "
"zerofill";
const char procedure_keywords[] = // Not reserved words but intrinsic part of procedure definitions.
"begin comment end";
const char client_keywords[] = // Definition of keywords only used by clients, not the server itself.
"delimiter";
const char user_keywords[] = // Definition of own keywords, not used by MySQL.
"edit";
//--------------------------------------------------------------------------------------------------
@implementation AppController
- (void) awakeFromNib
{
// Manually set up the scintilla editor. Create an instance and dock it to our edit host.
// Leave some free space around the new view to avoid overlapping with the box borders.
NSRect newFrame = mEditHost.frame;
newFrame.size.width -= 2 * newFrame.origin.x;
newFrame.size.height -= 3 * newFrame.origin.y;
mEditor = [[[ScintillaView alloc] initWithFrame: newFrame] autorelease];
[mEditHost.contentView addSubview: mEditor];
[mEditor setAutoresizesSubviews: YES];
[mEditor setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
// Let's load some text for the editor, as initial content.
NSString *sql = [self exampleText];
[mEditor setString: sql];
[self setupEditor];
sciExtra = nil;
}
- (NSString *) exampleText
{
NSError* error = nil;
NSString* path = [[NSBundle mainBundle] pathForResource: @"TestData"
ofType: @"sql" inDirectory: nil];
NSString *sql = [NSString stringWithContentsOfFile: path
encoding: NSUTF8StringEncoding
error: &error];
if (error && [[error domain] isEqual: NSCocoaErrorDomain])
NSLog(@"%@", error);
return sql;
}
//--------------------------------------------------------------------------------------------------
/**
* Initialize scintilla editor (styles, colors, markers, folding etc.].
*/
- (void) setupEditor
{
// Lexer type is MySQL.
void *lexillaDL = dlopen(LEXILLA_LIB LEXILLA_EXTENSION, RTLD_LAZY);
if (lexillaDL) {
Lexilla::CreateLexerFn createLexer =
reinterpret_cast<Lexilla::CreateLexerFn>(dlsym(lexillaDL, LEXILLA_CREATELEXER));
if (createLexer) {
Scintilla::ILexer5 *pLexer = createLexer("mysql");
[mEditor setReferenceProperty: SCI_SETILEXER parameter: nil value: pLexer];
}
}
[mEditor suspendDrawing: TRUE];
// Keywords to highlight. Indices are:
// 0 - Major keywords (reserved keywords)
// 1 - Normal keywords (everything not reserved but integral part of the language)
// 2 - Database objects
// 3 - Function keywords
// 4 - System variable keywords
// 5 - Procedure keywords (keywords used in procedures like "begin" and "end")
// 6..8 - User keywords 1..3
[mEditor setReferenceProperty: SCI_SETKEYWORDS parameter: 0 value: major_keywords];
[mEditor setReferenceProperty: SCI_SETKEYWORDS parameter: 5 value: procedure_keywords];
[mEditor setReferenceProperty: SCI_SETKEYWORDS parameter: 6 value: client_keywords];
[mEditor setReferenceProperty: SCI_SETKEYWORDS parameter: 7 value: user_keywords];
// Colors and styles for various syntactic elements. First the default style.
[mEditor setStringProperty: SCI_STYLESETFONT parameter: STYLE_DEFAULT value: @"Helvetica"];
// [mEditor setStringProperty: SCI_STYLESETFONT parameter: STYLE_DEFAULT value: @"Monospac821 BT"]; // Very pleasing programmer's font.
[mEditor setGeneralProperty: SCI_STYLESETSIZE parameter: STYLE_DEFAULT value: 14];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: STYLE_DEFAULT value: [NSColor blackColor]];
[mEditor setGeneralProperty: SCI_STYLECLEARALL parameter: 0 value: 0];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_DEFAULT value: [NSColor blackColor]];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_COMMENT fromHTML: @"#097BF7"];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_COMMENTLINE fromHTML: @"#097BF7"];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_HIDDENCOMMAND fromHTML: @"#097BF7"];
[mEditor setColorProperty: SCI_STYLESETBACK parameter: SCE_MYSQL_HIDDENCOMMAND fromHTML: @"#F0F0F0"];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_VARIABLE fromHTML: @"378EA5"];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_SYSTEMVARIABLE fromHTML: @"378EA5"];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_KNOWNSYSTEMVARIABLE fromHTML: @"#3A37A5"];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_NUMBER fromHTML: @"#7F7F00"];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_SQSTRING fromHTML: @"#FFAA3E"];
// Note: if we were using ANSI quotes we would set the DQSTRING to the same color as the
// the back tick string.
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_DQSTRING fromHTML: @"#274A6D"];
// Keyword highlighting.
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_MAJORKEYWORD fromHTML: @"#007F00"];
[mEditor setGeneralProperty: SCI_STYLESETBOLD parameter: SCE_MYSQL_MAJORKEYWORD value: 1];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_KEYWORD fromHTML: @"#007F00"];
[mEditor setGeneralProperty: SCI_STYLESETBOLD parameter: SCE_MYSQL_KEYWORD value: 1];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_PROCEDUREKEYWORD fromHTML: @"#56007F"];
[mEditor setGeneralProperty: SCI_STYLESETBOLD parameter: SCE_MYSQL_PROCEDUREKEYWORD value: 1];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_USER1 fromHTML: @"#808080"];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_USER2 fromHTML: @"#808080"];
[mEditor setColorProperty: SCI_STYLESETBACK parameter: SCE_MYSQL_USER2 fromHTML: @"#F0E0E0"];
// The following 3 styles have no impact as we did not set a keyword list for any of them.
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_DATABASEOBJECT value: [NSColor redColor]];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_FUNCTION value: [NSColor redColor]];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_IDENTIFIER value: [NSColor blackColor]];
[mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_QUOTEDIDENTIFIER fromHTML: @"#274A6D"];
[mEditor setGeneralProperty: SCI_STYLESETBOLD parameter: SCE_SQL_OPERATOR value: 1];
// Line number style.
[mEditor setColorProperty: SCI_STYLESETFORE parameter: STYLE_LINENUMBER fromHTML: @"#F0F0F0"];
[mEditor setColorProperty: SCI_STYLESETBACK parameter: STYLE_LINENUMBER fromHTML: @"#808080"];
[mEditor setGeneralProperty: SCI_SETMARGINTYPEN parameter: 0 value: SC_MARGIN_NUMBER];
[mEditor setGeneralProperty: SCI_SETMARGINWIDTHN parameter: 0 value: 35];
// Markers.
[mEditor setGeneralProperty: SCI_SETMARGINWIDTHN parameter: 1 value: 16];
// Some special lexer properties.
[mEditor setLexerProperty: @"fold" value: @"1"];
[mEditor setLexerProperty: @"fold.compact" value: @"0"];
[mEditor setLexerProperty: @"fold.comment" value: @"1"];
[mEditor setLexerProperty: @"fold.preprocessor" value: @"1"];
// Folder setup.
[mEditor setGeneralProperty: SCI_SETMARGINWIDTHN parameter: 2 value: 16];
[mEditor setGeneralProperty: SCI_SETMARGINMASKN parameter: 2 value: SC_MASK_FOLDERS];
[mEditor setGeneralProperty: SCI_SETMARGINSENSITIVEN parameter: 2 value: 1];
[mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDEROPEN value: SC_MARK_BOXMINUS];
[mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDER value: SC_MARK_BOXPLUS];
[mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDERSUB value: SC_MARK_VLINE];
[mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDERTAIL value: SC_MARK_LCORNER];
[mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDEREND value: SC_MARK_BOXPLUSCONNECTED];
[mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDEROPENMID value: SC_MARK_BOXMINUSCONNECTED];
[mEditor setGeneralProperty
: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDERMIDTAIL value: SC_MARK_TCORNER];
for (int n= 25; n < 32; ++n) // Markers 25..31 are reserved for folding.
{
[mEditor setColorProperty: SCI_MARKERSETFORE parameter: n value: [NSColor whiteColor]];
[mEditor setColorProperty: SCI_MARKERSETBACK parameter: n value: [NSColor blackColor]];
}
// Init markers & indicators for highlighting of syntax errors.
[mEditor setColorProperty: SCI_INDICSETFORE parameter: 0 value: [NSColor redColor]];
[mEditor setGeneralProperty: SCI_INDICSETUNDER parameter: 0 value: 1];
[mEditor setGeneralProperty: SCI_INDICSETSTYLE parameter: 0 value: INDIC_SQUIGGLE];
[mEditor setColorProperty: SCI_MARKERSETBACK parameter: 0 fromHTML: @"#B1151C"];
[mEditor setColorProperty: SCI_SETSELBACK parameter: 1 value: [NSColor selectedTextBackgroundColor]];
[mEditor setGeneralProperty: SCI_SETMULTIPLESELECTION parameter: 1 value: 0];
// Uncomment if you wanna see auto wrapping in action.
//[mEditor setGeneralProperty: SCI_SETWRAPMODE parameter: SC_WRAP_WORD value: 0];
[mEditor suspendDrawing: FALSE];
InfoBar* infoBar = [[[InfoBar alloc] initWithFrame: NSMakeRect(0, 0, 400, 0)] autorelease];
[infoBar setDisplay: IBShowAll];
[mEditor setInfoBar: infoBar top: NO];
[mEditor setStatusText: @"Operation complete"];
}
//--------------------------------------------------------------------------------------------------
/* XPM */
static const char * box_xpm[] = {
"12 12 2 1",
" c None",
". c #800000",
" .........",
" . . ..",
" . . . .",
"......... .",
". . . .",
". . . ..",
". . .. .",
"......... .",
". . . .",
". . . . ",
". . .. ",
"......... "};
- (void) showAutocompletion
{
const char *words = "Babylon-5?1 Battlestar-Galactica Millennium-Falcon?2 Moya?2 Serenity Voyager";
[mEditor setGeneralProperty: SCI_AUTOCSETIGNORECASE parameter: 1 value:0];
[mEditor setGeneralProperty: SCI_REGISTERIMAGE parameter: 1 value:(sptr_t)box_xpm];
const int imSize = 12;
[mEditor setGeneralProperty: SCI_RGBAIMAGESETWIDTH parameter: imSize value:0];
[mEditor setGeneralProperty: SCI_RGBAIMAGESETHEIGHT parameter: imSize value:0];
char image[imSize * imSize * 4];
for (size_t y = 0; y < imSize; y++) {
for (size_t x = 0; x < imSize; x++) {
char *p = image + (y * imSize + x) * 4;
p[0] = 0xFF;
p[1] = 0xA0;
p[2] = 0;
p[3] = x * 23;
}
}
[mEditor setGeneralProperty: SCI_REGISTERRGBAIMAGE parameter: 2 value:(sptr_t)image];
[mEditor setGeneralProperty: SCI_AUTOCSHOW parameter: 0 value:(sptr_t)words];
}
- (IBAction) searchText: (id) sender
{
NSSearchField* searchField = (NSSearchField*) sender;
[mEditor findAndHighlightText: [searchField stringValue]
matchCase: NO
wholeWord: NO
scrollTo: YES
wrap: YES];
long matchStart = [mEditor getGeneralProperty: SCI_GETSELECTIONSTART parameter: 0];
long matchEnd = [mEditor getGeneralProperty: SCI_GETSELECTIONEND parameter: 0];
[mEditor setGeneralProperty: SCI_FINDINDICATORFLASH parameter: matchStart value:matchEnd];
if ([[searchField stringValue] isEqualToString: @"XX"])
[self showAutocompletion];
}
- (IBAction) addRemoveExtra: (id) sender
{
if (sciExtra) {
[sciExtra removeFromSuperview];
sciExtra = nil;
} else {
NSRect newFrame = mEditHost.frame;
newFrame.origin.x += newFrame.size.width + 5;
newFrame.origin.y += 46;
newFrame.size.width = 96;
newFrame.size.height -= 60;
sciExtra = [[[ScintillaView alloc] initWithFrame: newFrame] autorelease];
[[[mEditHost window]contentView] addSubview: sciExtra];
[sciExtra setGeneralProperty: SCI_SETWRAPMODE parameter: SC_WRAP_WORD value: 1];
NSString *sql = [self exampleText];
[sciExtra setString: sql];
}
}
-(IBAction) setFontQuality: (id) sender
{
[ScintillaView directCall:mEditor message:SCI_SETFONTQUALITY wParam:[sender tag] lParam:0];
}
@end
//--------------------------------------------------------------------------------------------------

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>com.sun.${PRODUCT_NAME:identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
</dict>
</plist>

View File

@ -0,0 +1,474 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; };
271FA52C0F850BE20033D021 /* AppController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 271FA52B0F850BE20033D021 /* AppController.mm */; };
2791F4490FC1A8E9009DBCF9 /* TestData.sql in Resources */ = {isa = PBXBuildFile; fileRef = 2791F4480FC1A8E9009DBCF9 /* TestData.sql */; };
286F8E5125F8474400EC8D60 /* Scintilla.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 286F8E4E25F845B000EC8D60 /* Scintilla.framework */; };
286F8E5225F8474400EC8D60 /* Scintilla.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 286F8E4E25F845B000EC8D60 /* Scintilla.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
286F8E7525F8506B00EC8D60 /* liblexilla.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 286F8E7325F8504800EC8D60 /* liblexilla.dylib */; };
286F8E7625F8506B00EC8D60 /* liblexilla.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 286F8E7325F8504800EC8D60 /* liblexilla.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
286F8E4D25F845B000EC8D60 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 286F8E4925F845B000EC8D60 /* Scintilla.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 287F3C41246F8DC70040E76F;
remoteInfo = Scintilla;
};
286F8E7225F8504800EC8D60 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 286F8E6E25F8504800EC8D60 /* Lexilla.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 280262A5246DF655000DF3B8;
remoteInfo = lexilla;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
272133C20F973596006BE49A /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
286F8E7625F8506B00EC8D60 /* liblexilla.dylib in CopyFiles */,
286F8E5225F8474400EC8D60 /* Scintilla.framework in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
271FA52A0F850BE20033D021 /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = "<group>"; };
271FA52B0F850BE20033D021 /* AppController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AppController.mm; sourceTree = "<group>"; wrapsLines = 0; };
2791F4480FC1A8E9009DBCF9 /* TestData.sql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TestData.sql; sourceTree = "<group>"; };
286F8E4925F845B000EC8D60 /* Scintilla.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Scintilla.xcodeproj; path = ../Scintilla/Scintilla.xcodeproj; sourceTree = "<group>"; };
286F8E6E25F8504800EC8D60 /* Lexilla.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Lexilla.xcodeproj; path = ../../../lexilla/src/Lexilla/Lexilla.xcodeproj; sourceTree = "<group>"; };
28E78A40224C33FE00456881 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
28E78A41224C33FE00456881 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = "<group>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
32CA4F630368D1EE00C91783 /* ScintillaTest_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScintillaTest_Prefix.pch; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* ScintillaTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ScintillaTest.app; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8D11072E0486CEB800E47090 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
286F8E5125F8474400EC8D60 /* Scintilla.framework in Frameworks */,
286F8E7525F8506B00EC8D60 /* liblexilla.dylib in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
271FA52A0F850BE20033D021 /* AppController.h */,
271FA52B0F850BE20033D021 /* AppController.mm */,
);
name = Classes;
sourceTree = "<group>";
};
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D1107320486CEB800E47090 /* ScintillaTest.app */,
);
name = Products;
sourceTree = "<group>";
};
286F8E4A25F845B000EC8D60 /* Products */ = {
isa = PBXGroup;
children = (
286F8E4E25F845B000EC8D60 /* Scintilla.framework */,
);
name = Products;
sourceTree = "<group>";
};
286F8E6F25F8504800EC8D60 /* Products */ = {
isa = PBXGroup;
children = (
286F8E7325F8504800EC8D60 /* liblexilla.dylib */,
);
name = Products;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* ScintillaTest */ = {
isa = PBXGroup;
children = (
286F8E6E25F8504800EC8D60 /* Lexilla.xcodeproj */,
286F8E4925F845B000EC8D60 /* Scintilla.xcodeproj */,
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = ScintillaTest;
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
isa = PBXGroup;
children = (
32CA4F630368D1EE00C91783 /* ScintillaTest_Prefix.pch */,
29B97316FDCFA39411CA2CEA /* main.m */,
);
name = "Other Sources";
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
2791F4480FC1A8E9009DBCF9 /* TestData.sql */,
8D1107310486CEB800E47090 /* Info.plist */,
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
1DDD58140DA1D0A300B32029 /* MainMenu.xib */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
8D1107260486CEB800E47090 /* ScintillaTest */ = {
isa = PBXNativeTarget;
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "ScintillaTest" */;
buildPhases = (
8D1107290486CEB800E47090 /* Resources */,
8D11072C0486CEB800E47090 /* Sources */,
8D11072E0486CEB800E47090 /* Frameworks */,
272133C20F973596006BE49A /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = ScintillaTest;
productInstallPath = "$(HOME)/Applications";
productName = ScintillaTest;
productReference = 8D1107320486CEB800E47090 /* ScintillaTest.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1500;
};
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ScintillaTest" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = en;
hasScannedForEncodings = 1;
knownRegions = (
Base,
en,
);
mainGroup = 29B97314FDCFA39411CA2CEA /* ScintillaTest */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = 286F8E6F25F8504800EC8D60 /* Products */;
ProjectRef = 286F8E6E25F8504800EC8D60 /* Lexilla.xcodeproj */;
},
{
ProductGroup = 286F8E4A25F845B000EC8D60 /* Products */;
ProjectRef = 286F8E4925F845B000EC8D60 /* Scintilla.xcodeproj */;
},
);
projectRoot = "";
targets = (
8D1107260486CEB800E47090 /* ScintillaTest */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
286F8E4E25F845B000EC8D60 /* Scintilla.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = Scintilla.framework;
remoteRef = 286F8E4D25F845B000EC8D60 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
286F8E7325F8504800EC8D60 /* liblexilla.dylib */ = {
isa = PBXReferenceProxy;
fileType = "compiled.mach-o.dylib";
path = liblexilla.dylib;
remoteRef = 286F8E7225F8504800EC8D60 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
8D1107290486CEB800E47090 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */,
2791F4490FC1A8E9009DBCF9 /* TestData.sql in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D11072C0486CEB800E47090 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072D0486CEB800E47090 /* main.m in Sources */,
271FA52C0F850BE20033D021 /* AppController.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
28E78A40224C33FE00456881 /* en */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = {
isa = PBXVariantGroup;
children = (
28E78A41224C33FE00456881 /* en */,
);
name = MainMenu.xib;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO;
CODE_SIGN_IDENTITY = "-";
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
GCC_DYNAMIC_NO_PIC = NO;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = ScintillaTest_Prefix.pch;
GCC_PREPROCESSOR_DEFINITIONS = SCI_LEXER;
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
LD_RUNPATH_SEARCH_PATHS = (
"$(LD_RUNPATH_SEARCH_PATHS_$(IS_MACCATALYST))",
"@executable_path/../Frameworks",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
MACOSX_DEPLOYMENT_TARGET = 10.13;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = "com.sun.${PRODUCT_NAME:identifier}";
PRODUCT_NAME = ScintillaTest;
SDKROOT = macosx;
USER_HEADER_SEARCH_PATHS = "";
};
name = Debug;
};
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO;
CODE_SIGN_IDENTITY = "-";
COMBINE_HIDPI_IMAGES = YES;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = ScintillaTest_Prefix.pch;
GCC_PREPROCESSOR_DEFINITIONS = SCI_LEXER;
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
LD_RUNPATH_SEARCH_PATHS = (
"$(LD_RUNPATH_SEARCH_PATHS_$(IS_MACCATALYST))",
"@executable_path/../Frameworks",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
MACOSX_DEPLOYMENT_TARGET = 10.13;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = "com.sun.${PRODUCT_NAME:identifier}";
PRODUCT_NAME = ScintillaTest;
SDKROOT = macosx;
USER_HEADER_SEARCH_PATHS = "";
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
DEAD_CODE_STRIPPING = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.13;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "";
SDKROOT = macosx;
SYSTEM_HEADER_SEARCH_PATHS = "../../../lexilla/**";
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
DEAD_CODE_STRIPPING = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.13;
OTHER_LDFLAGS = "";
SDKROOT = macosx;
SYSTEM_HEADER_SEARCH_PATHS = "../../../lexilla/**";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "ScintillaTest" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4B08A954540054247B /* Debug */,
C01FCF4C08A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ScintillaTest" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:ScintillaTest.xcodeproj">
</FileRef>
</Workspace>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@ -0,0 +1,7 @@
//
// Prefix header for all source files of the 'ScintillaTest' target in the 'ScintillaTest' project
//
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif

View File

@ -0,0 +1,215 @@
-- MySQL Administrator dump 1.4
--
-- ------------------------------------------------------
-- Server version 5.0.45
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO,ANSI_QUOTES' */;
/**
* Foldable multiline comment.
*/
-- {
-- Create schema sakila
-- }
CREATE DATABASE IF NOT EXISTS sakila;
USE sakila;
DROP TABLE IF EXISTS "sakila"."actor_info";
DROP VIEW IF EXISTS "sakila"."actor_info";
CREATE TABLE "sakila"."actor_info" (
"actor_id" smallint(5) unsigned,
"first_name" varchar(45),
"last_name" varchar(45),
"film_info" varchar(341)
);
DROP TABLE IF EXISTS "sakila"."actor";
CREATE TABLE "sakila"."actor" (
"actor_id" smallint(5) unsigned NOT NULL auto_increment,
"first_name" varchar(45) NOT NULL,
"last_name" varchar(45) NOT NULL,
"last_update" timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY ("actor_id"),
KEY "idx_actor_last_name" ("last_name")
) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8;
INSERT INTO "sakila"."actor" VALUES (1,'PENELOPE','GUINESS','2006-02-15 04:34:33'),
(2,'NICK','WAHLBERG','2006-02-15 04:34:33'),
(3,'ED','CHASE','2006-02-15 04:34:33'),
(4,'JENNIFER','DAVIS','2006-02-15 04:34:33'),
(149,'RUSSELL','TEMPLE','2006-02-15 04:34:33'),
(150,'JAYNE','NOLTE','2006-02-15 04:34:33'),
(151,'GEOFFREY','HESTON','2006-02-15 04:34:33'),
(152,'BEN','HARRIS','2006-02-15 04:34:33'),
(153,'MINNIE','KILMER','2006-02-15 04:34:33'),
(154,'MERYL','GIBSON','2006-02-15 04:34:33'),
(155,'IAN','TANDY','2006-02-15 04:34:33'),
(156,'FAY','WOOD','2006-02-15 04:34:33'),
(157,'GRETA','MALDEN','2006-02-15 04:34:33'),
(158,'VIVIEN','BASINGER','2006-02-15 04:34:33'),
(159,'LAURA','BRODY','2006-02-15 04:34:33'),
(160,'CHRIS','DEPP','2006-02-15 04:34:33'),
(161,'HARVEY','HOPE','2006-02-15 04:34:33'),
(162,'OPRAH','KILMER','2006-02-15 04:34:33'),
(163,'CHRISTOPHER','WEST','2006-02-15 04:34:33'),
(164,'HUMPHREY','WILLIS','2006-02-15 04:34:33'),
(165,'AL','GARLAND','2006-02-15 04:34:33'),
(166,'NICK','DEGENERES','2006-02-15 04:34:33'),
(167,'LAURENCE','BULLOCK','2006-02-15 04:34:33'),
(168,'WILL','WILSON','2006-02-15 04:34:33'),
(169,'KENNETH','HOFFMAN','2006-02-15 04:34:33'),
(170,'MENA','HOPPER','2006-02-15 04:34:33'),
(171,'OLYMPIA','PFEIFFER','2006-02-15 04:34:33'),
(190,'AUDREY','BAILEY','2006-02-15 04:34:33'),
(191,'GREGORY','GOODING','2006-02-15 04:34:33'),
(192,'JOHN','SUVARI','2006-02-15 04:34:33'),
(193,'BURT','TEMPLE','2006-02-15 04:34:33'),
(194,'MERYL','ALLEN','2006-02-15 04:34:33'),
(195,'JAYNE','SILVERSTONE','2006-02-15 04:34:33'),
(196,'BELA','WALKEN','2006-02-15 04:34:33'),
(197,'REESE','WEST','2006-02-15 04:34:33'),
(198,'MARY','KEITEL','2006-02-15 04:34:33'),
(199,'JULIA','FAWCETT','2006-02-15 04:34:33'),
(200,'THORA','TEMPLE','2006-02-15 04:34:33');
DROP TRIGGER /*!50030 IF EXISTS */ "sakila"."payment_date";
DELIMITER $$
CREATE DEFINER = "root"@"localhost" TRIGGER "sakila"."payment_date" BEFORE INSERT ON "payment" FOR EACH ROW SET NEW.payment_date = NOW() $$
DELIMITER ;
DROP TABLE IF EXISTS "sakila"."sales_by_store";
DROP VIEW IF EXISTS "sakila"."sales_by_store";
CREATE ALGORITHM=UNDEFINED DEFINER="root"@"localhost" SQL SECURITY DEFINER VIEW "sakila"."sales_by_store" AS select concat("c"."city",_utf8',',"cy"."country") AS "store",concat("m"."first_name",_utf8' ',"m"."last_name") AS "manager",sum("p"."amount") AS "total_sales" from ((((((("sakila"."payment" "p" join "sakila"."rental" "r" on(("p"."rental_id" = "r"."rental_id"))) join "sakila"."inventory" "i" on(("r"."inventory_id" = "i"."inventory_id"))) join "sakila"."store" "s" on(("i"."store_id" = "s"."store_id"))) join "sakila"."address" "a" on(("s"."address_id" = "a"."address_id"))) join "sakila"."city" "c" on(("a"."city_id" = "c"."city_id"))) join "sakila"."country" "cy" on(("c"."country_id" = "cy"."country_id"))) join "sakila"."staff" "m" on(("s"."manager_staff_id" = "m"."staff_id"))) group by "s"."store_id" order by "cy"."country","c"."city";
--
-- View structure for view `staff_list`
--
CREATE VIEW staff_list
AS
SELECT s.staff_id AS ID, CONCAT(s.first_name, _utf8' ', s.last_name) AS name, a.address AS address, a.postal_code AS `zip code`, a.phone AS phone,
city.city AS city, country.country AS country, s.store_id AS SID
FROM staff AS s JOIN address AS a ON s.address_id = a.address_id JOIN city ON a.city_id = city.city_id
JOIN country ON city.country_id = country.country_id;
--
-- View structure for view `actor_info`
--
CREATE DEFINER=CURRENT_USER SQL SECURITY INVOKER VIEW actor_info
AS
SELECT
a.actor_id,
a.first_name,
a.last_name,
GROUP_CONCAT(DISTINCT CONCAT(c.name, ': ',
(SELECT GROUP_CONCAT(f.title ORDER BY f.title SEPARATOR ', ')
FROM sakila.film f
INNER JOIN sakila.film_category fc
ON f.film_id = fc.film_id
INNER JOIN sakila.film_actor fa
ON f.film_id = fa.film_id
WHERE fc.category_id = c.category_id
AND fa.actor_id = a.actor_id
)
)
ORDER BY c.name SEPARATOR '; ')
AS film_info
FROM sakila.actor a
LEFT JOIN sakila.film_actor fa
ON a.actor_id = fa.actor_id
LEFT JOIN sakila.film_category fc
ON fa.film_id = fc.film_id
LEFT JOIN sakila.category c
ON fc.category_id = c.category_id
GROUP BY a.actor_id, a.first_name, a.last_name;
DELIMITER $$
CREATE FUNCTION get_customer_balance(p_customer_id INT, p_effective_date DATETIME) RETURNS DECIMAL(5,2)
DETERMINISTIC
READS SQL DATA
BEGIN
#OK, WE NEED TO CALCULATE THE CURRENT BALANCE GIVEN A CUSTOMER_ID AND A DATE
#THAT WE WANT THE BALANCE TO BE EFFECTIVE FOR. THE BALANCE IS:
# 1) RENTAL FEES FOR ALL PREVIOUS RENTALS
# 2) ONE DOLLAR FOR EVERY DAY THE PREVIOUS RENTALS ARE OVERDUE
# 3) IF A FILM IS MORE THAN RENTAL_DURATION * 2 OVERDUE, CHARGE THE REPLACEMENT_COST
# 4) SUBTRACT ALL PAYMENTS MADE BEFORE THE DATE SPECIFIED
DECLARE v_rentfees DECIMAL(5,2); #FEES PAID TO RENT THE VIDEOS INITIALLY
DECLARE v_overfees INTEGER; #LATE FEES FOR PRIOR RENTALS
DECLARE v_payments DECIMAL(5,2); #SUM OF PAYMENTS MADE PREVIOUSLY
SELECT IFNULL(SUM(film.rental_rate),0) INTO v_rentfees
FROM film, inventory, rental
WHERE film.film_id = inventory.film_id
AND inventory.inventory_id = rental.inventory_id
AND rental.rental_date <= p_effective_date
AND rental.customer_id = p_customer_id;
SELECT IFNULL(SUM(IF((TO_DAYS(rental.return_date) - TO_DAYS(rental.rental_date)) > film.rental_duration,
((TO_DAYS(rental.return_date) - TO_DAYS(rental.rental_date)) - film.rental_duration),0)),0) INTO v_overfees
FROM rental, inventory, film
WHERE film.film_id = inventory.film_id
AND inventory.inventory_id = rental.inventory_id
AND rental.rental_date <= p_effective_date
AND rental.customer_id = p_customer_id;
SELECT IFNULL(SUM(payment.amount),0) INTO v_payments
FROM payment
WHERE payment.payment_date <= p_effective_date
AND payment.customer_id = p_customer_id;
RETURN v_rentfees + v_overfees - v_payments;
END $$
DELIMITER ;
DELIMITER $$
CREATE FUNCTION inventory_in_stock(p_inventory_id INT) RETURNS BOOLEAN
READS SQL DATA
BEGIN
DECLARE v_rentals INT;
DECLARE v_out INT;
#AN ITEM IS IN-STOCK IF THERE ARE EITHER NO ROWS IN THE rental TABLE
#FOR THE ITEM OR ALL ROWS HAVE return_date POPULATED
SELECT COUNT(*) INTO v_rentals
FROM rental
WHERE inventory_id = p_inventory_id;
IF v_rentals = 0 THEN
RETURN TRUE;
END IF;
SELECT COUNT(rental_id) INTO v_out
FROM inventory LEFT JOIN rental USING(inventory_id)
WHERE inventory.inventory_id = p_inventory_id
AND rental.return_date IS NULL;
IF v_out > 0 THEN
RETURN FALSE;
ELSE
RETURN TRUE;
END IF;
END $$
DELIMITER ;

View File

@ -0,0 +1,609 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="12120" systemVersion="16E195" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="12120"/>
<capability name="box content view" minToolsVersion="7.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication"/>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<menu title="AMainMenu" systemMenu="main" id="29" userLabel="MainMenu">
<items>
<menuItem title="NewApplication" id="56">
<menu key="submenu" title="NewApplication" systemMenu="apple" id="57">
<items>
<menuItem title="About NewApplication" id="58">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-2" id="142"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="236">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Preferences…" keyEquivalent="," id="129" userLabel="121"/>
<menuItem isSeparatorItem="YES" id="143">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Services" id="131">
<menu key="submenu" title="Services" systemMenu="services" id="130"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="144">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Hide NewApplication" keyEquivalent="h" id="134">
<connections>
<action selector="hide:" target="-1" id="367"/>
</connections>
</menuItem>
<menuItem title="Hide Others" keyEquivalent="h" id="145">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="hideOtherApplications:" target="-1" id="368"/>
</connections>
</menuItem>
<menuItem title="Show All" id="150">
<connections>
<action selector="unhideAllApplications:" target="-1" id="370"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="149">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Quit NewApplication" keyEquivalent="q" id="136" userLabel="1111">
<connections>
<action selector="terminate:" target="-3" id="449"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="File" id="83">
<menu key="submenu" title="File" id="81">
<items>
<menuItem title="New" keyEquivalent="n" id="82" userLabel="9">
<connections>
<action selector="newDocument:" target="-1" id="373"/>
</connections>
</menuItem>
<menuItem title="Open…" keyEquivalent="o" id="72">
<connections>
<action selector="openDocument:" target="-1" id="374"/>
</connections>
</menuItem>
<menuItem title="Open Recent" id="124">
<menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="125">
<items>
<menuItem title="Clear Menu" id="126">
<connections>
<action selector="clearRecentDocuments:" target="-1" id="127"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem isSeparatorItem="YES" id="79" userLabel="7">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Close" keyEquivalent="w" id="73" userLabel="1">
<connections>
<action selector="performClose:" target="-1" id="193"/>
</connections>
</menuItem>
<menuItem title="Save" keyEquivalent="s" id="75" userLabel="3">
<connections>
<action selector="saveDocument:" target="-1" id="362"/>
</connections>
</menuItem>
<menuItem title="Save As…" keyEquivalent="S" id="80" userLabel="8">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
<connections>
<action selector="saveDocumentAs:" target="-1" id="363"/>
</connections>
</menuItem>
<menuItem title="Revert to Saved" id="112" userLabel="10">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="revertDocumentToSaved:" target="-1" id="364"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="74" userLabel="2">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Page Setup..." keyEquivalent="P" id="77" userLabel="5">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
<connections>
<action selector="runPageLayout:" target="-1" id="87"/>
</connections>
</menuItem>
<menuItem title="Print…" keyEquivalent="p" id="78" userLabel="6">
<connections>
<action selector="print:" target="-1" id="86"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Edit" id="217">
<menu key="submenu" title="Edit" id="205">
<items>
<menuItem title="Undo" keyEquivalent="z" id="207">
<connections>
<action selector="undo:" target="-1" id="223"/>
</connections>
</menuItem>
<menuItem title="Redo" keyEquivalent="Z" id="215">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
<connections>
<action selector="redo:" target="-1" id="231"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="206">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Cut" keyEquivalent="x" id="199">
<connections>
<action selector="cut:" target="-1" id="228"/>
</connections>
</menuItem>
<menuItem title="Copy" keyEquivalent="c" id="197">
<connections>
<action selector="copy:" target="-1" id="224"/>
</connections>
</menuItem>
<menuItem title="Paste" keyEquivalent="v" id="203">
<connections>
<action selector="paste:" target="-1" id="226"/>
</connections>
</menuItem>
<menuItem title="Delete" id="202">
<connections>
<action selector="delete:" target="-1" id="235"/>
</connections>
</menuItem>
<menuItem title="Select All" keyEquivalent="a" id="198">
<connections>
<action selector="selectAll:" target="-1" id="232"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="214">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Find" id="218">
<menu key="submenu" title="Find" id="220">
<items>
<menuItem title="Find…" tag="1" keyEquivalent="f" id="209">
<connections>
<action selector="performFindPanelAction:" target="-1" id="241"/>
</connections>
</menuItem>
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="208"/>
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="213">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
</menuItem>
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="221"/>
<menuItem title="Jump to Selection" keyEquivalent="j" id="210">
<connections>
<action selector="centerSelectionInVisibleArea:" target="-1" id="245"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Spelling and Grammar" id="216">
<menu key="submenu" title="Spelling and Grammar" id="200">
<items>
<menuItem title="Show Spelling…" keyEquivalent=":" id="204">
<connections>
<action selector="showGuessPanel:" target="-1" id="230"/>
</connections>
</menuItem>
<menuItem title="Check Spelling" keyEquivalent=";" id="201">
<connections>
<action selector="checkSpelling:" target="-1" id="225"/>
</connections>
</menuItem>
<menuItem title="Check Spelling While Typing" id="219">
<connections>
<action selector="toggleContinuousSpellChecking:" target="-1" id="222"/>
</connections>
</menuItem>
<menuItem title="Check Grammar With Spelling" id="346">
<connections>
<action selector="toggleGrammarChecking:" target="-1" id="347"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Substitutions" id="348">
<menu key="submenu" title="Substitutions" id="349">
<items>
<menuItem title="Smart Copy/Paste" tag="1" keyEquivalent="f" id="350">
<connections>
<action selector="toggleSmartInsertDelete:" target="-1" id="355"/>
</connections>
</menuItem>
<menuItem title="Smart Quotes" tag="2" keyEquivalent="g" id="351">
<connections>
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="356"/>
</connections>
</menuItem>
<menuItem title="Smart Links" tag="3" keyEquivalent="G" id="354">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
<connections>
<action selector="toggleAutomaticLinkDetection:" target="-1" id="357"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Speech" id="211">
<menu key="submenu" title="Speech" id="212">
<items>
<menuItem title="Start Speaking" id="196">
<connections>
<action selector="startSpeaking:" target="-1" id="233"/>
</connections>
</menuItem>
<menuItem title="Stop Speaking" id="195">
<connections>
<action selector="stopSpeaking:" target="-1" id="227"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Format" id="375">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Format" id="376">
<items>
<menuItem title="Font" id="377">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Font" systemMenu="font" id="388">
<items>
<menuItem title="Show Fonts" keyEquivalent="t" id="389">
<connections>
<action selector="orderFrontFontPanel:" target="420" id="424"/>
</connections>
</menuItem>
<menuItem title="Bold" tag="2" keyEquivalent="b" id="390">
<connections>
<action selector="addFontTrait:" target="420" id="421"/>
</connections>
</menuItem>
<menuItem title="Italic" tag="1" keyEquivalent="i" id="391">
<connections>
<action selector="addFontTrait:" target="420" id="422"/>
</connections>
</menuItem>
<menuItem title="Underline" keyEquivalent="u" id="392">
<connections>
<action selector="underline:" target="-1" id="432"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="393"/>
<menuItem title="Bigger" tag="3" keyEquivalent="+" id="394">
<connections>
<action selector="modifyFont:" target="420" id="425"/>
</connections>
</menuItem>
<menuItem title="Smaller" tag="4" keyEquivalent="-" id="395">
<connections>
<action selector="modifyFont:" target="420" id="423"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="396"/>
<menuItem title="Kern" id="397">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Kern" id="415">
<items>
<menuItem title="Use Default" id="416">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="useStandardKerning:" target="-1" id="438"/>
</connections>
</menuItem>
<menuItem title="Use None" id="417">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="turnOffKerning:" target="-1" id="441"/>
</connections>
</menuItem>
<menuItem title="Tighten" id="418">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="tightenKerning:" target="-1" id="431"/>
</connections>
</menuItem>
<menuItem title="Loosen" id="419">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="loosenKerning:" target="-1" id="435"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Ligature" id="398">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Ligature" id="411">
<items>
<menuItem title="Use Default" id="412">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="useStandardLigatures:" target="-1" id="439"/>
</connections>
</menuItem>
<menuItem title="Use None" id="413">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="turnOffLigatures:" target="-1" id="440"/>
</connections>
</menuItem>
<menuItem title="Use All" id="414">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="useAllLigatures:" target="-1" id="434"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Baseline" id="399">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Baseline" id="405">
<items>
<menuItem title="Use Default" id="406">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="unscript:" target="-1" id="437"/>
</connections>
</menuItem>
<menuItem title="Superscript" id="407">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="superscript:" target="-1" id="430"/>
</connections>
</menuItem>
<menuItem title="Subscript" id="408">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="subscript:" target="-1" id="429"/>
</connections>
</menuItem>
<menuItem title="Raise" id="409">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="raiseBaseline:" target="-1" id="426"/>
</connections>
</menuItem>
<menuItem title="Lower" id="410">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="lowerBaseline:" target="-1" id="427"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Font Quality" id="469">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Font Quality" id="470">
<items>
<menuItem title="Default" id="471">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="setFontQuality:" target="450" id="475"/>
</connections>
</menuItem>
<menuItem title="Non-antialiased" tag="1" id="472">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="setFontQuality:" target="450" id="476"/>
</connections>
</menuItem>
<menuItem title="Antialiased" tag="2" id="473">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="setFontQuality:" target="450" id="477"/>
</connections>
</menuItem>
<menuItem title="LCD Optimized" tag="3" id="474">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="setFontQuality:" target="450" id="478"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem isSeparatorItem="YES" id="400"/>
<menuItem title="Show Colors" keyEquivalent="C" id="401">
<connections>
<action selector="orderFrontColorPanel:" target="-1" id="433"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="402"/>
<menuItem title="Copy Style" keyEquivalent="c" id="403">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="copyFont:" target="-1" id="428"/>
</connections>
</menuItem>
<menuItem title="Paste Style" keyEquivalent="v" id="404">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="pasteFont:" target="-1" id="436"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Text" id="378">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Text" id="379">
<items>
<menuItem title="Align Left" keyEquivalent="{" id="380">
<connections>
<action selector="alignLeft:" target="-1" id="442"/>
</connections>
</menuItem>
<menuItem title="Center" keyEquivalent="|" id="381">
<connections>
<action selector="alignCenter:" target="-1" id="445"/>
</connections>
</menuItem>
<menuItem title="Justify" id="382">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="alignJustified:" target="-1" id="443"/>
</connections>
</menuItem>
<menuItem title="Align Right" keyEquivalent="}" id="383">
<connections>
<action selector="alignRight:" target="-1" id="447"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="384"/>
<menuItem title="Show Ruler" id="385">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleRuler:" target="-1" id="446"/>
</connections>
</menuItem>
<menuItem title="Copy Ruler" keyEquivalent="c" id="386">
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
<connections>
<action selector="copyRuler:" target="-1" id="444"/>
</connections>
</menuItem>
<menuItem title="Paste Ruler" keyEquivalent="v" id="387">
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
<connections>
<action selector="pasteRuler:" target="-1" id="448"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="View" id="295">
<menu key="submenu" title="View" id="296">
<items>
<menuItem title="Show Toolbar" keyEquivalent="t" id="297">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="toggleToolbarShown:" target="-1" id="366"/>
</connections>
</menuItem>
<menuItem title="Customize Toolbar…" id="298">
<connections>
<action selector="runToolbarCustomizationPalette:" target="-1" id="365"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="K3d-cY-vZn"/>
<menuItem title="Add or Remove Extra Scintilla" keyEquivalent="d" id="zQU-z1-l5t">
<connections>
<action selector="addRemoveExtra:" target="450" id="9HG-Le-GbA"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Window" id="19">
<menu key="submenu" title="Window" systemMenu="window" id="24">
<items>
<menuItem title="Minimize" keyEquivalent="m" id="23">
<connections>
<action selector="performMiniaturize:" target="-1" id="37"/>
</connections>
</menuItem>
<menuItem title="Zoom" id="239">
<connections>
<action selector="performZoom:" target="-1" id="240"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="92">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Bring All to Front" id="5">
<connections>
<action selector="arrangeInFront:" target="-1" id="39"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Help" id="103" userLabel="1">
<menu key="submenu" title="Help" id="106" userLabel="2">
<items>
<menuItem title="NewApplication Help" keyEquivalent="?" id="111">
<connections>
<action selector="showHelp:" target="-1" id="360"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="371">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="335" y="58" width="982" height="692"/>
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="878"/>
<view key="contentView" id="372">
<rect key="frame" x="0.0" y="0.0" width="982" height="692"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<subviews>
<box autoresizesSubviews="NO" borderType="line" title="Scintilla Editor" id="451">
<rect key="frame" x="17" y="16" width="844" height="606"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<view key="contentView" id="e8h-ir-tqU">
<rect key="frame" x="1" y="1" width="842" height="590"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</view>
</box>
<button verticalHuggingPriority="750" id="452">
<rect key="frame" x="872" y="12" width="96" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<buttonCell key="cell" type="push" title="Quit" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="453">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="terminate:" target="-3" id="455"/>
</connections>
</button>
<searchField wantsLayer="YES" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" id="466">
<rect key="frame" x="20" y="630" width="287" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" bezelStyle="round" id="467">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</searchFieldCell>
<connections>
<action selector="searchText:" target="450" id="468"/>
</connections>
</searchField>
</subviews>
</view>
</window>
<customObject id="420" customClass="NSFontManager"/>
<customObject id="450" customClass="AppController">
<connections>
<outlet property="mEditHost" destination="451" id="454"/>
</connections>
</customObject>
</objects>
</document>

View File

@ -0,0 +1,15 @@
/**
* main.m
* ScintillaTest
*
* Created by Mike Lischke on 02.04.09.
* Copyright Sun Microsystems, Inc 2009. All rights reserved.
* This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
*/
#import <Cocoa/Cocoa.h>
int main(int argc, char *argv[])
{
return NSApplicationMain(argc, (const char **) argv);
}

View File

@ -0,0 +1,168 @@
/**
* Declaration of the native Cocoa View that serves as container for the scintilla parts.
* @file ScintillaView.h
*
* Created by Mike Lischke.
*
* Copyright 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright 2009, 2011 Sun Microsystems, Inc. All rights reserved.
* This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
*/
#import <Cocoa/Cocoa.h>
#import "Scintilla.h"
#import "InfoBarCommunicator.h"
/**
* Scintilla sends these two messages to the notify handler. Please refer
* to the Windows API doc for details about the message format.
*/
#define WM_COMMAND 1001
#define WM_NOTIFY 1002
/**
* On the Mac, there is no WM_COMMAND or WM_NOTIFY message that can be sent
* back to the parent. Therefore, there must be a callback handler that acts
* like a Windows WndProc, where Scintilla can send notifications to. Use
* ScintillaView registerNotifyCallback() to register such a handler.
* Message format is:
* <br>
* WM_COMMAND: HIWORD (wParam) = notification code, LOWORD (wParam) = control ID, lParam = ScintillaCocoa*
* <br>
* WM_NOTIFY: wParam = control ID, lParam = ptr to SCNotification structure, with hwndFrom set to ScintillaCocoa*
*/
typedef void(*SciNotifyFunc)(intptr_t windowid, unsigned int iMessage, uintptr_t wParam, uintptr_t lParam);
extern NSString *const SCIUpdateUINotification;
@protocol ScintillaNotificationProtocol
- (void) notification: (SCNotification *) notification;
@end
/**
* SCIScrollView provides pre-macOS 10.14 tiling behavior.
*/
@interface SCIScrollView : NSScrollView;
@end
/**
* SCIMarginView draws line numbers and other margins next to the text view.
*/
@interface SCIMarginView : NSRulerView;
@end
/**
* SCIContentView is the Cocoa interface to the Scintilla backend. It handles text input and
* provides a canvas for painting the output.
*/
@interface SCIContentView : NSView <
NSTextInputClient,
NSUserInterfaceValidations,
NSDraggingSource,
NSDraggingDestination,
NSAccessibilityStaticText>;
- (void) setCursor: (int) cursor; // Needed by ScintillaCocoa
@end
/**
* ScintillaView is the class instantiated by client code.
* It contains an NSScrollView which contains a SCIMarginView and a SCIContentView.
* It is responsible for providing an API and communicating to a delegate.
*/
@interface ScintillaView : NSView <InfoBarCommunicator, ScintillaNotificationProtocol>;
@property(nonatomic, unsafe_unretained) id<ScintillaNotificationProtocol> delegate;
@property(nonatomic, readonly) NSScrollView *scrollView;
+ (Class) contentViewClass;
- (void) notify: (NotificationType) type message: (NSString *) message location: (NSPoint) location
value: (float) value;
- (void) setCallback: (id <InfoBarCommunicator>) callback;
- (void) suspendDrawing: (BOOL) suspend;
- (void) notification: (SCNotification *) notification;
- (void) updateIndicatorIME;
// Scroller handling
- (void) setMarginWidth: (int) width;
- (SCIContentView *) content;
- (void) updateMarginCursors;
// NSTextView compatibility layer.
- (NSString *) string;
- (void) setString: (NSString *) aString;
- (void) insertText: (id) aString;
- (void) setEditable: (BOOL) editable;
- (BOOL) isEditable;
- (NSRange) selectedRange;
- (NSRange) selectedRangePositions;
- (NSString *) selectedString;
- (void) deleteRange: (NSRange) range;
- (void) setFontName: (NSString *) font
size: (int) size
bold: (BOOL) bold
italic: (BOOL) italic;
// Native call through to the backend.
+ (sptr_t) directCall: (ScintillaView *) sender message: (unsigned int) message wParam: (uptr_t) wParam
lParam: (sptr_t) lParam;
- (sptr_t) message: (unsigned int) message wParam: (uptr_t) wParam lParam: (sptr_t) lParam;
- (sptr_t) message: (unsigned int) message wParam: (uptr_t) wParam;
- (sptr_t) message: (unsigned int) message;
// Back end properties getters and setters.
- (void) setGeneralProperty: (int) property parameter: (long) parameter value: (long) value;
- (void) setGeneralProperty: (int) property value: (long) value;
- (long) getGeneralProperty: (int) property;
- (long) getGeneralProperty: (int) property parameter: (long) parameter;
- (long) getGeneralProperty: (int) property parameter: (long) parameter extra: (long) extra;
- (long) getGeneralProperty: (int) property ref: (const void *) ref;
- (void) setColorProperty: (int) property parameter: (long) parameter value: (NSColor *) value;
- (void) setColorProperty: (int) property parameter: (long) parameter fromHTML: (NSString *) fromHTML;
- (NSColor *) getColorProperty: (int) property parameter: (long) parameter;
- (void) setReferenceProperty: (int) property parameter: (long) parameter value: (const void *) value;
- (const void *) getReferenceProperty: (int) property parameter: (long) parameter;
- (void) setStringProperty: (int) property parameter: (long) parameter value: (NSString *) value;
- (NSString *) getStringProperty: (int) property parameter: (long) parameter;
- (void) setLexerProperty: (NSString *) name value: (NSString *) value;
- (NSString *) getLexerProperty: (NSString *) name;
// The delegate property should be used instead of registerNotifyCallback which is deprecated.
- (void) registerNotifyCallback: (intptr_t) windowid value: (SciNotifyFunc) callback __attribute__ ( (deprecated)) ;
- (void) setInfoBar: (NSView <InfoBarCommunicator> *) aView top: (BOOL) top;
- (void) setStatusText: (NSString *) text;
- (BOOL) findAndHighlightText: (NSString *) searchText
matchCase: (BOOL) matchCase
wholeWord: (BOOL) wholeWord
scrollTo: (BOOL) scrollTo
wrap: (BOOL) wrap;
- (BOOL) findAndHighlightText: (NSString *) searchText
matchCase: (BOOL) matchCase
wholeWord: (BOOL) wholeWord
scrollTo: (BOOL) scrollTo
wrap: (BOOL) wrap
backwards: (BOOL) backwards;
- (int) findAndReplaceText: (NSString *) searchText
byText: (NSString *) newText
matchCase: (BOOL) matchCase
wholeWord: (BOOL) wholeWord
doAll: (BOOL) doAll;
@end

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,66 @@
# Script to build Scintilla for macOS with most supported build files.
# Current directory should be scintilla/cocoa before running.
cd ../..
# ************************************************************
# Target 1: Unit tests
echo Unit tests
cd scintilla/test/unit
make clean
make test
cd ../../..
# ************************************************************
# Target 2: build framework and test app with Xcode targeting macOS 10.n with n from 9 to 5
# Only SDK versions that are installed will be built
# Clean both then build both -- if perform clean in ScintillaTest, also cleans ScintillaFramework
# which can cause double build
echo Building Cocoa-native ScintillaFramework and ScintillaTest
for sdk in macosx10.15 macosx10.14
do
xcodebuild -showsdks | grep $sdk
if [ "$(xcodebuild -showsdks | grep $sdk)" != "" ]
then
echo Building with $sdk
cd scintilla/cocoa/ScintillaFramework
xcodebuild clean
cd ../ScintillaTest
xcodebuild clean
cd ../ScintillaFramework
xcodebuild -sdk $sdk
cd ../ScintillaTest
xcodebuild -sdk $sdk
cd ../../..
else
echo Warning $sdk not available
fi
done
# ************************************************************
# Target 3: Qt builds
# Requires Qt development libraries and qmake to be installed
echo Building Qt and PySide
cd scintilla/qt
cd ScintillaEditBase
qmake -spec macx-xcode
xcodebuild clean
xcodebuild
cd ..
cd ScintillaEdit
python3 WidgetGen.py
qmake -spec macx-xcode
xcodebuild clean
xcodebuild
cd ..
cd ScintillaEditPy
python2 sepbuild.py
cd ..
cd ../..

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -0,0 +1,92 @@
// File to suppress cppcheck warnings for files that will not be fixed.
// Does not suppress warnings where an additional occurrence of the warning may be of interest.
// Configured for cppcheck 2.11
// Coding style is to use assignments in constructor when there are many
// members to initialize or the initialization is complex or has comments.
useInitializationList
// These may be interesting but its not clear without examining each instance closely
// Would have to ensure that any_of/all_of has same early/late exits as current code and
// produces same result on empty collections
useStlAlgorithm
// Written with variable for consistency
knownArgument:scintilla/src/SparseVector.h
// cppcheck 2.11 can't find system headers on Win32.
missingIncludeSystem
// cppcheck 2.11 limits checking of complex functions unless --check-level=exhaustive
checkLevelNormal:scintilla/src/Editor.cxx
// The cast converts from 'unsigned char ' to 'char' so isn't unused.
// Redundant code: Found unused cast of expression 'leadByte'
constStatement:scintilla/src/Document.cxx
// ILexer5* is not pointing at logically const
constParameterPointer:scintilla/src/Document.cxx
// Doesn't seem to understand that values change in loops
knownConditionTrueFalse:scintilla/src/Document.cxx
// Some non-explicit constructors are used for conversions or are private to lexers
noExplicitConstructor
// MarginView access to all bits is safe and is better defined in later versions of C++
shiftTooManyBitsSigned:scintilla/src/MarginView.cxx
// DLL entry points are unused inside Scintilla
unusedFunction:scintilla/win32/ScintillaDLL.cxx
// ScintillaDocument is providing an API and there are no consumers of the API inside Scintilla
unusedFunction:scintilla/qt/ScintillaEdit/ScintillaDocument.cpp
// Doesn't understand changing dropWentOutside in Editor
knownConditionTrueFalse:scintilla/win32/ScintillaWin.cxx
// GetData is implementing interface so shouldn't add const
constParameterPointer:scintilla/win32/ScintillaWin.cxx
// Doesn't handle intptr_t (long long) being signed
knownConditionTrueFalse:scintilla/src/Editor.cxx
knownConditionTrueFalse:scintilla/src/EditView.cxx
// cppcheck seems to believe that unique_ptr<T *[]>::get returns void* instead of T**
arithOperationsOnVoidPointer:scintilla/src/PerLine.cxx
arithOperationsOnVoidPointer:scintilla/src/PositionCache.cxx
// G_DEFINE_TYPE is too complex to pass to cppcheck
unknownMacro:scintilla/gtk/PlatGTK.cxx
// maskSmooth set depending on preprocessor allowing Wayland definition
badBitmaskCheck:scintilla/gtk/ScintillaGTK.cxx
// Changing events to const pointers changes signature and would require casts when hooking up
constParameterPointer:scintilla/gtk/ScintillaGTK.cxx
constParameterCallback:scintilla/gtk/ScintillaGTK.cxx
// Difficult to test accessibility so don't change
constParameterPointer:scintilla/gtk/ScintillaGTKAccessible.cxx
constVariableReference:scintilla/gtk/ScintillaGTKAccessible.cxx
constVariablePointer:scintilla/gtk/ScintillaGTKAccessible.cxx
// moc_ files show #error as they are not built with standard context
preprocessorErrorDirective:scintilla/qt/*.cpp
// Doesn't understand Qt slots macro
unknownMacro:scintilla/qt/ScintillaEditBase/*.h
// The performance cost of by-value passing is often small and using a reference decreases
// code legibility.
passedByValue
// Suppress everything in catch.hpp as won't be changing
*:scintilla/test/unit/catch.hpp
// Checks for moves move to variables that are not read but the moved from is checked
unreadVariable:scintilla/test/unit/*.cxx
accessMoved:scintilla/test/unit/*.cxx
// cppcheck fails REQUIRE from Catch
comparisonOfFuncReturningBoolError:scintilla/test/unit/*.cxx

View File

@ -0,0 +1 @@
@del /S /Q *.a *.aps *.bsc *.dll *.dsw *.exe *.idb *.ilc *.ild *.ilf *.ilk *.ils *.lib *.map *.ncb *.obj *.o *.opt *.ipdb *.pdb *.plg *.res *.sbr *.tds *.exp *.tlog *.lastbuildstate >NUL:

View File

@ -0,0 +1,30 @@
Some of the build files adapt to adding and removing source code files but most
must be modified by hand. Here is a list of directories and the build files that
must be modified or possibly need to be modified.
The Cocoa project.pbxproj file is complex and should be modified with Xcode.
The other build files can be edited manually.
src:
cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj
gtk/makefile
qt/ScintillaEdit/ScintillaEdit.pro
qt/ScintillaEditBase/ScintillaEditBase.pro
win32/makefile
win32/scintilla.mak
-- possibly:
test/unit/makefile
test/unit/test.mak
cocoa:
cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj
gtk:
gtk/makefile
qt:
qt/ScintillaEdit/ScintillaEdit.pro
qt/ScintillaEditBase/ScintillaEditBase.pro
win32:
win32/makefile
win32/scintilla.mak

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -0,0 +1,246 @@
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org" />
<meta name="generator" content="SciTE" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>
Scintilla and SciTE
</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td>
<img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
</td>
<td>
<a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
Component Design</font></a>
</td>
</tr>
</table>
<h2>
Top level structure
</h2>
<p>
Scintilla consists of three major layers of C++ code
</p>
<ul>
<li>
Portability Library
</li>
<li>
Core Code
</li>
<li>
Platform Events and API
</li>
</ul>
<p>
The primary purpose of this structure is to separate the platform dependent code from the
platform independent core code. This makes it easier to port Scintilla to a new platform and
ensures that most readers of the code do not have to deal with platform details. To minimise
portability problems and avoid code bloat, a conservative subset of C++ is used in Scintilla
with no exception handling, run time type information or use of the standard C++
library and with limited use of templates.
</p>
<p>
The currently supported platforms, Windows, GTK/Linux, Cocoa, Qt, and wxWidgets are fairly similar in
many ways.
Each has windows, menus and bitmaps. These features generally work in similar ways so each
has a way to move a window or draw a red line. Sometimes one platform requires a sequence of
calls rather than a single call. At other times, the differences are more profound. Reading
the Windows clipboard occurs synchronously but reading the GTK clipboard requires a request
call that will be asynchronously answered with a message containing the clipboard data.
The wxWidgets platform is available from the <a href="http://wxwidgets.org/">wxWidgets site</a>
</p>
<br />
<h3>
Portability Library
</h3>
<p>
This is a fairly small and thin layer over the platform's native capabilities.
</p>
<p>
The portability library is defined in Geometry.h and Platform.h and is implemented once for each platform.
PlatWin.cxx defines the Windows variants of the methods and PlatGTK.cxx the GTK variants.
</p>
<p>
Several of the classes here hold platform specific object identifiers and act as proxies to
these platform objects. Most client code can thus manipulate the platform objects without
caring which is the current platform. Sometimes client code needs access to the underlying
object identifiers and this is provided by the GetID method. The underlying types of the
platform specific identifiers are typedefed to common names to allow them to be transferred
around in client code where needed.
</p>
<h4>
Point, PRectangle
</h4>
<p>
These are simple classes provided to hold the commonly used geometric primitives. A
PRectangle follows the Mac / Windows convention of not including its bottom and right sides
instead of including all its sides as is normal in GTK. It is not called Rectangle as this may be
the name of a macro on Windows.
</p>
<h4>
ColourDesired
</h4>
<p>
This is a simple class holding an expected colour. It is internally represented as a single
32 bit integer in BGR format with 8 bits per colour, but also provides a convenient API to fetch
each component separately.
As a platform might not be able to represent the exact desired colour if it doesn't have 24 bit
depth available, it might not actually represent the exact desired colour but select a best fit
that it can actually render.
</p>
<h4>
Font
</h4>
<p>
Font holds a platform specific font identifier - HFONT for Windows, PangoFontDescription* for GTK. It
does not own the identifier and so will not delete the platform font object in its
destructor. Client code should call Destroy at appropriate times.
</p>
<h4>
Surface
</h4>
<p>
Surface is an abstraction over each platform's concept of somewhere that graphical drawing
operations can be done. It may wrap an already created drawing place such as a window or be
used to create a bitmap that can be drawn into and later copied onto another surface. On
Windows it wraps a HDC and possibly a HBITMAP. On GTK it wraps a cairo_surface_t*.
Other platform specific objects are created (and correctly destroyed) whenever
required to perform drawing actions.
</p>
<p>
Drawing operations provided include drawing filled and unfilled polygons, lines, rectangles,
ellipses and text. The height and width of text as well as other details can be measured.
Operations can be clipped to a rectangle. Most of the calls are stateless with all parameters
being passed at each call. The exception to this is line drawing which is performed by
calling MoveTo and then LineTo.
</p>
<h4>
Window
</h4>
<p>
Window acts as a proxy to a platform window allowing operations such as showing, moving,
redrawing, and destroying to be performed. It contains a platform specific window identifier
- HWND for Windows, GtkWidget* for GTK.
</p>
<h4>
ListBox
</h4>
<p>
ListBox is a subclass of Window and acts as a proxy to a platform listbox adding methods for
operations such as adding, retrieving, and selecting items.
</p>
<h4>
Menu
</h4>
<p>
Menu is a small helper class for constructing popup menus. It contains the platform specific
menu identifier - HMENU for Windows, GtkMenu* for GTK. Most of the work in
constructing menus requires access to platform events and so is done in the Platform Events
and API layer.
</p>
<h4>
Platform
</h4>
<p>
The Platform class is used to access the facilities of the platform. System wide parameters
such as double click speed and chrome colour are available from Platform. Utility functions
such as DebugPrintf are also available from Platform.
</p>
<h3>
Core Code
</h3>
<p>
The bulk of Scintilla's code is platform independent. This is made up of the CellBuffer,
ContractionState, Document, Editor, Indicator, LineMarker, Style, ViewStyle, KeyMap,
ScintillaBase, CallTip,
and AutoComplete primary classes.
</p>
<h4>
CellBuffer
</h4>
<p>
A CellBuffer holds text and styling information, the undo stack, the assignment of line
markers to lines, and the fold structure.
</p>
<p>
A cell contains a character byte and its associated style byte. The current state of the
cell buffer is the sequence of cells that make up the text and a sequence of line information
containing the starting position of each line and any markers assigned to each line.
</p>
<p>
The undo stack holds a sequence of actions on the cell buffer. Each action is one of a text
insertion, a text deletion or an undo start action. The start actions are used to group
sequences of text insertions and deletions together so they can be undone together. To
perform an undo operation, each insertion or deletion is undone in reverse sequence.
Similarly, redo reapplies each action to the buffer in sequence. Whenever a character is
inserted in the buffer either directly through a call such as InsertString or through undo or
redo, its styling byte is initially set to zero. Client code is responsible for styling each
character whenever convenient. Styling information is not stored in undo actions.
</p>
<h4>
Document
</h4>
<p>
A document contains a CellBuffer and deals with some higher level abstractions such as
words, DBCS character sequences and line end character sequences. It is responsible for
managing the styling process and for notifying other objects when changes occur to the
document.
</p>
<h4>
Editor
</h4>
<p>
The Editor object is central to Scintilla. It is responsible for displaying a document and
responding to user actions and requests from the container. It uses ContractionState, Indicator,
LineMarker, Style, and ViewStyle objects to display the document and a KeyMap class to
map key presses to functions.
The visibility of each line is kept in the ContractionState which is also responsible for mapping
from display lines to documents lines and vice versa.
</p>
<p>
There may be multiple Editor objects attached to one Document object. Changes to a
document are broadcast to the editors through the DocWatcher mechanism.
</p>
<h4>
ScintillaBase
</h4>
<p>
ScintillaBase is a subclass of Editor and adds extra windowing features including display of
calltips, autocompletion lists and context menus. These features use CallTip and AutoComplete
objects. This class is optional so a lightweight implementation of Scintilla may bypass it if
the added functionality is not required.
</p>
<h3>
Platform Events and API
</h3>
<p>
Each platform uses different mechanisms for receiving events. On Windows, events are
received through messages and COM. On GTK, callback functions are used.
</p>
<p>
For each platform, a class is derived from ScintillaBase (and thus from Editor). This is
ScintillaWin on Windows and ScintillaGTK on GTK. These classes are responsible for
connecting to the platforms event mechanism and also to implement some virtual methods in
Editor and ScintillaBase which are different on the platforms. For example, this layer has to
support this difference between the synchronous Windows clipboard and the asynchronous GTK
clipboard.
</p>
<p>
The external API is defined in this layer as each platform has different preferred styles of
API - messages on Windows and function calls on GTK. This also allows multiple APIs to be
defined on a platform. The currently available API on GTK is similar to the Windows API and
does not follow platform conventions well. A second API could be implemented here that did
follow platform conventions.
</p>
</body>
</html>

View File

@ -0,0 +1,57 @@
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org" />
<meta name="generator" content="SciTE" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>
Scintilla icons
</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td>
<img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
</td>
<td>
<a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
and SciTE</font></a>
</td>
</tr>
</table>
<h2>
Icons
</h2>
<p>
These images may be used under the same license as Scintilla.
</p>
<p>
Drawn by Iago Rubio, Philippe Lhoste, and Neil Hodgson.
</p>
<p>
<a href="http://prdownloads.sourceforge.net/scintilla/icons1.zip?download">zip format</a> (70K)
</p>
<table>
<tr>
<td>For autocompletion lists</td>
<td colspan="3">For margin markers</td>
</tr>
<tr>
<td>12x12</td>
<td>16x16</td>
<td>24x24</td>
<td>32x32</td>
</tr>
<tr>
<td valign="top"><img src="12.png" /></td>
<td valign="top"><img src="16.png" /></td>
<td valign="top"><img src="24.png" /></td>
<td valign="top"><img src="32.png" /></td>
</tr>
</table>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,226 @@
How to write a scintilla lexer
A lexer for a particular language determines how a specified range of
text shall be colored. Writing a lexer is relatively straightforward
because the lexer need only color given text. The harder job of
determining how much text actually needs to be colored is handled by
Scintilla itself, that is, the lexer's caller.
Parameters
The lexer for language LLL has the following prototype:
static void ColouriseLLLDoc (
unsigned int startPos, int length,
int initStyle,
WordList *keywordlists[],
Accessor &styler);
The styler parameter is an Accessor object. The lexer must use this
object to access the text to be colored. The lexer gets the character
at position i using styler.SafeGetCharAt(i);
The startPos and length parameters indicate the range of text to be
recolored; the lexer must determine the proper color for all characters
in positions startPos through startPos+length.
The initStyle parameter indicates the initial state, that is, the state
at the character before startPos. States also indicate the coloring to
be used for a particular range of text.
Note: the character at StartPos is assumed to start a line, so if a
newline terminates the initStyle state the lexer should enter its
default state (or whatever state should follow initStyle).
The keywordlists parameter specifies the keywords that the lexer must
recognize. A WordList class object contains methods that simplify
the recognition of keywords. Present lexers use a helper function
called classifyWordLLL to recognize keywords. These functions show how
to use the keywordlists parameter to recognize keywords. This
documentation will not discuss keywords further.
The lexer code
The task of a lexer can be summarized briefly: for each range r of
characters that are to be colored the same, the lexer should call
styler.ColourTo(i, state)
where i is the position of the last character of the range r. The lexer
should set the state variable to the coloring state of the character at
position i and continue until the entire text has been colored.
Note 1: the styler (Accessor) object remembers the i parameter in the
previous calls to styler.ColourTo, so the single i parameter suffices to
indicate a range of characters.
Note 2: As a side effect of calling styler.ColourTo(i,state), the
coloring states of all characters in the range are remembered so that
Scintilla may set the initStyle parameter correctly on future calls to
the
lexer.
Lexer organization
There are at least two ways to organize the code of each lexer. Present
lexers use what might be called a "character-based" approach: the outer
loop iterates over characters, like this:
lengthDoc = startPos + length ;
for (unsigned int i = startPos; i < lengthDoc; i++) {
chNext = styler.SafeGetCharAt(i + 1);
<< handle special cases >>
switch(state) {
// Handlers examine only ch and chNext.
// Handlers call styler.ColorTo(i,state) if the state changes.
case state_1: << handle ch in state 1 >>
case state_2: << handle ch in state 2 >>
...
case state_n: << handle ch in state n >>
}
chPrev = ch;
}
styler.ColourTo(lengthDoc - 1, state);
An alternative would be to use a "state-based" approach. The outer loop
would iterate over states, like this:
lengthDoc = startPos+lenth ;
for ( unsigned int i = startPos ;; ) {
char ch = styler.SafeGetCharAt(i);
int new_state = 0 ;
switch ( state ) {
// scanners set new_state if they set the next state.
case state_1: << scan to the end of state 1 >> break ;
case state_2: << scan to the end of state 2 >> break ;
case default_state:
<< scan to the next non-default state and set new_state >>
}
styler.ColourTo(i, state);
if ( i >= lengthDoc ) break ;
if ( ! new_state ) {
ch = styler.SafeGetCharAt(i);
<< set state based on ch in the default state >>
}
}
styler.ColourTo(lengthDoc - 1, state);
This approach might seem to be more natural. State scanners are simpler
than character scanners because less needs to be done. For example,
there is no need to test for the start of a C string inside the scanner
for a C comment. Also this way makes it natural to define routines that
could be used by more than one scanner; for example, a scanToEndOfLine
routine.
However, the special cases handled in the main loop in the
character-based approach would have to be handled by each state scanner,
so both approaches have advantages. These special cases are discussed
below.
Special case: Lead characters
Lead bytes are part of DBCS processing for languages such as Japanese
using an encoding such as Shift-JIS. In these encodings, extended
(16-bit) characters are encoded as a lead byte followed by a trail byte.
Lead bytes are rarely of any lexical significance, normally only being
allowed within strings and comments. In such contexts, lexers should
ignore ch if styler.IsLeadByte(ch) returns TRUE.
Note: UTF-8 is simpler than Shift-JIS, so no special handling is
applied for it. All UTF-8 extended characters are >= 128 and none are
lexically significant in programming languages which, so far, use only
characters in ASCII for operators, comment markers, etc.
Special case: Folding
Folding may be performed in the lexer function. It is better to use a
separate folder function as that avoids some troublesome interaction
between styling and folding. The folder function will be run after the
lexer function if folding is enabled. The rest of this section explains
how to perform folding within the lexer function.
During initialization, lexers that support folding set
bool fold = styler.GetPropertyInt("fold");
If folding is enabled in the editor, fold will be TRUE and the lexer
should call:
styler.SetLevel(line, level);
at the end of each line and just before exiting.
The line parameter is simply the count of the number of newlines seen.
It's initial value is styler.GetLine(startPos) and it is incremented
(after calling styler.SetLevel) whenever a newline is seen.
The level parameter is the desired indentation level in the low 12 bits,
along with flag bits in the upper four bits. The indentation level
depends on the language. For C++, it is incremented when the lexer sees
a '{' and decremented when the lexer sees a '}' (outside of strings and
comments, of course).
The following flag bits, defined in Scintilla.h, may be set or cleared
in the flags parameter. The SC_FOLDLEVELWHITEFLAG flag is set if the
lexer considers that the line contains nothing but whitespace. The
SC_FOLDLEVELHEADERFLAG flag indicates that the line is a fold point.
This normally means that the next line has a greater level than present
line. However, the lexer may have some other basis for determining a
fold point. For example, a lexer might create a header line for the
first line of a function definition rather than the last.
The SC_FOLDLEVELNUMBERMASK mask denotes the level number in the low 12
bits of the level param. This mask may be used to isolate either flags
or level numbers.
For example, the C++ lexer contains the following code when a newline is
seen:
if (fold) {
int lev = levelPrev;
// Set the "all whitespace" bit if the line is blank.
if (visChars == 0)
lev |= SC_FOLDLEVELWHITEFLAG;
// Set the "header" bit if needed.
if ((levelCurrent > levelPrev) && (visChars > 0))
lev |= SC_FOLDLEVELHEADERFLAG;
styler.SetLevel(lineCurrent, lev);
// reinitialize the folding vars describing the present line.
lineCurrent++;
visChars = 0; // Number of non-whitespace characters on the line.
levelPrev = levelCurrent;
}
The following code appears in the C++ lexer just before exit:
// Fill in the real level of the next line, keeping the current flags
// as they will be filled in later.
if (fold) {
// Mask off the level number, leaving only the previous flags.
int flagsNext = styler.LevelAt(lineCurrent);
flagsNext &= ~SC_FOLDLEVELNUMBERMASK;
styler.SetLevel(lineCurrent, levelPrev | flagsNext);
}
Don't worry about performance
The writer of a lexer may safely ignore performance considerations: the
cost of redrawing the screen is several orders of magnitude greater than
the cost of function calls, etc. Moreover, Scintilla performs all the
important optimizations; Scintilla ensures that a lexer will be called
only to recolor text that actually needs to be recolored. Finally, it
is not necessary to avoid extra calls to styler.ColourTo: the sytler
object buffers calls to ColourTo to avoid multiple updates of the
screen.
Page contributed by Edward K. Ream

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1,70 @@
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="SciTE" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>
Privacy Policy
</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td>
<img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
</td>
<td>
<a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
and SciTE</font></a>
</td>
</tr>
</table>
<h2>
Privacy Policy for scintilla.org
</h2>
<h3>
Information Collected
</h3>
<p>
Logs are collected to allow analysis of which pages are viewed.
The advertisements collect viewing information through Google Analytics which is
used by Google and advertisers.
No personally identifiable information is collected by scintilla.org.
</p>
<h3>
External Links
</h3>
<p>
Other web sites are linked to from this site.
These web sites have their own privacy policies which may differ significantly to those of scintilla.org.
</p>
<h3>
Cookies
</h3>
<p>
A cookie is a text file placed on the hard drive of a computer by some web pages which is used to remember
when a particular user returns to that site.
The advertisements shown on the main pages may use cookies.
</p>
<h3>
Contact
</h3>
<p>
This web site is the responsibility of Neil Hodgson.
Most queries about the site contents should go to one of the mailing lists mentioned on the main pages.
Queries about the privacy policy may be sent to neilh @ scintilla.org.
</p>
<h3>
Changes to this Policy
</h3>
<p>
This policy may change. If it does then this page will be updated and the date at the bottom will change.
</p>
<p>
This policy was last updated 2 June 2015.
</p>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -0,0 +1,296 @@
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="SciTE" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>
Scintilla and SciTE Code Style Preferences
</title>
<style>
.S0 {
color: #808080;
}
.S1 {
font-family: Comic Sans MS;
color: #007F00;
font-size: 9pt;
}
.S2 {
font-family: Comic Sans MS;
color: #007F00;
font-size: 9pt;
}
.S3 {
font-family: Comic Sans MS;
color: #3F703F;
font-size: 9pt;
}
.S4 {
color: #007F7F;
}
.S5 {
font-weight: bold;
color: #00007F;
}
.S6 {
color: #7F007F;
}
.S7 {
color: #7F007F;
}
.S8 {
color: #804080;
}
.S9 {
color: #7F7F00;
}
.S10 {
font-weight: bold;
color: #000000;
}
.S12 {
font-family: Courier New;
color: #000000;
background: #E0C0E0;
font-size: 10pt;
}
.S13 {
font-family: Courier New;
color: #007F00;
background: #E0FFE0;
font-size: 10pt;
}
.S14 {
font-family: Courier New;
color: #3F7F3F;
background: #E0F0FF;
font-size: 10pt;
}
.S15 {
font-family: Comic Sans MS;
color: #3F703F;
font-size: 9pt;
}
SPAN {
font-family: Verdana;
font-size: 10pt;
}
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td>
<img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
</td>
<td>
<a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
and SciTE</font></a>
</td>
</tr>
</table>
<h2>
Code Style
</h2>
<h3>
Introduction
</h3>
<p>
The source code of Scintilla and SciTE follow my preferences.
Some of these decisions are arbitrary and based on my sense of aesthetics
but its good to have all the code look the same even if its not exactly how
everyone would prefer.
</p>
<p>
Code that does not follow these conventions will be accepted, but will be modified
as time goes by to fit the conventions. Scintilla code follows the conventions more
closely than SciTE except for lexers which are relatively independent modules.
Lexers that are maintained by others are left as they are submitted except that
warnings will be fixed so the whole project can compile cleanly.
</p>
<p>
The <a href="http://astyle.sourceforge.net/">AStyle</a> formatting
program with '--style=attach --indent=force-tab=8 --keep-one-line-blocks
--pad-header --unpad-paren --pad-comma --indent-cases --align-pointer=name --pad-method-prefix
--pad-return-type --pad-param-type --align-method-colon --pad-method-colon=after' arguments formats code in much the right way although
there are a few bugs in AStyle.
</p>
<h3>
Language features
</h3>
<p>
Design goals for Scintilla and SciTE include portability to currently available C++
compilers on diverse platforms with high performance and low resource usage.
Scintilla has stricter portability requirements to SciTE as it may be ported to
low capability platforms.
Scintilla code must build with C++17 which can be checked with "g++ --std=c++17".
SciTE can use C++17 features that are widely available from g++ 7.1, MSVC 2017.6 and Clang 5.0 compilers.
</p>
<p>
To achieve portability, only a subset of C++ features are used.
Exceptions and templates may be used but, since Scintilla can be used from C as well as
C++, exceptions may not be thrown out of Scintilla and all exceptions should be caught
before returning from Scintilla.
A 'Scintilla' name space is used. This helps with name clashes on macOS.
</p>
<p>
The goto statement is not used because of bad memories from my first job
maintaining FORTRAN programs. The union feature is not used as it can lead to
non-type-safe value access.
</p>
<p>
The SCI_METHOD preprocessor definition should be used when implementing
interfaces which include it like ILexer and only there.
</p>
<p>
Headers should always be included in the same order as given by the
scripts/HeaderOrder.txt file.
</p>
<h3>
Casting
</h3>
<p>
Do not use old C style casts like (char *)s. Instead use the most strict form of C++
cast possible like const_cast&lt;char *&gt;(s). Use static_cast and const_cast
where possible rather than reinterpret_cast.
</p>
<p>
The benefit to using the new style casts is that they explicitly detail what evil is
occurring and act as signals that something potentially unsafe is being done.
</p>
<p>
Code that treats const seriously is easier to reason about both for humans
and compilers, so use const parameters and avoid const_cast.
</p>
<h3>
Warnings
</h3>
<p>
To help ensure code is well written and portable, it is compiled with almost all
warnings turned on. This sometimes results in warnings about code that is
completely good (false positives) but changing the code to avoid the warnings
is generally fast and has little impact on readability.
</p>
<p>
Initialise all variables and minimise the scope of variables. If a variable is defined
just before its use then it can't be misused by code before that point.
Use loop declarations that are compatible with both the C++ standard and currently
available compilers.
</p>
<h3>
Allocation
</h3>
<p>
Memory exhaustion can occur in many Scintilla methods.
This should be checked for and handled but once it has happened, it is very difficult to do
anything as Scintilla's data structures may be in an inconsistent state.
Fixed length buffers are often used as these are simple and avoid the need to
worry about memory exhaustion but then require that buffer lengths are
respected.
</p>
<p>
The C++ new and delete operators are preferred over C's malloc and free
as new and delete are type safe.
</p>
<h3>
Bracketing
</h3>
<p>
Start brackets, '{', should be located on the line of the control structure they
start and end brackets, '}', should be at the indented start of a line. When there is
an else clause, this occurs on the same line as the '}'.
This format uses less lines than alternatives, allowing more code to be seen on screen.
Fully bracketed control
structures are preferred because this makes it more likely that modifications will
be correct and it allows Scintilla's folder to work. No braces on returned
expressions as return is a keyword, not a function call.
</p>
<SPAN class=S0></SPAN><SPAN class=S5>bool</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>fn</SPAN><SPAN class=S10>(</SPAN><SPAN class=S5>int</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>a</SPAN><SPAN class=S10>)</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S5>if</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>(</SPAN><SPAN class=S11>a</SPAN><SPAN class=S10>)</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>s</SPAN><SPAN class=S10>();</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>t</SPAN><SPAN class=S10>();</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S10>}</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S5>else</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>u</SPAN><SPAN class=S10>();</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S10>}</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S5>return</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>!</SPAN><SPAN class=S11>a</SPAN><SPAN class=S10>;</SPAN><SPAN class=S0><BR>
</SPAN><SPAN class=S10>}</SPAN><SPAN class=S0><BR>
</SPAN> <h3>
Spacing
</h3>
<p>
Spaces on both sides of '=' and comparison operators and no attempt to line up '='.
No space before or after '(', when used in calls, but a space after every ','.
No spaces between tokens in short expressions but may be present in
longer expressions. Space before '{'. No space before ';'.
No space after '*' when used to mean pointer and no space after '[' or ']'.
One space between keywords and '('.
</p>
<SPAN class=S0></SPAN><SPAN class=S5>void</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>StoreConditionally</SPAN><SPAN class=S10>(</SPAN><SPAN class=S5>int</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>c</SPAN><SPAN class=S10>,</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S5>const</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S5>char</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>*</SPAN><SPAN class=S11>s</SPAN><SPAN class=S10>)</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S5>if</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>(</SPAN><SPAN class=S11>c</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>&amp;&amp;</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>(</SPAN><SPAN class=S11>baseSegment</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>==</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>trustSegment</SPAN><SPAN class=S10>[</SPAN><SPAN class=S6>"html"</SPAN><SPAN class=S10>]))</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>baseSegment</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>=</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>s</SPAN><SPAN class=S10>+</SPAN><SPAN class=S4>1</SPAN><SPAN class=S10>;</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>Store</SPAN><SPAN class=S10>(</SPAN><SPAN class=S11>s</SPAN><SPAN class=S10>,</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>baseSegment</SPAN><SPAN class=S10>,</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S6>"html"</SPAN><SPAN class=S10>);</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S10>}</SPAN><SPAN class=S0><BR>
</SPAN><SPAN class=S10>}</SPAN>
<h3>
Names
</h3>
<p>
Identifiers use mixed case and no underscores.
Class, function and method names start with an uppercase letter and use
further upper case letters to distinguish words. Variables start with a lower
case letter and use upper case letters to distinguish words.
Loop counters and similar variables can have simple names like 'i'.
Function calls should be differentiated from method calls with an initial '::'
global scope modifier.
</p>
<SPAN class=S0></SPAN><SPAN class=S5>class</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>StorageZone</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
</SPAN><SPAN class=S5>public</SPAN><SPAN class=S10>:</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S5>void</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>Store</SPAN><SPAN class=S10>(</SPAN><SPAN class=S5>const</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S5>char</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>*</SPAN><SPAN class=S11>s</SPAN><SPAN class=S10>)</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>Media</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>*</SPAN><SPAN class=S11>mediaStore</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>=</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>::</SPAN><SPAN class=S11>GetBaseMedia</SPAN><SPAN class=S10>(</SPAN><SPAN class=S11>zoneDefault</SPAN><SPAN class=S10>);</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S5>for</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>(</SPAN><SPAN class=S5>int</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>i</SPAN><SPAN class=S10>=</SPAN><SPAN class=S11>mediaStore</SPAN><SPAN class=S10>-&gt;</SPAN><SPAN class=S11>cursor</SPAN><SPAN class=S10>;</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>mediaStore</SPAN><SPAN class=S10>[</SPAN><SPAN class=S11>i</SPAN><SPAN class=S10>],</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>i</SPAN><SPAN class=S10>++)</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>mediaStore</SPAN><SPAN class=S10>-&gt;</SPAN><SPAN class=S11>Persist</SPAN><SPAN class=S10>(</SPAN><SPAN class=S11>s</SPAN><SPAN class=S10>[</SPAN><SPAN class=S11>i</SPAN><SPAN class=S10>]);</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S10>}</SPAN><SPAN class=S0><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S10>}</SPAN><SPAN class=S0><BR>
</SPAN><SPAN class=S10>};</SPAN>
<h3>
Submitting a lexer
</h3>
<p>Lexers have been moved to the separate <a href="https://www.scintilla.org/Lexilla.html">Lexilla</a> project
which is on GitHub which may have updated instructions.</p>
<p>Add an issue or pull request on the <a href="https://github.com/ScintillaOrg/lexilla">Lexilla project page</a>.</p>
<p>Define all of the lexical states in a modified LexicalStyles.iface.</p>
<p>Ensure there are no warnings under the compiler you use. Warnings from other compilers
will be noted on the feature request.</p>
<p>sc.ch is an int: do not pass this around as a char.</p>
<p>The ctype functions like isalnum and isdigit only work on ASCII (0..127) and may cause
undefined behaviour including crashes if used on other values. Check with IsASCII before calling is*.</p>
<p>Functions, structs and classes in lexers should be in an unnamed namespace (see LexCPP)
or be marked "static" so they will not leak into other lexers.</p>
<p>If you copy from an existing lexer, remove any code that is not needed since it makes it
more difficult to maintain and review.</p>
<p>When modifying an existing lexer, try to maintain as much compatibility as possible.
Do not renumber lexical styles as current client code may be built against the earlier values.</p>
<h4>
Properties
</h4>
<p>
Properties provided by a new lexer should follow the naming conventions
and should include a comment suitable for showing to end users.
The convention is for properties that control styling to be named
lexer.&lt;lexername&gt;.* and those that control folding to be named
fold.&lt;lexername&gt;.*.
Examples are "lexer.python.literals.binary" and "fold.haskell.imports".
</p>
<p>
The properties "fold" and "fold.comment" are generic and can be used by
any lexer.
</p>
<p>
See LexPython for examples of properties in an object lexer and LexHTML for a functional lexer.
</p>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@ -0,0 +1,225 @@
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator"
content="HTML Tidy for Windows (vers 1st August 2002), see www.w3.org" />
<meta name="generator" content="SciTE" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Migration to Scintilla 5.x.</title>
<style type="text/css">
<!--
/*<![CDATA[*/
CODE { font-weight: bold; font-family: Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace; }
CODE.example { background: #EBFFF7;}
CODE.windows { background: #E7F0FF;}
CODE.unix { background: #FFFFD7;}
A:visited { color: blue; }
A:hover { text-decoration: underline ! important; }
A.message { text-decoration: none; font-weight: bold; font-family: Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace; }
A.seealso { text-decoration: none; font-weight: bold; font-family: Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace; }
A.toc { text-decoration: none; }
A.jump { text-decoration: none; }
LI.message { text-decoration: none; font-weight: bold; font-family: Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace; }
H2 { background: #E0EAFF; }
table {
border: 0px;
border-collapse: collapse;
}
div.console {
font-family: Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace;
color: #008000;
font-weight: bold;
background: #F7FCF7;
border: 1px solid #C0D7C0;
margin: 0.3em 3em;
padding: 0.3em 0.6em;
}
span.console {
font-family: Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace;
color: #008000;
font-weight: bold;
background: #F7FCF7;
border: 1px solid #C0D7C0;
margin: 0.1em 0em;
padding: 0.1em 0.3em;
}
.name {
color: #B08000;
}
/*]]>*/
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0"
summary="Banner">
<tr>
<td><img src="SciTEIco.png" border="3" height="64" width="64" alt="Lexilla icon" /></td>
<td><a href="index.html"
style="color:white;text-decoration:none;font-size:200%">Scintilla</a></td>
</tr>
</table>
<h1>Migrating Applications to Scintilla 5 with Lexilla.</h1>
<h2>Introduction</h2>
<p>With Scintilla 5.0, all lexers were moved from Scintilla into the Lexilla library
which is a <a href="https://www.scintilla.org/Lexilla.html">separate project</a>.
Lexilla may be either a static library
that is linked into an application or a shared library that is loaded at runtime.</p>
<p>Lexilla has its own <a href="LexillaDoc.html">documentation</a>.</p>
<h2>Basics</h2>
<p>With Scintilla 4.x, it was most common for applications to set a lexer either by lexer name or lexer ID (<span class="name">SCLEX_...</span>) by calling
<code>SCI_SETLEXERLANGUAGE("&lt;name&gt;")</code> or <code>SCI_SETLEXER(SCLEX_*)</code>.</p>
<p>With Scintilla 5, the normal technique is to call Lexilla's <span class="name">CreateLexer</span> function
with a lexer name, then apply the result with
Scintilla's <span class="name">SCI_SETILEXER</span> method:<br />
<code>ILexer5 *pLexer = CreateLexer("&lt;name&gt;")<br />
SCI_SETILEXER(pLexer)</code></p>
<p>Lexer names are now strongly preferred to lexer IDs and applications should switch where possible.
Some lexers will not have lexer IDs but all will have names.</p>
<p>Applications may be written in C++ or C; may contain a statically linked Lexilla library or load a Lexilla
shared library; and may use the raw Lexilla API or the LexillaAccess C++ helper module.</p>
<h2>From C++: LexillaAccess</h2>
<p>The easiest technique is to implement in C++ using LexillaAccess and load a Lexilla shared library.</p>
<p>LexillaAccess simplifies use of Lexilla, hides operating system differences, and allows loading
multiple libraries that support the Lexilla protocol.
It is defined in lexilla/access/LexillaAccess.h and the source code is in lexilla/access/LexillaAccess.cxx.
Add these to the build dependencies of the project or build file.</p>
<p>Both SciTE and TestLexers (used to test Lexilla) in lexilla/test use LexillaAccess.
TestLexers is much simpler than SciTE so can be a good example to examine.</p>
<h3>Building</h3>
<p>Header files for lexers and for using Lexilla will be included so build files will need to reference these new locations.
LexillaAccess.cxx should be added to the set of source files.
In make, for example, this may appear similar to:</p>
<code class="example">
LEXILLA_DIR ?= $(srcdir)/../../lexilla<br />
INCLUDES += -I $(LEXILLA_DIR)/include -I $(LEXILLA_DIR)/access<br />
SOURCES += $(LEXILLA_DIR)/access/LexillaAccess.cxx<br />
</code>
<h3>Steps in code</h3>
<p>Set the directory to search for Lexilla when full paths aren't provided.
This may be a known good system or user directory or the directory of the application
depending on the operating system conventions.</p>
<code class="example">
std::string homeDirectory = "/Users/Me/bin";<br />
Lexilla::SetDefaultDirectory(homeDirectory);<br />
</code>
<p>Load Lexilla or another library that implements the Lexilla protocol.
The name "." means the standard name and extension (liblexilla.so / liblexilla.dylib / lexilla.dll)
in the default directory so is often a good choice. Names without extensions have the operating system's preferred
shared library extension added.
A full path can also be used.
Multiple libraries can be loaded at once by listing them separated by ';'.
Something like one of these lines:</p>
<code class="example">
Lexilla::Load(".");<br />
Lexilla::Load("lexilla;lexpeg;XMLexers");<br />
Lexilla::Load("/usr/lib/liblexilla.so;/home/aardvark/bin/libpeg.so");<br />
</code>
<p>Choose the name of the lexer to use. This may be determined from the file extension or some other mechanism.</p>
<code class="example">
std::string lexerName = "cpp";<br />
</code>
<p>Create a lexer and apply it to a Scintilla instance.</p>
<code class="example">
Scintilla::ILexer5 *pLexer = Lexilla::MakeLexer(lexerName);<br />
CallScintilla(scintilla, SCI_SETILEXER, 0, pLexer);<br />
</code>
<p>Some applications may use integer lexer IDs from SciLexer.h with an "SCLEX_" prefix like
<span class="name">SCLEX_CPP</span>.
These can be converted to a name with NameFromID before passing to MakeLexer.</p>
<code class="example">
Scintilla::ILexer5 *pLexer = Lexilla::MakeLexer(Lexilla::NameFromID(SCLEX_CPP));<br />
</code>
<h2>From C: Lexilla.h and system APIs</h2>
<p>Applications written in C or C++ can use the raw Lexilla API which is defined in lexilla/include/Lexilla.h.
Since the ILexer interface is difficult to define for C, C applications should treat the result of CreateLexer as a
<code>void*</code> that is simply passed through to Scintilla.
If there is a need to call methods on the lexer
before passing it to Scintilla then it would be best to use some C++ code although it may be possible
for a sufficiently motivated developer to call methods on the lexer from C.</p>
<p>There is an example for using Lexilla from C in examples/CheckLexilla.</p>
<h3>Steps in code</h3>
<p>Include the system header for loading shared objects.
This depends on the operating system: &lt;windows.h&gt; for <code class="windows">Windows</code> or
&lt;dlfcn.h&gt; for <code class="unix">Unix</code>.</p>
<code class="windows">#include &lt;windows.h&gt;<br /></code>
<code class="unix">#include &lt;dlfcn.h&gt;<br /></code>
<p>Define a path to the Lexilla shared library.
This may be a known good system or user directory or the directory of the application
depending on the operating system conventions.</p>
<code class="example">
#include "Lexilla.h"<br />
char szLexillaPath[] = "../../bin/" LEXILLA_LIB LEXILLA_EXTENSION;<br />
</code>
<p>Load Lexilla using the appropriate operating system function: either LoadLibrary on Windows or
dlopen on Unix.</p>
<code class="windows">HMODULE lexillaLibrary = LoadLibrary(szLexillaPath);<br /></code>
<code class="unix">void *lexillaLibrary = dlopen(szLexillaPath, RTLD_LAZY);<br /></code>
<p>Find the CreateLexer function inside the shared library using either GetProcAddress on Windows or
dlsym on Unix.</p>
<code class="windows">FARPROC fun = GetProcAddress(lexillaLibrary, LEXILLA_CREATELEXER);<br /></code>
<code class="unix">void *fun = dlsym(lexillaLibrary, LEXILLA_CREATELEXER);<br /></code>
<p>Cast this to the correct type.</p>
<code class="example">CreateLexerFn lexerCreate = (CreateLexerFn)(fun);<br /></code>
<p>Choose the name of the lexer to use. This may be determined from the file extension or some other mechanism.</p>
<code class="example">char lexerName[] = "cpp";<br /></code>
<p>Create a lexer and apply it to a Scintilla instance.</p>
<code class="example">
void *pLexer = lexerCreate(lexerName);<br />
CallScintilla(scintilla, SCI_SETILEXER, 0, pLexer);<br />
</code>
<p>If the application uses integer lexer IDs then find the <span class="name">LEXILLA_LEXERNAMEFROMID</span>
function, cast to <span class="name">LexerNameFromIDFn</span> then call with the ID before using the result to call
<span class="name">CreateLexer</span>.</p>
<code class="windows">FARPROC funName = GetProcAddress(lexillaLibrary, LEXILLA_LEXERNAMEFROMID);<br /></code>
<code class="unix">void *funName = dlsym(lexillaLibrary, LEXILLA_LEXERNAMEFROMID);<br /></code>
<code class="example">LexerNameFromIDFn lexerNameFromID = (LexerNameFromIDFn)(funName);<br /></code>
<code class="example">const char *name = lexerNameFromID(lexerID);<br /></code>
<h2>Static linking</h2>
<p>Lexilla may be linked directly into an application or built into a static library that is then
linked into the application, then there is no need to load a shared library and
<span class="name">CreateLexer</span> can be directly called.</p>
<p>It is possible to link Lexilla into an application and then dynamically load other
shared libraries that implement the Lexilla protocol.
SciTE on Windows implements this as an option when built with STATIC_BUILD defined.</p>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,71 @@
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org" />
<meta name="generator" content="SciTE" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>
Download Scintilla
</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td>
<img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
</td>
<td>
<a href="index.html" style="color:white;text-decoration:none"><font size="5">Download
Scintilla</font></a>
</td>
</tr>
</table>
<table bgcolor="#CCCCCC" width="100%" cellspacing="0" cellpadding="8" border="0">
<tr>
<td>
<font size="4"> <a href="https://www.scintilla.org/scintilla550.zip">
Windows</a>&nbsp;&nbsp;
<a href="https://www.scintilla.org/scintilla550.tgz">
GTK/Linux</a>&nbsp;&nbsp;
</font>
</td>
</tr>
</table>
<h2>
Download.
</h2>
<p>
The <a href="License.txt">license</a> for using Scintilla or SciTE is similar to that of Python
containing very few restrictions.
</p>
<h3>
Release 5.5.0
</h3>
<h4>
Source Code
</h4>
The source code package contains all of the source code for Scintilla but no binary
executable code and is available in
<ul>
<li><a href="https://www.scintilla.org/scintilla550.zip">zip format</a> (1.8M) commonly used on Windows</li>
<li><a href="https://www.scintilla.org/scintilla550.tgz">tgz format</a> (1.7M) commonly used on Linux and compatible operating systems</li>
</ul>
Instructions for building on both Windows and Linux are included in the readme file.
<h4>
Windows Executable Code
</h4>
There is no download available containing only the Scintilla DLL.
However, it is included in the <a href="SciTEDownload.html">SciTE
executable full download</a> as Scintilla.DLL.
<p>
<a href="SciTEDownload.html">SciTE</a> is a good demonstration of Scintilla.
</p>
<p>
Previous versions can be downloaded from the <a href="ScintillaHistory.html">history
page</a>.
</p>
</body>
</html>

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

View File

@ -0,0 +1,569 @@
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org" />
<meta name="generator" content="SciTE" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>
Scintilla and SciTE Related Sites
</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td>
<img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
</td>
<td>
<a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
and SciTE</font></a>
</td>
</tr>
</table>
<h2>
Related Sites
</h2>
<h3>
Ports and Bindings of Scintilla
</h3>
<p>
<a href="https://github.com/mneuroth/SciTEQt">SciTEQt</a>
is a port of the SciTE editor to the Qt QML/Quick platform.
</p>
<p>
<a href="https://orbitalquark.github.io/scinterm">Scinterm</a>
is an implementation of Scintilla for the ncurses platform.
</p>
<p>
<a href="http://www.morphos-team.net/releasenotes/3.0">Scintilla.mcc</a>
is a port to MorphOS.
</p>
<p>
<a href="https://metacpan.org/pod/Wx::Scintilla">Wx::Scintilla</a>
is a Perl Binding for Scintilla on wxWidgets.
</p>
<p>
<a href="http://codebrainz.github.com/GtkScintilla/">GtkScintilla</a>
is a GTK+ widget which enables easily adding a powerful
source code editor to your applications. Harnessing the abilities
of the Scintilla editing component, GtkScintilla adds a familiar
GTK+/GObject API, making the widget comfortable to use in
these programs, using all the typical GObject conventions.
</p>
<p>
<a href="http://www.mewsoft.com/forums/source-code-editor-activex-control-released-scintilla-activex-wrapper-control&amp;action=ViewTopic&amp;Topic=1494&amp;Forum=1&amp;Page=1&amp;Period=0a&amp;Lang=English">Editawy</a>
is an ActiveX Control wrapper that support all Scintilla functions and additional high level functions.
</p>
<p>
<a href="http://sourceforge.net/projects/jintilla/">Jintilla</a>
is a JNI wrapper that allows Scintilla to be used in Java with
both SWT and AWT.
</p>
<p>
<a href="http://delphisci.sourceforge.net/">Delphi Scintilla Interface Components</a>
is a FREE collection of components that makes it easy to use the
Scintilla source code editing control from within Delphi and C++ Builder.
</p>
<p>
<a href="http://wxcode.sourceforge.net/showcomp.php?name=wxStEdit">wxStEdit</a>
is a library and sample program that provides extra features over wxStyledTextControl.
</p>
<p>
<a href="http://www.naughter.com/scintilla.html">CScintillaCtrl, CScintillaView &amp; CScintillaDoc</a>
are freeware MFC classes to encapsulate Scintilla.
</p>
<p>
<a href="http://sourceforge.net/projects/scide/">ScintillaNet
</a> is an encapsulation of Scintilla for use within the .NET framework.
</p>
<p>
<a href="https://riverbankcomputing.com/software/qscintilla/intro">QScintilla
</a> is a port of Scintilla to the Qt platform. It has a similar license to Qt: GPL for use in
free software and commercial for use in close-source applications.
</p>
<p>
<a href="http://www.adapower.com/gwindows/">
GWindows</a> is a Win32 RAD GUI Framework for Ada 95 that
includes a binding of Scintilla.
</p>
<p>
<a href="http://scintilla.cvs.sourceforge.net/viewvc/scintilla/ScintillaVB/">ScintillaVB</a>
is an ActiveX control written in VB that encapsulates Scintilla.
</p>
<p>
<a href="http://savannah.nongnu.org/projects/fxscintilla/">FXScintilla
</a> is a port of Scintilla to the FOX platform. FXRuby includes Ruby
bindings for FXScintilla.
</p>
<p>
<a href="http://www.pnotepad.org/scintilla/">Delphi wrapper</a> for
Scintilla which is also usable from Borland C++ Builder.
</p>
<p>
The wxStyledTextCtrl editor component in the
<a href="http://www.wxwidgets.org/">wxWidgets</a> cross platform toolkit is based on Scintilla.<br />
A Python binding for wxStyledTextCtrl is part of <a href="http://wxpython.org/">wxPython</a>.
</p>
<p>
<a href="http://sourceforge.net/projects/moleskine/">gtkscintilla</a>
is an alternative GTK class implementation for scintilla.
This implementation acts more like a Gtk+ object, with many methods rather
than just scintilla_send_message() and is available as a shared library.
This implementation works with GTK 1.x.
</p>
<p>
<a href="http://sourceforge.net/projects/moleskine/">gtkscintilla2</a>
is an alternative GTK class implementation for scintilla
similar to the above, but for GTK 2.x.
</p>
<p>
<a href="http://sourceforge.net/projects/moleskine/">pygtkscintilla</a>
is a Python binding for gtk1.x scintilla that uses
gtkscintilla instead of the default GTK class.
</p>
<p>
<a href="http://scintilla.cvs.sourceforge.net/viewvc/scintilla/scintillactrl/">ScintillaCtrl</a>
is an unmaintained ActiveX control wrapper for Scintilla.
</p>
<h3>
Projects using Scintilla
</h3>
<p>
<a href="https://github.com/dail8859/NotepadNext">Notepad Next</a>
is a cross-platform reimplementation of Notepad++.
</p>
<p>
<a href="https://github.com/dolphinsmalltalk/Dolphin">Dolphin Smalltalk</a>
is an implementation of the Smalltalk language for Windows.
</p>
<p>
<a href="https://github.com/simdsoft/x-studio/blob/master/README_EN.md">x-studio</a>
is a powerful and very lightweight developer IDE that supports Lua debugging.
</p>
<p>
<a href="https://sourceforge.net/projects/autogui/">Adventure IDE</a>
is a general-purpose IDE and lightweight text editor for Windows.
</p>
<p>
<a href="https://www.javacardos.com/tools">JCIDE</a>
is an IDE designed specifically for the Java Card programming language.
</p>
<p>
<a href="http://www.microissuer.com/?p=176">Snooper</a>
is an IDE for the smart card industry.
</p>
<p>
<a href="https://github.com/martinrotter/textilosaurus">Textilosaurus</a>
is simple cross-platform UTF-8 text editor based on Qt and Scintilla.
</p>
<p>
<a href="http://stefanstools.sourceforge.net/BowPad.html">BowPad</a>
is a small and fast text editor with a modern ribbon user interface (Windows7 or later).
</p>
<p>
<a href="http://studio.zerobrane.com">ZeroBrane Studio Lua IDE</a>
is a lightweight Lua IDE with code completion, syntax highlighting, live
coding, remote debugger, and code analyzer (Windows, OSX, and Linux).
</p>
<p>
<a href="http://www.xml-buddy.com/">XML Validator Buddy</a>
is an XML/JSON editor and XML validator for Windows.
</p>
<p>
<a href="http://sciteco.sf.net/">SciTECO</a>
is an advanced TECO dialect and interactive screen editor based on Scintilla.
</p>
<p>
<a href="http://www.qgis.org/">Quantum GIS</a>
is a user friendly Open Source Geographic Information System (GIS).
</p>
<p>
<a href="https://gitorious.org/qgrinui">QGrinUI</a>
searches for a regex within all relevant files in a directory and shows matches using
SciTE through the director interface.
</p>
<p>
<a href="https://orbitalquark.github.io/textadept">Textadept</a>
is a remarkably extensible cross-platform text editor for programmers written (mostly) in
Lua using LPeg to handle the lexers.
</p>
<p>
<a href="https://orbitalquark.github.io/scintillua">Scintillua</a>
is an external Scintilla lexer that uses Lua LPeg lexers for lexing.
</p>
<p>
<a href="http://www.morphos-team.net/releasenotes/3.0">Scribble</a>
is a text editor included in MorphOS.
</p>
<p>
<a href="http://mysqlworkbench.org/">MySQL Workbench</a>
is a cross-platform, visual database design, sql coding and administration tool.
</p>
<p>
<a href="http://liveditor.com/index.php">LIVEditor</a>
is for web front end coders editing html/css/js code.
</p>
<p>
<a href="http://padre.perlide.org/">Padre</a>
is a wxWidgets-based Perl IDE.
</p>
<p>
<a href="http://www.manoscoder.gr/wintools/viewtopic.php?f=20&t=84">CoderStudio</a>
is an IDE for plain C and Assembly programming similar to Visual Studio.
</p>
<p>
<a href="http://www.sparxsystems.com/products/ea/index.html">Enterprise Architect</a>
is a UML 2.1 analysis and design tool.
</p>
<p>
<a href="https://launchpad.net/codeassistor">The CodeAssistor Editor</a>
is a small and simple source code editor for MacOSX, Windows, and GTK/Linux.
</p>
<p>
<a href="http://www.topwizprogramming.com/freecode_pbeditor.html">PBEditor</a>
is a text editor for PowerBuilder.
</p>
<p>
<a href="https://www.cryptool.org/en/">CrypTool</a>
is an application for applying and analyzing cryptographic algorithms.
</p>
<p>
<a href="http://code.google.com/p/fxite/">FXiTe</a>
is an advanced cross-platform text editor built with the Fox GUI toolkit
and the FXScintilla text widget.
</p>
<p>
<a href="http://www.jabaco.org/">Jabaco</a>
is a simple programming language with a Visual Basic like syntax.
</p>
<p>
<a href="http://www.daansystems.com/lispide/">LispIDE</a>
is a basic Lisp editor for Windows 2000, XP and Vista.
</p>
<p>
<a href="https://www.assembla.com/wiki/show/FileWorkbench">File Workbench:</a>
a file manager / text editor environment with Squirrel scripting.
</p>
<p>
<a href="http://kephra.sf.net">Kephra</a>
is a free, easy and comfortable cross-platform editor written in Perl.
</p>
<p>
<a href="http://universalindent.sourceforge.net/">UniversalIndentGUI</a>
is a cross platform GUI for several code formatters, beautifiers and indenters
like GreatCode, AStyle (Artistic Styler), GNU Indent, BCPP and so on.
</p>
<p>
<a href="http://elementaryreports.com/">Elementary Reports</a>
is designed to reduce the time to compose detailed and professional primary school reports.
</p>
<p>
<a href="http://stepaheadsoftware.com/products/vcw/vcw.htm">Visual Classworks</a>
Visual class modeling and coding in C++ via 'live'
UML style class diagrams.
</p>
<p>
<a href="http://stepaheadsoftware.com/products/javelin/javelin.htm">Javelin</a>
Visual Class modeling and coding in Java via 'live' UML style
class diagrams.
</p>
<p>
The <a href="http://www.adobe.com/devnet/bridge.html">ExtendScript Toolkit</a>
is a development and debugging tool for JavaScript
scripts included with Adobe CS3 Suites.
</p>
<p>
<a href="https://tortoisesvn.net/">TortoiseSVN</a>
is a Windows GUI client for the Subversion source control software.
</p>
<p>
<a href="http://www.geany.org/">Geany</a>
is a small and fast GTK2 based IDE, which has only a few dependencies from other packages.
</p>
<p>
<a href="http://www.elliecomputing.com/products/merge_overview.asp">ECMerge</a>
is a commercial graphical and batch diff / merge tool for Windows, Linux and Solaris
(aiming to target all major platforms).
</p>
<p>
<a href="http://pype.sourceforge.net/">PyPE</a>
is an editor written in Python with the wxPython GUI toolkit.
</p>
<p>
<a href="http://home.mweb.co.za/sd/sdonovan/sciboo.html">Sciboo</a>
is an editor based on ScintillaNET.
</p>
<p>
<a href="https://sourceforge.net/projects/tsct/">The Scite Config Tool</a>
is a graphical user interface for changing SciTE properties files.
</p>
<p>
<a href="http://totalcmd.net/plugring/SciLister.html">Scintilla Lister</a>
is a plugin for Total Commander allowing viewing all documents with syntax highlighting
inside Total Commander.
</p>
<p>
<a href="http://chscite.sourceforge.net">ChSciTE</a>
is a free IDE for C/C++ interpreter Ch. It runs cross platform.
Ch is for cross-platform scripting, shell
programming, 2D/3D plotting, numerical computing, and embedded
scripting.
</p>
<p>
<a href="http://codeblocks.org/">
Code::Blocks</a> is an open source, cross platform free C++ IDE.
</p>
<p>
<a href="https://notepad-plus-plus.org/">
Notepad++</a> is a free source code editor under Windows.
</p>
<p>
<a href="http://gubed.mccabe.nu/">
Gubed</a> is a cross platform program to debug PHP scripts.
</p>
<p>
<a href="http://www.lesser-software.com/lswdnl.htm">
LSW DotNet-Lab</a> is a development environment for the .NET platform.
</p>
<p>
<a href="https://github.com/dtrebilco/glintercept">
GLIntercept</a> is an OpenGL function call interceptor that uses SciTE as a
run-time shader editor.
</p>
<p>
<a href="http://wxguide.sourceforge.net/indexedit.html">
wyoEditor</a> is "A nice editor with a well designed and consistent look and feel".
</p>
<p>
<a href="http://www.flos-freeware.ch/notepad2.html">
Notepad2</a> is "Yet another Notepad replacement".
</p>
<p>
<a href="http://pycrash.sourceforge.net/index.php?type=3">
PyCrash Viewer</a> can examine crash dumps of Python programs.
</p>
<p>
<a href="http://www.cabletest.com/en/featured_products_MPT2.aspx">
MPT series Wire Analyzers</a> use Scintilla and SciTE.
</p>
<p>
<a href="http://www.mygenerationsoftware.com">MyGeneration</a>
is a .NET based code generator.
</p>
<p>
<a href="http://cssed.sourceforge.net">CSSED</a>
is a tiny GTK2 CSS editor.
</p>
<p>
<a href="http://wxghostscript.sourceforge.net/">
IdePS</a>
is a free Integrated Development Environment for PostScript
</p>
<p>
<a href="http://cute.sourceforge.net/">
CUTE</a>
is a user-friendly source code editor easily extended using Python.
</p>
<p>
<a href="http://www.spaceblue.com/products/venis/index.html">
Venis IX</a>,
the Visual Environment for NSIS (Nullsoft Scriptable Install System).
</p>
<p>
<a href="http://eric-ide.python-projects.org/">Eric3</a>
is a Python IDE written using PyQt and QScintilla.
</p>
<p>
<a href="http://www.computersciencelab.com/CppIde.htm">CPPIDE</a>
is part of some commercial high-school oriented programming course software.
</p>
<p>
<a href="http://www.blazingtools.com/is.html">Instant Source</a>
is a commercial tool for looking at the HTML on web sites.
</p>
<p>
<a href="http://www.codejoin.com/radon/">RAD.On++</a>
is a free C++ Rapid Application Developer for Win32.
</p>
<p>
<a href="http://wxbasic.sourceforge.net/">wxBasic</a> is an open source
Basic interpreter that uses the wxWidgets toolkit. A small IDE is under construction.
</p>
<p>
<a href="http://visual-mingw.sourceforge.net/">Visual MinGW</a> is an
IDE for the MinGW compiler system.This runs on Windows with gcc.
</p>
<p>
The <a href="http://archaeopteryx.com/">Wing IDE</a> is a
complete integrated development environment for the Python programming
language.
Available on Intel based Linux and Windows and on MacOS X through XDarwin.
</p>
<p>
<a href="http://www.spheredev.org/">Sphere</a>
is 2D RPG engine with a development environment.
</p>
<p>
<a href="http://gaiacrtn.free.fr/practical-ruby/index.html">Practical Ruby</a>
is an IDE for Ruby on Windows.
</p>
<p>
<a href="http://www.gnuenterprise.org/">GNUe</a>
is a suite of tools and applications for solving the needs of the enterprise.
</p>
<p>
<a href="http://silvercity.sourceforge.net/">SilverCity</a>
is a lexing package that can provide lexical analysis for over 20 programming
and markup languages.
</p>
<p>
<a href="http://hapdebugger.sourceforge.net/">HAP Python Remote Debugger</a>
is a Python debugger that can run on one Windows machine debugging a Python program running
on either the same or another machine.
</p>
<p>
<a href="http://sourceforge.net/projects/pycrust/">PyCrust</a> is an interactive
Python shell based on wxPython.
</p>
<p>
<a href="http://www.activestate.com/Products/Komodo/">Komodo</a>
is a cross-platform multi-language development environment built
as an application of Mozilla.
</p>
<p>
<a href="http://llt.chez-alice.fr/">Filerx</a>
is a project manager for SciTE on Windows.
Open source and includes an implementation of SciTE's Director interface so
will be of interest to others wanting to control SciTE.
</p>
<p>
<a href="http://anjuta.org/">Anjuta</a>
is an open source C/C++ IDE for Linux/GNOME.
</p>
<p>
A <a href="https://www.burgaud.com">version of SciTE for Win32</a> enhanced
with a tab control to allow easy movement between buffers.
Go to the "Goodies" area on this site.
</p>
<p>
<a href="http://suneido.com">
Suneido</a> is an integrated application platform currently available for Win32 that includes an
object-oriented language, client-server database, and user interface and reporting frameworks.
</p>
<p>
<a href="http://www.allitis.com/agast/home.html">
Agast</a> is an authoring system for adventure games which includes
a customised version of SciTE.
</p>
<p>
<a href="http://boa-constructor.sourceforge.net/">Boa Constructor</a> is a RAD GUI
Building IDE for the wxWidgets cross platform platform. Written using wxPython with the
wxStyledTextCtrl used as its editor.
</p>
<p>
<a href="https://www.python.org/download/windows/">PythonWin</a>, a Win32 IDE for Python, uses
Scintilla for both its editing and interactive windows.
</p>
<h3>
Editing Components
</h3>
<p>
<a href="https://codemirror.net/">CodeMirror</a>
is a versatile text editor implemented in JavaScript for the browser.
</p>
<p>
<a href="http://www.soft-gems.net/index.php/controls/unicodeeditor-formerly-unicode-syntax-editor">UniCodeEditor</a>
is a Unicode aware syntax editor control for Delphi and C++ Builder.
</p>
<p>
<a href="https://wiki.gnome.org/Projects/GtkSourceView">GtkSourceView</a>
is a text widget that extends the standard GTK+ 2.x text widget and improves it
by implementing syntax highlighting and other features typical of a source editor.
</p>
<p>
<a href="http://aeditor.rubyforge.org/">AEditor</a>
is a free source code editing component implemented in Ruby.
</p>
<p>
<a href="http://www.actiprosoftware.com/products/controls/wpf/syntaxeditor">SyntaxEditor</a>
is a commercial native .Net source code editing component.
</p>
<p>
<a href="http://jedit.sourceforge.net/">jEdit</a> is a good Open Source syntax colouring
editor written in and for Java.
</p>
<p>
<a href="http://www.gtk.org/">GTK+</a>, the GIMP Toolkit, contains a rich text editing
widget.<br />
<a href="https://wiki.gnome.org/Apps/Gedit">Gedit</a> is an editor for GTK+/GNOME.<br />
<!--
<a href="http://www.daimi.au.dk/~mailund/gtk.html">GtkEditor</a> is a source code editing
widget based on the GTK+ text widget.<br />
<a href="http://gide.gdev.net/">gIDE</a> is an IDE based on GTK+.<br />
<a href="http://www.bahnhof.se/~mikeh/linux_software.html">GtkExText</a> is a source code
oriented text widget for GTK+.
-->
</p>
<p>
<a href="http://www.codeguru.com/">CodeGuru</a> has source code for several Win32 MFC based
editors.
</p>
<a href="http://sourceforge.net/projects/synedit/">SynEdit</a> is a Win32 edit control written
in Delphi.
<p>
<a href="http://www.tetradyne.com/srcvwax.htm">SourceView</a> is a commercial editing
component for Win32.
</p>
<h3>
Documents
</h3>
<p>
<a href="http://www.finseth.com/craft/">The Craft of Text Editing</a>
describes how EMACS works, <i>Craig A. Finseth</i>
</p>
<p>
<a href="http://www.cs.cmu.edu/~wjh/papers/byte.html">Data Structures in a Bit-Mapped Text
Editor</a>, <i>Wilfred J. Hanson</i>, Byte January 1987
</p>
<p>
Text Editors: Algorithms and Architectures, <i>Ray Vald&eacute;s</i>, Dr. Dobbs Journal
April 1993
</p>
<p>
Macintosh User Interface Guidelines and TextEdit chapters of Inside Macintosh
</p>
<h3>
Development Tools
</h3>
<p>
Scintilla and SciTE were developed using the
<a href="http://www.mingw.org/">Mingw version of GCC</a>.
</p>
<p>
<a href="http://astyle.sourceforge.net/">AStyle</a> is a source code formatter for C++ and
Java code. SciTE has an Indent command defined for .cxx files that uses AStyle.
</p>
<p>
<a href="http://winmerge.org/">WinMerge</a> is an interactive diff / merge
for Windows. I prefer code submissions in the form of source files rather than diffs and then run
WinMerge over the files to work out how to merge.
</p>
<p>
<a href="https://www.python.org">Python</a> is my favourite programming language. Scintilla
was started after I tried to improve the editor built into <a
href="https://www.python.org/download/windows/">PythonWin</a>, but was frustrated by the limitations of
the Windows Richedit control which PythonWin used.
</p>
<p>
<a href="http://www.cse.yorku.ca/~oz/">regex</a> is a public domain
implementation of regular expression pattern matching used in Scintilla.
</p>
<p>
Inspirational coding soundscapes by <a href="http://www.davidbridie.com/">David Bridie</a>.
</p>
</body>
</html>

View File

@ -0,0 +1,140 @@
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org" />
<meta name="generator" content="SciTE" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
#menu {
margin: 0;
padding: .5em 0;
list-style-type: none;
font-size: larger;
background: #CCCCCC;
}
#menu li {
margin: 0;
padding: 0 .5em;
display: inline;
}
</style>
<title>
Scintilla and SciTE To Do
</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td>
<img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
</td>
<td>
<a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
and SciTE</font></a>
</td>
</tr>
</table>
<ul id="menu">
<li><a href="https://sourceforge.net/p/scintilla/bugs/">Bugs</a></li>
<li><a href="https://sourceforge.net/p/scintilla/feature-requests/">Feature Requests</a></li>
</ul>
<h2>
Bugs and To Do List
</h2>
<h3>
Feedback
</h3>
<p>
Issues can be reported on the <a href="https://sourceforge.net/p/scintilla/bugs/">Bug Tracker</a>
and features requested on the <a href="https://sourceforge.net/p/scintilla/feature-requests/">Feature Request Tracker</a>.
</p>
<h3>
Scintilla To Do
</h3>
<p>
Folding for languages that don't have it yet and good folding for languages
that inherited poor folding from another languages folding code.
</p>
<p>
Simple pattern based styling.
</p>
<p>
Different height lines based upon tallest text on the line rather than on the tallest style
possible.
</p>
<p>
Composition of lexing for mixed languages (such as ASP+ over COBOL) by
combining lexers.
</p>
<p>
Stream folding which could be used to fold up the contents of HTML elements.
</p>
<p>
Printing of highlight lines and folding margin.
</p>
<p>
Flow diagrams inside editor similar to
GRASP.
</p>
<p>
More lexers for other languages.
</p>
<h3>
SciTE To Do
</h3>
<p>
Good regular expression support through a plugin.
</p>
<p>
Allow file name based selection on all properties rather than just a chosen few.
</p>
<p>
Opening from and saving to FTP servers.
</p>
<p>
Setting to fold away comments upon opening.
</p>
<p>
User defined fold ranges.
</p>
<p>
Silent mode that does not display any message boxes.
</p>
<h3>
Features I am unlikely to do
</h3>
<p>
These are features I don't like or don't think are important enough to work on.
Implementations are welcome from others though.
</p>
<p>
Mouse wheel panning (press the mouse wheel and then move the mouse) on
Windows.
</p>
<p>
Adding options to the save dialog to save in a particular encoding or with a
chosen line ending.
</p>
<h3>
Directions
</h3>
<p>
The main point of this development is Scintilla, and this is where most effort will
go. SciTE will get new features, but only when they make my life easier - I am
not intending to make it grow up to be a huge full-function IDE like Visual
Cafe. The lines I've currently decided not to step over in SciTE are any sort of
project facility and any configuration dialogs. SciTE for Windows now has a
Director interface for communicating with a separate project manager
application.
</p>
<p>
If you are interested in contributing code, do not feel any need to make it cross
platform.
Just code it for your platform and I'll either reimplement for the other platform or
ensure that there is no effect on the other platform.
</p>
</body>
</html>

View File

@ -0,0 +1,376 @@
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org" />
<meta name="generator" content="SciTE" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>
Scintilla Usage Notes
</title>
<style type="text/css">
SPAN {
font-family: Verdana, Arial, Helvetica;
font-size: 9pt;
}
.S0 {
color: #808080;
font-family: Verdana, Arial, Helvetica;
}
.S1 {
font-family: Comic Sans MS, Times New Roman, Times;
color: #007F00;
font-size: 8pt;
}
.S2 {
font-family: Comic Sans MS, Times New Roman, Times;
color: #007F00;
font-size: 8pt;
}
.S3 {
font-family: Verdana, Arial, Helvetica;
color: #7F7F7F;
}
.S4 {
font-family: Verdana, Arial, Helvetica;
color: #007F7F;
}
.S5 {
color: #00007F;
font-weight: bold;
font-family: Verdana, Arial, Helvetica;
}
.S6 {
color: #7F007F;
font-family: Courier New, Courier;
}
.S7 {
color: #7F007F;
font-family: Courier New, Courier;
}
.S8 {
color: #007F7F;
}
.S9 {
color: #7F7F00;
}
.S10 {
font-weight: bold;
}
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td>
<img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
</td>
<td>
<a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
Usage Notes</font></a>
</td>
</tr>
</table>
<h2>
Implementing Auto-Indent
</h2>
<p>
The key idea is to use the SCN_CHARADDED notification to add indentation after a newline.
</p>
<p>
The lParam on the notification is a pointer to a SCNotification structure whose ch member
specifies the character added. If a newline was added, the previous line can be retrieved and
the same indentation can be added to the new line.
</p>
<p>
Here is the relevant portion of code from SciTE: (SciTE.cxx SciTEWindow::CharAdded)
</p>
<span class='S5'>if</span><span class='S0'>&nbsp;</span> <span class='S10'>(</span><span
class='S11'>ch</span><span class='S0'>&nbsp;</span> <span class='S10'>==</span><span
class='S0'>&nbsp;</span> <span class='S7'>'\r'</span><span class='S0'>&nbsp;</span> <span
class='S10'>||</span><span class='S0'>&nbsp;</span> <span class='S11'>ch</span><span
class='S0'>&nbsp;</span> <span class='S10'>==</span><span class='S0'>&nbsp;</span> <span
class='S7'>'\n'</span><span class='S10'>)</span><span class='S0'>&nbsp;</span> <span
class='S10'>{</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>char</span><span class='S0'>&nbsp;</span>
<span class='S11'>linebuf</span><span class='S10'>[</span><span class='S4'>1000</span><span
class='S10'>];</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>int</span><span class='S0'>&nbsp;</span>
<span class='S11'>curLine</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
class='S0'>&nbsp;</span> <span class='S11'>GetCurrentLineNumber</span><span
class='S10'>();</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>int</span><span class='S0'>&nbsp;</span>
<span class='S11'>lineLength</span><span class='S0'>&nbsp;</span> <span class='S10'>
=</span><span class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span
class='S10'>(</span><span class='S11'>SCI_LINELENGTH</span><span class='S10'>,</span><span
class='S0'>&nbsp;</span> <span class='S11'>curLine</span><span class='S10'>);</span><span
class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S2'>
//Platform::DebugPrintf("[CR]&nbsp;%d&nbsp;len&nbsp;=&nbsp;%d\n",&nbsp;curLine,&nbsp;lineLength);</span><span
class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>if</span><span class='S0'>&nbsp;</span> <span
class='S10'>(</span><span class='S11'>curLine</span><span class='S0'>&nbsp;</span> <span
class='S10'>&gt;</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
class='S0'>&nbsp;</span> <span class='S10'>&amp;&amp;</span><span class='S0'>&nbsp;</span>
<span class='S11'>lineLength</span><span class='S0'>&nbsp;</span> <span class='S10'>
&lt;=</span><span class='S0'>&nbsp;</span> <span class='S4'>2</span><span
class='S10'>)</span><span class='S0'>&nbsp;</span> <span class='S10'>{</span><span
class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>int</span><span class='S0'>&nbsp;</span>
<span class='S11'>prevLineLength</span><span class='S0'>&nbsp;</span> <span class='S10'>
=</span><span class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span
class='S10'>(</span><span class='S11'>SCI_LINELENGTH</span><span class='S10'>,</span><span
class='S0'>&nbsp;</span> <span class='S11'>curLine</span><span class='S0'>&nbsp;</span> <span
class='S10'>-</span><span class='S0'>&nbsp;</span> <span class='S4'>1</span><span
class='S10'>);</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>if</span><span class='S0'>&nbsp;</span> <span
class='S10'>(</span><span class='S11'>prevLineLength</span><span class='S0'>&nbsp;</span> <span
class='S10'>&lt;</span><span class='S0'>&nbsp;</span> <span class='S5'>sizeof</span><span
class='S10'>(</span><span class='S11'>linebuf</span><span class='S10'>))</span><span
class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>WORD</span><span
class='S0'>&nbsp;</span> <span class='S11'>buflen</span><span class='S0'>&nbsp;</span> <span
class='S10'>=</span><span class='S0'>&nbsp;</span> <span class='S5'>sizeof</span><span
class='S10'>(</span><span class='S11'>linebuf</span><span class='S10'>);</span><span
class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>memcpy</span><span
class='S10'>(</span><span class='S11'>linebuf</span><span class='S10'>,</span><span
class='S0'>&nbsp;</span> <span class='S10'>&amp;</span><span class='S11'>buflen</span><span
class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S5'>sizeof</span><span
class='S10'>(</span><span class='S11'>buflen</span><span class='S10'>));</span><span
class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>
SendEditor</span><span class='S10'>(</span><span class='S11'>EM_GETLINE</span><span
class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S11'>curLine</span><span
class='S0'>&nbsp;</span> <span class='S10'>-</span><span class='S0'>&nbsp;</span> <span
class='S4'>1</span><span class='S10'>,</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span class='S5'>reinterpret_cast</span><span class='S10'>&lt;</span><span
class='S11'>LPARAM</span><span class='S10'>&gt;(</span><span class='S5'>static_cast</span><span
class='S10'>&lt;</span><span class='S5'>char</span><span class='S0'>&nbsp;</span> <span
class='S10'>*&gt;(</span><span class='S11'>linebuf</span><span class='S10'>)));</span><span
class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>linebuf</span><span
class='S10'>[</span><span class='S11'>prevLineLength</span><span class='S10'>]</span><span
class='S0'>&nbsp;</span> <span class='S10'>=</span><span class='S0'>&nbsp;</span> <span
class='S7'>'\0'</span><span class='S10'>;</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>for</span><span
class='S0'>&nbsp;</span> <span class='S10'>(</span><span class='S5'>int</span><span
class='S0'>&nbsp;</span> <span class='S11'>pos</span><span class='S0'>&nbsp;</span> <span
class='S10'>=</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
class='S10'>;</span><span class='S0'>&nbsp;</span> <span class='S11'>linebuf</span><span
class='S10'>[</span><span class='S11'>pos</span><span class='S10'>];</span><span
class='S0'>&nbsp;</span> <span class='S11'>pos</span><span class='S10'>++)</span><span
class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span
class='S5'>if</span><span class='S0'>&nbsp;</span> <span class='S10'>(</span><span
class='S11'>linebuf</span><span class='S10'>[</span><span class='S11'>pos</span><span
class='S10'>]</span><span class='S0'>&nbsp;</span> <span class='S10'>!=</span><span
class='S0'>&nbsp;</span> <span class='S7'>'&nbsp;'</span><span class='S0'>&nbsp;</span> <span
class='S10'>&amp;&amp;</span><span class='S0'>&nbsp;</span> <span class='S11'>
linebuf</span><span class='S10'>[</span><span class='S11'>pos</span><span
class='S10'>]</span><span class='S0'>&nbsp;</span> <span class='S10'>!=</span><span
class='S0'>&nbsp;</span> <span class='S7'>'\t'</span><span class='S10'>)</span><span
class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span class='S11'>linebuf</span><span class='S10'>[</span><span class='S11'>pos</span><span
class='S10'>]</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
class='S0'>&nbsp;</span> <span class='S7'>'\0'</span><span class='S10'>;</span><span
class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S10'>}</span><span
class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>
SendEditor</span><span class='S10'>(</span><span class='S11'>EM_REPLACESEL</span><span
class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S5'>
reinterpret_cast</span><span class='S10'>&lt;</span><span class='S11'>LPARAM</span><span
class='S10'>&gt;(</span><span class='S5'>static_cast</span><span class='S10'>&lt;</span><span
class='S5'>char</span><span class='S0'>&nbsp;</span> <span class='S10'>*&gt;(</span><span
class='S11'>linebuf</span><span class='S10'>)));</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S10'>}</span><span class='S0'><br />
</span> <span class='S10'>}</span><br />
<p style="margin-bottom: 0in">
Of course, fancier handling could be implemented. For example, if the previous line was the
start of a control construct, the next line could be automatically indented one tab further.
(Assuming that is your indenting style.)
</p>
<h2>
Implementing Syntax Styling
</h2>
<p>
Syntax styling is handled by the SCN_STYLENEEDED notification. Scintilla keeps track of the
end of the styled text - this is retrieved with SCI_GETENDSTYLED. In response to the
SCN_STYLENEEDED notification, you should apply styles to the text from ENDSTYLED to the
position specified by the notification.
</p>
<p>
Here is the relevant portion of code from SciTE: (SciTE.cxx)
</p>
<span class='S5'>void</span><span class='S0'>&nbsp;</span> <span class='S11'>
SciTEWindow</span><span class='S10'>::</span><span class='S11'>Notify</span><span
class='S10'>(</span><span class='S11'>SCNotification</span><span class='S0'>&nbsp;</span> <span
class='S10'>*</span><span class='S11'>notification</span><span class='S10'>)</span><span
class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>switch</span><span class='S0'>&nbsp;</span>
<span class='S10'>(</span><span class='S11'>notification</span><span
class='S10'>-&gt;</span><span class='S11'>nmhdr.code</span><span class='S10'>)</span><span
class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>case</span><span class='S0'>&nbsp;</span>
<span class='S11'>SCN_STYLENEEDED</span><span class='S10'>:</span><span
class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span
class='S5'>if</span><span class='S0'>&nbsp;</span> <span class='S10'>(</span><span
class='S11'>notification</span><span class='S10'>-&gt;</span><span
class='S11'>nmhdr.idFrom</span><span class='S0'>&nbsp;</span> <span class='S10'>==</span><span
class='S0'>&nbsp;</span> <span class='S11'>IDM_SRCWIN</span><span class='S10'>)</span><span
class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span class='S5'>int</span><span class='S0'>&nbsp;</span> <span class='S11'>
endStyled</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span class='S10'>(</span><span
class='S11'>SCI_GETENDSTYLED</span><span class='S10'>);</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span class='S5'>int</span><span class='S0'>&nbsp;</span> <span class='S11'>
lineEndStyled</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span class='S10'>(</span><span
class='S11'>EM_LINEFROMCHAR</span><span class='S10'>,</span><span class='S0'>&nbsp;</span>
<span class='S11'>endStyled</span><span class='S10'>);</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span class='S11'>endStyled</span><span class='S0'>&nbsp;</span> <span class='S10'>
=</span><span class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span
class='S10'>(</span><span class='S11'>EM_LINEINDEX</span><span class='S10'>,</span><span
class='S0'>&nbsp;</span> <span class='S11'>lineEndStyled</span><span class='S10'>);</span><span
class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span class='S11'>Colourise</span><span class='S10'>(</span><span
class='S11'>endStyled</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
class='S11'>notification</span><span class='S10'>-&gt;</span><span
class='S11'>position</span><span class='S10'>);</span><br />
<p>
Colourize(start, end) retrieves the specified range of text and then calls ColourizeDoc in
keywords.cxx. It starts the process by calling:
</p>
&nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>SendMessage</span><span class='S10'>(</span><span
class='S11'>hwnd</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
class='S11'>SCI_STARTSTYLING</span><span class='S10'>,</span><span class='S0'>&nbsp;</span>
<span class='S11'>startPos</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
class='S4'>31</span><span class='S10'>);</span><br />
<p>
and then for each token of the text, calling:
</p>
&nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>SendMessage</span><span class='S10'>(</span><span
class='S11'>hwnd</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
class='S11'>SCI_SETSTYLING</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
class='S11'>length</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
class='S11'>style</span><span class='S10'>);</span><br />
<p>
where style is a number from 0 to 31 whose appearance has been defined using the
SCI_STYLESET... messages.
</p>
<h2>
Implementing Calltips
</h2>
<p>
Again, the SCN_CHARADDED notification is used to catch when an opening parenthesis is added.
The preceding word can then be retrieved from the current line:
</p>
&nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>char</span><span class='S0'>&nbsp;</span> <span
class='S11'>linebuf</span><span class='S10'>[</span><span class='S4'>1000</span><span
class='S10'>];</span><span class='S0'><br />
</span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>int</span><span class='S0'>&nbsp;</span> <span
class='S11'>current</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span class='S10'>(</span><span
class='S11'>SCI_GETCURLINE</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
class='S5'>sizeof</span><span class='S10'>(</span><span class='S11'>linebuf</span><span
class='S10'>),</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>
reinterpret_cast</span><span class='S10'>&lt;</span><span class='S11'>LPARAM</span><span
class='S10'>&gt;(</span><span class='S5'>static_cast</span><span class='S10'>&lt;</span><span
class='S5'>char</span><span class='S0'>&nbsp;</span> <span class='S10'>*&gt;(</span><span
class='S11'>linebuf</span><span class='S10'>)));</span><span class='S0'><br />
</span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>int</span><span class='S0'>&nbsp;</span> <span
class='S11'>pos</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span class='S10'>(</span><span
class='S11'>SCI_GETCURRENTPOS</span><span class='S10'>);</span><span class='S0'><br />
<br />
</span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>int</span><span class='S0'>&nbsp;</span> <span
class='S11'>startword</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
class='S0'>&nbsp;</span> <span class='S11'>current</span><span class='S0'>&nbsp;</span> <span
class='S10'>-</span><span class='S0'>&nbsp;</span> <span class='S4'>1</span><span
class='S10'>;</span><span class='S0'><br />
</span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>while</span><span class='S0'>&nbsp;</span>
<span class='S10'>(</span><span class='S11'>startword</span><span class='S0'>&nbsp;</span>
<span class='S10'>&gt;</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
class='S0'>&nbsp;</span> <span class='S10'>&amp;&amp;</span><span class='S0'>&nbsp;</span>
<span class='S11'>isalpha</span><span class='S10'>(</span><span class='S11'>linebuf</span><span
class='S10'>[</span><span class='S11'>startword</span><span class='S0'>&nbsp;</span> <span
class='S10'>-</span><span class='S0'>&nbsp;</span> <span class='S4'>1</span><span
class='S10'>]))</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>
startword</span><span class='S10'>--;</span><span class='S0'><br />
</span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>linebuf</span><span class='S10'>[</span><span
class='S11'>current</span><span class='S0'>&nbsp;</span> <span class='S10'>-</span><span
class='S0'>&nbsp;</span> <span class='S4'>1</span><span class='S10'>]</span><span
class='S0'>&nbsp;</span> <span class='S10'>=</span><span class='S0'>&nbsp;</span> <span
class='S7'>'\0'</span><span class='S10'>;</span><span class='S0'><br />
</span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>char</span><span class='S10'>*</span><span
class='S0'>&nbsp;</span> <span class='S11'>word</span><span class='S0'>&nbsp;</span> <span
class='S10'>=</span><span class='S0'>&nbsp;</span> <span class='S11'>linebuf</span><span
class='S0'>&nbsp;</span> <span class='S10'>+</span><span class='S0'>&nbsp;</span> <span
class='S11'>startword</span><span class='S10'>;</span><br />
<p>
Then if a calltip is available it can be displayed. The calltip appears immediately below
the position specified. The calltip can be multiple lines separated by newlines (\n).
</p>
&nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>pos</span><span class='S0'>&nbsp;</span> <span
class='S10'>=</span><span class='S0'>&nbsp;</span> <span class='S11'>SendMessage</span><span
class='S10'>(</span><span class='S11'>hwnd</span><span class='S10'>,</span><span
class='S0'>&nbsp;</span> <span class='S11'>SCI_GETCURRENTPOS</span><span
class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
class='S10'>);</span><span class='S0'><br />
</span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>SendMessageText</span><span
class='S10'>(</span><span class='S11'>hwnd</span><span class='S10'>,</span><span
class='S0'>&nbsp;</span> <span class='S11'>SCI_CALLTIPSHOW</span><span
class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S11'>pos</span><span
class='S0'>&nbsp;</span> <span class='S10'>-</span><span class='S0'>&nbsp;</span> <span
class='S11'>wordLen</span><span class='S0'>&nbsp;</span> <span class='S10'>-</span><span
class='S0'>&nbsp;</span> <span class='S4'>1</span><span class='S10'>,</span><span
class='S0'>&nbsp;</span> <span class='S11'>calltip</span><span class='S10'>);</span><br />
<p>
The calltip can be removed when a closing parenthesis is entered:
</p>
&nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>if</span><span class='S0'>&nbsp;</span> <span
class='S10'>(</span><span class='S11'>SendMessage</span><span class='S10'>(</span><span
class='S11'>hwnd</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
class='S11'>SCI_CALLTIPACTIVE</span><span class='S10'>,</span><span class='S0'>&nbsp;</span>
<span class='S4'>0</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
class='S4'>0</span><span class='S10'>))</span><span class='S0'><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>
SendMessage</span><span class='S10'>(</span><span class='S11'>hwnd</span><span
class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S11'>
SCI_CALLTIPCANCEL</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
class='S4'>0</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S4'>
0</span><span class='S10'>);</span><br />
<p>
Obviously, it is up the application to look after supplying the appropriate calltip text.
</p>
<p>
SciTE goes one step further, counting the commas between arguments and highlighting the
corresponding part of the calltip. This code is in ContinueCallTip.
</p>
<p>
<i>Page contributed by Andrew McKinlay.</i>
</p>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,142 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"><title>How to use the Scintilla Edit Control in windows?</title></head><body bgcolor="#ffffff">
<p><h2>How to use the Scintilla Edit Control in windows?</h2>
<p>
This should be a little step by step explanation how to use Scintilla in the windows environment.
</p>
</p>
<p><h2>How to create Scintilla Edit Control?</h2>
<p>
First of all, load the Scintilla DLL with something like:
</p>
<pre>
hmod = LoadLibrary(&quot;SciLexer.DLL&quot;);
if (hmod==NULL)
{
MessageBox(hwndParent,
&quot;The Scintilla DLL could not be loaded.&quot;,
&quot;Error loading Scintilla&quot;,
MB_OK | MB_ICONERROR);
}
</pre>
<p>
If the DLL was loaded successfully, then the DLL has registered (yes, by itself) a new
window class. The new class called &quot;Scintilla&quot; is the new scintilla edit control.
</p>
<p>
Now you can use this new control just like any other windows control.
</p>
<pre>
hwndScintilla = CreateWindowEx(0,
&quot;Scintilla&quot;,&quot;&quot;, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN,
10,10,500,400,hwndParent,(HMENU)GuiID, hInstance,NULL);
</pre>
<p>
Note the new window class name: &quot;Scintilla&quot;. By reaching this point you actually included
a Scintilla Edit Control to your windows program.
</p>
</p>
<p><h2>How to control the Scintilla Edit Control?</h2>
<p>
You can control Scintilla by sending commands to the Edit Control.
There a 2 ways of doing this. A simple and fast way.
</p>
<p><h3>The simple way to control Scintilla</h3>
<p>
The simple way is just like with any other windows control. You can send messages to the
Scintilla Edit Control and receive notifications from the control. (Note that the notifications
are sent to the parent window of the Scintilla Edit Control.)
</p>
<p>
The Scintilla Edit Control knows a special message for each command.
To send commands to the Scintilla Edit Control you can use the SendMessage function.
</p>
<pre>
SendMessage(hwndScintilla,sci_command,wparam,lparam);
</pre>
<p>
like:
</p>
<pre>
SendMessage(hwndScintilla,SCI_CREATEDOCUMENT, 0, 0);
</pre>
<p>
Some of the commands will return a value and unused parameters should be set to NULL.
</p>
</p>
<p><h3>The fast way to control Scintilla</h3>
<p>
The fast way of controlling the Scintilla Edit Control is to call message handling function by yourself.
You can retrieve a pointer to the message handling function of the Scintilla Edit Control and
call it directly to execute a command. This way is much more faster than the SendMessage() way.
</p>
<p>
1st you have to use the SCI_GETDIRECTFUNCTION and SCI_GETDIRECTPOINTER commands to
retrieve the pointer to the function and a pointer which must be the first parameter when calling the retrieved
function pointer.
You have to do this with the SendMessage way :)
</p>
<p>
The whole thing has to look like this:
</p>
<pre>
int (*fn)(void*,int,int,int);
void * ptr;
int canundo;
fn = (int (__cdecl *)(void *,int,int,int))SendMessage(
hwndScintilla,SCI_GETDIRECTFUNCTION,0,0);
ptr = (void *)SendMessage(hwndScintilla,SCI_GETDIRECTPOINTER,0,0);
canundo = fn(ptr,SCI_CANUNDO,0,0);
</pre>
<p>
with &quot;fn&quot; as the function pointer to the message handling function of the Scintilla Control
and &quot;ptr&quot; as the pointer that must be used as 1st parameter.
The next parameters are the Scintilla Command with its two (optional) parameters.
</p>
</p>
<p><h3>How will I receive notifications?</h3>
<p>
Whenever an event occurs where Scintilla wants to inform you about something, the Scintilla Edit Control
will send notification to the parent window. This is done by a WM_NOTITY message.
When receiving that message, you have to look in the xxx struct for the actual message.
</p>
<p>
So in Scintillas parent window message handling function you have to include some code like this:
</p>
<pre>
NMHDR *lpnmhdr;
[...]
case WM_NOTIFY:
lpnmhdr = (LPNMHDR) lParam;
if(lpnmhdr-&gt;hwndFrom==hwndScintilla)
{
switch(lpnmhdr-&gt;code)
{
case SCN_CHARADDED:
/* Hey, Scintilla just told me that a new */
/* character was added to the Edit Control.*/
/* Now i do something cool with that char. */
break;
}
}
break;
</pre>
</p>
</p>
<p>
<i>Page contributed by Holger Schmidt.</i>
</p>
</body></html>

View File

@ -0,0 +1,204 @@
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org" />
<meta name="generator" content="SciTE" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>
Scintilla Style Metadata
</title>
<style type="text/css">
<!--
/*<![CDATA[*/
CODE { font-weight: bold; font-family: Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace; }
/*]]>*/
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td>
<img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
</td>
<td>
<a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla</font></a>
</td>
</tr>
</table>
<h2>
Language Types
</h2>
<p>
Scintilla contains lexers for various types of languages:
<ul>
<li>Programming languages like C++, Java, and Python.</li>
<li>Assembler languages are low-level programming languages which may additionally include instructions and registers.</li>
<li>Markup languages like HTML, TeX, and Markdown.</li>
<li>Data languages like EDIFACT and YAML.</li>
</ul>
</p>
<p>
Some languages can be used in different ways. JavaScript is a programming language but also
the basis of JSON data files. Similarly,
<a href="https://en.wikipedia.org/wiki/S-expression">Lisp s expressions</a> can be used for both source code and data.
</p>
<p>
Each language type has common elements such as identifiers in programming languages.
These common elements should be identified so that languages can be displayed with common
styles for these elements.
Style tags are used for this purpose in Scintilla.
</p>
<h2>
Style Tags
</h2>
<p>
Every style has a list of tags where a tag is a lower-case word containing only the common ASCII letters 'a'-'z'
such as "comment" or "operator".
</p>
<p>
Tags are ordered from most important to least important.
</p>
<p>
While applications may assign visual attributes for tag lists in many different ways, one reasonable technique is to
apply tag-specific attributes in reverse order so that earlier and more important tags override less important tags.
For example, the tag list <code>"error comment documentation keyword"</code> with
a set of tag attributes <br />
<code>{ comment=fore:green,back:very-light-green,font:Serif documentation=fore:light-green error=strikethrough keyword=bold }</code><br />
could be rendered as <br />
<code>bold,fore:light-green,back:very-light-green,font:Serif,strikethrough</code>.
</p>
<p>
Alternative renderings could check for multi-tag combinations like
<code>{ comment.documentation=fore:light-green comment.line=dark-green comment=green }.</code>
</p>
<p>
Commonly, a tag list will contain an optional embedded language; optional statuses; a base type; and a set of type modifiers:<br />
<code>embedded-language? status* base-type modifiers*</code>
</p>
<h3>Embedded language</h3>
<p>
The embedded language may be a source <code>(client | server)</code> followed by a language name
<code>(javascript | php | python | basic)</code>.
This may be extended in the future with other programming languages and style-definition languages like CSS.
</p>
<h3>Status</h3>
<p>
The statuses may be <code>(error | unused | predefined | inactive)</code>.<br />
The <code>error</code> status is used for lexical statuses that indicate errors in the source code such as unterminated quoted strings.<br />
The <code>unused</code> status may indicate a gap in the lexical states, possibly because an old lexical class is no longer used or an upcoming lexical class may fill that position.<br />
The <code>predefined</code> status indicates a style in the range 32.39 that is used for non-lexical purposes in Scintilla.<br />
The <code>inactive</code> status is used for text that is not currently interpreted such as C++ code that is contained within a '#if 0' preprocessor block.
</p>
<h3>Basic Types</h3>
<p>
The basic types for programming languages are <code>(default | operator | keyword | identifier | literal | comment | preprocessor | label)</code>.<br />
The <code>default</code> type is commonly used for spaces and tabs between tokens although it may cover other characters in some languages.
</p>
<p>
Assembler languages add <code>(instruction | register)</code>. to the basic types from programming languages.<br />
</p>
<p>
The basic types for markup languages are <code>(default | tag | attribute | comment | preprocessor)</code>.<br />
</p>
<p>
The basic types for data languages are <code>(default | key | data | comment)</code>.<br />
</p>
<h3>Comments</h3>
<p>
Programming languages may differentiate between line and stream comments and treat documentation comments as distinct from other comments.
Documentation comments may be marked up with documentation keywords.<br />
The additional attributes commonly used are <code>(line | documentation | keyword | taskmarker)</code>.
</p>
<h3>Literals</h3>
<p>
Programming and assembler languages contain a rich set of literals including numbers like <code>7</code> and <code>3.89e23</code>; <code>"string\n"</code>; and <code>nullptr</code>
and differentiating between these is often wanted.<br />
The common literal types are <code>(numeric | boolean | string | regex | date | time | uuid | nil | compound)</code>.<br />
Numeric literal types are subdivided into <code>(integer | real)</code>.<br />
String literal types may add (perhaps multiple) further attributes from <code> (heredoc | character | escapesequence | interpolated | multiline | raw)</code>.<br />
</p>
<p>
An escape sequence within an interpolated heredoc may thus be <code>literal string heredoc escapesequence</code>.
</p>
<h3>
List of known tags
</h3>
<table>
<tr><td><code>attribute</code></td><td>Markup attribute</td></tr>
<tr><td><code>basic</code></td><td>Embedded Basic</td></tr>
<tr><td><code>boolean</code></td><td>True or false literal</td></tr>
<tr><td><code>character</code></td><td>Single character literal as opposed to a string literal</td></tr>
<tr><td><code>client</code></td><td>Script executed on client</td></tr>
<tr><td><code>comment</code></td><td>The standard comment type in a language: may be stream or line</td></tr>
<tr><td><code>compound</code></td><td>Literal containing multiple subliterals such as a tuple or complex number</td></tr>
<tr><td><code>data</code></td><td>A value in a data file</td></tr>
<tr><td><code>date</code></td><td>Literal representing a data such as '19/November/1975'</td></tr>
<tr><td><code>default</code></td><td>Starting state commonly also used for white space</td></tr>
<tr><td><code>documentation</code></td><td>Comment that can be extracted into documentation</td></tr>
<tr><td><code>error</code></td><td>State indicating an invalid or erroneous element</td></tr>
<tr><td><code>escapesequence</code></td><td>Parts of a string that are not literal such as '\t' for tab in C</td></tr>
<tr><td><code>heredoc</code></td><td>Lengthy text literal marked by a word at both ends</td></tr>
<tr><td><code>identifier</code></td><td>Name that identifies an object or class of object</td></tr>
<tr><td><code>inactive</code></td><td>Code that is not currently interpreted</td></tr>
<tr><td><code>instruction</code></td><td>Mnemonic in assembler languages like 'addc'</td></tr>
<tr><td><code>integer</code></td><td>Numeric literal with no fraction or exponent like '738'</td></tr>
<tr><td><code>interpolated</code></td><td>String that can contain expressions</td></tr>
<tr><td><code>javascript</code></td><td>Embedded Javascript</td></tr>
<tr><td><code>key</code></td><td>Element which allows finding associated data</td></tr>
<tr><td><code>keyword</code></td><td>Reserved word with special meaning like 'while'</td></tr>
<tr><td><code>label</code></td><td>Destination for jumps in programming and assembler languages</td></tr>
<tr><td><code>line</code></td><td>Differentiates between stream comments and line comments in languages that have both</td></tr>
<tr><td><code>literal</code></td><td>Fixed value in source code</td></tr>
<tr><td><code>multiline</code></td><td>Differentiates between single line and multiline elements, commonly strings</td></tr>
<tr><td><code>nil</code></td><td>Literal for the null pointer such as nullptr in C++ or NULL in C</td></tr>
<tr><td><code>numeric</code></td><td>Literal number like '16'</td></tr>
<tr><td><code>operator</code></td><td>Punctuation character such as '&amp;' or '['</td></tr>
<tr><td><code>php</code></td><td>Embedded PHP</td></tr>
<tr><td><code>predefined</code></td><td>Style in the range 32.39 that is used for non-lexical purposes</td></tr>
<tr><td><code>preprocessor</code></td><td>Element that is recognized in an early stage of translation</td></tr>
<tr><td><code>python</code></td><td>Embedded Python</td></tr>
<tr><td><code>raw</code></td><td>String type that avoids interpretation: may be used for regular expressions in languages without a specific regex type</td></tr>
<tr><td><code>real</code></td><td>Numeric literal which may have a fraction or exponent like '3.84e-15'</td></tr>
<tr><td><code>regex</code></td><td>Regular expression literal like '^[a-z]+'</td></tr>
<tr><td><code>register</code></td><td>CPU register in assembler languages</td></tr>
<tr><td><code>server</code></td><td>Script executed on server</td></tr>
<tr><td><code>string</code></td><td>Sequence of characters</td></tr>
<tr><td><code>tag</code></td><td>Markup tag like '&lt;br /&gt;'</td></tr>
<tr><td><code>taskmarker</code></td><td>Word in comment that marks future work like 'FIXME'</td></tr>
<tr><td><code>time</code></td><td>Literal representing a time such as '9:34:31'</td></tr>
<tr><td><code>unused</code></td><td>Style that is not currently used</td></tr>
<tr><td><code>uuid</code></td><td>Universally unique identifier often used in interface definition files which may look like '{098f2470-bae0-11cd-b579-08002b30bfeb}'</td></tr>
</table>
<h2>
Extension
</h2>
<p>
Each element in this scheme may be extended in the future. This may be done by revising this document to provide a common approach to new features.
Individual lexers may also choose to expose unique language features through new tags.
</p>
<h2>
Translation
</h2>
<p>
Tags could be exposed directly in user interfaces or configuration languages.
However, an application may also translate these to match its naming schema.
Capitalization and punctuation could be different (like <code>Here-Doc</code> instead of <code>heredoc</code>),
terminology changed ("constant" instead of "literal"),
or human language changed from English to Chinese or Spanish.
</p>
<p>
Starting from a common set of tags makes these modifications tractable.
</p>
<h2>
Open issues
</h2>
<p>
The C++ lexer (for example) has inactive states and dynamically allocated substyles.
These should be exposed through the metadata mechanism but are not currently.
</p>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -0,0 +1,196 @@
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org" />
<meta name="generator" content="SciTE" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="keywords" content="Scintilla, SciTE, Editing Component, Text Editor" />
<meta name="Description"
content="www.scintilla.org is the home of the Scintilla editing component and SciTE text editor application." />
<meta name="Date.Modified" content="20240423" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
.logo {
background: url(https://www.scintilla.org/ScintillaLogo.png) no-repeat;
background-image: image-set(
url(https://www.scintilla.org/ScintillaLogo.png) 1x,
url(https://www.scintilla.org/ScintillaLogo2x.png) 2x );
height:150px;
}
#versionlist {
margin: 0;
padding: .5em;
list-style-type: none;
color: #FFCC99;
background: #000000;
}
#versionlist li {
margin-bottom: .5em;
}
#menu {
margin: 0;
padding: .5em 0;
list-style-type: none;
font-size: larger;
background: #CCCCCC;
}
#menu li {
margin: 0;
padding: 0 .5em;
display: inline;
}
</style>
<script type="text/javascript">
function IsRemote() {
var loc = '' + window.location;
return (loc.indexOf('http:')) != -1 || (loc.indexOf('https:') != -1);
}
</script>
<title>
Scintilla and SciTE
</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td width="40%" align="left">
<font color="#FFCC99" size="4"> A free source code editing component for Win32,
GTK, and macOS</font>
</td>
<td width="40%" align="right">
<font color="#FFCC99" size="3"> Release version 5.5.0<br />
Site last modified April 23 2024</font>
</td>
<td width="20%">
&nbsp;
</td>
</tr>
</table>
<table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td width="100%" class="logo">
&nbsp;
</td>
</tr>
</table>
<ul id="versionlist">
<li>Version 5.5.0 fixes adds elements for inactive additional selections.</li>
<li>Version 5.4.3 fixes a redo bug.</li>
<li>Version 5.4.2 can save and restore undo history.</li>
<li>Version 5.4.1 adds IDocumentEditable interface to allow efficient interaction with document objects.</li>
<li>Version 5.4.0 fixes crashes on macOS 12 and older when built with Xcode 15.0.</li>
</ul>
<ul id="menu">
<li id="remote1"><a href="https://www.scintilla.org/SciTEImage.html">Screenshot</a></li>
<li id="remote2"><a href="https://www.scintilla.org/ScintillaDownload.html">Download</a></li>
<li><a href="ScintillaDoc.html">Documentation</a></li>
<li><a href="ScintillaToDo.html">Bugs</a></li>
<li id="remote3"><a href="https://www.scintilla.org/Lexilla.html">Lexilla</a></li>
<li id="remote4"><a href="https://www.scintilla.org/SciTE.html">SciTE</a></li>
<li><a href="ScintillaHistory.html">History</a></li>
<li><a href="ScintillaRelated.html">Related</a></li>
<li id="remote5"><a href="https://www.scintilla.org/Privacy.html">Privacy</a></li>
</ul>
<script type="text/javascript" language="JavaScript"><!--
if (!IsRemote()) { //if NOT remote...
document.getElementById('remote1').style.display='none';
document.getElementById('remote2').style.display='none';
document.getElementById('remote3').style.display='none';
document.getElementById('remote4').style.display='none';
document.getElementById('remote5').style.display='none';
}
//--></script>
<p>
<a href="ScintillaDoc.html">Scintilla</a> is a free source code editing component.
It comes with complete source code and a <a href="https://www.scintilla.org/License.txt">license</a> that
permits use in any free project or commercial product.
</p>
<p>
As well as features found in standard text editing components, Scintilla includes features
especially useful when editing and debugging source code.
These include support for syntax styling, error indicators, code completion and call tips.
The selection margin can contain markers like those used in debuggers to indicate
breakpoints and the current line. Styling choices are more open than with many editors,
allowing the use of proportional fonts, bold and italics, multiple foreground and background
colours and multiple fonts.
</p>
<p>
Current development occurs on the default branch as 5.* which requires a recent
C++ compiler that supports C++17.
</p>
<p>
<a href="https://www.scintilla.org/Lexilla.html">Lexilla</a> is a library of lexers that can
be used with Scintilla.
</p>
<p>
<a href="https://www.scintilla.org/SciTE.html">SciTE</a> is a SCIntilla based Text Editor. Originally built to
demonstrate Scintilla, it has grown to be a generally useful editor with facilities for
building and running programs. It is best used for jobs with simple configurations - I use it
for building test and demonstration programs as well as SciTE and Scintilla, themselves.
</p>
<p>
Development of Scintilla started as an effort to improve the text editor in PythonWin. After
being frustrated by problems in the Richedit control used by PythonWin, it looked like the
best way forward was to write a new edit control. The biggest problem with Richedit and other
similar controls is that they treat styling changes as important persistent changes to the
document so they are saved into the undo stack and set the document's dirty flag. For source
code, styling should not be persisted as it can be mechanically recreated.
</p>
<p>
Scintilla and SciTE are currently available for Intel Win32, macOS, and Linux compatible operating
systems with GTK. They have been run on Windows XP, Windows 7, macOS 10.9+, and on Ubuntu 18.04
with GTK 2.24. <a href="https://www.scintilla.org/SciTEImage.html">Here is a screenshot of
SciTE.</a><br />
</p>
<p>
You can <a href="https://www.scintilla.org/ScintillaDownload.html">download Scintilla.</a>
</p>
<p>
The source code can be downloaded via Mercurial at the Source Forge
<a href="https://sourceforge.net/projects/scintilla/">Scintilla project page</a>.
</p>
<p>
<a href="ScintillaRelated.html">Related sites.</a>
</p>
<p>
<a href="ScintillaToDo.html">Bugs and To Do list.</a>
</p>
<p>
<a href="ScintillaHistory.html">History and contribution credits.</a>
</p>
<p>
<a href="https://www.scintilla.org/Icons.html">Icons that can be used with Scintilla.</a>
</p>
<p>
Questions and comments about Scintilla should be directed to the
<a href="https://groups.google.com/forum/#!forum/scintilla-interest">scintilla-interest</a>
mailing list,
which is for discussion of Scintilla and related projects, their bugs and future features.
This is a low traffic list, averaging less than 20 messages per week.
To avoid spam, only list members can write to the list.
New versions of Scintilla are announced on scintilla-interest and may also be received by SourceForge
members by clicking on the Monitor column icon for "scintilla" on
<a href="https://sourceforge.net/project/showfiles.php?group_id=2439">the downloads page</a>.
<br />
</p>
There is a <a href="https://sourceforge.net/projects/scintilla/">Scintilla project page</a>
hosted on
<script type="text/javascript" language="JavaScript">
<!--
if (IsRemote()) {
document.write('<a href="https://sourceforge.net/projects/scintilla/">');
document.write('<img src="https://sflogo.sourceforge.net/sflogo.php?group_id=2439&amp;type=8" width="80" height="15" alt="Get Scintilla at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a> ');
} else {
document.write('<a href="https://sourceforge.net/projects/scintilla/">SourceForge<\/a>');
}
//-->
</script>
<noscript>
<a href="https://sourceforge.net/projects/scintilla/">
<img src="https://sflogo.sourceforge.net/sflogo.php?group_id=2439&amp;type=8" width="80" height="15" alt="Get Scintilla at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
</noscript>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,72 @@
// Scintilla source code edit control
// Converter.h - Encapsulation of iconv
// Copyright 2004 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
#ifndef CONVERTER_H
#define CONVERTER_H
namespace Scintilla {
const GIConv iconvhBad = (GIConv)(-1);
const gsize sizeFailure = static_cast<gsize>(-1);
/**
* Encapsulate g_iconv safely.
*/
class Converter {
GIConv iconvh = iconvhBad;
void OpenHandle(const char *fullDestination, const char *charSetSource) noexcept {
iconvh = g_iconv_open(fullDestination, charSetSource);
}
bool Succeeded() const noexcept {
return iconvh != iconvhBad;
}
public:
Converter() noexcept = default;
Converter(const char *charSetDestination, const char *charSetSource, bool transliterations) {
Open(charSetDestination, charSetSource, transliterations);
}
// Deleted so Converter objects can not be copied.
Converter(const Converter &) = delete;
Converter(Converter &&) = delete;
Converter &operator=(const Converter &) = delete;
Converter &operator=(Converter &&) = delete;
~Converter() {
Close();
}
operator bool() const noexcept {
return Succeeded();
}
void Open(const char *charSetDestination, const char *charSetSource, bool transliterations) {
Close();
if (*charSetSource) {
// Try allowing approximate transliterations
if (transliterations) {
std::string fullDest(charSetDestination);
fullDest.append("//TRANSLIT");
OpenHandle(fullDest.c_str(), charSetSource);
}
if (!Succeeded()) {
// Transliterations failed so try basic name
OpenHandle(charSetDestination, charSetSource);
}
}
}
void Close() noexcept {
if (Succeeded()) {
g_iconv_close(iconvh);
iconvh = iconvhBad;
}
}
gsize Convert(char **src, gsize *srcleft, char **dst, gsize *dstleft) const noexcept {
if (!Succeeded()) {
return sizeFailure;
} else {
return g_iconv(iconvh, src, srcleft, dst, dstleft);
}
}
};
}
#endif

View File

@ -0,0 +1,23 @@
#!/usr/bin/env python3
# DepGen.py - produce a make dependencies file for Scintilla
# Copyright 2019 by Neil Hodgson <neilh@scintilla.org>
# The License.txt file describes the conditions under which this software may be distributed.
# Requires Python 3.6 or later
import sys
sys.path.append("..")
from scripts import Dependencies
topComment = "# Created by DepGen.py. To recreate, run DepGen.py.\n"
def Generate():
sources = ["../src/*.cxx"]
includes = ["../include", "../src"]
deps = Dependencies.FindDependencies(["../gtk/*.cxx"] + sources, ["../gtk"] + includes, ".o", "../gtk/")
Dependencies.UpdateDependencies("../gtk/deps.mak", deps, topComment)
if __name__ == "__main__":
Generate()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,337 @@
// Scintilla source code edit control
// ScintillaGTK.h - GTK+ specific subclass of ScintillaBase
// Copyright 1998-2004 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
#ifndef SCINTILLAGTK_H
#define SCINTILLAGTK_H
namespace Scintilla::Internal {
class ScintillaGTKAccessible;
#define OBJECT_CLASS GObjectClass
struct FontOptions {
cairo_antialias_t antialias {};
cairo_subpixel_order_t order {};
cairo_hint_style_t hint {};
FontOptions() noexcept = default;
explicit FontOptions(GtkWidget *widget) noexcept;
bool operator==(const FontOptions &other) const noexcept;
};
class ScintillaGTK : public ScintillaBase {
friend class ScintillaGTKAccessible;
_ScintillaObject *sci;
Window wText;
Window scrollbarv;
Window scrollbarh;
GtkAdjustment *adjustmentv;
GtkAdjustment *adjustmenth;
int verticalScrollBarWidth;
int horizontalScrollBarHeight;
PRectangle rectangleClient;
SelectionText primary;
SelectionPosition posPrimary;
UniqueGdkEvent evbtn;
guint buttonMouse;
bool capturedMouse;
bool dragWasDropped;
int lastKey;
int rectangularSelectionModifier;
GtkWidgetClass *parentClass;
static inline GdkAtom atomUTF8 {};
static inline GdkAtom atomUTF8Mime {};
static inline GdkAtom atomString {};
static inline GdkAtom atomUriList {};
static inline GdkAtom atomDROPFILES_DND {};
GdkAtom atomSought;
size_t inClearSelection = 0;
#if PLAT_GTK_WIN32
CLIPFORMAT cfColumnSelect;
#endif
bool preeditInitialized;
Window wPreedit;
Window wPreeditDraw;
UniqueIMContext im_context;
GUnicodeScript lastNonCommonScript;
GtkSettings *settings;
gulong settingsHandlerId;
// Wheel mouse support
unsigned int linesPerScroll;
gint64 lastWheelMouseTime;
gint lastWheelMouseDirection;
gint wheelMouseIntensity;
gdouble smoothScrollY;
gdouble smoothScrollX;
#if GTK_CHECK_VERSION(3,0,0)
cairo_rectangle_list_t *rgnUpdate;
#else
GdkRegion *rgnUpdate;
#endif
bool repaintFullWindow;
guint styleIdleID;
guint scrollBarIdleID = 0;
FontOptions fontOptionsPrevious;
int accessibilityEnabled;
AtkObject *accessible;
public:
explicit ScintillaGTK(_ScintillaObject *sci_);
// Deleted so ScintillaGTK objects can not be copied.
ScintillaGTK(const ScintillaGTK &) = delete;
ScintillaGTK(ScintillaGTK &&) = delete;
ScintillaGTK &operator=(const ScintillaGTK &) = delete;
ScintillaGTK &operator=(ScintillaGTK &&) = delete;
~ScintillaGTK() override;
static ScintillaGTK *FromWidget(GtkWidget *widget) noexcept;
static void ClassInit(OBJECT_CLASS *object_class, GtkWidgetClass *widget_class, GtkContainerClass *container_class);
private:
void Init();
void Finalise() override;
bool AbandonPaint() override;
void DisplayCursor(Window::Cursor c) override;
bool DragThreshold(Point ptStart, Point ptNow) override;
void StartDrag() override;
Sci::Position TargetAsUTF8(char *text) const;
Sci::Position EncodedFromUTF8(const char *utf8, char *encoded) const;
bool ValidCodePage(int codePage) const override;
std::string UTF8FromEncoded(std::string_view encoded) const override;
std::string EncodedFromUTF8(std::string_view utf8) const override;
public: // Public for scintilla_send_message
sptr_t WndProc(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam) override;
private:
sptr_t DefWndProc(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam) override;
struct TimeThunk {
TickReason reason;
ScintillaGTK *scintilla;
guint timer;
TimeThunk() noexcept : reason(TickReason::caret), scintilla(nullptr), timer(0) {}
};
TimeThunk timers[static_cast<size_t>(TickReason::dwell)+1];
bool FineTickerRunning(TickReason reason) override;
void FineTickerStart(TickReason reason, int millis, int tolerance) override;
void FineTickerCancel(TickReason reason) override;
bool SetIdle(bool on) override;
void SetMouseCapture(bool on) override;
bool HaveMouseCapture() override;
bool PaintContains(PRectangle rc) override;
void FullPaint();
void SetClientRectangle();
PRectangle GetClientRectangle() const override;
void ScrollText(Sci::Line linesToMove) override;
void SetVerticalScrollPos() override;
void SetHorizontalScrollPos() override;
bool ModifyScrollBars(Sci::Line nMax, Sci::Line nPage) override;
void ReconfigureScrollBars() override;
void SetScrollBars() override;
void NotifyChange() override;
void NotifyFocus(bool focus) override;
void NotifyParent(Scintilla::NotificationData scn) override;
void NotifyKey(Scintilla::Keys key, Scintilla::KeyMod modifiers);
void NotifyURIDropped(const char *list);
const char *CharacterSetID() const;
std::unique_ptr<CaseFolder> CaseFolderForEncoding() override;
std::string CaseMapString(const std::string &s, CaseMapping caseMapping) override;
int KeyDefault(Scintilla::Keys key, Scintilla::KeyMod modifiers) override;
void CopyToClipboard(const SelectionText &selectedText) override;
void Copy() override;
void RequestSelection(GdkAtom atomSelection);
void Paste() override;
void CreateCallTipWindow(PRectangle rc) override;
void AddToPopUp(const char *label, int cmd = 0, bool enabled = true) override;
bool OwnPrimarySelection();
void ClaimSelection() override;
static bool IsStringAtom(GdkAtom type);
void GetGtkSelectionText(GtkSelectionData *selectionData, SelectionText &selText);
void InsertSelection(GtkClipboard *clipBoard, GtkSelectionData *selectionData);
public: // Public for SelectionReceiver
GObject *MainObject() const noexcept;
void ReceivedClipboard(GtkClipboard *clipBoard, GtkSelectionData *selection_data) noexcept;
private:
void ReceivedSelection(GtkSelectionData *selection_data);
void ReceivedDrop(GtkSelectionData *selection_data);
static void GetSelection(GtkSelectionData *selection_data, guint info, SelectionText *text);
void StoreOnClipboard(SelectionText *clipText);
static void ClipboardGetSelection(GtkClipboard *clip, GtkSelectionData *selection_data, guint info, void *data);
static void ClipboardClearSelection(GtkClipboard *clip, void *data);
void ClearPrimarySelection();
void PrimaryGetSelectionThis(GtkClipboard *clip, GtkSelectionData *selection_data, guint info);
static void PrimaryGetSelection(GtkClipboard *clip, GtkSelectionData *selection_data, guint info, gpointer pSci);
void PrimaryClearSelectionThis(GtkClipboard *clip);
static void PrimaryClearSelection(GtkClipboard *clip, gpointer pSci);
void UnclaimSelection(GdkEventSelection *selection_event);
void Resize(int width, int height);
// Callback functions
void RealizeThis(GtkWidget *widget);
static void Realize(GtkWidget *widget);
void UnRealizeThis(GtkWidget *widget);
static void UnRealize(GtkWidget *widget);
void MapThis();
static void Map(GtkWidget *widget);
void UnMapThis();
static void UnMap(GtkWidget *widget);
gint FocusInThis(GtkWidget *widget);
static gint FocusIn(GtkWidget *widget, GdkEventFocus *event);
gint FocusOutThis(GtkWidget *widget);
static gint FocusOut(GtkWidget *widget, GdkEventFocus *event);
static void SizeRequest(GtkWidget *widget, GtkRequisition *requisition);
#if GTK_CHECK_VERSION(3,0,0)
static void GetPreferredWidth(GtkWidget *widget, gint *minimalWidth, gint *naturalWidth);
static void GetPreferredHeight(GtkWidget *widget, gint *minimalHeight, gint *naturalHeight);
#endif
static void SizeAllocate(GtkWidget *widget, GtkAllocation *allocation);
void CheckForFontOptionChange();
#if GTK_CHECK_VERSION(3,0,0)
gboolean DrawTextThis(cairo_t *cr);
static gboolean DrawText(GtkWidget *widget, cairo_t *cr, ScintillaGTK *sciThis);
gboolean DrawThis(cairo_t *cr);
static gboolean DrawMain(GtkWidget *widget, cairo_t *cr);
#else
gboolean ExposeTextThis(GtkWidget *widget, GdkEventExpose *ose);
static gboolean ExposeText(GtkWidget *widget, GdkEventExpose *ose, ScintillaGTK *sciThis);
gboolean Expose(GtkWidget *widget, GdkEventExpose *ose);
static gboolean ExposeMain(GtkWidget *widget, GdkEventExpose *ose);
#endif
void ForAll(GtkCallback callback, gpointer callback_data);
static void MainForAll(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data);
static void ScrollSignal(GtkAdjustment *adj, ScintillaGTK *sciThis);
static void ScrollHSignal(GtkAdjustment *adj, ScintillaGTK *sciThis);
gint PressThis(GdkEventButton *event);
static gint Press(GtkWidget *widget, GdkEventButton *event);
static gint MouseRelease(GtkWidget *widget, GdkEventButton *event);
static gint ScrollEvent(GtkWidget *widget, GdkEventScroll *event);
static gint Motion(GtkWidget *widget, GdkEventMotion *event);
gboolean KeyThis(GdkEventKey *event);
static gboolean KeyPress(GtkWidget *widget, GdkEventKey *event);
static gboolean KeyRelease(GtkWidget *widget, GdkEventKey *event);
#if GTK_CHECK_VERSION(3,0,0)
gboolean DrawPreeditThis(GtkWidget *widget, cairo_t *cr);
static gboolean DrawPreedit(GtkWidget *widget, cairo_t *cr, ScintillaGTK *sciThis);
#else
gboolean ExposePreeditThis(GtkWidget *widget, GdkEventExpose *ose);
static gboolean ExposePreedit(GtkWidget *widget, GdkEventExpose *ose, ScintillaGTK *sciThis);
#endif
AtkObject *GetAccessibleThis(GtkWidget *widget);
static AtkObject *GetAccessible(GtkWidget *widget);
bool KoreanIME();
void CommitThis(char *commitStr);
static void Commit(GtkIMContext *context, char *str, ScintillaGTK *sciThis);
void PreeditChangedInlineThis();
void PreeditChangedWindowedThis();
static void PreeditChanged(GtkIMContext *context, ScintillaGTK *sciThis);
bool RetrieveSurroundingThis(GtkIMContext *context);
static gboolean RetrieveSurrounding(GtkIMContext *context, ScintillaGTK *sciThis);
bool DeleteSurroundingThis(GtkIMContext *context, gint characterOffset, gint characterCount);
static gboolean DeleteSurrounding(GtkIMContext *context, gint characterOffset, gint characterCount,
ScintillaGTK *sciThis);
void MoveImeCarets(Sci::Position pos);
void DrawImeIndicator(int indicator, Sci::Position len);
void SetCandidateWindowPos();
static void StyleSetText(GtkWidget *widget, GtkStyle *previous, void *);
static void RealizeText(GtkWidget *widget, void *);
static void Dispose(GObject *object);
static void Destroy(GObject *object);
static void SelectionReceived(GtkWidget *widget, GtkSelectionData *selection_data,
guint time);
static void SelectionGet(GtkWidget *widget, GtkSelectionData *selection_data,
guint info, guint time);
static gint SelectionClear(GtkWidget *widget, GdkEventSelection *selection_event);
gboolean DragMotionThis(GdkDragContext *context, gint x, gint y, guint dragtime);
static gboolean DragMotion(GtkWidget *widget, GdkDragContext *context,
gint x, gint y, guint dragtime);
static void DragLeave(GtkWidget *widget, GdkDragContext *context,
guint time);
static void DragEnd(GtkWidget *widget, GdkDragContext *context);
static gboolean Drop(GtkWidget *widget, GdkDragContext *context,
gint x, gint y, guint time);
static void DragDataReceived(GtkWidget *widget, GdkDragContext *context,
gint x, gint y, GtkSelectionData *selection_data, guint info, guint time);
static void DragDataGet(GtkWidget *widget, GdkDragContext *context,
GtkSelectionData *selection_data, guint info, guint time);
static gboolean TimeOut(gpointer ptt);
static gboolean IdleCallback(gpointer pSci);
static gboolean StyleIdle(gpointer pSci);
void IdleWork() override;
void QueueIdleWork(WorkItems items, Sci::Position upTo) override;
void SetDocPointer(Document *document) override;
static void PopUpCB(GtkMenuItem *menuItem, ScintillaGTK *sciThis);
#if GTK_CHECK_VERSION(3,0,0)
static gboolean DrawCT(GtkWidget *widget, cairo_t *cr, CallTip *ctip);
#else
static gboolean ExposeCT(GtkWidget *widget, GdkEventExpose *ose, CallTip *ctip);
#endif
static gboolean PressCT(GtkWidget *widget, GdkEventButton *event, ScintillaGTK *sciThis);
static sptr_t DirectFunction(sptr_t ptr,
unsigned int iMessage, uptr_t wParam, sptr_t lParam);
static sptr_t DirectStatusFunction(sptr_t ptr,
unsigned int iMessage, uptr_t wParam, sptr_t lParam, int *pStatus);
};
// helper class to watch a GObject lifetime and get notified when it dies
class GObjectWatcher {
GObject *weakRef;
void WeakNotifyThis(GObject *obj G_GNUC_UNUSED) {
PLATFORM_ASSERT(obj == weakRef);
Destroyed();
weakRef = nullptr;
}
static void WeakNotify(gpointer data, GObject *obj) {
static_cast<GObjectWatcher *>(data)->WeakNotifyThis(obj);
}
public:
GObjectWatcher(GObject *obj) :
weakRef(obj) {
g_object_weak_ref(weakRef, WeakNotify, this);
}
// Deleted so GObjectWatcher objects can not be copied.
GObjectWatcher(const GObjectWatcher&) = delete;
GObjectWatcher(GObjectWatcher&&) = delete;
GObjectWatcher&operator=(const GObjectWatcher&) = delete;
GObjectWatcher&operator=(GObjectWatcher&&) = delete;
virtual ~GObjectWatcher() {
if (weakRef) {
g_object_weak_unref(weakRef, WeakNotify, this);
}
}
virtual void Destroyed() {}
bool IsDestroyed() const {
return weakRef != nullptr;
}
};
std::string ConvertText(const char *s, size_t len, const char *charSetDest,
const char *charSetSource, bool transliterations, bool silent=false);
}
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,194 @@
/* Scintilla source code edit control */
/* ScintillaGTKAccessible.h - GTK+ accessibility for ScintillaGTK */
/* Copyright 2016 by Colomban Wendling <colomban@geany.org>
* The License.txt file describes the conditions under which this software may be distributed. */
#ifndef SCINTILLAGTKACCESSIBLE_H
#define SCINTILLAGTKACCESSIBLE_H
namespace Scintilla::Internal {
#ifndef ATK_CHECK_VERSION
# define ATK_CHECK_VERSION(x, y, z) 0
#endif
class ScintillaGTKAccessible {
private:
// weak references to related objects
GtkAccessible *accessible;
ScintillaGTK *sci;
// local state for comparing
Sci::Position old_pos;
std::vector<SelectionRange> old_sels;
bool Enabled() const;
void UpdateCursor();
void Notify(GtkWidget *widget, gint code, Scintilla::NotificationData *nt);
static void SciNotify(GtkWidget *widget, gint code, Scintilla::NotificationData *nt, gpointer data) {
try {
static_cast<ScintillaGTKAccessible*>(data)->Notify(widget, code, nt);
} catch (...) {}
}
Sci::Position ByteOffsetFromCharacterOffset(Sci::Position startByte, int characterOffset) {
if (!FlagSet(sci->pdoc->LineCharacterIndex(), Scintilla::LineCharacterIndexType::Utf32)) {
return startByte + characterOffset;
}
if (characterOffset > 0) {
// Try and reduce the range by reverse-looking into the character offset cache
Sci::Line lineStart = sci->pdoc->LineFromPosition(startByte);
Sci::Position posStart = sci->pdoc->IndexLineStart(lineStart, Scintilla::LineCharacterIndexType::Utf32);
Sci::Line line = sci->pdoc->LineFromPositionIndex(posStart + characterOffset, Scintilla::LineCharacterIndexType::Utf32);
if (line != lineStart) {
startByte += sci->pdoc->LineStart(line) - sci->pdoc->LineStart(lineStart);
characterOffset -= sci->pdoc->IndexLineStart(line, Scintilla::LineCharacterIndexType::Utf32) - posStart;
}
}
Sci::Position pos = sci->pdoc->GetRelativePosition(startByte, characterOffset);
if (pos == INVALID_POSITION) {
// clamp invalid positions inside the document
if (characterOffset > 0) {
return sci->pdoc->Length();
} else {
return 0;
}
}
return pos;
}
Sci::Position ByteOffsetFromCharacterOffset(Sci::Position characterOffset) {
return ByteOffsetFromCharacterOffset(0, characterOffset);
}
Sci::Position CharacterOffsetFromByteOffset(Sci::Position byteOffset) {
if (!FlagSet(sci->pdoc->LineCharacterIndex(), Scintilla::LineCharacterIndexType::Utf32)) {
return byteOffset;
}
const Sci::Line line = sci->pdoc->LineFromPosition(byteOffset);
const Sci::Position lineStart = sci->pdoc->LineStart(line);
return sci->pdoc->IndexLineStart(line, Scintilla::LineCharacterIndexType::Utf32) + sci->pdoc->CountCharacters(lineStart, byteOffset);
}
void CharacterRangeFromByteRange(Sci::Position startByte, Sci::Position endByte, int *startChar, int *endChar) {
*startChar = CharacterOffsetFromByteOffset(startByte);
*endChar = *startChar + sci->pdoc->CountCharacters(startByte, endByte);
}
void ByteRangeFromCharacterRange(int startChar, int endChar, Sci::Position& startByte, Sci::Position& endByte) {
startByte = ByteOffsetFromCharacterOffset(startChar);
endByte = ByteOffsetFromCharacterOffset(startByte, endChar - startChar);
}
Sci::Position PositionBefore(Sci::Position pos) {
return sci->pdoc->MovePositionOutsideChar(pos - 1, -1, true);
}
Sci::Position PositionAfter(Sci::Position pos) {
return sci->pdoc->MovePositionOutsideChar(pos + 1, 1, true);
}
int StyleAt(Sci::Position position, bool ensureStyle = false) {
if (ensureStyle)
sci->pdoc->EnsureStyledTo(position);
return sci->pdoc->StyleAt(position);
}
// For AtkText
gchar *GetTextRangeUTF8(Sci::Position startByte, Sci::Position endByte);
gchar *GetText(int startChar, int endChar);
gchar *GetTextAfterOffset(int charOffset, AtkTextBoundary boundaryType, int *startChar, int *endChar);
gchar *GetTextBeforeOffset(int charOffset, AtkTextBoundary boundaryType, int *startChar, int *endChar);
gchar *GetTextAtOffset(int charOffset, AtkTextBoundary boundaryType, int *startChar, int *endChar);
#if ATK_CHECK_VERSION(2, 10, 0)
gchar *GetStringAtOffset(int charOffset, AtkTextGranularity granularity, int *startChar, int *endChar);
#endif
gunichar GetCharacterAtOffset(int charOffset);
gint GetCharacterCount();
gint GetCaretOffset();
gboolean SetCaretOffset(int charOffset);
gint GetOffsetAtPoint(gint x, gint y, AtkCoordType coords);
void GetCharacterExtents(int charOffset, gint *x, gint *y, gint *width, gint *height, AtkCoordType coords);
AtkAttributeSet *GetAttributesForStyle(unsigned int styleNum);
AtkAttributeSet *GetRunAttributes(int charOffset, int *startChar, int *endChar);
AtkAttributeSet *GetDefaultAttributes();
gint GetNSelections();
gchar *GetSelection(gint selection_num, int *startChar, int *endChar);
gboolean AddSelection(int startChar, int endChar);
gboolean RemoveSelection(int selection_num);
gboolean SetSelection(gint selection_num, int startChar, int endChar);
// for AtkEditableText
bool InsertStringUTF8(Sci::Position bytePos, const gchar *utf8, Sci::Position lengthBytes);
void SetTextContents(const gchar *contents);
void InsertText(const gchar *text, int lengthBytes, int *charPosition);
void CopyText(int startChar, int endChar);
void CutText(int startChar, int endChar);
void DeleteText(int startChar, int endChar);
void PasteText(int charPosition);
public:
ScintillaGTKAccessible(GtkAccessible *accessible_, GtkWidget *widget_);
~ScintillaGTKAccessible();
static ScintillaGTKAccessible *FromAccessible(GtkAccessible *accessible);
static ScintillaGTKAccessible *FromAccessible(AtkObject *accessible) {
return FromAccessible(GTK_ACCESSIBLE(accessible));
}
// So ScintillaGTK can notify us
void ChangeDocument(Document *oldDoc, Document *newDoc);
void NotifyReadOnly();
void SetAccessibility(bool enabled);
// Helper GtkWidget methods
static AtkObject *WidgetGetAccessibleImpl(GtkWidget *widget, AtkObject **cache, gpointer widget_parent_class);
// ATK methods
class AtkTextIface {
public:
static void init(::AtkTextIface *iface);
private:
AtkTextIface();
static gchar *GetText(AtkText *text, int start_offset, int end_offset);
static gchar *GetTextAfterOffset(AtkText *text, int offset, AtkTextBoundary boundary_type, int *start_offset, int *end_offset);
static gchar *GetTextBeforeOffset(AtkText *text, int offset, AtkTextBoundary boundary_type, int *start_offset, int *end_offset);
static gchar *GetTextAtOffset(AtkText *text, gint offset, AtkTextBoundary boundary_type, gint *start_offset, gint *end_offset);
#if ATK_CHECK_VERSION(2, 10, 0)
static gchar *GetStringAtOffset(AtkText *text, gint offset, AtkTextGranularity granularity, gint *start_offset, gint *end_offset);
#endif
static gunichar GetCharacterAtOffset(AtkText *text, gint offset);
static gint GetCharacterCount(AtkText *text);
static gint GetCaretOffset(AtkText *text);
static gboolean SetCaretOffset(AtkText *text, gint offset);
static gint GetOffsetAtPoint(AtkText *text, gint x, gint y, AtkCoordType coords);
static void GetCharacterExtents(AtkText *text, gint offset, gint *x, gint *y, gint *width, gint *height, AtkCoordType coords);
static AtkAttributeSet *GetRunAttributes(AtkText *text, gint offset, gint *start_offset, gint *end_offset);
static AtkAttributeSet *GetDefaultAttributes(AtkText *text);
static gint GetNSelections(AtkText *text);
static gchar *GetSelection(AtkText *text, gint selection_num, gint *start_pos, gint *end_pos);
static gboolean AddSelection(AtkText *text, gint start, gint end);
static gboolean RemoveSelection(AtkText *text, gint selection_num);
static gboolean SetSelection(AtkText *text, gint selection_num, gint start, gint end);
};
class AtkEditableTextIface {
public:
static void init(::AtkEditableTextIface *iface);
private:
AtkEditableTextIface();
static void SetTextContents(AtkEditableText *text, const gchar *contents);
static void InsertText(AtkEditableText *text, const gchar *contents, gint length, gint *position);
static void CopyText(AtkEditableText *text, gint start, gint end);
static void CutText(AtkEditableText *text, gint start, gint end);
static void DeleteText(AtkEditableText *text, gint start, gint end);
static void PasteText(AtkEditableText *text, gint position);
};
};
}
#endif

View File

@ -0,0 +1,109 @@
// Scintilla source code edit control
// Wrappers.h - Encapsulation of GLib, GObject, Pango, Cairo, GTK, and GDK types
// Copyright 2022 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
#ifndef WRAPPERS_H
#define WRAPPERS_H
namespace Scintilla::Internal {
// GLib
struct GFreeReleaser {
template <class T>
void operator()(T *object) noexcept {
g_free(object);
}
};
using UniqueStr = std::unique_ptr<gchar, GFreeReleaser>;
// GObject
struct GObjectReleaser {
// Called by unique_ptr to destroy/free the object
template <class T>
void operator()(T *object) noexcept {
g_object_unref(object);
}
};
// Pango
using UniquePangoContext = std::unique_ptr<PangoContext, GObjectReleaser>;
using UniquePangoLayout = std::unique_ptr<PangoLayout, GObjectReleaser>;
using UniquePangoFontMap = std::unique_ptr<PangoFontMap, GObjectReleaser>;
struct FontDescriptionReleaser {
void operator()(PangoFontDescription *fontDescription) noexcept {
pango_font_description_free(fontDescription);
}
};
using UniquePangoFontDescription = std::unique_ptr<PangoFontDescription, FontDescriptionReleaser>;
struct FontMetricsReleaser {
void operator()(PangoFontMetrics *metrics) noexcept {
pango_font_metrics_unref(metrics);
}
};
using UniquePangoFontMetrics = std::unique_ptr<PangoFontMetrics, FontMetricsReleaser>;
struct LayoutIterReleaser {
// Called by unique_ptr to destroy/free the object
void operator()(PangoLayoutIter *iter) noexcept {
pango_layout_iter_free(iter);
}
};
using UniquePangoLayoutIter = std::unique_ptr<PangoLayoutIter, LayoutIterReleaser>;
// Cairo
struct CairoReleaser {
void operator()(cairo_t *context) noexcept {
cairo_destroy(context);
}
};
using UniqueCairo = std::unique_ptr<cairo_t, CairoReleaser>;
struct CairoSurfaceReleaser {
void operator()(cairo_surface_t *psurf) noexcept {
cairo_surface_destroy(psurf);
}
};
using UniqueCairoSurface = std::unique_ptr<cairo_surface_t, CairoSurfaceReleaser>;
// GTK
using UniqueIMContext = std::unique_ptr<GtkIMContext, GObjectReleaser>;
// GDK
struct GdkEventReleaser {
void operator()(GdkEvent *ev) noexcept {
gdk_event_free(ev);
}
};
using UniqueGdkEvent = std::unique_ptr<GdkEvent, GdkEventReleaser>;
inline void UnRefCursor(GdkCursor *cursor) noexcept {
#if GTK_CHECK_VERSION(3,0,0)
g_object_unref(cursor);
#else
gdk_cursor_unref(cursor);
#endif
}
[[nodiscard]] inline GdkWindow *WindowFromWidget(GtkWidget *w) noexcept {
return gtk_widget_get_window(w);
}
}
#endif

View File

@ -0,0 +1,520 @@
# Created by DepGen.py. To recreate, run DepGen.py.
PlatGTK.o: \
PlatGTK.cxx \
../include/ScintillaTypes.h \
../include/ScintillaMessages.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
../include/ScintillaWidget.h \
../src/CharacterType.h \
../src/XPM.h \
../src/UniConversion.h \
Wrappers.h \
Converter.h
ScintillaGTK.o: \
ScintillaGTK.cxx \
../include/ScintillaTypes.h \
../include/ScintillaMessages.h \
../include/ScintillaStructures.h \
../include/ILoader.h \
../include/Sci_Position.h \
../include/ILexer.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/ScintillaWidget.h \
../src/CharacterCategoryMap.h \
../src/Position.h \
../src/UniqueString.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/ContractionState.h \
../src/CellBuffer.h \
../src/CallTip.h \
../src/KeyMap.h \
../src/Indicator.h \
../src/LineMarker.h \
../src/Style.h \
../src/ViewStyle.h \
../src/CharClassify.h \
../src/Decoration.h \
../src/CaseFolder.h \
../src/Document.h \
../src/CaseConvert.h \
../src/UniConversion.h \
../src/Selection.h \
../src/PositionCache.h \
../src/EditModel.h \
../src/MarginView.h \
../src/EditView.h \
../src/Editor.h \
../src/AutoComplete.h \
../src/ScintillaBase.h \
Wrappers.h \
ScintillaGTK.h \
scintilla-marshal.h \
ScintillaGTKAccessible.h \
Converter.h
ScintillaGTKAccessible.o: \
ScintillaGTKAccessible.cxx \
../include/ScintillaTypes.h \
../include/ScintillaMessages.h \
../include/ScintillaStructures.h \
../include/ILoader.h \
../include/Sci_Position.h \
../include/ILexer.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/ScintillaWidget.h \
../src/CharacterCategoryMap.h \
../src/Position.h \
../src/UniqueString.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/ContractionState.h \
../src/CellBuffer.h \
../src/CallTip.h \
../src/KeyMap.h \
../src/Indicator.h \
../src/LineMarker.h \
../src/Style.h \
../src/ViewStyle.h \
../src/CharClassify.h \
../src/Decoration.h \
../src/CaseFolder.h \
../src/Document.h \
../src/CaseConvert.h \
../src/UniConversion.h \
../src/Selection.h \
../src/PositionCache.h \
../src/EditModel.h \
../src/MarginView.h \
../src/EditView.h \
../src/Editor.h \
../src/AutoComplete.h \
../src/ScintillaBase.h \
Wrappers.h \
ScintillaGTK.h \
ScintillaGTKAccessible.h
AutoComplete.o: \
../src/AutoComplete.cxx \
../include/ScintillaTypes.h \
../include/ScintillaMessages.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/CharacterType.h \
../src/Position.h \
../src/AutoComplete.h
CallTip.o: \
../src/CallTip.cxx \
../include/ScintillaTypes.h \
../include/ScintillaMessages.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/Position.h \
../src/CallTip.h
CaseConvert.o: \
../src/CaseConvert.cxx \
../src/CaseConvert.h \
../src/UniConversion.h
CaseFolder.o: \
../src/CaseFolder.cxx \
../src/CharacterType.h \
../src/CaseFolder.h \
../src/CaseConvert.h
CellBuffer.o: \
../src/CellBuffer.cxx \
../include/ScintillaTypes.h \
../src/Debugging.h \
../src/Position.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/SparseVector.h \
../src/ChangeHistory.h \
../src/CellBuffer.h \
../src/UndoHistory.h \
../src/UniConversion.h
ChangeHistory.o: \
../src/ChangeHistory.cxx \
../include/ScintillaTypes.h \
../src/Debugging.h \
../src/Position.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/SparseVector.h \
../src/ChangeHistory.h
CharacterCategoryMap.o: \
../src/CharacterCategoryMap.cxx \
../src/CharacterCategoryMap.h
CharacterType.o: \
../src/CharacterType.cxx \
../src/CharacterType.h
CharClassify.o: \
../src/CharClassify.cxx \
../src/CharacterType.h \
../src/CharClassify.h
ContractionState.o: \
../src/ContractionState.cxx \
../src/Debugging.h \
../src/Position.h \
../src/UniqueString.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/SparseVector.h \
../src/ContractionState.h
DBCS.o: \
../src/DBCS.cxx \
../src/DBCS.h
Decoration.o: \
../src/Decoration.cxx \
../include/ScintillaTypes.h \
../src/Debugging.h \
../src/Position.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/Decoration.h
Document.o: \
../src/Document.cxx \
../include/ScintillaTypes.h \
../include/ILoader.h \
../include/Sci_Position.h \
../include/ILexer.h \
../src/Debugging.h \
../src/CharacterType.h \
../src/CharacterCategoryMap.h \
../src/Position.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/CellBuffer.h \
../src/PerLine.h \
../src/CharClassify.h \
../src/Decoration.h \
../src/CaseFolder.h \
../src/Document.h \
../src/RESearch.h \
../src/UniConversion.h \
../src/ElapsedPeriod.h
EditModel.o: \
../src/EditModel.cxx \
../include/ScintillaTypes.h \
../include/ILoader.h \
../include/Sci_Position.h \
../include/ILexer.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/CharacterCategoryMap.h \
../src/Position.h \
../src/UniqueString.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/ContractionState.h \
../src/CellBuffer.h \
../src/Indicator.h \
../src/LineMarker.h \
../src/Style.h \
../src/ViewStyle.h \
../src/CharClassify.h \
../src/Decoration.h \
../src/CaseFolder.h \
../src/Document.h \
../src/UniConversion.h \
../src/Selection.h \
../src/PositionCache.h \
../src/EditModel.h
Editor.o: \
../src/Editor.cxx \
../include/ScintillaTypes.h \
../include/ScintillaMessages.h \
../include/ScintillaStructures.h \
../include/ILoader.h \
../include/Sci_Position.h \
../include/ILexer.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/CharacterType.h \
../src/CharacterCategoryMap.h \
../src/Position.h \
../src/UniqueString.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/ContractionState.h \
../src/CellBuffer.h \
../src/PerLine.h \
../src/KeyMap.h \
../src/Indicator.h \
../src/LineMarker.h \
../src/Style.h \
../src/ViewStyle.h \
../src/CharClassify.h \
../src/Decoration.h \
../src/CaseFolder.h \
../src/Document.h \
../src/UniConversion.h \
../src/DBCS.h \
../src/Selection.h \
../src/PositionCache.h \
../src/EditModel.h \
../src/MarginView.h \
../src/EditView.h \
../src/Editor.h \
../src/ElapsedPeriod.h
EditView.o: \
../src/EditView.cxx \
../include/ScintillaTypes.h \
../include/ScintillaMessages.h \
../include/ScintillaStructures.h \
../include/ILoader.h \
../include/Sci_Position.h \
../include/ILexer.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/CharacterType.h \
../src/CharacterCategoryMap.h \
../src/Position.h \
../src/UniqueString.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/ContractionState.h \
../src/CellBuffer.h \
../src/PerLine.h \
../src/KeyMap.h \
../src/Indicator.h \
../src/LineMarker.h \
../src/Style.h \
../src/ViewStyle.h \
../src/CharClassify.h \
../src/Decoration.h \
../src/CaseFolder.h \
../src/Document.h \
../src/UniConversion.h \
../src/Selection.h \
../src/PositionCache.h \
../src/EditModel.h \
../src/MarginView.h \
../src/EditView.h \
../src/ElapsedPeriod.h
Geometry.o: \
../src/Geometry.cxx \
../src/Geometry.h
Indicator.o: \
../src/Indicator.cxx \
../include/ScintillaTypes.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/Indicator.h \
../src/XPM.h
KeyMap.o: \
../src/KeyMap.cxx \
../include/ScintillaTypes.h \
../include/ScintillaMessages.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/KeyMap.h
LineMarker.o: \
../src/LineMarker.cxx \
../include/ScintillaTypes.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/XPM.h \
../src/LineMarker.h \
../src/UniConversion.h
MarginView.o: \
../src/MarginView.cxx \
../include/ScintillaTypes.h \
../include/ScintillaMessages.h \
../include/ScintillaStructures.h \
../include/ILoader.h \
../include/Sci_Position.h \
../include/ILexer.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/CharacterCategoryMap.h \
../src/Position.h \
../src/UniqueString.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/ContractionState.h \
../src/CellBuffer.h \
../src/KeyMap.h \
../src/Indicator.h \
../src/LineMarker.h \
../src/Style.h \
../src/ViewStyle.h \
../src/CharClassify.h \
../src/Decoration.h \
../src/CaseFolder.h \
../src/Document.h \
../src/UniConversion.h \
../src/Selection.h \
../src/PositionCache.h \
../src/EditModel.h \
../src/MarginView.h \
../src/EditView.h
PerLine.o: \
../src/PerLine.cxx \
../include/ScintillaTypes.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/Position.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/CellBuffer.h \
../src/PerLine.h
PositionCache.o: \
../src/PositionCache.cxx \
../include/ScintillaTypes.h \
../include/ScintillaMessages.h \
../include/ILoader.h \
../include/Sci_Position.h \
../include/ILexer.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/CharacterType.h \
../src/CharacterCategoryMap.h \
../src/Position.h \
../src/UniqueString.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/ContractionState.h \
../src/CellBuffer.h \
../src/KeyMap.h \
../src/Indicator.h \
../src/LineMarker.h \
../src/Style.h \
../src/ViewStyle.h \
../src/CharClassify.h \
../src/Decoration.h \
../src/CaseFolder.h \
../src/Document.h \
../src/UniConversion.h \
../src/DBCS.h \
../src/Selection.h \
../src/PositionCache.h
RESearch.o: \
../src/RESearch.cxx \
../src/Position.h \
../src/CharClassify.h \
../src/RESearch.h
RunStyles.o: \
../src/RunStyles.cxx \
../src/Debugging.h \
../src/Position.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h
ScintillaBase.o: \
../src/ScintillaBase.cxx \
../include/ScintillaTypes.h \
../include/ScintillaMessages.h \
../include/ScintillaStructures.h \
../include/ILoader.h \
../include/Sci_Position.h \
../include/ILexer.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/CharacterCategoryMap.h \
../src/Position.h \
../src/UniqueString.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/ContractionState.h \
../src/CellBuffer.h \
../src/CallTip.h \
../src/KeyMap.h \
../src/Indicator.h \
../src/LineMarker.h \
../src/Style.h \
../src/ViewStyle.h \
../src/CharClassify.h \
../src/Decoration.h \
../src/CaseFolder.h \
../src/Document.h \
../src/Selection.h \
../src/PositionCache.h \
../src/EditModel.h \
../src/MarginView.h \
../src/EditView.h \
../src/Editor.h \
../src/AutoComplete.h \
../src/ScintillaBase.h
Selection.o: \
../src/Selection.cxx \
../src/Debugging.h \
../src/Position.h \
../src/Selection.h
Style.o: \
../src/Style.cxx \
../include/ScintillaTypes.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/Style.h
UndoHistory.o: \
../src/UndoHistory.cxx \
../include/ScintillaTypes.h \
../src/Debugging.h \
../src/Position.h \
../src/SplitVector.h \
../src/Partitioning.h \
../src/RunStyles.h \
../src/SparseVector.h \
../src/ChangeHistory.h \
../src/CellBuffer.h \
../src/UndoHistory.h
UniConversion.o: \
../src/UniConversion.cxx \
../src/UniConversion.h
UniqueString.o: \
../src/UniqueString.cxx \
../src/UniqueString.h
ViewStyle.o: \
../src/ViewStyle.cxx \
../include/ScintillaTypes.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/Position.h \
../src/UniqueString.h \
../src/Indicator.h \
../src/XPM.h \
../src/LineMarker.h \
../src/Style.h \
../src/ViewStyle.h
XPM.o: \
../src/XPM.cxx \
../include/ScintillaTypes.h \
../src/Debugging.h \
../src/Geometry.h \
../src/Platform.h \
../src/XPM.h

View File

@ -0,0 +1,172 @@
# Make file for Scintilla on Linux, macOS, or Windows
# @file makefile
# Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
# The License.txt file describes the conditions under which this software may be distributed.
# This makefile assumes GCC 9.0+ is used and changes will be needed to use other compilers.
# Clang 9.0+ can be used with CLANG=1 on command line.
# Builds for GTK+ 2 and 3. GTK 3 requires GTK3=1 on command line.
# Also works with ming32-make on Windows.
.PHONY: static shared all clean analyze depend
.SUFFIXES: .cxx .c .o .h .a .list
srcdir ?= .
basedir = $(srcdir)/..
WARNINGS = -Wpedantic -Wall
ifdef CLANG
CXX = clang++
CC = clang
WARNINGS += -Wno-deprecated-register
ifdef windir
# Turn off some warnings that occur when Clang is being used on Windows where it
# is including Microsoft headers.
# incompatible-ms-struct is because more complex structs are not quite the same as MSVC
WARNINGS += -Wno-incompatible-ms-struct
# language-extension-token is because of __int64 in glib-2.0 glibconfig.h
WARNINGS += -Wno-language-extension-token
# register may be used in glib
# This produces a warning since -Wno-register is not valid for C files but it still works
WARNINGS += -Wno-register
endif
# Can choose aspect to sanitize: address and undefined can simply change SANITIZE but for
# thread also need to create Position Independent Executable -> search online documentation
SANITIZE = address
#SANITIZE = undefined
BASE_FLAGS += -fsanitize=$(SANITIZE)
endif
ARFLAGS = rc
RANLIB ?= ranlib
PKG_CONFIG ?= pkg-config
GTK_VERSION = $(if $(GTK3),gtk+-3.0,gtk+-2.0)
# Environment variable windir always defined on Win32
# Enable Position Independent Code except on Windows where it is the default so the flag produces a warning
ifndef windir
BASE_FLAGS += -fPIC
ifeq ($(shell uname),Darwin)
LDFLAGS += -dynamiclib
endif
endif
LDFLAGS += -shared
# Take care of changing Unix style '/' directory separator to '\' on Windows
normalize = $(if $(windir),$(subst /,\,$1),$1)
PYTHON = $(if $(windir),pyw,python3)
SHAREDEXTENSION = $(if $(windir),dll,so)
ifdef windir
CC = gcc
DEL = del /q
else
DEL = rm -f
endif
COMPLIB=$(basedir)/bin/scintilla.a
COMPONENT=$(basedir)/bin/libscintilla.$(SHAREDEXTENSION)
vpath %.h $(srcdir) $(basedir)/src $(basedir)/include
vpath %.c $(srcdir)
vpath %.cxx $(srcdir) $(basedir)/src
INCLUDES=-I $(basedir)/include -I $(basedir)/src
DEFINES += -DGTK
BASE_FLAGS += $(WARNINGS)
ifdef NO_CXX11_REGEX
DEFINES += -DNO_CXX11_REGEX
endif
DEFINES += -D$(if $(DEBUG),DEBUG,NDEBUG)
BASE_FLAGS += $(if $(DEBUG),-g,-O3)
CXX_BASE_FLAGS =--std=c++17 $(BASE_FLAGS)
CXX_ALL_FLAGS =$(DEFINES) $(INCLUDES) $(CXX_BASE_FLAGS) $(CONFIG_FLAGS)
CONFIG_FLAGS:=$(shell $(PKG_CONFIG) --cflags $(GTK_VERSION))
CONFIGLIB:=$(shell $(PKG_CONFIG) --libs $(GTK_VERSION) gmodule-no-export-2.0)
MARSHALLER=scintilla-marshal.o
all: $(COMPLIB) $(COMPONENT)
static: $(COMPLIB)
shared: $(COMPONENT)
clean:
$(DEL) *.o $(call normalize,$(COMPLIB)) $(call normalize,$(COMPONENT)) *.plist
%.o: %.cxx
$(CXX) $(CPPFLAGS) $(CXX_ALL_FLAGS) $(CXXFLAGS) -c $<
%.o: %.c
$(CC) $(CPPFLAGS) $(DEFINES) $(INCLUDES) $(CONFIG_FLAGS) $(BASE_FLAGS) $(CFLAGS) -w -c $<
GLIB_GENMARSHAL = glib-genmarshal
GLIB_GENMARSHAL_FLAGS = --prefix=scintilla_marshal
%.h: %.list
$(GLIB_GENMARSHAL) --header $(GLIB_GENMARSHAL_FLAGS) $< > $@
%.c: %.list
$(GLIB_GENMARSHAL) --body $(GLIB_GENMARSHAL_FLAGS) $< > $@
analyze:
clang --analyze $(DEFINES) $(INCLUDES) $(CONFIG_FLAGS) $(CXX_BASE_FLAGS) $(CXXFLAGS) $(srcdir)/*.cxx $(basedir)/src/*.cxx
depend deps.mak:
$(PYTHON) DepGen.py
# Required for base Scintilla
SRC_OBJS = \
AutoComplete.o \
CallTip.o \
CaseConvert.o \
CaseFolder.o \
CellBuffer.o \
ChangeHistory.o \
CharacterCategoryMap.o \
CharacterType.o \
CharClassify.o \
ContractionState.o \
DBCS.o \
Decoration.o \
Document.o \
EditModel.o \
Editor.o \
EditView.o \
Geometry.o \
Indicator.o \
KeyMap.o \
LineMarker.o \
MarginView.o \
PerLine.o \
PositionCache.o \
RESearch.o \
RunStyles.o \
Selection.o \
Style.o \
UndoHistory.o \
UniConversion.o \
UniqueString.o \
ViewStyle.o \
XPM.o
GTK_OBJS = \
ScintillaBase.o \
PlatGTK.o \
ScintillaGTK.o \
ScintillaGTKAccessible.o
$(COMPLIB): $(SRC_OBJS) $(GTK_OBJS) $(MARSHALLER)
$(AR) $(ARFLAGS) $@ $^
$(RANLIB) $@
$(COMPONENT): $(SRC_OBJS) $(GTK_OBJS) $(MARSHALLER)
$(CXX) $(CXX_ALL_FLAGS) $(CXXFLAGS) $(LDFLAGS) $^ -o $@ $(CONFIGLIB)
# Automatically generate header dependencies with "make depend"
include deps.mak

View File

@ -0,0 +1,122 @@
#include <glib-object.h>
#ifdef G_ENABLE_DEBUG
#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
#define g_marshal_value_peek_char(v) g_value_get_schar (v)
#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
#define g_marshal_value_peek_int(v) g_value_get_int (v)
#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
#define g_marshal_value_peek_long(v) g_value_get_long (v)
#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
#define g_marshal_value_peek_float(v) g_value_get_float (v)
#define g_marshal_value_peek_double(v) g_value_get_double (v)
#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
#define g_marshal_value_peek_param(v) g_value_get_param (v)
#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
#define g_marshal_value_peek_object(v) g_value_get_object (v)
#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
#else /* !G_ENABLE_DEBUG */
/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
* Do not access GValues directly in your code. Instead, use the
* g_value_get_*() functions
*/
#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
#define g_marshal_value_peek_char(v) (v)->data[0].v_int
#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
#define g_marshal_value_peek_int(v) (v)->data[0].v_int
#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
#define g_marshal_value_peek_long(v) (v)->data[0].v_long
#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
#define g_marshal_value_peek_float(v) (v)->data[0].v_float
#define g_marshal_value_peek_double(v) (v)->data[0].v_double
#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
#endif /* !G_ENABLE_DEBUG */
/* VOID:INT,OBJECT (scintilla-marshal.list:1) */
void
scintilla_marshal_VOID__INT_OBJECT (GClosure *closure,
GValue *return_value G_GNUC_UNUSED,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint G_GNUC_UNUSED,
gpointer marshal_data)
{
typedef void (*GMarshalFunc_VOID__INT_OBJECT) (gpointer data1,
gint arg1,
gpointer arg2,
gpointer data2);
GCClosure *cc = (GCClosure *) closure;
gpointer data1, data2;
GMarshalFunc_VOID__INT_OBJECT callback;
g_return_if_fail (n_param_values == 3);
if (G_CCLOSURE_SWAP_DATA (closure))
{
data1 = closure->data;
data2 = g_value_peek_pointer (param_values + 0);
}
else
{
data1 = g_value_peek_pointer (param_values + 0);
data2 = closure->data;
}
callback = (GMarshalFunc_VOID__INT_OBJECT) (marshal_data ? marshal_data : cc->callback);
callback (data1,
g_marshal_value_peek_int (param_values + 1),
g_marshal_value_peek_object (param_values + 2),
data2);
}
/* VOID:INT,BOXED (scintilla-marshal.list:2) */
void
scintilla_marshal_VOID__INT_BOXED (GClosure *closure,
GValue *return_value G_GNUC_UNUSED,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint G_GNUC_UNUSED,
gpointer marshal_data)
{
typedef void (*GMarshalFunc_VOID__INT_BOXED) (gpointer data1,
gint arg1,
gpointer arg2,
gpointer data2);
GCClosure *cc = (GCClosure *) closure;
gpointer data1, data2;
GMarshalFunc_VOID__INT_BOXED callback;
g_return_if_fail (n_param_values == 3);
if (G_CCLOSURE_SWAP_DATA (closure))
{
data1 = closure->data;
data2 = g_value_peek_pointer (param_values + 0);
}
else
{
data1 = g_value_peek_pointer (param_values + 0);
data2 = closure->data;
}
callback = (GMarshalFunc_VOID__INT_BOXED) (marshal_data ? marshal_data : cc->callback);
callback (data1,
g_marshal_value_peek_int (param_values + 1),
g_marshal_value_peek_boxed (param_values + 2),
data2);
}

View File

@ -0,0 +1,30 @@
/* This file is generated, all changes will be lost */
#ifndef __SCINTILLA_MARSHAL_MARSHAL_H__
#define __SCINTILLA_MARSHAL_MARSHAL_H__
#include <glib-object.h>
G_BEGIN_DECLS
/* VOID:INT,OBJECT (scintilla-marshal.list:1) */
extern
void scintilla_marshal_VOID__INT_OBJECT (GClosure *closure,
GValue *return_value,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint,
gpointer marshal_data);
/* VOID:INT,BOXED (scintilla-marshal.list:2) */
extern
void scintilla_marshal_VOID__INT_BOXED (GClosure *closure,
GValue *return_value,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint,
gpointer marshal_data);
G_END_DECLS
#endif /* __SCINTILLA_MARSHAL_MARSHAL_H__ */

View File

@ -0,0 +1,2 @@
VOID:INT,OBJECT
VOID:INT,BOXED

View File

@ -0,0 +1,85 @@
// Scintilla source code edit control
/** @file ILexer.h
** Interface between Scintilla and lexers.
**/
// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
#ifndef ILEXER_H
#define ILEXER_H
#include "Sci_Position.h"
namespace Scintilla {
enum { dvRelease4=2 };
class IDocument {
public:
virtual int SCI_METHOD Version() const = 0;
virtual void SCI_METHOD SetErrorStatus(int status) = 0;
virtual Sci_Position SCI_METHOD Length() const = 0;
virtual void SCI_METHOD GetCharRange(char *buffer, Sci_Position position, Sci_Position lengthRetrieve) const = 0;
virtual char SCI_METHOD StyleAt(Sci_Position position) const = 0;
virtual Sci_Position SCI_METHOD LineFromPosition(Sci_Position position) const = 0;
virtual Sci_Position SCI_METHOD LineStart(Sci_Position line) const = 0;
virtual int SCI_METHOD GetLevel(Sci_Position line) const = 0;
virtual int SCI_METHOD SetLevel(Sci_Position line, int level) = 0;
virtual int SCI_METHOD GetLineState(Sci_Position line) const = 0;
virtual int SCI_METHOD SetLineState(Sci_Position line, int state) = 0;
virtual void SCI_METHOD StartStyling(Sci_Position position) = 0;
virtual bool SCI_METHOD SetStyleFor(Sci_Position length, char style) = 0;
virtual bool SCI_METHOD SetStyles(Sci_Position length, const char *styles) = 0;
virtual void SCI_METHOD DecorationSetCurrentIndicator(int indicator) = 0;
virtual void SCI_METHOD DecorationFillRange(Sci_Position position, int value, Sci_Position fillLength) = 0;
virtual void SCI_METHOD ChangeLexerState(Sci_Position start, Sci_Position end) = 0;
virtual int SCI_METHOD CodePage() const = 0;
virtual bool SCI_METHOD IsDBCSLeadByte(char ch) const = 0;
virtual const char * SCI_METHOD BufferPointer() = 0;
virtual int SCI_METHOD GetLineIndentation(Sci_Position line) = 0;
virtual Sci_Position SCI_METHOD LineEnd(Sci_Position line) const = 0;
virtual Sci_Position SCI_METHOD GetRelativePosition(Sci_Position positionStart, Sci_Position characterOffset) const = 0;
virtual int SCI_METHOD GetCharacterAndWidth(Sci_Position position, Sci_Position *pWidth) const = 0;
};
enum { lvRelease4=2, lvRelease5=3 };
class ILexer4 {
public:
virtual int SCI_METHOD Version() const = 0;
virtual void SCI_METHOD Release() = 0;
virtual const char * SCI_METHOD PropertyNames() = 0;
virtual int SCI_METHOD PropertyType(const char *name) = 0;
virtual const char * SCI_METHOD DescribeProperty(const char *name) = 0;
virtual Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) = 0;
virtual const char * SCI_METHOD DescribeWordListSets() = 0;
virtual Sci_Position SCI_METHOD WordListSet(int n, const char *wl) = 0;
virtual void SCI_METHOD Lex(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) = 0;
virtual void SCI_METHOD Fold(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) = 0;
virtual void * SCI_METHOD PrivateCall(int operation, void *pointer) = 0;
virtual int SCI_METHOD LineEndTypesSupported() = 0;
virtual int SCI_METHOD AllocateSubStyles(int styleBase, int numberStyles) = 0;
virtual int SCI_METHOD SubStylesStart(int styleBase) = 0;
virtual int SCI_METHOD SubStylesLength(int styleBase) = 0;
virtual int SCI_METHOD StyleFromSubStyle(int subStyle) = 0;
virtual int SCI_METHOD PrimaryStyleFromStyle(int style) = 0;
virtual void SCI_METHOD FreeSubStyles() = 0;
virtual void SCI_METHOD SetIdentifiers(int style, const char *identifiers) = 0;
virtual int SCI_METHOD DistanceToSecondaryStyles() = 0;
virtual const char * SCI_METHOD GetSubStyleBases() = 0;
virtual int SCI_METHOD NamedStyles() = 0;
virtual const char * SCI_METHOD NameOfStyle(int style) = 0;
virtual const char * SCI_METHOD TagsOfStyle(int style) = 0;
virtual const char * SCI_METHOD DescriptionOfStyle(int style) = 0;
};
class ILexer5 : public ILexer4 {
public:
virtual const char * SCI_METHOD GetName() = 0;
virtual int SCI_METHOD GetIdentifier() = 0;
virtual const char * SCI_METHOD PropertyGet(const char *key) = 0;
};
}
#endif

View File

@ -0,0 +1,38 @@
// Scintilla source code edit control
/** @file ILoader.h
** Interface for loading into a Scintilla document from a background thread.
** Interface for manipulating a document without a view.
**/
// Copyright 1998-2017 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
#ifndef ILOADER_H
#define ILOADER_H
#include "Sci_Position.h"
namespace Scintilla {
class ILoader {
public:
virtual int SCI_METHOD Release() = 0;
// Returns a status code from SC_STATUS_*
virtual int SCI_METHOD AddData(const char *data, Sci_Position length) = 0;
virtual void * SCI_METHOD ConvertToDocument() = 0;
};
static constexpr int deRelease0 = 0;
class IDocumentEditable {
public:
// Allow this interface to add methods over time and discover whether new methods available.
virtual int SCI_METHOD DEVersion() const noexcept = 0;
// Lifetime control
virtual int SCI_METHOD AddRef() noexcept = 0;
virtual int SCI_METHOD Release() = 0;
};
}
#endif

View File

@ -0,0 +1,29 @@
// Scintilla source code edit control
/** @file Sci_Position.h
** Define the Sci_Position type used in Scintilla's external interfaces.
** These need to be available to clients written in C so are not in a C++ namespace.
**/
// Copyright 2015 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
#ifndef SCI_POSITION_H
#define SCI_POSITION_H
#include <stddef.h>
// Basic signed type used throughout interface
typedef ptrdiff_t Sci_Position;
// Unsigned variant used for ILexer::Lex and ILexer::Fold
typedef size_t Sci_PositionU;
// For Sci_CharacterRange which is defined as long to be compatible with Win32 CHARRANGE
typedef long Sci_PositionCR;
#ifdef _WIN32
#define SCI_METHOD __stdcall
#else
#define SCI_METHOD
#endif
#endif

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,926 @@
// SciTE - Scintilla based Text Editor
/** @file ScintillaCall.h
** Interface to calling a Scintilla instance.
**/
// Copyright 1998-2019 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
/* Most of this file is automatically generated from the Scintilla.iface interface definition
* file which contains any comments about the definitions. APIFacer.py does the generation. */
#ifndef SCINTILLACALL_H
#define SCINTILLACALL_H
namespace Scintilla {
enum class Message; // Declare in case ScintillaMessages.h not included
// Declare in case ScintillaStructures.h not included
struct TextRangeFull;
struct TextToFindFull;
struct RangeToFormatFull;
class IDocumentEditable;
using FunctionDirect = intptr_t(*)(intptr_t ptr, unsigned int iMessage, uintptr_t wParam, intptr_t lParam, int *pStatus);
struct Failure {
Scintilla::Status status;
explicit Failure(Scintilla::Status status_) noexcept : status(status_) {
}
};
struct Span {
// An ordered range
// end may be less than start when, for example, searching backwards
Position start;
Position end;
explicit Span(Position position) noexcept : start(position), end(position) {
}
Span(Position start_, Position end_) noexcept : start(start_), end(end_) {
}
Position Length() const noexcept {
if (end > start)
return end - start;
else
return start - end;
}
bool operator==(const Span &other) const noexcept {
return (other.start == start) && (other.end == end);
}
};
class ScintillaCall {
FunctionDirect fn;
intptr_t ptr;
intptr_t CallPointer(Message msg, uintptr_t wParam, void *s);
intptr_t CallString(Message msg, uintptr_t wParam, const char *s);
std::string CallReturnString(Message msg, uintptr_t wParam);
public:
Scintilla::Status statusLastCall;
ScintillaCall() noexcept;
// All standard methods are fine
void SetFnPtr(FunctionDirect fn_, intptr_t ptr_) noexcept;
bool IsValid() const noexcept;
intptr_t Call(Message msg, uintptr_t wParam=0, intptr_t lParam=0);
// Common APIs made more structured and type-safe
Position LineStart(Line line);
Position LineEnd(Line line);
Span SelectionSpan();
Span TargetSpan();
void SetTarget(Span span);
void ColouriseAll();
char CharacterAt(Position position);
int UnsignedStyleAt(Position position);
std::string StringOfSpan(Span span);
std::string StringOfRange(Span span);
Position ReplaceTarget(std::string_view text);
Position ReplaceTargetRE(std::string_view text);
Position ReplaceTargetMinimal(std::string_view text);
Position SearchInTarget(std::string_view text);
Span SpanSearchInTarget(std::string_view text);
// Generated APIs
//++Autogenerated -- start of section automatically generated from Scintilla.iface
//**\(\*\n\)
void AddText(Position length, const char *text);
void AddStyledText(Position length, const char *c);
void InsertText(Position pos, const char *text);
void ChangeInsertion(Position length, const char *text);
void ClearAll();
void DeleteRange(Position start, Position lengthDelete);
void ClearDocumentStyle();
Position Length();
int CharAt(Position pos);
Position CurrentPos();
Position Anchor();
int StyleAt(Position pos);
int StyleIndexAt(Position pos);
void Redo();
void SetUndoCollection(bool collectUndo);
void SelectAll();
void SetSavePoint();
Position GetStyledText(void *tr);
Position GetStyledTextFull(TextRangeFull *tr);
bool CanRedo();
Line MarkerLineFromHandle(int markerHandle);
void MarkerDeleteHandle(int markerHandle);
int MarkerHandleFromLine(Line line, int which);
int MarkerNumberFromLine(Line line, int which);
bool UndoCollection();
Scintilla::WhiteSpace ViewWS();
void SetViewWS(Scintilla::WhiteSpace viewWS);
Scintilla::TabDrawMode TabDrawMode();
void SetTabDrawMode(Scintilla::TabDrawMode tabDrawMode);
Position PositionFromPoint(int x, int y);
Position PositionFromPointClose(int x, int y);
void GotoLine(Line line);
void GotoPos(Position caret);
void SetAnchor(Position anchor);
Position GetCurLine(Position length, char *text);
std::string GetCurLine(Position length);
Position EndStyled();
void ConvertEOLs(Scintilla::EndOfLine eolMode);
Scintilla::EndOfLine EOLMode();
void SetEOLMode(Scintilla::EndOfLine eolMode);
void StartStyling(Position start, int unused);
void SetStyling(Position length, int style);
bool BufferedDraw();
void SetBufferedDraw(bool buffered);
void SetTabWidth(int tabWidth);
int TabWidth();
void SetTabMinimumWidth(int pixels);
int TabMinimumWidth();
void ClearTabStops(Line line);
void AddTabStop(Line line, int x);
int GetNextTabStop(Line line, int x);
void SetCodePage(int codePage);
void SetFontLocale(const char *localeName);
int FontLocale(char *localeName);
std::string FontLocale();
Scintilla::IMEInteraction IMEInteraction();
void SetIMEInteraction(Scintilla::IMEInteraction imeInteraction);
void MarkerDefine(int markerNumber, Scintilla::MarkerSymbol markerSymbol);
void MarkerSetFore(int markerNumber, Colour fore);
void MarkerSetBack(int markerNumber, Colour back);
void MarkerSetBackSelected(int markerNumber, Colour back);
void MarkerSetForeTranslucent(int markerNumber, ColourAlpha fore);
void MarkerSetBackTranslucent(int markerNumber, ColourAlpha back);
void MarkerSetBackSelectedTranslucent(int markerNumber, ColourAlpha back);
void MarkerSetStrokeWidth(int markerNumber, int hundredths);
void MarkerEnableHighlight(bool enabled);
int MarkerAdd(Line line, int markerNumber);
void MarkerDelete(Line line, int markerNumber);
void MarkerDeleteAll(int markerNumber);
int MarkerGet(Line line);
Line MarkerNext(Line lineStart, int markerMask);
Line MarkerPrevious(Line lineStart, int markerMask);
void MarkerDefinePixmap(int markerNumber, const char *pixmap);
void MarkerAddSet(Line line, int markerSet);
void MarkerSetAlpha(int markerNumber, Scintilla::Alpha alpha);
Scintilla::Layer MarkerGetLayer(int markerNumber);
void MarkerSetLayer(int markerNumber, Scintilla::Layer layer);
void SetMarginTypeN(int margin, Scintilla::MarginType marginType);
Scintilla::MarginType MarginTypeN(int margin);
void SetMarginWidthN(int margin, int pixelWidth);
int MarginWidthN(int margin);
void SetMarginMaskN(int margin, int mask);
int MarginMaskN(int margin);
void SetMarginSensitiveN(int margin, bool sensitive);
bool MarginSensitiveN(int margin);
void SetMarginCursorN(int margin, Scintilla::CursorShape cursor);
Scintilla::CursorShape MarginCursorN(int margin);
void SetMarginBackN(int margin, Colour back);
Colour MarginBackN(int margin);
void SetMargins(int margins);
int Margins();
void StyleClearAll();
void StyleSetFore(int style, Colour fore);
void StyleSetBack(int style, Colour back);
void StyleSetBold(int style, bool bold);
void StyleSetItalic(int style, bool italic);
void StyleSetSize(int style, int sizePoints);
void StyleSetFont(int style, const char *fontName);
void StyleSetEOLFilled(int style, bool eolFilled);
void StyleResetDefault();
void StyleSetUnderline(int style, bool underline);
Colour StyleGetFore(int style);
Colour StyleGetBack(int style);
bool StyleGetBold(int style);
bool StyleGetItalic(int style);
int StyleGetSize(int style);
int StyleGetFont(int style, char *fontName);
std::string StyleGetFont(int style);
bool StyleGetEOLFilled(int style);
bool StyleGetUnderline(int style);
Scintilla::CaseVisible StyleGetCase(int style);
Scintilla::CharacterSet StyleGetCharacterSet(int style);
bool StyleGetVisible(int style);
bool StyleGetChangeable(int style);
bool StyleGetHotSpot(int style);
void StyleSetCase(int style, Scintilla::CaseVisible caseVisible);
void StyleSetSizeFractional(int style, int sizeHundredthPoints);
int StyleGetSizeFractional(int style);
void StyleSetWeight(int style, Scintilla::FontWeight weight);
Scintilla::FontWeight StyleGetWeight(int style);
void StyleSetCharacterSet(int style, Scintilla::CharacterSet characterSet);
void StyleSetHotSpot(int style, bool hotspot);
void StyleSetCheckMonospaced(int style, bool checkMonospaced);
bool StyleGetCheckMonospaced(int style);
void StyleSetInvisibleRepresentation(int style, const char *representation);
int StyleGetInvisibleRepresentation(int style, char *representation);
std::string StyleGetInvisibleRepresentation(int style);
void SetElementColour(Scintilla::Element element, ColourAlpha colourElement);
ColourAlpha ElementColour(Scintilla::Element element);
void ResetElementColour(Scintilla::Element element);
bool ElementIsSet(Scintilla::Element element);
bool ElementAllowsTranslucent(Scintilla::Element element);
ColourAlpha ElementBaseColour(Scintilla::Element element);
void SetSelFore(bool useSetting, Colour fore);
void SetSelBack(bool useSetting, Colour back);
Scintilla::Alpha SelAlpha();
void SetSelAlpha(Scintilla::Alpha alpha);
bool SelEOLFilled();
void SetSelEOLFilled(bool filled);
Scintilla::Layer SelectionLayer();
void SetSelectionLayer(Scintilla::Layer layer);
Scintilla::Layer CaretLineLayer();
void SetCaretLineLayer(Scintilla::Layer layer);
bool CaretLineHighlightSubLine();
void SetCaretLineHighlightSubLine(bool subLine);
void SetCaretFore(Colour fore);
void AssignCmdKey(int keyDefinition, int sciCommand);
void ClearCmdKey(int keyDefinition);
void ClearAllCmdKeys();
void SetStylingEx(Position length, const char *styles);
void StyleSetVisible(int style, bool visible);
int CaretPeriod();
void SetCaretPeriod(int periodMilliseconds);
void SetWordChars(const char *characters);
int WordChars(char *characters);
std::string WordChars();
void SetCharacterCategoryOptimization(int countCharacters);
int CharacterCategoryOptimization();
void BeginUndoAction();
void EndUndoAction();
int UndoActions();
void SetUndoSavePoint(int action);
int UndoSavePoint();
void SetUndoDetach(int action);
int UndoDetach();
void SetUndoTentative(int action);
int UndoTentative();
void SetUndoCurrent(int action);
int UndoCurrent();
void PushUndoActionType(int type, Position pos);
void ChangeLastUndoActionText(Position length, const char *text);
int UndoActionType(int action);
Position UndoActionPosition(int action);
int UndoActionText(int action, char *text);
std::string UndoActionText(int action);
void IndicSetStyle(int indicator, Scintilla::IndicatorStyle indicatorStyle);
Scintilla::IndicatorStyle IndicGetStyle(int indicator);
void IndicSetFore(int indicator, Colour fore);
Colour IndicGetFore(int indicator);
void IndicSetUnder(int indicator, bool under);
bool IndicGetUnder(int indicator);
void IndicSetHoverStyle(int indicator, Scintilla::IndicatorStyle indicatorStyle);
Scintilla::IndicatorStyle IndicGetHoverStyle(int indicator);
void IndicSetHoverFore(int indicator, Colour fore);
Colour IndicGetHoverFore(int indicator);
void IndicSetFlags(int indicator, Scintilla::IndicFlag flags);
Scintilla::IndicFlag IndicGetFlags(int indicator);
void IndicSetStrokeWidth(int indicator, int hundredths);
int IndicGetStrokeWidth(int indicator);
void SetWhitespaceFore(bool useSetting, Colour fore);
void SetWhitespaceBack(bool useSetting, Colour back);
void SetWhitespaceSize(int size);
int WhitespaceSize();
void SetLineState(Line line, int state);
int LineState(Line line);
int MaxLineState();
bool CaretLineVisible();
void SetCaretLineVisible(bool show);
Colour CaretLineBack();
void SetCaretLineBack(Colour back);
int CaretLineFrame();
void SetCaretLineFrame(int width);
void StyleSetChangeable(int style, bool changeable);
void AutoCShow(Position lengthEntered, const char *itemList);
void AutoCCancel();
bool AutoCActive();
Position AutoCPosStart();
void AutoCComplete();
void AutoCStops(const char *characterSet);
void AutoCSetSeparator(int separatorCharacter);
int AutoCGetSeparator();
void AutoCSelect(const char *select);
void AutoCSetCancelAtStart(bool cancel);
bool AutoCGetCancelAtStart();
void AutoCSetFillUps(const char *characterSet);
void AutoCSetChooseSingle(bool chooseSingle);
bool AutoCGetChooseSingle();
void AutoCSetIgnoreCase(bool ignoreCase);
bool AutoCGetIgnoreCase();
void UserListShow(int listType, const char *itemList);
void AutoCSetAutoHide(bool autoHide);
bool AutoCGetAutoHide();
void AutoCSetOptions(Scintilla::AutoCompleteOption options);
Scintilla::AutoCompleteOption AutoCGetOptions();
void AutoCSetDropRestOfWord(bool dropRestOfWord);
bool AutoCGetDropRestOfWord();
void RegisterImage(int type, const char *xpmData);
void ClearRegisteredImages();
int AutoCGetTypeSeparator();
void AutoCSetTypeSeparator(int separatorCharacter);
void AutoCSetMaxWidth(int characterCount);
int AutoCGetMaxWidth();
void AutoCSetMaxHeight(int rowCount);
int AutoCGetMaxHeight();
void SetIndent(int indentSize);
int Indent();
void SetUseTabs(bool useTabs);
bool UseTabs();
void SetLineIndentation(Line line, int indentation);
int LineIndentation(Line line);
Position LineIndentPosition(Line line);
Position Column(Position pos);
Position CountCharacters(Position start, Position end);
Position CountCodeUnits(Position start, Position end);
void SetHScrollBar(bool visible);
bool HScrollBar();
void SetIndentationGuides(Scintilla::IndentView indentView);
Scintilla::IndentView IndentationGuides();
void SetHighlightGuide(Position column);
Position HighlightGuide();
Position LineEndPosition(Line line);
int CodePage();
Colour CaretFore();
bool ReadOnly();
void SetCurrentPos(Position caret);
void SetSelectionStart(Position anchor);
Position SelectionStart();
void SetSelectionEnd(Position caret);
Position SelectionEnd();
void SetEmptySelection(Position caret);
void SetPrintMagnification(int magnification);
int PrintMagnification();
void SetPrintColourMode(Scintilla::PrintOption mode);
Scintilla::PrintOption PrintColourMode();
Position FindText(Scintilla::FindOption searchFlags, void *ft);
Position FindTextFull(Scintilla::FindOption searchFlags, TextToFindFull *ft);
Position FormatRange(bool draw, void *fr);
Position FormatRangeFull(bool draw, RangeToFormatFull *fr);
void SetChangeHistory(Scintilla::ChangeHistoryOption changeHistory);
Scintilla::ChangeHistoryOption ChangeHistory();
Line FirstVisibleLine();
Position GetLine(Line line, char *text);
std::string GetLine(Line line);
Line LineCount();
void AllocateLines(Line lines);
void SetMarginLeft(int pixelWidth);
int MarginLeft();
void SetMarginRight(int pixelWidth);
int MarginRight();
bool Modify();
void SetSel(Position anchor, Position caret);
Position GetSelText(char *text);
std::string GetSelText();
Position GetTextRange(void *tr);
Position GetTextRangeFull(TextRangeFull *tr);
void HideSelection(bool hide);
bool SelectionHidden();
int PointXFromPosition(Position pos);
int PointYFromPosition(Position pos);
Line LineFromPosition(Position pos);
Position PositionFromLine(Line line);
void LineScroll(Position columns, Line lines);
void ScrollCaret();
void ScrollRange(Position secondary, Position primary);
void ReplaceSel(const char *text);
void SetReadOnly(bool readOnly);
void Null();
bool CanPaste();
bool CanUndo();
void EmptyUndoBuffer();
void Undo();
void Cut();
void Copy();
void Paste();
void Clear();
void SetText(const char *text);
Position GetText(Position length, char *text);
std::string GetText(Position length);
Position TextLength();
void *DirectFunction();
void *DirectStatusFunction();
void *DirectPointer();
void SetOvertype(bool overType);
bool Overtype();
void SetCaretWidth(int pixelWidth);
int CaretWidth();
void SetTargetStart(Position start);
Position TargetStart();
void SetTargetStartVirtualSpace(Position space);
Position TargetStartVirtualSpace();
void SetTargetEnd(Position end);
Position TargetEnd();
void SetTargetEndVirtualSpace(Position space);
Position TargetEndVirtualSpace();
void SetTargetRange(Position start, Position end);
Position TargetText(char *text);
std::string TargetText();
void TargetFromSelection();
void TargetWholeDocument();
Position ReplaceTarget(Position length, const char *text);
Position ReplaceTargetRE(Position length, const char *text);
Position ReplaceTargetMinimal(Position length, const char *text);
Position SearchInTarget(Position length, const char *text);
void SetSearchFlags(Scintilla::FindOption searchFlags);
Scintilla::FindOption SearchFlags();
void CallTipShow(Position pos, const char *definition);
void CallTipCancel();
bool CallTipActive();
Position CallTipPosStart();
void CallTipSetPosStart(Position posStart);
void CallTipSetHlt(Position highlightStart, Position highlightEnd);
void CallTipSetBack(Colour back);
void CallTipSetFore(Colour fore);
void CallTipSetForeHlt(Colour fore);
void CallTipUseStyle(int tabSize);
void CallTipSetPosition(bool above);
Line VisibleFromDocLine(Line docLine);
Line DocLineFromVisible(Line displayLine);
Line WrapCount(Line docLine);
void SetFoldLevel(Line line, Scintilla::FoldLevel level);
Scintilla::FoldLevel FoldLevel(Line line);
Line LastChild(Line line, Scintilla::FoldLevel level);
Line FoldParent(Line line);
void ShowLines(Line lineStart, Line lineEnd);
void HideLines(Line lineStart, Line lineEnd);
bool LineVisible(Line line);
bool AllLinesVisible();
void SetFoldExpanded(Line line, bool expanded);
bool FoldExpanded(Line line);
void ToggleFold(Line line);
void ToggleFoldShowText(Line line, const char *text);
void FoldDisplayTextSetStyle(Scintilla::FoldDisplayTextStyle style);
Scintilla::FoldDisplayTextStyle FoldDisplayTextGetStyle();
void SetDefaultFoldDisplayText(const char *text);
int GetDefaultFoldDisplayText(char *text);
std::string GetDefaultFoldDisplayText();
void FoldLine(Line line, Scintilla::FoldAction action);
void FoldChildren(Line line, Scintilla::FoldAction action);
void ExpandChildren(Line line, Scintilla::FoldLevel level);
void FoldAll(Scintilla::FoldAction action);
void EnsureVisible(Line line);
void SetAutomaticFold(Scintilla::AutomaticFold automaticFold);
Scintilla::AutomaticFold AutomaticFold();
void SetFoldFlags(Scintilla::FoldFlag flags);
void EnsureVisibleEnforcePolicy(Line line);
void SetTabIndents(bool tabIndents);
bool TabIndents();
void SetBackSpaceUnIndents(bool bsUnIndents);
bool BackSpaceUnIndents();
void SetMouseDwellTime(int periodMilliseconds);
int MouseDwellTime();
Position WordStartPosition(Position pos, bool onlyWordCharacters);
Position WordEndPosition(Position pos, bool onlyWordCharacters);
bool IsRangeWord(Position start, Position end);
void SetIdleStyling(Scintilla::IdleStyling idleStyling);
Scintilla::IdleStyling IdleStyling();
void SetWrapMode(Scintilla::Wrap wrapMode);
Scintilla::Wrap WrapMode();
void SetWrapVisualFlags(Scintilla::WrapVisualFlag wrapVisualFlags);
Scintilla::WrapVisualFlag WrapVisualFlags();
void SetWrapVisualFlagsLocation(Scintilla::WrapVisualLocation wrapVisualFlagsLocation);
Scintilla::WrapVisualLocation WrapVisualFlagsLocation();
void SetWrapStartIndent(int indent);
int WrapStartIndent();
void SetWrapIndentMode(Scintilla::WrapIndentMode wrapIndentMode);
Scintilla::WrapIndentMode WrapIndentMode();
void SetLayoutCache(Scintilla::LineCache cacheMode);
Scintilla::LineCache LayoutCache();
void SetScrollWidth(int pixelWidth);
int ScrollWidth();
void SetScrollWidthTracking(bool tracking);
bool ScrollWidthTracking();
int TextWidth(int style, const char *text);
void SetEndAtLastLine(bool endAtLastLine);
bool EndAtLastLine();
int TextHeight(Line line);
void SetVScrollBar(bool visible);
bool VScrollBar();
void AppendText(Position length, const char *text);
Scintilla::PhasesDraw PhasesDraw();
void SetPhasesDraw(Scintilla::PhasesDraw phases);
void SetFontQuality(Scintilla::FontQuality fontQuality);
Scintilla::FontQuality FontQuality();
void SetFirstVisibleLine(Line displayLine);
void SetMultiPaste(Scintilla::MultiPaste multiPaste);
Scintilla::MultiPaste MultiPaste();
int Tag(int tagNumber, char *tagValue);
std::string Tag(int tagNumber);
void LinesJoin();
void LinesSplit(int pixelWidth);
void SetFoldMarginColour(bool useSetting, Colour back);
void SetFoldMarginHiColour(bool useSetting, Colour fore);
void SetAccessibility(Scintilla::Accessibility accessibility);
Scintilla::Accessibility Accessibility();
void LineDown();
void LineDownExtend();
void LineUp();
void LineUpExtend();
void CharLeft();
void CharLeftExtend();
void CharRight();
void CharRightExtend();
void WordLeft();
void WordLeftExtend();
void WordRight();
void WordRightExtend();
void Home();
void HomeExtend();
void LineEnd();
void LineEndExtend();
void DocumentStart();
void DocumentStartExtend();
void DocumentEnd();
void DocumentEndExtend();
void PageUp();
void PageUpExtend();
void PageDown();
void PageDownExtend();
void EditToggleOvertype();
void Cancel();
void DeleteBack();
void Tab();
void BackTab();
void NewLine();
void FormFeed();
void VCHome();
void VCHomeExtend();
void ZoomIn();
void ZoomOut();
void DelWordLeft();
void DelWordRight();
void DelWordRightEnd();
void LineCut();
void LineDelete();
void LineTranspose();
void LineReverse();
void LineDuplicate();
void LowerCase();
void UpperCase();
void LineScrollDown();
void LineScrollUp();
void DeleteBackNotLine();
void HomeDisplay();
void HomeDisplayExtend();
void LineEndDisplay();
void LineEndDisplayExtend();
void HomeWrap();
void HomeWrapExtend();
void LineEndWrap();
void LineEndWrapExtend();
void VCHomeWrap();
void VCHomeWrapExtend();
void LineCopy();
void MoveCaretInsideView();
Position LineLength(Line line);
void BraceHighlight(Position posA, Position posB);
void BraceHighlightIndicator(bool useSetting, int indicator);
void BraceBadLight(Position pos);
void BraceBadLightIndicator(bool useSetting, int indicator);
Position BraceMatch(Position pos, int maxReStyle);
Position BraceMatchNext(Position pos, Position startPos);
bool ViewEOL();
void SetViewEOL(bool visible);
IDocumentEditable *DocPointer();
void SetDocPointer(IDocumentEditable *doc);
void SetModEventMask(Scintilla::ModificationFlags eventMask);
Position EdgeColumn();
void SetEdgeColumn(Position column);
Scintilla::EdgeVisualStyle EdgeMode();
void SetEdgeMode(Scintilla::EdgeVisualStyle edgeMode);
Colour EdgeColour();
void SetEdgeColour(Colour edgeColour);
void MultiEdgeAddLine(Position column, Colour edgeColour);
void MultiEdgeClearAll();
Position MultiEdgeColumn(int which);
void SearchAnchor();
Position SearchNext(Scintilla::FindOption searchFlags, const char *text);
Position SearchPrev(Scintilla::FindOption searchFlags, const char *text);
Line LinesOnScreen();
void UsePopUp(Scintilla::PopUp popUpMode);
bool SelectionIsRectangle();
void SetZoom(int zoomInPoints);
int Zoom();
IDocumentEditable *CreateDocument(Position bytes, Scintilla::DocumentOption documentOptions);
void AddRefDocument(IDocumentEditable *doc);
void ReleaseDocument(IDocumentEditable *doc);
Scintilla::DocumentOption DocumentOptions();
Scintilla::ModificationFlags ModEventMask();
void SetCommandEvents(bool commandEvents);
bool CommandEvents();
void SetFocus(bool focus);
bool Focus();
void SetStatus(Scintilla::Status status);
Scintilla::Status Status();
void SetMouseDownCaptures(bool captures);
bool MouseDownCaptures();
void SetMouseWheelCaptures(bool captures);
bool MouseWheelCaptures();
void SetCursor(Scintilla::CursorShape cursorType);
Scintilla::CursorShape Cursor();
void SetControlCharSymbol(int symbol);
int ControlCharSymbol();
void WordPartLeft();
void WordPartLeftExtend();
void WordPartRight();
void WordPartRightExtend();
void SetVisiblePolicy(Scintilla::VisiblePolicy visiblePolicy, int visibleSlop);
void DelLineLeft();
void DelLineRight();
void SetXOffset(int xOffset);
int XOffset();
void ChooseCaretX();
void GrabFocus();
void SetXCaretPolicy(Scintilla::CaretPolicy caretPolicy, int caretSlop);
void SetYCaretPolicy(Scintilla::CaretPolicy caretPolicy, int caretSlop);
void SetPrintWrapMode(Scintilla::Wrap wrapMode);
Scintilla::Wrap PrintWrapMode();
void SetHotspotActiveFore(bool useSetting, Colour fore);
Colour HotspotActiveFore();
void SetHotspotActiveBack(bool useSetting, Colour back);
Colour HotspotActiveBack();
void SetHotspotActiveUnderline(bool underline);
bool HotspotActiveUnderline();
void SetHotspotSingleLine(bool singleLine);
bool HotspotSingleLine();
void ParaDown();
void ParaDownExtend();
void ParaUp();
void ParaUpExtend();
Position PositionBefore(Position pos);
Position PositionAfter(Position pos);
Position PositionRelative(Position pos, Position relative);
Position PositionRelativeCodeUnits(Position pos, Position relative);
void CopyRange(Position start, Position end);
void CopyText(Position length, const char *text);
void SetSelectionMode(Scintilla::SelectionMode selectionMode);
void ChangeSelectionMode(Scintilla::SelectionMode selectionMode);
Scintilla::SelectionMode SelectionMode();
void SetMoveExtendsSelection(bool moveExtendsSelection);
bool MoveExtendsSelection();
Position GetLineSelStartPosition(Line line);
Position GetLineSelEndPosition(Line line);
void LineDownRectExtend();
void LineUpRectExtend();
void CharLeftRectExtend();
void CharRightRectExtend();
void HomeRectExtend();
void VCHomeRectExtend();
void LineEndRectExtend();
void PageUpRectExtend();
void PageDownRectExtend();
void StutteredPageUp();
void StutteredPageUpExtend();
void StutteredPageDown();
void StutteredPageDownExtend();
void WordLeftEnd();
void WordLeftEndExtend();
void WordRightEnd();
void WordRightEndExtend();
void SetWhitespaceChars(const char *characters);
int WhitespaceChars(char *characters);
std::string WhitespaceChars();
void SetPunctuationChars(const char *characters);
int PunctuationChars(char *characters);
std::string PunctuationChars();
void SetCharsDefault();
int AutoCGetCurrent();
int AutoCGetCurrentText(char *text);
std::string AutoCGetCurrentText();
void AutoCSetCaseInsensitiveBehaviour(Scintilla::CaseInsensitiveBehaviour behaviour);
Scintilla::CaseInsensitiveBehaviour AutoCGetCaseInsensitiveBehaviour();
void AutoCSetMulti(Scintilla::MultiAutoComplete multi);
Scintilla::MultiAutoComplete AutoCGetMulti();
void AutoCSetOrder(Scintilla::Ordering order);
Scintilla::Ordering AutoCGetOrder();
void Allocate(Position bytes);
Position TargetAsUTF8(char *s);
std::string TargetAsUTF8();
void SetLengthForEncode(Position bytes);
Position EncodedFromUTF8(const char *utf8, char *encoded);
std::string EncodedFromUTF8(const char *utf8);
Position FindColumn(Line line, Position column);
Scintilla::CaretSticky CaretSticky();
void SetCaretSticky(Scintilla::CaretSticky useCaretStickyBehaviour);
void ToggleCaretSticky();
void SetPasteConvertEndings(bool convert);
bool PasteConvertEndings();
void ReplaceRectangular(Position length, const char *text);
void SelectionDuplicate();
void SetCaretLineBackAlpha(Scintilla::Alpha alpha);
Scintilla::Alpha CaretLineBackAlpha();
void SetCaretStyle(Scintilla::CaretStyle caretStyle);
Scintilla::CaretStyle CaretStyle();
void SetIndicatorCurrent(int indicator);
int IndicatorCurrent();
void SetIndicatorValue(int value);
int IndicatorValue();
void IndicatorFillRange(Position start, Position lengthFill);
void IndicatorClearRange(Position start, Position lengthClear);
int IndicatorAllOnFor(Position pos);
int IndicatorValueAt(int indicator, Position pos);
Position IndicatorStart(int indicator, Position pos);
Position IndicatorEnd(int indicator, Position pos);
void SetPositionCache(int size);
int PositionCache();
void SetLayoutThreads(int threads);
int LayoutThreads();
void CopyAllowLine();
void *CharacterPointer();
void *RangePointer(Position start, Position lengthRange);
Position GapPosition();
void IndicSetAlpha(int indicator, Scintilla::Alpha alpha);
Scintilla::Alpha IndicGetAlpha(int indicator);
void IndicSetOutlineAlpha(int indicator, Scintilla::Alpha alpha);
Scintilla::Alpha IndicGetOutlineAlpha(int indicator);
void SetExtraAscent(int extraAscent);
int ExtraAscent();
void SetExtraDescent(int extraDescent);
int ExtraDescent();
int MarkerSymbolDefined(int markerNumber);
void MarginSetText(Line line, const char *text);
int MarginGetText(Line line, char *text);
std::string MarginGetText(Line line);
void MarginSetStyle(Line line, int style);
int MarginGetStyle(Line line);
void MarginSetStyles(Line line, const char *styles);
int MarginGetStyles(Line line, char *styles);
std::string MarginGetStyles(Line line);
void MarginTextClearAll();
void MarginSetStyleOffset(int style);
int MarginGetStyleOffset();
void SetMarginOptions(Scintilla::MarginOption marginOptions);
Scintilla::MarginOption MarginOptions();
void AnnotationSetText(Line line, const char *text);
int AnnotationGetText(Line line, char *text);
std::string AnnotationGetText(Line line);
void AnnotationSetStyle(Line line, int style);
int AnnotationGetStyle(Line line);
void AnnotationSetStyles(Line line, const char *styles);
int AnnotationGetStyles(Line line, char *styles);
std::string AnnotationGetStyles(Line line);
int AnnotationGetLines(Line line);
void AnnotationClearAll();
void AnnotationSetVisible(Scintilla::AnnotationVisible visible);
Scintilla::AnnotationVisible AnnotationGetVisible();
void AnnotationSetStyleOffset(int style);
int AnnotationGetStyleOffset();
void ReleaseAllExtendedStyles();
int AllocateExtendedStyles(int numberStyles);
void AddUndoAction(int token, Scintilla::UndoFlags flags);
Position CharPositionFromPoint(int x, int y);
Position CharPositionFromPointClose(int x, int y);
void SetMouseSelectionRectangularSwitch(bool mouseSelectionRectangularSwitch);
bool MouseSelectionRectangularSwitch();
void SetMultipleSelection(bool multipleSelection);
bool MultipleSelection();
void SetAdditionalSelectionTyping(bool additionalSelectionTyping);
bool AdditionalSelectionTyping();
void SetAdditionalCaretsBlink(bool additionalCaretsBlink);
bool AdditionalCaretsBlink();
void SetAdditionalCaretsVisible(bool additionalCaretsVisible);
bool AdditionalCaretsVisible();
int Selections();
bool SelectionEmpty();
void ClearSelections();
void SetSelection(Position caret, Position anchor);
void AddSelection(Position caret, Position anchor);
int SelectionFromPoint(int x, int y);
void DropSelectionN(int selection);
void SetMainSelection(int selection);
int MainSelection();
void SetSelectionNCaret(int selection, Position caret);
Position SelectionNCaret(int selection);
void SetSelectionNAnchor(int selection, Position anchor);
Position SelectionNAnchor(int selection);
void SetSelectionNCaretVirtualSpace(int selection, Position space);
Position SelectionNCaretVirtualSpace(int selection);
void SetSelectionNAnchorVirtualSpace(int selection, Position space);
Position SelectionNAnchorVirtualSpace(int selection);
void SetSelectionNStart(int selection, Position anchor);
Position SelectionNStart(int selection);
Position SelectionNStartVirtualSpace(int selection);
void SetSelectionNEnd(int selection, Position caret);
Position SelectionNEndVirtualSpace(int selection);
Position SelectionNEnd(int selection);
void SetRectangularSelectionCaret(Position caret);
Position RectangularSelectionCaret();
void SetRectangularSelectionAnchor(Position anchor);
Position RectangularSelectionAnchor();
void SetRectangularSelectionCaretVirtualSpace(Position space);
Position RectangularSelectionCaretVirtualSpace();
void SetRectangularSelectionAnchorVirtualSpace(Position space);
Position RectangularSelectionAnchorVirtualSpace();
void SetVirtualSpaceOptions(Scintilla::VirtualSpace virtualSpaceOptions);
Scintilla::VirtualSpace VirtualSpaceOptions();
void SetRectangularSelectionModifier(int modifier);
int RectangularSelectionModifier();
void SetAdditionalSelFore(Colour fore);
void SetAdditionalSelBack(Colour back);
void SetAdditionalSelAlpha(Scintilla::Alpha alpha);
Scintilla::Alpha AdditionalSelAlpha();
void SetAdditionalCaretFore(Colour fore);
Colour AdditionalCaretFore();
void RotateSelection();
void SwapMainAnchorCaret();
void MultipleSelectAddNext();
void MultipleSelectAddEach();
int ChangeLexerState(Position start, Position end);
Line ContractedFoldNext(Line lineStart);
void VerticalCentreCaret();
void MoveSelectedLinesUp();
void MoveSelectedLinesDown();
void SetIdentifier(int identifier);
int Identifier();
void RGBAImageSetWidth(int width);
void RGBAImageSetHeight(int height);
void RGBAImageSetScale(int scalePercent);
void MarkerDefineRGBAImage(int markerNumber, const char *pixels);
void RegisterRGBAImage(int type, const char *pixels);
void ScrollToStart();
void ScrollToEnd();
void SetTechnology(Scintilla::Technology technology);
Scintilla::Technology Technology();
void *CreateLoader(Position bytes, Scintilla::DocumentOption documentOptions);
void FindIndicatorShow(Position start, Position end);
void FindIndicatorFlash(Position start, Position end);
void FindIndicatorHide();
void VCHomeDisplay();
void VCHomeDisplayExtend();
bool CaretLineVisibleAlways();
void SetCaretLineVisibleAlways(bool alwaysVisible);
void SetLineEndTypesAllowed(Scintilla::LineEndType lineEndBitSet);
Scintilla::LineEndType LineEndTypesAllowed();
Scintilla::LineEndType LineEndTypesActive();
void SetRepresentation(const char *encodedCharacter, const char *representation);
int Representation(const char *encodedCharacter, char *representation);
std::string Representation(const char *encodedCharacter);
void ClearRepresentation(const char *encodedCharacter);
void ClearAllRepresentations();
void SetRepresentationAppearance(const char *encodedCharacter, Scintilla::RepresentationAppearance appearance);
Scintilla::RepresentationAppearance RepresentationAppearance(const char *encodedCharacter);
void SetRepresentationColour(const char *encodedCharacter, ColourAlpha colour);
ColourAlpha RepresentationColour(const char *encodedCharacter);
void EOLAnnotationSetText(Line line, const char *text);
int EOLAnnotationGetText(Line line, char *text);
std::string EOLAnnotationGetText(Line line);
void EOLAnnotationSetStyle(Line line, int style);
int EOLAnnotationGetStyle(Line line);
void EOLAnnotationClearAll();
void EOLAnnotationSetVisible(Scintilla::EOLAnnotationVisible visible);
Scintilla::EOLAnnotationVisible EOLAnnotationGetVisible();
void EOLAnnotationSetStyleOffset(int style);
int EOLAnnotationGetStyleOffset();
bool SupportsFeature(Scintilla::Supports feature);
Scintilla::LineCharacterIndexType LineCharacterIndex();
void AllocateLineCharacterIndex(Scintilla::LineCharacterIndexType lineCharacterIndex);
void ReleaseLineCharacterIndex(Scintilla::LineCharacterIndexType lineCharacterIndex);
Line LineFromIndexPosition(Position pos, Scintilla::LineCharacterIndexType lineCharacterIndex);
Position IndexPositionFromLine(Line line, Scintilla::LineCharacterIndexType lineCharacterIndex);
void StartRecord();
void StopRecord();
int Lexer();
void Colourise(Position start, Position end);
void SetProperty(const char *key, const char *value);
void SetKeyWords(int keyWordSet, const char *keyWords);
int Property(const char *key, char *value);
std::string Property(const char *key);
int PropertyExpanded(const char *key, char *value);
std::string PropertyExpanded(const char *key);
int PropertyInt(const char *key, int defaultValue);
int LexerLanguage(char *language);
std::string LexerLanguage();
void *PrivateLexerCall(int operation, void *pointer);
int PropertyNames(char *names);
std::string PropertyNames();
Scintilla::TypeProperty PropertyType(const char *name);
int DescribeProperty(const char *name, char *description);
std::string DescribeProperty(const char *name);
int DescribeKeyWordSets(char *descriptions);
std::string DescribeKeyWordSets();
Scintilla::LineEndType LineEndTypesSupported();
int AllocateSubStyles(int styleBase, int numberStyles);
int SubStylesStart(int styleBase);
int SubStylesLength(int styleBase);
int StyleFromSubStyle(int subStyle);
int PrimaryStyleFromStyle(int style);
void FreeSubStyles();
void SetIdentifiers(int style, const char *identifiers);
int DistanceToSecondaryStyles();
int SubStyleBases(char *styles);
std::string SubStyleBases();
int NamedStyles();
int NameOfStyle(int style, char *name);
std::string NameOfStyle(int style);
int TagsOfStyle(int style, char *tags);
std::string TagsOfStyle(int style);
int DescriptionOfStyle(int style, char *description);
std::string DescriptionOfStyle(int style);
void SetILexer(void *ilexer);
Scintilla::Bidirectional Bidirectional();
void SetBidirectional(Scintilla::Bidirectional bidirectional);
//--Autogenerated -- end of section automatically generated from Scintilla.iface
};
}
#endif

View File

@ -0,0 +1,822 @@
// Scintilla source code edit control
/** @file ScintillaMessages.h
** Enumerate the messages that can be sent to Scintilla.
**/
// Copyright 1998-2019 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
/* Most of this file is automatically generated from the Scintilla.iface interface definition
* file which contains any comments about the definitions. ScintillaAPIFacer.py does the generation. */
#ifndef SCINTILLAMESSAGES_H
#define SCINTILLAMESSAGES_H
namespace Scintilla {
// Enumerations
//++Autogenerated -- start of section automatically generated from Scintilla.iface
enum class Message {
AddText = 2001,
AddStyledText = 2002,
InsertText = 2003,
ChangeInsertion = 2672,
ClearAll = 2004,
DeleteRange = 2645,
ClearDocumentStyle = 2005,
GetLength = 2006,
GetCharAt = 2007,
GetCurrentPos = 2008,
GetAnchor = 2009,
GetStyleAt = 2010,
GetStyleIndexAt = 2038,
Redo = 2011,
SetUndoCollection = 2012,
SelectAll = 2013,
SetSavePoint = 2014,
GetStyledText = 2015,
GetStyledTextFull = 2778,
CanRedo = 2016,
MarkerLineFromHandle = 2017,
MarkerDeleteHandle = 2018,
MarkerHandleFromLine = 2732,
MarkerNumberFromLine = 2733,
GetUndoCollection = 2019,
GetViewWS = 2020,
SetViewWS = 2021,
GetTabDrawMode = 2698,
SetTabDrawMode = 2699,
PositionFromPoint = 2022,
PositionFromPointClose = 2023,
GotoLine = 2024,
GotoPos = 2025,
SetAnchor = 2026,
GetCurLine = 2027,
GetEndStyled = 2028,
ConvertEOLs = 2029,
GetEOLMode = 2030,
SetEOLMode = 2031,
StartStyling = 2032,
SetStyling = 2033,
GetBufferedDraw = 2034,
SetBufferedDraw = 2035,
SetTabWidth = 2036,
GetTabWidth = 2121,
SetTabMinimumWidth = 2724,
GetTabMinimumWidth = 2725,
ClearTabStops = 2675,
AddTabStop = 2676,
GetNextTabStop = 2677,
SetCodePage = 2037,
SetFontLocale = 2760,
GetFontLocale = 2761,
GetIMEInteraction = 2678,
SetIMEInteraction = 2679,
MarkerDefine = 2040,
MarkerSetFore = 2041,
MarkerSetBack = 2042,
MarkerSetBackSelected = 2292,
MarkerSetForeTranslucent = 2294,
MarkerSetBackTranslucent = 2295,
MarkerSetBackSelectedTranslucent = 2296,
MarkerSetStrokeWidth = 2297,
MarkerEnableHighlight = 2293,
MarkerAdd = 2043,
MarkerDelete = 2044,
MarkerDeleteAll = 2045,
MarkerGet = 2046,
MarkerNext = 2047,
MarkerPrevious = 2048,
MarkerDefinePixmap = 2049,
MarkerAddSet = 2466,
MarkerSetAlpha = 2476,
MarkerGetLayer = 2734,
MarkerSetLayer = 2735,
SetMarginTypeN = 2240,
GetMarginTypeN = 2241,
SetMarginWidthN = 2242,
GetMarginWidthN = 2243,
SetMarginMaskN = 2244,
GetMarginMaskN = 2245,
SetMarginSensitiveN = 2246,
GetMarginSensitiveN = 2247,
SetMarginCursorN = 2248,
GetMarginCursorN = 2249,
SetMarginBackN = 2250,
GetMarginBackN = 2251,
SetMargins = 2252,
GetMargins = 2253,
StyleClearAll = 2050,
StyleSetFore = 2051,
StyleSetBack = 2052,
StyleSetBold = 2053,
StyleSetItalic = 2054,
StyleSetSize = 2055,
StyleSetFont = 2056,
StyleSetEOLFilled = 2057,
StyleResetDefault = 2058,
StyleSetUnderline = 2059,
StyleGetFore = 2481,
StyleGetBack = 2482,
StyleGetBold = 2483,
StyleGetItalic = 2484,
StyleGetSize = 2485,
StyleGetFont = 2486,
StyleGetEOLFilled = 2487,
StyleGetUnderline = 2488,
StyleGetCase = 2489,
StyleGetCharacterSet = 2490,
StyleGetVisible = 2491,
StyleGetChangeable = 2492,
StyleGetHotSpot = 2493,
StyleSetCase = 2060,
StyleSetSizeFractional = 2061,
StyleGetSizeFractional = 2062,
StyleSetWeight = 2063,
StyleGetWeight = 2064,
StyleSetCharacterSet = 2066,
StyleSetHotSpot = 2409,
StyleSetCheckMonospaced = 2254,
StyleGetCheckMonospaced = 2255,
StyleSetInvisibleRepresentation = 2256,
StyleGetInvisibleRepresentation = 2257,
SetElementColour = 2753,
GetElementColour = 2754,
ResetElementColour = 2755,
GetElementIsSet = 2756,
GetElementAllowsTranslucent = 2757,
GetElementBaseColour = 2758,
SetSelFore = 2067,
SetSelBack = 2068,
GetSelAlpha = 2477,
SetSelAlpha = 2478,
GetSelEOLFilled = 2479,
SetSelEOLFilled = 2480,
GetSelectionLayer = 2762,
SetSelectionLayer = 2763,
GetCaretLineLayer = 2764,
SetCaretLineLayer = 2765,
GetCaretLineHighlightSubLine = 2773,
SetCaretLineHighlightSubLine = 2774,
SetCaretFore = 2069,
AssignCmdKey = 2070,
ClearCmdKey = 2071,
ClearAllCmdKeys = 2072,
SetStylingEx = 2073,
StyleSetVisible = 2074,
GetCaretPeriod = 2075,
SetCaretPeriod = 2076,
SetWordChars = 2077,
GetWordChars = 2646,
SetCharacterCategoryOptimization = 2720,
GetCharacterCategoryOptimization = 2721,
BeginUndoAction = 2078,
EndUndoAction = 2079,
GetUndoActions = 2790,
SetUndoSavePoint = 2791,
GetUndoSavePoint = 2792,
SetUndoDetach = 2793,
GetUndoDetach = 2794,
SetUndoTentative = 2795,
GetUndoTentative = 2796,
SetUndoCurrent = 2797,
GetUndoCurrent = 2798,
PushUndoActionType = 2800,
ChangeLastUndoActionText = 2801,
GetUndoActionType = 2802,
GetUndoActionPosition = 2803,
GetUndoActionText = 2804,
IndicSetStyle = 2080,
IndicGetStyle = 2081,
IndicSetFore = 2082,
IndicGetFore = 2083,
IndicSetUnder = 2510,
IndicGetUnder = 2511,
IndicSetHoverStyle = 2680,
IndicGetHoverStyle = 2681,
IndicSetHoverFore = 2682,
IndicGetHoverFore = 2683,
IndicSetFlags = 2684,
IndicGetFlags = 2685,
IndicSetStrokeWidth = 2751,
IndicGetStrokeWidth = 2752,
SetWhitespaceFore = 2084,
SetWhitespaceBack = 2085,
SetWhitespaceSize = 2086,
GetWhitespaceSize = 2087,
SetLineState = 2092,
GetLineState = 2093,
GetMaxLineState = 2094,
GetCaretLineVisible = 2095,
SetCaretLineVisible = 2096,
GetCaretLineBack = 2097,
SetCaretLineBack = 2098,
GetCaretLineFrame = 2704,
SetCaretLineFrame = 2705,
StyleSetChangeable = 2099,
AutoCShow = 2100,
AutoCCancel = 2101,
AutoCActive = 2102,
AutoCPosStart = 2103,
AutoCComplete = 2104,
AutoCStops = 2105,
AutoCSetSeparator = 2106,
AutoCGetSeparator = 2107,
AutoCSelect = 2108,
AutoCSetCancelAtStart = 2110,
AutoCGetCancelAtStart = 2111,
AutoCSetFillUps = 2112,
AutoCSetChooseSingle = 2113,
AutoCGetChooseSingle = 2114,
AutoCSetIgnoreCase = 2115,
AutoCGetIgnoreCase = 2116,
UserListShow = 2117,
AutoCSetAutoHide = 2118,
AutoCGetAutoHide = 2119,
AutoCSetOptions = 2638,
AutoCGetOptions = 2639,
AutoCSetDropRestOfWord = 2270,
AutoCGetDropRestOfWord = 2271,
RegisterImage = 2405,
ClearRegisteredImages = 2408,
AutoCGetTypeSeparator = 2285,
AutoCSetTypeSeparator = 2286,
AutoCSetMaxWidth = 2208,
AutoCGetMaxWidth = 2209,
AutoCSetMaxHeight = 2210,
AutoCGetMaxHeight = 2211,
SetIndent = 2122,
GetIndent = 2123,
SetUseTabs = 2124,
GetUseTabs = 2125,
SetLineIndentation = 2126,
GetLineIndentation = 2127,
GetLineIndentPosition = 2128,
GetColumn = 2129,
CountCharacters = 2633,
CountCodeUnits = 2715,
SetHScrollBar = 2130,
GetHScrollBar = 2131,
SetIndentationGuides = 2132,
GetIndentationGuides = 2133,
SetHighlightGuide = 2134,
GetHighlightGuide = 2135,
GetLineEndPosition = 2136,
GetCodePage = 2137,
GetCaretFore = 2138,
GetReadOnly = 2140,
SetCurrentPos = 2141,
SetSelectionStart = 2142,
GetSelectionStart = 2143,
SetSelectionEnd = 2144,
GetSelectionEnd = 2145,
SetEmptySelection = 2556,
SetPrintMagnification = 2146,
GetPrintMagnification = 2147,
SetPrintColourMode = 2148,
GetPrintColourMode = 2149,
FindText = 2150,
FindTextFull = 2196,
FormatRange = 2151,
FormatRangeFull = 2777,
SetChangeHistory = 2780,
GetChangeHistory = 2781,
GetFirstVisibleLine = 2152,
GetLine = 2153,
GetLineCount = 2154,
AllocateLines = 2089,
SetMarginLeft = 2155,
GetMarginLeft = 2156,
SetMarginRight = 2157,
GetMarginRight = 2158,
GetModify = 2159,
SetSel = 2160,
GetSelText = 2161,
GetTextRange = 2162,
GetTextRangeFull = 2039,
HideSelection = 2163,
GetSelectionHidden = 2088,
PointXFromPosition = 2164,
PointYFromPosition = 2165,
LineFromPosition = 2166,
PositionFromLine = 2167,
LineScroll = 2168,
ScrollCaret = 2169,
ScrollRange = 2569,
ReplaceSel = 2170,
SetReadOnly = 2171,
Null = 2172,
CanPaste = 2173,
CanUndo = 2174,
EmptyUndoBuffer = 2175,
Undo = 2176,
Cut = 2177,
Copy = 2178,
Paste = 2179,
Clear = 2180,
SetText = 2181,
GetText = 2182,
GetTextLength = 2183,
GetDirectFunction = 2184,
GetDirectStatusFunction = 2772,
GetDirectPointer = 2185,
SetOvertype = 2186,
GetOvertype = 2187,
SetCaretWidth = 2188,
GetCaretWidth = 2189,
SetTargetStart = 2190,
GetTargetStart = 2191,
SetTargetStartVirtualSpace = 2728,
GetTargetStartVirtualSpace = 2729,
SetTargetEnd = 2192,
GetTargetEnd = 2193,
SetTargetEndVirtualSpace = 2730,
GetTargetEndVirtualSpace = 2731,
SetTargetRange = 2686,
GetTargetText = 2687,
TargetFromSelection = 2287,
TargetWholeDocument = 2690,
ReplaceTarget = 2194,
ReplaceTargetRE = 2195,
ReplaceTargetMinimal = 2779,
SearchInTarget = 2197,
SetSearchFlags = 2198,
GetSearchFlags = 2199,
CallTipShow = 2200,
CallTipCancel = 2201,
CallTipActive = 2202,
CallTipPosStart = 2203,
CallTipSetPosStart = 2214,
CallTipSetHlt = 2204,
CallTipSetBack = 2205,
CallTipSetFore = 2206,
CallTipSetForeHlt = 2207,
CallTipUseStyle = 2212,
CallTipSetPosition = 2213,
VisibleFromDocLine = 2220,
DocLineFromVisible = 2221,
WrapCount = 2235,
SetFoldLevel = 2222,
GetFoldLevel = 2223,
GetLastChild = 2224,
GetFoldParent = 2225,
ShowLines = 2226,
HideLines = 2227,
GetLineVisible = 2228,
GetAllLinesVisible = 2236,
SetFoldExpanded = 2229,
GetFoldExpanded = 2230,
ToggleFold = 2231,
ToggleFoldShowText = 2700,
FoldDisplayTextSetStyle = 2701,
FoldDisplayTextGetStyle = 2707,
SetDefaultFoldDisplayText = 2722,
GetDefaultFoldDisplayText = 2723,
FoldLine = 2237,
FoldChildren = 2238,
ExpandChildren = 2239,
FoldAll = 2662,
EnsureVisible = 2232,
SetAutomaticFold = 2663,
GetAutomaticFold = 2664,
SetFoldFlags = 2233,
EnsureVisibleEnforcePolicy = 2234,
SetTabIndents = 2260,
GetTabIndents = 2261,
SetBackSpaceUnIndents = 2262,
GetBackSpaceUnIndents = 2263,
SetMouseDwellTime = 2264,
GetMouseDwellTime = 2265,
WordStartPosition = 2266,
WordEndPosition = 2267,
IsRangeWord = 2691,
SetIdleStyling = 2692,
GetIdleStyling = 2693,
SetWrapMode = 2268,
GetWrapMode = 2269,
SetWrapVisualFlags = 2460,
GetWrapVisualFlags = 2461,
SetWrapVisualFlagsLocation = 2462,
GetWrapVisualFlagsLocation = 2463,
SetWrapStartIndent = 2464,
GetWrapStartIndent = 2465,
SetWrapIndentMode = 2472,
GetWrapIndentMode = 2473,
SetLayoutCache = 2272,
GetLayoutCache = 2273,
SetScrollWidth = 2274,
GetScrollWidth = 2275,
SetScrollWidthTracking = 2516,
GetScrollWidthTracking = 2517,
TextWidth = 2276,
SetEndAtLastLine = 2277,
GetEndAtLastLine = 2278,
TextHeight = 2279,
SetVScrollBar = 2280,
GetVScrollBar = 2281,
AppendText = 2282,
GetPhasesDraw = 2673,
SetPhasesDraw = 2674,
SetFontQuality = 2611,
GetFontQuality = 2612,
SetFirstVisibleLine = 2613,
SetMultiPaste = 2614,
GetMultiPaste = 2615,
GetTag = 2616,
LinesJoin = 2288,
LinesSplit = 2289,
SetFoldMarginColour = 2290,
SetFoldMarginHiColour = 2291,
SetAccessibility = 2702,
GetAccessibility = 2703,
LineDown = 2300,
LineDownExtend = 2301,
LineUp = 2302,
LineUpExtend = 2303,
CharLeft = 2304,
CharLeftExtend = 2305,
CharRight = 2306,
CharRightExtend = 2307,
WordLeft = 2308,
WordLeftExtend = 2309,
WordRight = 2310,
WordRightExtend = 2311,
Home = 2312,
HomeExtend = 2313,
LineEnd = 2314,
LineEndExtend = 2315,
DocumentStart = 2316,
DocumentStartExtend = 2317,
DocumentEnd = 2318,
DocumentEndExtend = 2319,
PageUp = 2320,
PageUpExtend = 2321,
PageDown = 2322,
PageDownExtend = 2323,
EditToggleOvertype = 2324,
Cancel = 2325,
DeleteBack = 2326,
Tab = 2327,
BackTab = 2328,
NewLine = 2329,
FormFeed = 2330,
VCHome = 2331,
VCHomeExtend = 2332,
ZoomIn = 2333,
ZoomOut = 2334,
DelWordLeft = 2335,
DelWordRight = 2336,
DelWordRightEnd = 2518,
LineCut = 2337,
LineDelete = 2338,
LineTranspose = 2339,
LineReverse = 2354,
LineDuplicate = 2404,
LowerCase = 2340,
UpperCase = 2341,
LineScrollDown = 2342,
LineScrollUp = 2343,
DeleteBackNotLine = 2344,
HomeDisplay = 2345,
HomeDisplayExtend = 2346,
LineEndDisplay = 2347,
LineEndDisplayExtend = 2348,
HomeWrap = 2349,
HomeWrapExtend = 2450,
LineEndWrap = 2451,
LineEndWrapExtend = 2452,
VCHomeWrap = 2453,
VCHomeWrapExtend = 2454,
LineCopy = 2455,
MoveCaretInsideView = 2401,
LineLength = 2350,
BraceHighlight = 2351,
BraceHighlightIndicator = 2498,
BraceBadLight = 2352,
BraceBadLightIndicator = 2499,
BraceMatch = 2353,
BraceMatchNext = 2369,
GetViewEOL = 2355,
SetViewEOL = 2356,
GetDocPointer = 2357,
SetDocPointer = 2358,
SetModEventMask = 2359,
GetEdgeColumn = 2360,
SetEdgeColumn = 2361,
GetEdgeMode = 2362,
SetEdgeMode = 2363,
GetEdgeColour = 2364,
SetEdgeColour = 2365,
MultiEdgeAddLine = 2694,
MultiEdgeClearAll = 2695,
GetMultiEdgeColumn = 2749,
SearchAnchor = 2366,
SearchNext = 2367,
SearchPrev = 2368,
LinesOnScreen = 2370,
UsePopUp = 2371,
SelectionIsRectangle = 2372,
SetZoom = 2373,
GetZoom = 2374,
CreateDocument = 2375,
AddRefDocument = 2376,
ReleaseDocument = 2377,
GetDocumentOptions = 2379,
GetModEventMask = 2378,
SetCommandEvents = 2717,
GetCommandEvents = 2718,
SetFocus = 2380,
GetFocus = 2381,
SetStatus = 2382,
GetStatus = 2383,
SetMouseDownCaptures = 2384,
GetMouseDownCaptures = 2385,
SetMouseWheelCaptures = 2696,
GetMouseWheelCaptures = 2697,
SetCursor = 2386,
GetCursor = 2387,
SetControlCharSymbol = 2388,
GetControlCharSymbol = 2389,
WordPartLeft = 2390,
WordPartLeftExtend = 2391,
WordPartRight = 2392,
WordPartRightExtend = 2393,
SetVisiblePolicy = 2394,
DelLineLeft = 2395,
DelLineRight = 2396,
SetXOffset = 2397,
GetXOffset = 2398,
ChooseCaretX = 2399,
GrabFocus = 2400,
SetXCaretPolicy = 2402,
SetYCaretPolicy = 2403,
SetPrintWrapMode = 2406,
GetPrintWrapMode = 2407,
SetHotspotActiveFore = 2410,
GetHotspotActiveFore = 2494,
SetHotspotActiveBack = 2411,
GetHotspotActiveBack = 2495,
SetHotspotActiveUnderline = 2412,
GetHotspotActiveUnderline = 2496,
SetHotspotSingleLine = 2421,
GetHotspotSingleLine = 2497,
ParaDown = 2413,
ParaDownExtend = 2414,
ParaUp = 2415,
ParaUpExtend = 2416,
PositionBefore = 2417,
PositionAfter = 2418,
PositionRelative = 2670,
PositionRelativeCodeUnits = 2716,
CopyRange = 2419,
CopyText = 2420,
SetSelectionMode = 2422,
ChangeSelectionMode = 2659,
GetSelectionMode = 2423,
SetMoveExtendsSelection = 2719,
GetMoveExtendsSelection = 2706,
GetLineSelStartPosition = 2424,
GetLineSelEndPosition = 2425,
LineDownRectExtend = 2426,
LineUpRectExtend = 2427,
CharLeftRectExtend = 2428,
CharRightRectExtend = 2429,
HomeRectExtend = 2430,
VCHomeRectExtend = 2431,
LineEndRectExtend = 2432,
PageUpRectExtend = 2433,
PageDownRectExtend = 2434,
StutteredPageUp = 2435,
StutteredPageUpExtend = 2436,
StutteredPageDown = 2437,
StutteredPageDownExtend = 2438,
WordLeftEnd = 2439,
WordLeftEndExtend = 2440,
WordRightEnd = 2441,
WordRightEndExtend = 2442,
SetWhitespaceChars = 2443,
GetWhitespaceChars = 2647,
SetPunctuationChars = 2648,
GetPunctuationChars = 2649,
SetCharsDefault = 2444,
AutoCGetCurrent = 2445,
AutoCGetCurrentText = 2610,
AutoCSetCaseInsensitiveBehaviour = 2634,
AutoCGetCaseInsensitiveBehaviour = 2635,
AutoCSetMulti = 2636,
AutoCGetMulti = 2637,
AutoCSetOrder = 2660,
AutoCGetOrder = 2661,
Allocate = 2446,
TargetAsUTF8 = 2447,
SetLengthForEncode = 2448,
EncodedFromUTF8 = 2449,
FindColumn = 2456,
GetCaretSticky = 2457,
SetCaretSticky = 2458,
ToggleCaretSticky = 2459,
SetPasteConvertEndings = 2467,
GetPasteConvertEndings = 2468,
ReplaceRectangular = 2771,
SelectionDuplicate = 2469,
SetCaretLineBackAlpha = 2470,
GetCaretLineBackAlpha = 2471,
SetCaretStyle = 2512,
GetCaretStyle = 2513,
SetIndicatorCurrent = 2500,
GetIndicatorCurrent = 2501,
SetIndicatorValue = 2502,
GetIndicatorValue = 2503,
IndicatorFillRange = 2504,
IndicatorClearRange = 2505,
IndicatorAllOnFor = 2506,
IndicatorValueAt = 2507,
IndicatorStart = 2508,
IndicatorEnd = 2509,
SetPositionCache = 2514,
GetPositionCache = 2515,
SetLayoutThreads = 2775,
GetLayoutThreads = 2776,
CopyAllowLine = 2519,
GetCharacterPointer = 2520,
GetRangePointer = 2643,
GetGapPosition = 2644,
IndicSetAlpha = 2523,
IndicGetAlpha = 2524,
IndicSetOutlineAlpha = 2558,
IndicGetOutlineAlpha = 2559,
SetExtraAscent = 2525,
GetExtraAscent = 2526,
SetExtraDescent = 2527,
GetExtraDescent = 2528,
MarkerSymbolDefined = 2529,
MarginSetText = 2530,
MarginGetText = 2531,
MarginSetStyle = 2532,
MarginGetStyle = 2533,
MarginSetStyles = 2534,
MarginGetStyles = 2535,
MarginTextClearAll = 2536,
MarginSetStyleOffset = 2537,
MarginGetStyleOffset = 2538,
SetMarginOptions = 2539,
GetMarginOptions = 2557,
AnnotationSetText = 2540,
AnnotationGetText = 2541,
AnnotationSetStyle = 2542,
AnnotationGetStyle = 2543,
AnnotationSetStyles = 2544,
AnnotationGetStyles = 2545,
AnnotationGetLines = 2546,
AnnotationClearAll = 2547,
AnnotationSetVisible = 2548,
AnnotationGetVisible = 2549,
AnnotationSetStyleOffset = 2550,
AnnotationGetStyleOffset = 2551,
ReleaseAllExtendedStyles = 2552,
AllocateExtendedStyles = 2553,
AddUndoAction = 2560,
CharPositionFromPoint = 2561,
CharPositionFromPointClose = 2562,
SetMouseSelectionRectangularSwitch = 2668,
GetMouseSelectionRectangularSwitch = 2669,
SetMultipleSelection = 2563,
GetMultipleSelection = 2564,
SetAdditionalSelectionTyping = 2565,
GetAdditionalSelectionTyping = 2566,
SetAdditionalCaretsBlink = 2567,
GetAdditionalCaretsBlink = 2568,
SetAdditionalCaretsVisible = 2608,
GetAdditionalCaretsVisible = 2609,
GetSelections = 2570,
GetSelectionEmpty = 2650,
ClearSelections = 2571,
SetSelection = 2572,
AddSelection = 2573,
SelectionFromPoint = 2474,
DropSelectionN = 2671,
SetMainSelection = 2574,
GetMainSelection = 2575,
SetSelectionNCaret = 2576,
GetSelectionNCaret = 2577,
SetSelectionNAnchor = 2578,
GetSelectionNAnchor = 2579,
SetSelectionNCaretVirtualSpace = 2580,
GetSelectionNCaretVirtualSpace = 2581,
SetSelectionNAnchorVirtualSpace = 2582,
GetSelectionNAnchorVirtualSpace = 2583,
SetSelectionNStart = 2584,
GetSelectionNStart = 2585,
GetSelectionNStartVirtualSpace = 2726,
SetSelectionNEnd = 2586,
GetSelectionNEndVirtualSpace = 2727,
GetSelectionNEnd = 2587,
SetRectangularSelectionCaret = 2588,
GetRectangularSelectionCaret = 2589,
SetRectangularSelectionAnchor = 2590,
GetRectangularSelectionAnchor = 2591,
SetRectangularSelectionCaretVirtualSpace = 2592,
GetRectangularSelectionCaretVirtualSpace = 2593,
SetRectangularSelectionAnchorVirtualSpace = 2594,
GetRectangularSelectionAnchorVirtualSpace = 2595,
SetVirtualSpaceOptions = 2596,
GetVirtualSpaceOptions = 2597,
SetRectangularSelectionModifier = 2598,
GetRectangularSelectionModifier = 2599,
SetAdditionalSelFore = 2600,
SetAdditionalSelBack = 2601,
SetAdditionalSelAlpha = 2602,
GetAdditionalSelAlpha = 2603,
SetAdditionalCaretFore = 2604,
GetAdditionalCaretFore = 2605,
RotateSelection = 2606,
SwapMainAnchorCaret = 2607,
MultipleSelectAddNext = 2688,
MultipleSelectAddEach = 2689,
ChangeLexerState = 2617,
ContractedFoldNext = 2618,
VerticalCentreCaret = 2619,
MoveSelectedLinesUp = 2620,
MoveSelectedLinesDown = 2621,
SetIdentifier = 2622,
GetIdentifier = 2623,
RGBAImageSetWidth = 2624,
RGBAImageSetHeight = 2625,
RGBAImageSetScale = 2651,
MarkerDefineRGBAImage = 2626,
RegisterRGBAImage = 2627,
ScrollToStart = 2628,
ScrollToEnd = 2629,
SetTechnology = 2630,
GetTechnology = 2631,
CreateLoader = 2632,
FindIndicatorShow = 2640,
FindIndicatorFlash = 2641,
FindIndicatorHide = 2642,
VCHomeDisplay = 2652,
VCHomeDisplayExtend = 2653,
GetCaretLineVisibleAlways = 2654,
SetCaretLineVisibleAlways = 2655,
SetLineEndTypesAllowed = 2656,
GetLineEndTypesAllowed = 2657,
GetLineEndTypesActive = 2658,
SetRepresentation = 2665,
GetRepresentation = 2666,
ClearRepresentation = 2667,
ClearAllRepresentations = 2770,
SetRepresentationAppearance = 2766,
GetRepresentationAppearance = 2767,
SetRepresentationColour = 2768,
GetRepresentationColour = 2769,
EOLAnnotationSetText = 2740,
EOLAnnotationGetText = 2741,
EOLAnnotationSetStyle = 2742,
EOLAnnotationGetStyle = 2743,
EOLAnnotationClearAll = 2744,
EOLAnnotationSetVisible = 2745,
EOLAnnotationGetVisible = 2746,
EOLAnnotationSetStyleOffset = 2747,
EOLAnnotationGetStyleOffset = 2748,
SupportsFeature = 2750,
GetLineCharacterIndex = 2710,
AllocateLineCharacterIndex = 2711,
ReleaseLineCharacterIndex = 2712,
LineFromIndexPosition = 2713,
IndexPositionFromLine = 2714,
StartRecord = 3001,
StopRecord = 3002,
GetLexer = 4002,
Colourise = 4003,
SetProperty = 4004,
SetKeyWords = 4005,
GetProperty = 4008,
GetPropertyExpanded = 4009,
GetPropertyInt = 4010,
GetLexerLanguage = 4012,
PrivateLexerCall = 4013,
PropertyNames = 4014,
PropertyType = 4015,
DescribeProperty = 4016,
DescribeKeyWordSets = 4017,
GetLineEndTypesSupported = 4018,
AllocateSubStyles = 4020,
GetSubStylesStart = 4021,
GetSubStylesLength = 4022,
GetStyleFromSubStyle = 4027,
GetPrimaryStyleFromStyle = 4028,
FreeSubStyles = 4023,
SetIdentifiers = 4024,
DistanceToSecondaryStyles = 4025,
GetSubStyleBases = 4026,
GetNamedStyles = 4029,
NameOfStyle = 4030,
TagsOfStyle = 4031,
DescriptionOfStyle = 4032,
SetILexer = 4033,
GetBidirectional = 2708,
SetBidirectional = 2709,
};
//--Autogenerated -- end of section automatically generated from Scintilla.iface
}
#endif

View File

@ -0,0 +1,129 @@
// Scintilla source code edit control
/** @file ScintillaStructures.h
** Structures used to communicate with Scintilla.
** The same structures are defined for C in Scintilla.h.
** Uses definitions from ScintillaTypes.h.
**/
// Copyright 2021 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
#ifndef SCINTILLASTRUCTURES_H
#define SCINTILLASTRUCTURES_H
namespace Scintilla {
using PositionCR = long;
struct CharacterRange {
PositionCR cpMin;
PositionCR cpMax;
};
struct CharacterRangeFull {
Position cpMin;
Position cpMax;
};
struct TextRange {
CharacterRange chrg;
char *lpstrText;
};
struct TextRangeFull {
CharacterRangeFull chrg;
char *lpstrText;
};
struct TextToFind {
CharacterRange chrg;
const char *lpstrText;
CharacterRange chrgText;
};
struct TextToFindFull {
CharacterRangeFull chrg;
const char *lpstrText;
CharacterRangeFull chrgText;
};
using SurfaceID = void *;
struct Rectangle {
int left;
int top;
int right;
int bottom;
};
/* This structure is used in printing. Not needed by most client code. */
struct RangeToFormat {
SurfaceID hdc;
SurfaceID hdcTarget;
Rectangle rc;
Rectangle rcPage;
CharacterRange chrg;
};
struct RangeToFormatFull {
SurfaceID hdc;
SurfaceID hdcTarget;
Rectangle rc;
Rectangle rcPage;
CharacterRangeFull chrg;
};
struct NotifyHeader {
/* Compatible with Windows NMHDR.
* hwndFrom is really an environment specific window handle or pointer
* but most clients of Scintilla.h do not have this type visible. */
void *hwndFrom;
uptr_t idFrom;
Notification code;
};
enum class Message; // Declare in case ScintillaMessages.h not included
struct NotificationData {
NotifyHeader nmhdr;
Position position;
/* SCN_STYLENEEDED, SCN_DOUBLECLICK, SCN_MODIFIED, SCN_MARGINCLICK, */
/* SCN_NEEDSHOWN, SCN_DWELLSTART, SCN_DWELLEND, SCN_CALLTIPCLICK, */
/* SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, SCN_HOTSPOTRELEASECLICK, */
/* SCN_INDICATORCLICK, SCN_INDICATORRELEASE, */
/* SCN_USERLISTSELECTION, SCN_AUTOCSELECTION */
int ch;
/* SCN_CHARADDED, SCN_KEY, SCN_AUTOCCOMPLETED, SCN_AUTOCSELECTION, */
/* SCN_USERLISTSELECTION */
KeyMod modifiers;
/* SCN_KEY, SCN_DOUBLECLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, */
/* SCN_HOTSPOTRELEASECLICK, SCN_INDICATORCLICK, SCN_INDICATORRELEASE, */
ModificationFlags modificationType; /* SCN_MODIFIED */
const char *text;
/* SCN_MODIFIED, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION, SCN_URIDROPPED */
Position length; /* SCN_MODIFIED */
Position linesAdded; /* SCN_MODIFIED */
Message message; /* SCN_MACRORECORD */
uptr_t wParam; /* SCN_MACRORECORD */
sptr_t lParam; /* SCN_MACRORECORD */
Position line; /* SCN_MODIFIED */
FoldLevel foldLevelNow; /* SCN_MODIFIED */
FoldLevel foldLevelPrev; /* SCN_MODIFIED */
int margin; /* SCN_MARGINCLICK */
int listType; /* SCN_USERLISTSELECTION */
int x; /* SCN_DWELLSTART, SCN_DWELLEND */
int y; /* SCN_DWELLSTART, SCN_DWELLEND */
int token; /* SCN_MODIFIED with SC_MOD_CONTAINER */
Position annotationLinesAdded; /* SCN_MODIFIED with SC_MOD_CHANGEANNOTATION */
Update updated; /* SCN_UPDATEUI */
CompletionMethods listCompletionMethod;
/* SCN_AUTOCSELECTION, SCN_AUTOCCOMPLETED, SCN_USERLISTSELECTION, */
CharacterSource characterSource; /* SCN_CHARADDED */
};
}
#endif

View File

@ -0,0 +1,842 @@
// Scintilla source code edit control
/** @file ScintillaTypes.h
** Types used to communicate with Scintilla.
**/
// Copyright 1998-2019 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
/* Most of this file is automatically generated from the Scintilla.iface interface definition
* file which contains any comments about the definitions. ScintillaAPIFacer.py does the generation. */
#ifndef SCINTILLATYPES_H
#define SCINTILLATYPES_H
namespace Scintilla {
// Enumerations
//++Autogenerated -- start of section automatically generated from Scintilla.iface
enum class WhiteSpace {
Invisible = 0,
VisibleAlways = 1,
VisibleAfterIndent = 2,
VisibleOnlyInIndent = 3,
};
enum class TabDrawMode {
LongArrow = 0,
StrikeOut = 1,
};
enum class EndOfLine {
CrLf = 0,
Cr = 1,
Lf = 2,
};
enum class IMEInteraction {
Windowed = 0,
Inline = 1,
};
enum class Alpha {
Transparent = 0,
Opaque = 255,
NoAlpha = 256,
};
enum class CursorShape {
Normal = -1,
Arrow = 2,
Wait = 4,
ReverseArrow = 7,
};
enum class MarkerSymbol {
Circle = 0,
RoundRect = 1,
Arrow = 2,
SmallRect = 3,
ShortArrow = 4,
Empty = 5,
ArrowDown = 6,
Minus = 7,
Plus = 8,
VLine = 9,
LCorner = 10,
TCorner = 11,
BoxPlus = 12,
BoxPlusConnected = 13,
BoxMinus = 14,
BoxMinusConnected = 15,
LCornerCurve = 16,
TCornerCurve = 17,
CirclePlus = 18,
CirclePlusConnected = 19,
CircleMinus = 20,
CircleMinusConnected = 21,
Background = 22,
DotDotDot = 23,
Arrows = 24,
Pixmap = 25,
FullRect = 26,
LeftRect = 27,
Available = 28,
Underline = 29,
RgbaImage = 30,
Bookmark = 31,
VerticalBookmark = 32,
Bar = 33,
Character = 10000,
};
enum class MarkerOutline {
HistoryRevertedToOrigin = 21,
HistorySaved = 22,
HistoryModified = 23,
HistoryRevertedToModified = 24,
FolderEnd = 25,
FolderOpenMid = 26,
FolderMidTail = 27,
FolderTail = 28,
FolderSub = 29,
Folder = 30,
FolderOpen = 31,
};
enum class MarginType {
Symbol = 0,
Number = 1,
Back = 2,
Fore = 3,
Text = 4,
RText = 5,
Colour = 6,
};
enum class StylesCommon {
Default = 32,
LineNumber = 33,
BraceLight = 34,
BraceBad = 35,
ControlChar = 36,
IndentGuide = 37,
CallTip = 38,
FoldDisplayText = 39,
LastPredefined = 39,
Max = 255,
};
enum class CharacterSet {
Ansi = 0,
Default = 1,
Baltic = 186,
ChineseBig5 = 136,
EastEurope = 238,
GB2312 = 134,
Greek = 161,
Hangul = 129,
Mac = 77,
Oem = 255,
Russian = 204,
Oem866 = 866,
Cyrillic = 1251,
ShiftJis = 128,
Symbol = 2,
Turkish = 162,
Johab = 130,
Hebrew = 177,
Arabic = 178,
Vietnamese = 163,
Thai = 222,
Iso8859_15 = 1000,
};
enum class CaseVisible {
Mixed = 0,
Upper = 1,
Lower = 2,
Camel = 3,
};
enum class FontWeight {
Normal = 400,
SemiBold = 600,
Bold = 700,
};
enum class Element {
List = 0,
ListBack = 1,
ListSelected = 2,
ListSelectedBack = 3,
SelectionText = 10,
SelectionBack = 11,
SelectionAdditionalText = 12,
SelectionAdditionalBack = 13,
SelectionSecondaryText = 14,
SelectionSecondaryBack = 15,
SelectionInactiveText = 16,
SelectionInactiveBack = 17,
SelectionInactiveAdditionalText = 18,
SelectionInactiveAdditionalBack = 19,
Caret = 40,
CaretAdditional = 41,
CaretLineBack = 50,
WhiteSpace = 60,
WhiteSpaceBack = 61,
HotSpotActive = 70,
HotSpotActiveBack = 71,
FoldLine = 80,
HiddenLine = 81,
};
enum class Layer {
Base = 0,
UnderText = 1,
OverText = 2,
};
enum class IndicatorStyle {
Plain = 0,
Squiggle = 1,
TT = 2,
Diagonal = 3,
Strike = 4,
Hidden = 5,
Box = 6,
RoundBox = 7,
StraightBox = 8,
Dash = 9,
Dots = 10,
SquiggleLow = 11,
DotBox = 12,
SquigglePixmap = 13,
CompositionThick = 14,
CompositionThin = 15,
FullBox = 16,
TextFore = 17,
Point = 18,
PointCharacter = 19,
Gradient = 20,
GradientCentre = 21,
PointTop = 22,
};
enum class IndicatorNumbers {
Container = 8,
Ime = 32,
ImeMax = 35,
HistoryRevertedToOriginInsertion = 36,
HistoryRevertedToOriginDeletion = 37,
HistorySavedInsertion = 38,
HistorySavedDeletion = 39,
HistoryModifiedInsertion = 40,
HistoryModifiedDeletion = 41,
HistoryRevertedToModifiedInsertion = 42,
HistoryRevertedToModifiedDeletion = 43,
Max = 43,
};
enum class IndicValue {
Bit = 0x1000000,
Mask = 0xFFFFFF,
};
enum class IndicFlag {
None = 0,
ValueFore = 1,
};
enum class AutoCompleteOption {
Normal = 0,
FixedSize = 1,
SelectFirstItem = 2,
};
enum class IndentView {
None = 0,
Real = 1,
LookForward = 2,
LookBoth = 3,
};
enum class PrintOption {
Normal = 0,
InvertLight = 1,
BlackOnWhite = 2,
ColourOnWhite = 3,
ColourOnWhiteDefaultBG = 4,
ScreenColours = 5,
};
enum class FindOption {
None = 0x0,
WholeWord = 0x2,
MatchCase = 0x4,
WordStart = 0x00100000,
RegExp = 0x00200000,
Posix = 0x00400000,
Cxx11RegEx = 0x00800000,
};
enum class ChangeHistoryOption {
Disabled = 0,
Enabled = 1,
Markers = 2,
Indicators = 4,
};
enum class FoldLevel {
None = 0x0,
Base = 0x400,
WhiteFlag = 0x1000,
HeaderFlag = 0x2000,
NumberMask = 0x0FFF,
};
enum class FoldDisplayTextStyle {
Hidden = 0,
Standard = 1,
Boxed = 2,
};
enum class FoldAction {
Contract = 0,
Expand = 1,
Toggle = 2,
ContractEveryLevel = 4,
};
enum class AutomaticFold {
None = 0x0000,
Show = 0x0001,
Click = 0x0002,
Change = 0x0004,
};
enum class FoldFlag {
None = 0x0000,
LineBeforeExpanded = 0x0002,
LineBeforeContracted = 0x0004,
LineAfterExpanded = 0x0008,
LineAfterContracted = 0x0010,
LevelNumbers = 0x0040,
LineState = 0x0080,
};
enum class IdleStyling {
None = 0,
ToVisible = 1,
AfterVisible = 2,
All = 3,
};
enum class Wrap {
None = 0,
Word = 1,
Char = 2,
WhiteSpace = 3,
};
enum class WrapVisualFlag {
None = 0x0000,
End = 0x0001,
Start = 0x0002,
Margin = 0x0004,
};
enum class WrapVisualLocation {
Default = 0x0000,
EndByText = 0x0001,
StartByText = 0x0002,
};
enum class WrapIndentMode {
Fixed = 0,
Same = 1,
Indent = 2,
DeepIndent = 3,
};
enum class LineCache {
None = 0,
Caret = 1,
Page = 2,
Document = 3,
};
enum class PhasesDraw {
One = 0,
Two = 1,
Multiple = 2,
};
enum class FontQuality {
QualityMask = 0xF,
QualityDefault = 0,
QualityNonAntialiased = 1,
QualityAntialiased = 2,
QualityLcdOptimized = 3,
};
enum class MultiPaste {
Once = 0,
Each = 1,
};
enum class Accessibility {
Disabled = 0,
Enabled = 1,
};
enum class EdgeVisualStyle {
None = 0,
Line = 1,
Background = 2,
MultiLine = 3,
};
enum class PopUp {
Never = 0,
All = 1,
Text = 2,
};
enum class DocumentOption {
Default = 0,
StylesNone = 0x1,
TextLarge = 0x100,
};
enum class Status {
Ok = 0,
Failure = 1,
BadAlloc = 2,
WarnStart = 1000,
RegEx = 1001,
};
enum class VisiblePolicy {
Slop = 0x01,
Strict = 0x04,
};
enum class CaretPolicy {
Slop = 0x01,
Strict = 0x04,
Jumps = 0x10,
Even = 0x08,
};
enum class SelectionMode {
Stream = 0,
Rectangle = 1,
Lines = 2,
Thin = 3,
};
enum class CaseInsensitiveBehaviour {
RespectCase = 0,
IgnoreCase = 1,
};
enum class MultiAutoComplete {
Once = 0,
Each = 1,
};
enum class Ordering {
PreSorted = 0,
PerformSort = 1,
Custom = 2,
};
enum class CaretSticky {
Off = 0,
On = 1,
WhiteSpace = 2,
};
enum class CaretStyle {
Invisible = 0,
Line = 1,
Block = 2,
OverstrikeBar = 0,
OverstrikeBlock = 0x10,
Curses = 0x20,
InsMask = 0xF,
BlockAfter = 0x100,
};
enum class MarginOption {
None = 0,
SubLineSelect = 1,
};
enum class AnnotationVisible {
Hidden = 0,
Standard = 1,
Boxed = 2,
Indented = 3,
};
enum class UndoFlags {
None = 0,
MayCoalesce = 1,
};
enum class VirtualSpace {
None = 0,
RectangularSelection = 1,
UserAccessible = 2,
NoWrapLineStart = 4,
};
enum class Technology {
Default = 0,
DirectWrite = 1,
DirectWriteRetain = 2,
DirectWriteDC = 3,
};
enum class LineEndType {
Default = 0,
Unicode = 1,
};
enum class RepresentationAppearance {
Plain = 0,
Blob = 1,
Colour = 0x10,
};
enum class EOLAnnotationVisible {
Hidden = 0x0,
Standard = 0x1,
Boxed = 0x2,
Stadium = 0x100,
FlatCircle = 0x101,
AngleCircle = 0x102,
CircleFlat = 0x110,
Flats = 0x111,
AngleFlat = 0x112,
CircleAngle = 0x120,
FlatAngle = 0x121,
Angles = 0x122,
};
enum class Supports {
LineDrawsFinal = 0,
PixelDivisions = 1,
FractionalStrokeWidth = 2,
TranslucentStroke = 3,
PixelModification = 4,
ThreadSafeMeasureWidths = 5,
};
enum class LineCharacterIndexType {
None = 0,
Utf32 = 1,
Utf16 = 2,
};
enum class TypeProperty {
Boolean = 0,
Integer = 1,
String = 2,
};
enum class ModificationFlags {
None = 0x0,
InsertText = 0x1,
DeleteText = 0x2,
ChangeStyle = 0x4,
ChangeFold = 0x8,
User = 0x10,
Undo = 0x20,
Redo = 0x40,
MultiStepUndoRedo = 0x80,
LastStepInUndoRedo = 0x100,
ChangeMarker = 0x200,
BeforeInsert = 0x400,
BeforeDelete = 0x800,
MultilineUndoRedo = 0x1000,
StartAction = 0x2000,
ChangeIndicator = 0x4000,
ChangeLineState = 0x8000,
ChangeMargin = 0x10000,
ChangeAnnotation = 0x20000,
Container = 0x40000,
LexerState = 0x80000,
InsertCheck = 0x100000,
ChangeTabStops = 0x200000,
ChangeEOLAnnotation = 0x400000,
EventMaskAll = 0x7FFFFF,
};
enum class Update {
None = 0x0,
Content = 0x1,
Selection = 0x2,
VScroll = 0x4,
HScroll = 0x8,
};
enum class FocusChange {
Change = 768,
Setfocus = 512,
Killfocus = 256,
};
enum class Keys {
Down = 300,
Up = 301,
Left = 302,
Right = 303,
Home = 304,
End = 305,
Prior = 306,
Next = 307,
Delete = 308,
Insert = 309,
Escape = 7,
Back = 8,
Tab = 9,
Return = 13,
Add = 310,
Subtract = 311,
Divide = 312,
Win = 313,
RWin = 314,
Menu = 315,
};
enum class KeyMod {
Norm = 0,
Shift = 1,
Ctrl = 2,
Alt = 4,
Super = 8,
Meta = 16,
};
enum class CompletionMethods {
FillUp = 1,
DoubleClick = 2,
Tab = 3,
Newline = 4,
Command = 5,
SingleChoice = 6,
};
enum class CharacterSource {
DirectInput = 0,
TentativeInput = 1,
ImeResult = 2,
};
enum class Bidirectional {
Disabled = 0,
L2R = 1,
R2L = 2,
};
enum class Notification {
StyleNeeded = 2000,
CharAdded = 2001,
SavePointReached = 2002,
SavePointLeft = 2003,
ModifyAttemptRO = 2004,
Key = 2005,
DoubleClick = 2006,
UpdateUI = 2007,
Modified = 2008,
MacroRecord = 2009,
MarginClick = 2010,
NeedShown = 2011,
Painted = 2013,
UserListSelection = 2014,
URIDropped = 2015,
DwellStart = 2016,
DwellEnd = 2017,
Zoom = 2018,
HotSpotClick = 2019,
HotSpotDoubleClick = 2020,
CallTipClick = 2021,
AutoCSelection = 2022,
IndicatorClick = 2023,
IndicatorRelease = 2024,
AutoCCancelled = 2025,
AutoCCharDeleted = 2026,
HotSpotReleaseClick = 2027,
FocusIn = 2028,
FocusOut = 2029,
AutoCCompleted = 2030,
MarginRightClick = 2031,
AutoCSelectionChange = 2032,
};
//--Autogenerated -- end of section automatically generated from Scintilla.iface
using Position = intptr_t;
using Line = intptr_t;
using Colour = int;
using ColourAlpha = int;
using uptr_t = uintptr_t;
using sptr_t = intptr_t;
//++Autogenerated -- start of section automatically generated from Scintilla.iface
//**1 \(\*\n\)
constexpr Position InvalidPosition = -1;
constexpr int CpUtf8 = 65001;
constexpr int MarkerMax = 31;
constexpr int MaskFolders = 0xFE000000;
constexpr int MaxMargin = 4;
constexpr int FontSizeMultiplier = 100;
constexpr int TimeForever = 10000000;
constexpr int KeywordsetMax = 8;
//--Autogenerated -- end of section automatically generated from Scintilla.iface
constexpr int IndicatorMax = static_cast<int>(IndicatorNumbers::Max);
// Functions to manipulate fields from a MarkerOutline
inline int operator<<(int i, MarkerOutline marker) noexcept {
return i << static_cast<int>(marker);
}
// Functions to manipulate fields from a FindOption
constexpr FindOption operator|(FindOption a, FindOption b) noexcept {
return static_cast<FindOption>(static_cast<int>(a) | static_cast<int>(b));
}
inline FindOption &operator|=(FindOption &self, FindOption a) noexcept {
self = self | a;
return self;
}
// Functions to retrieve and manipulate fields from a FoldLevel
constexpr FoldLevel operator&(FoldLevel lhs, FoldLevel rhs) noexcept {
return static_cast<FoldLevel>(static_cast<int>(lhs) & static_cast<int>(rhs));
}
constexpr FoldLevel LevelNumberPart(FoldLevel level) noexcept {
return level & FoldLevel::NumberMask;
}
constexpr int LevelNumber(FoldLevel level) noexcept {
return static_cast<int>(LevelNumberPart(level));
}
constexpr bool LevelIsHeader(FoldLevel level) noexcept {
return (level & FoldLevel::HeaderFlag) == FoldLevel::HeaderFlag;
}
constexpr bool LevelIsWhitespace(FoldLevel level) noexcept {
return (level & FoldLevel::WhiteFlag) == FoldLevel::WhiteFlag;
}
// Functions to manipulate fields from a FoldFlag
constexpr FoldFlag operator|(FoldFlag a, FoldFlag b) noexcept {
return static_cast<FoldFlag>(static_cast<int>(a) | static_cast<int>(b));
}
// Functions to manipulate fields from a FontQuality
constexpr FontQuality operator&(FontQuality a, FontQuality b) noexcept {
return static_cast<FontQuality>(static_cast<int>(a) & static_cast<int>(b));
}
// Functions to manipulate fields from a DocumentOption
constexpr DocumentOption operator|(DocumentOption a, DocumentOption b) noexcept {
return static_cast<DocumentOption>(static_cast<int>(a) | static_cast<int>(b));
}
// Functions to manipulate fields from a CaretPolicy
constexpr CaretPolicy operator|(CaretPolicy a, CaretPolicy b) noexcept {
return static_cast<CaretPolicy>(static_cast<int>(a) | static_cast<int>(b));
}
// Functions to manipulate fields from a CaretStyle
constexpr CaretStyle operator|(CaretStyle a, CaretStyle b) noexcept {
return static_cast<CaretStyle>(static_cast<int>(a) | static_cast<int>(b));
}
constexpr CaretStyle operator&(CaretStyle a, CaretStyle b) noexcept {
return static_cast<CaretStyle>(static_cast<int>(a) & static_cast<int>(b));
}
// Functions to manipulate fields from a LineEndType
constexpr LineEndType operator&(LineEndType a, LineEndType b) noexcept {
return static_cast<LineEndType>(static_cast<int>(a) & static_cast<int>(b));
}
// Functions to manipulate fields from a RepresentationAppearance
constexpr RepresentationAppearance operator|(RepresentationAppearance a, RepresentationAppearance b) noexcept {
return static_cast<RepresentationAppearance>(static_cast<int>(a) | static_cast<int>(b));
}
// Functions to manipulate fields from a LineCharacterIndexType
constexpr LineCharacterIndexType operator|(LineCharacterIndexType a, LineCharacterIndexType b) noexcept {
return static_cast<LineCharacterIndexType>(static_cast<int>(a) | static_cast<int>(b));
}
// Functions to manipulate fields from a ModificationFlags
constexpr ModificationFlags operator|(ModificationFlags a, ModificationFlags b) noexcept {
return static_cast<ModificationFlags>(static_cast<int>(a) | static_cast<int>(b));
}
constexpr ModificationFlags operator&(ModificationFlags a, ModificationFlags b) noexcept {
return static_cast<ModificationFlags>(static_cast<int>(a) & static_cast<int>(b));
}
inline ModificationFlags &operator|=(ModificationFlags &self, ModificationFlags a) noexcept {
self = self | a;
return self;
}
// Functions to manipulate fields from a Update
constexpr Update operator|(Update a, Update b) noexcept {
return static_cast<Update>(static_cast<int>(a) | static_cast<int>(b));
}
// Functions to manipulate fields from a KeyMod
constexpr KeyMod operator|(KeyMod a, KeyMod b) noexcept {
return static_cast<KeyMod>(static_cast<int>(a) | static_cast<int>(b));
}
constexpr KeyMod operator&(KeyMod a, KeyMod b) noexcept {
return static_cast<KeyMod>(static_cast<int>(a) & static_cast<int>(b));
}
constexpr KeyMod ModifierFlags(bool shift, bool ctrl, bool alt, bool meta=false, bool super=false) noexcept {
return
(shift ? KeyMod::Shift : KeyMod::Norm) |
(ctrl ? KeyMod::Ctrl : KeyMod::Norm) |
(alt ? KeyMod::Alt : KeyMod::Norm) |
(meta ? KeyMod::Meta : KeyMod::Norm) |
(super ? KeyMod::Super : KeyMod::Norm);
}
// Test if an enum class value has some bit flag(s) of test set.
template <typename T>
constexpr bool FlagSet(T value, T test) {
return (static_cast<int>(value) & static_cast<int>(test)) != 0;
}
}
#endif

Some files were not shown because too many files have changed in this diff Show More