]> git.saurik.com Git - wxWidgets.git/commitdiff
Updated to Scintilla 1.54
authorRobin Dunn <robin@alldunn.com>
Thu, 18 Sep 2003 05:05:52 +0000 (05:05 +0000)
committerRobin Dunn <robin@alldunn.com>
Thu, 18 Sep 2003 05:05:52 +0000 (05:05 +0000)
Applied most of patch #806092
Added new wxSTC sample from Otto Wyss

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23654 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

136 files changed:
contrib/build/stc/makefile.bcc
contrib/build/stc/makefile.gcc
contrib/build/stc/makefile.vc
contrib/build/stc/makefile.wat
contrib/build/stc/stc.bkl
contrib/build/stc/stc.dsp
contrib/include/wx/stc/stc.h
contrib/samples/stc/Makefile.in
contrib/samples/stc/defsext.h [new file with mode: 0644]
contrib/samples/stc/edit.cpp [new file with mode: 0644]
contrib/samples/stc/edit.h [new file with mode: 0644]
contrib/samples/stc/makefile.bcc
contrib/samples/stc/makefile.gcc
contrib/samples/stc/makefile.vc
contrib/samples/stc/makefile.wat
contrib/samples/stc/mondrian.ico [new file with mode: 0644]
contrib/samples/stc/mondrian.xpm [new file with mode: 0644]
contrib/samples/stc/prefs.cpp [new file with mode: 0644]
contrib/samples/stc/prefs.h [new file with mode: 0644]
contrib/samples/stc/stctest.bkl
contrib/samples/stc/stctest.cpp
contrib/samples/stc/stctest.dsp
contrib/samples/stc/stctest.rc
contrib/src/stc/Makefile.in
contrib/src/stc/PlatWX.cpp
contrib/src/stc/ScintillaWX.cpp
contrib/src/stc/ScintillaWX.h
contrib/src/stc/gen_iface.py
contrib/src/stc/scintilla/README.txt
contrib/src/stc/scintilla/include/Accessor.h
contrib/src/stc/scintilla/include/KeyWords.h
contrib/src/stc/scintilla/include/PropSet.h
contrib/src/stc/scintilla/include/SciLexer.h
contrib/src/stc/scintilla/include/Scintilla.h
contrib/src/stc/scintilla/include/Scintilla.iface
contrib/src/stc/scintilla/include/WindowAccessor.h
contrib/src/stc/scintilla/src/CellBuffer.cxx
contrib/src/stc/scintilla/src/CellBuffer.h
contrib/src/stc/scintilla/src/Document.cxx
contrib/src/stc/scintilla/src/DocumentAccessor.cxx
contrib/src/stc/scintilla/src/DocumentAccessor.h
contrib/src/stc/scintilla/src/Editor.cxx
contrib/src/stc/scintilla/src/ExternalLexer.h
contrib/src/stc/scintilla/src/Indicator.cxx
contrib/src/stc/scintilla/src/KeyWords.cxx
contrib/src/stc/scintilla/src/LexAda.cxx
contrib/src/stc/scintilla/src/LexCSS.cxx
contrib/src/stc/scintilla/src/LexEScript.cxx
contrib/src/stc/scintilla/src/LexHTML.cxx
contrib/src/stc/scintilla/src/LexLua.cxx
contrib/src/stc/scintilla/src/LexMMIXAL.cxx [new file with mode: 0644]
contrib/src/stc/scintilla/src/LexNsis.cxx [new file with mode: 0644]
contrib/src/stc/scintilla/src/LexOthers.cxx
contrib/src/stc/scintilla/src/LexPOV.cxx
contrib/src/stc/scintilla/src/LexPS.cxx [new file with mode: 0644]
contrib/src/stc/scintilla/src/LexPascal.cxx
contrib/src/stc/scintilla/src/LexSQL.cxx
contrib/src/stc/scintilla/src/LexScriptol.cxx [new file with mode: 0644]
contrib/src/stc/scintilla/src/PropSet.cxx
contrib/src/stc/scintilla/src/RESearch.cxx
contrib/src/stc/scintilla/src/RESearch.h
contrib/src/stc/scintilla/src/SVector.h
contrib/src/stc/scintilla/src/ScintillaBase.cxx
contrib/src/stc/scintilla/src/ScintillaBase.h
contrib/src/stc/scintilla/src/Style.cxx
contrib/src/stc/scintilla/src/Style.h
contrib/src/stc/scintilla/src/WindowAccessor.cxx
contrib/src/stc/scintilla/src/XPM.cxx
contrib/src/stc/stc.cpp
contrib/src/stc/stc.cpp.in
contrib/src/stc/stc.h.in
include/wx/stc/stc.h
samples/stc/Makefile.in
samples/stc/defsext.h [new file with mode: 0644]
samples/stc/edit.cpp [new file with mode: 0644]
samples/stc/edit.h [new file with mode: 0644]
samples/stc/makefile.bcc
samples/stc/makefile.gcc
samples/stc/makefile.vc
samples/stc/makefile.wat
samples/stc/mondrian.ico [new file with mode: 0644]
samples/stc/mondrian.xpm [new file with mode: 0644]
samples/stc/prefs.cpp [new file with mode: 0644]
samples/stc/prefs.h [new file with mode: 0644]
samples/stc/stctest.bkl
samples/stc/stctest.cpp
samples/stc/stctest.dsp
samples/stc/stctest.rc
src/stc/Makefile.in
src/stc/PlatWX.cpp
src/stc/ScintillaWX.cpp
src/stc/ScintillaWX.h
src/stc/gen_iface.py
src/stc/scintilla/README.txt
src/stc/scintilla/include/Accessor.h
src/stc/scintilla/include/KeyWords.h
src/stc/scintilla/include/PropSet.h
src/stc/scintilla/include/SciLexer.h
src/stc/scintilla/include/Scintilla.h
src/stc/scintilla/include/Scintilla.iface
src/stc/scintilla/include/WindowAccessor.h
src/stc/scintilla/src/CellBuffer.cxx
src/stc/scintilla/src/CellBuffer.h
src/stc/scintilla/src/Document.cxx
src/stc/scintilla/src/DocumentAccessor.cxx
src/stc/scintilla/src/DocumentAccessor.h
src/stc/scintilla/src/Editor.cxx
src/stc/scintilla/src/ExternalLexer.h
src/stc/scintilla/src/Indicator.cxx
src/stc/scintilla/src/KeyWords.cxx
src/stc/scintilla/src/LexAda.cxx
src/stc/scintilla/src/LexCSS.cxx
src/stc/scintilla/src/LexEScript.cxx
src/stc/scintilla/src/LexHTML.cxx
src/stc/scintilla/src/LexLua.cxx
src/stc/scintilla/src/LexMMIXAL.cxx [new file with mode: 0644]
src/stc/scintilla/src/LexNsis.cxx [new file with mode: 0644]
src/stc/scintilla/src/LexOthers.cxx
src/stc/scintilla/src/LexPOV.cxx
src/stc/scintilla/src/LexPS.cxx [new file with mode: 0644]
src/stc/scintilla/src/LexPascal.cxx
src/stc/scintilla/src/LexSQL.cxx
src/stc/scintilla/src/LexScriptol.cxx [new file with mode: 0644]
src/stc/scintilla/src/PropSet.cxx
src/stc/scintilla/src/RESearch.cxx
src/stc/scintilla/src/RESearch.h
src/stc/scintilla/src/SVector.h
src/stc/scintilla/src/ScintillaBase.cxx
src/stc/scintilla/src/ScintillaBase.h
src/stc/scintilla/src/Style.cxx
src/stc/scintilla/src/Style.h
src/stc/scintilla/src/WindowAccessor.cxx
src/stc/scintilla/src/XPM.cxx
src/stc/stc.cpp
src/stc/stc.cpp.in
src/stc/stc.h.in

index 021858839a8ed837821f885019f1fcf4da49db95..1cc3646e77f2dbe31a427946aacc122771ac71b5 100644 (file)
@@ -61,14 +61,18 @@ STCDLL_OBJECTS =  \
        $(OBJS)\stcdll_LexLisp.obj \
        $(OBJS)\stcdll_LexLout.obj \
        $(OBJS)\stcdll_LexLua.obj \
        $(OBJS)\stcdll_LexLisp.obj \
        $(OBJS)\stcdll_LexLout.obj \
        $(OBJS)\stcdll_LexLua.obj \
+       $(OBJS)\stcdll_LexMMIXAL.obj \
        $(OBJS)\stcdll_LexMatlab.obj \
        $(OBJS)\stcdll_LexMatlab.obj \
+       $(OBJS)\stcdll_LexNsis.obj \
        $(OBJS)\stcdll_LexOthers.obj \
        $(OBJS)\stcdll_LexPOV.obj \
        $(OBJS)\stcdll_LexOthers.obj \
        $(OBJS)\stcdll_LexPOV.obj \
+       $(OBJS)\stcdll_LexPS.obj \
        $(OBJS)\stcdll_LexPascal.obj \
        $(OBJS)\stcdll_LexPerl.obj \
        $(OBJS)\stcdll_LexPython.obj \
        $(OBJS)\stcdll_LexRuby.obj \
        $(OBJS)\stcdll_LexSQL.obj \
        $(OBJS)\stcdll_LexPascal.obj \
        $(OBJS)\stcdll_LexPerl.obj \
        $(OBJS)\stcdll_LexPython.obj \
        $(OBJS)\stcdll_LexRuby.obj \
        $(OBJS)\stcdll_LexSQL.obj \
+       $(OBJS)\stcdll_LexScriptol.obj \
        $(OBJS)\stcdll_LexVB.obj \
        $(OBJS)\stcdll_LineMarker.obj \
        $(OBJS)\stcdll_PropSet.obj \
        $(OBJS)\stcdll_LexVB.obj \
        $(OBJS)\stcdll_LineMarker.obj \
        $(OBJS)\stcdll_PropSet.obj \
@@ -117,14 +121,18 @@ STCLIB_OBJECTS =  \
        $(OBJS)\stclib_LexLisp.obj \
        $(OBJS)\stclib_LexLout.obj \
        $(OBJS)\stclib_LexLua.obj \
        $(OBJS)\stclib_LexLisp.obj \
        $(OBJS)\stclib_LexLout.obj \
        $(OBJS)\stclib_LexLua.obj \
+       $(OBJS)\stclib_LexMMIXAL.obj \
        $(OBJS)\stclib_LexMatlab.obj \
        $(OBJS)\stclib_LexMatlab.obj \
+       $(OBJS)\stclib_LexNsis.obj \
        $(OBJS)\stclib_LexOthers.obj \
        $(OBJS)\stclib_LexPOV.obj \
        $(OBJS)\stclib_LexOthers.obj \
        $(OBJS)\stclib_LexPOV.obj \
+       $(OBJS)\stclib_LexPS.obj \
        $(OBJS)\stclib_LexPascal.obj \
        $(OBJS)\stclib_LexPerl.obj \
        $(OBJS)\stclib_LexPython.obj \
        $(OBJS)\stclib_LexRuby.obj \
        $(OBJS)\stclib_LexSQL.obj \
        $(OBJS)\stclib_LexPascal.obj \
        $(OBJS)\stclib_LexPerl.obj \
        $(OBJS)\stclib_LexPython.obj \
        $(OBJS)\stclib_LexRuby.obj \
        $(OBJS)\stclib_LexSQL.obj \
+       $(OBJS)\stclib_LexScriptol.obj \
        $(OBJS)\stclib_LexVB.obj \
        $(OBJS)\stclib_LineMarker.obj \
        $(OBJS)\stclib_PropSet.obj \
        $(OBJS)\stclib_LexVB.obj \
        $(OBJS)\stclib_LineMarker.obj \
        $(OBJS)\stclib_PropSet.obj \
@@ -336,15 +344,24 @@ $(OBJS)\stcdll_LexLout.obj: ../../src/stc\scintilla\src\LexLout.cxx
 $(OBJS)\stcdll_LexLua.obj: ../../src/stc\scintilla\src\LexLua.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexLua.obj: ../../src/stc\scintilla\src\LexLua.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
+$(OBJS)\stcdll_LexMMIXAL.obj: ../../src/stc\scintilla\src\LexMMIXAL.cxx
+       $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
+
 $(OBJS)\stcdll_LexMatlab.obj: ../../src/stc\scintilla\src\LexMatlab.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexMatlab.obj: ../../src/stc\scintilla\src\LexMatlab.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
+$(OBJS)\stcdll_LexNsis.obj: ../../src/stc\scintilla\src\LexNsis.cxx
+       $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
+
 $(OBJS)\stcdll_LexOthers.obj: ../../src/stc\scintilla\src\LexOthers.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexPOV.obj: ../../src/stc\scintilla\src\LexPOV.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexOthers.obj: ../../src/stc\scintilla\src\LexOthers.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexPOV.obj: ../../src/stc\scintilla\src\LexPOV.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
+$(OBJS)\stcdll_LexPS.obj: ../../src/stc\scintilla\src\LexPS.cxx
+       $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
+
 $(OBJS)\stcdll_LexPascal.obj: ../../src/stc\scintilla\src\LexPascal.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexPascal.obj: ../../src/stc\scintilla\src\LexPascal.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
@@ -360,6 +377,9 @@ $(OBJS)\stcdll_LexRuby.obj: ../../src/stc\scintilla\src\LexRuby.cxx
 $(OBJS)\stcdll_LexSQL.obj: ../../src/stc\scintilla\src\LexSQL.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexSQL.obj: ../../src/stc\scintilla\src\LexSQL.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
+$(OBJS)\stcdll_LexScriptol.obj: ../../src/stc\scintilla\src\LexScriptol.cxx
+       $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
+
 $(OBJS)\stcdll_LexVB.obj: ../../src/stc\scintilla\src\LexVB.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexVB.obj: ../../src/stc\scintilla\src\LexVB.cxx
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) $**
 
@@ -483,15 +503,24 @@ $(OBJS)\stclib_LexLout.obj: ../../src/stc\scintilla\src\LexLout.cxx
 $(OBJS)\stclib_LexLua.obj: ../../src/stc\scintilla\src\LexLua.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexLua.obj: ../../src/stc\scintilla\src\LexLua.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
+$(OBJS)\stclib_LexMMIXAL.obj: ../../src/stc\scintilla\src\LexMMIXAL.cxx
+       $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
+
 $(OBJS)\stclib_LexMatlab.obj: ../../src/stc\scintilla\src\LexMatlab.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexMatlab.obj: ../../src/stc\scintilla\src\LexMatlab.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
+$(OBJS)\stclib_LexNsis.obj: ../../src/stc\scintilla\src\LexNsis.cxx
+       $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
+
 $(OBJS)\stclib_LexOthers.obj: ../../src/stc\scintilla\src\LexOthers.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexPOV.obj: ../../src/stc\scintilla\src\LexPOV.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexOthers.obj: ../../src/stc\scintilla\src\LexOthers.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexPOV.obj: ../../src/stc\scintilla\src\LexPOV.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
+$(OBJS)\stclib_LexPS.obj: ../../src/stc\scintilla\src\LexPS.cxx
+       $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
+
 $(OBJS)\stclib_LexPascal.obj: ../../src/stc\scintilla\src\LexPascal.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexPascal.obj: ../../src/stc\scintilla\src\LexPascal.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
@@ -507,6 +536,9 @@ $(OBJS)\stclib_LexRuby.obj: ../../src/stc\scintilla\src\LexRuby.cxx
 $(OBJS)\stclib_LexSQL.obj: ../../src/stc\scintilla\src\LexSQL.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexSQL.obj: ../../src/stc\scintilla\src\LexSQL.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
+$(OBJS)\stclib_LexScriptol.obj: ../../src/stc\scintilla\src\LexScriptol.cxx
+       $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
+
 $(OBJS)\stclib_LexVB.obj: ../../src/stc\scintilla\src\LexVB.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexVB.obj: ../../src/stc\scintilla\src\LexVB.cxx
        $(CXX) -q -c -P -o$@ $(STCLIB_CXXFLAGS) $**
 
index dfe2c5d56d89191544098937f0bc4981a5544f43..4010bfe3c2ee4d216f4b8803acbe0daf8460a78f 100644 (file)
@@ -53,14 +53,18 @@ STCDLL_OBJECTS =  \
        $(OBJS)\stcdll_LexLisp.o \
        $(OBJS)\stcdll_LexLout.o \
        $(OBJS)\stcdll_LexLua.o \
        $(OBJS)\stcdll_LexLisp.o \
        $(OBJS)\stcdll_LexLout.o \
        $(OBJS)\stcdll_LexLua.o \
+       $(OBJS)\stcdll_LexMMIXAL.o \
        $(OBJS)\stcdll_LexMatlab.o \
        $(OBJS)\stcdll_LexMatlab.o \
+       $(OBJS)\stcdll_LexNsis.o \
        $(OBJS)\stcdll_LexOthers.o \
        $(OBJS)\stcdll_LexPOV.o \
        $(OBJS)\stcdll_LexOthers.o \
        $(OBJS)\stcdll_LexPOV.o \
+       $(OBJS)\stcdll_LexPS.o \
        $(OBJS)\stcdll_LexPascal.o \
        $(OBJS)\stcdll_LexPerl.o \
        $(OBJS)\stcdll_LexPython.o \
        $(OBJS)\stcdll_LexRuby.o \
        $(OBJS)\stcdll_LexSQL.o \
        $(OBJS)\stcdll_LexPascal.o \
        $(OBJS)\stcdll_LexPerl.o \
        $(OBJS)\stcdll_LexPython.o \
        $(OBJS)\stcdll_LexRuby.o \
        $(OBJS)\stcdll_LexSQL.o \
+       $(OBJS)\stcdll_LexScriptol.o \
        $(OBJS)\stcdll_LexVB.o \
        $(OBJS)\stcdll_LineMarker.o \
        $(OBJS)\stcdll_PropSet.o \
        $(OBJS)\stcdll_LexVB.o \
        $(OBJS)\stcdll_LineMarker.o \
        $(OBJS)\stcdll_PropSet.o \
@@ -108,14 +112,18 @@ STCLIB_OBJECTS =  \
        $(OBJS)\stclib_LexLisp.o \
        $(OBJS)\stclib_LexLout.o \
        $(OBJS)\stclib_LexLua.o \
        $(OBJS)\stclib_LexLisp.o \
        $(OBJS)\stclib_LexLout.o \
        $(OBJS)\stclib_LexLua.o \
+       $(OBJS)\stclib_LexMMIXAL.o \
        $(OBJS)\stclib_LexMatlab.o \
        $(OBJS)\stclib_LexMatlab.o \
+       $(OBJS)\stclib_LexNsis.o \
        $(OBJS)\stclib_LexOthers.o \
        $(OBJS)\stclib_LexPOV.o \
        $(OBJS)\stclib_LexOthers.o \
        $(OBJS)\stclib_LexPOV.o \
+       $(OBJS)\stclib_LexPS.o \
        $(OBJS)\stclib_LexPascal.o \
        $(OBJS)\stclib_LexPerl.o \
        $(OBJS)\stclib_LexPython.o \
        $(OBJS)\stclib_LexRuby.o \
        $(OBJS)\stclib_LexSQL.o \
        $(OBJS)\stclib_LexPascal.o \
        $(OBJS)\stclib_LexPerl.o \
        $(OBJS)\stclib_LexPython.o \
        $(OBJS)\stclib_LexRuby.o \
        $(OBJS)\stclib_LexSQL.o \
+       $(OBJS)\stclib_LexScriptol.o \
        $(OBJS)\stclib_LexVB.o \
        $(OBJS)\stclib_LineMarker.o \
        $(OBJS)\stclib_PropSet.o \
        $(OBJS)\stclib_LexVB.o \
        $(OBJS)\stclib_LineMarker.o \
        $(OBJS)\stclib_PropSet.o \
@@ -326,15 +334,24 @@ $(OBJS)\stcdll_LexLout.o: ../../src/stc/scintilla/src/LexLout.cxx
 $(OBJS)\stcdll_LexLua.o: ../../src/stc/scintilla/src/LexLua.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexLua.o: ../../src/stc/scintilla/src/LexLua.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
+$(OBJS)\stcdll_LexMMIXAL.o: ../../src/stc/scintilla/src/LexMMIXAL.cxx
+       $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
+
 $(OBJS)\stcdll_LexMatlab.o: ../../src/stc/scintilla/src/LexMatlab.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexMatlab.o: ../../src/stc/scintilla/src/LexMatlab.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
+$(OBJS)\stcdll_LexNsis.o: ../../src/stc/scintilla/src/LexNsis.cxx
+       $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
+
 $(OBJS)\stcdll_LexOthers.o: ../../src/stc/scintilla/src/LexOthers.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexPOV.o: ../../src/stc/scintilla/src/LexPOV.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexOthers.o: ../../src/stc/scintilla/src/LexOthers.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexPOV.o: ../../src/stc/scintilla/src/LexPOV.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
+$(OBJS)\stcdll_LexPS.o: ../../src/stc/scintilla/src/LexPS.cxx
+       $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
+
 $(OBJS)\stcdll_LexPascal.o: ../../src/stc/scintilla/src/LexPascal.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexPascal.o: ../../src/stc/scintilla/src/LexPascal.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
@@ -350,6 +367,9 @@ $(OBJS)\stcdll_LexRuby.o: ../../src/stc/scintilla/src/LexRuby.cxx
 $(OBJS)\stcdll_LexSQL.o: ../../src/stc/scintilla/src/LexSQL.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexSQL.o: ../../src/stc/scintilla/src/LexSQL.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
+$(OBJS)\stcdll_LexScriptol.o: ../../src/stc/scintilla/src/LexScriptol.cxx
+       $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
+
 $(OBJS)\stcdll_LexVB.o: ../../src/stc/scintilla/src/LexVB.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexVB.o: ../../src/stc/scintilla/src/LexVB.cxx
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
@@ -473,15 +493,24 @@ $(OBJS)\stclib_LexLout.o: ../../src/stc/scintilla/src/LexLout.cxx
 $(OBJS)\stclib_LexLua.o: ../../src/stc/scintilla/src/LexLua.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexLua.o: ../../src/stc/scintilla/src/LexLua.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
+$(OBJS)\stclib_LexMMIXAL.o: ../../src/stc/scintilla/src/LexMMIXAL.cxx
+       $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
+
 $(OBJS)\stclib_LexMatlab.o: ../../src/stc/scintilla/src/LexMatlab.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexMatlab.o: ../../src/stc/scintilla/src/LexMatlab.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
+$(OBJS)\stclib_LexNsis.o: ../../src/stc/scintilla/src/LexNsis.cxx
+       $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
+
 $(OBJS)\stclib_LexOthers.o: ../../src/stc/scintilla/src/LexOthers.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexPOV.o: ../../src/stc/scintilla/src/LexPOV.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexOthers.o: ../../src/stc/scintilla/src/LexOthers.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexPOV.o: ../../src/stc/scintilla/src/LexPOV.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
+$(OBJS)\stclib_LexPS.o: ../../src/stc/scintilla/src/LexPS.cxx
+       $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
+
 $(OBJS)\stclib_LexPascal.o: ../../src/stc/scintilla/src/LexPascal.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexPascal.o: ../../src/stc/scintilla/src/LexPascal.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
@@ -497,6 +526,9 @@ $(OBJS)\stclib_LexRuby.o: ../../src/stc/scintilla/src/LexRuby.cxx
 $(OBJS)\stclib_LexSQL.o: ../../src/stc/scintilla/src/LexSQL.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexSQL.o: ../../src/stc/scintilla/src/LexSQL.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
+$(OBJS)\stclib_LexScriptol.o: ../../src/stc/scintilla/src/LexScriptol.cxx
+       $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
+
 $(OBJS)\stclib_LexVB.o: ../../src/stc/scintilla/src/LexVB.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexVB.o: ../../src/stc/scintilla/src/LexVB.cxx
        $(CXX) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
index 77683782d4c339c65f2bc1d0832b4f3105bd9cdb..c6f2d9d0a8caed8ffb68066a3164e271c37417ad 100644 (file)
@@ -56,14 +56,18 @@ STCDLL_OBJECTS =  \
        $(OBJS)\stcdll_LexLisp.obj \
        $(OBJS)\stcdll_LexLout.obj \
        $(OBJS)\stcdll_LexLua.obj \
        $(OBJS)\stcdll_LexLisp.obj \
        $(OBJS)\stcdll_LexLout.obj \
        $(OBJS)\stcdll_LexLua.obj \
+       $(OBJS)\stcdll_LexMMIXAL.obj \
        $(OBJS)\stcdll_LexMatlab.obj \
        $(OBJS)\stcdll_LexMatlab.obj \
+       $(OBJS)\stcdll_LexNsis.obj \
        $(OBJS)\stcdll_LexOthers.obj \
        $(OBJS)\stcdll_LexPOV.obj \
        $(OBJS)\stcdll_LexOthers.obj \
        $(OBJS)\stcdll_LexPOV.obj \
+       $(OBJS)\stcdll_LexPS.obj \
        $(OBJS)\stcdll_LexPascal.obj \
        $(OBJS)\stcdll_LexPerl.obj \
        $(OBJS)\stcdll_LexPython.obj \
        $(OBJS)\stcdll_LexRuby.obj \
        $(OBJS)\stcdll_LexSQL.obj \
        $(OBJS)\stcdll_LexPascal.obj \
        $(OBJS)\stcdll_LexPerl.obj \
        $(OBJS)\stcdll_LexPython.obj \
        $(OBJS)\stcdll_LexRuby.obj \
        $(OBJS)\stcdll_LexSQL.obj \
+       $(OBJS)\stcdll_LexScriptol.obj \
        $(OBJS)\stcdll_LexVB.obj \
        $(OBJS)\stcdll_LineMarker.obj \
        $(OBJS)\stcdll_PropSet.obj \
        $(OBJS)\stcdll_LexVB.obj \
        $(OBJS)\stcdll_LineMarker.obj \
        $(OBJS)\stcdll_PropSet.obj \
@@ -115,14 +119,18 @@ STCLIB_OBJECTS =  \
        $(OBJS)\stclib_LexLisp.obj \
        $(OBJS)\stclib_LexLout.obj \
        $(OBJS)\stclib_LexLua.obj \
        $(OBJS)\stclib_LexLisp.obj \
        $(OBJS)\stclib_LexLout.obj \
        $(OBJS)\stclib_LexLua.obj \
+       $(OBJS)\stclib_LexMMIXAL.obj \
        $(OBJS)\stclib_LexMatlab.obj \
        $(OBJS)\stclib_LexMatlab.obj \
+       $(OBJS)\stclib_LexNsis.obj \
        $(OBJS)\stclib_LexOthers.obj \
        $(OBJS)\stclib_LexPOV.obj \
        $(OBJS)\stclib_LexOthers.obj \
        $(OBJS)\stclib_LexPOV.obj \
+       $(OBJS)\stclib_LexPS.obj \
        $(OBJS)\stclib_LexPascal.obj \
        $(OBJS)\stclib_LexPerl.obj \
        $(OBJS)\stclib_LexPython.obj \
        $(OBJS)\stclib_LexRuby.obj \
        $(OBJS)\stclib_LexSQL.obj \
        $(OBJS)\stclib_LexPascal.obj \
        $(OBJS)\stclib_LexPerl.obj \
        $(OBJS)\stclib_LexPython.obj \
        $(OBJS)\stclib_LexRuby.obj \
        $(OBJS)\stclib_LexSQL.obj \
+       $(OBJS)\stclib_LexScriptol.obj \
        $(OBJS)\stclib_LexVB.obj \
        $(OBJS)\stclib_LineMarker.obj \
        $(OBJS)\stclib_PropSet.obj \
        $(OBJS)\stclib_LexVB.obj \
        $(OBJS)\stclib_LineMarker.obj \
        $(OBJS)\stclib_PropSet.obj \
@@ -406,15 +414,24 @@ $(OBJS)\stcdll_LexLout.obj: ../../src/stc\scintilla\src\LexLout.cxx
 $(OBJS)\stcdll_LexLua.obj: ../../src/stc\scintilla\src\LexLua.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexLua.obj: ../../src/stc\scintilla\src\LexLua.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
+$(OBJS)\stcdll_LexMMIXAL.obj: ../../src/stc\scintilla\src\LexMMIXAL.cxx
+       $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
+
 $(OBJS)\stcdll_LexMatlab.obj: ../../src/stc\scintilla\src\LexMatlab.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexMatlab.obj: ../../src/stc\scintilla\src\LexMatlab.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
+$(OBJS)\stcdll_LexNsis.obj: ../../src/stc\scintilla\src\LexNsis.cxx
+       $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
+
 $(OBJS)\stcdll_LexOthers.obj: ../../src/stc\scintilla\src\LexOthers.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexPOV.obj: ../../src/stc\scintilla\src\LexPOV.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexOthers.obj: ../../src/stc\scintilla\src\LexOthers.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexPOV.obj: ../../src/stc\scintilla\src\LexPOV.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
+$(OBJS)\stcdll_LexPS.obj: ../../src/stc\scintilla\src\LexPS.cxx
+       $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
+
 $(OBJS)\stcdll_LexPascal.obj: ../../src/stc\scintilla\src\LexPascal.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexPascal.obj: ../../src/stc\scintilla\src\LexPascal.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
@@ -430,6 +447,9 @@ $(OBJS)\stcdll_LexRuby.obj: ../../src/stc\scintilla\src\LexRuby.cxx
 $(OBJS)\stcdll_LexSQL.obj: ../../src/stc\scintilla\src\LexSQL.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexSQL.obj: ../../src/stc\scintilla\src\LexSQL.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
+$(OBJS)\stcdll_LexScriptol.obj: ../../src/stc\scintilla\src\LexScriptol.cxx
+       $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
+
 $(OBJS)\stcdll_LexVB.obj: ../../src/stc\scintilla\src\LexVB.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
 $(OBJS)\stcdll_LexVB.obj: ../../src/stc\scintilla\src\LexVB.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) $**
 
@@ -553,15 +573,24 @@ $(OBJS)\stclib_LexLout.obj: ../../src/stc\scintilla\src\LexLout.cxx
 $(OBJS)\stclib_LexLua.obj: ../../src/stc\scintilla\src\LexLua.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexLua.obj: ../../src/stc\scintilla\src\LexLua.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
+$(OBJS)\stclib_LexMMIXAL.obj: ../../src/stc\scintilla\src\LexMMIXAL.cxx
+       $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
+
 $(OBJS)\stclib_LexMatlab.obj: ../../src/stc\scintilla\src\LexMatlab.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexMatlab.obj: ../../src/stc\scintilla\src\LexMatlab.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
+$(OBJS)\stclib_LexNsis.obj: ../../src/stc\scintilla\src\LexNsis.cxx
+       $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
+
 $(OBJS)\stclib_LexOthers.obj: ../../src/stc\scintilla\src\LexOthers.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexPOV.obj: ../../src/stc\scintilla\src\LexPOV.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexOthers.obj: ../../src/stc\scintilla\src\LexOthers.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexPOV.obj: ../../src/stc\scintilla\src\LexPOV.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
+$(OBJS)\stclib_LexPS.obj: ../../src/stc\scintilla\src\LexPS.cxx
+       $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
+
 $(OBJS)\stclib_LexPascal.obj: ../../src/stc\scintilla\src\LexPascal.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexPascal.obj: ../../src/stc\scintilla\src\LexPascal.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
@@ -577,6 +606,9 @@ $(OBJS)\stclib_LexRuby.obj: ../../src/stc\scintilla\src\LexRuby.cxx
 $(OBJS)\stclib_LexSQL.obj: ../../src/stc\scintilla\src\LexSQL.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexSQL.obj: ../../src/stc\scintilla\src\LexSQL.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
+$(OBJS)\stclib_LexScriptol.obj: ../../src/stc\scintilla\src\LexScriptol.cxx
+       $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
+
 $(OBJS)\stclib_LexVB.obj: ../../src/stc\scintilla\src\LexVB.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
 $(OBJS)\stclib_LexVB.obj: ../../src/stc\scintilla\src\LexVB.cxx
        $(CXX) /c /nologo /TP /Fo$@ $(STCLIB_CXXFLAGS) $**
 
index 6d84572f912ffded7c5c05227829c74fa79debcf..ba70421354ab581a5f2867fff84400dd8fa88b82 100644 (file)
@@ -214,14 +214,18 @@ STCDLL_OBJECTS =  &
        $(OBJS)\stcdll_LexLisp.obj &
        $(OBJS)\stcdll_LexLout.obj &
        $(OBJS)\stcdll_LexLua.obj &
        $(OBJS)\stcdll_LexLisp.obj &
        $(OBJS)\stcdll_LexLout.obj &
        $(OBJS)\stcdll_LexLua.obj &
+       $(OBJS)\stcdll_LexMMIXAL.obj &
        $(OBJS)\stcdll_LexMatlab.obj &
        $(OBJS)\stcdll_LexMatlab.obj &
+       $(OBJS)\stcdll_LexNsis.obj &
        $(OBJS)\stcdll_LexOthers.obj &
        $(OBJS)\stcdll_LexPOV.obj &
        $(OBJS)\stcdll_LexOthers.obj &
        $(OBJS)\stcdll_LexPOV.obj &
+       $(OBJS)\stcdll_LexPS.obj &
        $(OBJS)\stcdll_LexPascal.obj &
        $(OBJS)\stcdll_LexPerl.obj &
        $(OBJS)\stcdll_LexPython.obj &
        $(OBJS)\stcdll_LexRuby.obj &
        $(OBJS)\stcdll_LexSQL.obj &
        $(OBJS)\stcdll_LexPascal.obj &
        $(OBJS)\stcdll_LexPerl.obj &
        $(OBJS)\stcdll_LexPython.obj &
        $(OBJS)\stcdll_LexRuby.obj &
        $(OBJS)\stcdll_LexSQL.obj &
+       $(OBJS)\stcdll_LexScriptol.obj &
        $(OBJS)\stcdll_LexVB.obj &
        $(OBJS)\stcdll_LineMarker.obj &
        $(OBJS)\stcdll_PropSet.obj &
        $(OBJS)\stcdll_LexVB.obj &
        $(OBJS)\stcdll_LineMarker.obj &
        $(OBJS)\stcdll_PropSet.obj &
@@ -270,14 +274,18 @@ STCLIB_OBJECTS =  &
        $(OBJS)\stclib_LexLisp.obj &
        $(OBJS)\stclib_LexLout.obj &
        $(OBJS)\stclib_LexLua.obj &
        $(OBJS)\stclib_LexLisp.obj &
        $(OBJS)\stclib_LexLout.obj &
        $(OBJS)\stclib_LexLua.obj &
+       $(OBJS)\stclib_LexMMIXAL.obj &
        $(OBJS)\stclib_LexMatlab.obj &
        $(OBJS)\stclib_LexMatlab.obj &
+       $(OBJS)\stclib_LexNsis.obj &
        $(OBJS)\stclib_LexOthers.obj &
        $(OBJS)\stclib_LexPOV.obj &
        $(OBJS)\stclib_LexOthers.obj &
        $(OBJS)\stclib_LexPOV.obj &
+       $(OBJS)\stclib_LexPS.obj &
        $(OBJS)\stclib_LexPascal.obj &
        $(OBJS)\stclib_LexPerl.obj &
        $(OBJS)\stclib_LexPython.obj &
        $(OBJS)\stclib_LexRuby.obj &
        $(OBJS)\stclib_LexSQL.obj &
        $(OBJS)\stclib_LexPascal.obj &
        $(OBJS)\stclib_LexPerl.obj &
        $(OBJS)\stclib_LexPython.obj &
        $(OBJS)\stclib_LexRuby.obj &
        $(OBJS)\stclib_LexSQL.obj &
+       $(OBJS)\stclib_LexScriptol.obj &
        $(OBJS)\stclib_LexVB.obj &
        $(OBJS)\stclib_LineMarker.obj &
        $(OBJS)\stclib_PropSet.obj &
        $(OBJS)\stclib_LexVB.obj &
        $(OBJS)\stclib_LineMarker.obj &
        $(OBJS)\stclib_PropSet.obj &
@@ -380,15 +388,24 @@ $(OBJS)\stcdll_LexLout.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexLout.cx
 $(OBJS)\stcdll_LexLua.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexLua.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexLua.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexLua.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
+$(OBJS)\stcdll_LexMMIXAL.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexMMIXAL.cxx
+       $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
+
 $(OBJS)\stcdll_LexMatlab.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexMatlab.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexMatlab.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexMatlab.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
+$(OBJS)\stcdll_LexNsis.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexNsis.cxx
+       $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
+
 $(OBJS)\stcdll_LexOthers.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexOthers.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexPOV.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexPOV.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexOthers.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexOthers.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexPOV.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexPOV.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
+$(OBJS)\stcdll_LexPS.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexPS.cxx
+       $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
+
 $(OBJS)\stcdll_LexPascal.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexPascal.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexPascal.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexPascal.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
@@ -404,6 +421,9 @@ $(OBJS)\stcdll_LexRuby.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexRuby.cx
 $(OBJS)\stcdll_LexSQL.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexSQL.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexSQL.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexSQL.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
+$(OBJS)\stcdll_LexScriptol.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexScriptol.cxx
+       $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
+
 $(OBJS)\stcdll_LexVB.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexVB.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
 $(OBJS)\stcdll_LexVB.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexVB.cxx
        $(CXX) -zq -fo=$^@ $(STCDLL_CXXFLAGS) $<
 
@@ -527,15 +547,24 @@ $(OBJS)\stclib_LexLout.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexLout.cx
 $(OBJS)\stclib_LexLua.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexLua.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexLua.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexLua.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
+$(OBJS)\stclib_LexMMIXAL.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexMMIXAL.cxx
+       $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
+
 $(OBJS)\stclib_LexMatlab.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexMatlab.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexMatlab.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexMatlab.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
+$(OBJS)\stclib_LexNsis.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexNsis.cxx
+       $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
+
 $(OBJS)\stclib_LexOthers.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexOthers.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexPOV.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexPOV.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexOthers.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexOthers.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexPOV.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexPOV.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
+$(OBJS)\stclib_LexPS.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexPS.cxx
+       $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
+
 $(OBJS)\stclib_LexPascal.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexPascal.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexPascal.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexPascal.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
@@ -551,6 +580,9 @@ $(OBJS)\stclib_LexRuby.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexRuby.cx
 $(OBJS)\stclib_LexSQL.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexSQL.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexSQL.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexSQL.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
+$(OBJS)\stclib_LexScriptol.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexScriptol.cxx
+       $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
+
 $(OBJS)\stclib_LexVB.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexVB.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
 $(OBJS)\stclib_LexVB.obj :  .AUTODEPEND ../../src/stc\scintilla\src\LexVB.cxx
        $(CXX) -zq -fo=$^@ $(STCLIB_CXXFLAGS) $<
 
index 083152732a7bb7ee43253cecc6146b8b376a896a..3d3d35d04e431aadeca9312640867b25c8efc67c 100644 (file)
         scintilla/src/LexLisp.cxx
         scintilla/src/LexLout.cxx
         scintilla/src/LexLua.cxx
         scintilla/src/LexLisp.cxx
         scintilla/src/LexLout.cxx
         scintilla/src/LexLua.cxx
+        scintilla/src/LexMMIXAL.cxx
         scintilla/src/LexMatlab.cxx
         scintilla/src/LexMatlab.cxx
+        scintilla/src/LexNsis.cxx
         scintilla/src/LexOthers.cxx
         scintilla/src/LexPOV.cxx
         scintilla/src/LexOthers.cxx
         scintilla/src/LexPOV.cxx
+        scintilla/src/LexPS.cxx
         scintilla/src/LexPascal.cxx
         scintilla/src/LexPerl.cxx
         scintilla/src/LexPython.cxx
         scintilla/src/LexRuby.cxx
         scintilla/src/LexSQL.cxx
         scintilla/src/LexPascal.cxx
         scintilla/src/LexPerl.cxx
         scintilla/src/LexPython.cxx
         scintilla/src/LexRuby.cxx
         scintilla/src/LexSQL.cxx
+        scintilla/src/LexScriptol.cxx
         scintilla/src/LexVB.cxx
         scintilla/src/LineMarker.cxx
         scintilla/src/PropSet.cxx
         scintilla/src/LexVB.cxx
         scintilla/src/LineMarker.cxx
         scintilla/src/PropSet.cxx
index e77a3858377dbb8309d9ed8652c4526bdb465b4d..80fe2fe0fe4b5f8d0289b621d0e0050fd14994e9 100644 (file)
@@ -560,10 +560,18 @@ SOURCE=../../src/stc\scintilla\src\LexLua.cxx
 # End Source File
 # Begin Source File
 
 # End Source File
 # Begin Source File
 
+SOURCE=../../src/stc\scintilla\src\LexMMIXAL.cxx
+# End Source File
+# Begin Source File
+
 SOURCE=../../src/stc\scintilla\src\LexMatlab.cxx
 # End Source File
 # Begin Source File
 
 SOURCE=../../src/stc\scintilla\src\LexMatlab.cxx
 # End Source File
 # Begin Source File
 
+SOURCE=../../src/stc\scintilla\src\LexNsis.cxx
+# End Source File
+# Begin Source File
+
 SOURCE=../../src/stc\scintilla\src\LexOthers.cxx
 # End Source File
 # Begin Source File
 SOURCE=../../src/stc\scintilla\src\LexOthers.cxx
 # End Source File
 # Begin Source File
@@ -572,6 +580,10 @@ SOURCE=../../src/stc\scintilla\src\LexPOV.cxx
 # End Source File
 # Begin Source File
 
 # End Source File
 # Begin Source File
 
+SOURCE=../../src/stc\scintilla\src\LexPS.cxx
+# End Source File
+# Begin Source File
+
 SOURCE=../../src/stc\scintilla\src\LexPascal.cxx
 # End Source File
 # Begin Source File
 SOURCE=../../src/stc\scintilla\src\LexPascal.cxx
 # End Source File
 # Begin Source File
@@ -592,6 +604,10 @@ SOURCE=../../src/stc\scintilla\src\LexSQL.cxx
 # End Source File
 # Begin Source File
 
 # End Source File
 # Begin Source File
 
+SOURCE=../../src/stc\scintilla\src\LexScriptol.cxx
+# End Source File
+# Begin Source File
+
 SOURCE=../../src/stc\scintilla\src\LexVB.cxx
 # End Source File
 # Begin Source File
 SOURCE=../../src/stc\scintilla\src\LexVB.cxx
 # End Source File
 # Begin Source File
index 91ea544d60ea7220f6b7e63645ce11883e4013a2..de090b647e532db90d263086d2c4c9a0144f7110 100644 (file)
 #define wxSTC_INDIC_TT 2
 #define wxSTC_INDIC_DIAGONAL 3
 #define wxSTC_INDIC_STRIKE 4
 #define wxSTC_INDIC_TT 2
 #define wxSTC_INDIC_DIAGONAL 3
 #define wxSTC_INDIC_STRIKE 4
+#define wxSTC_INDIC_HIDDEN 5
 #define wxSTC_INDIC0_MASK 0x20
 #define wxSTC_INDIC1_MASK 0x40
 #define wxSTC_INDIC2_MASK 0x80
 #define wxSTC_INDIC0_MASK 0x20
 #define wxSTC_INDIC1_MASK 0x40
 #define wxSTC_INDIC2_MASK 0x80
 // where most code reside, and the lines after the caret, eg. the body of a function.
 #define wxSTC_CARET_EVEN 0x08
 
 // where most code reside, and the lines after the caret, eg. the body of a function.
 #define wxSTC_CARET_EVEN 0x08
 
+// Maximum value of keywordSet parameter of SetKeyWords.
+#define wxSTC_KEYWORDSET_MAX 8
+
 // Notifications
 // Type of modification and the action which caused the modification.
 // These are defined as a bit mask to make it easy to specify which notifications are wanted.
 // Notifications
 // Type of modification and the action which caused the modification.
 // These are defined as a bit mask to make it easy to specify which notifications are wanted.
 #define wxSTC_LEX_POV 39
 #define wxSTC_LEX_LOUT 40
 #define wxSTC_LEX_ESCRIPT 41
 #define wxSTC_LEX_POV 39
 #define wxSTC_LEX_LOUT 40
 #define wxSTC_LEX_ESCRIPT 41
+#define wxSTC_LEX_PS 42
+#define wxSTC_LEX_NSIS 43
+#define wxSTC_LEX_MMIXAL 44
 
 // When a lexer specifies its language as SCLEX_AUTOMATIC it receives a
 // value assigned in sequence from SCLEX_AUTOMATIC+1.
 
 // When a lexer specifies its language as SCLEX_AUTOMATIC it receives a
 // value assigned in sequence from SCLEX_AUTOMATIC+1.
 #define wxSTC_LUA_WORD4 15
 #define wxSTC_LUA_WORD5 16
 #define wxSTC_LUA_WORD6 17
 #define wxSTC_LUA_WORD4 15
 #define wxSTC_LUA_WORD5 16
 #define wxSTC_LUA_WORD6 17
+#define wxSTC_LUA_WORD7 18
+#define wxSTC_LUA_WORD8 19
 
 // Lexical states for SCLEX_ERRORLIST
 #define wxSTC_ERR_DEFAULT 0
 
 // Lexical states for SCLEX_ERRORLIST
 #define wxSTC_ERR_DEFAULT 0
 #define wxSTC_POV_DEFAULT 0
 #define wxSTC_POV_COMMENT 1
 #define wxSTC_POV_COMMENTLINE 2
 #define wxSTC_POV_DEFAULT 0
 #define wxSTC_POV_COMMENT 1
 #define wxSTC_POV_COMMENTLINE 2
-#define wxSTC_POV_COMMENTDOC 3
-#define wxSTC_POV_NUMBER 4
-#define wxSTC_POV_WORD 5
+#define wxSTC_POV_NUMBER 3
+#define wxSTC_POV_OPERATOR 4
+#define wxSTC_POV_IDENTIFIER 5
 #define wxSTC_POV_STRING 6
 #define wxSTC_POV_STRING 6
-#define wxSTC_POV_OPERATOR 7
-#define wxSTC_POV_IDENTIFIER 8
-#define wxSTC_POV_BRACE 9
+#define wxSTC_POV_STRINGEOL 7
+#define wxSTC_POV_DIRECTIVE 8
+#define wxSTC_POV_BADDIRECTIVE 9
 #define wxSTC_POV_WORD2 10
 #define wxSTC_POV_WORD2 10
+#define wxSTC_POV_WORD3 11
+#define wxSTC_POV_WORD4 12
+#define wxSTC_POV_WORD5 13
+#define wxSTC_POV_WORD6 14
+#define wxSTC_POV_WORD7 15
+#define wxSTC_POV_WORD8 16
 
 // Lexical states for SCLEX_LOUT
 #define wxSTC_LOUT_DEFAULT 0
 
 // Lexical states for SCLEX_LOUT
 #define wxSTC_LOUT_DEFAULT 0
 #define wxSTC_ESCRIPT_WORD2 10
 #define wxSTC_ESCRIPT_WORD3 11
 
 #define wxSTC_ESCRIPT_WORD2 10
 #define wxSTC_ESCRIPT_WORD3 11
 
+// Lexical states for SCLEX_PS
+#define wxSTC_PS_DEFAULT 0
+#define wxSTC_PS_COMMENT 1
+#define wxSTC_PS_DSC_COMMENT 2
+#define wxSTC_PS_DSC_VALUE 3
+#define wxSTC_PS_NUMBER 4
+#define wxSTC_PS_NAME 5
+#define wxSTC_PS_KEYWORD 6
+#define wxSTC_PS_LITERAL 7
+#define wxSTC_PS_IMMEVAL 8
+#define wxSTC_PS_PAREN_ARRAY 9
+#define wxSTC_PS_PAREN_DICT 10
+#define wxSTC_PS_PAREN_PROC 11
+#define wxSTC_PS_TEXT 12
+#define wxSTC_PS_HEXSTRING 13
+#define wxSTC_PS_BASE85STRING 14
+#define wxSTC_PS_BADSTRINGCHAR 15
+
+// Lexical states for SCLEX_NSIS
+#define wxSTC_NSIS_DEFAULT 0
+#define wxSTC_NSIS_COMMENT 1
+#define wxSTC_NSIS_STRINGDQ 2
+#define wxSTC_NSIS_STRINGLQ 3
+#define wxSTC_NSIS_STRINGRQ 4
+#define wxSTC_NSIS_FUNCTION 5
+#define wxSTC_NSIS_VARIABLE 6
+#define wxSTC_NSIS_LABEL 7
+#define wxSTC_NSIS_USERDEFINED 8
+#define wxSTC_NSIS_SECTIONDEF 9
+#define wxSTC_NSIS_SUBSECTIONDEF 10
+#define wxSTC_NSIS_IFDEFINEDEF 11
+#define wxSTC_NSIS_MACRODEF 12
+#define wxSTC_NSIS_STRINGVAR 13
+
+// Lexical states for SCLEX_MMIXAL
+#define wxSTC_MMIXAL_LEADWS 0
+#define wxSTC_MMIXAL_COMMENT 1
+#define wxSTC_MMIXAL_LABEL 2
+#define wxSTC_MMIXAL_OPCODE 3
+#define wxSTC_MMIXAL_OPCODE_PRE 4
+#define wxSTC_MMIXAL_OPCODE_VALID 5
+#define wxSTC_MMIXAL_OPCODE_UNKNOWN 6
+#define wxSTC_MMIXAL_OPCODE_POST 7
+#define wxSTC_MMIXAL_OPERANDS 8
+#define wxSTC_MMIXAL_NUMBER 9
+#define wxSTC_MMIXAL_REF 10
+#define wxSTC_MMIXAL_CHAR 11
+#define wxSTC_MMIXAL_STRING 12
+#define wxSTC_MMIXAL_REGISTER 13
+#define wxSTC_MMIXAL_HEX 14
+#define wxSTC_MMIXAL_OPERATOR 15
+#define wxSTC_MMIXAL_SYMBOL 16
+#define wxSTC_MMIXAL_INCLUDE 17
+
 
 //-----------------------------------------
 // Commands that can be bound to keystrokes
 
 
 //-----------------------------------------
 // Commands that can be bound to keystrokes
 
+
 // Redoes the next action on the undo history.
 #define wxSTC_CMD_REDO 2011
 
 // Redoes the next action on the undo history.
 #define wxSTC_CMD_REDO 2011
 
@@ -2014,10 +2084,10 @@ public:
     bool GetMouseDownCaptures();
 
     // Sets the cursor to one of the SC_CURSOR* values.
     bool GetMouseDownCaptures();
 
     // Sets the cursor to one of the SC_CURSOR* values.
-    void SetCursor(int cursorType);
+    void SetSTCCursor(int cursorType);
 
     // Get cursor type.
 
     // Get cursor type.
-    int GetCursor();
+    int GetSTCCursor();
 
     // Change the way control characters are displayed:
     // If symbol is < 32, keep the drawn way, else, use the given character.
 
     // Change the way control characters are displayed:
     // If symbol is < 32, keep the drawn way, else, use the given character.
index 5a797fcdd741ebb23f03670bfc19483be1595664..a588610dadc2a446ac8b9ba5d2ce4df6135db040 100644 (file)
@@ -40,7 +40,9 @@ STCTEST_CXXFLAGS = $(CPPFLAGS) -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \
        -I$(srcdir)/../../../samples -I$(srcdir)/../../include $(CXXFLAGS)
 STCTEST_OBJECTS =  \
        $(__stctest___win32rc) \
        -I$(srcdir)/../../../samples -I$(srcdir)/../../include $(CXXFLAGS)
 STCTEST_OBJECTS =  \
        $(__stctest___win32rc) \
-       stctest_stctest.o
+       stctest_stctest.o \
+       stctest_edit.o \
+       stctest_prefs.o
 WX_VERSION = 2.5.1
 
 ### Conditionally set variables: ###
 WX_VERSION = 2.5.1
 
 ### Conditionally set variables: ###
@@ -102,7 +104,7 @@ COND_PLATFORM_OS2_1___stctest___os2_emxbindcmd = $(NM) stctest$(EXEEXT) | if \
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all: stctest$(EXEEXT) $(__stctest_bundle___depname) data
+all: stctest$(EXEEXT) $(__stctest_bundle___depname)
 
 clean: 
        rm -rf ./.deps ./.pch
 
 clean: 
        rm -rf ./.deps ./.pch
@@ -110,14 +112,6 @@ clean:
        rm -f stctest$(EXEEXT)
        rm -rf stctest.app
 
        rm -f stctest$(EXEEXT)
        rm -rf stctest.app
 
-data: 
-       @mkdir -p .
-       @for f in stctest.cpp; do \
-       if test \( ! -s ./$$f \) -o \( $(srcdir)/$$f -nt ./$$f  \) ; then \
-       cp -pRf $(srcdir)/$$f . ; \
-       fi; \
-       done
-
 distclean: clean
        rm -f configure config.cache config.log config.status bk-deps bk-make-pch shared-ld-sh Makefile
 
 distclean: clean
        rm -f configure config.cache config.log config.status bk-deps bk-make-pch shared-ld-sh Makefile
 
@@ -155,6 +149,12 @@ stctest.app/Contents/PkgInfo: stctest$(EXEEXT) $(top_srcdir)/src/mac/Info.plist.
 
 @COND_PLATFORM_MACOSX_1@stctest_bundle: stctest.app/Contents/PkgInfo
 
 
 @COND_PLATFORM_MACOSX_1@stctest_bundle: stctest.app/Contents/PkgInfo
 
+stctest_edit.o: $(srcdir)/edit.cpp
+       $(CXXC) -c -o $@ $(STCTEST_CXXFLAGS) $<
+
+stctest_prefs.o: $(srcdir)/prefs.cpp
+       $(CXXC) -c -o $@ $(STCTEST_CXXFLAGS) $<
+
 stctest_sample_rc.o: $(srcdir)/../../../samples/sample.rc
        $(RESCOMP) -i$< -o$@  --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_2)   --include-dir $(top_srcdir)/include --include-dir $(srcdir) $(__DLLFLAG_p_2) --include-dir $(srcdir)/../../../samples
 
 stctest_sample_rc.o: $(srcdir)/../../../samples/sample.rc
        $(RESCOMP) -i$< -o$@  --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_2)   --include-dir $(top_srcdir)/include --include-dir $(srcdir) $(__DLLFLAG_p_2) --include-dir $(srcdir)/../../../samples
 
@@ -167,4 +167,4 @@ uninstall:
 # Include dependency info, if present:
 @IF_GNU_MAKE@-include .deps/*.d
 
 # Include dependency info, if present:
 @IF_GNU_MAKE@-include .deps/*.d
 
-.PHONY: all clean data distclean install stctest_bundle uninstall
+.PHONY: all clean distclean install stctest_bundle uninstall
diff --git a/contrib/samples/stc/defsext.h b/contrib/samples/stc/defsext.h
new file mode 100644 (file)
index 0000000..eb55caf
--- /dev/null
@@ -0,0 +1,104 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        defsext.h extensions
+// Purpose:     STC test declarations
+// Maintainer:  Wyo
+// Created:     2003-09-01
+// RCS-ID:      $Id$
+// Copyright:   (c) wxGuide
+// Licence:     wxWindows licence
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_DEFSEXT_H_
+#define _WX_DEFSEXT_H_
+
+//----------------------------------------------------------------------------
+// headers
+//----------------------------------------------------------------------------
+
+//! wxWindows headers
+#include <wx/print.h>    // printing support
+#include <wx/printdlg.h> // printing dialog
+
+
+//============================================================================
+// declarations
+//============================================================================
+
+#define DEFAULT_LANGUAGE _("<default>")
+
+#define PAGE_COMMON _("Common")
+#define PAGE_LANGUAGES _("Languages")
+#define PAGE_STYLE_TYPES _("Style types")
+
+#define STYLE_TYPES_COUNT 32
+
+
+// ----------------------------------------------------------------------------
+// standard IDs
+// ----------------------------------------------------------------------------
+
+enum {
+    // menu IDs
+    myID_PROPERTIES = wxID_HIGHEST,
+    myID_INDENTINC,
+    myID_INDENTRED,
+    myID_FINDNEXT,
+    myID_REPLACE,
+    myID_REPLACENEXT,
+    myID_BRACEMATCH,
+    myID_GOTO,
+    myID_PAGEACTIVE,
+    myID_DISPLAYEOL,
+    myID_INDENTGUIDE,
+    myID_LINENUMBER,
+    myID_LONGLINEON,
+    myID_WHITESPACE,
+    myID_FOLDTOGGLE,
+    myID_OVERTYPE,
+    myID_READONLY,
+    myID_WRAPMODEON,
+    myID_CHANGECASE,
+    myID_CHANGELOWER,
+    myID_CHANGEUPPER,
+    myID_HILIGHTLANG,
+    myID_HILIGHTFIRST,
+    myID_HILIGHTLAST = myID_HILIGHTFIRST + 99,
+    myID_CONVERTEOL,
+    myID_CONVERTCR,
+    myID_CONVERTCRLF,
+    myID_CONVERTLF,
+    myID_USECHARSET,
+    myID_CHARSETANSI,
+    myID_CHARSETMAC,
+    myID_PAGEPREV,
+    myID_PAGENEXT,
+    myID_SELECTLINE,
+
+    // other IDs
+    myID_STATUSBAR,
+    myID_TITLEBAR,
+    myID_ABOUTTIMER,
+    myID_UPDATETIMER,
+
+    // dialog find IDs
+    myID_DLG_FIND_TEXT,
+
+    // preferences IDs
+    myID_PREFS_LANGUAGE,
+    myID_PREFS_STYLETYPE,
+    myID_PREFS_KEYWORDS,
+};
+
+// ----------------------------------------------------------------------------
+// global items
+// ----------------------------------------------------------------------------
+
+//! global application name
+extern wxString *g_appname;
+
+//! global print data, to remember settings during the session
+extern wxPrintData *g_printData;
+extern wxPageSetupData *g_pageSetupData;
+
+#endif // _WX_DEFSEXT_H_
+
diff --git a/contrib/samples/stc/edit.cpp b/contrib/samples/stc/edit.cpp
new file mode 100644 (file)
index 0000000..82ee732
--- /dev/null
@@ -0,0 +1,825 @@
+//////////////////////////////////////////////////////////////////////////////
+// File:        edit.cpp
+// Purpose:     STC test module
+// Maintainer:  Wyo
+// Created:     2003-09-01
+// RCS-ID:      $Id$
+// Copyright:   (c) wxGuide
+// Licence:     wxWindows licence
+//////////////////////////////////////////////////////////////////////////////
+
+//----------------------------------------------------------------------------
+// informations
+//----------------------------------------------------------------------------
+
+
+//----------------------------------------------------------------------------
+// headers
+//----------------------------------------------------------------------------
+
+// For compilers that support precompilation, includes <wx/wx.h>.
+#include <wx/wxprec.h>
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+// for all others, include the necessary headers (this file is usually all you
+// need because it includes almost all 'standard' wxWindows headers)
+#ifndef WX_PRECOMP
+    #include <wx/wx.h>
+#endif
+
+//! wxWindows headers
+#include <wx/file.h>     // raw file io support
+#include <wx/filename.h> // filename support
+
+//! application headers
+#include "defsext.h"     // additional definitions
+
+#include "edit.h"        // edit module
+
+
+//----------------------------------------------------------------------------
+// resources
+//----------------------------------------------------------------------------
+
+
+//============================================================================
+// declarations
+//============================================================================
+
+
+//============================================================================
+// implementation
+//============================================================================
+
+//----------------------------------------------------------------------------
+// Edit
+//----------------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE (Edit, wxStyledTextCtrl)
+    // common
+    EVT_SIZE (                         Edit::OnSize)
+    // edit
+    EVT_MENU (wxID_CLEAR,              Edit::OnEditClear)
+    EVT_MENU (wxID_CUT,                Edit::OnEditCut)
+    EVT_MENU (wxID_COPY,               Edit::OnEditCopy)
+    EVT_MENU (wxID_PASTE,              Edit::OnEditPaste)
+    EVT_MENU (myID_INDENTINC,          Edit::OnEditIndentInc)
+    EVT_MENU (myID_INDENTRED,          Edit::OnEditIndentRed)
+    EVT_MENU (wxID_SELECTALL,          Edit::OnEditSelectAll)
+    EVT_MENU (myID_SELECTLINE,         Edit::OnEditSelectLine)
+    EVT_MENU (wxID_REDO,               Edit::OnEditRedo)
+    EVT_MENU (wxID_UNDO,               Edit::OnEditUndo)
+    // find
+    EVT_MENU (wxID_FIND,               Edit::OnFind)
+    EVT_MENU (myID_FINDNEXT,           Edit::OnFindNext)
+    EVT_MENU (myID_REPLACE,            Edit::OnReplace)
+    EVT_MENU (myID_REPLACENEXT,        Edit::OnReplaceNext)
+    EVT_MENU (myID_BRACEMATCH,         Edit::OnBraceMatch)
+    EVT_MENU (myID_GOTO,               Edit::OnGoto)
+    // view
+    EVT_MENU_RANGE (myID_HILIGHTFIRST, myID_HILIGHTLAST,
+                                       Edit::OnHilightLang)
+    EVT_MENU (myID_DISPLAYEOL,         Edit::OnDisplayEOL)
+    EVT_MENU (myID_INDENTGUIDE,        Edit::OnIndentGuide)
+    EVT_MENU (myID_LINENUMBER,         Edit::OnLineNumber)
+    EVT_MENU (myID_LONGLINEON,         Edit::OnLongLineOn)
+    EVT_MENU (myID_WHITESPACE,         Edit::OnWhiteSpace)
+    EVT_MENU (myID_FOLDTOGGLE,         Edit::OnFoldToggle)
+    EVT_MENU (myID_OVERTYPE,           Edit::OnSetOverType)
+    EVT_MENU (myID_READONLY,           Edit::OnSetReadOnly)
+    EVT_MENU (myID_WRAPMODEON,         Edit::OnWrapmodeOn)
+    EVT_MENU (myID_CHARSETANSI,        Edit::OnUseCharset)
+    EVT_MENU (myID_CHARSETMAC,         Edit::OnUseCharset)
+    // extra
+    EVT_MENU (myID_CHANGELOWER,        Edit::OnChangeCase)
+    EVT_MENU (myID_CHANGEUPPER,        Edit::OnChangeCase)
+    EVT_MENU (myID_CONVERTCR,          Edit::OnConvertEOL)
+    EVT_MENU (myID_CONVERTCRLF,        Edit::OnConvertEOL)
+    EVT_MENU (myID_CONVERTLF,          Edit::OnConvertEOL)
+    // stc
+    EVT_STC_MARGINCLICK (-1,           Edit::OnMarginClick)
+    EVT_STC_CHARADDED (-1,             Edit::OnCharAdded)
+END_EVENT_TABLE()
+
+Edit::Edit (wxWindow *parent, wxWindowID id,
+            const wxPoint &pos,
+            const wxSize &size,
+            long style)
+    : wxStyledTextCtrl (parent, id, pos, size, style) {
+
+    m_filename = _T("");
+
+    m_LineNrID = 0;
+    m_DividerID = 1;
+    m_FoldingID = 2;
+
+    // initialize language
+    m_language = NULL;
+
+    // default font for all styles
+    SetViewEOL (g_CommonPrefs.displayEOLEnable);
+    SetIndentationGuides (g_CommonPrefs.indentGuideEnable);
+    SetEdgeMode (g_CommonPrefs.longLineOnEnable?
+                 wxSTC_EDGE_LINE: wxSTC_EDGE_NONE);
+    SetViewWhiteSpace (g_CommonPrefs.whiteSpaceEnable?
+                       wxSTC_WS_VISIBLEALWAYS: wxSTC_WS_INVISIBLE);
+    SetOvertype (g_CommonPrefs.overTypeInitial);
+    SetReadOnly (g_CommonPrefs.readOnlyInitial);
+    SetWrapMode (g_CommonPrefs.wrapModeInitial?
+                 wxSTC_WRAP_WORD: wxSTC_WRAP_NONE);
+    wxFont font (10, wxMODERN, wxNORMAL, wxNORMAL);
+    StyleSetFont (wxSTC_STYLE_DEFAULT, font);
+    StyleSetForeground (wxSTC_STYLE_DEFAULT, wxColour ("BLACK"));
+    StyleSetBackground (wxSTC_STYLE_DEFAULT, wxColour ("WHITE"));
+    StyleSetForeground (wxSTC_STYLE_LINENUMBER, wxColour ("DARK GREY"));
+    StyleSetBackground (wxSTC_STYLE_LINENUMBER, wxColour ("WHITE"));
+    StyleSetForeground(wxSTC_STYLE_INDENTGUIDE, wxColour ("DARK GREY"));
+    InitializePrefs (DEFAULT_LANGUAGE);
+
+    // set visibility
+    SetVisiblePolicy (wxSTC_VISIBLE_STRICT|wxSTC_VISIBLE_SLOP, 1);
+    SetXCaretPolicy (wxSTC_CARET_EVEN|wxSTC_VISIBLE_STRICT|wxSTC_CARET_SLOP, 1);
+    SetYCaretPolicy (wxSTC_CARET_EVEN|wxSTC_VISIBLE_STRICT|wxSTC_CARET_SLOP, 1);
+
+    // markers
+    MarkerDefine (wxSTC_MARKNUM_FOLDER,        wxSTC_MARK_DOTDOTDOT, "BLACK", "BLACK");
+    MarkerDefine (wxSTC_MARKNUM_FOLDEROPEN,    wxSTC_MARK_ARROWDOWN, "BLACK", "BLACK");
+    MarkerDefine (wxSTC_MARKNUM_FOLDERSUB,     wxSTC_MARK_EMPTY,     "BLACK", "BLACK");
+    MarkerDefine (wxSTC_MARKNUM_FOLDEREND,     wxSTC_MARK_DOTDOTDOT, "BLACK", "WHITE");
+    MarkerDefine (wxSTC_MARKNUM_FOLDEROPENMID, wxSTC_MARK_ARROWDOWN, "BLACK", "WHITE");
+    MarkerDefine (wxSTC_MARKNUM_FOLDERMIDTAIL, wxSTC_MARK_EMPTY,     "BLACK", "BLACK");
+    MarkerDefine (wxSTC_MARKNUM_FOLDERTAIL,    wxSTC_MARK_EMPTY,     "BLACK", "BLACK");
+
+    // miscelaneous
+    m_LineNrMargin = TextWidth (wxSTC_STYLE_LINENUMBER, _T("_999999"));
+    m_FoldingMargin = 16;
+    SetMarginWidth (m_LineNrID,
+                    g_CommonPrefs.lineNumberEnable? m_LineNrMargin: 0);
+    CmdKeyClear (wxSTC_KEY_TAB, 0); // this is done by the menu accelerator key
+    UsePopUp (0);
+    SetLayoutCache (wxSTC_CACHE_PAGE);
+
+}
+
+Edit::~Edit () {}
+
+//----------------------------------------------------------------------------
+// common event handlers
+void Edit::OnSize( wxSizeEvent& event ) {
+    int x = GetClientSize().x +
+            (g_CommonPrefs.lineNumberEnable? m_LineNrMargin: 0) +
+            (g_CommonPrefs.foldEnable? m_FoldingMargin: 0);
+    if (x > 0) SetScrollWidth (x);
+    event.Skip();
+}
+
+// edit event handlers
+void Edit::OnEditRedo (wxCommandEvent &WXUNUSED(event)) {
+    if (!CanRedo()) return;
+    Redo ();
+}
+
+void Edit::OnEditUndo (wxCommandEvent &WXUNUSED(event)) {
+    if (!CanUndo()) return;
+    Undo ();
+}
+
+void Edit::OnEditClear (wxCommandEvent &WXUNUSED(event)) {
+    if (GetReadOnly()) return;
+    Clear ();
+}
+
+void Edit::OnEditCut (wxCommandEvent &WXUNUSED(event)) {
+    if (GetReadOnly() || (GetSelectionEnd()-GetSelectionStart() <= 0)) return;
+    Cut ();
+}
+
+void Edit::OnEditCopy (wxCommandEvent &WXUNUSED(event)) {
+    if (GetSelectionEnd()-GetSelectionStart() <= 0) return;
+    Copy ();
+}
+
+void Edit::OnEditPaste (wxCommandEvent &WXUNUSED(event)) {
+    if (!CanPaste()) return;
+    Paste ();
+}
+
+void Edit::OnFind (wxCommandEvent &WXUNUSED(event)) {
+}
+
+void Edit::OnFindNext (wxCommandEvent &WXUNUSED(event)) {
+}
+
+void Edit::OnReplace (wxCommandEvent &WXUNUSED(event)) {
+}
+
+void Edit::OnReplaceNext (wxCommandEvent &WXUNUSED(event)) {
+}
+
+void Edit::OnBraceMatch (wxCommandEvent &WXUNUSED(event)) {
+    int min = GetCurrentPos ();
+    int max = BraceMatch (min);
+    if (max > (min+1)) {
+        BraceHighlight (min+1, max);
+        SetSelection (min+1, max);
+    }else{
+        BraceBadLight (min);
+    }
+}
+
+void Edit::OnGoto (wxCommandEvent &WXUNUSED(event)) {
+}
+
+void Edit::OnEditIndentInc (wxCommandEvent &event) {
+    CmdKeyExecute (wxSTC_CMD_TAB);
+}
+
+void Edit::OnEditIndentRed (wxCommandEvent &event) {
+    CmdKeyExecute (wxSTC_CMD_DELETEBACK);
+}
+
+void Edit::OnEditSelectAll (wxCommandEvent &WXUNUSED(event)) {
+    SetSelection (0, GetTextLength ());
+}
+
+void Edit::OnEditSelectLine (wxCommandEvent &WXUNUSED(event)) {
+    int lineStart = PositionFromLine (GetCurrentLine());
+    int lineEnd = PositionFromLine (GetCurrentLine() + 1);
+    SetSelection (lineStart, lineEnd);
+}
+
+void Edit::OnHilightLang (wxCommandEvent &event) {
+    InitializePrefs (g_LanguagePrefs [event.GetId() - myID_HILIGHTFIRST].name);
+}
+
+void Edit::OnDisplayEOL (wxCommandEvent &WXUNUSED(event)) {
+    SetViewEOL (!GetViewEOL());
+}
+
+void Edit::OnIndentGuide (wxCommandEvent &WXUNUSED(event)) {
+    SetIndentationGuides (!GetIndentationGuides());
+}
+
+void Edit::OnLineNumber (wxCommandEvent &WXUNUSED(event)) {
+    SetMarginWidth (m_LineNrID,
+                    GetMarginWidth (m_LineNrID) == 0? m_LineNrMargin: 0);
+}
+
+void Edit::OnLongLineOn (wxCommandEvent &WXUNUSED(event)) {
+    SetEdgeMode (GetEdgeMode() == 0? wxSTC_EDGE_LINE: wxSTC_EDGE_NONE);
+}
+
+void Edit::OnWhiteSpace (wxCommandEvent &WXUNUSED(event)) {
+    SetViewWhiteSpace (GetViewWhiteSpace() == 0?
+                       wxSTC_WS_VISIBLEALWAYS: wxSTC_WS_INVISIBLE);
+}
+
+void Edit::OnFoldToggle (wxCommandEvent &WXUNUSED(event)) {
+    ToggleFold (GetFoldParent(GetCurrentLine()));
+}
+
+void Edit::OnSetOverType (wxCommandEvent &WXUNUSED(event)) {
+    SetOvertype (!GetOvertype());
+}
+
+void Edit::OnSetReadOnly (wxCommandEvent &WXUNUSED(event)) {
+    SetReadOnly (!GetReadOnly());
+}
+
+void Edit::OnWrapmodeOn (wxCommandEvent &WXUNUSED(event)) {
+    SetWrapMode (GetWrapMode() == 0? wxSTC_WRAP_WORD: wxSTC_WRAP_NONE);
+}
+
+void Edit::OnUseCharset (wxCommandEvent &event) {
+    int Nr;
+    int charset = GetCodePage();
+    switch (event.GetId()) {
+        case myID_CHARSETANSI: {charset = wxSTC_CHARSET_ANSI; break;}
+        case myID_CHARSETMAC: {charset = wxSTC_CHARSET_ANSI; break;}
+    }
+    for (Nr = 0; Nr < wxSTC_STYLE_LASTPREDEFINED; Nr++) {
+        StyleSetCharacterSet (Nr, charset);
+    }
+    SetCodePage (charset);
+}
+
+void Edit::OnChangeCase (wxCommandEvent &event) {
+    switch (event.GetId()) {
+        case myID_CHANGELOWER: {
+            CmdKeyExecute (wxSTC_CMD_LOWERCASE);
+            break;
+        }
+        case myID_CHANGEUPPER: {
+            CmdKeyExecute (wxSTC_CMD_UPPERCASE);
+            break;
+        }
+    }
+}
+
+void Edit::OnConvertEOL (wxCommandEvent &event) {
+    int eolMode = GetEOLMode();
+    switch (event.GetId()) {
+        case myID_CONVERTCR: { eolMode = wxSTC_EOL_CR; break;}
+        case myID_CONVERTCRLF: { eolMode = wxSTC_EOL_CRLF; break;}
+        case myID_CONVERTLF: { eolMode = wxSTC_EOL_LF; break;}
+    }
+    ConvertEOLs (eolMode);
+    SetEOLMode (eolMode);
+}
+
+//! misc
+void Edit::OnMarginClick (wxStyledTextEvent &event) {
+    if (event.GetMargin() == 2) {
+        int lineClick = LineFromPosition (event.GetPosition());
+        int levelClick = GetFoldLevel (lineClick);
+        if ((levelClick & wxSTC_FOLDLEVELHEADERFLAG) > 0) {
+            ToggleFold (lineClick);
+        }
+    }
+}
+
+void Edit::OnCharAdded (wxStyledTextEvent &event) {
+    char chr = event.GetKey();
+    int currentLine = GetCurrentLine();
+    // Change this if support for mac files with \r is needed
+    if (chr == '\n') {
+        int lineInd = 0;
+        if (currentLine > 0) {
+            lineInd = GetLineIndentation(currentLine - 1);
+        }
+        if (lineInd == 0) return;
+        SetLineIndentation (currentLine, lineInd);
+        GotoPos(PositionFromLine (currentLine) + lineInd);
+    }
+}
+
+
+//----------------------------------------------------------------------------
+// private functions
+wxString Edit::DeterminePrefs (const wxString &filename) {
+
+    LanguageInfo const* curInfo = NULL;
+
+    // determine language from filepatterns
+    int languageNr;
+    for (languageNr = 0; languageNr < g_LanguagePrefsSize; languageNr++) {
+        curInfo = &g_LanguagePrefs [languageNr];
+        wxString filepattern = curInfo->filepattern;
+        filepattern.Lower();
+        while (!filepattern.IsEmpty()) {
+            wxString cur = filepattern.BeforeFirst (';');
+            if ((cur == filename) ||
+                (cur == (filename.BeforeLast ('.') + _T(".*"))) ||
+                (cur == (_T("*.") + filename.AfterLast ('.')))) {
+                return curInfo->name;
+            }
+            filepattern = filepattern.AfterFirst (';');
+        }
+    }
+    return wxEmptyString;
+
+}
+
+bool Edit::InitializePrefs (const wxString &name) {
+
+    // initialize styles
+    StyleClearAll();
+    LanguageInfo const* curInfo = NULL;
+
+    // determine language
+    bool found = false;
+    int languageNr;
+    for (languageNr = 0; languageNr < g_LanguagePrefsSize; languageNr++) {
+        curInfo = &g_LanguagePrefs [languageNr];
+        if (curInfo->name == name) {
+            found = true;
+            break;
+        }
+    }
+    if (!found) return false;
+
+    // set lexer and language
+    SetLexer (curInfo->lexer);
+    m_language = curInfo;
+
+    // set margin for line numbers
+    SetMarginType (m_LineNrID, wxSTC_MARGIN_NUMBER);
+    StyleSetForeground (wxSTC_STYLE_LINENUMBER, wxColour ("DARK GREY"));
+    StyleSetBackground (wxSTC_STYLE_LINENUMBER, wxColour ("WHITE"));
+    SetMarginWidth (m_LineNrID,
+                    g_CommonPrefs.lineNumberEnable? m_LineNrMargin: 0);
+
+    // default fonts for all styles!
+    int Nr;
+    for (Nr = 0; Nr < wxSTC_STYLE_LASTPREDEFINED; Nr++) {
+        wxFont font (10, wxMODERN, wxNORMAL, wxNORMAL);
+        StyleSetFont (Nr, font);
+    }
+
+    // set common styles
+    StyleSetForeground (wxSTC_STYLE_DEFAULT, wxColour ("DARK GREY"));
+    StyleSetForeground (wxSTC_STYLE_INDENTGUIDE, wxColour ("DARK GREY"));
+
+    // initialize settings
+    if (g_CommonPrefs.syntaxEnable) {
+        int keywordnr = 0;
+        for (Nr = 0; Nr < STYLE_TYPES_COUNT; Nr++) {
+            if (curInfo->styles[Nr].type == -1) continue;
+            const StyleInfo &curType = g_StylePrefs [curInfo->styles[Nr].type];
+            wxFont font (curType.fontsize, wxMODERN, wxNORMAL, wxNORMAL, false,
+                         curType.fontname);
+            StyleSetFont (Nr, font);
+            if (curType.foreground) {
+                StyleSetForeground (Nr, wxColour (curType.foreground));
+            }
+            if (curType.background) {
+                StyleSetBackground (Nr, wxColour (curType.background));
+            }
+            StyleSetBold (Nr, (curType.fontstyle & mySTC_STYLE_BOLD) > 0);
+            StyleSetItalic (Nr, (curType.fontstyle & mySTC_STYLE_ITALIC) > 0);
+            StyleSetUnderline (Nr, (curType.fontstyle & mySTC_STYLE_UNDERL) > 0);
+            StyleSetVisible (Nr, (curType.fontstyle & mySTC_STYLE_HIDDEN) == 0);
+            StyleSetCase (Nr, curType.lettercase);
+            const wxChar *pwords = curInfo->styles[Nr].words;
+            if (pwords) {
+                SetKeyWords (keywordnr, pwords);
+                keywordnr += 1;
+            }
+        }
+    }
+
+    // set margin as unused
+    SetMarginType (m_DividerID, wxSTC_MARGIN_SYMBOL);
+    SetMarginWidth (m_DividerID, 0);
+    SetMarginSensitive (m_DividerID, false);
+
+    // folding
+    SetMarginType (m_FoldingID, wxSTC_MARGIN_SYMBOL);
+    SetMarginMask (m_FoldingID, wxSTC_MASK_FOLDERS);
+    StyleSetBackground (m_FoldingID, wxColour ("WHITE"));
+    SetMarginWidth (m_FoldingID, 0);
+    SetMarginSensitive (m_FoldingID, false);
+    if (g_CommonPrefs.foldEnable) {
+        SetMarginWidth (m_FoldingID, curInfo->folds != 0? m_FoldingMargin: 0);
+        SetMarginSensitive (m_FoldingID, curInfo->folds != 0);
+        SetProperty (_T("fold"), curInfo->folds != 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.comment"),
+                     (curInfo->folds & mySTC_FOLD_COMMENT) > 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.compact"),
+                     (curInfo->folds & mySTC_FOLD_COMPACT) > 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.preprocessor"),
+                     (curInfo->folds & mySTC_FOLD_PREPROC) > 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.html"),
+                     (curInfo->folds & mySTC_FOLD_HTML) > 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.html.preprocessor"),
+                     (curInfo->folds & mySTC_FOLD_HTMLPREP) > 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.comment.python"),
+                     (curInfo->folds & mySTC_FOLD_COMMENTPY) > 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.quotes.python"),
+                     (curInfo->folds & mySTC_FOLD_QUOTESPY) > 0? _T("1"): _T("0"));
+    }
+    SetFoldFlags (wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED |
+                  wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED);
+
+    // set spaces and indention
+    SetTabWidth (4);
+    SetUseTabs (false);
+    SetTabIndents (true);
+    SetBackSpaceUnIndents (true);
+    SetIndent (g_CommonPrefs.indentEnable? 4: 0);
+
+    // others
+    SetViewEOL (g_CommonPrefs.displayEOLEnable);
+    SetIndentationGuides (g_CommonPrefs.indentGuideEnable);
+    SetEdgeColumn (80);
+    SetEdgeMode (g_CommonPrefs.longLineOnEnable? wxSTC_EDGE_LINE: wxSTC_EDGE_NONE);
+    SetViewWhiteSpace (g_CommonPrefs.whiteSpaceEnable?
+                       wxSTC_WS_VISIBLEALWAYS: wxSTC_WS_INVISIBLE);
+    SetOvertype (g_CommonPrefs.overTypeInitial);
+    SetReadOnly (g_CommonPrefs.readOnlyInitial);
+    SetWrapMode (g_CommonPrefs.wrapModeInitial?
+                 wxSTC_WRAP_WORD: wxSTC_WRAP_NONE);
+
+    return true;
+}
+
+bool Edit::LoadFile () {
+
+    // get filname
+    if (!m_filename) {
+        wxFileDialog dlg (this, _T("Open file"), _T(""), _T(""),
+                          _T("Any file (*)|*"), wxOPEN | wxFILE_MUST_EXIST | wxCHANGE_DIR);
+        if (dlg.ShowModal() != wxID_OK) return false;
+        m_filename = dlg.GetPath();
+    }
+
+    // load file
+    return LoadFile (m_filename);
+}
+
+bool Edit::LoadFile (const wxString &filename) {
+
+    // load file in edit and clear undo
+    if (!filename.IsEmpty()) m_filename = filename;
+//     wxFile file (m_filename);
+//     if (!file.IsOpened()) return false;
+    ClearAll ();
+//     long lng = file.Length ();
+//     if (lng > 0) {
+//         wxString buf;
+//         wxChar *buff = buf.GetWriteBuf (lng);
+//         file.Read (buff, lng);
+//         buf.UngetWriteBuf ();
+//         InsertText (0, buf);
+//     }
+//     file.Close();
+    
+    wxStyledTextCtrl::LoadFile(m_filename);
+    
+    EmptyUndoBuffer();
+
+    // determine lexer language
+    wxFileName fname (m_filename);
+    InitializePrefs (DeterminePrefs (fname.GetFullName()));
+
+    return true;
+}
+
+bool Edit::SaveFile () {
+
+    // return if no change
+    if (!Modified()) return true;
+
+    // get filname
+    if (!m_filename) {
+        wxFileDialog dlg (this, _T("Save file"), _T(""), _T(""), _T("Any file (*)|*"),
+                          wxSAVE | wxOVERWRITE_PROMPT);
+        if (dlg.ShowModal() != wxID_OK) return false;
+        m_filename = dlg.GetPath();
+    }
+
+    // save file
+    return SaveFile (m_filename);
+}
+
+bool Edit::SaveFile (const wxString &filename) {
+
+    // return if no change
+    if (!Modified()) return true;
+
+//     // save edit in file and clear undo
+//     if (!filename.IsEmpty()) m_filename = filename;
+//     wxFile file (m_filename, wxFile::write);
+//     if (!file.IsOpened()) return false;
+//     wxString buf = GetText();
+//     bool okay = file.Write (buf);
+//     file.Close();
+//     if (!okay) return false;
+//     EmptyUndoBuffer();
+//     SetSavePoint();
+
+//     return true;
+
+    return wxStyledTextCtrl::SaveFile(filename);
+    
+}
+
+bool Edit::Modified () {
+
+    // return modified state
+    return (GetModify() && !GetReadOnly());
+}
+
+//----------------------------------------------------------------------------
+// EditProperties
+//----------------------------------------------------------------------------
+
+EditProperties::EditProperties (Edit *edit,
+                                long style)
+        : wxDialog (edit, -1, wxEmptyString,
+                    wxDefaultPosition, wxDefaultSize,
+                    wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) {
+
+    // sets the application title
+    SetTitle (_("Properties"));
+    wxString text;
+
+    // fullname
+    wxBoxSizer *fullname = new wxBoxSizer (wxHORIZONTAL);
+    fullname->Add (10, 0);
+    fullname->Add (new wxStaticText (this, -1, _("Full filename"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);
+    fullname->Add (new wxStaticText (this, -1, edit->GetFilename()),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);
+
+    // text info
+    wxGridSizer *textinfo = new wxGridSizer (4, 0, 2);
+    textinfo->Add (new wxStaticText (this, -1, _("Language"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    textinfo->Add (new wxStaticText (this, -1, edit->m_language->name),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+    textinfo->Add (new wxStaticText (this, -1, _("Lexer-ID: "),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    text = wxString::Format (_T("%d"), edit->GetLexer());
+    textinfo->Add (new wxStaticText (this, -1, text),
+                   0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+    wxString EOLtype = _T("");
+    switch (edit->GetEOLMode()) {
+        case wxSTC_EOL_CR: {EOLtype = _T("CR (Unix)"); break; }
+        case wxSTC_EOL_CRLF: {EOLtype = _T("CRLF (Windows)"); break; }
+        case wxSTC_EOL_LF: {EOLtype = _T("CR (Macintosh)"); break; }
+    }
+    textinfo->Add (new wxStaticText (this, -1, _("Line endings"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    textinfo->Add (new wxStaticText (this, -1, EOLtype),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+
+    // text info box
+    wxStaticBoxSizer *textinfos = new wxStaticBoxSizer (
+                     new wxStaticBox (this, -1, _("Informations")),
+                     wxVERTICAL);
+    textinfos->Add (textinfo, 0, wxEXPAND);
+    textinfos->Add (0, 6);
+
+    // statistic
+    wxGridSizer *statistic = new wxGridSizer (4, 0, 2);
+    statistic->Add (new wxStaticText (this, -1, _("Total lines"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    text = wxString::Format (_T("%d"), edit->GetLineCount());
+    statistic->Add (new wxStaticText (this, -1, text),
+                    0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+    statistic->Add (new wxStaticText (this, -1, _("Total chars"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    text = wxString::Format (_T("%d"), edit->GetTextLength());
+    statistic->Add (new wxStaticText (this, -1, text),
+                    0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+    statistic->Add (new wxStaticText (this, -1, _("Current line"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    text = wxString::Format (_T("%d"), edit->GetCurrentLine());
+    statistic->Add (new wxStaticText (this, -1, text),
+                    0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+    statistic->Add (new wxStaticText (this, -1, _("Current pos"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    text = wxString::Format (_T("%d"), edit->GetCurrentPos());
+    statistic->Add (new wxStaticText (this, -1, text),
+                    0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+
+    // char/line statistics
+    wxStaticBoxSizer *statistics = new wxStaticBoxSizer (
+                     new wxStaticBox (this, -1, _("Statistics")),
+                     wxVERTICAL);
+    statistics->Add (statistic, 0, wxEXPAND);
+    statistics->Add (0, 6);
+
+    // total pane
+    wxBoxSizer *totalpane = new wxBoxSizer (wxVERTICAL);
+    totalpane->Add (fullname, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 10);
+    totalpane->Add (0, 6);
+    totalpane->Add (textinfos, 0, wxEXPAND | wxLEFT | wxRIGHT, 10);
+    totalpane->Add (0, 10);
+    totalpane->Add (statistics, 0, wxEXPAND | wxLEFT | wxRIGHT, 10);
+    totalpane->Add (0, 6);
+    wxButton *okButton = new wxButton (this, wxID_OK, _("OK"));
+    okButton->SetDefault();
+    totalpane->Add (okButton, 0, wxALIGN_CENTER | wxALL, 10);
+
+    SetSizerAndFit (totalpane);
+
+    ShowModal();
+}
+
+//----------------------------------------------------------------------------
+// EditPrint
+//----------------------------------------------------------------------------
+
+EditPrint::EditPrint (Edit *edit, wxChar *title)
+              : wxPrintout(title) {
+    m_edit = edit;
+    m_printed = 0;
+
+}
+
+bool EditPrint::OnPrintPage (int page) {
+
+    wxDC *dc = GetDC();
+    if (!dc) return false;
+
+    // scale DC
+    PrintScaling (dc);
+
+    // print page
+    if (page == 1) m_printed = 0;
+    m_printed = m_edit->FormatRange (1, m_printed, m_edit->GetLength(),
+                                     dc, dc, m_printRect, m_pageRect);
+
+    return true;
+}
+
+bool EditPrint::OnBeginDocument (int startPage, int endPage) {
+
+    if (!wxPrintout::OnBeginDocument (startPage, endPage)) {
+        return false;
+    }
+
+    return true;
+}
+
+void EditPrint::GetPageInfo (int *minPage, int *maxPage, int *selPageFrom, int *selPageTo) {
+
+    // initialize values
+    *minPage = 0;
+    *maxPage = 0;
+    *selPageFrom = 0;
+    *selPageTo = 0;
+
+    // scale DC if possible
+    wxDC *dc = GetDC();
+    if (!dc) return;
+    PrintScaling (dc);
+
+    // get print page informations and convert to printer pixels
+    wxSize ppiScr;
+    GetPPIScreen (&ppiScr.x, &ppiScr.y);
+    wxSize page = g_pageSetupData->GetPaperSize();
+    page.x = static_cast<int> (page.x * ppiScr.x / 25.4);
+    page.y = static_cast<int> (page.y * ppiScr.y / 25.4);
+    m_pageRect = wxRect (0,
+                         0,
+                         page.x,
+                         page.y);
+
+    // get margins informations and convert to printer pixels
+    int  top = 25; // default 25
+    int  bottom = 25; // default 25
+    int  left = 20; // default 20
+    int  right = 20; // default 20
+    wxPoint (top, left) = g_pageSetupData->GetMarginTopLeft();
+    wxPoint (bottom, right) = g_pageSetupData->GetMarginBottomRight();
+    top = static_cast<int> (top * ppiScr.y / 25.4);
+    bottom = static_cast<int> (bottom * ppiScr.y / 25.4);
+    left = static_cast<int> (left * ppiScr.x / 25.4);
+    right = static_cast<int> (right * ppiScr.x / 25.4);
+    m_printRect = wxRect (left,
+                          top,
+                          page.x - (left + right),
+                          page.y - (top + bottom));
+
+    // count pages
+    while (HasPage (*maxPage)) {
+        m_printed = m_edit->FormatRange (0, m_printed, m_edit->GetLength(),
+                                       dc, dc, m_printRect, m_pageRect);
+        *maxPage += 1;
+    }
+    if (*maxPage > 0) *minPage = 1;
+    *selPageFrom = *minPage;
+    *selPageTo = *maxPage;
+}
+
+bool EditPrint::HasPage (int page) {
+
+    return (m_printed < m_edit->GetLength());
+}
+
+bool EditPrint::PrintScaling (wxDC *dc){
+
+    // check for dc, return if none
+    if (!dc) return false;
+
+    // get printer and screen sizing values
+    wxSize ppiScr;
+    GetPPIScreen (&ppiScr.x, &ppiScr.y);
+    if (ppiScr.x == 0) { // most possible guess 96 dpi
+        ppiScr.x = 96;
+        ppiScr.y = 96;
+    }
+    wxSize ppiPrt;
+    GetPPIPrinter (&ppiPrt.x, &ppiPrt.y);
+    if (ppiPrt.x == 0) { // scaling factor to 1
+        ppiPrt.x = ppiScr.x;
+        ppiPrt.y = ppiScr.y;
+    }
+    wxSize dcSize = dc->GetSize();
+    wxSize pageSize;
+    GetPageSizePixels (&pageSize.x, &pageSize.y);
+
+    // set user scale
+    float scale_x = (float)(ppiPrt.x * dcSize.x) /
+                    (float)(ppiScr.x * pageSize.x);
+    float scale_y = (float)(ppiPrt.y * dcSize.y) /
+                    (float)(ppiScr.y * pageSize.y);
+    dc->SetUserScale (scale_x, scale_y);
+
+    return true;
+}
+
diff --git a/contrib/samples/stc/edit.h b/contrib/samples/stc/edit.h
new file mode 100644 (file)
index 0000000..0a4cbf4
--- /dev/null
@@ -0,0 +1,169 @@
+//////////////////////////////////////////////////////////////////////////////
+// File:        edit.h
+// Purpose:     STC test module
+// Maintainer:  Wyo
+// Created:     2003-09-01
+// RCS-ID:      $Id$
+// Copyright:   (c) wxGuide
+// Licence:     wxWindows licence
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef _EDIT_H_
+#define _EDIT_H_
+
+//----------------------------------------------------------------------------
+// informations
+//----------------------------------------------------------------------------
+
+
+//----------------------------------------------------------------------------
+// headers
+//----------------------------------------------------------------------------
+
+//! wxWindows headers
+
+//! wxWindows/contrib headers
+#include <wx/stc/stc.h>  // styled text control
+
+//! application headers
+#include "prefs.h"       // preferences
+
+
+//============================================================================
+// declarations
+//============================================================================
+
+class EditPrint;
+class EditProperties;
+
+
+//----------------------------------------------------------------------------
+//! Edit
+class Edit: public wxStyledTextCtrl {
+    friend class EditProperties;
+    friend class EditPrint;
+
+public:
+    //! constructor
+    Edit (wxWindow *parent, wxWindowID id = -1,
+          const wxPoint &pos = wxDefaultPosition,
+          const wxSize &size = wxDefaultSize,
+          long style = wxSUNKEN_BORDER|wxVSCROLL
+         );
+
+    //! destructor
+    ~Edit ();
+
+    // event handlers
+    // common
+    void OnSize( wxSizeEvent &event );
+    // edit
+    void OnEditRedo (wxCommandEvent &event);
+    void OnEditUndo (wxCommandEvent &event);
+    void OnEditClear (wxCommandEvent &event);
+    void OnEditCut (wxCommandEvent &event);
+    void OnEditCopy (wxCommandEvent &event);
+    void OnEditPaste (wxCommandEvent &event);
+    // find
+    void OnFind (wxCommandEvent &event);
+    void OnFindNext (wxCommandEvent &event);
+    void OnReplace (wxCommandEvent &event);
+    void OnReplaceNext (wxCommandEvent &event);
+    void OnBraceMatch (wxCommandEvent &event);
+    void OnGoto (wxCommandEvent &event);
+    void OnEditIndentInc (wxCommandEvent &event);
+    void OnEditIndentRed (wxCommandEvent &event);
+    void OnEditSelectAll (wxCommandEvent &event);
+    void OnEditSelectLine (wxCommandEvent &event);
+    //! view
+    void OnHilightLang (wxCommandEvent &event);
+    void OnDisplayEOL (wxCommandEvent &event);
+    void OnIndentGuide (wxCommandEvent &event);
+    void OnLineNumber (wxCommandEvent &event);
+    void OnLongLineOn (wxCommandEvent &event);
+    void OnWhiteSpace (wxCommandEvent &event);
+    void OnFoldToggle (wxCommandEvent &event);
+    void OnSetOverType (wxCommandEvent &event);
+    void OnSetReadOnly (wxCommandEvent &event);
+    void OnWrapmodeOn (wxCommandEvent &event);
+    void OnUseCharset (wxCommandEvent &event);
+    //! extra
+    void OnChangeCase (wxCommandEvent &event);
+    void OnConvertEOL (wxCommandEvent &event);
+    // stc
+    void OnMarginClick (wxStyledTextEvent &event);
+    void OnCharAdded  (wxStyledTextEvent &event);
+
+    //! language/lexer
+    wxString DeterminePrefs (const wxString &filename);
+    bool InitializePrefs (const wxString &filename);
+    bool UserSettings (const wxString &filename);
+    LanguageInfo const* GetLanguageInfo () {return m_language;};
+
+    //! load/save file
+    bool LoadFile ();
+    bool LoadFile (const wxString &filename);
+    bool SaveFile ();
+    bool SaveFile (const wxString &filename);
+    bool Modified ();
+    wxString GetFilename () {return m_filename;};
+    void SetFilename (const wxString &filename) {m_filename = filename;};
+
+private:
+    // file
+    wxString m_filename;
+
+    // lanugage properties
+    LanguageInfo const* m_language;
+
+    // margin variables
+    int m_LineNrID;
+    int m_LineNrMargin;
+    int m_FoldingID;
+    int m_FoldingMargin;
+    int m_DividerID;
+
+    DECLARE_EVENT_TABLE()
+};
+
+//----------------------------------------------------------------------------
+//! EditProperties
+class EditProperties: public wxDialog {
+
+public:
+
+    //! constructor
+    EditProperties (Edit *edit, long style = 0);
+
+private:
+
+};
+
+//----------------------------------------------------------------------------
+//! EditPrint
+class EditPrint: public wxPrintout {
+
+public:
+
+    //! constructor
+    EditPrint (Edit *edit, wxChar *title = _T(""));
+
+    //! event handlers
+    bool OnPrintPage (int page);
+    bool OnBeginDocument (int startPage, int endPage);
+
+    //! print functions
+    bool HasPage (int page);
+    void GetPageInfo (int *minPage, int *maxPage, int *selPageFrom, int *selPageTo);
+
+private:
+    Edit *m_edit;
+    int m_printed;
+    wxRect m_pageRect;
+    wxRect m_printRect;
+
+    bool PrintScaling (wxDC *dc);
+};
+
+#endif // _EDIT_H_
+
index 5efb08e9aa31b6e86bf96b6ff42960dd3ec355ae..cc351315b073ecb84ba8fcaf4f42129367da3ffd 100644 (file)
@@ -30,7 +30,9 @@ STCTEST_CXXFLAGS = $(CPPFLAGS) $(__RUNTIME_LIBS_6) -I$(BCCDIR)\include \
        -I$(SETUPHDIR) -I. $(__DLLFLAG_p) -I.\..\..\..\samples -I.\..\..\include \
        $(CXXFLAGS)
 STCTEST_OBJECTS =  \
        -I$(SETUPHDIR) -I. $(__DLLFLAG_p) -I.\..\..\..\samples -I.\..\..\include \
        $(CXXFLAGS)
 STCTEST_OBJECTS =  \
-       $(OBJS)\stctest_stctest.obj
+       $(OBJS)\stctest_stctest.obj \
+       $(OBJS)\stctest_edit.obj \
+       $(OBJS)\stctest_prefs.obj
 
 ### Conditionally set variables: ###
 
 
 ### Conditionally set variables: ###
 
@@ -152,7 +154,13 @@ $(OBJS):
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all: $(OBJS)\stctest.exe data
+all: $(OBJS)\stctest.exe
+
+$(OBJS)\stctest_edit.obj: .\edit.cpp
+       $(CXX) -q -c -P -o$@ $(STCTEST_CXXFLAGS) $**
+
+$(OBJS)\stctest_prefs.obj: .\prefs.cpp
+       $(CXX) -q -c -P -o$@ $(STCTEST_CXXFLAGS) $**
 
 $(OBJS)\stctest_sample.res: .\..\..\..\samples\sample.rc
        brcc32 -32 -r -fo$@ -i$(BCCDIR)\include  -d__WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) -i.\..\..\..\include -i$(SETUPHDIR) -i. $(__DLLFLAG_p_1) -i.\..\..\..\samples $**
 
 $(OBJS)\stctest_sample.res: .\..\..\..\samples\sample.rc
        brcc32 -32 -r -fo$@ -i$(BCCDIR)\include  -d__WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) -i.\..\..\..\include -i$(SETUPHDIR) -i. $(__DLLFLAG_p_1) -i.\..\..\..\samples $**
@@ -170,10 +178,6 @@ clean:
        -if exist $(OBJS)\stctest.ilf del $(OBJS)\stctest.ilf
        -if exist $(OBJS)\stctest.ils del $(OBJS)\stctest.ils
 
        -if exist $(OBJS)\stctest.ilf del $(OBJS)\stctest.ilf
        -if exist $(OBJS)\stctest.ils del $(OBJS)\stctest.ils
 
-data: 
-       if not exist $(OBJS) mkdir $(OBJS)
-       for %f in (stctest.cpp) do if not exist $(OBJS)\%f copy .\%f $(OBJS)
-
 $(OBJS)\stctest.exe: $(STCTEST_OBJECTS)  $(OBJS)\stctest_sample.res
        ilink32 -Tpe -q $(LDFLAGS) -L$(BCCDIR)\lib $(__DEBUGINFO)  -L$(LIBDIRNAME) -aa @&&|
        c0w32.obj $(STCTEST_OBJECTS),$@,, wx$(PORTNAME)$(WXUNIVNAME)25$(WXUNICODEFLAG)$(WXDEBUGFLAG)_stc.lib  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib  wxregex$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib  $(__UNICOWS_LIB_p) ole2w32.lib oleacc.lib  import32.lib cw32mt$(__RUNTIME_LIBS_7).lib,, $(OBJS)\stctest_sample.res
 $(OBJS)\stctest.exe: $(STCTEST_OBJECTS)  $(OBJS)\stctest_sample.res
        ilink32 -Tpe -q $(LDFLAGS) -L$(BCCDIR)\lib $(__DEBUGINFO)  -L$(LIBDIRNAME) -aa @&&|
        c0w32.obj $(STCTEST_OBJECTS),$@,, wx$(PORTNAME)$(WXUNIVNAME)25$(WXUNICODEFLAG)$(WXDEBUGFLAG)_stc.lib  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib  wxregex$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib  $(__UNICOWS_LIB_p) ole2w32.lib oleacc.lib  import32.lib cw32mt$(__RUNTIME_LIBS_7).lib,, $(OBJS)\stctest_sample.res
index 352deda40395c8986425e341391a12a56f8d0933..62c646497214cfc35b1bc82f4fd81ec3e8323583 100644 (file)
@@ -22,7 +22,9 @@ STCTEST_CXXFLAGS = $(CPPFLAGS) $(__DEBUGINFO) $(__OPTIMIZEFLAG_2) $(GCCFLAGS) \
        $(__DLLFLAG_p) -I.\..\..\..\samples -I.\..\..\include $(CXXFLAGS)
 STCTEST_OBJECTS =  \
        $(OBJS)\stctest_sample_rc.o \
        $(__DLLFLAG_p) -I.\..\..\..\samples -I.\..\..\include $(CXXFLAGS)
 STCTEST_OBJECTS =  \
        $(OBJS)\stctest_sample_rc.o \
-       $(OBJS)\stctest_stctest.o
+       $(OBJS)\stctest_stctest.o \
+       $(OBJS)\stctest_edit.o \
+       $(OBJS)\stctest_prefs.o
 
 ### Conditionally set variables: ###
 
 
 ### Conditionally set variables: ###
 
@@ -145,7 +147,13 @@ $(OBJS):
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all: $(OBJS)\stctest.exe data
+all: $(OBJS)\stctest.exe
+
+$(OBJS)\stctest_edit.o: ./edit.cpp
+       $(CXX) -c -o $@ $(STCTEST_CXXFLAGS) $<
+
+$(OBJS)\stctest_prefs.o: ./prefs.cpp
+       $(CXX) -c -o $@ $(STCTEST_CXXFLAGS) $<
 
 $(OBJS)\stctest_sample_rc.o: ./../../../samples/sample.rc
        windres --use-temp-file -i$< -o$@  --define __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) --include-dir ./../../../include --include-dir $(SETUPHDIR) --include-dir . $(__DLLFLAG_p_1) --include-dir ./../../../samples
 
 $(OBJS)\stctest_sample_rc.o: ./../../../samples/sample.rc
        windres --use-temp-file -i$< -o$@  --define __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) --include-dir ./../../../include --include-dir $(SETUPHDIR) --include-dir . $(__DLLFLAG_p_1) --include-dir ./../../../samples
@@ -157,11 +165,7 @@ clean:
        -if exist $(OBJS)\*.o del $(OBJS)\*.o
        -if exist $(OBJS)\stctest.exe del $(OBJS)\stctest.exe
 
        -if exist $(OBJS)\*.o del $(OBJS)\*.o
        -if exist $(OBJS)\stctest.exe del $(OBJS)\stctest.exe
 
-data: 
-       if not exist $(OBJS) mkdir $(OBJS)
-       for %%f in (stctest.cpp) do if not exist $(OBJS)\%%f copy .\%%f $(OBJS)
-
 $(OBJS)\stctest.exe: $(STCTEST_OBJECTS) $(OBJS)\stctest_sample_rc.o
        $(CXX) -o $@ $(STCTEST_OBJECTS) $(LDFLAGS) $(__DEBUGINFO) -mthreads -L$(LIBDIRNAME) -Wl,--subsystem,windows -mwindows  -lwx$(PORTNAME)$(WXUNIVNAME)25$(WXUNICODEFLAG)$(WXDEBUGFLAG)_stc  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) -lwxzlib$(WXDEBUGFLAG)  -lwxregex$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG)  $(__UNICOWS_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lodbc32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32
 
 $(OBJS)\stctest.exe: $(STCTEST_OBJECTS) $(OBJS)\stctest_sample_rc.o
        $(CXX) -o $@ $(STCTEST_OBJECTS) $(LDFLAGS) $(__DEBUGINFO) -mthreads -L$(LIBDIRNAME) -Wl,--subsystem,windows -mwindows  -lwx$(PORTNAME)$(WXUNIVNAME)25$(WXUNICODEFLAG)$(WXDEBUGFLAG)_stc  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) -lwxzlib$(WXDEBUGFLAG)  -lwxregex$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG)  $(__UNICOWS_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lodbc32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32
 
-.PHONY: all clean data
+.PHONY: all clean
index 16dca9b2612672437773aedd6d394ccfb1be4308..17c8866593c334d4007168d0a52f518557f0e847 100644 (file)
@@ -24,7 +24,9 @@ STCTEST_CXXFLAGS = $(CPPFLAGS) /M$(__RUNTIME_LIBS_7)$(__DEBUGRUNTIME_3) \
        /I.\..\..\include $(CXXFLAGS) /GR /GX
 STCTEST_OBJECTS =  \
        $(OBJS)\stctest_sample.res \
        /I.\..\..\include $(CXXFLAGS) /GR /GX
 STCTEST_OBJECTS =  \
        $(OBJS)\stctest_sample.res \
-       $(OBJS)\stctest_stctest.obj
+       $(OBJS)\stctest_stctest.obj \
+       $(OBJS)\stctest_edit.obj \
+       $(OBJS)\stctest_prefs.obj
 
 ### Conditionally set variables: ###
 
 
 ### Conditionally set variables: ###
 
@@ -227,7 +229,13 @@ $(OBJS):
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all: $(OBJS)\stctest.exe data
+all: $(OBJS)\stctest.exe
+
+$(OBJS)\stctest_edit.obj: .\edit.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(STCTEST_CXXFLAGS) $**
+
+$(OBJS)\stctest_prefs.obj: .\prefs.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(STCTEST_CXXFLAGS) $**
 
 $(OBJS)\stctest_sample.res: .\..\..\..\samples\sample.rc
        rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_2_p_1) $(__NO_VC_CRTDBG_p_1) /d __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) /i .\..\..\..\include /i $(SETUPHDIR) /i . $(__DLLFLAG_p_1) /d _WINDOWS /i .\..\..\..\samples $**
 
 $(OBJS)\stctest_sample.res: .\..\..\..\samples\sample.rc
        rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_2_p_1) $(__NO_VC_CRTDBG_p_1) /d __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) /i .\..\..\..\include /i $(SETUPHDIR) /i . $(__DLLFLAG_p_1) /d _WINDOWS /i .\..\..\..\samples $**
@@ -242,10 +250,6 @@ clean:
        -if exist $(OBJS)\stctest.ilk del $(OBJS)\stctest.ilk
        -if exist $(OBJS)\stctest.pdb del $(OBJS)\stctest.pdb
 
        -if exist $(OBJS)\stctest.ilk del $(OBJS)\stctest.ilk
        -if exist $(OBJS)\stctest.pdb del $(OBJS)\stctest.pdb
 
-data: 
-       if not exist $(OBJS) mkdir $(OBJS)
-       for %f in (stctest.cpp) do if not exist $(OBJS)\%f copy .\%f $(OBJS)
-
 $(OBJS)\stctest.exe: $(STCTEST_OBJECTS) $(OBJS)\stctest_sample.res
        link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_1)  /LIBPATH:$(LIBDIRNAME) /SUBSYSTEM:WINDOWS @<<
        $(STCTEST_OBJECTS)  wx$(PORTNAME)$(WXUNIVNAME)25$(WXUNICODEFLAG)$(WXDEBUGFLAG)_stc.lib  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib  wxregex$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib  $(__UNICOWS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib odbc32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib oleacc.lib
 $(OBJS)\stctest.exe: $(STCTEST_OBJECTS) $(OBJS)\stctest_sample.res
        link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_1)  /LIBPATH:$(LIBDIRNAME) /SUBSYSTEM:WINDOWS @<<
        $(STCTEST_OBJECTS)  wx$(PORTNAME)$(WXUNIVNAME)25$(WXUNICODEFLAG)$(WXDEBUGFLAG)_stc.lib  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib  wxregex$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib  $(__UNICOWS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib odbc32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib oleacc.lib
index b68bbb42415448313fa48770fbe5a65275b8f90f..331e4b231d35f2408441c906ad906d69f7b8a109 100644 (file)
@@ -169,7 +169,9 @@ STCTEST_CXXFLAGS = $(CPPFLAGS) $(__DEBUGINFO_0) $(__OPTIMIZEFLAG_2) -bm &
        $(__UNICODE_DEFINE_p) -i=.\..\..\..\include -i=$(SETUPHDIR) -i=. &
        $(__DLLFLAG_p) -i=.\..\..\..\samples -i=.\..\..\include $(CXXFLAGS)
 STCTEST_OBJECTS =  &
        $(__UNICODE_DEFINE_p) -i=.\..\..\..\include -i=$(SETUPHDIR) -i=. &
        $(__DLLFLAG_p) -i=.\..\..\..\samples -i=.\..\..\include $(CXXFLAGS)
 STCTEST_OBJECTS =  &
-       $(OBJS)\stctest_stctest.obj
+       $(OBJS)\stctest_stctest.obj &
+       $(OBJS)\stctest_edit.obj &
+       $(OBJS)\stctest_prefs.obj
 
 
 all : $(OBJS)
 
 
 all : $(OBJS)
@@ -178,7 +180,13 @@ $(OBJS) :
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all : .SYMBOLIC $(OBJS)\stctest.exe data
+all : .SYMBOLIC $(OBJS)\stctest.exe
+
+$(OBJS)\stctest_edit.obj :  .AUTODEPEND .\edit.cpp
+       $(CXX) -zq -fo=$^@ $(STCTEST_CXXFLAGS) $<
+
+$(OBJS)\stctest_prefs.obj :  .AUTODEPEND .\prefs.cpp
+       $(CXX) -zq -fo=$^@ $(STCTEST_CXXFLAGS) $<
 
 $(OBJS)\stctest_sample.res :  .AUTODEPEND .\..\..\..\samples\sample.rc
        wrc -q -ad -bt=nt -r -fo=$^@  -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__UNICODE_DEFINE_p) -i=.\..\..\..\include -i=$(SETUPHDIR) -i=. $(__DLLFLAG_p) -i=.\..\..\..\samples $<
 
 $(OBJS)\stctest_sample.res :  .AUTODEPEND .\..\..\..\samples\sample.rc
        wrc -q -ad -bt=nt -r -fo=$^@  -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__UNICODE_DEFINE_p) -i=.\..\..\..\include -i=$(SETUPHDIR) -i=. $(__DLLFLAG_p) -i=.\..\..\..\samples $<
@@ -193,10 +201,6 @@ clean : .SYMBOLIC
        -if exist $(OBJS)\*.ilk del $(OBJS)\*.ilk
        -if exist $(OBJS)\stctest.exe del $(OBJS)\stctest.exe
 
        -if exist $(OBJS)\*.ilk del $(OBJS)\*.ilk
        -if exist $(OBJS)\stctest.exe del $(OBJS)\stctest.exe
 
-data : .SYMBOLIC 
-       if not exist $(OBJS) mkdir $(OBJS)
-       for %f in (stctest.cpp) do if not exist $(OBJS)\%f copy .\%f $(OBJS)
-
 $(OBJS)\stctest.exe :  $(STCTEST_OBJECTS) $(OBJS)\stctest_sample.res
        @%create $(OBJS)\stctest.lbc
        @%append $(OBJS)\stctest.lbc option quiet
 $(OBJS)\stctest.exe :  $(STCTEST_OBJECTS) $(OBJS)\stctest_sample.res
        @%create $(OBJS)\stctest.lbc
        @%append $(OBJS)\stctest.lbc option quiet
diff --git a/contrib/samples/stc/mondrian.ico b/contrib/samples/stc/mondrian.ico
new file mode 100644 (file)
index 0000000..2310c5d
Binary files /dev/null and b/contrib/samples/stc/mondrian.ico differ
diff --git a/contrib/samples/stc/mondrian.xpm b/contrib/samples/stc/mondrian.xpm
new file mode 100644 (file)
index 0000000..409f27a
--- /dev/null
@@ -0,0 +1,44 @@
+/* XPM */
+static char *mondrian_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 6 1",
+"  c Black",
+". c Blue",
+"X c #00bf00",
+"o c Red",
+"O c Yellow",
+"+ c Gray100",
+/* pixels */
+"                                ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+"                                ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++      ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++                    ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+"                                "
+};
diff --git a/contrib/samples/stc/prefs.cpp b/contrib/samples/stc/prefs.cpp
new file mode 100644 (file)
index 0000000..7927082
--- /dev/null
@@ -0,0 +1,379 @@
+//////////////////////////////////////////////////////////////////////////////
+// File:        prefs.cpp
+// Purpose:     STC test Preferences initialization
+// Maintainer:  Wyo
+// Created:     2003-09-01
+// RCS-ID:      $Id$
+// Copyright:   (c) wxGuide
+// Licence:     wxWindows licence
+//////////////////////////////////////////////////////////////////////////////
+
+//----------------------------------------------------------------------------
+// headers
+//----------------------------------------------------------------------------
+
+// For compilers that support precompilation, includes <wx/wx.h>.
+#include <wx/wxprec.h>
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+// for all others, include the necessary headers (this file is usually all you
+// need because it includes almost all 'standard' wxWindows headers)
+#ifndef WX_PRECOMP
+    #include <wx/wx.h>
+#endif
+
+//! wxWindows headers
+
+//! wxWindows/contrib headers
+
+//! application headers
+#include "defsext.h"     // Additional definitions
+#include "prefs.h"       // Preferences
+
+
+//============================================================================
+// declarations
+//============================================================================
+
+//----------------------------------------------------------------------------
+//! language types
+const CommonInfo g_CommonPrefs = {
+    // editor functionality prefs
+    true,  // syntaxEnable
+    true,  // foldEnable
+    true,  // indentEnable
+    // display defaults prefs
+    false, // overTypeInitial
+    false, // readOnlyInitial
+    false,  // wrapModeInitial
+    false, // displayEOLEnable
+    false, // IndentGuideEnable
+    true,  // lineNumberEnable
+    false, // longLineOnEnable
+    false, // whiteSpaceEnable
+};
+
+//----------------------------------------------------------------------------
+// keywordlists
+// C++
+wxChar* CppWordlist1 =
+    _T("asm auto bool break case catch char class const const_cast \
+       continue default delete do double dynamic_cast else enum explicit \
+       export extern false float for friend goto if inline int long \
+       mutable namespace new operator private protected public register \
+       reinterpret_cast return short signed sizeof static static_cast \
+       struct switch template this throw true try typedef typeid \
+       typename union unsigned using virtual void volatile wchar_t \
+       while");
+wxChar* CppWordlist2 =
+    _T("file");
+wxChar* CppWordlist3 =
+    _T("a addindex addtogroup anchor arg attention author b brief bug c \
+       class code date def defgroup deprecated dontinclude e em endcode \
+       endhtmlonly endif endlatexonly endlink endverbatim enum example \
+       exception f$ f[ f] file fn hideinitializer htmlinclude \
+       htmlonly if image include ingroup internal invariant interface \
+       latexonly li line link mainpage name namespace nosubgrouping note \
+       overload p page par param post pre ref relates remarks return \
+       retval sa section see showinitializer since skip skipline struct \
+       subsection test throw todo typedef union until var verbatim \
+       verbinclude version warning weakgroup $ @ "" & < > # { }");
+
+// Python
+wxChar* PythonWordlist1 =
+    _T("and assert break class continue def del elif else except exec \
+       finally for from global if import in is lambda None not or pass \
+       print raise return try while yield");
+wxChar* PythonWordlist2 =
+    _T("ACCELERATORS ALT AUTO3STATE AUTOCHECKBOX AUTORADIOBUTTON BEGIN \
+       BITMAP BLOCK BUTTON CAPTION CHARACTERISTICS CHECKBOX CLASS \
+       COMBOBOX CONTROL CTEXT CURSOR DEFPUSHBUTTON DIALOG DIALOGEX \
+       DISCARDABLE EDITTEXT END EXSTYLE FONT GROUPBOX ICON LANGUAGE \
+       LISTBOX LTEXT MENU MENUEX MENUITEM MESSAGETABLE POPUP PUSHBUTTON \
+       RADIOBUTTON RCDATA RTEXT SCROLLBAR SEPARATOR SHIFT STATE3 \
+       STRINGTABLE STYLE TEXTINCLUDE VALUE VERSION VERSIONINFO VIRTKEY");
+
+
+//----------------------------------------------------------------------------
+//! languages
+const LanguageInfo g_LanguagePrefs [] = {
+    // C++
+    {_T("C++"),
+     _T("*.c;*.cc;*.cpp;*.cxx;*.cs;*.h;*.hh;*.hpp;*.hxx;*.sma"),
+     wxSTC_LEX_CPP,
+     {{mySTC_TYPE_DEFAULT, NULL},
+      {mySTC_TYPE_COMMENT, NULL},
+      {mySTC_TYPE_COMMENT_LINE, NULL},
+      {mySTC_TYPE_COMMENT_DOC, NULL},
+      {mySTC_TYPE_NUMBER, NULL},
+      {mySTC_TYPE_WORD1, CppWordlist1}, // KEYWORDS
+      {mySTC_TYPE_STRING, NULL},
+      {mySTC_TYPE_CHARACTER, NULL},
+      {mySTC_TYPE_UUID, NULL},
+      {mySTC_TYPE_PREPROCESSOR, NULL},
+      {mySTC_TYPE_OPERATOR, NULL},
+      {mySTC_TYPE_IDENTIFIER, NULL},
+      {mySTC_TYPE_STRING_EOL, NULL},
+      {mySTC_TYPE_DEFAULT, NULL}, // VERBATIM
+      {mySTC_TYPE_REGEX, NULL},
+      {mySTC_TYPE_COMMENT_SPECIAL, NULL}, // DOXY
+      {mySTC_TYPE_WORD2, CppWordlist2}, // EXTRA WORDS
+      {mySTC_TYPE_WORD3, CppWordlist3}, // DOXY KEYWORDS
+      {mySTC_TYPE_ERROR, NULL}, // KEYWORDS ERROR
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL}},
+     mySTC_FOLD_COMMENT | mySTC_FOLD_COMPACT | mySTC_FOLD_PREPROC},
+    // Python
+    {_T("Python"),
+     _T("*.py;*.pyw"),
+     wxSTC_LEX_PYTHON,
+     {{mySTC_TYPE_DEFAULT, NULL},
+      {mySTC_TYPE_COMMENT_LINE, NULL},
+      {mySTC_TYPE_NUMBER, NULL},
+      {mySTC_TYPE_STRING, NULL},
+      {mySTC_TYPE_CHARACTER, NULL},
+      {mySTC_TYPE_WORD1, PythonWordlist1}, // KEYWORDS
+      {mySTC_TYPE_DEFAULT, NULL}, // TRIPLE
+      {mySTC_TYPE_DEFAULT, NULL}, // TRIPLEDOUBLE
+      {mySTC_TYPE_DEFAULT, NULL}, // CLASSNAME
+      {mySTC_TYPE_DEFAULT, PythonWordlist2}, // DEFNAME
+      {mySTC_TYPE_OPERATOR, NULL},
+      {mySTC_TYPE_IDENTIFIER, NULL},
+      {mySTC_TYPE_DEFAULT, NULL}, // COMMENT_BLOCK
+      {mySTC_TYPE_STRING_EOL, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL}},
+     mySTC_FOLD_COMMENTPY | mySTC_FOLD_QUOTESPY},
+    // * (any)
+    {(wxChar *)DEFAULT_LANGUAGE,
+     _T("*.*"),
+     wxSTC_LEX_PROPERTIES,
+     {{mySTC_TYPE_DEFAULT, NULL},
+      {mySTC_TYPE_DEFAULT, NULL},
+      {mySTC_TYPE_DEFAULT, NULL},
+      {mySTC_TYPE_DEFAULT, NULL},
+      {mySTC_TYPE_DEFAULT, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL}},
+     0},
+    };
+
+const int g_LanguagePrefsSize = WXSIZEOF(g_LanguagePrefs);
+
+//----------------------------------------------------------------------------
+//! style types
+const StyleInfo g_StylePrefs [] = {
+    // mySTC_TYPE_DEFAULT
+    {_T("Default"),
+     _T("BLACK"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_WORD1
+    {_T("Keyword1"),
+     _T("BLUE"), _T("WHITE"),
+     _T(""), 10, mySTC_STYLE_BOLD, 0},
+
+    // mySTC_TYPE_WORD2
+    {_T("Keyword2"),
+     _T("DARK BLUE"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_WORD3
+    {_T("Keyword3"),
+     _T("CORNFLOWER BLUE"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_WORD4
+    {_T("Keyword4"),
+     _T("CYAN"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_WORD5
+    {_T("Keyword5"),
+     _T("DARK GREY"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_WORD6
+    {_T("Keyword6"),
+     _T("GREY"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_COMMENT
+    {_T("Comment"),
+     _T("FOREST GREEN"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_COMMENT_DOC
+    {_T("Comment (Doc)"),
+     _T("FOREST GREEN"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_COMMENT_LINE
+    {_T("Comment line"),
+     _T("FOREST GREEN"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_COMMENT_SPECIAL
+    {_T("Special comment"),
+     _T("FOREST GREEN"), _T("WHITE"),
+     _T(""), 10, mySTC_STYLE_ITALIC, 0},
+
+    // mySTC_TYPE_CHARACTER
+    {_T("Character"),
+     _T("KHAKI"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_CHARACTER_EOL
+    {_T("Character (EOL)"),
+     _T("KHAKI"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_STRING
+    {_T("String"),
+     _T("BROWN"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_STRING_EOL
+    {_T("String (EOL)"),
+     _T("BROWN"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_DELIMITER
+    {_T("Delimiter"),
+     _T("ORANGE"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_PUNCTUATION
+    {_T("Punctuation"),
+     _T("ORANGE"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_OPERATOR
+    {_T("Operator"),
+     _T("BLACK"), _T("WHITE"),
+     _T(""), 10, mySTC_STYLE_BOLD, 0},
+
+    // mySTC_TYPE_BRACE
+    {_T("Label"),
+     _T("VIOLET"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_COMMAND
+    {_T("Command"),
+     _T("BLUE"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_IDENTIFIER
+    {_T("Identifier"),
+     _T("BLACK"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_LABEL
+    {_T("Label"),
+     _T("VIOLET"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_NUMBER
+    {_T("Number"),
+     _T("SIENNA"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_PARAMETER
+    {_T("Parameter"),
+     _T("VIOLET"), _T("WHITE"),
+     _T(""), 10, mySTC_STYLE_ITALIC, 0},
+
+    // mySTC_TYPE_REGEX
+    {_T("Regular expression"),
+     _T("ORCHID"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_UUID
+    {_T("UUID"),
+     _T("ORCHID"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_VALUE
+    {_T("Value"),
+     _T("ORCHID"), _T("WHITE"),
+     _T(""), 10, mySTC_STYLE_ITALIC, 0},
+
+    // mySTC_TYPE_PREPROCESSOR
+    {_T("Preprocessor"),
+     _T("GREY"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_SCRIPT
+    {_T("Script"),
+     _T("DARK GREY"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_ERROR
+    {_T("Error"),
+     _T("RED"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_UNDEFINED
+    {_T("Undefined"),
+     _T("ORANGE"), _T("WHITE"),
+     _T(""), 10, 0, 0}
+
+    };
+
+const int g_StylePrefsSize = WXSIZEOF(g_StylePrefs);
+
diff --git a/contrib/samples/stc/prefs.h b/contrib/samples/stc/prefs.h
new file mode 100644 (file)
index 0000000..5233625
--- /dev/null
@@ -0,0 +1,153 @@
+    //////////////////////////////////////////////////////////////////////////////
+// File:        prefs.h
+// Purpose:     STC test Preferences initialization
+// Maintainer:  Wyo
+// Created:     2003-09-01
+// RCS-ID:      $Id$
+// Copyright:   (c) wxGuide
+// Licence:     wxWindows licence
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef _PREFS_H_
+#define _PREFS_H_
+
+//----------------------------------------------------------------------------
+// informations
+//----------------------------------------------------------------------------
+
+
+//----------------------------------------------------------------------------
+// headers
+//----------------------------------------------------------------------------
+
+//! wxWindows headers
+
+//! wxWindows/contrib headers
+#include <wx/stc/stc.h>  // styled text control
+
+//! application headers
+
+
+//============================================================================
+// declarations
+//============================================================================
+
+//! general style types
+#define mySTC_TYPE_DEFAULT 0
+
+#define mySTC_TYPE_WORD1 1
+#define mySTC_TYPE_WORD2 2
+#define mySTC_TYPE_WORD3 3
+#define mySTC_TYPE_WORD4 4
+#define mySTC_TYPE_WORD5 5
+#define mySTC_TYPE_WORD6 6
+
+#define mySTC_TYPE_COMMENT 7
+#define mySTC_TYPE_COMMENT_DOC 8
+#define mySTC_TYPE_COMMENT_LINE 9
+#define mySTC_TYPE_COMMENT_SPECIAL 10
+
+#define mySTC_TYPE_CHARACTER 11
+#define mySTC_TYPE_CHARACTER_EOL 12
+#define mySTC_TYPE_STRING 13
+#define mySTC_TYPE_STRING_EOL 14
+
+#define mySTC_TYPE_DELIMITER 15
+
+#define mySTC_TYPE_PUNCTUATION 16
+
+#define mySTC_TYPE_OPERATOR 17
+
+#define mySTC_TYPE_BRACE 18
+
+#define mySTC_TYPE_COMMAND 19
+#define mySTC_TYPE_IDENTIFIER 20
+#define mySTC_TYPE_LABEL 21
+#define mySTC_TYPE_NUMBER 22
+#define mySTC_TYPE_PARAMETER 23
+#define mySTC_TYPE_REGEX 24
+#define mySTC_TYPE_UUID 25
+#define mySTC_TYPE_VALUE 26
+
+#define mySTC_TYPE_PREPROCESSOR 27
+#define mySTC_TYPE_SCRIPT 28
+
+#define mySTC_TYPE_ERROR 29
+
+//----------------------------------------------------------------------------
+//! style bits types
+#define mySTC_STYLE_BOLD 1
+#define mySTC_STYLE_ITALIC 2
+#define mySTC_STYLE_UNDERL 4
+#define mySTC_STYLE_HIDDEN 8
+
+//----------------------------------------------------------------------------
+//! general folding types
+#define mySTC_FOLD_COMMENT 1
+#define mySTC_FOLD_COMPACT 2
+#define mySTC_FOLD_PREPROC 4
+
+#define mySTC_FOLD_HTML 16
+#define mySTC_FOLD_HTMLPREP 32
+
+#define mySTC_FOLD_COMMENTPY 64
+#define mySTC_FOLD_QUOTESPY 128
+
+//----------------------------------------------------------------------------
+//! flags
+#define mySTC_FLAG_WRAPMODE 16
+
+//----------------------------------------------------------------------------
+// CommonInfo
+
+struct CommonInfo {
+    // editor functionality prefs
+    bool syntaxEnable;
+    bool foldEnable;
+    bool indentEnable;
+    // display defaults prefs
+    bool readOnlyInitial;
+    bool overTypeInitial;
+    bool wrapModeInitial;
+    bool displayEOLEnable;
+    bool indentGuideEnable;
+    bool lineNumberEnable;
+    bool longLineOnEnable;
+    bool whiteSpaceEnable;
+};
+extern const CommonInfo g_CommonPrefs;
+
+//----------------------------------------------------------------------------
+// LanguageInfo
+
+struct LanguageInfo {
+    wxChar *name;
+    wxChar *filepattern;
+    int lexer;
+    struct {
+        int type;
+        const wxChar *words;
+    } styles [STYLE_TYPES_COUNT];
+    int folds;
+};
+
+extern const LanguageInfo g_LanguagePrefs[];
+extern const int g_LanguagePrefsSize;
+
+//----------------------------------------------------------------------------
+// StyleInfo
+struct StyleInfo {
+    wxChar *name;
+    wxChar *foreground;
+    wxChar *background;
+    wxChar *fontname;
+    int fontsize;
+    int fontstyle;
+    int lettercase;
+};
+
+extern const StyleInfo g_StylePrefs[];
+extern const int g_StylePrefsSize;
+
+#endif // _PREFS_H_
+
index aa8ee4f6b4a916b7c1206f42e9c2fe033376d4b8..8ef545ce450a53276efcdf73a6bb92f5bac28fd4 100644 (file)
@@ -7,16 +7,12 @@
     <exe id="stctest" template="wx_contrib_sample" template_append="wx_append">
         <sources>
             stctest.cpp
     <exe id="stctest" template="wx_contrib_sample" template_append="wx_append">
         <sources>
             stctest.cpp
+           edit.cpp
+           prefs.cpp
         </sources>
         <wx-lib>stc</wx-lib>
         <wx-lib>core</wx-lib>
         <wx-lib>base</wx-lib>
     </exe>
         </sources>
         <wx-lib>stc</wx-lib>
         <wx-lib>core</wx-lib>
         <wx-lib>base</wx-lib>
     </exe>
-    
-    <wx-data id="data">
-        <files>
-            stctest.cpp
-        </files>
-    </wx-data>
-    
+
 </makefile>
 </makefile>
index 6c5afdba22dd7099e70a2b799d10a70cac8c2699..8c27905685988659e74416e9684007019675a5d6 100644 (file)
-/////////////////////////////////////////////////////////////////////////////
-// Name:        stctest.cpp
-// Purpose:     sample of using wxStyledTextCtrl
-// Author:      Robin Dunn
-// Modified by:
-// Created:     3-Feb-2000
+//////////////////////////////////////////////////////////////////////////////
+// File:        app.cpp
+// Purpose:     STC test application
+// Maintainer:  Otto Wyss
+// Created:     2003-09-01
 // RCS-ID:      $Id$
 // RCS-ID:      $Id$
-// Copyright:   (c) 2000 by Total Control Software
+// Copyright:   (c) wxGuide
 // Licence:     wxWindows licence
 // Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
 
 
-#if defined(__GNUG__) && !defined(__APPLE__)
-    #pragma implementation "stctest.cpp"
-    #pragma interface "stctest.cpp"
-#endif
+//----------------------------------------------------------------------------
+// headers
+//----------------------------------------------------------------------------
 
 
-// For compilers that support precompilation, includes "wx/wx.h".
-#include "wx/wxprec.h"
+// For compilers that support precompilation, includes <wx/wx.h>.
+#include <wx/wxprec.h>
 
 #ifdef __BORLANDC__
     #pragma hdrstop
 #endif
 
 // for all others, include the necessary headers (this file is usually all you
 
 #ifdef __BORLANDC__
     #pragma hdrstop
 #endif
 
 // for all others, include the necessary headers (this file is usually all you
-// need because it includes almost all "standard" wxWindows headers
+// need because it includes almost all 'standard' wxWindows headers)
 #ifndef WX_PRECOMP
 #ifndef WX_PRECOMP
-    #include "wx/wx.h"
+    #include <wx/wx.h>
 #endif
 
 #endif
 
-#include <wx/wfstream.h>
+//! wxWindows headers
+#include <wx/config.h>   // configuration support
+#include <wx/filedlg.h>  // file dialog support
+#include <wx/filename.h> // filename support
+#include <wx/notebook.h> // notebook support
+#include <wx/settings.h> // system settings
+#include <wx/string.h>   // strings support
+
+//! application headers
+#include "defsext.h"     // Additional definitions
+#include "edit.h"        // Edit module
+#include "prefs.h"       // Prefs
+
+
+//----------------------------------------------------------------------------
+// resources
+//----------------------------------------------------------------------------
+
+// the application icon (under Windows and OS/2 it is in resources)
+#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__)
+    #include "mondrian.xpm"
+#endif
+
+//============================================================================
+// declarations
+//============================================================================
+
+#define APP_NAME _T("STC-Test")
+#define APP_DESCR _("See http://wxguide.sourceforge.net/indexedit.html")
+
+#define APP_MAINT _T("Otto Wyss")
+#define APP_VENDOR _T("wxWindows")
+#define APP_COPYRIGTH _T("(C) 2003 Otto Wyss")
+#define APP_LICENCE _T("wxWindows")
+
+#define APP_VERSION _T("0.1.alpha")
+#define APP_BUILD __DATE__
+
+#define APP_WEBSITE _T("http://www.wxWindows.org")
+#define APP_MAIL _T("mailto://???")
 
 
-#include <wx/stc/stc.h>
+#define NONAME _("<untitled>")
 
 
-//----------------------------------------------------------------------
+class AppBook;
+
+
+//----------------------------------------------------------------------------
+//! global application name
+wxString *g_appname = NULL;
+
+//! global print data, to remember settings during the session
+wxPrintData *g_printData = (wxPrintData*) NULL;
+wxPageSetupData *g_pageSetupData = (wxPageSetupData*) NULL;
+
+
+//----------------------------------------------------------------------------
+//! application APP_VENDOR-APP_NAME.
+class App: public wxApp {
+    friend class AppFrame;
 
 
-class MyApp : public wxApp
-{
 public:
 public:
-    virtual bool OnInit();
+    //! the main function called durning application start
+    virtual bool OnInit ();
+
+    //! application exit function
+    virtual int OnExit ();
+
+private:
+    //! frame window
+    AppFrame* m_frame;
+
 };
 
 };
 
-//----------------------------------------------------------------------
-//  Make an editor class
+// created dynamically by wxWindows
+DECLARE_APP (App);
 
 
-class MySTC : public wxStyledTextCtrl
-{
-public:
-    MySTC(wxWindow *parent, wxWindowID id,
-          const wxPoint& pos = wxDefaultPosition,
-          const wxSize& size = wxDefaultSize, long style = 0);
+//----------------------------------------------------------------------------
+//! frame of the application APP_VENDOR-APP_NAME.
+class AppFrame: public wxFrame {
+    friend class App;
+    friend class AppBook;
+    friend class AppAbout;
 
 
-    void OnKeyPressed(wxKeyEvent& evt);
+public:
+    //! constructor
+    AppFrame (const wxString &title);
+
+    //! destructor
+    ~AppFrame ();
+
+    //! event handlers
+    //! common
+    void OnClose (wxCloseEvent &event);
+    void OnAbout (wxCommandEvent &event);
+    void OnExit (wxCommandEvent &event);
+    void OnTimerEvent (wxTimerEvent &event);
+    //! file
+    void OnFileNew (wxCommandEvent &event);
+    void OnFileNewFrame (wxCommandEvent &event);
+    void OnFileOpen (wxCommandEvent &event);
+    void OnFileOpenFrame (wxCommandEvent &event);
+    void OnFileSave (wxCommandEvent &event);
+    void OnFileSaveAs (wxCommandEvent &event);
+    void OnFileClose (wxCommandEvent &event);
+    //! properties
+    void OnProperties (wxCommandEvent &event);
+    //! print
+    void OnPrintSetup (wxCommandEvent &event);
+    void OnPrintPreview (wxCommandEvent &event);
+    void OnPrint (wxCommandEvent &event);
+    //! edit events
+    void OnEdit (wxCommandEvent &event);
 
 private:
 
 private:
+    // edit object
+    Edit *m_edit;
+    void FileOpen (wxString fname);
+
+    //! creates the application menu bar
+    wxMenuBar *m_menuBar;
+    void CreateMenu ();
+
+    // print preview position and size
+    wxRect DeterminePrintSize ();
+
     DECLARE_EVENT_TABLE()
 };
 
     DECLARE_EVENT_TABLE()
 };
 
-BEGIN_EVENT_TABLE(MySTC, wxStyledTextCtrl)
-    EVT_KEY_DOWN(MySTC::OnKeyPressed)
-END_EVENT_TABLE()
+//----------------------------------------------------------------------------
+//! about box of the application APP_VENDOR-APP_NAME
+class AppAbout: public wxDialog {
 
 
-//----------------------------------------------------------------------
-// Define a new frame type: this is going to be our main frame
-class MyFrame : public wxFrame
-{
 public:
 public:
-    MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
+    //! constructor
+    AppAbout (wxWindow *parent,
+              int milliseconds = 0,
+              long style = 0);
+
+    //! destructor
+    ~AppAbout ();
 
 
-    void OnQuit(wxCommandEvent& event);
-    void OnAbout(wxCommandEvent& event);
+    // event handlers
+    void OnTimerEvent (wxTimerEvent &event);
 
 private:
 
 private:
-    MySTC* ed;
+    // timer
+    wxTimer *m_timer;
 
     DECLARE_EVENT_TABLE()
 };
 
 
 
     DECLARE_EVENT_TABLE()
 };
 
 
-// IDs for the controls and the menu commands
-enum
-{
-    // menu items
-    ID_Quit = 1,
-    ID_About,
-    ID_ED
-};
+//============================================================================
+// implementation
+//============================================================================
 
 
-BEGIN_EVENT_TABLE(MyFrame, wxFrame)
-    EVT_MENU            (ID_Quit,  MyFrame::OnQuit)
-    EVT_MENU            (ID_About, MyFrame::OnAbout)
-END_EVENT_TABLE()
+IMPLEMENT_APP (App)
 
 
-IMPLEMENT_APP(MyApp)
+//----------------------------------------------------------------------------
+// App
+//----------------------------------------------------------------------------
 
 
-//----------------------------------------------------------------------
-// `Main program' equivalent: the program execution "starts" here
+bool App::OnInit () {
 
 
-bool MyApp::OnInit()
-{
-    MyFrame *frame = new MyFrame(_T("Testing wxStyledTextCtrl"),
-                                 wxPoint(5, 5), wxSize(600, 600));
+    wxInitAllImageHandlers();
+    
+    // set application and vendor name
+    SetAppName (APP_NAME);
+    SetVendorName (APP_VENDOR);
+    g_appname = new wxString ();
+    g_appname->Append (APP_VENDOR);
+    g_appname->Append (_T("-"));
+    g_appname->Append (APP_NAME);
 
 
-    frame->Show(TRUE);
-    return TRUE;
-}
+    // initialize print data and setup
+    g_printData = new wxPrintData;
+    g_pageSetupData = new wxPageSetupDialogData;
 
 
-//----------------------------------------------------------------------
+    // create application frame
+    m_frame = new AppFrame (*g_appname);
 
 
-// frame constructor
-MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
-       : wxFrame((wxFrame *)NULL, -1, title, pos, size)
-{
-#ifdef __WXMAC__
-    // we need this in order to allow the about menu relocation, since ABOUT is
-    // not the default id of the about menu
-    wxApp::s_macAboutMenuItemId = ID_About;
-#endif
+    // open application frame
+    m_frame->Layout ();
+    m_frame->Show (true);
+    SetTopWindow (m_frame);
 
 
+    return true;
+}
 
 
-    // create a menu bar
-    wxMenu *menuFile = new wxMenu(wxEmptyString, wxMENU_TEAROFF);
+int App::OnExit () {
 
 
-    // the "About" item should be in the help menu
-    wxMenu *helpMenu = new wxMenu;
-    helpMenu->Append(ID_About, _T("&About...\tCtrl-A"), _T("Show about dialog"));
+    // delete global appname
+    delete g_appname;
 
 
-    menuFile->Append(ID_Quit, _T("E&xit\tAlt-X"), _T("Quit this program"));
+    // delete global print data and setup
+    if (g_printData) delete g_printData;
+    if (g_pageSetupData) delete g_pageSetupData;
 
 
-    // now append the freshly created menu to the menu bar...
-    wxMenuBar *menuBar = new wxMenuBar();
-    menuBar->Append(menuFile, _T("&File"));
-    menuBar->Append(helpMenu, _T("&Help"));
+    return 0;
+}
 
 
-    // ... and attach this menu bar to the frame
-    SetMenuBar(menuBar);
+//----------------------------------------------------------------------------
+// AppFrame
+//----------------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE (AppFrame, wxFrame)
+    // common
+    EVT_CLOSE (                      AppFrame::OnClose)
+    // file
+    EVT_MENU (wxID_OPEN,             AppFrame::OnFileOpen)
+    EVT_MENU (wxID_SAVE,             AppFrame::OnFileSave)
+    EVT_MENU (wxID_SAVEAS,           AppFrame::OnFileSaveAs)
+    EVT_MENU (wxID_CLOSE,            AppFrame::OnFileClose)
+    // properties
+    EVT_MENU (myID_PROPERTIES,       AppFrame::OnProperties)
+    // print and exit
+    EVT_MENU (wxID_PRINT_SETUP,      AppFrame::OnPrintSetup)
+    EVT_MENU (wxID_PREVIEW,          AppFrame::OnPrintPreview)
+    EVT_MENU (wxID_PRINT,            AppFrame::OnPrint)
+    EVT_MENU (wxID_EXIT,             AppFrame::OnExit)
+    // edit
+    EVT_MENU (wxID_CLEAR,            AppFrame::OnEdit)
+    EVT_MENU (wxID_CUT,              AppFrame::OnEdit)
+    EVT_MENU (wxID_COPY,             AppFrame::OnEdit)
+    EVT_MENU (wxID_PASTE,            AppFrame::OnEdit)
+    EVT_MENU (myID_INDENTINC,        AppFrame::OnEdit)
+    EVT_MENU (myID_INDENTRED,        AppFrame::OnEdit)
+    EVT_MENU (wxID_SELECTALL,        AppFrame::OnEdit)
+    EVT_MENU (myID_SELECTLINE,       AppFrame::OnEdit)
+    EVT_MENU (wxID_REDO,             AppFrame::OnEdit)
+    EVT_MENU (wxID_UNDO,             AppFrame::OnEdit)
+    // find
+    EVT_MENU (wxID_FIND,             AppFrame::OnEdit)
+    EVT_MENU (myID_FINDNEXT,         AppFrame::OnEdit)
+    EVT_MENU (myID_REPLACE,          AppFrame::OnEdit)
+    EVT_MENU (myID_REPLACENEXT,      AppFrame::OnEdit)
+    EVT_MENU (myID_BRACEMATCH,       AppFrame::OnEdit)
+    EVT_MENU (myID_GOTO,             AppFrame::OnEdit)
+    // view
+    EVT_MENU_RANGE (myID_HILIGHTFIRST, myID_HILIGHTLAST,
+                                     AppFrame::OnEdit)
+    EVT_MENU (myID_DISPLAYEOL,       AppFrame::OnEdit)
+    EVT_MENU (myID_INDENTGUIDE,      AppFrame::OnEdit)
+    EVT_MENU (myID_LINENUMBER,       AppFrame::OnEdit)
+    EVT_MENU (myID_LONGLINEON,       AppFrame::OnEdit)
+    EVT_MENU (myID_WHITESPACE,       AppFrame::OnEdit)
+    EVT_MENU (myID_FOLDTOGGLE,       AppFrame::OnEdit)
+    EVT_MENU (myID_OVERTYPE,         AppFrame::OnEdit)
+    EVT_MENU (myID_READONLY,         AppFrame::OnEdit)
+    EVT_MENU (myID_WRAPMODEON,       AppFrame::OnEdit)
+    // extra
+    EVT_MENU (myID_CHANGELOWER,      AppFrame::OnEdit)
+    EVT_MENU (myID_CHANGEUPPER,      AppFrame::OnEdit)
+    EVT_MENU (myID_CONVERTCR,        AppFrame::OnEdit)
+    EVT_MENU (myID_CONVERTCRLF,      AppFrame::OnEdit)
+    EVT_MENU (myID_CONVERTLF,        AppFrame::OnEdit)
+    EVT_MENU (myID_CHARSETANSI,      AppFrame::OnEdit)
+    EVT_MENU (myID_CHARSETMAC,       AppFrame::OnEdit)
+    // help
+    EVT_MENU (wxID_ABOUT,            AppFrame::OnAbout)
+END_EVENT_TABLE ()
+
+AppFrame::AppFrame (const wxString &title)
+        : wxFrame ((wxFrame *)NULL, -1, title, wxDefaultPosition, wxSize(600,400),
+                    wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE) {
+
+    // intitialize important variables
+    m_edit = NULL;
+
+    // set icon and background
+    SetTitle (*g_appname);
+    SetIcon (wxICON (mondrian));
+    SetBackgroundColour (_T("WHITE"));
+
+    // about box shown for 1 seconds
+    AppAbout (this, 1000);
+
+    // create menu
+    m_menuBar = new wxMenuBar;
+    CreateMenu ();
+
+    // open first page
+    m_edit = new Edit (this, -1);
+    m_edit->SetFocus();
 
 
-#if wxUSE_STATUSBAR
-    CreateStatusBar(2);
-    SetStatusText(_T("Testing wxStyledTextCtrl"));
-#endif // wxUSE_STATUSBAR
+}
 
 
+AppFrame::~AppFrame () {
+}
 
 
-    //----------------------------------------
-    // Setup the editor
-    ed = new MySTC(this, ID_ED);
+// common event handlers
+void AppFrame::OnClose (wxCloseEvent &event) {
+    wxCommandEvent evt;
+    OnFileClose (evt);
+    if (m_edit && m_edit->Modified()) {
+        if (event.CanVeto()) event.Veto (true);
+        return;
+    }
+    Destroy();
 }
 
 }
 
+void AppFrame::OnAbout (wxCommandEvent &WXUNUSED(event)) {
+    AppAbout (this);
+}
 
 
-// event handlers
+void AppFrame::OnExit (wxCommandEvent &WXUNUSED(event)) {
+    Close (true);
+}
 
 
-void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
-{
-    // TRUE is to force the frame to close
-    Close(TRUE);
-}
-
-void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
-{
-    wxString msg;
-    msg.Printf( _T("Testing wxStyledTextCtrl...\n"));
-
-    wxMessageBox(msg, _T("About This Test"), wxOK | wxICON_INFORMATION, this);
-}
-
-
-//----------------------------------------------------------------------
-
-wxChar* keywords =
-_T("asm auto bool break case catch char class const \
-const_cast continue default delete do double \
-dynamic_cast else enum explicit export extern \
-false float for friend goto if inline int long \
-mutable namespace new operator private protected \
-public register reinterpret_cast return short signed \
-sizeof static static_cast struct switch template this \
-throw true try typedef typeid typename union unsigned \
-using virtual void volatile wchar_t while");
-
-
-
-MySTC::MySTC(wxWindow *parent, wxWindowID id,
-             const wxPoint& pos, const wxSize& size,
-             long style)
-    : wxStyledTextCtrl(parent, id, pos, size, style)
-{
-    // Default font
-    wxFont font(10, wxMODERN, wxNORMAL, wxNORMAL);
-    StyleSetFont(wxSTC_STYLE_DEFAULT, font);
-    StyleClearAll();
-
-    StyleSetForeground(0,  wxColour(0x80, 0x80, 0x80));
-    StyleSetForeground(1,  wxColour(0x00, 0x7f, 0x00));
-    //StyleSetForeground(2,  wxColour(0x00, 0x7f, 0x00));
-    StyleSetForeground(3,  wxColour(0x7f, 0x7f, 0x7f));
-    StyleSetForeground(4,  wxColour(0x00, 0x7f, 0x7f));
-    StyleSetForeground(5,  wxColour(0x00, 0x00, 0x7f));
-    StyleSetForeground(6,  wxColour(0x7f, 0x00, 0x7f));
-    StyleSetForeground(7,  wxColour(0x7f, 0x00, 0x7f));
-    StyleSetForeground(8,  wxColour(0x00, 0x7f, 0x7f));
-    StyleSetForeground(9,  wxColour(0x7f, 0x7f, 0x7f));
-    StyleSetForeground(10, wxColour(0x00, 0x00, 0x00));
-    StyleSetForeground(11, wxColour(0x00, 0x00, 0x00));
-    StyleSetBold(5,  TRUE);
-    StyleSetBold(10, TRUE);
-
-#ifdef __WXMSW__
-    StyleSetSpec(2, _T("fore:#007f00,bold,face:Arial,size:9"));
-#else
-    StyleSetSpec(2, _T("fore:#007f00,bold,face:Helvetica,size:9"));
-#endif
+// file event handlers
+void AppFrame::OnFileOpen (wxCommandEvent &WXUNUSED(event)) {
+    if (!m_edit) return;
+    wxString fname;
+    wxFileDialog dlg (this, _T("Open file"), _T(""), _T(""), _T("Any file (*)|*"),
+                      wxOPEN | wxFILE_MUST_EXIST | wxCHANGE_DIR);
+    if (dlg.ShowModal() != wxID_OK) return;
+    fname = dlg.GetPath ();
+    FileOpen (fname);
+}
+
+void AppFrame::OnFileSave (wxCommandEvent &WXUNUSED(event)) {
+    if (!m_edit) return;
+    if (!m_edit->Modified()) {
+        wxMessageBox (_("There is nothing to save!"), _("Save file"),
+                      wxOK | wxICON_EXCLAMATION);
+        return;
+    }
+    m_edit->SaveFile ();
+}
 
 
-    // give it some text to play with
-    wxString st;
-    wxFileInputStream stream(wxT("stctest.cpp"));
-    size_t sz = stream.GetSize();
-    char* buf = new char[sz + 1];
-    stream.Read((void*) buf, stream.GetSize());
-    buf[sz] = 0;
-    st = wxString::FromAscii(buf);
-    delete[] buf;
-
-    InsertText(0, st);
-    EmptyUndoBuffer();
-
-    SetLexer(wxSTC_LEX_CPP);
-    SetKeyWords(0, keywords);
-}
-
-void MySTC::OnKeyPressed(wxKeyEvent& evt)
-{
-    if (CallTipActive())
-        CallTipCancel();
-
-    int key = evt.GetKeyCode();
-    if ( key == WXK_SPACE && evt.ControlDown()) {
-        int pos = GetCurrentPos();
-
-        if (evt.ShiftDown()) {
-            // show how to do CallTips
-            CallTipSetBackground(wxColour(_T("YELLOW")));
-            CallTipShow(pos, _T("lots of of text: blah, blah, blah\n\n\
-show some suff, maybe parameters..\n\n\
-fubar(param1, param2)"));
+void AppFrame::OnFileSaveAs (wxCommandEvent &WXUNUSED(event)) {
+    if (!m_edit) return;
+    wxString filename = wxEmptyString;
+    wxFileDialog dlg (this, _T("Save file"), _T(""), _T(""), _T("Any file (*)|*"), wxSAVE|wxOVERWRITE_PROMPT);
+    if (dlg.ShowModal() != wxID_OK) return;
+    filename = dlg.GetPath();
+    m_edit->SaveFile (filename);
+}
+
+void AppFrame::OnFileClose (wxCommandEvent &WXUNUSED(event)) {
+    if (!m_edit) return;
+    if (m_edit->Modified()) {
+        if (wxMessageBox (_("Text is not saved, save before closing?"), _("Close"),
+                          wxYES_NO | wxICON_QUESTION) == wxYES) {
+            m_edit->SaveFile();
+            if (m_edit->Modified()) {
+                wxMessageBox (_("Text could not be saved!"), _("Close abort"),
+                              wxOK | wxICON_EXCLAMATION);
+                return;
+            }
         }
         }
-        else {
-            // show how to do AutoComplete
-            AutoCompSetIgnoreCase(false);
-            AutoCompShow(0, keywords);   // reuse the keyword list here
-            // normally you would build a string of completion texts...
+    }
+}
+
+// properties event handlers
+void AppFrame::OnProperties (wxCommandEvent &WXUNUSED(event)) {
+    if (!m_edit) return;
+    EditProperties (m_edit, 0);
+}
+
+// print event handlers
+void AppFrame::OnPrintSetup (wxCommandEvent &WXUNUSED(event)) {
+    (*g_pageSetupData) = * g_printData;
+    wxPageSetupDialog pageSetupDialog(this, g_pageSetupData);
+    pageSetupDialog.ShowModal();
+    (*g_printData) = pageSetupDialog.GetPageSetupData().GetPrintData();
+    (*g_pageSetupData) = pageSetupDialog.GetPageSetupData();
+}
+
+void AppFrame::OnPrintPreview (wxCommandEvent &WXUNUSED(event)) {
+    wxPrintDialogData printDialogData( *g_printData);
+    wxPrintPreview *preview =
+        new wxPrintPreview (new EditPrint (m_edit),
+                            new EditPrint (m_edit),
+                            &printDialogData);
+    if (!preview->Ok()) {
+        delete preview;
+        wxMessageBox (_("There was a problem with previewing.\n\
+                         Perhaps your current printer is not correctly?"),
+                      _("Previewing"), wxOK);
+        return;
+    }
+    wxRect rect = DeterminePrintSize();
+    wxPreviewFrame *frame = new wxPreviewFrame (preview, this, _("Print Preview"));
+    frame->SetSize (rect);
+    frame->Centre(wxBOTH);
+    frame->Initialize();
+    frame->Show(true);
+}
+
+void AppFrame::OnPrint (wxCommandEvent &WXUNUSED(event)) {
+    wxPrintDialogData printDialogData( *g_printData);
+    wxPrinter printer (&printDialogData);
+    EditPrint printout (m_edit);
+    if (!printer.Print (this, &printout, true)) {
+        if (wxPrinter::GetLastError() == wxPRINTER_ERROR) {
+        wxMessageBox (_("There was a problem with printing.\n\
+                         Perhaps your current printer is not correctly?"),
+                      _("Previewing"), wxOK);
+            return;
         }
     }
         }
     }
-    else
-        evt.Skip();
+    (*g_printData) = printer.GetPrintDialogData().GetPrintData();
+}
+
+// edit events
+void AppFrame::OnEdit (wxCommandEvent &event) {
+    if (m_edit) m_edit->ProcessEvent (event);
+}
+
+// private functions
+void AppFrame::CreateMenu () {
+
+    // File menu
+    wxMenu *menuFile = new wxMenu;
+    menuFile->Append (wxID_OPEN, _("&Open ..\tCtrl+O"));
+    menuFile->Append (wxID_SAVE, _("&Save\tCtrl+S"));
+    menuFile->Append (wxID_SAVEAS, _("Save &as ..\tCtrl+Shift+S"));
+    menuFile->Append (wxID_CLOSE, _("&Close\tCtrl+W"));
+    menuFile->AppendSeparator();
+    menuFile->Append (myID_PROPERTIES, _("Proper&ties ..\tCtrl+I"));
+    menuFile->AppendSeparator();
+    menuFile->Append (wxID_PRINT_SETUP, _("Print Set&up .."));
+    menuFile->Append (wxID_PREVIEW, _("Print Pre&view\tCtrl+Shift+P"));
+    menuFile->Append (wxID_PRINT, _("&Print ..\tCtrl+P"));
+    menuFile->AppendSeparator();
+    menuFile->Append (wxID_EXIT, _("&Quit\tCtrl+Q"));
+
+    // Edit menu
+    wxMenu *menuEdit = new wxMenu;
+    menuEdit->Append (wxID_UNDO, _("&Undo\tCtrl+Z"));
+    menuEdit->Append (wxID_REDO, _("&Redo\tCtrl+Shift+Z"));
+    menuEdit->AppendSeparator();
+    menuEdit->Append (wxID_CUT, _("Cu&t\tCtrl+X"));
+    menuEdit->Append (wxID_COPY, _("&Copy\tCtrl+C"));
+    menuEdit->Append (wxID_PASTE, _("&Paste\tCtrl+V"));
+    menuEdit->Append (wxID_CLEAR, _("&Delete\tDel"));
+    menuEdit->AppendSeparator();
+    menuEdit->Append (wxID_FIND, _("&Find\tCtrl+F"));
+    menuEdit->Enable (wxID_FIND, false);
+    menuEdit->Append (myID_FINDNEXT, _("Find &next\tF3"));
+    menuEdit->Enable (myID_FINDNEXT, false);
+    menuEdit->Append (myID_REPLACE, _("&Replace\tCtrl+H"));
+    menuEdit->Enable (myID_REPLACE, false);
+    menuEdit->Append (myID_REPLACENEXT, _("Replace &again\tShift+F4"));
+    menuEdit->Enable (myID_REPLACENEXT, false);
+    menuEdit->AppendSeparator();
+    menuEdit->Append (myID_BRACEMATCH, _("&Match brace\tCtrl+M"));
+    menuEdit->Append (myID_GOTO, _("&Goto\tCtrl+G"));
+    menuEdit->Enable (myID_GOTO, false);
+    menuEdit->AppendSeparator();
+    menuEdit->Append (myID_INDENTINC, _("&Indent increase\tTab"));
+    menuEdit->Append (myID_INDENTRED, _("I&ndent reduce\tBksp"));
+    menuEdit->AppendSeparator();
+    menuEdit->Append (wxID_SELECTALL, _("&Select all\tCtrl+A"));
+    menuEdit->Append (myID_SELECTLINE, _("Select &line\tCtrl+L"));
+
+    // hilight submenu
+    wxMenu *menuHilight = new wxMenu;
+    int Nr;
+    for (Nr = 0; Nr < g_LanguagePrefsSize; Nr++) {
+        menuHilight->Append (myID_HILIGHTFIRST + Nr,
+                             g_LanguagePrefs [Nr].name);
+    }
+
+    // charset submenu
+    wxMenu *menuCharset = new wxMenu;
+    menuCharset->Append (myID_CHARSETANSI, _("&ANSI (Windows)"));
+    menuCharset->Append (myID_CHARSETMAC, _("&MAC (Macintosh)"));
+
+    // View menu
+    wxMenu *menuView = new wxMenu;
+    menuView->Append (myID_HILIGHTLANG, _("&Hilight language .."), menuHilight);
+    menuView->AppendSeparator();
+    menuView->AppendCheckItem (myID_FOLDTOGGLE, _("&Toggle current fold\tCtrl+T"));
+    menuView->AppendCheckItem (myID_OVERTYPE, _("&Overwrite mode\tIns"));
+    menuView->AppendCheckItem (myID_WRAPMODEON, _("&Wrap mode\tCtrl+U"));
+    menuView->AppendSeparator();
+    menuView->AppendCheckItem (myID_DISPLAYEOL, _("Show line &endings"));
+    menuView->AppendCheckItem (myID_INDENTGUIDE, _("Show &indent guides"));
+    menuView->AppendCheckItem (myID_LINENUMBER, _("Show line &numbers"));
+    menuView->AppendCheckItem (myID_LONGLINEON, _("Show &long line marker"));
+    menuView->AppendCheckItem (myID_WHITESPACE, _("Show white&space"));
+    menuView->AppendSeparator();
+    menuView->Append (myID_USECHARSET, _("Use &code page of .."), menuCharset);
+
+    // change case submenu
+    wxMenu *menuChangeCase = new wxMenu;
+    menuChangeCase->Append (myID_CHANGEUPPER, _("&Upper case"));
+    menuChangeCase->Append (myID_CHANGELOWER, _("&Lower case"));
+
+    // convert EOL submenu
+    wxMenu *menuConvertEOL = new wxMenu;
+    menuConvertEOL->Append (myID_CONVERTCR, _("CR (&Linux)"));
+    menuConvertEOL->Append (myID_CONVERTCRLF, _("CR+LF (&Windows)"));
+    menuConvertEOL->Append (myID_CONVERTLF, _("LF (&Macintosh)"));
+
+    // Extra menu
+    wxMenu *menuExtra = new wxMenu;
+    menuExtra->AppendCheckItem (myID_READONLY, _("&Readonly mode"));
+    menuExtra->AppendSeparator();
+    menuExtra->Append (myID_CHANGECASE, _("Change &case to .."), menuChangeCase);
+    menuExtra->AppendSeparator();
+    menuExtra->Append (myID_CONVERTEOL, _("Convert line &endings to .."), menuConvertEOL);
+
+    // Window menu
+    wxMenu *menuWindow = new wxMenu;
+    menuWindow->Append (myID_PAGEPREV, _("&Previous\tCtrl+Shift+Tab"));
+    menuWindow->Append (myID_PAGENEXT, _("&Next\tCtrl+Tab"));
+
+    // Help menu
+    wxMenu *menuHelp = new wxMenu;
+    menuHelp->Append (wxID_ABOUT, _("&About ..\tShift+F1"));
+
+    // construct menu
+    m_menuBar->Append (menuFile, _("&File"));
+    m_menuBar->Append (menuEdit, _("&Edit"));
+    m_menuBar->Append (menuView, _("&View"));
+    m_menuBar->Append (menuExtra, _("E&xtra"));
+    m_menuBar->Append (menuWindow, _("&Window"));
+    m_menuBar->Append (menuHelp, _("&Help"));
+    SetMenuBar (m_menuBar);
+
+}
+
+void AppFrame::FileOpen (wxString fname) {
+    wxFileName w(fname); w.Normalize(); fname = w.GetFullPath();
+    m_edit->LoadFile (fname);
 }
 }
+
+wxRect AppFrame::DeterminePrintSize () {
+
+    wxSize scr = wxGetDisplaySize();
+
+    // determine position and size (shifting 16 left and down)
+    wxRect rect = GetRect();
+    rect.x += 16;
+    rect.y += 16;
+    rect.width = wxMin (rect.width, (scr.x - rect.x));
+    rect.height = wxMin (rect.height, (scr.x - rect.y));
+
+    return rect;
+}
+
+
+//----------------------------------------------------------------------------
+// AppAbout
+//----------------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE (AppAbout, wxDialog)
+    EVT_TIMER (myID_ABOUTTIMER, AppAbout::OnTimerEvent)
+END_EVENT_TABLE ()
+
+AppAbout::AppAbout (wxWindow *parent,
+                    int milliseconds,
+                    long style)
+        : wxDialog (parent, -1, wxEmptyString,
+                    wxDefaultPosition, wxDefaultSize,
+                    wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) {
+
+    // set timer if any
+    m_timer = NULL;
+    if (milliseconds > 0) {
+        m_timer = new wxTimer (this, myID_ABOUTTIMER);
+        m_timer->Start (milliseconds, wxTIMER_ONE_SHOT);
+    }
+
+    // sets the application title
+    SetTitle (_("About .."));
+
+    // about info
+    wxGridSizer *aboutinfo = new wxGridSizer (2, 0, 2);
+    aboutinfo->Add (new wxStaticText(this, -1, _("Written by: ")),
+                    0, wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, APP_MAINT),
+                    1, wxEXPAND | wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, _("Version: ")),
+                    0, wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, APP_VERSION),
+                    1, wxEXPAND | wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, _("Licence type: ")),
+                    0, wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, APP_LICENCE),
+                    1, wxEXPAND | wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, _("Copyright: ")),
+                    0, wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, APP_COPYRIGTH),
+                    1, wxEXPAND | wxALIGN_LEFT);
+
+    // about icontitle//info
+    wxBoxSizer *aboutpane = new wxBoxSizer (wxHORIZONTAL);
+    wxBitmap bitmap = wxBitmap(wxICON (mondrian));
+    aboutpane->Add (new wxStaticBitmap (this, -1, bitmap),
+                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 20);
+    aboutpane->Add (aboutinfo, 1, wxEXPAND);
+    aboutpane->Add (60, 0);
+
+    // about complete
+    wxBoxSizer *totalpane = new wxBoxSizer (wxVERTICAL);
+    totalpane->Add (0, 20);
+    wxStaticText *appname = new wxStaticText(this, -1, *g_appname);
+    appname->SetFont (wxFont (24, wxDEFAULT, wxNORMAL, wxBOLD));
+    totalpane->Add (appname, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, 40);
+    totalpane->Add (0, 10);
+    totalpane->Add (aboutpane, 0, wxEXPAND | wxALL, 4);
+    totalpane->Add (new wxStaticText(this, -1, APP_DESCR),
+                    0, wxALIGN_CENTER | wxALL, 10);
+    wxButton *okButton = new wxButton (this, wxID_OK, _("OK"));
+    okButton->SetDefault();
+    totalpane->Add (okButton, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT | wxBOTTOM, 10);
+
+    SetSizerAndFit (totalpane);
+
+    CenterOnScreen();    
+    ShowModal();
+}
+
+AppAbout::~AppAbout () {
+    if (m_timer)  {
+        delete m_timer;
+        m_timer = NULL;
+    }
+}
+
+//----------------------------------------------------------------------------
+// event handlers
+void AppAbout::OnTimerEvent (wxTimerEvent &event) {
+    if (m_timer) delete m_timer;
+    m_timer = NULL;
+    EndModal (wxID_OK);
+}
+
index cb9fdbea9650843bd1620b041e865675230fe436..ed4c03064876109818646100e63a71fd201b7258 100644 (file)
@@ -468,6 +468,14 @@ LINK32=link.exe
 # PROP Default_Filter ""
 # Begin Source File
 
 # PROP Default_Filter ""
 # Begin Source File
 
+SOURCE=.\edit.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\prefs.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=.\..\..\..\samples\sample.rc
 # End Source File
 # Begin Source File
 SOURCE=.\..\..\..\samples\sample.rc
 # End Source File
 # Begin Source File
index b86c4e2265cb0b7085f7319decb80a328250643b..2eeca79368b8dbff6e11ce60d0d3ad822115e341 100644 (file)
@@ -1 +1,5 @@
+mondrian ICON "mondrian.ico"
 #include "wx/msw/wx.rc"
 #include "wx/msw/wx.rc"
+
+print BITMAP "bitmaps/print.bmp"
+
index e104fd7cd04509d4428bc3fc5ae6ce51780dc1b5..a2fad49cb4f6ea6dc200200e208b002bbd4ae795 100644 (file)
@@ -80,14 +80,18 @@ STCDLL_OBJECTS =  \
        stcdll_LexLisp.o \
        stcdll_LexLout.o \
        stcdll_LexLua.o \
        stcdll_LexLisp.o \
        stcdll_LexLout.o \
        stcdll_LexLua.o \
+       stcdll_LexMMIXAL.o \
        stcdll_LexMatlab.o \
        stcdll_LexMatlab.o \
+       stcdll_LexNsis.o \
        stcdll_LexOthers.o \
        stcdll_LexPOV.o \
        stcdll_LexOthers.o \
        stcdll_LexPOV.o \
+       stcdll_LexPS.o \
        stcdll_LexPascal.o \
        stcdll_LexPerl.o \
        stcdll_LexPython.o \
        stcdll_LexRuby.o \
        stcdll_LexSQL.o \
        stcdll_LexPascal.o \
        stcdll_LexPerl.o \
        stcdll_LexPython.o \
        stcdll_LexRuby.o \
        stcdll_LexSQL.o \
+       stcdll_LexScriptol.o \
        stcdll_LexVB.o \
        stcdll_LineMarker.o \
        stcdll_PropSet.o \
        stcdll_LexVB.o \
        stcdll_LineMarker.o \
        stcdll_PropSet.o \
@@ -134,14 +138,18 @@ STCLIB_OBJECTS =  \
        stclib_LexLisp.o \
        stclib_LexLout.o \
        stclib_LexLua.o \
        stclib_LexLisp.o \
        stclib_LexLout.o \
        stclib_LexLua.o \
+       stclib_LexMMIXAL.o \
        stclib_LexMatlab.o \
        stclib_LexMatlab.o \
+       stclib_LexNsis.o \
        stclib_LexOthers.o \
        stclib_LexPOV.o \
        stclib_LexOthers.o \
        stclib_LexPOV.o \
+       stclib_LexPS.o \
        stclib_LexPascal.o \
        stclib_LexPerl.o \
        stclib_LexPython.o \
        stclib_LexRuby.o \
        stclib_LexSQL.o \
        stclib_LexPascal.o \
        stclib_LexPerl.o \
        stclib_LexPython.o \
        stclib_LexRuby.o \
        stclib_LexSQL.o \
+       stclib_LexScriptol.o \
        stclib_LexVB.o \
        stclib_LineMarker.o \
        stclib_PropSet.o \
        stclib_LexVB.o \
        stclib_LineMarker.o \
        stclib_PropSet.o \
@@ -378,15 +386,24 @@ stcdll_LexLout.o: $(srcdir)/scintilla/src/LexLout.cxx
 stcdll_LexLua.o: $(srcdir)/scintilla/src/LexLua.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexLua.o: $(srcdir)/scintilla/src/LexLua.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
+stcdll_LexMMIXAL.o: $(srcdir)/scintilla/src/LexMMIXAL.cxx
+       $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
+
 stcdll_LexMatlab.o: $(srcdir)/scintilla/src/LexMatlab.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexMatlab.o: $(srcdir)/scintilla/src/LexMatlab.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
+stcdll_LexNsis.o: $(srcdir)/scintilla/src/LexNsis.cxx
+       $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
+
 stcdll_LexOthers.o: $(srcdir)/scintilla/src/LexOthers.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexPOV.o: $(srcdir)/scintilla/src/LexPOV.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexOthers.o: $(srcdir)/scintilla/src/LexOthers.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexPOV.o: $(srcdir)/scintilla/src/LexPOV.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
+stcdll_LexPS.o: $(srcdir)/scintilla/src/LexPS.cxx
+       $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
+
 stcdll_LexPascal.o: $(srcdir)/scintilla/src/LexPascal.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexPascal.o: $(srcdir)/scintilla/src/LexPascal.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
@@ -402,6 +419,9 @@ stcdll_LexRuby.o: $(srcdir)/scintilla/src/LexRuby.cxx
 stcdll_LexSQL.o: $(srcdir)/scintilla/src/LexSQL.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexSQL.o: $(srcdir)/scintilla/src/LexSQL.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
+stcdll_LexScriptol.o: $(srcdir)/scintilla/src/LexScriptol.cxx
+       $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
+
 stcdll_LexVB.o: $(srcdir)/scintilla/src/LexVB.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexVB.o: $(srcdir)/scintilla/src/LexVB.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
@@ -530,15 +550,24 @@ stclib_LexLout.o: $(srcdir)/scintilla/src/LexLout.cxx
 stclib_LexLua.o: $(srcdir)/scintilla/src/LexLua.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexLua.o: $(srcdir)/scintilla/src/LexLua.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
+stclib_LexMMIXAL.o: $(srcdir)/scintilla/src/LexMMIXAL.cxx
+       $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
+
 stclib_LexMatlab.o: $(srcdir)/scintilla/src/LexMatlab.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexMatlab.o: $(srcdir)/scintilla/src/LexMatlab.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
+stclib_LexNsis.o: $(srcdir)/scintilla/src/LexNsis.cxx
+       $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
+
 stclib_LexOthers.o: $(srcdir)/scintilla/src/LexOthers.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexPOV.o: $(srcdir)/scintilla/src/LexPOV.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexOthers.o: $(srcdir)/scintilla/src/LexOthers.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexPOV.o: $(srcdir)/scintilla/src/LexPOV.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
+stclib_LexPS.o: $(srcdir)/scintilla/src/LexPS.cxx
+       $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
+
 stclib_LexPascal.o: $(srcdir)/scintilla/src/LexPascal.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexPascal.o: $(srcdir)/scintilla/src/LexPascal.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
@@ -554,6 +583,9 @@ stclib_LexRuby.o: $(srcdir)/scintilla/src/LexRuby.cxx
 stclib_LexSQL.o: $(srcdir)/scintilla/src/LexSQL.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexSQL.o: $(srcdir)/scintilla/src/LexSQL.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
+stclib_LexScriptol.o: $(srcdir)/scintilla/src/LexScriptol.cxx
+       $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
+
 stclib_LexVB.o: $(srcdir)/scintilla/src/LexVB.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexVB.o: $(srcdir)/scintilla/src/LexVB.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
index 7bda5100eb02db0182e1b41bf5561bd8fbc9b25e..859d11ce9aba8767013670ae0806bcbcf44a2139 100644 (file)
@@ -288,7 +288,7 @@ void SurfaceImpl::Init(SurfaceID hdc_, WindowID) {
     hdc = (wxDC*)hdc_;
 }
 
     hdc = (wxDC*)hdc_;
 }
 
-void SurfaceImpl::InitPixMap(int width, int height, Surface *surface_, WindowID) {
+void SurfaceImpl::InitPixMap(int width, int height, Surface *WXUNUSED(surface_), WindowID) {
     Release();
     hdc = new wxMemoryDC();
     hdcOwned = true;
     Release();
     hdc = new wxMemoryDC();
     hdcOwned = true;
@@ -542,7 +542,7 @@ int SurfaceImpl::Descent(Font &font) {
     return d;
 }
 
     return d;
 }
 
-int SurfaceImpl::InternalLeading(Font &font) {
+int SurfaceImpl::InternalLeading(Font &WXUNUSED(font)) {
     return 0;
 }
 
     return 0;
 }
 
@@ -563,7 +563,7 @@ int SurfaceImpl::AverageCharWidth(Font &font) {
     return hdc->GetCharWidth();
 }
 
     return hdc->GetCharWidth();
 }
 
-int SurfaceImpl::SetPalette(Palette *pal, bool inBackGround) {
+int SurfaceImpl::SetPalette(Palette *WXUNUSED(pal), bool WXUNUSED(inBackGround)) {
     return 0;
 }
 
     return 0;
 }
 
@@ -578,7 +578,7 @@ void SurfaceImpl::SetUnicodeMode(bool unicodeMode_) {
     unicodeMode=unicodeMode_;
 }
 
     unicodeMode=unicodeMode_;
 }
 
-void SurfaceImpl::SetDBCSMode(int codePage) {
+void SurfaceImpl::SetDBCSMode(int WXUNUSED(codePage)) {
     // dbcsMode = codePage == SC_CP_DBCS;
 }
 
     // dbcsMode = codePage == SC_CP_DBCS;
 }
 
@@ -969,7 +969,7 @@ int ListBoxImpl::GetSelection() {
 }
 
 
 }
 
 
-int ListBoxImpl::Find(const char *prefix) {
+int ListBoxImpl::Find(const char *WXUNUSED(prefix)) {
     // No longer used
     return -1;
 }
     // No longer used
     return -1;
 }
@@ -1063,7 +1063,7 @@ void Menu::Show(Point pt, Window &w) {
 
 //----------------------------------------------------------------------
 
 
 //----------------------------------------------------------------------
 
-DynamicLibrary *DynamicLibrary::Load(const char *modulePath) {
+DynamicLibrary *DynamicLibrary::Load(const char *WXUNUSED(modulePath)) {
     wxFAIL_MSG(wxT("Dynamic lexer loading not implemented yet"));
     return NULL;
 }
     wxFAIL_MSG(wxT("Dynamic lexer loading not implemented yet"));
     return NULL;
 }
@@ -1103,7 +1103,7 @@ void Platform::DebugDisplay(const char *s) {
     wxLogDebug(stc2wx(s));
 }
 
     wxLogDebug(stc2wx(s));
 }
 
-bool Platform::IsKeyDown(int key) {
+bool Platform::IsKeyDown(int WXUNUSED(key)) {
     return false;  // I don't think we'll need this.
 }
 
     return false;  // I don't think we'll need this.
 }
 
@@ -1196,11 +1196,11 @@ int Platform::Clamp(int val, int minVal, int maxVal) {
 }
 
 
 }
 
 
-bool Platform::IsDBCSLeadByte(int codePage, char ch) {
+bool Platform::IsDBCSLeadByte(int WXUNUSED(codePage), char WXUNUSED(ch)) {
     return false;
 }
 
     return false;
 }
 
-int Platform::DBCSCharLength(int codePage, const char *s) {
+int Platform::DBCSCharLength(int WXUNUSED(codePage), const char *WXUNUSED(s)) {
     return 1;
 }
 
     return 1;
 }
 
index 3e5ebf0aa601b080725de47a78aae96f1b384435..f294cd6ba2f24c96583333f99f387952b1c67859 100644 (file)
@@ -383,7 +383,8 @@ bool ScintillaWX::CanPaste() {
     bool didOpen;
 
     if (Editor::CanPaste()) {
     bool didOpen;
 
     if (Editor::CanPaste()) {
-        if ( (didOpen = !wxTheClipboard->IsOpened()) )
+        didOpen = !wxTheClipboard->IsOpened();
+        if ( didOpen )
             wxTheClipboard->Open();
 
         if (wxTheClipboard->IsOpened()) {
             wxTheClipboard->Open();
 
         if (wxTheClipboard->IsOpened()) {
@@ -597,7 +598,7 @@ void ScintillaWX::DoMouseWheel(int rotation, int delta,
 }
 
 
 }
 
 
-void ScintillaWX::DoSize(int width, int height) {
+void ScintillaWX::DoSize(int WXUNUSED(width), int WXUNUSED(height)) {
 //      PRectangle rcClient(0,0,width,height);
 //      SetScrollBarsTo(rcClient);
 //      DropGraphics();
 //      PRectangle rcClient(0,0,width,height);
 //      SetScrollBarsTo(rcClient);
 //      DropGraphics();
@@ -628,8 +629,8 @@ void ScintillaWX::DoLeftButtonMove(Point pt) {
     ButtonMove(pt);
 }
 
     ButtonMove(pt);
 }
 
-void ScintillaWX::DoMiddleButtonUp(Point pt) {
 #ifdef __WXGTK__
 #ifdef __WXGTK__
+void ScintillaWX::DoMiddleButtonUp(Point pt) {
     // Set the current position to the mouse click point and
     // then paste in the PRIMARY selection, if any.  wxGTK only.
     int newPos = PositionFromLocation(pt);
     // Set the current position to the mouse click point and
     // then paste in the PRIMARY selection, if any.  wxGTK only.
     int newPos = PositionFromLocation(pt);
@@ -656,8 +657,11 @@ void ScintillaWX::DoMiddleButtonUp(Point pt) {
 
     ShowCaretAtCurrentPosition();
     EnsureCaretVisible();
 
     ShowCaretAtCurrentPosition();
     EnsureCaretVisible();
-#endif
 }
 }
+#else
+void ScintillaWX::DoMiddleButtonUp(Point WXUNUSED(pt)) {
+}
+#endif
 
 
 void ScintillaWX::DoAddChar(int key) {
 
 
 void ScintillaWX::DoAddChar(int key) {
@@ -673,9 +677,10 @@ void ScintillaWX::DoAddChar(int key) {
 }
 
 
 }
 
 
-int  ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* consumed) {
+int  ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool meta, bool* consumed) {
 #if defined(__WXGTK__) || defined(__WXMAC__)
 #if defined(__WXGTK__) || defined(__WXMAC__)
-    // Ctrl chars (A-Z) end up with the wrong keycode on wxGTK...
+    // Ctrl chars (A-Z) end up with the wrong keycode on wxGTK
+    // TODO:  Check this, it shouldn't be true any longer.
     if (ctrl && key >= 1 && key <= 26)
         key += 'A' - 1;
 #endif
     if (ctrl && key >= 1 && key <= 26)
         key += 'A' - 1;
 #endif
@@ -709,6 +714,21 @@ int  ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* cons
     case WXK_MENU:              key = 0; break;
     }
 
     case WXK_MENU:              key = 0; break;
     }
 
+#ifdef __WXMAC__
+    if ( meta ) {
+        // check for a few common Mac Meta-key combos and remap them to Ctrl
+        // for Scintilla
+        switch ( key ) {
+        case 'Z':       // Undo
+        case 'X':       // Cut
+        case 'C':       // Copy
+        case 'V':       // Paste
+        case 'A':       // Select All
+            ctrl = true;
+            break;
+        }                
+#endif
+    
     int rv = KeyDown(key, shift, ctrl, alt, consumed);
 
     if (key)
     int rv = KeyDown(key, shift, ctrl, alt, consumed);
 
     if (key)
@@ -760,7 +780,7 @@ bool ScintillaWX::DoDropText(long x, long y, const wxString& data) {
 }
 
 
 }
 
 
-wxDragResult ScintillaWX::DoDragEnter(wxCoord x, wxCoord y, wxDragResult def) {
+wxDragResult ScintillaWX::DoDragEnter(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), wxDragResult def) {
     dragResult = def;
     return dragResult;
 }
     dragResult = def;
     return dragResult;
 }
@@ -817,8 +837,8 @@ void ScintillaWX::DoScrollToColumn(int column) {
     HorizontalScrollTo(column * vs.spaceWidth);
 }
 
     HorizontalScrollTo(column * vs.spaceWidth);
 }
 
-void ScintillaWX::ClipChildren(wxDC& dc, PRectangle rect) {
 #ifdef __WXGTK__
 #ifdef __WXGTK__
+void ScintillaWX::ClipChildren(wxDC& dc, PRectangle rect) {
     wxRegion rgn(wxRectFromPRectangle(rect));
     if (ac.Active()) {
         wxRect childRect = ((wxWindow*)ac.lb->GetID())->GetRect();
     wxRegion rgn(wxRectFromPRectangle(rect));
     if (ac.Active()) {
         wxRect childRect = ((wxWindow*)ac.lb->GetID())->GetRect();
@@ -830,9 +850,11 @@ void ScintillaWX::ClipChildren(wxDC& dc, PRectangle rect) {
     }
 
     dc.SetClippingRegion(rgn);
     }
 
     dc.SetClippingRegion(rgn);
-#endif
 }
 }
-
+#else
+void ScintillaWX::ClipChildren(wxDC& WXUNUSED(dc), PRectangle WXUNUSED(rect)) {
+}
+#endif
 
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
 
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
index 3784f26254f93948d7aa3950c4edd970ff1e9c60..2a6c5b5dbd92ea4f529051533682d23179b14b87 100644 (file)
@@ -139,7 +139,7 @@ public:
     void DoMiddleButtonUp(Point pt);
     void DoMouseWheel(int rotation, int delta, int linesPerAction, int ctrlDown, bool isPageScroll);
     void DoAddChar(int key);
     void DoMiddleButtonUp(Point pt);
     void DoMouseWheel(int rotation, int delta, int linesPerAction, int ctrlDown, bool isPageScroll);
     void DoAddChar(int key);
-    int  DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* consumed);
+    int  DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool meta, bool* consumed);
     void DoTick() { Tick(); }
 
 #if wxUSE_DRAG_AND_DROP
     void DoTick() { Tick(); }
 
 #if wxUSE_DRAG_AND_DROP
index d88aae231bc64d1d357d9b21528b379d9bc3b229..aa9432d377e9be65ad2fa3b19618e28436339056 100644 (file)
@@ -547,9 +547,12 @@ methodOverrideMap = {
 
 
     'GrabFocus' : (None, 0, 0, 0),
 
 
     'GrabFocus' : (None, 0, 0, 0),
+
+    # Rename some that woudl otherwise hid the wxWindow methods
     'SetFocus'  : ('SetSTCFocus', 0, 0, 0),
     'GetFocus'  : ('GetSTCFocus', 0, 0, 0),
     'SetFocus'  : ('SetSTCFocus', 0, 0, 0),
     'GetFocus'  : ('GetSTCFocus', 0, 0, 0),
-
+    'SetCursor' : ('SetSTCCursor', 0, 0, 0),
+    'GetCursor' : ('GetSTCCursor', 0, 0, 0),
 
     'LoadLexerLibrary' : (None, 0,0,0),
 
 
     'LoadLexerLibrary' : (None, 0,0,0),
 
index bba521448edeccdec80c79562152a0ff2fb3ac18..1960be5d3ddedce5e6188b5775e85b4cd5559f36 100644 (file)
@@ -3,4 +3,4 @@ scintilla/include directories from the Scintilla/SCiTE source
 distribution.  All other code needed to implement Scintilla on top of
 wxWindows is located in the directory above this one.
 
 distribution.  All other code needed to implement Scintilla on top of
 wxWindows is located in the directory above this one.
 
-The current version of the Scintilla code is 1.53
+The current version of the Scintilla code is 1.54
index 3f59c07939bad89bbb469d31eb992912022e6b92..0b2c4baee25cb8a8bc1768adf22a05c9a5fe2358 100644 (file)
@@ -25,7 +25,7 @@ protected:
        char buf[bufferSize+1];
        int startPos;
        int endPos;
        char buf[bufferSize+1];
        int startPos;
        int endPos;
-       int codePage;
+       int codePage;   
 
        virtual bool InternalIsLeadByte(char ch)=0;
        virtual void Fill(int position)=0;
 
        virtual bool InternalIsLeadByte(char ch)=0;
        virtual void Fill(int position)=0;
@@ -44,7 +44,7 @@ public:
                if (position < startPos || position >= endPos) {
                        Fill(position);
                        if (position < startPos || position >= endPos) {
                if (position < startPos || position >= endPos) {
                        Fill(position);
                        if (position < startPos || position >= endPos) {
-                               // Position is outside range of document
+                               // Position is outside range of document 
                                return chDefault;
                        }
                }
                                return chDefault;
                        }
                }
index c51c88ef594b090d6323ac316f73d04651170b1c..df4e870c580f507203f57f61f2cc58a7af04a2fe 100644 (file)
@@ -7,7 +7,7 @@
 
 typedef void (*LexerFunction)(unsigned int startPos, int lengthDoc, int initStyle,
                   WordList *keywordlists[], Accessor &styler);
 
 typedef void (*LexerFunction)(unsigned int startPos, int lengthDoc, int initStyle,
                   WordList *keywordlists[], Accessor &styler);
-
+                  
 /**
  * A LexerModule is responsible for lexing and folding a particular language.
  * The class maintains a list of LexerModules which can be searched to find a
 /**
  * A LexerModule is responsible for lexing and folding a particular language.
  * The class maintains a list of LexerModules which can be searched to find a
@@ -26,7 +26,7 @@ protected:
 
 public:
        const char *languageName;
 
 public:
        const char *languageName;
-       LexerModule(int language_, LexerFunction fnLexer_,
+       LexerModule(int language_, LexerFunction fnLexer_, 
                const char *languageName_=0, LexerFunction fnFolder_=0,
                const char * const wordListDescriptions_[] = NULL);
        int GetLanguage() const { return language; }
                const char *languageName_=0, LexerFunction fnFolder_=0,
                const char * const wordListDescriptions_[] = NULL);
        int GetLanguage() const { return language; }
index 1a7e2f166536cfb248906cd498759354430f5a51..20ac5f774ac3ed8fdacf5d9b8ad01cea1295f5b4 100644 (file)
@@ -24,11 +24,21 @@ struct Property {
 /**
  */
 class PropSet {
 /**
  */
 class PropSet {
-private:
+protected:
        enum { hashRoots=31 };
        Property *props[hashRoots];
        Property *enumnext;
        int enumhash;
        enum { hashRoots=31 };
        Property *props[hashRoots];
        Property *enumnext;
        int enumhash;
+       static unsigned int HashString(const char *s, size_t len) {
+               unsigned int ret = 0;
+               while (len--) {
+                       ret <<= 4;
+                       ret ^= *s;
+                       s++;
+               }
+               return ret;
+       }
+       static bool IncludesVar(const char *value, const char *key);
 public:
        PropSet *superPS;
        PropSet();
 public:
        PropSet *superPS;
        PropSet();
index edf4bd0d2478a49d7582da041f273c51b7c48a1f..34867542f9a8bf7d55771a58c60c30ae5884fce0 100644 (file)
@@ -56,6 +56,9 @@
 #define SCLEX_POV 39
 #define SCLEX_LOUT 40
 #define SCLEX_ESCRIPT 41
 #define SCLEX_POV 39
 #define SCLEX_LOUT 40
 #define SCLEX_ESCRIPT 41
+#define SCLEX_PS 42
+#define SCLEX_NSIS 43
+#define SCLEX_MMIXAL 44
 #define SCLEX_AUTOMATIC 1000
 #define SCE_P_DEFAULT 0
 #define SCE_P_COMMENTLINE 1
 #define SCLEX_AUTOMATIC 1000
 #define SCE_P_DEFAULT 0
 #define SCE_P_COMMENTLINE 1
 #define SCE_LUA_WORD4 15
 #define SCE_LUA_WORD5 16
 #define SCE_LUA_WORD6 17
 #define SCE_LUA_WORD4 15
 #define SCE_LUA_WORD5 16
 #define SCE_LUA_WORD6 17
+#define SCE_LUA_WORD7 18
+#define SCE_LUA_WORD8 19
 #define SCE_ERR_DEFAULT 0
 #define SCE_ERR_PYTHON 1
 #define SCE_ERR_GCC 2
 #define SCE_ERR_DEFAULT 0
 #define SCE_ERR_PYTHON 1
 #define SCE_ERR_GCC 2
 #define SCE_POV_DEFAULT 0
 #define SCE_POV_COMMENT 1
 #define SCE_POV_COMMENTLINE 2
 #define SCE_POV_DEFAULT 0
 #define SCE_POV_COMMENT 1
 #define SCE_POV_COMMENTLINE 2
-#define SCE_POV_COMMENTDOC 3
-#define SCE_POV_NUMBER 4
-#define SCE_POV_WORD 5
+#define SCE_POV_NUMBER 3
+#define SCE_POV_OPERATOR 4
+#define SCE_POV_IDENTIFIER 5
 #define SCE_POV_STRING 6
 #define SCE_POV_STRING 6
-#define SCE_POV_OPERATOR 7
-#define SCE_POV_IDENTIFIER 8
-#define SCE_POV_BRACE 9
+#define SCE_POV_STRINGEOL 7
+#define SCE_POV_DIRECTIVE 8
+#define SCE_POV_BADDIRECTIVE 9
 #define SCE_POV_WORD2 10
 #define SCE_POV_WORD2 10
+#define SCE_POV_WORD3 11
+#define SCE_POV_WORD4 12
+#define SCE_POV_WORD5 13
+#define SCE_POV_WORD6 14
+#define SCE_POV_WORD7 15
+#define SCE_POV_WORD8 16
 #define SCE_LOUT_DEFAULT 0
 #define SCE_LOUT_COMMENT 1
 #define SCE_LOUT_NUMBER 2
 #define SCE_LOUT_DEFAULT 0
 #define SCE_LOUT_COMMENT 1
 #define SCE_LOUT_NUMBER 2
 #define SCE_ESCRIPT_BRACE 9
 #define SCE_ESCRIPT_WORD2 10
 #define SCE_ESCRIPT_WORD3 11
 #define SCE_ESCRIPT_BRACE 9
 #define SCE_ESCRIPT_WORD2 10
 #define SCE_ESCRIPT_WORD3 11
+#define SCE_PS_DEFAULT 0
+#define SCE_PS_COMMENT 1
+#define SCE_PS_DSC_COMMENT 2
+#define SCE_PS_DSC_VALUE 3
+#define SCE_PS_NUMBER 4
+#define SCE_PS_NAME 5
+#define SCE_PS_KEYWORD 6
+#define SCE_PS_LITERAL 7
+#define SCE_PS_IMMEVAL 8
+#define SCE_PS_PAREN_ARRAY 9
+#define SCE_PS_PAREN_DICT 10
+#define SCE_PS_PAREN_PROC 11
+#define SCE_PS_TEXT 12
+#define SCE_PS_HEXSTRING 13
+#define SCE_PS_BASE85STRING 14
+#define SCE_PS_BADSTRINGCHAR 15
+#define SCE_NSIS_DEFAULT 0
+#define SCE_NSIS_COMMENT 1
+#define SCE_NSIS_STRINGDQ 2
+#define SCE_NSIS_STRINGLQ 3
+#define SCE_NSIS_STRINGRQ 4
+#define SCE_NSIS_FUNCTION 5
+#define SCE_NSIS_VARIABLE 6
+#define SCE_NSIS_LABEL 7
+#define SCE_NSIS_USERDEFINED 8
+#define SCE_NSIS_SECTIONDEF 9
+#define SCE_NSIS_SUBSECTIONDEF 10
+#define SCE_NSIS_IFDEFINEDEF 11
+#define SCE_NSIS_MACRODEF 12
+#define SCE_NSIS_STRINGVAR 13
+#define SCE_MMIXAL_LEADWS 0
+#define SCE_MMIXAL_COMMENT 1
+#define SCE_MMIXAL_LABEL 2
+#define SCE_MMIXAL_OPCODE 3
+#define SCE_MMIXAL_OPCODE_PRE 4
+#define SCE_MMIXAL_OPCODE_VALID 5
+#define SCE_MMIXAL_OPCODE_UNKNOWN 6
+#define SCE_MMIXAL_OPCODE_POST 7
+#define SCE_MMIXAL_OPERANDS 8
+#define SCE_MMIXAL_NUMBER 9
+#define SCE_MMIXAL_REF 10
+#define SCE_MMIXAL_CHAR 11
+#define SCE_MMIXAL_STRING 12
+#define SCE_MMIXAL_REGISTER 13
+#define SCE_MMIXAL_HEX 14
+#define SCE_MMIXAL_OPERATOR 15
+#define SCE_MMIXAL_SYMBOL 16
+#define SCE_MMIXAL_INCLUDE 17
 //--Autogenerated -- end of section automatically generated from Scintilla.iface
 
 #endif
 //--Autogenerated -- end of section automatically generated from Scintilla.iface
 
 #endif
index 250f793142b885bc75588c8dcdec876a7f969b40..34893c89382b259f7964bb35be47b628ae2ca81f 100644 (file)
@@ -204,6 +204,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
 #define INDIC_TT 2
 #define INDIC_DIAGONAL 3
 #define INDIC_STRIKE 4
 #define INDIC_TT 2
 #define INDIC_DIAGONAL 3
 #define INDIC_STRIKE 4
+#define INDIC_HIDDEN 5
 #define INDIC0_MASK 0x20
 #define INDIC1_MASK 0x40
 #define INDIC2_MASK 0x80
 #define INDIC0_MASK 0x20
 #define INDIC1_MASK 0x40
 #define INDIC2_MASK 0x80
@@ -546,6 +547,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
 #define SCI_GETLEXER 4002
 #define SCI_COLOURISE 4003
 #define SCI_SETPROPERTY 4004
 #define SCI_GETLEXER 4002
 #define SCI_COLOURISE 4003
 #define SCI_SETPROPERTY 4004
+#define KEYWORDSET_MAX 8
 #define SCI_SETKEYWORDS 4005
 #define SCI_SETLEXERLANGUAGE 4006
 #define SCI_LOADLEXERLIBRARY 4007
 #define SCI_SETKEYWORDS 4005
 #define SCI_SETLEXERLANGUAGE 4006
 #define SCI_LOADLEXERLIBRARY 4007
index 2ac0b66f5037c478861b2ad75add2980948547be..9ca4ad539a10e6143c5935e26fc2bc1b3db5176c 100644 (file)
@@ -462,6 +462,7 @@ val INDIC_SQUIGGLE=1
 val INDIC_TT=2
 val INDIC_DIAGONAL=3
 val INDIC_STRIKE=4
 val INDIC_TT=2
 val INDIC_DIAGONAL=3
 val INDIC_STRIKE=4
+val INDIC_HIDDEN=5
 val INDIC0_MASK=0x20
 val INDIC1_MASK=0x40
 val INDIC2_MASK=0x80
 val INDIC0_MASK=0x20
 val INDIC1_MASK=0x40
 val INDIC2_MASK=0x80
@@ -1476,6 +1477,9 @@ fun void Colourise=4003(position start, position end)
 # Set up a value that may be used by a lexer for some optional feature.
 set void SetProperty=4004(string key, string value)
 
 # Set up a value that may be used by a lexer for some optional feature.
 set void SetProperty=4004(string key, string value)
 
+# Maximum value of keywordSet parameter of SetKeyWords.
+val KEYWORDSET_MAX=8
+
 # Set up the key words used by the lexer.
 set void SetKeyWords=4005(int keywordSet, string keyWords)
 
 # Set up the key words used by the lexer.
 set void SetKeyWords=4005(int keywordSet, string keyWords)
 
@@ -1584,6 +1588,9 @@ val SCLEX_CSS=38
 val SCLEX_POV=39
 val SCLEX_LOUT=40
 val SCLEX_ESCRIPT=41
 val SCLEX_POV=39
 val SCLEX_LOUT=40
 val SCLEX_ESCRIPT=41
+val SCLEX_PS=42
+val SCLEX_NSIS=43
+val SCLEX_MMIXAL=44
 
 # When a lexer specifies its language as SCLEX_AUTOMATIC it receives a
 # value assigned in sequence from SCLEX_AUTOMATIC+1.
 
 # When a lexer specifies its language as SCLEX_AUTOMATIC it receives a
 # value assigned in sequence from SCLEX_AUTOMATIC+1.
@@ -1835,6 +1842,8 @@ val SCE_LUA_WORD3=14
 val SCE_LUA_WORD4=15
 val SCE_LUA_WORD5=16
 val SCE_LUA_WORD6=17
 val SCE_LUA_WORD4=15
 val SCE_LUA_WORD5=16
 val SCE_LUA_WORD6=17
+val SCE_LUA_WORD7=18
+val SCE_LUA_WORD8=19
 # Lexical states for SCLEX_ERRORLIST
 lex ErrorList=SCLEX_ERRORLIST SCE_ERR_
 val SCE_ERR_DEFAULT=0
 # Lexical states for SCLEX_ERRORLIST
 lex ErrorList=SCLEX_ERRORLIST SCE_ERR_
 val SCE_ERR_DEFAULT=0
@@ -2058,14 +2067,20 @@ lex POV=SCLEX_POV SCE_POV_
 val SCE_POV_DEFAULT=0
 val SCE_POV_COMMENT=1
 val SCE_POV_COMMENTLINE=2
 val SCE_POV_DEFAULT=0
 val SCE_POV_COMMENT=1
 val SCE_POV_COMMENTLINE=2
-val SCE_POV_COMMENTDOC=3
-val SCE_POV_NUMBER=4
-val SCE_POV_WORD=5
+val SCE_POV_NUMBER=3
+val SCE_POV_OPERATOR=4
+val SCE_POV_IDENTIFIER=5
 val SCE_POV_STRING=6
 val SCE_POV_STRING=6
-val SCE_POV_OPERATOR=7
-val SCE_POV_IDENTIFIER=8
-val SCE_POV_BRACE=9
+val SCE_POV_STRINGEOL=7
+val SCE_POV_DIRECTIVE=8
+val SCE_POV_BADDIRECTIVE=9
 val SCE_POV_WORD2=10
 val SCE_POV_WORD2=10
+val SCE_POV_WORD3=11
+val SCE_POV_WORD4=12
+val SCE_POV_WORD5=13
+val SCE_POV_WORD6=14
+val SCE_POV_WORD7=15
+val SCE_POV_WORD8=16
 # Lexical states for SCLEX_LOUT
 lex LOUT=SCLEX_LOUT SCE_LOUT_
 val SCE_LOUT_DEFAULT=0
 # Lexical states for SCLEX_LOUT
 lex LOUT=SCLEX_LOUT SCE_LOUT_
 val SCE_LOUT_DEFAULT=0
@@ -2093,6 +2108,60 @@ val SCE_ESCRIPT_IDENTIFIER=8
 val SCE_ESCRIPT_BRACE=9
 val SCE_ESCRIPT_WORD2=10
 val SCE_ESCRIPT_WORD3=11
 val SCE_ESCRIPT_BRACE=9
 val SCE_ESCRIPT_WORD2=10
 val SCE_ESCRIPT_WORD3=11
+# Lexical states for SCLEX_PS
+lex PS=SCLEX_PS SCE_PS_
+val SCE_PS_DEFAULT=0
+val SCE_PS_COMMENT=1
+val SCE_PS_DSC_COMMENT=2
+val SCE_PS_DSC_VALUE=3
+val SCE_PS_NUMBER=4
+val SCE_PS_NAME=5
+val SCE_PS_KEYWORD=6
+val SCE_PS_LITERAL=7
+val SCE_PS_IMMEVAL=8
+val SCE_PS_PAREN_ARRAY=9
+val SCE_PS_PAREN_DICT=10
+val SCE_PS_PAREN_PROC=11
+val SCE_PS_TEXT=12
+val SCE_PS_HEXSTRING=13
+val SCE_PS_BASE85STRING=14
+val SCE_PS_BADSTRINGCHAR=15
+# Lexical states for SCLEX_NSIS
+lex NSIS=SCLEX_NSIS SCE_NSIS_
+val SCE_NSIS_DEFAULT=0
+val SCE_NSIS_COMMENT=1
+val SCE_NSIS_STRINGDQ=2
+val SCE_NSIS_STRINGLQ=3
+val SCE_NSIS_STRINGRQ=4
+val SCE_NSIS_FUNCTION=5
+val SCE_NSIS_VARIABLE=6
+val SCE_NSIS_LABEL=7
+val SCE_NSIS_USERDEFINED=8
+val SCE_NSIS_SECTIONDEF=9
+val SCE_NSIS_SUBSECTIONDEF=10
+val SCE_NSIS_IFDEFINEDEF=11
+val SCE_NSIS_MACRODEF=12
+val SCE_NSIS_STRINGVAR=13
+# Lexical states for SCLEX_MMIXAL
+lex MMIXAL=SCLEX_MMIXAL SCE_MMIXAL_
+val SCE_MMIXAL_LEADWS=0
+val SCE_MMIXAL_COMMENT=1
+val SCE_MMIXAL_LABEL=2
+val SCE_MMIXAL_OPCODE=3
+val SCE_MMIXAL_OPCODE_PRE=4
+val SCE_MMIXAL_OPCODE_VALID=5
+val SCE_MMIXAL_OPCODE_UNKNOWN=6
+val SCE_MMIXAL_OPCODE_POST=7
+val SCE_MMIXAL_OPERANDS=8
+val SCE_MMIXAL_NUMBER=9
+val SCE_MMIXAL_REF=10
+val SCE_MMIXAL_CHAR=11
+val SCE_MMIXAL_STRING=12
+val SCE_MMIXAL_REGISTER=13
+val SCE_MMIXAL_HEX=14
+val SCE_MMIXAL_OPERATOR=15
+val SCE_MMIXAL_SYMBOL=16
+val SCE_MMIXAL_INCLUDE=17
 
 # Events
 
 
 # Events
 
index 43246050170cf5efd355f9e5a38648d772e3ddeb..6c16b150f267751c1cc38f2e2213b9d934a64da8 100644 (file)
@@ -26,8 +26,8 @@ protected:
        bool InternalIsLeadByte(char ch);
        void Fill(int position);
 public:
        bool InternalIsLeadByte(char ch);
        void Fill(int position);
 public:
-       WindowAccessor(WindowID id_, PropSet &props_) :
-               Accessor(), id(id_), props(props_),
+       WindowAccessor(WindowID id_, PropSet &props_) : 
+               Accessor(), id(id_), props(props_), 
                lenDoc(-1), validLen(0), chFlags(0), chWhile(0) {
        }
        ~WindowAccessor();
                lenDoc(-1), validLen(0), chFlags(0), chWhile(0) {
        }
        ~WindowAccessor();
@@ -40,8 +40,8 @@ public:
        void Flush();
        int GetLineState(int line);
        int SetLineState(int line, int state);
        void Flush();
        int GetLineState(int line);
        int SetLineState(int line, int state);
-       int GetPropertyInt(const char *key, int defaultValue=0) {
-               return props.GetInt(key, defaultValue);
+       int GetPropertyInt(const char *key, int defaultValue=0) { 
+               return props.GetInt(key, defaultValue); 
        }
        char *GetProperties() {
                return props.ToString();
        }
        char *GetProperties() {
                return props.ToString();
index 8f292869d743ed28d3bfc7aaf6f9c3c5de2953b6..6dae67507527f33fa135e9042e3993ccfba24ff5 100644 (file)
@@ -103,9 +103,9 @@ void MarkerHandleSet::RemoveNumber(int markerNum) {
                if (mhn->number == markerNum) {
                        *pmhn = mhn->next;
                        delete mhn;
                if (mhn->number == markerNum) {
                        *pmhn = mhn->next;
                        delete mhn;
-                       return ;
+               } else {
+                       pmhn = &((*pmhn)->next);
                }
                }
-               pmhn = &((*pmhn)->next);
        }
 }
 
        }
 }
 
index 2866d548cb808560373c6d7040c495a0ae277020..5cfcbfe1f01fcaac2f1601f029401227dc187f4c 100644 (file)
@@ -212,7 +212,7 @@ public:
        int GetMark(int line);
        void DeleteAllMarks(int markerNum);
        int LineFromHandle(int markerHandle);
        int GetMark(int line);
        void DeleteAllMarks(int markerNum);
        int LineFromHandle(int markerHandle);
-
        /// Actions without undo
        void BasicInsertString(int position, char *s, int insertLength);
        void BasicDeleteChars(int position, int deleteLength);
        /// Actions without undo
        void BasicInsertString(int position, char *s, int insertLength);
        void BasicDeleteChars(int position, int deleteLength);
index 98fc6b330ca986d3ed15b0d556bdf7f9784d09f3..487262f8add4bad246193af66d17025bb6eebb64 100644 (file)
@@ -394,7 +394,7 @@ bool Document::InsertStyledString(int position, char *s, int insertLength) {
                            DocModification(
                                SC_MOD_BEFOREINSERT | SC_PERFORMED_USER,
                                position / 2, insertLength / 2,
                            DocModification(
                                SC_MOD_BEFOREINSERT | SC_PERFORMED_USER,
                                position / 2, insertLength / 2,
-                               0, 0));
+                               0, s));
                        int prevLinesTotal = LinesTotal();
                        bool startSavePoint = cb.IsSavePoint();
                        const char *text = cb.InsertString(position, s, insertLength);
                        int prevLinesTotal = LinesTotal();
                        bool startSavePoint = cb.IsSavePoint();
                        const char *text = cb.InsertString(position, s, insertLength);
@@ -926,7 +926,7 @@ long Document::FindText(int minPos, int maxPos, const char *s,
                                if (line == lineRangeStart) {
                                        if ((startPos != endOfLine) && (searchEnd == '$'))
                                                continue;       // Can't match end of line if start position before end of line
                                if (line == lineRangeStart) {
                                        if ((startPos != endOfLine) && (searchEnd == '$'))
                                                continue;       // Can't match end of line if start position before end of line
-                                       endOfLine = startPos;
+                                       endOfLine = startPos+1;
                                }
                        }
 
                                }
                        }
 
@@ -938,10 +938,10 @@ long Document::FindText(int minPos, int maxPos, const char *s,
                                if (increment == -1) {
                                        // Check for the last match on this line.
                                        int repetitions = 1000; // Break out of infinite loop
                                if (increment == -1) {
                                        // Check for the last match on this line.
                                        int repetitions = 1000; // Break out of infinite loop
-                                       while (success && (pre->eopat[0] < endOfLine) && (repetitions--)) {
-                                               success = pre->Execute(di, pre->eopat[0], endOfLine);
+                                       while (success && (pre->eopat[0] <= (endOfLine+1)) && (repetitions--)) {
+                                               success = pre->Execute(di, pos+1, endOfLine+1);
                                                if (success) {
                                                if (success) {
-                                                       if (pre->eopat[0] <= minPos) {
+                                                       if (pre->eopat[0] <= (minPos+1)) {
                                                                pos = pre->bopat[0];
                                                                lenRet = pre->eopat[0] - pre->bopat[0];
                                                        } else {
                                                                pos = pre->bopat[0];
                                                                lenRet = pre->eopat[0] - pre->bopat[0];
                                                        } else {
index b7902df35a1bfc02e764275f2709879440507f3c..738eca7a07695a3f6be0e9ecb1dbd4fe189f7f94 100644 (file)
@@ -130,8 +130,8 @@ void DocumentAccessor::Flush() {
        lenDoc = -1;
        if (validLen > 0) {
                pdoc->SetStyles(validLen, styleBuf);
        lenDoc = -1;
        if (validLen > 0) {
                pdoc->SetStyles(validLen, styleBuf);
-               validLen = 0;
                startPosStyling += validLen;
                startPosStyling += validLen;
+               validLen = 0;
        }
 }
 
        }
 }
 
index f6523c94f995c1ce37a20ec1b65917b420aefc93..dc591d13ec3142c08216f5451b18e752db0fb6e1 100644 (file)
@@ -32,9 +32,9 @@ protected:
        void Fill(int position);
 
 public:
        void Fill(int position);
 
 public:
-       DocumentAccessor(Document *pdoc_, PropSet &props_, WindowID id_=0) :
+       DocumentAccessor(Document *pdoc_, PropSet &props_, WindowID id_=0) : 
                Accessor(), pdoc(pdoc_), props(props_), id(id_),
                Accessor(), pdoc(pdoc_), props(props_), id(id_),
-               lenDoc(-1), validLen(0), chFlags(0), chWhile(0),
+               lenDoc(-1), validLen(0), chFlags(0), chWhile(0), 
                startSeg(0), startPosStyling(0) {
        }
        ~DocumentAccessor();
                startSeg(0), startPosStyling(0) {
        }
        ~DocumentAccessor();
@@ -47,8 +47,8 @@ public:
        void Flush();
        int GetLineState(int line);
        int SetLineState(int line, int state);
        void Flush();
        int GetLineState(int line);
        int SetLineState(int line, int state);
-       int GetPropertyInt(const char *key, int defaultValue=0) {
-               return props.GetInt(key, defaultValue);
+       int GetPropertyInt(const char *key, int defaultValue=0) { 
+               return props.GetInt(key, defaultValue); 
        }
        char *GetProperties() {
                return props.ToString();
        }
        char *GetProperties() {
                return props.ToString();
index cc53f5aac85cdea2e0f00ef5b502dc96f92f14df..df260ed5126ba79716a43a99638dbeb7ac53bd50 100644 (file)
@@ -1414,7 +1414,7 @@ void Editor::LinesSplit(int pixelWidth) {
                                for (int subLine = 1; subLine < ll->lines; subLine++) {
                                        pdoc->InsertString(posLineStart + (subLine - 1) * strlen(eol) +
                                                ll->LineStart(subLine), eol);
                                for (int subLine = 1; subLine < ll->lines; subLine++) {
                                        pdoc->InsertString(posLineStart + (subLine - 1) * strlen(eol) +
                                                ll->LineStart(subLine), eol);
-                                       targetEnd += strlen(eol);
+                                       targetEnd += static_cast<int>(strlen(eol));
                                }
                        }
                }
                                }
                        }
                }
@@ -1428,6 +1428,12 @@ int Editor::SubstituteMarkerIfEmpty(int markerCheck, int markerDefault) {
        return markerCheck;
 }
 
        return markerCheck;
 }
 
+// Avoid 64 bit compiler warnings.
+// Scintilla does not support text buffers larger than 2**31
+static int istrlen(const char *s) {
+       return static_cast<int>(strlen(s));
+}
+
 void Editor::PaintSelMargin(Surface *surfWindow, PRectangle &rc) {
        if (vs.fixedColumnWidth == 0)
                return;
 void Editor::PaintSelMargin(Surface *surfWindow, PRectangle &rc) {
        if (vs.fixedColumnWidth == 0)
                return;
@@ -1589,11 +1595,11 @@ void Editor::PaintSelMargin(Surface *surfWindow, PRectangle &rc) {
                                        }
                                        PRectangle rcNumber = rcMarker;
                                        // Right justify
                                        }
                                        PRectangle rcNumber = rcMarker;
                                        // Right justify
-                                       int width = surface->WidthText(vs.styles[STYLE_LINENUMBER].font, number, strlen(number));
+                                       int width = surface->WidthText(vs.styles[STYLE_LINENUMBER].font, number, istrlen(number));
                                        int xpos = rcNumber.right - width - 3;
                                        rcNumber.left = xpos;
                                        surface->DrawTextNoClip(rcNumber, vs.styles[STYLE_LINENUMBER].font,
                                        int xpos = rcNumber.right - width - 3;
                                        rcNumber.left = xpos;
                                        surface->DrawTextNoClip(rcNumber, vs.styles[STYLE_LINENUMBER].font,
-                                                               rcNumber.top + vs.maxAscent, number, strlen(number),
+                                                               rcNumber.top + vs.maxAscent, number, istrlen(number),
                                                                vs.styles[STYLE_LINENUMBER].fore.allocated,
                                                                vs.styles[STYLE_LINENUMBER].back.allocated);
                                }
                                                                vs.styles[STYLE_LINENUMBER].fore.allocated,
                                                                vs.styles[STYLE_LINENUMBER].back.allocated);
                                }
@@ -1770,7 +1776,7 @@ void Editor::LayoutLine(int line, Surface *surface, ViewStyle &vstyle, LineLayou
                                                } else if (controlCharSymbol < 32) {
                                                        const char *ctrlChar = ControlCharacterString(ll->chars[charInLine]);
                                                        // +3 For a blank on front and rounded edge each side:
                                                } else if (controlCharSymbol < 32) {
                                                        const char *ctrlChar = ControlCharacterString(ll->chars[charInLine]);
                                                        // +3 For a blank on front and rounded edge each side:
-                                                       ll->positions[charInLine + 1] = surface->WidthText(ctrlCharsFont, ctrlChar, strlen(ctrlChar)) + 3;
+                                                       ll->positions[charInLine + 1] = surface->WidthText(ctrlCharsFont, ctrlChar, istrlen(ctrlChar)) + 3;
                                                } else {
                                                        char cc[2] = { static_cast<char>(controlCharSymbol), '\0' };
                                                        surface->MeasureWidths(ctrlCharsFont, cc, 1,
                                                } else {
                                                        char cc[2] = { static_cast<char>(controlCharSymbol), '\0' };
                                                        surface->MeasureWidths(ctrlCharsFont, cc, 1,
@@ -2135,7 +2141,7 @@ void Editor::DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int lineVis
                                                rcChar.left++;
                                                rcChar.right--;
                                                surface->DrawTextClipped(rcChar, ctrlCharsFont,
                                                rcChar.left++;
                                                rcChar.right--;
                                                surface->DrawTextClipped(rcChar, ctrlCharsFont,
-                                                                        rcSegment.top + vsDraw.maxAscent, ctrlChar, strlen(ctrlChar),
+                                                                        rcSegment.top + vsDraw.maxAscent, ctrlChar, istrlen(ctrlChar),
                                                                         textBack, textFore);
                                        } else {
                                                char cc[2] = { static_cast<char>(controlCharSymbol), '\0' };
                                                                         textBack, textFore);
                                        } else {
                                                char cc[2] = { static_cast<char>(controlCharSymbol), '\0' };
@@ -2360,7 +2366,9 @@ void Editor::Paint(Surface *surfaceWindow, PRectangle rcArea) {
                if (AbandonPaint()) {
                        return;
                }
                if (AbandonPaint()) {
                        return;
                }
+               RefreshPixMaps(surfaceWindow);  // In case pixmaps invalidated by scrollbar change
        }
        }
+       PLATFORM_ASSERT(pixmapSelPattern->Initialised());
 
        PRectangle rcRightMargin = rcClient;
        rcRightMargin.left = rcRightMargin.right - vs.rightMarginWidth;
 
        PRectangle rcRightMargin = rcClient;
        rcRightMargin.left = rcRightMargin.right - vs.rightMarginWidth;
@@ -2389,6 +2397,7 @@ void Editor::Paint(Surface *surfaceWindow, PRectangle rcArea) {
                Surface *surface = surfaceWindow;
                if (bufferedDraw) {
                        surface = pixmapLine;
                Surface *surface = surfaceWindow;
                if (bufferedDraw) {
                        surface = pixmapLine;
+                       PLATFORM_ASSERT(pixmapLine->Initialised());
                }
                surface->SetUnicodeMode(IsUnicodeMode());
                surface->SetDBCSMode(CodePage());
                }
                surface->SetUnicodeMode(IsUnicodeMode());
                surface->SetDBCSMode(CodePage());
@@ -2680,7 +2689,7 @@ long Editor::FormatRange(bool draw, RangeToFormat *pfr) {
        int lineNumberWidth = 0;
        if (lineNumberIndex >= 0) {
                lineNumberWidth = surfaceMeasure->WidthText(vsPrint.styles[STYLE_LINENUMBER].font,
        int lineNumberWidth = 0;
        if (lineNumberIndex >= 0) {
                lineNumberWidth = surfaceMeasure->WidthText(vsPrint.styles[STYLE_LINENUMBER].font,
-                                 "99999" lineNumberPrintSpace, 5 + strlen(lineNumberPrintSpace));
+                                 "99999" lineNumberPrintSpace, 5 + istrlen(lineNumberPrintSpace));
                vsPrint.ms[lineNumberIndex].width = lineNumberWidth;
        }
 
                vsPrint.ms[lineNumberIndex].width = lineNumberWidth;
        }
 
@@ -2760,10 +2769,10 @@ long Editor::FormatRange(bool draw, RangeToFormat *pfr) {
                        rcNumber.right = rcNumber.left + lineNumberWidth;
                        // Right justify
                        rcNumber.left -= surfaceMeasure->WidthText(
                        rcNumber.right = rcNumber.left + lineNumberWidth;
                        // Right justify
                        rcNumber.left -= surfaceMeasure->WidthText(
-                                            vsPrint.styles[STYLE_LINENUMBER].font, number, strlen(number));
+                                            vsPrint.styles[STYLE_LINENUMBER].font, number, istrlen(number));
                        surface->FlushCachedState();
                        surface->DrawTextNoClip(rcNumber, vsPrint.styles[STYLE_LINENUMBER].font,
                        surface->FlushCachedState();
                        surface->DrawTextNoClip(rcNumber, vsPrint.styles[STYLE_LINENUMBER].font,
-                                               ypos + vsPrint.maxAscent, number, strlen(number),
+                                               ypos + vsPrint.maxAscent, number, istrlen(number),
                                                vsPrint.styles[STYLE_LINENUMBER].fore.allocated,
                                                vsPrint.styles[STYLE_LINENUMBER].back.allocated);
                }
                                                vsPrint.styles[STYLE_LINENUMBER].fore.allocated,
                                                vsPrint.styles[STYLE_LINENUMBER].back.allocated);
                }
@@ -2799,7 +2808,7 @@ int Editor::TextWidth(int style, const char *text) {
        RefreshStyleData();
        AutoSurface surface(this);
        if (surface) {
        RefreshStyleData();
        AutoSurface surface(this);
        if (surface) {
-               return surface->WidthText(vs.styles[style].font, text, strlen(text));
+               return surface->WidthText(vs.styles[style].font, text, istrlen(text));
        } else {
                return 1;
        }
        } else {
                return 1;
        }
@@ -3553,7 +3562,7 @@ void Editor::LineDuplicate() {
        char *thisLine = CopyRange(start, end);
        const char *eol = StringFromEOLMode(pdoc->eolMode);
        pdoc->InsertString(end, eol);
        char *thisLine = CopyRange(start, end);
        const char *eol = StringFromEOLMode(pdoc->eolMode);
        pdoc->InsertString(end, eol);
-       pdoc->InsertString(end + strlen(eol), thisLine, end - start);
+       pdoc->InsertString(end + istrlen(eol), thisLine, end - start);
        delete []thisLine;
 }
 
        delete []thisLine;
 }
 
@@ -3568,7 +3577,7 @@ void Editor::NewLine() {
                eol = "\r";
        } // else SC_EOL_LF -> "\n" already set
        if (pdoc->InsertString(currentPos, eol)) {
                eol = "\r";
        } // else SC_EOL_LF -> "\n" already set
        if (pdoc->InsertString(currentPos, eol)) {
-               SetEmptySelection(currentPos + strlen(eol));
+               SetEmptySelection(currentPos + istrlen(eol));
                while (*eol) {
                        NotifyChar(*eol);
                        eol++;
                while (*eol) {
                        NotifyChar(*eol);
                        eol++;
@@ -4069,7 +4078,7 @@ long Editor::FindText(
     sptr_t lParam) {                   ///< @c TextToFind structure: The text to search for in the given range.
 
        TextToFind *ft = reinterpret_cast<TextToFind *>(lParam);
     sptr_t lParam) {                   ///< @c TextToFind structure: The text to search for in the given range.
 
        TextToFind *ft = reinterpret_cast<TextToFind *>(lParam);
-       int lengthFound = strlen(ft->lpstrText);
+       int lengthFound = istrlen(ft->lpstrText);
        int pos = pdoc->FindText(ft->chrg.cpMin, ft->chrg.cpMax, ft->lpstrText,
                                 (wParam & SCFIND_MATCHCASE) != 0,
                                 (wParam & SCFIND_WHOLEWORD) != 0,
        int pos = pdoc->FindText(ft->chrg.cpMin, ft->chrg.cpMax, ft->lpstrText,
                                 (wParam & SCFIND_MATCHCASE) != 0,
                                 (wParam & SCFIND_WHOLEWORD) != 0,
@@ -4112,7 +4121,7 @@ long Editor::SearchText(
 
        const char *txt = reinterpret_cast<char *>(lParam);
        int pos;
 
        const char *txt = reinterpret_cast<char *>(lParam);
        int pos;
-       int lengthFound = strlen(txt);
+       int lengthFound = istrlen(txt);
        if (iMessage == SCI_SEARCHNEXT) {
                pos = pdoc->FindText(searchAnchor, pdoc->Length(), txt,
                                     (wParam & SCFIND_MATCHCASE) != 0,
        if (iMessage == SCI_SEARCHNEXT) {
                pos = pdoc->FindText(searchAnchor, pdoc->Length(), txt,
                                     (wParam & SCFIND_MATCHCASE) != 0,
@@ -4315,14 +4324,14 @@ void Editor::DropAt(int position, const char *value, bool moving, bool rectangul
                position = positionAfterDeletion;
 
                if (rectangular) {
                position = positionAfterDeletion;
 
                if (rectangular) {
-                       PasteRectangular(position, value, strlen(value));
+                       PasteRectangular(position, value, istrlen(value));
                        pdoc->EndUndoAction();
                        // Should try to select new rectangle but it may not be a rectangle now so just select the drop position
                        SetSelection(position, position);
                } else {
                        position = MovePositionOutsideChar(position, currentPos - position);
                        if (pdoc->InsertString(position, value)) {
                        pdoc->EndUndoAction();
                        // Should try to select new rectangle but it may not be a rectangle now so just select the drop position
                        SetSelection(position, position);
                } else {
                        position = MovePositionOutsideChar(position, currentPos - position);
                        if (pdoc->InsertString(position, value)) {
-                               SetSelection(position + strlen(value), position);
+                               SetSelection(position + istrlen(value), position);
                        }
                        pdoc->EndUndoAction();
                }
                        }
                        pdoc->EndUndoAction();
                }
@@ -4990,7 +4999,7 @@ void Editor::EnsureLineVisible(int lineDoc, bool enforcePolicy) {
 int Editor::ReplaceTarget(bool replacePatterns, const char *text, int length) {
        pdoc->BeginUndoAction();
        if (length == -1)
 int Editor::ReplaceTarget(bool replacePatterns, const char *text, int length) {
        pdoc->BeginUndoAction();
        if (length == -1)
-               length = strlen(text);
+               length = istrlen(text);
        if (replacePatterns) {
                text = pdoc->SubstituteByPosition(text, &length);
                if (!text)
        if (replacePatterns) {
                text = pdoc->SubstituteByPosition(text, &length);
                if (!text)
@@ -5186,7 +5195,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
                        char *replacement = CharPtrFromSPtr(lParam);
                        pdoc->InsertString(currentPos, replacement);
                        pdoc->EndUndoAction();
                        char *replacement = CharPtrFromSPtr(lParam);
                        pdoc->InsertString(currentPos, replacement);
                        pdoc->EndUndoAction();
-                       SetEmptySelection(currentPos + strlen(replacement));
+                       SetEmptySelection(currentPos + istrlen(replacement));
                        EnsureCaretVisible();
                }
                break;
                        EnsureCaretVisible();
                }
                break;
@@ -5357,7 +5366,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
                        char *sz = CharPtrFromSPtr(lParam);
                        pdoc->InsertString(insertPos, sz);
                        if (newCurrent > insertPos)
                        char *sz = CharPtrFromSPtr(lParam);
                        pdoc->InsertString(insertPos, sz);
                        if (newCurrent > insertPos)
-                               newCurrent += strlen(sz);
+                               newCurrent += istrlen(sz);
                        SetEmptySelection(newCurrent);
                        return 0;
                }
                        SetEmptySelection(newCurrent);
                        return 0;
                }
index 01d9ac71410d9b67c0e372d1ddd0600689e2eac3..6308fc28be4a4c83a8657f4d072286378e1e4c0c 100644 (file)
 
 #if PLAT_WIN
 #define EXT_LEXER_DECL __stdcall
 
 #if PLAT_WIN
 #define EXT_LEXER_DECL __stdcall
-#elif PLAT_GTK
-#define EXT_LEXER_DECL
-#endif
-
-#if PLAT_WX
-#ifdef __WXMSW__
-#define EXT_LEXER_DECL __stdcall
 #else
 #else
-#define EXT_LEXER_DECL
-#endif
+#define EXT_LEXER_DECL 
 #endif
 
 // External Lexer function definitions...
 #endif
 
 // External Lexer function definitions...
@@ -41,7 +33,7 @@ protected:
        int externalLanguage;
        char name[100];
 public:
        int externalLanguage;
        char name[100];
 public:
-       ExternalLexerModule(int language_, LexerFunction fnLexer_,
+       ExternalLexerModule(int language_, LexerFunction fnLexer_, 
                const char *languageName_=0, LexerFunction fnFolder_=0) : LexerModule(language_, fnLexer_, 0, fnFolder_){
                strncpy(name, languageName_, sizeof(name));
                languageName = name;
                const char *languageName_=0, LexerFunction fnFolder_=0) : LexerModule(language_, fnLexer_, 0, fnFolder_){
                strncpy(name, languageName_, sizeof(name));
                languageName = name;
@@ -70,7 +62,7 @@ public:
        LexerLibrary(const char* ModuleName);
        ~LexerLibrary();
        void Release();
        LexerLibrary(const char* ModuleName);
        ~LexerLibrary();
        void Release();
-
+       
        LexerLibrary    *next;
        SString                 m_sModuleName;
 };
        LexerLibrary    *next;
        SString                 m_sModuleName;
 };
@@ -79,10 +71,10 @@ public:
 class LexerManager {
 public:
        ~LexerManager();
 class LexerManager {
 public:
        ~LexerManager();
-
+       
        static LexerManager *GetInstance();
        static void DeleteInstance();
        static LexerManager *GetInstance();
        static void DeleteInstance();
-
+       
        void Load(const char* path);
        void Clear();
 
        void Load(const char* path);
        void Clear();
 
index 580e9f86da9e34cbd0615d607bd394a87d1752cd..1e386b68e30111ba6aba6b0ade58898dad9ca0b1 100644 (file)
@@ -55,6 +55,8 @@ void Indicator::Draw(Surface *surface, PRectangle &rc) {
        } else if (style == INDIC_STRIKE) {
                surface->MoveTo(rc.left, rc.top - 4);
                surface->LineTo(rc.right, rc.top - 4);
        } else if (style == INDIC_STRIKE) {
                surface->MoveTo(rc.left, rc.top - 4);
                surface->LineTo(rc.right, rc.top - 4);
+       } else if (style == INDIC_HIDDEN) {
+               // Draw nothing
        } else {        // Either INDIC_PLAIN or unknown
                surface->MoveTo(rc.left, ymid);
                surface->LineTo(rc.right, ymid);
        } else {        // Either INDIC_PLAIN or unknown
                surface->MoveTo(rc.left, ymid);
                surface->LineTo(rc.right, ymid);
index 8fb51bdb764ea66c13dbabffefbbc9f9f5603fa2..ae22baf2f27dc5b37f62fbd1012745f0e65a2b40 100644 (file)
@@ -153,6 +153,8 @@ int Scintilla_LinkLexers() {
        LINK_LEXER(lmLout);
        LINK_LEXER(lmLua);
        LINK_LEXER(lmMatlab);
        LINK_LEXER(lmLout);
        LINK_LEXER(lmLua);
        LINK_LEXER(lmMatlab);
+       LINK_LEXER(lmMMIXAL);
+       LINK_LEXER(lmNsis);
        LINK_LEXER(lmBatch);
        LINK_LEXER(lmDiff);
        LINK_LEXER(lmProps);
        LINK_LEXER(lmBatch);
        LINK_LEXER(lmDiff);
        LINK_LEXER(lmProps);
@@ -163,8 +165,10 @@ int Scintilla_LinkLexers() {
        LINK_LEXER(lmPascal);
        LINK_LEXER(lmPerl);
        LINK_LEXER(lmPOV);
        LINK_LEXER(lmPascal);
        LINK_LEXER(lmPerl);
        LINK_LEXER(lmPOV);
+       LINK_LEXER(lmPS);
        LINK_LEXER(lmPython);
        LINK_LEXER(lmRuby);
        LINK_LEXER(lmPython);
        LINK_LEXER(lmRuby);
+       LINK_LEXER(lmScriptol);
        LINK_LEXER(lmSQL);
        LINK_LEXER(lmVB);
        LINK_LEXER(lmVBScript);
        LINK_LEXER(lmSQL);
        LINK_LEXER(lmVB);
        LINK_LEXER(lmVBScript);
index 263f7da4564910053ca7f3259afe693cf2193f32..2e5f891b4b1fbf11757e5a1267ef0c022348420c 100644 (file)
@@ -321,7 +321,7 @@ static bool IsValidIdentifier(const SString& identifier) {
        // First character can't be '_', so initialize the flag to true
        bool lastWasUnderscore = true;
 
        // First character can't be '_', so initialize the flag to true
        bool lastWasUnderscore = true;
 
-       int length = identifier.length();
+       size_t length = identifier.length();
 
        // Zero-length identifiers are not valid (these can occur inside labels)
        if (length == 0) {
 
        // Zero-length identifiers are not valid (these can occur inside labels)
        if (length == 0) {
@@ -334,7 +334,7 @@ static bool IsValidIdentifier(const SString& identifier) {
        }
 
        // Check for only valid characters and no double underscores
        }
 
        // Check for only valid characters and no double underscores
-       for (int i = 0; i < length; i++) {
+       for (size_t i = 0; i < length; i++) {
                if (!IsWordCharacter(identifier[i]) ||
                        (identifier[i] == '_' && lastWasUnderscore)) {
                        return false;
                if (!IsWordCharacter(identifier[i]) ||
                        (identifier[i] == '_' && lastWasUnderscore)) {
                        return false;
@@ -355,8 +355,8 @@ static bool IsValidNumber(const SString& number) {
        int hashPos = number.search("#");
        bool seenDot = false;
 
        int hashPos = number.search("#");
        bool seenDot = false;
 
-       int i = 0;
-       int length = number.length();
+       size_t i = 0;
+       size_t length = number.length();
 
        if (length == 0)
                return false; // Just in case
 
        if (length == 0)
                return false; // Just in case
index b89f7ea8bb34bea37c4850afae417c3b05eaad8f..11daa142388d83d3080f53c7b878d8a3b4a1a281 100644 (file)
@@ -108,7 +108,8 @@ static void ColouriseCssDoc(unsigned int startPos, int length, int initStyle, Wo
                                        sc.SetState(SCE_CSS_DEFAULT);
                                break;
                        case ':':
                                        sc.SetState(SCE_CSS_DEFAULT);
                                break;
                        case ':':
-                               if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_DEFAULT || lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID)
+                               if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_DEFAULT ||
+                                       lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID || lastState == SCE_CSS_UNKNOWN_PSEUDOCLASS)
                                        sc.SetState(SCE_CSS_PSEUDOCLASS);
                                else if (lastState == SCE_CSS_IDENTIFIER || lastState == SCE_CSS_UNKNOWN_IDENTIFIER)
                                        sc.SetState(SCE_CSS_VALUE);
                                        sc.SetState(SCE_CSS_PSEUDOCLASS);
                                else if (lastState == SCE_CSS_IDENTIFIER || lastState == SCE_CSS_UNKNOWN_IDENTIFIER)
                                        sc.SetState(SCE_CSS_VALUE);
index 28e3b3b0de80e73ec5f52dce109b81877081e812..49411588aa50b8eb423d2148cd3e854456a67f10 100644 (file)
@@ -195,7 +195,7 @@ static void FoldESCRIPTDoc(unsigned int startPos, int length, int initStyle, Wor
                styleNext = styler.StyleAt(i + 1);
                bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
 
                styleNext = styler.StyleAt(i + 1);
                bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
 
-
+            
                if (foldComment && IsStreamCommentStyle(style)) {
                        if (!IsStreamCommentStyle(stylePrev)) {
                                levelCurrent++;
                if (foldComment && IsStreamCommentStyle(style)) {
                        if (!IsStreamCommentStyle(stylePrev)) {
                                levelCurrent++;
index 345b15edcb3b1c6c6a931d7340e8aae2fc996a1a..e442054b36275965101a3e0d0100ace166727639 100644 (file)
@@ -127,7 +127,7 @@ static int stateForPrintState(int StateToPrint) {
 }
 
 static inline bool IsNumber(unsigned int start, Accessor &styler) {
 }
 
 static inline bool IsNumber(unsigned int start, Accessor &styler) {
-       return isdigit(styler[start]) || (styler[start] == '.') ||
+       return IsADigit(styler[start]) || (styler[start] == '.') ||
               (styler[start] == '-') || (styler[start] == '#');
 }
 
               (styler[start] == '-') || (styler[start] == '#');
 }
 
@@ -246,7 +246,7 @@ static int classifyTagHTML(unsigned int start, unsigned int end,
 static void classifyWordHTJS(unsigned int start, unsigned int end,
                              WordList &keywords, Accessor &styler, script_mode inScriptType) {
        char chAttr = SCE_HJ_WORD;
 static void classifyWordHTJS(unsigned int start, unsigned int end,
                              WordList &keywords, Accessor &styler, script_mode inScriptType) {
        char chAttr = SCE_HJ_WORD;
-       bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
+       bool wordIsNumber = IsADigit(styler[start]) || (styler[start] == '.');
        if (wordIsNumber)
                chAttr = SCE_HJ_NUMBER;
        else {
        if (wordIsNumber)
                chAttr = SCE_HJ_NUMBER;
        else {
@@ -264,7 +264,7 @@ static void classifyWordHTJS(unsigned int start, unsigned int end,
 
 static int classifyWordHTVB(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, script_mode inScriptType) {
        char chAttr = SCE_HB_IDENTIFIER;
 
 static int classifyWordHTVB(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, script_mode inScriptType) {
        char chAttr = SCE_HB_IDENTIFIER;
-       bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
+       bool wordIsNumber = IsADigit(styler[start]) || (styler[start] == '.');
        if (wordIsNumber)
                chAttr = SCE_HB_NUMBER;
        else {
        if (wordIsNumber)
                chAttr = SCE_HB_NUMBER;
        else {
@@ -288,7 +288,7 @@ static int classifyWordHTVB(unsigned int start, unsigned int end, WordList &keyw
 }
 
 static void classifyWordHTPy(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, char *prevWord, script_mode inScriptType) {
 }
 
 static void classifyWordHTPy(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, char *prevWord, script_mode inScriptType) {
-       bool wordIsNumber = isdigit(styler[start]) != 0;
+       bool wordIsNumber = IsADigit(styler[start]);
        char s[30 + 1];
        unsigned int i = 0;
        for (; i < end - start + 1 && i < 30; i++) {
        char s[30 + 1];
        unsigned int i = 0;
        for (; i < end - start + 1 && i < 30; i++) {
@@ -312,7 +312,7 @@ static void classifyWordHTPy(unsigned int start, unsigned int end, WordList &key
 // Called when in a PHP word
 static void classifyWordHTPHP(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
        char chAttr = SCE_HPHP_DEFAULT;
 // Called when in a PHP word
 static void classifyWordHTPHP(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
        char chAttr = SCE_HPHP_DEFAULT;
-       bool wordIsNumber = isdigit(styler[start]) != 0;
+       bool wordIsNumber = IsADigit(styler[start]);
        if (wordIsNumber)
                chAttr = SCE_HPHP_NUMBER;
        else {
        if (wordIsNumber)
                chAttr = SCE_HPHP_NUMBER;
        else {
@@ -375,19 +375,21 @@ static int StateForScript(script_type scriptLanguage) {
 }
 
 static inline bool ishtmlwordchar(char ch) {
 }
 
 static inline bool ishtmlwordchar(char ch) {
-       return isalnum(ch) || ch == '.' || ch == '-' || ch == '_' || ch == ':' || ch == '!' || ch == '#';
+       return !isascii(ch) ||
+               (isalnum(ch) || ch == '.' || ch == '-' || ch == '_' || ch == ':' || ch == '!' || ch == '#');
 }
 
 static inline bool issgmlwordchar(char ch) {
 }
 
 static inline bool issgmlwordchar(char ch) {
-       return isalnum(ch) || ch == '.' || ch == '_' || ch == ':' || ch == '!' || ch == '#' || ch == '[';
+       return !isascii(ch) ||
+               (isalnum(ch) || ch == '.' || ch == '_' || ch == ':' || ch == '!' || ch == '#' || ch == '[');
 }
 
 static inline bool IsPhpWordStart(const unsigned char ch) {
 }
 
 static inline bool IsPhpWordStart(const unsigned char ch) {
-       return isalpha(ch) || (ch == '_') || (ch >= 0x7f);
+       return (isascii(ch) && (isalpha(ch) || (ch == '_'))) || (ch >= 0x7f);
 }
 
 static inline bool IsPhpWordChar(char ch) {
 }
 
 static inline bool IsPhpWordChar(char ch) {
-       return isdigit(ch) || IsPhpWordStart(ch);
+       return IsADigit(ch) || IsPhpWordStart(ch);
 }
 
 static bool InTagState(int state) {
 }
 
 static bool InTagState(int state) {
@@ -787,7 +789,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
                        } else if ((ch == '-') && (chPrev == '-')) {
                                styler.ColourTo(i - 2, StateToPrint);
                                state = SCE_H_SGML_COMMENT;
                        } else if ((ch == '-') && (chPrev == '-')) {
                                styler.ColourTo(i - 2, StateToPrint);
                                state = SCE_H_SGML_COMMENT;
-                       } else if (isalpha(ch) && (chPrev == '%')) {
+                       } else if (isascii(ch) && isalpha(ch) && (chPrev == '%')) {
                                styler.ColourTo(i - 2, StateToPrint);
                                state = SCE_H_SGML_ENTITY;
                        } else if (ch == '#') {
                                styler.ColourTo(i - 2, StateToPrint);
                                state = SCE_H_SGML_ENTITY;
                        } else if (ch == '#') {
@@ -905,7 +907,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
                        }
                        break;
                case SCE_H_SGML_SPECIAL:
                        }
                        break;
                case SCE_H_SGML_SPECIAL:
-                       if (!isupper(ch)) {
+                       if (!(isascii(ch) && isupper(ch))) {
                                styler.ColourTo(i - 1, StateToPrint);
                                if (isalnum(ch)) {
                                        state = SCE_H_SGML_ERROR;
                                styler.ColourTo(i - 1, StateToPrint);
                                if (isalnum(ch)) {
                                        state = SCE_H_SGML_ERROR;
@@ -918,7 +920,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
                        if (ch == ';') {
                                styler.ColourTo(i, StateToPrint);
                                state = SCE_H_SGML_DEFAULT;
                        if (ch == ';') {
                                styler.ColourTo(i, StateToPrint);
                                state = SCE_H_SGML_DEFAULT;
-                       } else if (!isalnum(ch) && ch != '-' && ch != '.') {
+                       } else if (!(isascii(ch) && isalnum(ch)) && ch != '-' && ch != '.') {
                                styler.ColourTo(i, SCE_H_SGML_ERROR);
                                state = SCE_H_SGML_DEFAULT;
                        }
                                styler.ColourTo(i, SCE_H_SGML_ERROR);
                                state = SCE_H_SGML_DEFAULT;
                        }
@@ -928,7 +930,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
                                styler.ColourTo(i, StateToPrint);
                                state = SCE_H_DEFAULT;
                        }
                                styler.ColourTo(i, StateToPrint);
                                state = SCE_H_DEFAULT;
                        }
-                       if (ch != '#' && !isalnum(ch)) {        // Should check that '#' follows '&', but it is unlikely anyway...
+                       if (ch != '#' && !(isascii(ch) && isalnum(ch))) {       // Should check that '#' follows '&', but it is unlikely anyway...
                                styler.ColourTo(i, SCE_H_TAGUNKNOWN);
                                state = SCE_H_DEFAULT;
                        }
                                styler.ColourTo(i, SCE_H_TAGUNKNOWN);
                                state = SCE_H_DEFAULT;
                        }
@@ -1464,7 +1466,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
                        }
                        break;
                case SCE_HPHP_NUMBER:
                        }
                        break;
                case SCE_HPHP_NUMBER:
-                       if (!isdigit(ch)) {
+                       if (!IsADigit(ch)) {
                                styler.ColourTo(i - 1, SCE_HPHP_NUMBER);
                                if (isoperator(ch))
                                        state = SCE_HPHP_OPERATOR;
                                styler.ColourTo(i - 1, SCE_HPHP_NUMBER);
                                if (isoperator(ch))
                                        state = SCE_HPHP_OPERATOR;
@@ -1524,7 +1526,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
                case SCE_HPHP_OPERATOR:
                case SCE_HPHP_DEFAULT:
                        styler.ColourTo(i - 1, StateToPrint);
                case SCE_HPHP_OPERATOR:
                case SCE_HPHP_DEFAULT:
                        styler.ColourTo(i - 1, StateToPrint);
-                       if (isdigit(ch)) {
+                       if (IsADigit(ch)) {
                                state = SCE_HPHP_NUMBER;
                        } else if (iswordstart(ch)) {
                                state = SCE_HPHP_WORD;
                                state = SCE_HPHP_NUMBER;
                        } else if (iswordstart(ch)) {
                                state = SCE_HPHP_WORD;
index 159bc1585d14f4347fd258c3114944a873613bb8..18612c9ee3558bd4574a397ce8f3d68a911a8477 100644 (file)
@@ -24,7 +24,7 @@
 #include "SciLexer.h"
 
 static inline bool IsAWordChar(const int ch) {
 #include "SciLexer.h"
 
 static inline bool IsAWordChar(const int ch) {
-       return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_');
+       return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '.');
 }
 
 inline bool IsAWordStart(const int ch) {
 }
 
 inline bool IsAWordStart(const int ch) {
@@ -58,6 +58,8 @@ static void ColouriseLuaDoc(
        WordList &keywords4 = *keywordlists[3];
        WordList &keywords5 = *keywordlists[4];
        WordList &keywords6 = *keywordlists[5];
        WordList &keywords4 = *keywordlists[3];
        WordList &keywords5 = *keywordlists[4];
        WordList &keywords6 = *keywordlists[5];
+       WordList &keywords7 = *keywordlists[6];
+       WordList &keywords8 = *keywordlists[7];
 
        int currentLine = styler.GetLine(startPos);
        // Initialize the literal string [[ ... ]] nesting level, if we are inside such a string.
 
        int currentLine = styler.GetLine(startPos);
        // Initialize the literal string [[ ... ]] nesting level, if we are inside such a string.
@@ -121,11 +123,15 @@ static void ColouriseLuaDoc(
                if (sc.state == SCE_LUA_OPERATOR) {
                        sc.SetState(SCE_LUA_DEFAULT);
                } else if (sc.state == SCE_LUA_NUMBER) {
                if (sc.state == SCE_LUA_OPERATOR) {
                        sc.SetState(SCE_LUA_DEFAULT);
                } else if (sc.state == SCE_LUA_NUMBER) {
-                       if (!IsAWordChar(sc.ch)) {
-                               sc.SetState(SCE_LUA_DEFAULT);
+                       // We stop the number definition on non-numerical non-dot non-eE non-sign char
+                       if (!(isdigit(sc.ch) || sc.ch == '.' ||
+                                 toupper(sc.ch) == 'E' || sc.ch == '-' || sc.ch == '+')) {
+                                       // Not exactly following number definition (several dots are seen as OK, etc.)
+                                       // but probably enough in most cases.
+                                       sc.SetState(SCE_LUA_DEFAULT);
                        }
                } else if (sc.state == SCE_LUA_IDENTIFIER) {
                        }
                } else if (sc.state == SCE_LUA_IDENTIFIER) {
-                       if (!IsAWordChar(sc.ch) || (sc.ch == '.')) {
+                       if (!IsAWordChar(sc.ch)) {
                                char s[100];
                                sc.GetCurrent(s, sizeof(s));
                                if (keywords.InList(s)) {
                                char s[100];
                                sc.GetCurrent(s, sizeof(s));
                                if (keywords.InList(s)) {
@@ -140,6 +146,12 @@ static void ColouriseLuaDoc(
                                        sc.ChangeState(SCE_LUA_WORD5);
                                } else if (keywords6.InList(s)) {
                                        sc.ChangeState(SCE_LUA_WORD6);
                                        sc.ChangeState(SCE_LUA_WORD5);
                                } else if (keywords6.InList(s)) {
                                        sc.ChangeState(SCE_LUA_WORD6);
+                               } else if (keywords6.InList(s)) {
+                                       sc.ChangeState(SCE_LUA_WORD6);
+                               } else if (keywords7.InList(s)) {
+                                       sc.ChangeState(SCE_LUA_WORD7);
+                               } else if (keywords8.InList(s)) {
+                                       sc.ChangeState(SCE_LUA_WORD8);
                                }
                                sc.SetState(SCE_LUA_DEFAULT);
                        }
                                }
                                sc.SetState(SCE_LUA_DEFAULT);
                        }
@@ -300,8 +312,8 @@ static void FoldLuaDoc(unsigned int startPos, int length, int /* initStyle */, W
 static const char * const luaWordListDesc[] = {
        "Keywords",
        "Basic functions",
 static const char * const luaWordListDesc[] = {
        "Keywords",
        "Basic functions",
-       "String & math functions",
-       "I/O & system facilities",
+       "String, (table) & math functions",
+       "(coroutines), I/O & system facilities",
        "XXX",
        "XXX",
        0
        "XXX",
        "XXX",
        0
diff --git a/contrib/src/stc/scintilla/src/LexMMIXAL.cxx b/contrib/src/stc/scintilla/src/LexMMIXAL.cxx
new file mode 100644 (file)
index 0000000..f447899
--- /dev/null
@@ -0,0 +1,183 @@
+// Scintilla source code edit control
+/** @file LexMMIXAL.cxx
+ ** Lexer for MMIX Assembler Language.
+ ** Written by Christoph Hösler <christoph.hoesler@student.uni-tuebingen.de>
+ ** For information about MMIX visit http://www-cs-faculty.stanford.edu/~knuth/mmix.html
+ **/
+// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
+// The License.txt file describes the conditions under which this software may be distributed.
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "Platform.h"
+
+#include "PropSet.h"
+#include "Accessor.h"
+#include "StyleContext.h"
+#include "KeyWords.h"
+#include "Scintilla.h"
+#include "SciLexer.h"
+
+
+
+static inline bool IsAWordChar(const int ch) {
+       return (ch < 0x80) && (isalnum(ch) || ch == ':' || ch == '_');
+}
+
+inline bool isMMIXALOperator(char ch) {
+       if (isalnum(ch))
+               return false;
+       if (ch == '+' || ch == '-' || ch == '|' || ch == '^' ||
+               ch == '*' || ch == '/' || ch == '/' ||
+               ch == '%' || ch == '<' || ch == '>' || ch == '&' ||
+               ch == '~' || ch == '$' ||
+               ch == ',' || ch == '(' || ch == ')' ||
+               ch == '[' || ch == ']')
+               return true;
+       return false;
+}
+
+static void ColouriseMMIXALDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
+                            Accessor &styler) {
+
+       WordList &opcodes = *keywordlists[0];
+       WordList &special_register = *keywordlists[1];
+       WordList &predef_symbols = *keywordlists[2];
+
+       StyleContext sc(startPos, length, initStyle, styler);
+
+       for (; sc.More(); sc.Forward())
+       {
+               // No EOL continuation
+               if (sc.atLineStart) {
+                       if (sc.ch ==  '@' && sc.chNext == 'i') {
+                               sc.SetState(SCE_MMIXAL_INCLUDE);
+                       } else {
+                               sc.SetState(SCE_MMIXAL_LEADWS);
+                       }
+               }
+
+               // Check if first non whitespace character in line is alphanumeric
+               if (sc.state == SCE_MMIXAL_LEADWS && !isspace(sc.ch)) { // LEADWS
+                       if(!IsAWordChar(sc.ch)) {
+                               sc.SetState(SCE_MMIXAL_COMMENT);
+                       } else {
+                               if(sc.atLineStart) {
+                                       sc.SetState(SCE_MMIXAL_LABEL);
+                               } else {
+                                       sc.SetState(SCE_MMIXAL_OPCODE_PRE);
+                               }
+                       }
+               }
+
+               // Determine if the current state should terminate.
+               if (sc.state == SCE_MMIXAL_OPERATOR) {                  // OPERATOR
+                       sc.SetState(SCE_MMIXAL_OPERANDS);
+               } else if (sc.state == SCE_MMIXAL_NUMBER) {             // NUMBER
+                       if (!isdigit(sc.ch)) {
+                               if (IsAWordChar(sc.ch)) {
+                                       char s[100];
+                                       sc.GetCurrent(s, sizeof(s));
+                                       sc.ChangeState(SCE_MMIXAL_REF);
+                                       sc.SetState(SCE_MMIXAL_REF);
+                               } else {
+                                       sc.SetState(SCE_MMIXAL_OPERANDS);
+                               }
+                       }
+               } else if (sc.state == SCE_MMIXAL_LABEL) {                      // LABEL
+                       if (!IsAWordChar(sc.ch) ) {
+                               sc.SetState(SCE_MMIXAL_OPCODE_PRE);
+                       }
+               } else if (sc.state == SCE_MMIXAL_REF) {                        // REF
+                       if (!IsAWordChar(sc.ch) ) {
+                               char s[100];
+                               sc.GetCurrent(s, sizeof(s));
+                               if (*s == ':') {        // ignore base prefix for match
+                                       for (size_t i = 0; i != sizeof(s); ++i) {
+                                               *(s+i) = *(s+i+1);
+                                       }
+                               }
+                               if (special_register.InList(s)) {
+                                       sc.ChangeState(SCE_MMIXAL_REGISTER);
+                               } else if (predef_symbols.InList(s)) {
+                                       sc.ChangeState(SCE_MMIXAL_SYMBOL);
+                               }
+                               sc.SetState(SCE_MMIXAL_OPERANDS);
+                       }
+               } else if (sc.state == SCE_MMIXAL_OPCODE_PRE) { // OPCODE_PRE
+                               if (!isspace(sc.ch)) {
+                                       sc.SetState(SCE_MMIXAL_OPCODE);
+                               }
+               } else if (sc.state == SCE_MMIXAL_OPCODE) {             // OPCODE
+                       if (!IsAWordChar(sc.ch) ) {
+                               char s[100];
+                               sc.GetCurrent(s, sizeof(s));
+                               if (opcodes.InList(s)) {
+                                       sc.ChangeState(SCE_MMIXAL_OPCODE_VALID);
+                               } else {
+                                       sc.ChangeState(SCE_MMIXAL_OPCODE_UNKNOWN);
+                               }
+                               sc.SetState(SCE_MMIXAL_OPCODE_POST);
+                       }
+               } else if (sc.state == SCE_MMIXAL_STRING) {             // STRING
+                       if (sc.ch == '\"') {
+                               sc.ForwardSetState(SCE_MMIXAL_OPERANDS);
+                       } else if (sc.atLineEnd) {
+                               sc.ForwardSetState(SCE_MMIXAL_OPERANDS);
+                       }
+               } else if (sc.state == SCE_MMIXAL_CHAR) {                       // CHAR
+                       if (sc.ch == '\'') {
+                               sc.ForwardSetState(SCE_MMIXAL_OPERANDS);
+                       } else if (sc.atLineEnd) {
+                               sc.ForwardSetState(SCE_MMIXAL_OPERANDS);
+                       }
+               } else if (sc.state == SCE_MMIXAL_REGISTER) {           // REGISTER
+                       if (!isdigit(sc.ch)) {
+                               sc.SetState(SCE_MMIXAL_OPERANDS);
+                       }
+               } else if (sc.state == SCE_MMIXAL_HEX) {                        // HEX
+                       if (!isxdigit(sc.ch)) {
+                               sc.SetState(SCE_MMIXAL_OPERANDS);
+                       }
+               }
+
+               // Determine if a new state should be entered.
+               if (sc.state == SCE_MMIXAL_OPCODE_POST ||               // OPCODE_POST
+                       sc.state == SCE_MMIXAL_OPERANDS) {                      // OPERANDS
+                       if (sc.state == SCE_MMIXAL_OPERANDS && isspace(sc.ch)) {
+                               if (!sc.atLineEnd) {
+                                       sc.SetState(SCE_MMIXAL_COMMENT);
+                               }
+                       } else if (isdigit(sc.ch)) {
+                               sc.SetState(SCE_MMIXAL_NUMBER);
+                       } else if (IsAWordChar(sc.ch) || sc.Match('@')) {
+                               sc.SetState(SCE_MMIXAL_REF);
+                       } else if (sc.Match('\"')) {
+                               sc.SetState(SCE_MMIXAL_STRING);
+                       } else if (sc.Match('\'')) {
+                               sc.SetState(SCE_MMIXAL_CHAR);
+                       } else if (sc.Match('$')) {
+                               sc.SetState(SCE_MMIXAL_REGISTER);
+                       } else if (sc.Match('#')) {
+                               sc.SetState(SCE_MMIXAL_HEX);
+                       } else if (isMMIXALOperator(static_cast<char>(sc.ch))) {
+                               sc.SetState(SCE_MMIXAL_OPERATOR);
+                       }
+               }
+       }
+       sc.Complete();
+}
+
+static const char * const MMIXALWordListDesc[] = {
+       "Operation Codes",
+       "Special Register",
+       "Predefined Symbols",
+       0
+};
+
+LexerModule lmMMIXAL(SCLEX_MMIXAL, ColouriseMMIXALDoc, "mmixal", 0, MMIXALWordListDesc);
+
diff --git a/contrib/src/stc/scintilla/src/LexNsis.cxx b/contrib/src/stc/scintilla/src/LexNsis.cxx
new file mode 100644 (file)
index 0000000..c09a8ae
--- /dev/null
@@ -0,0 +1,346 @@
+// Scintilla source code edit control
+/** @file LexNsis.cxx
+ ** Lexer for NSIS
+ **/
+// Copyright 2003 by Angelo Mandato <angelo@spaceblue.com>
+// The License.txt file describes the conditions under which this software may be distributed.
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "Platform.h"
+
+#include "PropSet.h"
+#include "Accessor.h"
+#include "KeyWords.h"
+#include "Scintilla.h"
+#include "SciLexer.h"
+
+/*
+// Put in SciLexer.h
+#define SCLEX_NSIS 34
+
+#define SCE_NSIS_DEFAULT 0
+#define SCE_NSIS_COMMENT 1
+#define SCE_NSIS_STRINGDQ 2
+#define SCE_NSIS_STRINGLQ 3
+#define SCE_NSIS_STRINGRQ 4
+#define SCE_NSIS_FUNCTION 5
+#define SCE_NSIS_VARIABLE 6
+#define SCE_NSIS_LABEL 7
+#define SCE_NSIS_USERDEFINED 8
+#define SCE_NSIS_SECTIONDEF 9
+#define SCE_NSIS_SUBSECTIONDEF 10
+#define SCE_NSIS_IFDEFINEDEF 11
+#define SCE_NSIS_MACRODEF 12
+#define SCE_NSIS_STRINGVAR 13
+*/
+
+static int classifyWordNsis(unsigned int start, unsigned int end, WordList *keywordLists[], Accessor &styler)
+{
+       char s[100];
+
+       WordList &Functions = *keywordLists[0];
+       WordList &Variables = *keywordLists[1];
+       WordList &Lables = *keywordLists[2];
+       WordList &UserDefined = *keywordLists[3];
+
+       for (unsigned int i = 0; i < end - start + 1 && i < 30; i++)
+       {
+               s[i] = static_cast<char>( styler[ start + i ] );
+               s[i + 1] = '\0';
+       }
+
+       // Check for special words...
+
+       if( strcmp(s, "!macro") == 0 || strcmp(s, "!macroend") == 0 ) // Covers !micro and !microend
+               return SCE_NSIS_MACRODEF;
+
+       if( strcmp(s, "!ifdef") == 0 ||  strcmp(s, "!ifndef") == 0 ||  strcmp(s, "!endif") == 0 )
+               return SCE_NSIS_IFDEFINEDEF;
+
+       if( strcmp(s, "Section") == 0 || strcmp(s, "SectionEnd") == 0 ) // Covers Section and SectionEnd
+               return SCE_NSIS_SECTIONDEF;
+
+       if( strcmp(s, "SubSection") == 0 || strcmp(s, "SubSectionEnd") == 0 ) // Covers SubSection and SubSectionEnd
+               return SCE_NSIS_SUBSECTIONDEF;
+
+       if( strcmp(s, "Function") == 0 || strcmp(s, "FunctionEnd") == 0 ) // Covers SubSection and SubSectionEnd
+               return SCE_NSIS_FUNCTION;
+
+       if ( Functions.InList(s) )
+               return SCE_NSIS_FUNCTION;
+
+       if ( Variables.InList(s) )
+               return SCE_NSIS_VARIABLE;
+
+       if ( Lables.InList(s) )
+               return SCE_NSIS_LABEL;
+
+       if( UserDefined.InList(s) )
+               return SCE_NSIS_USERDEFINED;
+
+       if( strlen(s) > 2 )
+       {
+               if( s[1] == '{' && s[strlen(s)-1] == '}' )
+                       return SCE_NSIS_VARIABLE;
+       }
+
+       return SCE_NSIS_DEFAULT;
+}
+
+static void ColouriseNsisDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler)
+{
+       int state = SCE_NSIS_DEFAULT;
+       styler.StartAt( startPos );
+       styler.GetLine( startPos );
+
+       unsigned int nLengthDoc = startPos + length;
+       styler.StartSegment( startPos );
+
+       char cCurrChar;
+       bool bVarInString = true;
+
+       unsigned int i;
+       for( i = startPos; i < nLengthDoc; i++ )
+       {
+               cCurrChar = styler.SafeGetCharAt( i );
+               char cNextChar = styler.SafeGetCharAt( i+1, EOF );
+
+
+
+               switch(state)
+               {
+                       case SCE_NSIS_DEFAULT:
+        if( cNextChar == EOF )
+        {
+          styler.ColourTo(i,SCE_NSIS_DEFAULT);
+                           break;
+        }
+                               if( cCurrChar == ';' || cCurrChar == '#' ) // we have a comment line
+                               {
+                                       styler.ColourTo(i-1, state );
+                                       state = SCE_NSIS_COMMENT;
+                                       break;
+                               }
+                               if( cCurrChar == '"' )
+                               {
+                                       styler.ColourTo(i-1, state );
+                                       state = SCE_NSIS_STRINGDQ;
+                                       bVarInString = false;
+                                       break;
+                               }
+                               if( cCurrChar == '\'' )
+                               {
+                                       styler.ColourTo(i-1, state );
+                                       state = SCE_NSIS_STRINGRQ;
+                                       bVarInString = false;
+                                       break;
+                               }
+                               if( cCurrChar == '`' )
+                               {
+                                       styler.ColourTo(i-1, state );
+                                       state = SCE_NSIS_STRINGLQ;
+                                       bVarInString = false;
+                                       break;
+                               }
+
+                               // NSIS KeyWord,Function, Variable, UserDefined:
+                               if( cCurrChar == '$' || iswordchar(cCurrChar) || cCurrChar == '!' )
+                               {
+                                       styler.ColourTo(i-1,state);
+                                 state = SCE_NSIS_FUNCTION;
+                                       break;
+                               }
+                               break;
+                       case SCE_NSIS_COMMENT:
+                               if( cNextChar == '\n' || cNextChar == '\r' || cNextChar == EOF )
+        {
+                                 styler.ColourTo(i,state);
+          state = SCE_NSIS_DEFAULT;
+        }
+                               break;
+                       case SCE_NSIS_STRINGDQ:
+                               if( cCurrChar == '"' || cNextChar == '\r' || cNextChar == '\n' )
+                               {
+                                       styler.ColourTo(i,SCE_NSIS_STRINGDQ);
+                                 state = SCE_NSIS_DEFAULT;
+                               }
+                               break;
+                       case SCE_NSIS_STRINGLQ:
+                               if( cCurrChar == '`' || cNextChar == '\r' || cNextChar == '\n' )
+                               {
+                                       styler.ColourTo(i,SCE_NSIS_STRINGLQ);
+                                 state = SCE_NSIS_DEFAULT;
+                               }
+                               break;
+                       case SCE_NSIS_STRINGRQ:
+                               if( cCurrChar == '\'' || cNextChar == '\r' || cNextChar == '\n' )
+                               {
+                                       styler.ColourTo(i,SCE_NSIS_STRINGRQ);
+                                 state = SCE_NSIS_DEFAULT;
+                               }
+                               break;
+                       case SCE_NSIS_FUNCTION:
+
+                               // NSIS KeyWord:
+                               if( (iswordchar(cCurrChar) && !iswordchar( cNextChar) && cNextChar != '}') || cCurrChar == '}' )
+                               {
+                                       state = classifyWordNsis( styler.GetStartSegment(), i, keywordLists, styler);
+                                       styler.ColourTo( i, state);
+                                       state = SCE_NSIS_DEFAULT; // Everything after goes back to the default state
+                               }
+                               else if( !iswordchar( cCurrChar ) && cCurrChar != '{' && cCurrChar != '}' )
+                               {
+                                       state = SCE_NSIS_DEFAULT;
+
+                                       if( cCurrChar == '"' ) // Next
+                                       {
+                                               state = SCE_NSIS_STRINGDQ;
+                                               bVarInString = false;
+                                       }
+                                       if( cCurrChar == '`' )
+                                       {
+                                               state = SCE_NSIS_STRINGLQ;
+                                               bVarInString = false;
+                                       }
+                                       if( cCurrChar == '\'' )
+                                       {
+                                               state = SCE_NSIS_STRINGRQ;
+                                               bVarInString = false;
+                                       }
+                                       if( cCurrChar == '#' || cCurrChar == ';' )
+                                               state = SCE_NSIS_COMMENT;
+
+                                       styler.ColourTo( i, state);
+                               }
+                               break;
+               }
+
+               if( state == SCE_NSIS_COMMENT )
+               {
+                       styler.ColourTo(i,state);
+               }
+               else if( state == SCE_NSIS_STRINGDQ || state == SCE_NSIS_STRINGLQ || state == SCE_NSIS_STRINGRQ )
+               {
+                       // Check for var in String..
+                       if( bVarInString && (iswordchar(cCurrChar) || cCurrChar == '}') ) // || cCurrChar == '{' ) )
+                       {
+                               int nWordState = classifyWordNsis( styler.GetStartSegment(), i, keywordLists, styler);
+                               if( nWordState == SCE_NSIS_VARIABLE )
+                               {
+                                       styler.ColourTo( i, SCE_NSIS_STRINGVAR);
+                                       bVarInString = false;
+                               }
+                       }
+                       if( cCurrChar == '$' )
+                       {
+                               styler.ColourTo( i-1, state);
+                               bVarInString = true;
+                       }
+               }
+       }
+}
+
+
+static void FoldNsisDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler)
+{
+       // No folding enabled, no reason to continue...
+       if( styler.GetPropertyInt("fold") == 0 )
+               return;
+
+       unsigned int endPos = startPos + length;
+       int lineCurrent = styler.GetLine(startPos);
+       int levelCurrent = SC_FOLDLEVELBASE;
+       if (lineCurrent > 0)
+               levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
+       int levelNext = levelCurrent;
+       char chNext = styler[startPos];
+       int styleNext = styler.StyleAt(startPos);
+       int style;
+
+       for (unsigned int i = startPos; i < endPos; i++)
+       {
+               char ch = chNext;
+               chNext = styler.SafeGetCharAt(i + 1);
+               style = styleNext;
+               styleNext = styler.StyleAt(i + 1);
+               bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
+               // Functions Start: Function, Section, SubSection
+               // Functions End: FunctionEnd, SectionEnd, SubSectionEnd
+               // Label Start: !ifdef, !ifndef
+               // Label End: !endif
+
+               if( style == SCE_NSIS_FUNCTION )
+               {
+                       if( styler.Match(i, "FunctionEnd") )
+                               levelNext--;
+                       else if( styler.Match(i, "Function") )
+                               levelNext++;
+               }
+               else if( style == SCE_NSIS_SECTIONDEF )
+               {
+                       if( styler.Match(i, "SectionEnd") )
+                               levelNext--;
+                       else if( styler.Match(i, "Section") )
+                               levelNext++;
+               }
+               else if( style == SCE_NSIS_SUBSECTIONDEF )
+               {
+                       if( styler.Match(i, "SubSectionEnd") )
+                               levelNext--;
+                       else if( styler.Match(i, "SubSection") )
+                               levelNext++;
+               }
+               else if( style == SCE_NSIS_IFDEFINEDEF )
+               {
+                       if( styler.Match(i, "!endif") )
+                               levelNext--;
+                       else if( styler.Match(i, "!ifdef") || styler.Match(i, "!ifndef"))
+                               levelNext++;
+               }
+               else if( style == SCE_NSIS_MACRODEF )
+               {
+                       if( styler.Match(i, "!macroend") )
+                               levelNext--;
+                       else if( styler.Match(i, "!macro") )
+                               levelNext++;
+               }
+
+               if( atEOL )
+               {
+                       int levelUse = levelCurrent;
+                       int lev = levelUse | levelNext << 16;
+                       if (levelUse < levelNext)
+                               lev |= SC_FOLDLEVELHEADERFLAG;
+                       if (lev != styler.LevelAt(lineCurrent))
+                       {
+                               styler.SetLevel(lineCurrent, lev);
+                       }
+                       lineCurrent++;
+                       levelCurrent = levelNext;
+               }
+       }
+
+       int levelUse = levelCurrent;
+       int lev = levelUse | levelNext << 16;
+       if (levelUse < levelNext)
+               lev |= SC_FOLDLEVELHEADERFLAG;
+       if (lev != styler.LevelAt(lineCurrent))
+       {
+               styler.SetLevel(lineCurrent, lev);
+       }
+}
+
+static const char * const nsisWordLists[] = {
+       "Functions",
+       "Variables",
+       "Lables",
+       "UserDefined",
+       0, };
+
+
+LexerModule lmNsis(SCLEX_NSIS, ColouriseNsisDoc, "nsis", FoldNsisDoc, nsisWordLists);
index 45e2d515446c24f84b3f61fc7e395b0ac40b0ba1..31ac415ad4eb7b7ebf865e55628c46853d252c62 100644 (file)
@@ -268,6 +268,59 @@ static void ColourisePropsDoc(unsigned int startPos, int length, int, WordList *
        }
 }
 
        }
 }
 
+// adaption by ksc, using the "} else {" trick of 1.53
+// 030721
+static void FoldPropsDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
+       bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
+
+       unsigned int endPos = startPos + length;
+       int visibleChars = 0;
+       int lineCurrent = styler.GetLine(startPos);
+
+       char chNext = styler[startPos];
+       int styleNext = styler.StyleAt(startPos);
+       bool headerPoint = false;
+
+       for (unsigned int i = startPos; i < endPos; i++) {
+               char ch = chNext;
+               chNext = styler[i+1];
+
+               int style = styleNext;
+               styleNext = styler.StyleAt(i + 1);
+               bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
+
+               if (style==2) {
+                       headerPoint = true;
+               }
+
+               if (atEOL) {
+                       int lev = SC_FOLDLEVELBASE+1;
+                       if (headerPoint)
+                               lev = SC_FOLDLEVELBASE;
+
+                       if (visibleChars == 0 && foldCompact)
+                               lev |= SC_FOLDLEVELWHITEFLAG;
+
+                       if (headerPoint)
+                               lev |= SC_FOLDLEVELHEADERFLAG;
+
+                       if (lev != styler.LevelAt(lineCurrent)) {
+                               styler.SetLevel(lineCurrent, lev);
+                       }
+
+                       lineCurrent++;
+                       visibleChars = 0;
+                       headerPoint=false;
+               }
+               if (!isspacechar(ch))
+                       visibleChars++;
+       }
+
+       int lev = headerPoint ? SC_FOLDLEVELBASE : SC_FOLDLEVELBASE+1;
+       int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
+       styler.SetLevel(lineCurrent, lev | flagsNext);
+}
+
 static void ColouriseMakeLine(
     char *lineBuffer,
     unsigned int lengthLine,
 static void ColouriseMakeLine(
     char *lineBuffer,
     unsigned int lengthLine,
@@ -638,7 +691,7 @@ static void ColouriseNullDoc(unsigned int startPos, int length, int, WordList *[
 
 LexerModule lmBatch(SCLEX_BATCH, ColouriseBatchDoc, "batch", 0, batchWordListDesc);
 LexerModule lmDiff(SCLEX_DIFF, ColouriseDiffDoc, "diff", 0, emptyWordListDesc);
 
 LexerModule lmBatch(SCLEX_BATCH, ColouriseBatchDoc, "batch", 0, batchWordListDesc);
 LexerModule lmDiff(SCLEX_DIFF, ColouriseDiffDoc, "diff", 0, emptyWordListDesc);
-LexerModule lmProps(SCLEX_PROPERTIES, ColourisePropsDoc, "props", 0, emptyWordListDesc);
+LexerModule lmProps(SCLEX_PROPERTIES, ColourisePropsDoc, "props", FoldPropsDoc, emptyWordListDesc);
 LexerModule lmMake(SCLEX_MAKEFILE, ColouriseMakeDoc, "makefile", 0, emptyWordListDesc);
 LexerModule lmErrorList(SCLEX_ERRORLIST, ColouriseErrorListDoc, "errorlist", 0, emptyWordListDesc);
 LexerModule lmLatex(SCLEX_LATEX, ColouriseLatexDoc, "latex", 0, emptyWordListDesc);
 LexerModule lmMake(SCLEX_MAKEFILE, ColouriseMakeDoc, "makefile", 0, emptyWordListDesc);
 LexerModule lmErrorList(SCLEX_ERRORLIST, ColouriseErrorListDoc, "errorlist", 0, emptyWordListDesc);
 LexerModule lmLatex(SCLEX_LATEX, ColouriseLatexDoc, "latex", 0, emptyWordListDesc);
index 1e44450bbc70419c749b531df63c5eed5e85c817..33ba6a490f999bd27a7195de599df7338f2b5985 100644 (file)
@@ -1,10 +1,19 @@
 // Scintilla source code edit control
 /** @file LexPOV.cxx
 // Scintilla source code edit control
 /** @file LexPOV.cxx
- ** Lexer for POV-Ray, based on lexer for C++.
+ ** Lexer for POV-Ray SDL (Persistance of Vision Raytracer, Scene Description Language).
+ ** Written by Philippe Lhoste but this is mostly a derivative of LexCPP...
  **/
  **/
-// Copyright 2003 by Steven te Brinke <steven.t.b@zonnet.nl>
+// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
 // The License.txt file describes the conditions under which this software may be distributed.
 
 // The License.txt file describes the conditions under which this software may be distributed.
 
+// Some points that distinguish from a simple C lexer:
+// Identifiers start only by a character.
+// No line continuation character.
+// Strings are limited to 256 characters.
+// Directives are similar to preprocessor commands,
+// but we match directive keywords and colorize incorrect ones.
+// Block comments can be nested (code stolen from my code in LexLua).
+
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
 #include "Scintilla.h"
 #include "SciLexer.h"
 
 #include "Scintilla.h"
 #include "SciLexer.h"
 
-#define KEYWORD_BOXHEADER 1
-#define KEYWORD_FOLDCONTRACTED 2
-
 static inline bool IsAWordChar(const int ch) {
 static inline bool IsAWordChar(const int ch) {
-       return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_');
-}
-
-static inline bool IsAWordStart(const int ch) {
-       return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-static inline bool IsStateComment(const int state) {
-       return ((state == SCE_POV_COMMENT) ||
-               (state == SCE_POV_COMMENTLINE) ||
-               (state == SCE_POV_COMMENTDOC));
+       return ch < 0x80 && (isalnum(ch) || ch == '_');
 }
 
 }
 
-static inline bool IsStateString(const int state) {
-       return ((state == SCE_POV_STRING));
+inline bool IsAWordStart(const int ch) {
+       return ch < 0x80 && isalpha(ch);
 }
 
 }
 
-static void ColourisePOVDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
-                            Accessor &styler) {
+static void ColourisePovDoc(
+       unsigned int startPos,
+       int length,
+       int initStyle,
+       WordList *keywordlists[],
+    Accessor &styler) {
 
 
-       WordList &keywords = *keywordlists[0];
+       WordList &keywords1 = *keywordlists[0];
        WordList &keywords2 = *keywordlists[1];
        WordList &keywords2 = *keywordlists[1];
+       WordList &keywords3 = *keywordlists[2];
+       WordList &keywords4 = *keywordlists[3];
+       WordList &keywords5 = *keywordlists[4];
+       WordList &keywords6 = *keywordlists[5];
+       WordList &keywords7 = *keywordlists[6];
+       WordList &keywords8 = *keywordlists[7];
+
+       int currentLine = styler.GetLine(startPos);
+       // Initialize the block comment /* */ nesting level, if we are inside such a comment.
+       int blockCommentLevel = 0;
+       if (initStyle == SCE_POV_COMMENT) {
+               blockCommentLevel = styler.GetLineState(currentLine - 1);
+       }
 
        // Do not leak onto next line
 
        // Do not leak onto next line
-       /*if (initStyle == SCE_POV_STRINGEOL)
-               initStyle = SCE_POV_DEFAULT;*/
+       if (initStyle == SCE_POV_STRINGEOL) {
+               initStyle = SCE_POV_DEFAULT;
+       }
 
        StyleContext sc(startPos, length, initStyle, styler);
 
        StyleContext sc(startPos, length, initStyle, styler);
-
-       bool caseSensitive = styler.GetPropertyInt("pov.case.sensitive", 1) != 0;
+       short stringLen = 0;
 
        for (; sc.More(); sc.Forward()) {
 
        for (; sc.More(); sc.Forward()) {
+               if (sc.atLineEnd) {
+                       // Update the line state, so it can be seen by next line
+                       currentLine = styler.GetLine(sc.currentPos);
+                       if (sc.state == SCE_POV_COMMENT) {
+                               // Inside a block comment, we set the line state
+                               styler.SetLineState(currentLine, blockCommentLevel);
+                       } else {
+                               // Reset the line state
+                               styler.SetLineState(currentLine, 0);
+                       }
+               }
 
 
-               /*if (sc.atLineStart && (sc.state == SCE_POV_STRING)) {
+               if (sc.atLineStart && (sc.state == SCE_POV_STRING)) {
                        // Prevent SCE_POV_STRINGEOL from leaking back to previous line
                        sc.SetState(SCE_POV_STRING);
                        // Prevent SCE_POV_STRINGEOL from leaking back to previous line
                        sc.SetState(SCE_POV_STRING);
-               }*/
-
-               // Handle line continuation generically.
-               if (sc.ch == '\\') {
-                       if (sc.chNext == '\n' || sc.chNext == '\r') {
-                               sc.Forward();
-                               if (sc.ch == '\r' && sc.chNext == '\n') {
-                                       sc.Forward();
-                               }
-                               continue;
-                       }
                }
 
                // Determine if the current state should terminate.
                }
 
                // Determine if the current state should terminate.
-               if (sc.state == SCE_POV_OPERATOR || sc.state == SCE_POV_BRACE) {
+               if (sc.state == SCE_POV_OPERATOR) {
                        sc.SetState(SCE_POV_DEFAULT);
                } else if (sc.state == SCE_POV_NUMBER) {
                        sc.SetState(SCE_POV_DEFAULT);
                } else if (sc.state == SCE_POV_NUMBER) {
-                       if (!IsADigit(sc.ch) || sc.ch != '.') {
-                               sc.SetState(SCE_POV_DEFAULT);
+                       // We stop the number definition on non-numerical non-dot non-eE non-sign char
+                       if (!(isdigit(sc.ch) || sc.ch == '.' ||
+                                 toupper(sc.ch) == 'E' || sc.ch == '-' || sc.ch == '+')) {
+                                       // Not exactly following number definition (several dots are seen as OK, etc.)
+                                       // but probably enough in most cases.
+                                       sc.SetState(SCE_POV_DEFAULT);
                        }
                } else if (sc.state == SCE_POV_IDENTIFIER) {
                        }
                } else if (sc.state == SCE_POV_IDENTIFIER) {
-                       if (!IsAWordChar(sc.ch) || (sc.ch == '.')) {
+                       if (!IsAWordChar(sc.ch)) {
                                char s[100];
                                char s[100];
-                               if (caseSensitive) {
-                                       sc.GetCurrent(s, sizeof(s));
-                               } else {
-                                       sc.GetCurrentLowered(s, sizeof(s));
-                               }
-                               if (keywords.InList(s)) {
-                                       sc.ChangeState(SCE_POV_WORD);
-                               } else if (keywords2.InList(s)) {
+                               sc.GetCurrent(s, sizeof(s));
+                               if (keywords2.InList(s)) {
                                        sc.ChangeState(SCE_POV_WORD2);
                                        sc.ChangeState(SCE_POV_WORD2);
+                               } else if (keywords3.InList(s)) {
+                                       sc.ChangeState(SCE_POV_WORD3);
+                               } else if (keywords4.InList(s)) {
+                                       sc.ChangeState(SCE_POV_WORD4);
+                               } else if (keywords5.InList(s)) {
+                                       sc.ChangeState(SCE_POV_WORD5);
+                               } else if (keywords6.InList(s)) {
+                                       sc.ChangeState(SCE_POV_WORD6);
+                               } else if (keywords7.InList(s)) {
+                                       sc.ChangeState(SCE_POV_WORD7);
+                               } else if (keywords8.InList(s)) {
+                                       sc.ChangeState(SCE_POV_WORD8);
+                               }
+                               sc.SetState(SCE_POV_DEFAULT);
+                       }
+               } else if (sc.state == SCE_POV_DIRECTIVE) {
+                       if (!IsAWordChar(sc.ch)) {
+                               char s[100], *p;
+                               sc.GetCurrent(s, sizeof(s));
+                               p = s;
+                               // Skip # and whitespace between # and directive word
+                               do {
+                                       p++;
+                               } while ((*p == ' ' || *p == '\t') && *p != '\0');
+                               if (!keywords1.InList(p)) {
+                                       sc.ChangeState(SCE_POV_BADDIRECTIVE);
                                }
                                sc.SetState(SCE_POV_DEFAULT);
                        }
                } else if (sc.state == SCE_POV_COMMENT) {
                                }
                                sc.SetState(SCE_POV_DEFAULT);
                        }
                } else if (sc.state == SCE_POV_COMMENT) {
-                       if (sc.Match('*', '/')) {
+                       if (sc.Match('/', '*')) {
+                               blockCommentLevel++;
                                sc.Forward();
                                sc.Forward();
-                               sc.ForwardSetState(SCE_POV_DEFAULT);
-                       }
-               } else if (sc.state == SCE_POV_COMMENTDOC) {
-                       if (sc.Match('*', '/')) {
+                       } else if (sc.Match('*', '/') && blockCommentLevel > 0) {
+                               blockCommentLevel--;
                                sc.Forward();
                                sc.Forward();
-                               sc.ForwardSetState(SCE_POV_DEFAULT);
+                               if (blockCommentLevel == 0) {
+                                       sc.ForwardSetState(SCE_POV_DEFAULT);
+                               }
                        }
                } else if (sc.state == SCE_POV_COMMENTLINE) {
                        if (sc.atLineEnd) {
                                sc.SetState(SCE_POV_DEFAULT);
                        }
                } else if (sc.state == SCE_POV_STRING) {
                        }
                } else if (sc.state == SCE_POV_COMMENTLINE) {
                        if (sc.atLineEnd) {
                                sc.SetState(SCE_POV_DEFAULT);
                        }
                } else if (sc.state == SCE_POV_STRING) {
+                       if (sc.ch == '\\') {
+                               stringLen++;
+                               if (strchr("abfnrtuv0'\"", sc.chNext)) {
+                                       // Compound characters are counted as one.
+                                       // Note: for Unicode chars \u, we shouldn't count the next 4 digits...
+                                       sc.Forward();
+                               }
+                       } else if (sc.ch == '\"') {
+                               sc.ForwardSetState(SCE_POV_DEFAULT);
+                       } else if (sc.atLineEnd) {
+                               sc.ChangeState(SCE_POV_STRINGEOL);
+                               sc.ForwardSetState(SCE_POV_DEFAULT);
+                       } else {
+                               stringLen++;
+                       }
+                       if (stringLen > 256) {
+                               // Strings are limited to 256 chars
+                               sc.SetState(SCE_POV_STRINGEOL);
+                       }
+               } else if (sc.state == SCE_POV_STRINGEOL) {
                        if (sc.ch == '\\') {
                                if (sc.chNext == '\"' || sc.chNext == '\\') {
                                        sc.Forward();
                                }
                        } else if (sc.ch == '\"') {
                        if (sc.ch == '\\') {
                                if (sc.chNext == '\"' || sc.chNext == '\\') {
                                        sc.Forward();
                                }
                        } else if (sc.ch == '\"') {
+                               sc.ForwardSetState(SCE_C_DEFAULT);
+                       } else if (sc.atLineEnd) {
                                sc.ForwardSetState(SCE_POV_DEFAULT);
                        }
                }
                                sc.ForwardSetState(SCE_POV_DEFAULT);
                        }
                }
@@ -123,35 +183,43 @@ static void ColourisePOVDoc(unsigned int startPos, int length, int initStyle, Wo
                if (sc.state == SCE_POV_DEFAULT) {
                        if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
                                sc.SetState(SCE_POV_NUMBER);
                if (sc.state == SCE_POV_DEFAULT) {
                        if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
                                sc.SetState(SCE_POV_NUMBER);
-                       } else if (IsAWordStart(sc.ch) || (sc.ch == '#')) {
+                       } else if (IsAWordStart(sc.ch)) {
                                sc.SetState(SCE_POV_IDENTIFIER);
                        } else if (sc.Match('/', '*')) {
                                sc.SetState(SCE_POV_IDENTIFIER);
                        } else if (sc.Match('/', '*')) {
+                               blockCommentLevel = 1;
                                sc.SetState(SCE_POV_COMMENT);
                                sc.Forward();   // Eat the * so it isn't used for the end of the comment
                        } else if (sc.Match('/', '/')) {
                                sc.SetState(SCE_POV_COMMENTLINE);
                        } else if (sc.ch == '\"') {
                                sc.SetState(SCE_POV_STRING);
                                sc.SetState(SCE_POV_COMMENT);
                                sc.Forward();   // Eat the * so it isn't used for the end of the comment
                        } else if (sc.Match('/', '/')) {
                                sc.SetState(SCE_POV_COMMENTLINE);
                        } else if (sc.ch == '\"') {
                                sc.SetState(SCE_POV_STRING);
-                               //} else if (isoperator(static_cast<char>(sc.ch))) {
-                       } else if (sc.ch == '+' || sc.ch == '-' || sc.ch == '*' || sc.ch == '/' || sc.ch == '=' || sc.ch == '<' || sc.ch == '>' || sc.ch == '&' || sc.ch == '|' || sc.ch == '!' || sc.ch == '?' || sc.ch == ':') {
+                               stringLen = 0;
+                       } else if (sc.ch == '#') {
+                               sc.SetState(SCE_POV_DIRECTIVE);
+                               // Skip whitespace between # and directive word
+                               do {
+                                       sc.Forward();
+                               } while ((sc.ch == ' ' || sc.ch == '\t') && sc.More());
+                               if (sc.atLineEnd) {
+                                       sc.SetState(SCE_POV_DEFAULT);
+                               }
+                       } else if (isoperator(static_cast<char>(sc.ch))) {
                                sc.SetState(SCE_POV_OPERATOR);
                                sc.SetState(SCE_POV_OPERATOR);
-                       } else if (sc.ch == '{' || sc.ch == '}') {
-                               sc.SetState(SCE_POV_BRACE);
                        }
                }
                        }
                }
-
        }
        sc.Complete();
 }
 
        }
        sc.Complete();
 }
 
-static bool IsStreamCommentStyle(int style) {
-       return style == SCE_POV_COMMENT ||
-              style == SCE_POV_COMMENTDOC;
-}
+static void FoldPovDoc(
+       unsigned int startPos,
+       int length,
+       int initStyle,
+       WordList *[],
+       Accessor &styler) {
 
 
-static void FoldNoBoxPOVDoc(unsigned int startPos, int length, int initStyle,
-                            Accessor &styler) {
-       bool foldComment = styler.GetPropertyInt("fold.comment", 1) != 0;
+       bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
+       bool foldDirective = styler.GetPropertyInt("fold.directive") != 0;
        bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
        unsigned int endPos = startPos + length;
        int visibleChars = 0;
        bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
        unsigned int endPos = startPos + length;
        int visibleChars = 0;
@@ -168,15 +236,33 @@ static void FoldNoBoxPOVDoc(unsigned int startPos, int length, int initStyle,
                style = styleNext;
                styleNext = styler.StyleAt(i + 1);
                bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
                style = styleNext;
                styleNext = styler.StyleAt(i + 1);
                bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-               if (foldComment && IsStreamCommentStyle(style)) {
-                       if (!IsStreamCommentStyle(stylePrev)) {
+               if (foldComment && (style == SCE_POV_COMMENT)) {
+                       if (stylePrev != SCE_POV_COMMENT) {
                                levelCurrent++;
                                levelCurrent++;
-                       } else if (!IsStreamCommentStyle(styleNext) && !atEOL) {
+                       } else if ((styleNext != SCE_POV_COMMENT) && !atEOL) {
                                // Comments don't end at end of line and the next character may be unstyled.
                                levelCurrent--;
                        }
                }
                                // Comments don't end at end of line and the next character may be unstyled.
                                levelCurrent--;
                        }
                }
-               if (style == SCE_POV_BRACE) {
+               if (foldComment && (style == SCE_POV_COMMENTLINE)) {
+                       if ((ch == '/') && (chNext == '/')) {
+                               char chNext2 = styler.SafeGetCharAt(i + 2);
+                               if (chNext2 == '{') {
+                                       levelCurrent++;
+                               } else if (chNext2 == '}') {
+                                       levelCurrent--;
+                               }
+                       }
+               }
+               if (foldDirective && (style == SCE_POV_DIRECTIVE)) {
+                       if (ch == '#') {
+                               unsigned int j=i+1;
+                               while ((j<endPos) && IsASpaceOrTab(styler.SafeGetCharAt(j))) {
+                                       j++;
+                               }
+                       }
+               }
+               if (style == SCE_POV_OPERATOR) {
                        if (ch == '{') {
                                levelCurrent++;
                        } else if (ch == '}') {
                        if (ch == '{') {
                                levelCurrent++;
                        } else if (ch == '}') {
@@ -204,19 +290,16 @@ static void FoldNoBoxPOVDoc(unsigned int startPos, int length, int initStyle,
        styler.SetLevel(lineCurrent, levelPrev | flagsNext);
 }
 
        styler.SetLevel(lineCurrent, levelPrev | flagsNext);
 }
 
-static void FoldPOVDoc(unsigned int startPos, int length, int initStyle, WordList *[], Accessor &styler) {
-       FoldNoBoxPOVDoc(startPos, length, initStyle, styler);
-}
-
-static const char * const POVWordLists[] = {
-            "Primary keywords and identifiers",
-            "Secondary keywords and identifiers",
-            0,
-        };
-
-static void ColourisePOVDocSensitive(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
-                                     Accessor &styler) {
-       ColourisePOVDoc(startPos, length, initStyle, keywordlists, styler);
-}
+static const char * const povWordLists[] = {
+       "Language directives",
+       "Objects & CSG & Appearance",
+       "Types & Modifiers & Items",
+       "Predefined Identifiers",
+       "Predefined Functions",
+       "User defined 1",
+       "User defined 2",
+       "User defined 3",
+       0,
+};
 
 
-LexerModule lmPOV(SCLEX_POV, ColourisePOVDocSensitive, "pov", FoldPOVDoc, POVWordLists);
+LexerModule lmPOV(SCLEX_POV, ColourisePovDoc, "pov", FoldPovDoc, povWordLists);
diff --git a/contrib/src/stc/scintilla/src/LexPS.cxx b/contrib/src/stc/scintilla/src/LexPS.cxx
new file mode 100644 (file)
index 0000000..a44f3ce
--- /dev/null
@@ -0,0 +1,344 @@
+// Scintilla source code edit control
+/** @file LexPS.cxx
+ ** Lexer for PostScript
+ **
+ ** Written by Nigel Hathaway <nigel@bprj.co.uk>.
+ ** The License.txt file describes the conditions under which this software may be distributed.
+ **/
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <fcntl.h>
+
+#include "Platform.h"
+
+#include "PropSet.h"
+#include "Accessor.h"
+#include "StyleContext.h"
+#include "KeyWords.h"
+#include "Scintilla.h"
+#include "SciLexer.h"
+
+static inline bool IsASelfDelimitingChar(const int ch) {
+    return (ch == '[' || ch == ']' || ch == '{' || ch == '}' ||
+            ch == '/' || ch == '<' || ch == '>' ||
+            ch == '(' || ch == ')' || ch == '%');
+}
+
+static inline bool IsAWhitespaceChar(const int ch) {
+    return (ch == ' '  || ch == '\t' || ch == '\r' ||
+            ch == '\n' || ch == '\f' || ch == '\0');
+}
+
+static bool IsABaseNDigit(const int ch, const int base) {
+    int maxdig = '9';
+    int letterext = -1;
+
+    if (base <= 10)
+        maxdig = '0' + base - 1;
+    else
+        letterext = base - 11;
+
+    return ((ch >= '0' && ch <= maxdig) ||
+            (ch >= 'A' && ch <= ('A' + letterext)) ||
+            (ch >= 'a' && ch <= ('a' + letterext)));
+}
+
+static inline bool IsABase85Char(const int ch) {
+    return ((ch >= '!' && ch <= 'u') || ch == 'z');
+}
+
+static void ColourisePSDoc(
+    unsigned int startPos,
+    int length,
+    int initStyle,
+    WordList *keywordlists[],
+    Accessor &styler) {
+
+    WordList &keywords1 = *keywordlists[0];
+    WordList &keywords2 = *keywordlists[1];
+    WordList &keywords3 = *keywordlists[2];
+    WordList &keywords4 = *keywordlists[3];
+    WordList &keywords5 = *keywordlists[4];
+
+    StyleContext sc(startPos, length, initStyle, styler);
+
+    bool tokenizing = styler.GetPropertyInt("ps.tokenize") != 0;
+    int pslevel = styler.GetPropertyInt("ps.level", 3);
+    int lineCurrent = styler.GetLine(startPos);
+    int nestTextCurrent = 0;
+    if (lineCurrent > 0 && initStyle == SCE_PS_TEXT)
+        nestTextCurrent = styler.GetLineState(lineCurrent - 1);
+    int numRadix = 0;
+    bool numHasPoint = false;
+    bool numHasExponent = false;
+    bool numHasSign = false;
+
+    // Clear out existing tokenization
+    if (tokenizing && length > 0) {
+        styler.StartAt(startPos, static_cast<char>(INDIC2_MASK));
+        styler.ColourTo(startPos + length-1, 0);
+        styler.Flush();
+        styler.StartAt(startPos);
+        styler.StartSegment(startPos);
+    }
+
+    for (; sc.More(); sc.Forward()) {
+        if (sc.atLineStart)
+            lineCurrent = styler.GetLine(sc.currentPos);
+
+        // Determine if the current state should terminate.
+        if (sc.state == SCE_PS_COMMENT || sc.state == SCE_PS_DSC_VALUE) {
+            if (sc.atLineEnd) {
+                sc.SetState(SCE_C_DEFAULT);
+            }
+        } else if (sc.state == SCE_PS_DSC_COMMENT) {
+            if (sc.ch == ':') {
+                sc.Forward();
+                if (!sc.atLineEnd)
+                    sc.SetState(SCE_PS_DSC_VALUE);
+                else
+                    sc.SetState(SCE_C_DEFAULT);
+            } else if (sc.atLineEnd) {
+                sc.SetState(SCE_C_DEFAULT);
+            } else if (IsAWhitespaceChar(sc.ch)) {
+                sc.ChangeState(SCE_PS_COMMENT);
+            }
+        } else if (sc.state == SCE_PS_NUMBER) {
+            if (IsASelfDelimitingChar(sc.ch) || IsAWhitespaceChar(sc.ch)) {
+                if ((sc.chPrev == '+' || sc.chPrev == '-' ||
+                     sc.chPrev == 'E' || sc.chPrev == 'e') && numRadix == 0)
+                    sc.ChangeState(SCE_PS_NAME);
+                sc.SetState(SCE_C_DEFAULT);
+            } else if (sc.ch == '#') {
+                if (numHasPoint || numHasExponent || numHasSign || numRadix != 0) {
+                    sc.ChangeState(SCE_PS_NAME);
+                } else {
+                    char szradix[5];
+                    sc.GetCurrent(szradix, 4);
+                    numRadix = atoi(szradix);
+                    if (numRadix < 2 || numRadix > 36)
+                        sc.ChangeState(SCE_PS_NAME);
+                }
+            } else if ((sc.ch == 'E' || sc.ch == 'e') && numRadix == 0) {
+                if (numHasExponent) {
+                    sc.ChangeState(SCE_PS_NAME);
+                } else {
+                    numHasExponent = true;
+                    if (sc.chNext == '+' || sc.chNext == '-')
+                        sc.Forward();
+                }
+            } else if (sc.ch == '.') {
+                if (numHasPoint || numHasExponent || numRadix != 0) {
+                    sc.ChangeState(SCE_PS_NAME);
+                } else {
+                    numHasPoint = true;
+                }
+            } else if (numRadix == 0) {
+                if (!IsABaseNDigit(sc.ch, 10))
+                    sc.ChangeState(SCE_PS_NAME);
+            } else {
+                if (!IsABaseNDigit(sc.ch, numRadix))
+                    sc.ChangeState(SCE_PS_NAME);
+            }
+        } else if (sc.state == SCE_PS_NAME || sc.state == SCE_PS_KEYWORD) {
+            if (IsASelfDelimitingChar(sc.ch) || IsAWhitespaceChar(sc.ch)) {
+                char s[100];
+                sc.GetCurrent(s, sizeof(s));
+                if ((pslevel >= 1 && keywords1.InList(s)) ||
+                    (pslevel >= 2 && keywords2.InList(s)) ||
+                    (pslevel >= 3 && keywords3.InList(s)) ||
+                    keywords4.InList(s) || keywords5.InList(s)) {
+                    sc.ChangeState(SCE_PS_KEYWORD);
+                }
+                sc.SetState(SCE_C_DEFAULT);
+            }
+        } else if (sc.state == SCE_PS_LITERAL || sc.state == SCE_PS_IMMEVAL) {
+            if (IsASelfDelimitingChar(sc.ch) || IsAWhitespaceChar(sc.ch))
+                sc.SetState(SCE_C_DEFAULT);
+        } else if (sc.state == SCE_PS_PAREN_ARRAY || sc.state == SCE_PS_PAREN_DICT ||
+                   sc.state == SCE_PS_PAREN_PROC) {
+            sc.SetState(SCE_C_DEFAULT);
+        } else if (sc.state == SCE_PS_TEXT) {
+            if (sc.ch == '(') {
+                nestTextCurrent++;
+            } else if (sc.ch == ')') {
+                if (--nestTextCurrent == 0)
+                   sc.ForwardSetState(SCE_PS_DEFAULT);
+            } else if (sc.ch == '\\') {
+                sc.Forward();
+            }
+        } else if (sc.state == SCE_PS_HEXSTRING) {
+            if (sc.ch == '>') {
+                sc.ForwardSetState(SCE_PS_DEFAULT);
+            } else if (!IsABaseNDigit(sc.ch, 16) && !IsAWhitespaceChar(sc.ch)) {
+                sc.SetState(SCE_PS_HEXSTRING);
+                styler.ColourTo(sc.currentPos, SCE_PS_BADSTRINGCHAR);
+            }
+        } else if (sc.state == SCE_PS_BASE85STRING) {
+            if (sc.Match('~', '>')) {
+                sc.Forward();
+                sc.ForwardSetState(SCE_PS_DEFAULT);
+            } else if (!IsABase85Char(sc.ch) && !IsAWhitespaceChar(sc.ch)) {
+                sc.SetState(SCE_PS_BASE85STRING);
+                styler.ColourTo(sc.currentPos, SCE_PS_BADSTRINGCHAR);
+            }
+        }
+
+        // Determine if a new state should be entered.
+        if (sc.state == SCE_C_DEFAULT) {
+            unsigned int tokenpos = sc.currentPos;
+
+            if (sc.ch == '[' || sc.ch == ']') {
+                sc.SetState(SCE_PS_PAREN_ARRAY);
+            } else if (sc.ch == '{' || sc.ch == '}') {
+                sc.SetState(SCE_PS_PAREN_PROC);
+            } else if (sc.ch == '/') {
+                if (sc.chNext == '/') {
+                    sc.SetState(SCE_PS_IMMEVAL);
+                    sc.Forward();
+                } else {
+                    sc.SetState(SCE_PS_LITERAL);
+                }
+            } else if (sc.ch == '<') {
+                if (sc.chNext == '<') {
+                    sc.SetState(SCE_PS_PAREN_DICT);
+                    sc.Forward();
+                } else if (sc.chNext == '~') {
+                    sc.SetState(SCE_PS_BASE85STRING);
+                    sc.Forward();
+                } else {
+                    sc.SetState(SCE_PS_HEXSTRING);
+                }
+            } else if (sc.ch == '>' && sc.chNext == '>') {
+                    sc.SetState(SCE_PS_PAREN_DICT);
+                    sc.Forward();
+            } else if (sc.ch == '>' || sc.ch == ')') {
+                sc.SetState(SCE_C_DEFAULT);
+                styler.ColourTo(sc.currentPos, SCE_PS_BADSTRINGCHAR);
+            } else if (sc.ch == '(') {
+                sc.SetState(SCE_PS_TEXT);
+                nestTextCurrent = 1;
+            } else if (sc.ch == '%') {
+                if (sc.chNext == '%' && sc.atLineStart) {
+                    sc.SetState(SCE_PS_DSC_COMMENT);
+                    sc.Forward();
+                    if (sc.chNext == '+') {
+                        sc.Forward();
+                        sc.ForwardSetState(SCE_PS_DSC_VALUE);
+                    }
+                } else {
+                    sc.SetState(SCE_PS_COMMENT);
+                }
+            } else if ((sc.ch == '+' || sc.ch == '-' || sc.ch == '.') &&
+                       IsABaseNDigit(sc.chNext, 10)) {
+                sc.SetState(SCE_PS_NUMBER);
+                numRadix = 0;
+                numHasPoint = (sc.ch == '.');
+                numHasExponent = false;
+                numHasSign = (sc.ch == '+' || sc.ch == '-');
+            } else if ((sc.ch == '+' || sc.ch == '-') && sc.chNext == '.' &&
+                       IsABaseNDigit(sc.GetRelative(2), 10)) {
+                sc.SetState(SCE_PS_NUMBER);
+                numRadix = 0;
+                numHasPoint = false;
+                numHasExponent = false;
+                numHasSign = true;
+            } else if (IsABaseNDigit(sc.ch, 10)) {
+                sc.SetState(SCE_PS_NUMBER);
+                numRadix = 0;
+                numHasPoint = false;
+                numHasExponent = false;
+                numHasSign = false;
+            } else if (!IsAWhitespaceChar(sc.ch)) {
+                sc.SetState(SCE_PS_NAME);
+            }
+
+            // Mark the start of tokens
+            if (tokenizing && sc.state != SCE_C_DEFAULT && sc.state != SCE_PS_COMMENT &&
+                sc.state != SCE_PS_DSC_COMMENT && sc.state != SCE_PS_DSC_VALUE) {
+                styler.Flush();
+                styler.StartAt(tokenpos, static_cast<char>(INDIC2_MASK));
+                styler.ColourTo(tokenpos, INDIC2_MASK);
+                styler.Flush();
+                styler.StartAt(tokenpos);
+                styler.StartSegment(tokenpos);
+            }
+        }
+
+        if (sc.atLineEnd)
+            styler.SetLineState(lineCurrent, nestTextCurrent);
+    }
+
+    sc.Complete();
+}
+
+static void FoldPSDoc(unsigned int startPos, int length, int, WordList *[],
+                       Accessor &styler) {
+    bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
+    bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) != 0;
+    unsigned int endPos = startPos + length;
+    int visibleChars = 0;
+    int lineCurrent = styler.GetLine(startPos);
+    int levelCurrent = SC_FOLDLEVELBASE;
+    if (lineCurrent > 0)
+        levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
+    int levelMinCurrent = levelCurrent;
+    int levelNext = levelCurrent;
+    char chNext = styler[startPos];
+    int styleNext = styler.StyleAt(startPos);
+    int style;
+    for (unsigned int i = startPos; i < endPos; i++) {
+        char ch = chNext;
+        chNext = styler.SafeGetCharAt(i + 1);
+        style = styleNext;
+        styleNext = styler.StyleAt(i + 1);
+        bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');  //mac??
+        if ((style & 31) == SCE_PS_PAREN_PROC) {
+            if (ch == '{') {
+                // Measure the minimum before a '{' to allow
+                // folding on "} {"
+                if (levelMinCurrent > levelNext) {
+                    levelMinCurrent = levelNext;
+                }
+                levelNext++;
+            } else if (ch == '}') {
+                levelNext--;
+            }
+        }
+        if (atEOL) {
+            int levelUse = levelCurrent;
+            if (foldAtElse) {
+                levelUse = levelMinCurrent;
+            }
+            int lev = levelUse | levelNext << 16;
+            if (visibleChars == 0 && foldCompact)
+                lev |= SC_FOLDLEVELWHITEFLAG;
+            if (levelUse < levelNext)
+                lev |= SC_FOLDLEVELHEADERFLAG;
+            if (lev != styler.LevelAt(lineCurrent)) {
+                styler.SetLevel(lineCurrent, lev);
+            }
+            lineCurrent++;
+            levelCurrent = levelNext;
+            levelMinCurrent = levelCurrent;
+            visibleChars = 0;
+        }
+        if (!isspacechar(ch))
+            visibleChars++;
+    }
+}
+
+static const char * const psWordListDesc[] = {
+    "PS Level 1 operators",
+    "PS Level 2 operators",
+    "PS Level 3 operators",
+    "RIP-specific operators",
+    "User-defined operators",
+    0
+};
+
+LexerModule lmPS(SCLEX_PS, ColourisePSDoc, "ps", FoldPSDoc, psWordListDesc);
index c3bea6773df0f57a15b27e6fc1c52f391a3a21aa..434f88d4fe493c6a6b39bc0b1be7302eb4f90153 100644 (file)
@@ -3,6 +3,7 @@
  ** Lexer for Pascal.
  ** Written by Laurent le Tynevez
  ** Updated by Simon Steele <s.steele@pnotepad.org> September 2002
  ** Lexer for Pascal.
  ** Written by Laurent le Tynevez
  ** Updated by Simon Steele <s.steele@pnotepad.org> September 2002
+ ** Updated by Mathias Rauen <scite@madshi.net> May 2003 (Delphi adjustments)
  **/
 
 #include <stdlib.h>
  **/
 
 #include <stdlib.h>
@@ -40,12 +41,15 @@ static bool IsStreamCommentStyle(int style) {
                style == SCE_C_COMMENTDOCKEYWORDERROR;
 }
 
                style == SCE_C_COMMENTDOCKEYWORDERROR;
 }
 
-static inline bool IsAWordChar(const int ch) {
-       return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_');
+static void ColourTo(Accessor &styler, unsigned int end, unsigned int attr, bool bInAsm) {
+       if ((bInAsm) && (attr == SCE_C_OPERATOR || attr == SCE_C_NUMBER || attr == SCE_C_DEFAULT || attr == SCE_C_WORD || attr == SCE_C_IDENTIFIER)) {
+               styler.ColourTo(end, SCE_C_REGEX);
+       } else
+               styler.ColourTo(end, attr);
 }
 
 }
 
-// returns 1 if the item starts a class definition, and -1 if the word is "end".
-static int classifyWordPascal(unsigned int start, unsigned int end, /*WordList &keywords*/WordList *keywordlists[], Accessor &styler, bool bInClass) {
+// returns 1 if the item starts a class definition, and -1 if the word is "end", and 2 if the word is "asm"
+static int classifyWordPascal(unsigned int start, unsigned int end, /*WordList &keywords*/WordList *keywordlists[], Accessor &styler, bool bInClass, bool bInAsm) {
        int ret = 0;
 
        WordList& keywords = *keywordlists[0];
        int ret = 0;
 
        WordList& keywords = *keywordlists[0];
@@ -55,24 +59,34 @@ static int classifyWordPascal(unsigned int start, unsigned int end, /*WordList &
        getRange(start, end, styler, s, sizeof(s));
 
        char chAttr = SCE_C_IDENTIFIER;
        getRange(start, end, styler, s, sizeof(s));
 
        char chAttr = SCE_C_IDENTIFIER;
-       if (isdigit(s[0]) || (s[0] == '.')) {
+       if (isdigit(s[0]) || (s[0] == '.') ||(s[0] == '$')) {
                chAttr = SCE_C_NUMBER;
        }
        else {
                chAttr = SCE_C_NUMBER;
        }
        else {
-               if (keywords.InList(s)) {
-                       chAttr = SCE_C_WORD;
-
-                       if(strcmp(s, "class") == 0)
-                               ret = 1;
-                       else if(strcmp(s, "end") == 0)
-                               ret = -1;
-               } else if (bInClass) {
-                       if (classwords.InList(s)) {
+               if (s[0] == '#') {
+                       chAttr = SCE_C_CHARACTER;
+               }
+               else {
+                       if (keywords.InList(s)) {
                                chAttr = SCE_C_WORD;
                                chAttr = SCE_C_WORD;
+
+                               if(strcmp(s, "class") == 0) {
+                                       ret = 1;
+                               }
+                               else if (strcmp(s, "asm") == 0) {
+                                       ret = 2;
+                               }
+                               else if (strcmp(s, "end") == 0) {
+                                       ret = -1;
+                               }
+                       } else if (bInClass) {
+                               if (classwords.InList(s)) {
+                                       chAttr = SCE_C_WORD;
+                               }
                        }
                }
        }
                        }
                }
        }
-       styler.ColourTo(end, chAttr);
+       ColourTo(styler, end, chAttr, (bInAsm && ret != -1));
        return ret;
 }
 
        return ret;
 }
 
@@ -99,14 +113,14 @@ static void ColourisePascalDoc(unsigned int startPos, int length, int initStyle,
        styler.StartAt(startPos);
 
        int state = initStyle;
        styler.StartAt(startPos);
 
        int state = initStyle;
-       if (state == SCE_C_STRINGEOL)   // Does not leak onto next line
+       if (state == SCE_C_CHARACTER)   // Does not leak onto next line
                state = SCE_C_DEFAULT;
        char chPrev = ' ';
        char chNext = styler[startPos];
        unsigned int lengthDoc = startPos + length;
                state = SCE_C_DEFAULT;
        char chPrev = ' ';
        char chNext = styler[startPos];
        unsigned int lengthDoc = startPos + length;
-       int visibleChars = 0;
 
        bool bInClassDefinition;
 
        bool bInClassDefinition;
+
        int currentLine = styler.GetLine(startPos);
        if (currentLine > 0) {
                styler.SetLineState(currentLine, styler.GetLineState(currentLine-1));
        int currentLine = styler.GetLine(startPos);
        if (currentLine > 0) {
                styler.SetLineState(currentLine, styler.GetLineState(currentLine-1));
@@ -116,6 +130,10 @@ static void ColourisePascalDoc(unsigned int startPos, int length, int initStyle,
                bInClassDefinition = false;
        }
 
                bInClassDefinition = false;
        }
 
+       bool bInAsm = (state == SCE_C_REGEX);
+       if (bInAsm)
+               state = SCE_C_DEFAULT;
+
        styler.StartSegment(startPos);
        for (unsigned int i = startPos; i < lengthDoc; i++) {
                char ch = chNext;
        styler.StartSegment(startPos);
        for (unsigned int i = startPos; i < lengthDoc; i++) {
                char ch = chNext;
@@ -126,16 +144,13 @@ static void ColourisePascalDoc(unsigned int startPos, int length, int initStyle,
                        // Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix)
                        // Avoid triggering two times on Dos/Win
                        // End of line
                        // Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix)
                        // Avoid triggering two times on Dos/Win
                        // End of line
-                       if (state == SCE_C_STRINGEOL) {
-                               styler.ColourTo(i, state);
+                       if (state == SCE_C_CHARACTER) {
+                               ColourTo(styler, i, state, bInAsm);
                                state = SCE_C_DEFAULT;
                        }
                                state = SCE_C_DEFAULT;
                        }
-                       visibleChars = 0;
                        currentLine++;
                        styler.SetLineState(currentLine, (bInClassDefinition ? 1 : 0));
                }
                        currentLine++;
                        styler.SetLineState(currentLine, (bInClassDefinition ? 1 : 0));
                }
-               if (!isspacechar(ch))
-                       visibleChars++;
 
                if (styler.IsLeadByte(ch)) {
                        chNext = styler.SafeGetCharAt(i + 2);
 
                if (styler.IsLeadByte(ch)) {
                        chNext = styler.SafeGetCharAt(i + 2);
@@ -145,41 +160,50 @@ static void ColourisePascalDoc(unsigned int startPos, int length, int initStyle,
                }
 
                if (state == SCE_C_DEFAULT) {
                }
 
                if (state == SCE_C_DEFAULT) {
-                       if (iswordstart(ch) || (ch == '@')) {
-                               styler.ColourTo(i-1, state);
+                       if (iswordstart(ch) || ch == '#' || ch == '$' || (ch == '@' && bInAsm)) {
+                               ColourTo(styler, i-1, state, bInAsm);
                                state = SCE_C_IDENTIFIER;
                        } else if (ch == '{' && chNext != '$' && chNext != '&') {
                                state = SCE_C_IDENTIFIER;
                        } else if (ch == '{' && chNext != '$' && chNext != '&') {
-                               styler.ColourTo(i-1, state);
+                               ColourTo(styler, i-1, state, bInAsm);
                                state = SCE_C_COMMENT;
                        } else if (ch == '(' && chNext == '*'
                                                && styler.SafeGetCharAt(i + 2) != '$'
                                                && styler.SafeGetCharAt(i + 2) != '&') {
                                state = SCE_C_COMMENT;
                        } else if (ch == '(' && chNext == '*'
                                                && styler.SafeGetCharAt(i + 2) != '$'
                                                && styler.SafeGetCharAt(i + 2) != '&') {
-                               styler.ColourTo(i-1, state);
+                               ColourTo(styler, i-1, state, bInAsm);
                                state = SCE_C_COMMENTDOC;
                        } else if (ch == '/' && chNext == '/') {
                                state = SCE_C_COMMENTDOC;
                        } else if (ch == '/' && chNext == '/') {
-                               styler.ColourTo(i-1, state);
+                               ColourTo(styler, i-1, state, bInAsm);
                                state = SCE_C_COMMENTLINE;
                        } else if (ch == '\'') {
                                state = SCE_C_COMMENTLINE;
                        } else if (ch == '\'') {
-                               styler.ColourTo(i-1, state);
+                               ColourTo(styler, i-1, state, bInAsm);
                                state = SCE_C_CHARACTER;
                                state = SCE_C_CHARACTER;
-                       } else if (ch == '{' && (chNext == '$' || chNext=='&') && visibleChars == 1) {
-                               styler.ColourTo(i-1, state);
+                       } else if (ch == '{' && (chNext == '$' || chNext=='&')) {
+                               ColourTo(styler, i-1, state, bInAsm);
                                state = SCE_C_PREPROCESSOR;
                        } else if (isoperator(ch)) {
                                state = SCE_C_PREPROCESSOR;
                        } else if (isoperator(ch)) {
-                               styler.ColourTo(i-1, state);
-                               styler.ColourTo(i, SCE_C_OPERATOR);
+                               ColourTo(styler, i-1, state, bInAsm);
+                               ColourTo(styler, i, SCE_C_OPERATOR, bInAsm);
 
                        }
                } else if (state == SCE_C_IDENTIFIER) {
 
                        }
                } else if (state == SCE_C_IDENTIFIER) {
-                       if (!iswordchar(ch)) {
-                               int lStateChange = classifyWordPascal(styler.GetStartSegment(), i - 1, keywordlists, styler, bInClassDefinition);
+                       bool bDoublePoint = ((ch == '.') && (chPrev == '.'));
+                       if ((!iswordchar(ch) && ch != '$' && ch != '#' && (ch != '@' || !bInAsm)) || bDoublePoint) {
+                               if (bDoublePoint) i--;
+                               int lStateChange = classifyWordPascal(styler.GetStartSegment(), i - 1, keywordlists, styler, bInClassDefinition, bInAsm);
 
                                if(lStateChange == 1) {
                                        styler.SetLineState(currentLine, 1);
                                        bInClassDefinition = true;
 
                                if(lStateChange == 1) {
                                        styler.SetLineState(currentLine, 1);
                                        bInClassDefinition = true;
+                               } else if(lStateChange == 2) {
+                                       bInAsm = true;
                                } else if(lStateChange == -1) {
                                        styler.SetLineState(currentLine, 0);
                                        bInClassDefinition = false;
                                } else if(lStateChange == -1) {
                                        styler.SetLineState(currentLine, 0);
                                        bInClassDefinition = false;
+                                       bInAsm = false;
+                               }
+                               if (bDoublePoint) {
+                                       i++;
+                                       ColourTo(styler, i-1, SCE_C_DEFAULT, bInAsm);
                                }
 
                                state = SCE_C_DEFAULT;
                                }
 
                                state = SCE_C_DEFAULT;
@@ -189,30 +213,30 @@ static void ColourisePascalDoc(unsigned int startPos, int length, int initStyle,
                                } else if (ch == '(' && chNext == '*'
                                                && styler.SafeGetCharAt(i + 2) != '$'
                                                && styler.SafeGetCharAt(i + 2) != '&') {
                                } else if (ch == '(' && chNext == '*'
                                                && styler.SafeGetCharAt(i + 2) != '$'
                                                && styler.SafeGetCharAt(i + 2) != '&') {
-                                       styler.ColourTo(i-1, state);
+                                       ColourTo(styler, i-1, state, bInAsm);
                                        state = SCE_C_COMMENTDOC;
                                } else if (ch == '/' && chNext == '/') {
                                        state = SCE_C_COMMENTLINE;
                                } else if (ch == '\'') {
                                        state = SCE_C_CHARACTER;
                                } else if (isoperator(ch)) {
                                        state = SCE_C_COMMENTDOC;
                                } else if (ch == '/' && chNext == '/') {
                                        state = SCE_C_COMMENTLINE;
                                } else if (ch == '\'') {
                                        state = SCE_C_CHARACTER;
                                } else if (isoperator(ch)) {
-                                       styler.ColourTo(i, SCE_C_OPERATOR);
+                                       ColourTo(styler, i, SCE_C_OPERATOR, bInAsm);
                                }
                        }
                } else {
                        if (state == SCE_C_PREPROCESSOR) {
                                if (ch=='}'){
                                }
                        }
                } else {
                        if (state == SCE_C_PREPROCESSOR) {
                                if (ch=='}'){
-                                       styler.ColourTo(i, state);
+                                       ColourTo(styler, i, state, bInAsm);
                                        state = SCE_C_DEFAULT;
                                } else {
                                        if ((ch == '\r' || ch == '\n') && !(chPrev == '\\' || chPrev == '\r')) {
                                        state = SCE_C_DEFAULT;
                                } else {
                                        if ((ch == '\r' || ch == '\n') && !(chPrev == '\\' || chPrev == '\r')) {
-                                               styler.ColourTo(i-1, state);
+                                               ColourTo(styler, i-1, state, bInAsm);
                                                state = SCE_C_DEFAULT;
                                        }
                                }
                        } else if (state == SCE_C_COMMENT) {
                                if (ch == '}' ) {
                                                state = SCE_C_DEFAULT;
                                        }
                                }
                        } else if (state == SCE_C_COMMENT) {
                                if (ch == '}' ) {
-                                       styler.ColourTo(i, state);
+                                       ColourTo(styler, i, state, bInAsm);
                                        state = SCE_C_DEFAULT;
                                }
                        } else if (state == SCE_C_COMMENTDOC) {
                                        state = SCE_C_DEFAULT;
                                }
                        } else if (state == SCE_C_COMMENTDOC) {
@@ -220,28 +244,25 @@ static void ColourisePascalDoc(unsigned int startPos, int length, int initStyle,
                                        if (((i > styler.GetStartSegment() + 2) || (
                                                (initStyle == SCE_C_COMMENTDOC) &&
                                                (styler.GetStartSegment() == static_cast<unsigned int>(startPos))))) {
                                        if (((i > styler.GetStartSegment() + 2) || (
                                                (initStyle == SCE_C_COMMENTDOC) &&
                                                (styler.GetStartSegment() == static_cast<unsigned int>(startPos))))) {
-                                                       styler.ColourTo(i, state);
+                                                       ColourTo(styler, i, state, bInAsm);
                                                        state = SCE_C_DEFAULT;
                                        }
                                }
                        } else if (state == SCE_C_COMMENTLINE) {
                                if (ch == '\r' || ch == '\n') {
                                                        state = SCE_C_DEFAULT;
                                        }
                                }
                        } else if (state == SCE_C_COMMENTLINE) {
                                if (ch == '\r' || ch == '\n') {
-                                       styler.ColourTo(i-1, state);
+                                       ColourTo(styler, i-1, state, bInAsm);
                                        state = SCE_C_DEFAULT;
                                }
                        } else if (state == SCE_C_CHARACTER) {
                                        state = SCE_C_DEFAULT;
                                }
                        } else if (state == SCE_C_CHARACTER) {
-                               if ((ch == '\r' || ch == '\n')) {
-                                       styler.ColourTo(i-1, SCE_C_STRINGEOL);
-                                       state = SCE_C_STRINGEOL;
-                               } else if (ch == '\'') {
-                                       styler.ColourTo(i, state);
+                               if (ch == '\'') {
+                                       ColourTo(styler, i, state, bInAsm);
                                        state = SCE_C_DEFAULT;
                                }
                        }
                }
                chPrev = ch;
        }
                                        state = SCE_C_DEFAULT;
                                }
                        }
                }
                chPrev = ch;
        }
-       styler.ColourTo(lengthDoc - 1, state);
+       ColourTo(styler, lengthDoc - 1, state, bInAsm);
 }
 
 static void FoldPascalDoc(unsigned int startPos, int length, int initStyle, WordList *[],
 }
 
 static void FoldPascalDoc(unsigned int startPos, int length, int initStyle, WordList *[],
index 0520c00ed6fcefb48dd7e6ce0ba71cfaae0b5788..3f65b12097a161e3b295f7844b76e85bfaa702e4 100644 (file)
@@ -23,7 +23,7 @@ static void classifyWordSQL(unsigned int start, unsigned int end, WordList &keyw
        char s[100];
        bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
        for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) {
        char s[100];
        bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
        for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) {
-               s[i] = static_cast<char>(toupper(styler[start + i]));
+               s[i] = static_cast<char>(tolower(styler[start + i]));
                s[i + 1] = '\0';
        }
        char chAttr = SCE_C_IDENTIFIER;
                s[i + 1] = '\0';
        }
        char chAttr = SCE_C_IDENTIFIER;
@@ -88,7 +88,7 @@ static void ColouriseSQLDoc(unsigned int startPos, int length,
                        } else if (ch == '-' && chNext == '-') {
                                styler.ColourTo(i - 1, state);
                                state = SCE_C_COMMENTLINE;
                        } else if (ch == '-' && chNext == '-') {
                                styler.ColourTo(i - 1, state);
                                state = SCE_C_COMMENTLINE;
-                       } else if (ch == '\'') {
+                       } else if ((ch == '\'') || (ch == '"')) {
                                styler.ColourTo(i - 1, state);
                                state = SCE_C_STRING;
                        } else if (isoperator(ch)) {
                                styler.ColourTo(i - 1, state);
                                state = SCE_C_STRING;
                        } else if (isoperator(ch)) {
@@ -103,7 +103,7 @@ static void ColouriseSQLDoc(unsigned int startPos, int length,
                                        state = SCE_C_COMMENT;
                                } else if (ch == '-' && chNext == '-') {
                                        state = SCE_C_COMMENTLINE;
                                        state = SCE_C_COMMENT;
                                } else if (ch == '-' && chNext == '-') {
                                        state = SCE_C_COMMENTLINE;
-                               } else if (ch == '\'') {
+                               } else if ((ch == '\'') || (ch == '"'))  {
                                        state = SCE_C_STRING;
                                } else if (isoperator(ch)) {
                                        styler.ColourTo(i, SCE_C_OPERATOR);
                                        state = SCE_C_STRING;
                                } else if (isoperator(ch)) {
                                        styler.ColourTo(i, SCE_C_OPERATOR);
@@ -134,6 +134,16 @@ static void ColouriseSQLDoc(unsigned int startPos, int length,
                                        }
                                        ch = chNext;
                                        chNext = styler.SafeGetCharAt(i + 1);
                                        }
                                        ch = chNext;
                                        chNext = styler.SafeGetCharAt(i + 1);
+                               } else if (ch == '"') {
+                                       if (chNext == '"') {
+                                               i++;
+                                       } else {
+                                               styler.ColourTo(i, state);
+                                               state = SCE_C_DEFAULT;
+                                               i++;
+                                       }
+                                       ch = chNext;
+                                       chNext = styler.SafeGetCharAt(i + 1);
                                }
                        }
                        if (state == SCE_C_DEFAULT) {    // One of the above succeeded
                                }
                        }
                        if (state == SCE_C_DEFAULT) {    // One of the above succeeded
@@ -141,7 +151,7 @@ static void ColouriseSQLDoc(unsigned int startPos, int length,
                                        state = SCE_C_COMMENT;
                                } else if (ch == '-' && chNext == '-') {
                                        state = SCE_C_COMMENTLINE;
                                        state = SCE_C_COMMENT;
                                } else if (ch == '-' && chNext == '-') {
                                        state = SCE_C_COMMENTLINE;
-                               } else if (ch == '\'') {
+                               } else if ((ch == '\'') || (ch == '"')) {
                                        state = SCE_C_STRING;
                                } else if (iswordstart(ch)) {
                                        state = SCE_C_WORD;
                                        state = SCE_C_STRING;
                                } else if (iswordstart(ch)) {
                                        state = SCE_C_WORD;
diff --git a/contrib/src/stc/scintilla/src/LexScriptol.cxx b/contrib/src/stc/scintilla/src/LexScriptol.cxx
new file mode 100644 (file)
index 0000000..fda10e3
--- /dev/null
@@ -0,0 +1,427 @@
+// Scintilla source code edit control
+/** @file LexScriptol.cxx
+ ** Lexer for Scriptol.
+ **/
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "Platform.h"
+
+#include "PropSet.h"
+#include "Accessor.h"
+#include "KeyWords.h"
+#include "Scintilla.h"
+#include "SciLexer.h"
+
+static void ClassifyWordSol(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, char *prevWord)
+{
+       char s[100];
+       bool wordIsNumber = isdigit(styler[start]) != 0;
+       for (unsigned int i = 0; i < end - start + 1 && i < 30; i++)
+    {
+               s[i] = styler[start + i];
+               s[i + 1] = '\0';
+       }
+       char chAttr = SCE_P_IDENTIFIER;
+    if (0 == strcmp(prevWord, "class"))       chAttr = SCE_P_CLASSNAME;
+    else if (wordIsNumber)                    chAttr = SCE_P_NUMBER;
+    else if (keywords.InList(s))              chAttr = SCE_P_WORD;
+    else for (unsigned int i = 0; i < end - start + 1; i++)  // test dotted idents
+    {
+               if (styler[start + i] == '.')
+        {
+                       styler.ColourTo(start + i - 1, chAttr);
+                       styler.ColourTo(start + i, SCE_P_OPERATOR);
+               }
+       }
+       styler.ColourTo(end, chAttr);
+       strcpy(prevWord, s);
+}
+
+static bool IsSolComment(Accessor &styler, int pos, int len)
+{
+//    return len > 0 && styler[pos]=='`';
+   char c;
+   if(len > 0)
+   {
+     c = styler[pos];
+     if(c == '`') return true;
+     if(len > 1)
+     {
+        if(c == '/')
+        {
+          c = styler[pos + 1];
+          if(c == '/') return true;
+          if(c == '*') return true;
+        }
+     }
+   }
+   return false;
+}
+
+static bool IsSolStringStart(char ch, char /*chNext*/)
+{
+    if (ch == '\'' || ch == '"')  return true;
+    //chNext = chNext;  // for future use
+
+       return false;
+}
+
+static bool IsSolWordStart(char ch, char chNext)
+{
+    return (iswordchar(ch) && !IsSolStringStart(ch, chNext));
+}
+
+/* Return the state to use for the string starting at i; *nextIndex will be set to the first index following the quote(s) */
+static int GetSolStringState(Accessor &styler, int i, int *nextIndex)
+{
+       char ch = styler.SafeGetCharAt(i);
+       char chNext = styler.SafeGetCharAt(i + 1);
+
+       if (ch != '"' && ch != '\'') {
+               *nextIndex = i + 1;
+               return SCE_P_DEFAULT;
+       }
+
+       if (ch == chNext && ch == styler.SafeGetCharAt(i + 2))
+    {
+       *nextIndex = i + 3;
+       if (ch == '"') return SCE_P_TRIPLEDOUBLE;
+       else           return SCE_P_TRIPLE;
+       }
+    else
+    {
+       *nextIndex = i + 1;
+       if (ch == '"') return SCE_P_STRING;
+       else           return SCE_P_CHARACTER;
+       }
+}
+
+static void ColouriseSolDoc(unsigned int startPos, int length, int initStyle,
+                                                  WordList *keywordlists[], Accessor &styler)
+ {
+
+       int lengthDoc = startPos + length;
+
+       // Backtrack to previous line in case need to fix its tab whinging
+       if (startPos > 0)
+    {
+               int lineCurrent = styler.GetLine(startPos);
+               if (lineCurrent > 0)
+        {
+           startPos = styler.LineStart(lineCurrent-1);
+           if (startPos == 0) initStyle = SCE_P_DEFAULT;
+           else               initStyle = styler.StyleAt(startPos-1);
+               }
+       }
+
+       styler.StartAt(startPos, 127);
+
+       WordList &keywords = *keywordlists[0];
+
+       int whingeLevel = styler.GetPropertyInt("tab.timmy.whinge.level");
+       char prevWord[200];
+       prevWord[0] = '\0';
+    if (length == 0)  return ;
+
+       int state = initStyle & 31;
+
+       int nextIndex = 0;
+       char chPrev = ' ';
+       //char chPrev2 = ' ';
+       char chNext = styler[startPos];
+       styler.StartSegment(startPos);
+       bool atStartLine = true;
+       int spaceFlags = 0;
+       for (int i = startPos; i < lengthDoc; i++)
+    {
+
+      if (atStartLine)
+      {
+         char chBad = static_cast<char>(64);
+         char chGood = static_cast<char>(0);
+         char chFlags = chGood;
+
+         if (whingeLevel == 1)
+         {
+                               chFlags = (spaceFlags & wsInconsistent) ? chBad : chGood;
+         }
+         else if (whingeLevel == 2)
+         {
+                               chFlags = (spaceFlags & wsSpaceTab) ? chBad : chGood;
+         }
+         else if (whingeLevel == 3)
+         {
+                               chFlags = (spaceFlags & wsSpace) ? chBad : chGood;
+         }
+         else if (whingeLevel == 4)
+         {
+                               chFlags = (spaceFlags & wsTab) ? chBad : chGood;
+         }
+         styler.SetFlags(chFlags, static_cast<char>(state));
+         atStartLine = false;
+       }
+
+               char ch = chNext;
+               chNext = styler.SafeGetCharAt(i + 1);
+
+               if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == lengthDoc))
+        {
+                       if ((state == SCE_P_DEFAULT) || (state == SCE_P_TRIPLE) || (state == SCE_P_TRIPLEDOUBLE))
+            {
+                               styler.ColourTo(i, state);
+                       }
+                       atStartLine = true;
+         }
+
+               if (styler.IsLeadByte(ch))
+        {
+                       chNext = styler.SafeGetCharAt(i + 2);
+                       chPrev = ' ';
+                       //chPrev2 = ' ';
+                       i += 1;
+                       continue;
+               }
+
+               if (state == SCE_P_STRINGEOL)
+        {
+                       if (ch != '\r' && ch != '\n')
+             {
+                               styler.ColourTo(i - 1, state);
+                               state = SCE_P_DEFAULT;
+             }
+        }
+
+               if (state == SCE_P_DEFAULT)
+        {
+            if (IsSolWordStart(ch, chNext))
+            {
+                               styler.ColourTo(i - 1, state);
+                               state = SCE_P_WORD;
+            }
+            else if (ch == '`')
+            {
+                               styler.ColourTo(i - 1, state);
+                state = SCE_P_COMMENTLINE;
+            }
+            else if (ch == '/')
+            {
+                               styler.ColourTo(i - 1, state);
+                if(chNext == '/') state = SCE_P_COMMENTLINE;
+                if(chNext == '*') state = SCE_P_COMMENTBLOCK;
+            }
+
+            else if (ch == '=' && chNext == 'b')
+            {
+                               // =begin indicates the start of a comment (doc) block
+               if(styler.SafeGetCharAt(i + 2) == 'e' && styler.SafeGetCharAt(i + 3) == 'g' && styler.SafeGetCharAt(i + 4) == 'i' && styler.SafeGetCharAt(i + 5) == 'n')
+               {
+                                       styler.ColourTo(i - 1, state);
+                                       state = SCE_P_TRIPLEDOUBLE; //SCE_C_COMMENT;
+               }
+            }
+            else if (IsSolStringStart(ch, chNext))
+            {
+               styler.ColourTo(i - 1, state);
+               state = GetSolStringState(styler, i, &nextIndex);
+               if (nextIndex != i + 1)
+               {
+                                       i = nextIndex - 1;
+                                       ch = ' ';
+                                       //chPrev = ' ';
+                                       chNext = styler.SafeGetCharAt(i + 1);
+               }
+                       }
+            else if (isoperator(ch))
+            {
+                               styler.ColourTo(i - 1, state);
+                               styler.ColourTo(i, SCE_P_OPERATOR);
+                       }
+          }
+          else if (state == SCE_P_WORD)
+          {
+              if (!iswordchar(ch))
+              {
+                 ClassifyWordSol(styler.GetStartSegment(), i - 1, keywords, styler, prevWord);
+                 state = SCE_P_DEFAULT;
+                 if (ch == '`')
+                 {
+                     state = chNext == '`' ? SCE_P_COMMENTBLOCK : SCE_P_COMMENTLINE;
+                 }
+                 else if (IsSolStringStart(ch, chNext))
+                 {
+                    styler.ColourTo(i - 1, state);
+                    state = GetSolStringState(styler, i, &nextIndex);
+                                       if (nextIndex != i + 1)
+                    {
+                                               i = nextIndex - 1;
+                                               ch = ' ';
+                                               //chPrev = ' ';
+                                               chNext = styler.SafeGetCharAt(i + 1);
+                                       }
+                 }
+                 else if (isoperator(ch))
+                 {
+                                       styler.ColourTo(i, SCE_P_OPERATOR);
+                 }
+             }
+          }
+          else
+          {
+            if (state == SCE_P_COMMENTLINE)
+            {
+                               if (ch == '\r' || ch == '\n')
+                 {
+                                       styler.ColourTo(i - 1, state);
+                                       state = SCE_P_DEFAULT;
+                 }
+            }
+            else if(state == SCE_P_COMMENTBLOCK)
+            {
+              if(ch == '*' && chNext == '/') state = SCE_P_DEFAULT;
+            }
+            else if (state == SCE_P_STRING)
+            {
+                               if ((ch == '\r' || ch == '\n') && (chPrev != '\\'))
+                {
+                                       styler.ColourTo(i - 1, state);
+                                       state = SCE_P_STRINGEOL;
+                               }
+                else if (ch == '\\')
+                {
+                   if (chNext == '\"' || chNext == '\'' || chNext == '\\')
+                   {
+                                               i++;
+                                               ch = chNext;
+                                               chNext = styler.SafeGetCharAt(i + 1);
+                   }
+                               }
+                else if (ch == '\"')
+                {
+                                       styler.ColourTo(i, state);
+                                       state = SCE_P_DEFAULT;
+                               }
+                       }
+            else if (state == SCE_P_CHARACTER)
+             {
+                               if ((ch == '\r' || ch == '\n') && (chPrev != '\\'))
+                 {
+                                       styler.ColourTo(i - 1, state);
+                                       state = SCE_P_STRINGEOL;
+                 }
+                 else if (ch == '\\')
+                 {
+                                       if (chNext == '\"' || chNext == '\'' || chNext == '\\')
+                    {
+                                               i++;
+                                               ch = chNext;
+                                               chNext = styler.SafeGetCharAt(i + 1);
+                                       }
+                               }
+                else if (ch == '\'')
+                {
+                                       styler.ColourTo(i, state);
+                                       state = SCE_P_DEFAULT;
+                               }
+            }
+            /*
+            else if (state == SCE_P_TRIPLE)
+             {
+                               if (ch == '\'' && chPrev == '\'' && chPrev2 == '\'')
+                 {
+                    styler.ColourTo(i, state);
+                                       state = SCE_P_DEFAULT;
+                 }
+              }
+            else if (state == SCE_P_TRIPLEDOUBLE)
+              {
+                               // =end terminates the comment block
+                               if (ch == 'd' && chPrev == 'n' && chPrev2 == 'e')
+                {
+                                       if  (styler.SafeGetCharAt(i - 3) == '=')
+                     {
+                                               styler.ColourTo(i, state);
+                                               state = SCE_P_DEFAULT;
+                     }
+                 }
+                       }
+            */
+               }
+               //chPrev2 = chPrev;
+               chPrev = ch;
+       }
+       if (state == SCE_P_WORD)
+    {
+       ClassifyWordSol(styler.GetStartSegment(), lengthDoc-1, keywords, styler, prevWord);
+       }
+    else
+    {
+               styler.ColourTo(lengthDoc-1, state);
+       }
+}
+
+static void FoldSolDoc(unsigned int startPos, int length, int initStyle,
+                                                  WordList *[], Accessor &styler)
+ {
+       int lengthDoc = startPos + length;
+
+       // Backtrack to previous line in case need to fix its fold status
+       int lineCurrent = styler.GetLine(startPos);
+       if (startPos > 0) {
+               if (lineCurrent > 0)
+        {
+                       lineCurrent--;
+                       startPos = styler.LineStart(lineCurrent);
+                       if (startPos == 0)
+                               initStyle = SCE_P_DEFAULT;
+                       else
+                               initStyle = styler.StyleAt(startPos-1);
+               }
+       }
+       int state = initStyle & 31;
+       int spaceFlags = 0;
+        int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, IsSolComment);
+       if ((state == SCE_P_TRIPLE) || (state == SCE_P_TRIPLEDOUBLE))
+               indentCurrent |= SC_FOLDLEVELWHITEFLAG;
+       char chNext = styler[startPos];
+       for (int i = startPos; i < lengthDoc; i++)
+    {
+               char ch = chNext;
+               chNext = styler.SafeGetCharAt(i + 1);
+               int style = styler.StyleAt(i) & 31;
+
+               if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == lengthDoc))
+        {
+                       int lev = indentCurrent;
+            int indentNext = styler.IndentAmount(lineCurrent + 1, &spaceFlags, IsSolComment);
+                       if ((style == SCE_P_TRIPLE) || (style== SCE_P_TRIPLEDOUBLE))
+                               indentNext |= SC_FOLDLEVELWHITEFLAG;
+                       if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG))
+            {
+                               // Only non whitespace lines can be headers
+                               if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK))
+                {
+                                       lev |= SC_FOLDLEVELHEADERFLAG;
+                               } else if (indentNext & SC_FOLDLEVELWHITEFLAG)
+                {
+                                       // Line after is blank so check the next - maybe should continue further?
+                                       int spaceFlags2 = 0;
+                    int indentNext2 = styler.IndentAmount(lineCurrent + 2, &spaceFlags2, IsSolComment);
+                                       if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext2 & SC_FOLDLEVELNUMBERMASK))
+                    {
+                                               lev |= SC_FOLDLEVELHEADERFLAG;
+                                       }
+                               }
+                       }
+                       indentCurrent = indentNext;
+                       styler.SetLevel(lineCurrent, lev);
+                       lineCurrent++;
+               }
+       }
+}
+
+LexerModule lmScriptol(SCLEX_SCRIPTOL, ColouriseSolDoc, "scriptol", FoldSolDoc);
index 8455d854d2bc74fea4f697e1b9a0a506360458da..021a6572739172bb6868a3c8518be713356bf297 100644 (file)
@@ -71,16 +71,6 @@ bool EqualCaseInsensitive(const char *a, const char *b) {
        return 0 == CompareCaseInsensitive(a, b);
 }
 
        return 0 == CompareCaseInsensitive(a, b);
 }
 
-inline unsigned int HashString(const char *s, size_t len) {
-       unsigned int ret = 0;
-       while (len--) {
-               ret <<= 4;
-               ret ^= *s;
-               s++;
-       }
-       return ret;
-}
-
 PropSet::PropSet() {
        superPS = 0;
        for (int root = 0; root < hashRoots; root++)
 PropSet::PropSet() {
        superPS = 0;
        for (int root = 0; root < hashRoots; root++)
@@ -160,7 +150,7 @@ SString PropSet::Get(const char *key) {
        }
 }
 
        }
 }
 
-static bool IncludesVar(const char *value, const char *key) {
+bool PropSet::IncludesVar(const char *value, const char *key) {
        const char *var = strstr(value, "$(");
        while (var) {
                if (isprefix(var + 2, key) && (var[2 + strlen(key)] == ')')) {
        const char *var = strstr(value, "$(");
        while (var) {
                if (isprefix(var + 2, key) && (var[2 + strlen(key)] == ')')) {
index 3bce611f0df288eda0552da4072c59eaa49b13e4..3ca61bb9cec295647b059cc43c4bf8f1e4034ef1 100644 (file)
  *      Dept. of Computer Science
  *      York University
  *
  *      Dept. of Computer Science
  *      York University
  *
- * Original code available from http://www.cs.yorku.ca/~oz/
+ * Original code available from http://www.cs.yorku.ca/~oz/ 
  * Translation to C++ by Neil Hodgson neilh@scintilla.org
  * Removed all use of register.
  * Converted to modern function prototypes.
  * Translation to C++ by Neil Hodgson neilh@scintilla.org
  * Removed all use of register.
  * Converted to modern function prototypes.
- * Put all global/static variables into an object so this code can be
+ * Put all global/static variables into an object so this code can be 
  * used from multiple threads etc.
  *
  * These routines are the PUBLIC DOMAIN equivalents of regex
  * used from multiple threads etc.
  *
  * These routines are the PUBLIC DOMAIN equivalents of regex
  * Modification history:
  *
  * $Log$
  * Modification history:
  *
  * $Log$
- * Revision 1.7  2003/07/18 06:43:23  RD
- * Update to Scintilla 1.53
+ * Revision 1.8  2003/09/18 05:05:38  RD
+ * Updated to Scintilla 1.54
+ * Applied most of patch #806092
+ * Added new wxSTC sample from Otto Wyss
  *
  * Revision 1.9  2003/03/21 10:36:08  nyamatongwe
  * Detect patterns too long in regular expression search.
  *
  * Revision 1.9  2003/03/21 10:36:08  nyamatongwe
  * Detect patterns too long in regular expression search.
  *
  * Revision 1.2  88/08/28  15:36:04  oz
  * Use a complement bitmap to represent NCL.
  *
  * Revision 1.2  88/08/28  15:36:04  oz
  * Use a complement bitmap to represent NCL.
- * This removes the need to have seperate
- * code in the PMatch case block - it is
+ * This removes the need to have seperate 
+ * code in the PMatch case block - it is 
  * just CCL code now.
  * just CCL code now.
- *
+ * 
  * Use the actual CCL code in the CLO
  * section of PMatch. No need for a recursive
  * PMatch call.
  * Use the actual CCL code in the CLO
  * section of PMatch. No need for a recursive
  * PMatch call.
- *
+ * 
  * Use a bitmap table to set char bits in an
  * 8-bit chunk.
  * Use a bitmap table to set char bits in an
  * 8-bit chunk.
- *
+ * 
  * Interfaces:
  *      RESearch::Compile:        compile a regular expression into a NFA.
  *
  * Interfaces:
  *      RESearch::Compile:        compile a regular expression into a NFA.
  *
  *                     void re_fail(msg, op)
  *                     char *msg;
  *                     char op;
  *                     void re_fail(msg, op)
  *                     char *msg;
  *                     char op;
- *
+ *  
  * Regular Expressions:
  *
  *      [1]     char    matches itself, unless it is a special
  * Regular Expressions:
  *
  *      [1]     char    matches itself, unless it is a special
  *
  *      [3]     \       matches the character following it, except
  *                     when followed by a left or right round bracket,
  *
  *      [3]     \       matches the character following it, except
  *                     when followed by a left or right round bracket,
- *                     a digit 1 to 9 or a left or right angle bracket.
+ *                     a digit 1 to 9 or a left or right angle bracket. 
  *                     (see [7], [8] and [9])
  *                     (see [7], [8] and [9])
- *                     It is used as an escape character for all
+ *                     It is used as an escape character for all 
  *                     other meta-characters, and itself. When used
  *                     in a set ([4]), it is treated as an ordinary
  *                     character.
  *
  *      [4]     [set]   matches one of the characters in the set.
  *                      If the first character in the set is "^",
  *                     other meta-characters, and itself. When used
  *                     in a set ([4]), it is treated as an ordinary
  *                     character.
  *
  *      [4]     [set]   matches one of the characters in the set.
  *                      If the first character in the set is "^",
- *                      it matches a character NOT in the set, i.e.
- *                     complements the set. A shorthand S-E is
- *                     used to specify a set of characters S upto
- *                     E, inclusive. The special characters "]" and
- *                     "-" have no special meaning if they appear
+ *                      it matches a character NOT in the set, i.e. 
+ *                     complements the set. A shorthand S-E is 
+ *                     used to specify a set of characters S upto 
+ *                     E, inclusive. The special characters "]" and 
+ *                     "-" have no special meaning if they appear 
  *                     as the first chars in the set.
  *                      examples:        match:
  *
  *                     as the first chars in the set.
  *                      examples:        match:
  *
  * Notes:
  *
  *     This implementation uses a bit-set representation for character
  * Notes:
  *
  *     This implementation uses a bit-set representation for character
- *     classes for speed and compactness. Each character is represented
- *     by one bit in a 128-bit block. Thus, CCL always takes a
+ *     classes for speed and compactness. Each character is represented 
+ *     by one bit in a 128-bit block. Thus, CCL always takes a 
  *     constant 16 bytes in the internal nfa, and RESearch::Execute does a single
  *     bit comparison to locate the character in the set.
  *
  *     constant 16 bytes in the internal nfa, and RESearch::Execute does a single
  *     bit comparison to locate the character in the set.
  *
  *     compile:        CHR f CHR o CLO CHR o END CLO ANY END END
  *     matches:        fo foo fooo foobar fobar foxx ...
  *
  *     compile:        CHR f CHR o CLO CHR o END CLO ANY END END
  *     matches:        fo foo fooo foobar fobar foxx ...
  *
- *     pattern:        fo[ob]a[rz]
+ *     pattern:        fo[ob]a[rz]     
  *     compile:        CHR f CHR o CCL bitset CHR a CCL bitset END
  *     matches:        fobar fooar fobaz fooaz
  *
  *     compile:        CHR f CHR o CCL bitset CHR a CCL bitset END
  *     matches:        fobar fooar fobaz fooaz
  *
 const char bitarr[] = {1,2,4,8,16,32,64,'\200'};
 
 #define badpat(x)      (*nfa = END, x)
 const char bitarr[] = {1,2,4,8,16,32,64,'\200'};
 
 #define badpat(x)      (*nfa = END, x)
-
 RESearch::RESearch() {
        Init();
 }
 RESearch::RESearch() {
        Init();
 }
@@ -359,7 +361,7 @@ const char *RESearch::Compile(const char *pat, int length, bool caseSensitive, b
        int n;
        char mask;              /* xor mask -CCL/NCL */
        int c1, c2;
        int n;
        char mask;              /* xor mask -CCL/NCL */
        int c1, c2;
-
+               
        if (!pat || !length)
                if (sta)
                        return 0;
        if (!pat || !length)
                if (sta)
                        return 0;
@@ -401,7 +403,7 @@ const char *RESearch::Compile(const char *pat, int length, bool caseSensitive, b
 
                        i++;
                        if (*++p == '^') {
 
                        i++;
                        if (*++p == '^') {
-                               mask = '\377';
+                               mask = '\377';  
                                i++;
                                p++;
                        } else
                                i++;
                                p++;
                        } else
@@ -445,7 +447,7 @@ const char *RESearch::Compile(const char *pat, int length, bool caseSensitive, b
 
                        for (n = 0; n < BITBLK; bittab[n++] = (char) 0)
                                *mp++ = static_cast<char>(mask ^ bittab[n]);
 
                        for (n = 0; n < BITBLK; bittab[n++] = (char) 0)
                                *mp++ = static_cast<char>(mask ^ bittab[n]);
-
+       
                        break;
 
                case '*':               /* match 0 or more.. */
                        break;
 
                case '*':               /* match 0 or more.. */
@@ -590,7 +592,7 @@ const char *RESearch::Compile(const char *pat, int length, bool caseSensitive, b
  * RESearch::Execute:
  *     execute nfa to find a match.
  *
  * RESearch::Execute:
  *     execute nfa to find a match.
  *
- *     special cases: (nfa[0])
+ *     special cases: (nfa[0]) 
  *             BOL
  *                     Match only once, starting from the
  *                     beginning.
  *             BOL
  *                     Match only once, starting from the
  *                     beginning.
@@ -615,7 +617,7 @@ int RESearch::Execute(CharacterIndexer &ci, int lp, int endp) {
 
        bol = lp;
        failure = 0;
 
        bol = lp;
        failure = 0;
-
+       
        Clear();
 
        switch(*ap) {
        Clear();
 
        switch(*ap) {
@@ -656,7 +658,7 @@ int RESearch::Execute(CharacterIndexer &ci, int lp, int endp) {
        return 1;
 }
 
        return 1;
 }
 
-/*
+/* 
  * PMatch: internal routine for the hard part
  *
  *     This code is partly snarfed from an early grep written by
  * PMatch: internal routine for the hard part
  *
  *     This code is partly snarfed from an early grep written by
@@ -682,7 +684,7 @@ int RESearch::Execute(CharacterIndexer &ci, int lp, int endp) {
  *
  *     At the end of a successful match, bopat[n] and eopat[n]
  *     are set to the beginning and end of subpatterns matched
  *
  *     At the end of a successful match, bopat[n] and eopat[n]
  *     are set to the beginning and end of subpatterns matched
- *     by tagged expressions (n = 1 to 9).
+ *     by tagged expressions (n = 1 to 9).     
  *
  */
 
  *
  */
 
@@ -693,23 +695,23 @@ extern void re_fail(char *,char);
  * and EOW. the reason for not using ctype macros is that we can
  * let the user add into our own table. see RESearch::ModifyWord. This table
  * is not in the bitset form, since we may wish to extend it in the
  * and EOW. the reason for not using ctype macros is that we can
  * let the user add into our own table. see RESearch::ModifyWord. This table
  * is not in the bitset form, since we may wish to extend it in the
- * future for other character classifications.
+ * future for other character classifications. 
  *
  *     TRUE for 0-9 A-Z a-z _
  */
 static char chrtyp[MAXCHR] = {
  *
  *     TRUE for 0-9 A-Z a-z _
  */
 static char chrtyp[MAXCHR] = {
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
-       1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
-       0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
-       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-       1, 0, 0, 0, 0, 1, 0, 1, 1, 1,
-       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 
+       0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 0, 0, 0, 0, 0
        };
 
        1, 1, 1, 0, 0, 0, 0, 0
        };
 
@@ -831,10 +833,10 @@ int RESearch::PMatch(CharacterIndexer &ci, int lp, int endp, char *ap) {
  *     the compact bitset representation for the default table]
  */
 
  *     the compact bitset representation for the default table]
  */
 
-static char deftab[16] = {
-       0, 0, 0, 0, 0, 0, '\377', 003, '\376', '\377', '\377', '\207',
-       '\376', '\377', '\377', 007
-};
+static char deftab[16] = {     
+       0, 0, 0, 0, 0, 0, '\377', 003, '\376', '\377', '\377', '\207',  
+       '\376', '\377', '\377', 007 
+}; 
 
 void RESearch::ModifyWord(char *s) {
        int i;
 
 void RESearch::ModifyWord(char *s) {
        int i;
@@ -881,7 +883,7 @@ int RESearch::Substitute(CharacterIndexer &ci, char *src, char *dst) {
                                pin = c - '0';
                                break;
                        }
                                pin = c - '0';
                                break;
                        }
-
+                       
                default:
                        *dst++ = c;
                        continue;
                default:
                        *dst++ = c;
                        continue;
index d676e0f3181b072260ba48b188c60a9c0c553ba7..8ca9cd0b825608ebd24729430cdde3dbd3f471dc 100644 (file)
@@ -18,7 +18,7 @@
 #define BITBLK MAXCHR/CHRBIT
 
 class CharacterIndexer {
 #define BITBLK MAXCHR/CHRBIT
 
 class CharacterIndexer {
-public:
+public: 
        virtual char CharAt(int index)=0;
 };
 
        virtual char CharAt(int index)=0;
 };
 
index 9c3235d580f08e6c44edd76705e99dbb2f5bf124..c8edb513bc3fdca89e6ef43f7341ee4a73f5ed13 100644 (file)
  */
 class SVector {
        enum { allocSize = 4000 };
  */
 class SVector {
        enum { allocSize = 4000 };
-
+       
        int *v;                         ///< The vector
        unsigned int size;      ///< Number of elements allocated
        unsigned int len;       ///< Number of elements used in vector
        bool allocFailure;      ///< A memory allocation call has failed
        int *v;                         ///< The vector
        unsigned int size;      ///< Number of elements allocated
        unsigned int len;       ///< Number of elements used in vector
        bool allocFailure;      ///< A memory allocation call has failed
-
+       
        /** Internally allocate more elements than the user wants
         * to avoid thrashing the memory allocator. */
        void SizeTo(int newSize) {
                if (newSize < allocSize)
                        newSize += allocSize;
        /** Internally allocate more elements than the user wants
         * to avoid thrashing the memory allocator. */
        void SizeTo(int newSize) {
                if (newSize < allocSize)
                        newSize += allocSize;
-               else
+               else 
                        newSize = (newSize * 3) / 2;
                int* newv = new int[newSize];
                if (!newv) {
                        newSize = (newSize * 3) / 2;
                int* newv = new int[newSize];
                if (!newv) {
@@ -44,7 +44,7 @@ class SVector {
                delete []v;
                v = newv;
        }
                delete []v;
                v = newv;
        }
-
+       
 public:
        SVector() {
                allocFailure = false;
 public:
        SVector() {
                allocFailure = false;
index ea2e2d1d6db9eef8e3a48ccc347a2ea13c6b3aa1..039539ad3c3ece57230f7b9d8581a68ef7fa4d2d 100644 (file)
@@ -203,11 +203,11 @@ void ScintillaBase::AutoCompleteStart(int lenEntered, const char *list) {
                                pdoc->DeleteChars(currentPos, lenEntered);
                                SetEmptySelection(currentPos);
                                pdoc->InsertString(currentPos, list);
                                pdoc->DeleteChars(currentPos, lenEntered);
                                SetEmptySelection(currentPos);
                                pdoc->InsertString(currentPos, list);
-                               SetEmptySelection(currentPos + strlen(list));
+                               SetEmptySelection(currentPos + static_cast<int>(strlen(list)));
                        } else {
                                SetEmptySelection(currentPos);
                                pdoc->InsertString(currentPos, list + lenEntered);
                        } else {
                                SetEmptySelection(currentPos);
                                pdoc->InsertString(currentPos, list + lenEntered);
-                               SetEmptySelection(currentPos + strlen(list + lenEntered));
+                               SetEmptySelection(currentPos + static_cast<int>(strlen(list + lenEntered)));
                        }
                        return;
                }
                        }
                        return;
                }
@@ -340,7 +340,7 @@ void ScintillaBase::AutoCompleteCompleted() {
        if (item != -1) {
                SString piece = selected;
                pdoc->InsertString(firstPos, piece.c_str());
        if (item != -1) {
                SString piece = selected;
                pdoc->InsertString(firstPos, piece.c_str());
-               SetEmptySelection(firstPos + piece.length());
+               SetEmptySelection(firstPos + static_cast<int>(piece.length()));
        }
        pdoc->EndUndoAction();
 }
        }
        pdoc->EndUndoAction();
 }
@@ -557,7 +557,7 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara
                return ac.GetTypesep();
 
        case SCI_CALLTIPSHOW:
                return ac.GetTypesep();
 
        case SCI_CALLTIPSHOW:
-               CallTipShow(LocationFromPosition(wParam),
+               CallTipShow(LocationFromPosition(wParam), 
                        reinterpret_cast<const char *>(lParam));
                break;
 
                        reinterpret_cast<const char *>(lParam));
                break;
 
index bf0b92d57da6acee322f33c3b9f2c058a5ba1366..bb09e3f5b314f6764407a5925881d1f3db95d7cb 100644 (file)
@@ -43,7 +43,7 @@ protected:
        int lexLanguage;
        const LexerModule *lexCurrent;
        PropSet props;
        int lexLanguage;
        const LexerModule *lexCurrent;
        PropSet props;
-       enum {numWordLists=9};
+       enum {numWordLists=KEYWORDSET_MAX+1};
        WordList *keyWordLists[numWordLists+1];
        void SetLexer(uptr_t wParam);
        void SetLexerLanguage(const char *languageName);
        WordList *keyWordLists[numWordLists+1];
        void SetLexer(uptr_t wParam);
        void SetLexerLanguage(const char *languageName);
index 40a8dba6a456b8a63433b9dd0796208f415e63bd..c37bcac90045a49e44b4cc0347f117239e3412d7 100644 (file)
@@ -67,8 +67,8 @@ Style &Style::operator=(const Style &source) {
 
 void Style::Clear(ColourDesired fore_, ColourDesired back_, int size_,
                   const char *fontName_, int characterSet_,
 
 void Style::Clear(ColourDesired fore_, ColourDesired back_, int size_,
                   const char *fontName_, int characterSet_,
-                  bool bold_, bool italic_, bool eolFilled_,
-                  bool underline_, ecaseForced caseForce_,
+                  bool bold_, bool italic_, bool eolFilled_, 
+                  bool underline_, ecaseForced caseForce_, 
                  bool visible_, bool changeable_, bool hotspot_) {
        fore.desired = fore_;
        back.desired = back_;
                  bool visible_, bool changeable_, bool hotspot_) {
        fore.desired = fore_;
        back.desired = back_;
@@ -102,7 +102,7 @@ void Style::ClearTo(const Style &source) {
                source.eolFilled,
                source.underline,
                source.caseForce,
                source.eolFilled,
                source.underline,
                source.caseForce,
-               source.visible,
+               source.visible, 
                source.changeable,
                source.hotspot);
 }
                source.changeable,
                source.hotspot);
 }
index 2f1e57586089f7dc1d6289caabe4d40cf7591861..6ee930b6bbd1ec6e8090f191dd24e2f812f0e496 100644 (file)
@@ -44,8 +44,8 @@ public:
        void Clear(ColourDesired fore_, ColourDesired back_,
                   int size_,
                   const char *fontName_, int characterSet_,
        void Clear(ColourDesired fore_, ColourDesired back_,
                   int size_,
                   const char *fontName_, int characterSet_,
-                  bool bold_, bool italic_, bool eolFilled_,
-                  bool underline_, ecaseForced caseForce_,
+                  bool bold_, bool italic_, bool eolFilled_, 
+                  bool underline_, ecaseForced caseForce_, 
                   bool visible_, bool changeable_, bool hotspot_);
        void ClearTo(const Style &source);
        bool EquivalentFontTo(const Style *other) const;
                   bool visible_, bool changeable_, bool hotspot_);
        void ClearTo(const Style &source);
        bool EquivalentFontTo(const Style *other) const;
index d70ddf5c3472752facb5f2b4144f67f517e5f0f5..ce42534e7bffa52b588207e0dcd4ef38854102eb 100644 (file)
@@ -7,7 +7,7 @@
 
 #include <stdlib.h>
 #include <string.h>
 
 #include <stdlib.h>
 #include <string.h>
-#include <ctype.h>
+#include <ctype.h> 
 #include <stdio.h>
 
 #include "Platform.h"
 #include <stdio.h>
 
 #include "Platform.h"
@@ -24,7 +24,7 @@ bool WindowAccessor::InternalIsLeadByte(char ch) {
        if (SC_CP_UTF8 == codePage)
                // For lexing, all characters >= 0x80 are treated the
                // same so none is considered a lead byte.
        if (SC_CP_UTF8 == codePage)
                // For lexing, all characters >= 0x80 are treated the
                // same so none is considered a lead byte.
-               return false;
+               return false;   
        else
                return Platform::IsDBCSLeadByte(codePage, ch);
 }
        else
                return Platform::IsDBCSLeadByte(codePage, ch);
 }
@@ -71,10 +71,10 @@ int WindowAccessor::LevelAt(int line) {
        return Platform::SendScintilla(id, SCI_GETFOLDLEVEL, line, 0);
 }
 
        return Platform::SendScintilla(id, SCI_GETFOLDLEVEL, line, 0);
 }
 
-int WindowAccessor::Length() {
-       if (lenDoc == -1)
+int WindowAccessor::Length() { 
+       if (lenDoc == -1) 
                lenDoc = Platform::SendScintilla(id, SCI_GETTEXTLENGTH, 0, 0);
                lenDoc = Platform::SendScintilla(id, SCI_GETTEXTLENGTH, 0, 0);
-       return lenDoc;
+       return lenDoc; 
 }
 
 int WindowAccessor::GetLineState(int line) {
 }
 
 int WindowAccessor::GetLineState(int line) {
@@ -125,7 +125,7 @@ void WindowAccessor::Flush() {
        startPos = extremePosition;
        lenDoc = -1;
        if (validLen > 0) {
        startPos = extremePosition;
        lenDoc = -1;
        if (validLen > 0) {
-               Platform::SendScintillaPointer(id, SCI_SETSTYLINGEX, validLen,
+               Platform::SendScintillaPointer(id, SCI_SETSTYLINGEX, validLen, 
                        styleBuf);
                validLen = 0;
        }
                        styleBuf);
                validLen = 0;
        }
@@ -134,12 +134,12 @@ void WindowAccessor::Flush() {
 int WindowAccessor::IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsCommentLeader) {
        int end = Length();
        int spaceFlags = 0;
 int WindowAccessor::IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsCommentLeader) {
        int end = Length();
        int spaceFlags = 0;
-
-       // Determines the indentation level of the current line and also checks for consistent
+       
+       // Determines the indentation level of the current line and also checks for consistent 
        // indentation compared to the previous line.
        // indentation compared to the previous line.
-       // Indentation is judged consistent when the indentation whitespace of each line lines
+       // Indentation is judged consistent when the indentation whitespace of each line lines 
        // the same or the indentation of one line is a prefix of the other.
        // the same or the indentation of one line is a prefix of the other.
-
+       
        int pos = LineStart(line);
        char ch = (*this)[pos];
        int indent = 0;
        int pos = LineStart(line);
        char ch = (*this)[pos];
        int indent = 0;
@@ -166,7 +166,7 @@ int WindowAccessor::IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsC
                }
                ch = (*this)[++pos];
        }
                }
                ch = (*this)[++pos];
        }
-
+       
        *flags = spaceFlags;
        indent += SC_FOLDLEVELBASE;
        // if completely empty line or the start of a comment...
        *flags = spaceFlags;
        indent += SC_FOLDLEVELBASE;
        // if completely empty line or the start of a comment...
index c4e4f888efff31c26ed895450bdd6ac5af136f4d..c3f66c2e405d84fc26bc4b92bc437b3249a5055c 100644 (file)
@@ -49,7 +49,7 @@ void XPM::FillRun(Surface *surface, int code, int startX, int y, int x) {
        }
 }
 
        }
 }
 
-XPM::XPM(const char *textForm) :
+XPM::XPM(const char *textForm) : 
        data(0),        codes(0), colours(0), lines(0) {
        Init(textForm);
 }
        data(0),        codes(0), colours(0), lines(0) {
        Init(textForm);
 }
@@ -102,7 +102,7 @@ void XPM::Init(const char * const *linesForm) {
 
        int strings = 1+height+nColours;
        lines = new char *[strings];
 
        int strings = 1+height+nColours;
        lines = new char *[strings];
-       int allocation = 0;
+       size_t allocation = 0;
        for (int i=0; i<strings; i++) {
                allocation += MeasureLength(linesForm[i]) + 1;
        }
        for (int i=0; i<strings; i++) {
                allocation += MeasureLength(linesForm[i]) + 1;
        }
index 534196f5516b50a9a409df54b5f210f443f4664d..829cb32e6173407be04e8cc4f1bdda9cda484b51 100644 (file)
@@ -475,7 +475,7 @@ void wxStyledTextCtrl::MarkerDefineBitmap(int markerNumber, const wxBitmap& bmp)
         buff[len] = 0;
         SendMsg(2049, markerNumber, (long)buff);
         delete [] buff;
         buff[len] = 0;
         SendMsg(2049, markerNumber, (long)buff);
         delete [] buff;
-
+        
 }
 
 // Set a margin to be either numeric or symbolic.
 }
 
 // Set a margin to be either numeric or symbolic.
@@ -858,7 +858,7 @@ void wxStyledTextCtrl::RegisterImage(int type, const wxBitmap& bmp) {
         buff[len] = 0;
         SendMsg(2405, type, (long)buff);
         delete [] buff;
         buff[len] = 0;
         SendMsg(2405, type, (long)buff);
         delete [] buff;
-
+     
 }
 
 // Clear all the registered images.
 }
 
 // Clear all the registered images.
@@ -1802,12 +1802,12 @@ bool wxStyledTextCtrl::GetMouseDownCaptures() {
 }
 
 // Sets the cursor to one of the SC_CURSOR* values.
 }
 
 // Sets the cursor to one of the SC_CURSOR* values.
-void wxStyledTextCtrl::SetCursor(int cursorType) {
+void wxStyledTextCtrl::SetSTCCursor(int cursorType) {
     SendMsg(2386, cursorType, 0);
 }
 
 // Get cursor type.
     SendMsg(2386, cursorType, 0);
 }
 
 // Get cursor type.
-int wxStyledTextCtrl::GetCursor() {
+int wxStyledTextCtrl::GetSTCCursor() {
     return SendMsg(2387, 0, 0);
 }
 
     return SendMsg(2387, 0, 0);
 }
 
@@ -2115,11 +2115,11 @@ bool wxStyledTextCtrl::SaveFile(const wxString& filename)
     if (!file.IsOpened())
         return FALSE;
 
     if (!file.IsOpened())
         return FALSE;
 
-    bool success = file.Write(GetText());
+    bool success = file.Write(GetText(), *wxConvCurrent);
 
 
-    if (success)
+    if (success) {
         SetSavePoint();
         SetSavePoint();
-
+    }
     return success;
 }
 
     return success;
 }
 
@@ -2131,13 +2131,23 @@ bool wxStyledTextCtrl::LoadFile(const wxString& filename)
     if (file.IsOpened())
     {
         wxString contents;
     if (file.IsOpened())
     {
         wxString contents;
+#if wxUSE_UNICODE
+        wxMemoryBuffer buffer;
+#else
+        wxString buffer;
+#endif
+        
         off_t len = file.Length();
         off_t len = file.Length();
-
         if (len > 0)
         {
         if (len > 0)
         {
-            wxChar *buf = contents.GetWriteBuf(len);
-            success = (file.Read(buf, len) == len);
-            contents.UngetWriteBuf();
+            void *bufptr = buffer.GetWriteBuf(len);
+            success = (file.Read(bufptr, len) == len);
+            buffer.UngetWriteBuf(len);
+#if wxUSE_UNICODE
+            contents = wxString(buffer, *wxConvCurrent);
+#else
+            contents = buffer;
+#endif
         }
         else
             success = true;            // empty file is ok
         }
         else
             success = true;            // empty file is ok
@@ -2157,7 +2167,7 @@ bool wxStyledTextCtrl::LoadFile(const wxString& filename)
 //----------------------------------------------------------------------
 // Event handlers
 
 //----------------------------------------------------------------------
 // Event handlers
 
-void wxStyledTextCtrl::OnPaint(wxPaintEvent& evt) {
+void wxStyledTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(evt)) {
     wxPaintDC dc(this);
     m_swx->DoPaint(&dc, GetUpdateRegion().GetBox());
 }
     wxPaintDC dc(this);
     m_swx->DoPaint(&dc, GetUpdateRegion().GetBox());
 }
@@ -2179,7 +2189,7 @@ void wxStyledTextCtrl::OnScroll(wxScrollEvent& evt) {
     }
 }
 
     }
 }
 
-void wxStyledTextCtrl::OnSize(wxSizeEvent& evt) {
+void wxStyledTextCtrl::OnSize(wxSizeEvent& WXUNUSED(evt)) {
     wxSize sz = GetClientSize();
     m_swx->DoSize(sz.x, sz.y);
 }
     wxSize sz = GetClientSize();
     m_swx->DoSize(sz.x, sz.y);
 }
@@ -2257,9 +2267,10 @@ void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
     int key = evt.GetKeyCode();
     bool shift = evt.ShiftDown(),
          ctrl  = evt.ControlDown(),
     int key = evt.GetKeyCode();
     bool shift = evt.ShiftDown(),
          ctrl  = evt.ControlDown(),
-         alt   = evt.AltDown();
+         alt   = evt.AltDown(),
+         meta  = evt.MetaDown();
 
 
-    int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, &m_lastKeyDownConsumed);
+    int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, meta, &m_lastKeyDownConsumed);
 
 //     printf("KeyDn  key:%d  shift:%d  ctrl:%d  alt:%d  processed:%d  consumed:%d\n",
 //            key, shift, ctrl, alt, processed, m_lastKeyDownConsumed);
 
 //     printf("KeyDn  key:%d  shift:%d  ctrl:%d  alt:%d  processed:%d  consumed:%d\n",
 //            key, shift, ctrl, alt, processed, m_lastKeyDownConsumed);
@@ -2269,22 +2280,22 @@ void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
 }
 
 
 }
 
 
-void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
+void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& WXUNUSED(evt)) {
     m_swx->DoLoseFocus();
 }
 
 
     m_swx->DoLoseFocus();
 }
 
 
-void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) {
+void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& WXUNUSED(evt)) {
     m_swx->DoGainFocus();
 }
 
 
     m_swx->DoGainFocus();
 }
 
 
-void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) {
+void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(evt)) {
     m_swx->DoSysColourChange();
 }
 
 
     m_swx->DoSysColourChange();
 }
 
 
-void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) {
+void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& WXUNUSED(evt)) {
     // do nothing to help avoid flashing
 }
 
     // do nothing to help avoid flashing
 }
 
@@ -2295,7 +2306,7 @@ void wxStyledTextCtrl::OnMenu(wxCommandEvent& evt) {
 }
 
 
 }
 
 
-void wxStyledTextCtrl::OnListBox(wxCommandEvent& evt) {
+void wxStyledTextCtrl::OnListBox(wxCommandEvent& WXUNUSED(evt)) {
     m_swx->DoOnListBox();
 }
 
     m_swx->DoOnListBox();
 }
 
index c339d40d8ff39b97ff4396b96514ec796033049c..be24cc98f7a5bc1b6125ec2eb4fb612176a8669e 100644 (file)
@@ -362,7 +362,7 @@ bool wxStyledTextCtrl::LoadFile(const wxString& filename)
 //----------------------------------------------------------------------
 // Event handlers
 
 //----------------------------------------------------------------------
 // Event handlers
 
-void wxStyledTextCtrl::OnPaint(wxPaintEvent& evt) {
+void wxStyledTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(evt)) {
     wxPaintDC dc(this);
     m_swx->DoPaint(&dc, GetUpdateRegion().GetBox());
 }
     wxPaintDC dc(this);
     m_swx->DoPaint(&dc, GetUpdateRegion().GetBox());
 }
@@ -384,7 +384,7 @@ void wxStyledTextCtrl::OnScroll(wxScrollEvent& evt) {
     }
 }
 
     }
 }
 
-void wxStyledTextCtrl::OnSize(wxSizeEvent& evt) {
+void wxStyledTextCtrl::OnSize(wxSizeEvent& WXUNUSED(evt)) {
     wxSize sz = GetClientSize();
     m_swx->DoSize(sz.x, sz.y);
 }
     wxSize sz = GetClientSize();
     m_swx->DoSize(sz.x, sz.y);
 }
@@ -462,9 +462,10 @@ void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
     int key = evt.GetKeyCode();
     bool shift = evt.ShiftDown(),
          ctrl  = evt.ControlDown(),
     int key = evt.GetKeyCode();
     bool shift = evt.ShiftDown(),
          ctrl  = evt.ControlDown(),
-         alt   = evt.AltDown();
+         alt   = evt.AltDown(),
+         meta  = evt.MetaDown();
 
 
-    int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, &m_lastKeyDownConsumed);
+    int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, meta, &m_lastKeyDownConsumed);
 
 //     printf("KeyDn  key:%%d  shift:%%d  ctrl:%%d  alt:%%d  processed:%%d  consumed:%%d\n",
 //            key, shift, ctrl, alt, processed, m_lastKeyDownConsumed);
 
 //     printf("KeyDn  key:%%d  shift:%%d  ctrl:%%d  alt:%%d  processed:%%d  consumed:%%d\n",
 //            key, shift, ctrl, alt, processed, m_lastKeyDownConsumed);
@@ -474,22 +475,22 @@ void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
 }
 
 
 }
 
 
-void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
+void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& WXUNUSED(evt)) {
     m_swx->DoLoseFocus();
 }
 
 
     m_swx->DoLoseFocus();
 }
 
 
-void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) {
+void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& WXUNUSED(evt)) {
     m_swx->DoGainFocus();
 }
 
 
     m_swx->DoGainFocus();
 }
 
 
-void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) {
+void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(evt)) {
     m_swx->DoSysColourChange();
 }
 
 
     m_swx->DoSysColourChange();
 }
 
 
-void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) {
+void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& WXUNUSED(evt)) {
     // do nothing to help avoid flashing
 }
 
     // do nothing to help avoid flashing
 }
 
@@ -500,7 +501,7 @@ void wxStyledTextCtrl::OnMenu(wxCommandEvent& evt) {
 }
 
 
 }
 
 
-void wxStyledTextCtrl::OnListBox(wxCommandEvent& evt) {
+void wxStyledTextCtrl::OnListBox(wxCommandEvent& WXUNUSED(evt)) {
     m_swx->DoOnListBox();
 }
 
     m_swx->DoOnListBox();
 }
 
index ac9599b50d529f30537a668be674e79b5989a1c3..5adb5df385203a3b682b9926888eb0897f834b70 100644 (file)
@@ -52,6 +52,7 @@
 
 //-----------------------------------------
 // Commands that can be bound to keystrokes
 
 //-----------------------------------------
 // Commands that can be bound to keystrokes
+
 %(CMDS)s
 
 
 %(CMDS)s
 
 
index 91ea544d60ea7220f6b7e63645ce11883e4013a2..de090b647e532db90d263086d2c4c9a0144f7110 100644 (file)
 #define wxSTC_INDIC_TT 2
 #define wxSTC_INDIC_DIAGONAL 3
 #define wxSTC_INDIC_STRIKE 4
 #define wxSTC_INDIC_TT 2
 #define wxSTC_INDIC_DIAGONAL 3
 #define wxSTC_INDIC_STRIKE 4
+#define wxSTC_INDIC_HIDDEN 5
 #define wxSTC_INDIC0_MASK 0x20
 #define wxSTC_INDIC1_MASK 0x40
 #define wxSTC_INDIC2_MASK 0x80
 #define wxSTC_INDIC0_MASK 0x20
 #define wxSTC_INDIC1_MASK 0x40
 #define wxSTC_INDIC2_MASK 0x80
 // where most code reside, and the lines after the caret, eg. the body of a function.
 #define wxSTC_CARET_EVEN 0x08
 
 // where most code reside, and the lines after the caret, eg. the body of a function.
 #define wxSTC_CARET_EVEN 0x08
 
+// Maximum value of keywordSet parameter of SetKeyWords.
+#define wxSTC_KEYWORDSET_MAX 8
+
 // Notifications
 // Type of modification and the action which caused the modification.
 // These are defined as a bit mask to make it easy to specify which notifications are wanted.
 // Notifications
 // Type of modification and the action which caused the modification.
 // These are defined as a bit mask to make it easy to specify which notifications are wanted.
 #define wxSTC_LEX_POV 39
 #define wxSTC_LEX_LOUT 40
 #define wxSTC_LEX_ESCRIPT 41
 #define wxSTC_LEX_POV 39
 #define wxSTC_LEX_LOUT 40
 #define wxSTC_LEX_ESCRIPT 41
+#define wxSTC_LEX_PS 42
+#define wxSTC_LEX_NSIS 43
+#define wxSTC_LEX_MMIXAL 44
 
 // When a lexer specifies its language as SCLEX_AUTOMATIC it receives a
 // value assigned in sequence from SCLEX_AUTOMATIC+1.
 
 // When a lexer specifies its language as SCLEX_AUTOMATIC it receives a
 // value assigned in sequence from SCLEX_AUTOMATIC+1.
 #define wxSTC_LUA_WORD4 15
 #define wxSTC_LUA_WORD5 16
 #define wxSTC_LUA_WORD6 17
 #define wxSTC_LUA_WORD4 15
 #define wxSTC_LUA_WORD5 16
 #define wxSTC_LUA_WORD6 17
+#define wxSTC_LUA_WORD7 18
+#define wxSTC_LUA_WORD8 19
 
 // Lexical states for SCLEX_ERRORLIST
 #define wxSTC_ERR_DEFAULT 0
 
 // Lexical states for SCLEX_ERRORLIST
 #define wxSTC_ERR_DEFAULT 0
 #define wxSTC_POV_DEFAULT 0
 #define wxSTC_POV_COMMENT 1
 #define wxSTC_POV_COMMENTLINE 2
 #define wxSTC_POV_DEFAULT 0
 #define wxSTC_POV_COMMENT 1
 #define wxSTC_POV_COMMENTLINE 2
-#define wxSTC_POV_COMMENTDOC 3
-#define wxSTC_POV_NUMBER 4
-#define wxSTC_POV_WORD 5
+#define wxSTC_POV_NUMBER 3
+#define wxSTC_POV_OPERATOR 4
+#define wxSTC_POV_IDENTIFIER 5
 #define wxSTC_POV_STRING 6
 #define wxSTC_POV_STRING 6
-#define wxSTC_POV_OPERATOR 7
-#define wxSTC_POV_IDENTIFIER 8
-#define wxSTC_POV_BRACE 9
+#define wxSTC_POV_STRINGEOL 7
+#define wxSTC_POV_DIRECTIVE 8
+#define wxSTC_POV_BADDIRECTIVE 9
 #define wxSTC_POV_WORD2 10
 #define wxSTC_POV_WORD2 10
+#define wxSTC_POV_WORD3 11
+#define wxSTC_POV_WORD4 12
+#define wxSTC_POV_WORD5 13
+#define wxSTC_POV_WORD6 14
+#define wxSTC_POV_WORD7 15
+#define wxSTC_POV_WORD8 16
 
 // Lexical states for SCLEX_LOUT
 #define wxSTC_LOUT_DEFAULT 0
 
 // Lexical states for SCLEX_LOUT
 #define wxSTC_LOUT_DEFAULT 0
 #define wxSTC_ESCRIPT_WORD2 10
 #define wxSTC_ESCRIPT_WORD3 11
 
 #define wxSTC_ESCRIPT_WORD2 10
 #define wxSTC_ESCRIPT_WORD3 11
 
+// Lexical states for SCLEX_PS
+#define wxSTC_PS_DEFAULT 0
+#define wxSTC_PS_COMMENT 1
+#define wxSTC_PS_DSC_COMMENT 2
+#define wxSTC_PS_DSC_VALUE 3
+#define wxSTC_PS_NUMBER 4
+#define wxSTC_PS_NAME 5
+#define wxSTC_PS_KEYWORD 6
+#define wxSTC_PS_LITERAL 7
+#define wxSTC_PS_IMMEVAL 8
+#define wxSTC_PS_PAREN_ARRAY 9
+#define wxSTC_PS_PAREN_DICT 10
+#define wxSTC_PS_PAREN_PROC 11
+#define wxSTC_PS_TEXT 12
+#define wxSTC_PS_HEXSTRING 13
+#define wxSTC_PS_BASE85STRING 14
+#define wxSTC_PS_BADSTRINGCHAR 15
+
+// Lexical states for SCLEX_NSIS
+#define wxSTC_NSIS_DEFAULT 0
+#define wxSTC_NSIS_COMMENT 1
+#define wxSTC_NSIS_STRINGDQ 2
+#define wxSTC_NSIS_STRINGLQ 3
+#define wxSTC_NSIS_STRINGRQ 4
+#define wxSTC_NSIS_FUNCTION 5
+#define wxSTC_NSIS_VARIABLE 6
+#define wxSTC_NSIS_LABEL 7
+#define wxSTC_NSIS_USERDEFINED 8
+#define wxSTC_NSIS_SECTIONDEF 9
+#define wxSTC_NSIS_SUBSECTIONDEF 10
+#define wxSTC_NSIS_IFDEFINEDEF 11
+#define wxSTC_NSIS_MACRODEF 12
+#define wxSTC_NSIS_STRINGVAR 13
+
+// Lexical states for SCLEX_MMIXAL
+#define wxSTC_MMIXAL_LEADWS 0
+#define wxSTC_MMIXAL_COMMENT 1
+#define wxSTC_MMIXAL_LABEL 2
+#define wxSTC_MMIXAL_OPCODE 3
+#define wxSTC_MMIXAL_OPCODE_PRE 4
+#define wxSTC_MMIXAL_OPCODE_VALID 5
+#define wxSTC_MMIXAL_OPCODE_UNKNOWN 6
+#define wxSTC_MMIXAL_OPCODE_POST 7
+#define wxSTC_MMIXAL_OPERANDS 8
+#define wxSTC_MMIXAL_NUMBER 9
+#define wxSTC_MMIXAL_REF 10
+#define wxSTC_MMIXAL_CHAR 11
+#define wxSTC_MMIXAL_STRING 12
+#define wxSTC_MMIXAL_REGISTER 13
+#define wxSTC_MMIXAL_HEX 14
+#define wxSTC_MMIXAL_OPERATOR 15
+#define wxSTC_MMIXAL_SYMBOL 16
+#define wxSTC_MMIXAL_INCLUDE 17
+
 
 //-----------------------------------------
 // Commands that can be bound to keystrokes
 
 
 //-----------------------------------------
 // Commands that can be bound to keystrokes
 
+
 // Redoes the next action on the undo history.
 #define wxSTC_CMD_REDO 2011
 
 // Redoes the next action on the undo history.
 #define wxSTC_CMD_REDO 2011
 
@@ -2014,10 +2084,10 @@ public:
     bool GetMouseDownCaptures();
 
     // Sets the cursor to one of the SC_CURSOR* values.
     bool GetMouseDownCaptures();
 
     // Sets the cursor to one of the SC_CURSOR* values.
-    void SetCursor(int cursorType);
+    void SetSTCCursor(int cursorType);
 
     // Get cursor type.
 
     // Get cursor type.
-    int GetCursor();
+    int GetSTCCursor();
 
     // Change the way control characters are displayed:
     // If symbol is < 32, keep the drawn way, else, use the given character.
 
     // Change the way control characters are displayed:
     // If symbol is < 32, keep the drawn way, else, use the given character.
index 5a797fcdd741ebb23f03670bfc19483be1595664..a588610dadc2a446ac8b9ba5d2ce4df6135db040 100644 (file)
@@ -40,7 +40,9 @@ STCTEST_CXXFLAGS = $(CPPFLAGS) -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \
        -I$(srcdir)/../../../samples -I$(srcdir)/../../include $(CXXFLAGS)
 STCTEST_OBJECTS =  \
        $(__stctest___win32rc) \
        -I$(srcdir)/../../../samples -I$(srcdir)/../../include $(CXXFLAGS)
 STCTEST_OBJECTS =  \
        $(__stctest___win32rc) \
-       stctest_stctest.o
+       stctest_stctest.o \
+       stctest_edit.o \
+       stctest_prefs.o
 WX_VERSION = 2.5.1
 
 ### Conditionally set variables: ###
 WX_VERSION = 2.5.1
 
 ### Conditionally set variables: ###
@@ -102,7 +104,7 @@ COND_PLATFORM_OS2_1___stctest___os2_emxbindcmd = $(NM) stctest$(EXEEXT) | if \
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all: stctest$(EXEEXT) $(__stctest_bundle___depname) data
+all: stctest$(EXEEXT) $(__stctest_bundle___depname)
 
 clean: 
        rm -rf ./.deps ./.pch
 
 clean: 
        rm -rf ./.deps ./.pch
@@ -110,14 +112,6 @@ clean:
        rm -f stctest$(EXEEXT)
        rm -rf stctest.app
 
        rm -f stctest$(EXEEXT)
        rm -rf stctest.app
 
-data: 
-       @mkdir -p .
-       @for f in stctest.cpp; do \
-       if test \( ! -s ./$$f \) -o \( $(srcdir)/$$f -nt ./$$f  \) ; then \
-       cp -pRf $(srcdir)/$$f . ; \
-       fi; \
-       done
-
 distclean: clean
        rm -f configure config.cache config.log config.status bk-deps bk-make-pch shared-ld-sh Makefile
 
 distclean: clean
        rm -f configure config.cache config.log config.status bk-deps bk-make-pch shared-ld-sh Makefile
 
@@ -155,6 +149,12 @@ stctest.app/Contents/PkgInfo: stctest$(EXEEXT) $(top_srcdir)/src/mac/Info.plist.
 
 @COND_PLATFORM_MACOSX_1@stctest_bundle: stctest.app/Contents/PkgInfo
 
 
 @COND_PLATFORM_MACOSX_1@stctest_bundle: stctest.app/Contents/PkgInfo
 
+stctest_edit.o: $(srcdir)/edit.cpp
+       $(CXXC) -c -o $@ $(STCTEST_CXXFLAGS) $<
+
+stctest_prefs.o: $(srcdir)/prefs.cpp
+       $(CXXC) -c -o $@ $(STCTEST_CXXFLAGS) $<
+
 stctest_sample_rc.o: $(srcdir)/../../../samples/sample.rc
        $(RESCOMP) -i$< -o$@  --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_2)   --include-dir $(top_srcdir)/include --include-dir $(srcdir) $(__DLLFLAG_p_2) --include-dir $(srcdir)/../../../samples
 
 stctest_sample_rc.o: $(srcdir)/../../../samples/sample.rc
        $(RESCOMP) -i$< -o$@  --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_2)   --include-dir $(top_srcdir)/include --include-dir $(srcdir) $(__DLLFLAG_p_2) --include-dir $(srcdir)/../../../samples
 
@@ -167,4 +167,4 @@ uninstall:
 # Include dependency info, if present:
 @IF_GNU_MAKE@-include .deps/*.d
 
 # Include dependency info, if present:
 @IF_GNU_MAKE@-include .deps/*.d
 
-.PHONY: all clean data distclean install stctest_bundle uninstall
+.PHONY: all clean distclean install stctest_bundle uninstall
diff --git a/samples/stc/defsext.h b/samples/stc/defsext.h
new file mode 100644 (file)
index 0000000..eb55caf
--- /dev/null
@@ -0,0 +1,104 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        defsext.h extensions
+// Purpose:     STC test declarations
+// Maintainer:  Wyo
+// Created:     2003-09-01
+// RCS-ID:      $Id$
+// Copyright:   (c) wxGuide
+// Licence:     wxWindows licence
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_DEFSEXT_H_
+#define _WX_DEFSEXT_H_
+
+//----------------------------------------------------------------------------
+// headers
+//----------------------------------------------------------------------------
+
+//! wxWindows headers
+#include <wx/print.h>    // printing support
+#include <wx/printdlg.h> // printing dialog
+
+
+//============================================================================
+// declarations
+//============================================================================
+
+#define DEFAULT_LANGUAGE _("<default>")
+
+#define PAGE_COMMON _("Common")
+#define PAGE_LANGUAGES _("Languages")
+#define PAGE_STYLE_TYPES _("Style types")
+
+#define STYLE_TYPES_COUNT 32
+
+
+// ----------------------------------------------------------------------------
+// standard IDs
+// ----------------------------------------------------------------------------
+
+enum {
+    // menu IDs
+    myID_PROPERTIES = wxID_HIGHEST,
+    myID_INDENTINC,
+    myID_INDENTRED,
+    myID_FINDNEXT,
+    myID_REPLACE,
+    myID_REPLACENEXT,
+    myID_BRACEMATCH,
+    myID_GOTO,
+    myID_PAGEACTIVE,
+    myID_DISPLAYEOL,
+    myID_INDENTGUIDE,
+    myID_LINENUMBER,
+    myID_LONGLINEON,
+    myID_WHITESPACE,
+    myID_FOLDTOGGLE,
+    myID_OVERTYPE,
+    myID_READONLY,
+    myID_WRAPMODEON,
+    myID_CHANGECASE,
+    myID_CHANGELOWER,
+    myID_CHANGEUPPER,
+    myID_HILIGHTLANG,
+    myID_HILIGHTFIRST,
+    myID_HILIGHTLAST = myID_HILIGHTFIRST + 99,
+    myID_CONVERTEOL,
+    myID_CONVERTCR,
+    myID_CONVERTCRLF,
+    myID_CONVERTLF,
+    myID_USECHARSET,
+    myID_CHARSETANSI,
+    myID_CHARSETMAC,
+    myID_PAGEPREV,
+    myID_PAGENEXT,
+    myID_SELECTLINE,
+
+    // other IDs
+    myID_STATUSBAR,
+    myID_TITLEBAR,
+    myID_ABOUTTIMER,
+    myID_UPDATETIMER,
+
+    // dialog find IDs
+    myID_DLG_FIND_TEXT,
+
+    // preferences IDs
+    myID_PREFS_LANGUAGE,
+    myID_PREFS_STYLETYPE,
+    myID_PREFS_KEYWORDS,
+};
+
+// ----------------------------------------------------------------------------
+// global items
+// ----------------------------------------------------------------------------
+
+//! global application name
+extern wxString *g_appname;
+
+//! global print data, to remember settings during the session
+extern wxPrintData *g_printData;
+extern wxPageSetupData *g_pageSetupData;
+
+#endif // _WX_DEFSEXT_H_
+
diff --git a/samples/stc/edit.cpp b/samples/stc/edit.cpp
new file mode 100644 (file)
index 0000000..82ee732
--- /dev/null
@@ -0,0 +1,825 @@
+//////////////////////////////////////////////////////////////////////////////
+// File:        edit.cpp
+// Purpose:     STC test module
+// Maintainer:  Wyo
+// Created:     2003-09-01
+// RCS-ID:      $Id$
+// Copyright:   (c) wxGuide
+// Licence:     wxWindows licence
+//////////////////////////////////////////////////////////////////////////////
+
+//----------------------------------------------------------------------------
+// informations
+//----------------------------------------------------------------------------
+
+
+//----------------------------------------------------------------------------
+// headers
+//----------------------------------------------------------------------------
+
+// For compilers that support precompilation, includes <wx/wx.h>.
+#include <wx/wxprec.h>
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+// for all others, include the necessary headers (this file is usually all you
+// need because it includes almost all 'standard' wxWindows headers)
+#ifndef WX_PRECOMP
+    #include <wx/wx.h>
+#endif
+
+//! wxWindows headers
+#include <wx/file.h>     // raw file io support
+#include <wx/filename.h> // filename support
+
+//! application headers
+#include "defsext.h"     // additional definitions
+
+#include "edit.h"        // edit module
+
+
+//----------------------------------------------------------------------------
+// resources
+//----------------------------------------------------------------------------
+
+
+//============================================================================
+// declarations
+//============================================================================
+
+
+//============================================================================
+// implementation
+//============================================================================
+
+//----------------------------------------------------------------------------
+// Edit
+//----------------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE (Edit, wxStyledTextCtrl)
+    // common
+    EVT_SIZE (                         Edit::OnSize)
+    // edit
+    EVT_MENU (wxID_CLEAR,              Edit::OnEditClear)
+    EVT_MENU (wxID_CUT,                Edit::OnEditCut)
+    EVT_MENU (wxID_COPY,               Edit::OnEditCopy)
+    EVT_MENU (wxID_PASTE,              Edit::OnEditPaste)
+    EVT_MENU (myID_INDENTINC,          Edit::OnEditIndentInc)
+    EVT_MENU (myID_INDENTRED,          Edit::OnEditIndentRed)
+    EVT_MENU (wxID_SELECTALL,          Edit::OnEditSelectAll)
+    EVT_MENU (myID_SELECTLINE,         Edit::OnEditSelectLine)
+    EVT_MENU (wxID_REDO,               Edit::OnEditRedo)
+    EVT_MENU (wxID_UNDO,               Edit::OnEditUndo)
+    // find
+    EVT_MENU (wxID_FIND,               Edit::OnFind)
+    EVT_MENU (myID_FINDNEXT,           Edit::OnFindNext)
+    EVT_MENU (myID_REPLACE,            Edit::OnReplace)
+    EVT_MENU (myID_REPLACENEXT,        Edit::OnReplaceNext)
+    EVT_MENU (myID_BRACEMATCH,         Edit::OnBraceMatch)
+    EVT_MENU (myID_GOTO,               Edit::OnGoto)
+    // view
+    EVT_MENU_RANGE (myID_HILIGHTFIRST, myID_HILIGHTLAST,
+                                       Edit::OnHilightLang)
+    EVT_MENU (myID_DISPLAYEOL,         Edit::OnDisplayEOL)
+    EVT_MENU (myID_INDENTGUIDE,        Edit::OnIndentGuide)
+    EVT_MENU (myID_LINENUMBER,         Edit::OnLineNumber)
+    EVT_MENU (myID_LONGLINEON,         Edit::OnLongLineOn)
+    EVT_MENU (myID_WHITESPACE,         Edit::OnWhiteSpace)
+    EVT_MENU (myID_FOLDTOGGLE,         Edit::OnFoldToggle)
+    EVT_MENU (myID_OVERTYPE,           Edit::OnSetOverType)
+    EVT_MENU (myID_READONLY,           Edit::OnSetReadOnly)
+    EVT_MENU (myID_WRAPMODEON,         Edit::OnWrapmodeOn)
+    EVT_MENU (myID_CHARSETANSI,        Edit::OnUseCharset)
+    EVT_MENU (myID_CHARSETMAC,         Edit::OnUseCharset)
+    // extra
+    EVT_MENU (myID_CHANGELOWER,        Edit::OnChangeCase)
+    EVT_MENU (myID_CHANGEUPPER,        Edit::OnChangeCase)
+    EVT_MENU (myID_CONVERTCR,          Edit::OnConvertEOL)
+    EVT_MENU (myID_CONVERTCRLF,        Edit::OnConvertEOL)
+    EVT_MENU (myID_CONVERTLF,          Edit::OnConvertEOL)
+    // stc
+    EVT_STC_MARGINCLICK (-1,           Edit::OnMarginClick)
+    EVT_STC_CHARADDED (-1,             Edit::OnCharAdded)
+END_EVENT_TABLE()
+
+Edit::Edit (wxWindow *parent, wxWindowID id,
+            const wxPoint &pos,
+            const wxSize &size,
+            long style)
+    : wxStyledTextCtrl (parent, id, pos, size, style) {
+
+    m_filename = _T("");
+
+    m_LineNrID = 0;
+    m_DividerID = 1;
+    m_FoldingID = 2;
+
+    // initialize language
+    m_language = NULL;
+
+    // default font for all styles
+    SetViewEOL (g_CommonPrefs.displayEOLEnable);
+    SetIndentationGuides (g_CommonPrefs.indentGuideEnable);
+    SetEdgeMode (g_CommonPrefs.longLineOnEnable?
+                 wxSTC_EDGE_LINE: wxSTC_EDGE_NONE);
+    SetViewWhiteSpace (g_CommonPrefs.whiteSpaceEnable?
+                       wxSTC_WS_VISIBLEALWAYS: wxSTC_WS_INVISIBLE);
+    SetOvertype (g_CommonPrefs.overTypeInitial);
+    SetReadOnly (g_CommonPrefs.readOnlyInitial);
+    SetWrapMode (g_CommonPrefs.wrapModeInitial?
+                 wxSTC_WRAP_WORD: wxSTC_WRAP_NONE);
+    wxFont font (10, wxMODERN, wxNORMAL, wxNORMAL);
+    StyleSetFont (wxSTC_STYLE_DEFAULT, font);
+    StyleSetForeground (wxSTC_STYLE_DEFAULT, wxColour ("BLACK"));
+    StyleSetBackground (wxSTC_STYLE_DEFAULT, wxColour ("WHITE"));
+    StyleSetForeground (wxSTC_STYLE_LINENUMBER, wxColour ("DARK GREY"));
+    StyleSetBackground (wxSTC_STYLE_LINENUMBER, wxColour ("WHITE"));
+    StyleSetForeground(wxSTC_STYLE_INDENTGUIDE, wxColour ("DARK GREY"));
+    InitializePrefs (DEFAULT_LANGUAGE);
+
+    // set visibility
+    SetVisiblePolicy (wxSTC_VISIBLE_STRICT|wxSTC_VISIBLE_SLOP, 1);
+    SetXCaretPolicy (wxSTC_CARET_EVEN|wxSTC_VISIBLE_STRICT|wxSTC_CARET_SLOP, 1);
+    SetYCaretPolicy (wxSTC_CARET_EVEN|wxSTC_VISIBLE_STRICT|wxSTC_CARET_SLOP, 1);
+
+    // markers
+    MarkerDefine (wxSTC_MARKNUM_FOLDER,        wxSTC_MARK_DOTDOTDOT, "BLACK", "BLACK");
+    MarkerDefine (wxSTC_MARKNUM_FOLDEROPEN,    wxSTC_MARK_ARROWDOWN, "BLACK", "BLACK");
+    MarkerDefine (wxSTC_MARKNUM_FOLDERSUB,     wxSTC_MARK_EMPTY,     "BLACK", "BLACK");
+    MarkerDefine (wxSTC_MARKNUM_FOLDEREND,     wxSTC_MARK_DOTDOTDOT, "BLACK", "WHITE");
+    MarkerDefine (wxSTC_MARKNUM_FOLDEROPENMID, wxSTC_MARK_ARROWDOWN, "BLACK", "WHITE");
+    MarkerDefine (wxSTC_MARKNUM_FOLDERMIDTAIL, wxSTC_MARK_EMPTY,     "BLACK", "BLACK");
+    MarkerDefine (wxSTC_MARKNUM_FOLDERTAIL,    wxSTC_MARK_EMPTY,     "BLACK", "BLACK");
+
+    // miscelaneous
+    m_LineNrMargin = TextWidth (wxSTC_STYLE_LINENUMBER, _T("_999999"));
+    m_FoldingMargin = 16;
+    SetMarginWidth (m_LineNrID,
+                    g_CommonPrefs.lineNumberEnable? m_LineNrMargin: 0);
+    CmdKeyClear (wxSTC_KEY_TAB, 0); // this is done by the menu accelerator key
+    UsePopUp (0);
+    SetLayoutCache (wxSTC_CACHE_PAGE);
+
+}
+
+Edit::~Edit () {}
+
+//----------------------------------------------------------------------------
+// common event handlers
+void Edit::OnSize( wxSizeEvent& event ) {
+    int x = GetClientSize().x +
+            (g_CommonPrefs.lineNumberEnable? m_LineNrMargin: 0) +
+            (g_CommonPrefs.foldEnable? m_FoldingMargin: 0);
+    if (x > 0) SetScrollWidth (x);
+    event.Skip();
+}
+
+// edit event handlers
+void Edit::OnEditRedo (wxCommandEvent &WXUNUSED(event)) {
+    if (!CanRedo()) return;
+    Redo ();
+}
+
+void Edit::OnEditUndo (wxCommandEvent &WXUNUSED(event)) {
+    if (!CanUndo()) return;
+    Undo ();
+}
+
+void Edit::OnEditClear (wxCommandEvent &WXUNUSED(event)) {
+    if (GetReadOnly()) return;
+    Clear ();
+}
+
+void Edit::OnEditCut (wxCommandEvent &WXUNUSED(event)) {
+    if (GetReadOnly() || (GetSelectionEnd()-GetSelectionStart() <= 0)) return;
+    Cut ();
+}
+
+void Edit::OnEditCopy (wxCommandEvent &WXUNUSED(event)) {
+    if (GetSelectionEnd()-GetSelectionStart() <= 0) return;
+    Copy ();
+}
+
+void Edit::OnEditPaste (wxCommandEvent &WXUNUSED(event)) {
+    if (!CanPaste()) return;
+    Paste ();
+}
+
+void Edit::OnFind (wxCommandEvent &WXUNUSED(event)) {
+}
+
+void Edit::OnFindNext (wxCommandEvent &WXUNUSED(event)) {
+}
+
+void Edit::OnReplace (wxCommandEvent &WXUNUSED(event)) {
+}
+
+void Edit::OnReplaceNext (wxCommandEvent &WXUNUSED(event)) {
+}
+
+void Edit::OnBraceMatch (wxCommandEvent &WXUNUSED(event)) {
+    int min = GetCurrentPos ();
+    int max = BraceMatch (min);
+    if (max > (min+1)) {
+        BraceHighlight (min+1, max);
+        SetSelection (min+1, max);
+    }else{
+        BraceBadLight (min);
+    }
+}
+
+void Edit::OnGoto (wxCommandEvent &WXUNUSED(event)) {
+}
+
+void Edit::OnEditIndentInc (wxCommandEvent &event) {
+    CmdKeyExecute (wxSTC_CMD_TAB);
+}
+
+void Edit::OnEditIndentRed (wxCommandEvent &event) {
+    CmdKeyExecute (wxSTC_CMD_DELETEBACK);
+}
+
+void Edit::OnEditSelectAll (wxCommandEvent &WXUNUSED(event)) {
+    SetSelection (0, GetTextLength ());
+}
+
+void Edit::OnEditSelectLine (wxCommandEvent &WXUNUSED(event)) {
+    int lineStart = PositionFromLine (GetCurrentLine());
+    int lineEnd = PositionFromLine (GetCurrentLine() + 1);
+    SetSelection (lineStart, lineEnd);
+}
+
+void Edit::OnHilightLang (wxCommandEvent &event) {
+    InitializePrefs (g_LanguagePrefs [event.GetId() - myID_HILIGHTFIRST].name);
+}
+
+void Edit::OnDisplayEOL (wxCommandEvent &WXUNUSED(event)) {
+    SetViewEOL (!GetViewEOL());
+}
+
+void Edit::OnIndentGuide (wxCommandEvent &WXUNUSED(event)) {
+    SetIndentationGuides (!GetIndentationGuides());
+}
+
+void Edit::OnLineNumber (wxCommandEvent &WXUNUSED(event)) {
+    SetMarginWidth (m_LineNrID,
+                    GetMarginWidth (m_LineNrID) == 0? m_LineNrMargin: 0);
+}
+
+void Edit::OnLongLineOn (wxCommandEvent &WXUNUSED(event)) {
+    SetEdgeMode (GetEdgeMode() == 0? wxSTC_EDGE_LINE: wxSTC_EDGE_NONE);
+}
+
+void Edit::OnWhiteSpace (wxCommandEvent &WXUNUSED(event)) {
+    SetViewWhiteSpace (GetViewWhiteSpace() == 0?
+                       wxSTC_WS_VISIBLEALWAYS: wxSTC_WS_INVISIBLE);
+}
+
+void Edit::OnFoldToggle (wxCommandEvent &WXUNUSED(event)) {
+    ToggleFold (GetFoldParent(GetCurrentLine()));
+}
+
+void Edit::OnSetOverType (wxCommandEvent &WXUNUSED(event)) {
+    SetOvertype (!GetOvertype());
+}
+
+void Edit::OnSetReadOnly (wxCommandEvent &WXUNUSED(event)) {
+    SetReadOnly (!GetReadOnly());
+}
+
+void Edit::OnWrapmodeOn (wxCommandEvent &WXUNUSED(event)) {
+    SetWrapMode (GetWrapMode() == 0? wxSTC_WRAP_WORD: wxSTC_WRAP_NONE);
+}
+
+void Edit::OnUseCharset (wxCommandEvent &event) {
+    int Nr;
+    int charset = GetCodePage();
+    switch (event.GetId()) {
+        case myID_CHARSETANSI: {charset = wxSTC_CHARSET_ANSI; break;}
+        case myID_CHARSETMAC: {charset = wxSTC_CHARSET_ANSI; break;}
+    }
+    for (Nr = 0; Nr < wxSTC_STYLE_LASTPREDEFINED; Nr++) {
+        StyleSetCharacterSet (Nr, charset);
+    }
+    SetCodePage (charset);
+}
+
+void Edit::OnChangeCase (wxCommandEvent &event) {
+    switch (event.GetId()) {
+        case myID_CHANGELOWER: {
+            CmdKeyExecute (wxSTC_CMD_LOWERCASE);
+            break;
+        }
+        case myID_CHANGEUPPER: {
+            CmdKeyExecute (wxSTC_CMD_UPPERCASE);
+            break;
+        }
+    }
+}
+
+void Edit::OnConvertEOL (wxCommandEvent &event) {
+    int eolMode = GetEOLMode();
+    switch (event.GetId()) {
+        case myID_CONVERTCR: { eolMode = wxSTC_EOL_CR; break;}
+        case myID_CONVERTCRLF: { eolMode = wxSTC_EOL_CRLF; break;}
+        case myID_CONVERTLF: { eolMode = wxSTC_EOL_LF; break;}
+    }
+    ConvertEOLs (eolMode);
+    SetEOLMode (eolMode);
+}
+
+//! misc
+void Edit::OnMarginClick (wxStyledTextEvent &event) {
+    if (event.GetMargin() == 2) {
+        int lineClick = LineFromPosition (event.GetPosition());
+        int levelClick = GetFoldLevel (lineClick);
+        if ((levelClick & wxSTC_FOLDLEVELHEADERFLAG) > 0) {
+            ToggleFold (lineClick);
+        }
+    }
+}
+
+void Edit::OnCharAdded (wxStyledTextEvent &event) {
+    char chr = event.GetKey();
+    int currentLine = GetCurrentLine();
+    // Change this if support for mac files with \r is needed
+    if (chr == '\n') {
+        int lineInd = 0;
+        if (currentLine > 0) {
+            lineInd = GetLineIndentation(currentLine - 1);
+        }
+        if (lineInd == 0) return;
+        SetLineIndentation (currentLine, lineInd);
+        GotoPos(PositionFromLine (currentLine) + lineInd);
+    }
+}
+
+
+//----------------------------------------------------------------------------
+// private functions
+wxString Edit::DeterminePrefs (const wxString &filename) {
+
+    LanguageInfo const* curInfo = NULL;
+
+    // determine language from filepatterns
+    int languageNr;
+    for (languageNr = 0; languageNr < g_LanguagePrefsSize; languageNr++) {
+        curInfo = &g_LanguagePrefs [languageNr];
+        wxString filepattern = curInfo->filepattern;
+        filepattern.Lower();
+        while (!filepattern.IsEmpty()) {
+            wxString cur = filepattern.BeforeFirst (';');
+            if ((cur == filename) ||
+                (cur == (filename.BeforeLast ('.') + _T(".*"))) ||
+                (cur == (_T("*.") + filename.AfterLast ('.')))) {
+                return curInfo->name;
+            }
+            filepattern = filepattern.AfterFirst (';');
+        }
+    }
+    return wxEmptyString;
+
+}
+
+bool Edit::InitializePrefs (const wxString &name) {
+
+    // initialize styles
+    StyleClearAll();
+    LanguageInfo const* curInfo = NULL;
+
+    // determine language
+    bool found = false;
+    int languageNr;
+    for (languageNr = 0; languageNr < g_LanguagePrefsSize; languageNr++) {
+        curInfo = &g_LanguagePrefs [languageNr];
+        if (curInfo->name == name) {
+            found = true;
+            break;
+        }
+    }
+    if (!found) return false;
+
+    // set lexer and language
+    SetLexer (curInfo->lexer);
+    m_language = curInfo;
+
+    // set margin for line numbers
+    SetMarginType (m_LineNrID, wxSTC_MARGIN_NUMBER);
+    StyleSetForeground (wxSTC_STYLE_LINENUMBER, wxColour ("DARK GREY"));
+    StyleSetBackground (wxSTC_STYLE_LINENUMBER, wxColour ("WHITE"));
+    SetMarginWidth (m_LineNrID,
+                    g_CommonPrefs.lineNumberEnable? m_LineNrMargin: 0);
+
+    // default fonts for all styles!
+    int Nr;
+    for (Nr = 0; Nr < wxSTC_STYLE_LASTPREDEFINED; Nr++) {
+        wxFont font (10, wxMODERN, wxNORMAL, wxNORMAL);
+        StyleSetFont (Nr, font);
+    }
+
+    // set common styles
+    StyleSetForeground (wxSTC_STYLE_DEFAULT, wxColour ("DARK GREY"));
+    StyleSetForeground (wxSTC_STYLE_INDENTGUIDE, wxColour ("DARK GREY"));
+
+    // initialize settings
+    if (g_CommonPrefs.syntaxEnable) {
+        int keywordnr = 0;
+        for (Nr = 0; Nr < STYLE_TYPES_COUNT; Nr++) {
+            if (curInfo->styles[Nr].type == -1) continue;
+            const StyleInfo &curType = g_StylePrefs [curInfo->styles[Nr].type];
+            wxFont font (curType.fontsize, wxMODERN, wxNORMAL, wxNORMAL, false,
+                         curType.fontname);
+            StyleSetFont (Nr, font);
+            if (curType.foreground) {
+                StyleSetForeground (Nr, wxColour (curType.foreground));
+            }
+            if (curType.background) {
+                StyleSetBackground (Nr, wxColour (curType.background));
+            }
+            StyleSetBold (Nr, (curType.fontstyle & mySTC_STYLE_BOLD) > 0);
+            StyleSetItalic (Nr, (curType.fontstyle & mySTC_STYLE_ITALIC) > 0);
+            StyleSetUnderline (Nr, (curType.fontstyle & mySTC_STYLE_UNDERL) > 0);
+            StyleSetVisible (Nr, (curType.fontstyle & mySTC_STYLE_HIDDEN) == 0);
+            StyleSetCase (Nr, curType.lettercase);
+            const wxChar *pwords = curInfo->styles[Nr].words;
+            if (pwords) {
+                SetKeyWords (keywordnr, pwords);
+                keywordnr += 1;
+            }
+        }
+    }
+
+    // set margin as unused
+    SetMarginType (m_DividerID, wxSTC_MARGIN_SYMBOL);
+    SetMarginWidth (m_DividerID, 0);
+    SetMarginSensitive (m_DividerID, false);
+
+    // folding
+    SetMarginType (m_FoldingID, wxSTC_MARGIN_SYMBOL);
+    SetMarginMask (m_FoldingID, wxSTC_MASK_FOLDERS);
+    StyleSetBackground (m_FoldingID, wxColour ("WHITE"));
+    SetMarginWidth (m_FoldingID, 0);
+    SetMarginSensitive (m_FoldingID, false);
+    if (g_CommonPrefs.foldEnable) {
+        SetMarginWidth (m_FoldingID, curInfo->folds != 0? m_FoldingMargin: 0);
+        SetMarginSensitive (m_FoldingID, curInfo->folds != 0);
+        SetProperty (_T("fold"), curInfo->folds != 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.comment"),
+                     (curInfo->folds & mySTC_FOLD_COMMENT) > 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.compact"),
+                     (curInfo->folds & mySTC_FOLD_COMPACT) > 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.preprocessor"),
+                     (curInfo->folds & mySTC_FOLD_PREPROC) > 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.html"),
+                     (curInfo->folds & mySTC_FOLD_HTML) > 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.html.preprocessor"),
+                     (curInfo->folds & mySTC_FOLD_HTMLPREP) > 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.comment.python"),
+                     (curInfo->folds & mySTC_FOLD_COMMENTPY) > 0? _T("1"): _T("0"));
+        SetProperty (_T("fold.quotes.python"),
+                     (curInfo->folds & mySTC_FOLD_QUOTESPY) > 0? _T("1"): _T("0"));
+    }
+    SetFoldFlags (wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED |
+                  wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED);
+
+    // set spaces and indention
+    SetTabWidth (4);
+    SetUseTabs (false);
+    SetTabIndents (true);
+    SetBackSpaceUnIndents (true);
+    SetIndent (g_CommonPrefs.indentEnable? 4: 0);
+
+    // others
+    SetViewEOL (g_CommonPrefs.displayEOLEnable);
+    SetIndentationGuides (g_CommonPrefs.indentGuideEnable);
+    SetEdgeColumn (80);
+    SetEdgeMode (g_CommonPrefs.longLineOnEnable? wxSTC_EDGE_LINE: wxSTC_EDGE_NONE);
+    SetViewWhiteSpace (g_CommonPrefs.whiteSpaceEnable?
+                       wxSTC_WS_VISIBLEALWAYS: wxSTC_WS_INVISIBLE);
+    SetOvertype (g_CommonPrefs.overTypeInitial);
+    SetReadOnly (g_CommonPrefs.readOnlyInitial);
+    SetWrapMode (g_CommonPrefs.wrapModeInitial?
+                 wxSTC_WRAP_WORD: wxSTC_WRAP_NONE);
+
+    return true;
+}
+
+bool Edit::LoadFile () {
+
+    // get filname
+    if (!m_filename) {
+        wxFileDialog dlg (this, _T("Open file"), _T(""), _T(""),
+                          _T("Any file (*)|*"), wxOPEN | wxFILE_MUST_EXIST | wxCHANGE_DIR);
+        if (dlg.ShowModal() != wxID_OK) return false;
+        m_filename = dlg.GetPath();
+    }
+
+    // load file
+    return LoadFile (m_filename);
+}
+
+bool Edit::LoadFile (const wxString &filename) {
+
+    // load file in edit and clear undo
+    if (!filename.IsEmpty()) m_filename = filename;
+//     wxFile file (m_filename);
+//     if (!file.IsOpened()) return false;
+    ClearAll ();
+//     long lng = file.Length ();
+//     if (lng > 0) {
+//         wxString buf;
+//         wxChar *buff = buf.GetWriteBuf (lng);
+//         file.Read (buff, lng);
+//         buf.UngetWriteBuf ();
+//         InsertText (0, buf);
+//     }
+//     file.Close();
+    
+    wxStyledTextCtrl::LoadFile(m_filename);
+    
+    EmptyUndoBuffer();
+
+    // determine lexer language
+    wxFileName fname (m_filename);
+    InitializePrefs (DeterminePrefs (fname.GetFullName()));
+
+    return true;
+}
+
+bool Edit::SaveFile () {
+
+    // return if no change
+    if (!Modified()) return true;
+
+    // get filname
+    if (!m_filename) {
+        wxFileDialog dlg (this, _T("Save file"), _T(""), _T(""), _T("Any file (*)|*"),
+                          wxSAVE | wxOVERWRITE_PROMPT);
+        if (dlg.ShowModal() != wxID_OK) return false;
+        m_filename = dlg.GetPath();
+    }
+
+    // save file
+    return SaveFile (m_filename);
+}
+
+bool Edit::SaveFile (const wxString &filename) {
+
+    // return if no change
+    if (!Modified()) return true;
+
+//     // save edit in file and clear undo
+//     if (!filename.IsEmpty()) m_filename = filename;
+//     wxFile file (m_filename, wxFile::write);
+//     if (!file.IsOpened()) return false;
+//     wxString buf = GetText();
+//     bool okay = file.Write (buf);
+//     file.Close();
+//     if (!okay) return false;
+//     EmptyUndoBuffer();
+//     SetSavePoint();
+
+//     return true;
+
+    return wxStyledTextCtrl::SaveFile(filename);
+    
+}
+
+bool Edit::Modified () {
+
+    // return modified state
+    return (GetModify() && !GetReadOnly());
+}
+
+//----------------------------------------------------------------------------
+// EditProperties
+//----------------------------------------------------------------------------
+
+EditProperties::EditProperties (Edit *edit,
+                                long style)
+        : wxDialog (edit, -1, wxEmptyString,
+                    wxDefaultPosition, wxDefaultSize,
+                    wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) {
+
+    // sets the application title
+    SetTitle (_("Properties"));
+    wxString text;
+
+    // fullname
+    wxBoxSizer *fullname = new wxBoxSizer (wxHORIZONTAL);
+    fullname->Add (10, 0);
+    fullname->Add (new wxStaticText (this, -1, _("Full filename"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);
+    fullname->Add (new wxStaticText (this, -1, edit->GetFilename()),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);
+
+    // text info
+    wxGridSizer *textinfo = new wxGridSizer (4, 0, 2);
+    textinfo->Add (new wxStaticText (this, -1, _("Language"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    textinfo->Add (new wxStaticText (this, -1, edit->m_language->name),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+    textinfo->Add (new wxStaticText (this, -1, _("Lexer-ID: "),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    text = wxString::Format (_T("%d"), edit->GetLexer());
+    textinfo->Add (new wxStaticText (this, -1, text),
+                   0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+    wxString EOLtype = _T("");
+    switch (edit->GetEOLMode()) {
+        case wxSTC_EOL_CR: {EOLtype = _T("CR (Unix)"); break; }
+        case wxSTC_EOL_CRLF: {EOLtype = _T("CRLF (Windows)"); break; }
+        case wxSTC_EOL_LF: {EOLtype = _T("CR (Macintosh)"); break; }
+    }
+    textinfo->Add (new wxStaticText (this, -1, _("Line endings"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    textinfo->Add (new wxStaticText (this, -1, EOLtype),
+                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+
+    // text info box
+    wxStaticBoxSizer *textinfos = new wxStaticBoxSizer (
+                     new wxStaticBox (this, -1, _("Informations")),
+                     wxVERTICAL);
+    textinfos->Add (textinfo, 0, wxEXPAND);
+    textinfos->Add (0, 6);
+
+    // statistic
+    wxGridSizer *statistic = new wxGridSizer (4, 0, 2);
+    statistic->Add (new wxStaticText (this, -1, _("Total lines"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    text = wxString::Format (_T("%d"), edit->GetLineCount());
+    statistic->Add (new wxStaticText (this, -1, text),
+                    0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+    statistic->Add (new wxStaticText (this, -1, _("Total chars"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    text = wxString::Format (_T("%d"), edit->GetTextLength());
+    statistic->Add (new wxStaticText (this, -1, text),
+                    0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+    statistic->Add (new wxStaticText (this, -1, _("Current line"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    text = wxString::Format (_T("%d"), edit->GetCurrentLine());
+    statistic->Add (new wxStaticText (this, -1, text),
+                    0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+    statistic->Add (new wxStaticText (this, -1, _("Current pos"),
+                                     wxDefaultPosition, wxSize(80, -1)),
+                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
+    text = wxString::Format (_T("%d"), edit->GetCurrentPos());
+    statistic->Add (new wxStaticText (this, -1, text),
+                    0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
+
+    // char/line statistics
+    wxStaticBoxSizer *statistics = new wxStaticBoxSizer (
+                     new wxStaticBox (this, -1, _("Statistics")),
+                     wxVERTICAL);
+    statistics->Add (statistic, 0, wxEXPAND);
+    statistics->Add (0, 6);
+
+    // total pane
+    wxBoxSizer *totalpane = new wxBoxSizer (wxVERTICAL);
+    totalpane->Add (fullname, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 10);
+    totalpane->Add (0, 6);
+    totalpane->Add (textinfos, 0, wxEXPAND | wxLEFT | wxRIGHT, 10);
+    totalpane->Add (0, 10);
+    totalpane->Add (statistics, 0, wxEXPAND | wxLEFT | wxRIGHT, 10);
+    totalpane->Add (0, 6);
+    wxButton *okButton = new wxButton (this, wxID_OK, _("OK"));
+    okButton->SetDefault();
+    totalpane->Add (okButton, 0, wxALIGN_CENTER | wxALL, 10);
+
+    SetSizerAndFit (totalpane);
+
+    ShowModal();
+}
+
+//----------------------------------------------------------------------------
+// EditPrint
+//----------------------------------------------------------------------------
+
+EditPrint::EditPrint (Edit *edit, wxChar *title)
+              : wxPrintout(title) {
+    m_edit = edit;
+    m_printed = 0;
+
+}
+
+bool EditPrint::OnPrintPage (int page) {
+
+    wxDC *dc = GetDC();
+    if (!dc) return false;
+
+    // scale DC
+    PrintScaling (dc);
+
+    // print page
+    if (page == 1) m_printed = 0;
+    m_printed = m_edit->FormatRange (1, m_printed, m_edit->GetLength(),
+                                     dc, dc, m_printRect, m_pageRect);
+
+    return true;
+}
+
+bool EditPrint::OnBeginDocument (int startPage, int endPage) {
+
+    if (!wxPrintout::OnBeginDocument (startPage, endPage)) {
+        return false;
+    }
+
+    return true;
+}
+
+void EditPrint::GetPageInfo (int *minPage, int *maxPage, int *selPageFrom, int *selPageTo) {
+
+    // initialize values
+    *minPage = 0;
+    *maxPage = 0;
+    *selPageFrom = 0;
+    *selPageTo = 0;
+
+    // scale DC if possible
+    wxDC *dc = GetDC();
+    if (!dc) return;
+    PrintScaling (dc);
+
+    // get print page informations and convert to printer pixels
+    wxSize ppiScr;
+    GetPPIScreen (&ppiScr.x, &ppiScr.y);
+    wxSize page = g_pageSetupData->GetPaperSize();
+    page.x = static_cast<int> (page.x * ppiScr.x / 25.4);
+    page.y = static_cast<int> (page.y * ppiScr.y / 25.4);
+    m_pageRect = wxRect (0,
+                         0,
+                         page.x,
+                         page.y);
+
+    // get margins informations and convert to printer pixels
+    int  top = 25; // default 25
+    int  bottom = 25; // default 25
+    int  left = 20; // default 20
+    int  right = 20; // default 20
+    wxPoint (top, left) = g_pageSetupData->GetMarginTopLeft();
+    wxPoint (bottom, right) = g_pageSetupData->GetMarginBottomRight();
+    top = static_cast<int> (top * ppiScr.y / 25.4);
+    bottom = static_cast<int> (bottom * ppiScr.y / 25.4);
+    left = static_cast<int> (left * ppiScr.x / 25.4);
+    right = static_cast<int> (right * ppiScr.x / 25.4);
+    m_printRect = wxRect (left,
+                          top,
+                          page.x - (left + right),
+                          page.y - (top + bottom));
+
+    // count pages
+    while (HasPage (*maxPage)) {
+        m_printed = m_edit->FormatRange (0, m_printed, m_edit->GetLength(),
+                                       dc, dc, m_printRect, m_pageRect);
+        *maxPage += 1;
+    }
+    if (*maxPage > 0) *minPage = 1;
+    *selPageFrom = *minPage;
+    *selPageTo = *maxPage;
+}
+
+bool EditPrint::HasPage (int page) {
+
+    return (m_printed < m_edit->GetLength());
+}
+
+bool EditPrint::PrintScaling (wxDC *dc){
+
+    // check for dc, return if none
+    if (!dc) return false;
+
+    // get printer and screen sizing values
+    wxSize ppiScr;
+    GetPPIScreen (&ppiScr.x, &ppiScr.y);
+    if (ppiScr.x == 0) { // most possible guess 96 dpi
+        ppiScr.x = 96;
+        ppiScr.y = 96;
+    }
+    wxSize ppiPrt;
+    GetPPIPrinter (&ppiPrt.x, &ppiPrt.y);
+    if (ppiPrt.x == 0) { // scaling factor to 1
+        ppiPrt.x = ppiScr.x;
+        ppiPrt.y = ppiScr.y;
+    }
+    wxSize dcSize = dc->GetSize();
+    wxSize pageSize;
+    GetPageSizePixels (&pageSize.x, &pageSize.y);
+
+    // set user scale
+    float scale_x = (float)(ppiPrt.x * dcSize.x) /
+                    (float)(ppiScr.x * pageSize.x);
+    float scale_y = (float)(ppiPrt.y * dcSize.y) /
+                    (float)(ppiScr.y * pageSize.y);
+    dc->SetUserScale (scale_x, scale_y);
+
+    return true;
+}
+
diff --git a/samples/stc/edit.h b/samples/stc/edit.h
new file mode 100644 (file)
index 0000000..0a4cbf4
--- /dev/null
@@ -0,0 +1,169 @@
+//////////////////////////////////////////////////////////////////////////////
+// File:        edit.h
+// Purpose:     STC test module
+// Maintainer:  Wyo
+// Created:     2003-09-01
+// RCS-ID:      $Id$
+// Copyright:   (c) wxGuide
+// Licence:     wxWindows licence
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef _EDIT_H_
+#define _EDIT_H_
+
+//----------------------------------------------------------------------------
+// informations
+//----------------------------------------------------------------------------
+
+
+//----------------------------------------------------------------------------
+// headers
+//----------------------------------------------------------------------------
+
+//! wxWindows headers
+
+//! wxWindows/contrib headers
+#include <wx/stc/stc.h>  // styled text control
+
+//! application headers
+#include "prefs.h"       // preferences
+
+
+//============================================================================
+// declarations
+//============================================================================
+
+class EditPrint;
+class EditProperties;
+
+
+//----------------------------------------------------------------------------
+//! Edit
+class Edit: public wxStyledTextCtrl {
+    friend class EditProperties;
+    friend class EditPrint;
+
+public:
+    //! constructor
+    Edit (wxWindow *parent, wxWindowID id = -1,
+          const wxPoint &pos = wxDefaultPosition,
+          const wxSize &size = wxDefaultSize,
+          long style = wxSUNKEN_BORDER|wxVSCROLL
+         );
+
+    //! destructor
+    ~Edit ();
+
+    // event handlers
+    // common
+    void OnSize( wxSizeEvent &event );
+    // edit
+    void OnEditRedo (wxCommandEvent &event);
+    void OnEditUndo (wxCommandEvent &event);
+    void OnEditClear (wxCommandEvent &event);
+    void OnEditCut (wxCommandEvent &event);
+    void OnEditCopy (wxCommandEvent &event);
+    void OnEditPaste (wxCommandEvent &event);
+    // find
+    void OnFind (wxCommandEvent &event);
+    void OnFindNext (wxCommandEvent &event);
+    void OnReplace (wxCommandEvent &event);
+    void OnReplaceNext (wxCommandEvent &event);
+    void OnBraceMatch (wxCommandEvent &event);
+    void OnGoto (wxCommandEvent &event);
+    void OnEditIndentInc (wxCommandEvent &event);
+    void OnEditIndentRed (wxCommandEvent &event);
+    void OnEditSelectAll (wxCommandEvent &event);
+    void OnEditSelectLine (wxCommandEvent &event);
+    //! view
+    void OnHilightLang (wxCommandEvent &event);
+    void OnDisplayEOL (wxCommandEvent &event);
+    void OnIndentGuide (wxCommandEvent &event);
+    void OnLineNumber (wxCommandEvent &event);
+    void OnLongLineOn (wxCommandEvent &event);
+    void OnWhiteSpace (wxCommandEvent &event);
+    void OnFoldToggle (wxCommandEvent &event);
+    void OnSetOverType (wxCommandEvent &event);
+    void OnSetReadOnly (wxCommandEvent &event);
+    void OnWrapmodeOn (wxCommandEvent &event);
+    void OnUseCharset (wxCommandEvent &event);
+    //! extra
+    void OnChangeCase (wxCommandEvent &event);
+    void OnConvertEOL (wxCommandEvent &event);
+    // stc
+    void OnMarginClick (wxStyledTextEvent &event);
+    void OnCharAdded  (wxStyledTextEvent &event);
+
+    //! language/lexer
+    wxString DeterminePrefs (const wxString &filename);
+    bool InitializePrefs (const wxString &filename);
+    bool UserSettings (const wxString &filename);
+    LanguageInfo const* GetLanguageInfo () {return m_language;};
+
+    //! load/save file
+    bool LoadFile ();
+    bool LoadFile (const wxString &filename);
+    bool SaveFile ();
+    bool SaveFile (const wxString &filename);
+    bool Modified ();
+    wxString GetFilename () {return m_filename;};
+    void SetFilename (const wxString &filename) {m_filename = filename;};
+
+private:
+    // file
+    wxString m_filename;
+
+    // lanugage properties
+    LanguageInfo const* m_language;
+
+    // margin variables
+    int m_LineNrID;
+    int m_LineNrMargin;
+    int m_FoldingID;
+    int m_FoldingMargin;
+    int m_DividerID;
+
+    DECLARE_EVENT_TABLE()
+};
+
+//----------------------------------------------------------------------------
+//! EditProperties
+class EditProperties: public wxDialog {
+
+public:
+
+    //! constructor
+    EditProperties (Edit *edit, long style = 0);
+
+private:
+
+};
+
+//----------------------------------------------------------------------------
+//! EditPrint
+class EditPrint: public wxPrintout {
+
+public:
+
+    //! constructor
+    EditPrint (Edit *edit, wxChar *title = _T(""));
+
+    //! event handlers
+    bool OnPrintPage (int page);
+    bool OnBeginDocument (int startPage, int endPage);
+
+    //! print functions
+    bool HasPage (int page);
+    void GetPageInfo (int *minPage, int *maxPage, int *selPageFrom, int *selPageTo);
+
+private:
+    Edit *m_edit;
+    int m_printed;
+    wxRect m_pageRect;
+    wxRect m_printRect;
+
+    bool PrintScaling (wxDC *dc);
+};
+
+#endif // _EDIT_H_
+
index 5efb08e9aa31b6e86bf96b6ff42960dd3ec355ae..cc351315b073ecb84ba8fcaf4f42129367da3ffd 100644 (file)
@@ -30,7 +30,9 @@ STCTEST_CXXFLAGS = $(CPPFLAGS) $(__RUNTIME_LIBS_6) -I$(BCCDIR)\include \
        -I$(SETUPHDIR) -I. $(__DLLFLAG_p) -I.\..\..\..\samples -I.\..\..\include \
        $(CXXFLAGS)
 STCTEST_OBJECTS =  \
        -I$(SETUPHDIR) -I. $(__DLLFLAG_p) -I.\..\..\..\samples -I.\..\..\include \
        $(CXXFLAGS)
 STCTEST_OBJECTS =  \
-       $(OBJS)\stctest_stctest.obj
+       $(OBJS)\stctest_stctest.obj \
+       $(OBJS)\stctest_edit.obj \
+       $(OBJS)\stctest_prefs.obj
 
 ### Conditionally set variables: ###
 
 
 ### Conditionally set variables: ###
 
@@ -152,7 +154,13 @@ $(OBJS):
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all: $(OBJS)\stctest.exe data
+all: $(OBJS)\stctest.exe
+
+$(OBJS)\stctest_edit.obj: .\edit.cpp
+       $(CXX) -q -c -P -o$@ $(STCTEST_CXXFLAGS) $**
+
+$(OBJS)\stctest_prefs.obj: .\prefs.cpp
+       $(CXX) -q -c -P -o$@ $(STCTEST_CXXFLAGS) $**
 
 $(OBJS)\stctest_sample.res: .\..\..\..\samples\sample.rc
        brcc32 -32 -r -fo$@ -i$(BCCDIR)\include  -d__WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) -i.\..\..\..\include -i$(SETUPHDIR) -i. $(__DLLFLAG_p_1) -i.\..\..\..\samples $**
 
 $(OBJS)\stctest_sample.res: .\..\..\..\samples\sample.rc
        brcc32 -32 -r -fo$@ -i$(BCCDIR)\include  -d__WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) -i.\..\..\..\include -i$(SETUPHDIR) -i. $(__DLLFLAG_p_1) -i.\..\..\..\samples $**
@@ -170,10 +178,6 @@ clean:
        -if exist $(OBJS)\stctest.ilf del $(OBJS)\stctest.ilf
        -if exist $(OBJS)\stctest.ils del $(OBJS)\stctest.ils
 
        -if exist $(OBJS)\stctest.ilf del $(OBJS)\stctest.ilf
        -if exist $(OBJS)\stctest.ils del $(OBJS)\stctest.ils
 
-data: 
-       if not exist $(OBJS) mkdir $(OBJS)
-       for %f in (stctest.cpp) do if not exist $(OBJS)\%f copy .\%f $(OBJS)
-
 $(OBJS)\stctest.exe: $(STCTEST_OBJECTS)  $(OBJS)\stctest_sample.res
        ilink32 -Tpe -q $(LDFLAGS) -L$(BCCDIR)\lib $(__DEBUGINFO)  -L$(LIBDIRNAME) -aa @&&|
        c0w32.obj $(STCTEST_OBJECTS),$@,, wx$(PORTNAME)$(WXUNIVNAME)25$(WXUNICODEFLAG)$(WXDEBUGFLAG)_stc.lib  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib  wxregex$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib  $(__UNICOWS_LIB_p) ole2w32.lib oleacc.lib  import32.lib cw32mt$(__RUNTIME_LIBS_7).lib,, $(OBJS)\stctest_sample.res
 $(OBJS)\stctest.exe: $(STCTEST_OBJECTS)  $(OBJS)\stctest_sample.res
        ilink32 -Tpe -q $(LDFLAGS) -L$(BCCDIR)\lib $(__DEBUGINFO)  -L$(LIBDIRNAME) -aa @&&|
        c0w32.obj $(STCTEST_OBJECTS),$@,, wx$(PORTNAME)$(WXUNIVNAME)25$(WXUNICODEFLAG)$(WXDEBUGFLAG)_stc.lib  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib  wxregex$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib  $(__UNICOWS_LIB_p) ole2w32.lib oleacc.lib  import32.lib cw32mt$(__RUNTIME_LIBS_7).lib,, $(OBJS)\stctest_sample.res
index 352deda40395c8986425e341391a12a56f8d0933..62c646497214cfc35b1bc82f4fd81ec3e8323583 100644 (file)
@@ -22,7 +22,9 @@ STCTEST_CXXFLAGS = $(CPPFLAGS) $(__DEBUGINFO) $(__OPTIMIZEFLAG_2) $(GCCFLAGS) \
        $(__DLLFLAG_p) -I.\..\..\..\samples -I.\..\..\include $(CXXFLAGS)
 STCTEST_OBJECTS =  \
        $(OBJS)\stctest_sample_rc.o \
        $(__DLLFLAG_p) -I.\..\..\..\samples -I.\..\..\include $(CXXFLAGS)
 STCTEST_OBJECTS =  \
        $(OBJS)\stctest_sample_rc.o \
-       $(OBJS)\stctest_stctest.o
+       $(OBJS)\stctest_stctest.o \
+       $(OBJS)\stctest_edit.o \
+       $(OBJS)\stctest_prefs.o
 
 ### Conditionally set variables: ###
 
 
 ### Conditionally set variables: ###
 
@@ -145,7 +147,13 @@ $(OBJS):
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all: $(OBJS)\stctest.exe data
+all: $(OBJS)\stctest.exe
+
+$(OBJS)\stctest_edit.o: ./edit.cpp
+       $(CXX) -c -o $@ $(STCTEST_CXXFLAGS) $<
+
+$(OBJS)\stctest_prefs.o: ./prefs.cpp
+       $(CXX) -c -o $@ $(STCTEST_CXXFLAGS) $<
 
 $(OBJS)\stctest_sample_rc.o: ./../../../samples/sample.rc
        windres --use-temp-file -i$< -o$@  --define __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) --include-dir ./../../../include --include-dir $(SETUPHDIR) --include-dir . $(__DLLFLAG_p_1) --include-dir ./../../../samples
 
 $(OBJS)\stctest_sample_rc.o: ./../../../samples/sample.rc
        windres --use-temp-file -i$< -o$@  --define __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) --include-dir ./../../../include --include-dir $(SETUPHDIR) --include-dir . $(__DLLFLAG_p_1) --include-dir ./../../../samples
@@ -157,11 +165,7 @@ clean:
        -if exist $(OBJS)\*.o del $(OBJS)\*.o
        -if exist $(OBJS)\stctest.exe del $(OBJS)\stctest.exe
 
        -if exist $(OBJS)\*.o del $(OBJS)\*.o
        -if exist $(OBJS)\stctest.exe del $(OBJS)\stctest.exe
 
-data: 
-       if not exist $(OBJS) mkdir $(OBJS)
-       for %%f in (stctest.cpp) do if not exist $(OBJS)\%%f copy .\%%f $(OBJS)
-
 $(OBJS)\stctest.exe: $(STCTEST_OBJECTS) $(OBJS)\stctest_sample_rc.o
        $(CXX) -o $@ $(STCTEST_OBJECTS) $(LDFLAGS) $(__DEBUGINFO) -mthreads -L$(LIBDIRNAME) -Wl,--subsystem,windows -mwindows  -lwx$(PORTNAME)$(WXUNIVNAME)25$(WXUNICODEFLAG)$(WXDEBUGFLAG)_stc  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) -lwxzlib$(WXDEBUGFLAG)  -lwxregex$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG)  $(__UNICOWS_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lodbc32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32
 
 $(OBJS)\stctest.exe: $(STCTEST_OBJECTS) $(OBJS)\stctest_sample_rc.o
        $(CXX) -o $@ $(STCTEST_OBJECTS) $(LDFLAGS) $(__DEBUGINFO) -mthreads -L$(LIBDIRNAME) -Wl,--subsystem,windows -mwindows  -lwx$(PORTNAME)$(WXUNIVNAME)25$(WXUNICODEFLAG)$(WXDEBUGFLAG)_stc  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) -lwxzlib$(WXDEBUGFLAG)  -lwxregex$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG)  $(__UNICOWS_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lodbc32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32
 
-.PHONY: all clean data
+.PHONY: all clean
index 16dca9b2612672437773aedd6d394ccfb1be4308..17c8866593c334d4007168d0a52f518557f0e847 100644 (file)
@@ -24,7 +24,9 @@ STCTEST_CXXFLAGS = $(CPPFLAGS) /M$(__RUNTIME_LIBS_7)$(__DEBUGRUNTIME_3) \
        /I.\..\..\include $(CXXFLAGS) /GR /GX
 STCTEST_OBJECTS =  \
        $(OBJS)\stctest_sample.res \
        /I.\..\..\include $(CXXFLAGS) /GR /GX
 STCTEST_OBJECTS =  \
        $(OBJS)\stctest_sample.res \
-       $(OBJS)\stctest_stctest.obj
+       $(OBJS)\stctest_stctest.obj \
+       $(OBJS)\stctest_edit.obj \
+       $(OBJS)\stctest_prefs.obj
 
 ### Conditionally set variables: ###
 
 
 ### Conditionally set variables: ###
 
@@ -227,7 +229,13 @@ $(OBJS):
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all: $(OBJS)\stctest.exe data
+all: $(OBJS)\stctest.exe
+
+$(OBJS)\stctest_edit.obj: .\edit.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(STCTEST_CXXFLAGS) $**
+
+$(OBJS)\stctest_prefs.obj: .\prefs.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(STCTEST_CXXFLAGS) $**
 
 $(OBJS)\stctest_sample.res: .\..\..\..\samples\sample.rc
        rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_2_p_1) $(__NO_VC_CRTDBG_p_1) /d __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) /i .\..\..\..\include /i $(SETUPHDIR) /i . $(__DLLFLAG_p_1) /d _WINDOWS /i .\..\..\..\samples $**
 
 $(OBJS)\stctest_sample.res: .\..\..\..\samples\sample.rc
        rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_2_p_1) $(__NO_VC_CRTDBG_p_1) /d __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) /i .\..\..\..\include /i $(SETUPHDIR) /i . $(__DLLFLAG_p_1) /d _WINDOWS /i .\..\..\..\samples $**
@@ -242,10 +250,6 @@ clean:
        -if exist $(OBJS)\stctest.ilk del $(OBJS)\stctest.ilk
        -if exist $(OBJS)\stctest.pdb del $(OBJS)\stctest.pdb
 
        -if exist $(OBJS)\stctest.ilk del $(OBJS)\stctest.ilk
        -if exist $(OBJS)\stctest.pdb del $(OBJS)\stctest.pdb
 
-data: 
-       if not exist $(OBJS) mkdir $(OBJS)
-       for %f in (stctest.cpp) do if not exist $(OBJS)\%f copy .\%f $(OBJS)
-
 $(OBJS)\stctest.exe: $(STCTEST_OBJECTS) $(OBJS)\stctest_sample.res
        link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_1)  /LIBPATH:$(LIBDIRNAME) /SUBSYSTEM:WINDOWS @<<
        $(STCTEST_OBJECTS)  wx$(PORTNAME)$(WXUNIVNAME)25$(WXUNICODEFLAG)$(WXDEBUGFLAG)_stc.lib  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib  wxregex$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib  $(__UNICOWS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib odbc32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib oleacc.lib
 $(OBJS)\stctest.exe: $(STCTEST_OBJECTS) $(OBJS)\stctest_sample.res
        link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_1)  /LIBPATH:$(LIBDIRNAME) /SUBSYSTEM:WINDOWS @<<
        $(STCTEST_OBJECTS)  wx$(PORTNAME)$(WXUNIVNAME)25$(WXUNICODEFLAG)$(WXDEBUGFLAG)_stc.lib  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib  wxregex$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib  $(__UNICOWS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib odbc32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib oleacc.lib
index b68bbb42415448313fa48770fbe5a65275b8f90f..331e4b231d35f2408441c906ad906d69f7b8a109 100644 (file)
@@ -169,7 +169,9 @@ STCTEST_CXXFLAGS = $(CPPFLAGS) $(__DEBUGINFO_0) $(__OPTIMIZEFLAG_2) -bm &
        $(__UNICODE_DEFINE_p) -i=.\..\..\..\include -i=$(SETUPHDIR) -i=. &
        $(__DLLFLAG_p) -i=.\..\..\..\samples -i=.\..\..\include $(CXXFLAGS)
 STCTEST_OBJECTS =  &
        $(__UNICODE_DEFINE_p) -i=.\..\..\..\include -i=$(SETUPHDIR) -i=. &
        $(__DLLFLAG_p) -i=.\..\..\..\samples -i=.\..\..\include $(CXXFLAGS)
 STCTEST_OBJECTS =  &
-       $(OBJS)\stctest_stctest.obj
+       $(OBJS)\stctest_stctest.obj &
+       $(OBJS)\stctest_edit.obj &
+       $(OBJS)\stctest_prefs.obj
 
 
 all : $(OBJS)
 
 
 all : $(OBJS)
@@ -178,7 +180,13 @@ $(OBJS) :
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all : .SYMBOLIC $(OBJS)\stctest.exe data
+all : .SYMBOLIC $(OBJS)\stctest.exe
+
+$(OBJS)\stctest_edit.obj :  .AUTODEPEND .\edit.cpp
+       $(CXX) -zq -fo=$^@ $(STCTEST_CXXFLAGS) $<
+
+$(OBJS)\stctest_prefs.obj :  .AUTODEPEND .\prefs.cpp
+       $(CXX) -zq -fo=$^@ $(STCTEST_CXXFLAGS) $<
 
 $(OBJS)\stctest_sample.res :  .AUTODEPEND .\..\..\..\samples\sample.rc
        wrc -q -ad -bt=nt -r -fo=$^@  -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__UNICODE_DEFINE_p) -i=.\..\..\..\include -i=$(SETUPHDIR) -i=. $(__DLLFLAG_p) -i=.\..\..\..\samples $<
 
 $(OBJS)\stctest_sample.res :  .AUTODEPEND .\..\..\..\samples\sample.rc
        wrc -q -ad -bt=nt -r -fo=$^@  -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__UNICODE_DEFINE_p) -i=.\..\..\..\include -i=$(SETUPHDIR) -i=. $(__DLLFLAG_p) -i=.\..\..\..\samples $<
@@ -193,10 +201,6 @@ clean : .SYMBOLIC
        -if exist $(OBJS)\*.ilk del $(OBJS)\*.ilk
        -if exist $(OBJS)\stctest.exe del $(OBJS)\stctest.exe
 
        -if exist $(OBJS)\*.ilk del $(OBJS)\*.ilk
        -if exist $(OBJS)\stctest.exe del $(OBJS)\stctest.exe
 
-data : .SYMBOLIC 
-       if not exist $(OBJS) mkdir $(OBJS)
-       for %f in (stctest.cpp) do if not exist $(OBJS)\%f copy .\%f $(OBJS)
-
 $(OBJS)\stctest.exe :  $(STCTEST_OBJECTS) $(OBJS)\stctest_sample.res
        @%create $(OBJS)\stctest.lbc
        @%append $(OBJS)\stctest.lbc option quiet
 $(OBJS)\stctest.exe :  $(STCTEST_OBJECTS) $(OBJS)\stctest_sample.res
        @%create $(OBJS)\stctest.lbc
        @%append $(OBJS)\stctest.lbc option quiet
diff --git a/samples/stc/mondrian.ico b/samples/stc/mondrian.ico
new file mode 100644 (file)
index 0000000..2310c5d
Binary files /dev/null and b/samples/stc/mondrian.ico differ
diff --git a/samples/stc/mondrian.xpm b/samples/stc/mondrian.xpm
new file mode 100644 (file)
index 0000000..409f27a
--- /dev/null
@@ -0,0 +1,44 @@
+/* XPM */
+static char *mondrian_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 6 1",
+"  c Black",
+". c Blue",
+"X c #00bf00",
+"o c Red",
+"O c Yellow",
+"+ c Gray100",
+/* pixels */
+"                                ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+"                                ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++      ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++                    ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+"                                "
+};
diff --git a/samples/stc/prefs.cpp b/samples/stc/prefs.cpp
new file mode 100644 (file)
index 0000000..7927082
--- /dev/null
@@ -0,0 +1,379 @@
+//////////////////////////////////////////////////////////////////////////////
+// File:        prefs.cpp
+// Purpose:     STC test Preferences initialization
+// Maintainer:  Wyo
+// Created:     2003-09-01
+// RCS-ID:      $Id$
+// Copyright:   (c) wxGuide
+// Licence:     wxWindows licence
+//////////////////////////////////////////////////////////////////////////////
+
+//----------------------------------------------------------------------------
+// headers
+//----------------------------------------------------------------------------
+
+// For compilers that support precompilation, includes <wx/wx.h>.
+#include <wx/wxprec.h>
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+// for all others, include the necessary headers (this file is usually all you
+// need because it includes almost all 'standard' wxWindows headers)
+#ifndef WX_PRECOMP
+    #include <wx/wx.h>
+#endif
+
+//! wxWindows headers
+
+//! wxWindows/contrib headers
+
+//! application headers
+#include "defsext.h"     // Additional definitions
+#include "prefs.h"       // Preferences
+
+
+//============================================================================
+// declarations
+//============================================================================
+
+//----------------------------------------------------------------------------
+//! language types
+const CommonInfo g_CommonPrefs = {
+    // editor functionality prefs
+    true,  // syntaxEnable
+    true,  // foldEnable
+    true,  // indentEnable
+    // display defaults prefs
+    false, // overTypeInitial
+    false, // readOnlyInitial
+    false,  // wrapModeInitial
+    false, // displayEOLEnable
+    false, // IndentGuideEnable
+    true,  // lineNumberEnable
+    false, // longLineOnEnable
+    false, // whiteSpaceEnable
+};
+
+//----------------------------------------------------------------------------
+// keywordlists
+// C++
+wxChar* CppWordlist1 =
+    _T("asm auto bool break case catch char class const const_cast \
+       continue default delete do double dynamic_cast else enum explicit \
+       export extern false float for friend goto if inline int long \
+       mutable namespace new operator private protected public register \
+       reinterpret_cast return short signed sizeof static static_cast \
+       struct switch template this throw true try typedef typeid \
+       typename union unsigned using virtual void volatile wchar_t \
+       while");
+wxChar* CppWordlist2 =
+    _T("file");
+wxChar* CppWordlist3 =
+    _T("a addindex addtogroup anchor arg attention author b brief bug c \
+       class code date def defgroup deprecated dontinclude e em endcode \
+       endhtmlonly endif endlatexonly endlink endverbatim enum example \
+       exception f$ f[ f] file fn hideinitializer htmlinclude \
+       htmlonly if image include ingroup internal invariant interface \
+       latexonly li line link mainpage name namespace nosubgrouping note \
+       overload p page par param post pre ref relates remarks return \
+       retval sa section see showinitializer since skip skipline struct \
+       subsection test throw todo typedef union until var verbatim \
+       verbinclude version warning weakgroup $ @ "" & < > # { }");
+
+// Python
+wxChar* PythonWordlist1 =
+    _T("and assert break class continue def del elif else except exec \
+       finally for from global if import in is lambda None not or pass \
+       print raise return try while yield");
+wxChar* PythonWordlist2 =
+    _T("ACCELERATORS ALT AUTO3STATE AUTOCHECKBOX AUTORADIOBUTTON BEGIN \
+       BITMAP BLOCK BUTTON CAPTION CHARACTERISTICS CHECKBOX CLASS \
+       COMBOBOX CONTROL CTEXT CURSOR DEFPUSHBUTTON DIALOG DIALOGEX \
+       DISCARDABLE EDITTEXT END EXSTYLE FONT GROUPBOX ICON LANGUAGE \
+       LISTBOX LTEXT MENU MENUEX MENUITEM MESSAGETABLE POPUP PUSHBUTTON \
+       RADIOBUTTON RCDATA RTEXT SCROLLBAR SEPARATOR SHIFT STATE3 \
+       STRINGTABLE STYLE TEXTINCLUDE VALUE VERSION VERSIONINFO VIRTKEY");
+
+
+//----------------------------------------------------------------------------
+//! languages
+const LanguageInfo g_LanguagePrefs [] = {
+    // C++
+    {_T("C++"),
+     _T("*.c;*.cc;*.cpp;*.cxx;*.cs;*.h;*.hh;*.hpp;*.hxx;*.sma"),
+     wxSTC_LEX_CPP,
+     {{mySTC_TYPE_DEFAULT, NULL},
+      {mySTC_TYPE_COMMENT, NULL},
+      {mySTC_TYPE_COMMENT_LINE, NULL},
+      {mySTC_TYPE_COMMENT_DOC, NULL},
+      {mySTC_TYPE_NUMBER, NULL},
+      {mySTC_TYPE_WORD1, CppWordlist1}, // KEYWORDS
+      {mySTC_TYPE_STRING, NULL},
+      {mySTC_TYPE_CHARACTER, NULL},
+      {mySTC_TYPE_UUID, NULL},
+      {mySTC_TYPE_PREPROCESSOR, NULL},
+      {mySTC_TYPE_OPERATOR, NULL},
+      {mySTC_TYPE_IDENTIFIER, NULL},
+      {mySTC_TYPE_STRING_EOL, NULL},
+      {mySTC_TYPE_DEFAULT, NULL}, // VERBATIM
+      {mySTC_TYPE_REGEX, NULL},
+      {mySTC_TYPE_COMMENT_SPECIAL, NULL}, // DOXY
+      {mySTC_TYPE_WORD2, CppWordlist2}, // EXTRA WORDS
+      {mySTC_TYPE_WORD3, CppWordlist3}, // DOXY KEYWORDS
+      {mySTC_TYPE_ERROR, NULL}, // KEYWORDS ERROR
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL}},
+     mySTC_FOLD_COMMENT | mySTC_FOLD_COMPACT | mySTC_FOLD_PREPROC},
+    // Python
+    {_T("Python"),
+     _T("*.py;*.pyw"),
+     wxSTC_LEX_PYTHON,
+     {{mySTC_TYPE_DEFAULT, NULL},
+      {mySTC_TYPE_COMMENT_LINE, NULL},
+      {mySTC_TYPE_NUMBER, NULL},
+      {mySTC_TYPE_STRING, NULL},
+      {mySTC_TYPE_CHARACTER, NULL},
+      {mySTC_TYPE_WORD1, PythonWordlist1}, // KEYWORDS
+      {mySTC_TYPE_DEFAULT, NULL}, // TRIPLE
+      {mySTC_TYPE_DEFAULT, NULL}, // TRIPLEDOUBLE
+      {mySTC_TYPE_DEFAULT, NULL}, // CLASSNAME
+      {mySTC_TYPE_DEFAULT, PythonWordlist2}, // DEFNAME
+      {mySTC_TYPE_OPERATOR, NULL},
+      {mySTC_TYPE_IDENTIFIER, NULL},
+      {mySTC_TYPE_DEFAULT, NULL}, // COMMENT_BLOCK
+      {mySTC_TYPE_STRING_EOL, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL}},
+     mySTC_FOLD_COMMENTPY | mySTC_FOLD_QUOTESPY},
+    // * (any)
+    {(wxChar *)DEFAULT_LANGUAGE,
+     _T("*.*"),
+     wxSTC_LEX_PROPERTIES,
+     {{mySTC_TYPE_DEFAULT, NULL},
+      {mySTC_TYPE_DEFAULT, NULL},
+      {mySTC_TYPE_DEFAULT, NULL},
+      {mySTC_TYPE_DEFAULT, NULL},
+      {mySTC_TYPE_DEFAULT, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL},
+      {-1, NULL}},
+     0},
+    };
+
+const int g_LanguagePrefsSize = WXSIZEOF(g_LanguagePrefs);
+
+//----------------------------------------------------------------------------
+//! style types
+const StyleInfo g_StylePrefs [] = {
+    // mySTC_TYPE_DEFAULT
+    {_T("Default"),
+     _T("BLACK"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_WORD1
+    {_T("Keyword1"),
+     _T("BLUE"), _T("WHITE"),
+     _T(""), 10, mySTC_STYLE_BOLD, 0},
+
+    // mySTC_TYPE_WORD2
+    {_T("Keyword2"),
+     _T("DARK BLUE"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_WORD3
+    {_T("Keyword3"),
+     _T("CORNFLOWER BLUE"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_WORD4
+    {_T("Keyword4"),
+     _T("CYAN"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_WORD5
+    {_T("Keyword5"),
+     _T("DARK GREY"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_WORD6
+    {_T("Keyword6"),
+     _T("GREY"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_COMMENT
+    {_T("Comment"),
+     _T("FOREST GREEN"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_COMMENT_DOC
+    {_T("Comment (Doc)"),
+     _T("FOREST GREEN"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_COMMENT_LINE
+    {_T("Comment line"),
+     _T("FOREST GREEN"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_COMMENT_SPECIAL
+    {_T("Special comment"),
+     _T("FOREST GREEN"), _T("WHITE"),
+     _T(""), 10, mySTC_STYLE_ITALIC, 0},
+
+    // mySTC_TYPE_CHARACTER
+    {_T("Character"),
+     _T("KHAKI"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_CHARACTER_EOL
+    {_T("Character (EOL)"),
+     _T("KHAKI"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_STRING
+    {_T("String"),
+     _T("BROWN"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_STRING_EOL
+    {_T("String (EOL)"),
+     _T("BROWN"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_DELIMITER
+    {_T("Delimiter"),
+     _T("ORANGE"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_PUNCTUATION
+    {_T("Punctuation"),
+     _T("ORANGE"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_OPERATOR
+    {_T("Operator"),
+     _T("BLACK"), _T("WHITE"),
+     _T(""), 10, mySTC_STYLE_BOLD, 0},
+
+    // mySTC_TYPE_BRACE
+    {_T("Label"),
+     _T("VIOLET"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_COMMAND
+    {_T("Command"),
+     _T("BLUE"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_IDENTIFIER
+    {_T("Identifier"),
+     _T("BLACK"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_LABEL
+    {_T("Label"),
+     _T("VIOLET"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_NUMBER
+    {_T("Number"),
+     _T("SIENNA"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_PARAMETER
+    {_T("Parameter"),
+     _T("VIOLET"), _T("WHITE"),
+     _T(""), 10, mySTC_STYLE_ITALIC, 0},
+
+    // mySTC_TYPE_REGEX
+    {_T("Regular expression"),
+     _T("ORCHID"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_UUID
+    {_T("UUID"),
+     _T("ORCHID"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_VALUE
+    {_T("Value"),
+     _T("ORCHID"), _T("WHITE"),
+     _T(""), 10, mySTC_STYLE_ITALIC, 0},
+
+    // mySTC_TYPE_PREPROCESSOR
+    {_T("Preprocessor"),
+     _T("GREY"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_SCRIPT
+    {_T("Script"),
+     _T("DARK GREY"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_ERROR
+    {_T("Error"),
+     _T("RED"), _T("WHITE"),
+     _T(""), 10, 0, 0},
+
+    // mySTC_TYPE_UNDEFINED
+    {_T("Undefined"),
+     _T("ORANGE"), _T("WHITE"),
+     _T(""), 10, 0, 0}
+
+    };
+
+const int g_StylePrefsSize = WXSIZEOF(g_StylePrefs);
+
diff --git a/samples/stc/prefs.h b/samples/stc/prefs.h
new file mode 100644 (file)
index 0000000..5233625
--- /dev/null
@@ -0,0 +1,153 @@
+    //////////////////////////////////////////////////////////////////////////////
+// File:        prefs.h
+// Purpose:     STC test Preferences initialization
+// Maintainer:  Wyo
+// Created:     2003-09-01
+// RCS-ID:      $Id$
+// Copyright:   (c) wxGuide
+// Licence:     wxWindows licence
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef _PREFS_H_
+#define _PREFS_H_
+
+//----------------------------------------------------------------------------
+// informations
+//----------------------------------------------------------------------------
+
+
+//----------------------------------------------------------------------------
+// headers
+//----------------------------------------------------------------------------
+
+//! wxWindows headers
+
+//! wxWindows/contrib headers
+#include <wx/stc/stc.h>  // styled text control
+
+//! application headers
+
+
+//============================================================================
+// declarations
+//============================================================================
+
+//! general style types
+#define mySTC_TYPE_DEFAULT 0
+
+#define mySTC_TYPE_WORD1 1
+#define mySTC_TYPE_WORD2 2
+#define mySTC_TYPE_WORD3 3
+#define mySTC_TYPE_WORD4 4
+#define mySTC_TYPE_WORD5 5
+#define mySTC_TYPE_WORD6 6
+
+#define mySTC_TYPE_COMMENT 7
+#define mySTC_TYPE_COMMENT_DOC 8
+#define mySTC_TYPE_COMMENT_LINE 9
+#define mySTC_TYPE_COMMENT_SPECIAL 10
+
+#define mySTC_TYPE_CHARACTER 11
+#define mySTC_TYPE_CHARACTER_EOL 12
+#define mySTC_TYPE_STRING 13
+#define mySTC_TYPE_STRING_EOL 14
+
+#define mySTC_TYPE_DELIMITER 15
+
+#define mySTC_TYPE_PUNCTUATION 16
+
+#define mySTC_TYPE_OPERATOR 17
+
+#define mySTC_TYPE_BRACE 18
+
+#define mySTC_TYPE_COMMAND 19
+#define mySTC_TYPE_IDENTIFIER 20
+#define mySTC_TYPE_LABEL 21
+#define mySTC_TYPE_NUMBER 22
+#define mySTC_TYPE_PARAMETER 23
+#define mySTC_TYPE_REGEX 24
+#define mySTC_TYPE_UUID 25
+#define mySTC_TYPE_VALUE 26
+
+#define mySTC_TYPE_PREPROCESSOR 27
+#define mySTC_TYPE_SCRIPT 28
+
+#define mySTC_TYPE_ERROR 29
+
+//----------------------------------------------------------------------------
+//! style bits types
+#define mySTC_STYLE_BOLD 1
+#define mySTC_STYLE_ITALIC 2
+#define mySTC_STYLE_UNDERL 4
+#define mySTC_STYLE_HIDDEN 8
+
+//----------------------------------------------------------------------------
+//! general folding types
+#define mySTC_FOLD_COMMENT 1
+#define mySTC_FOLD_COMPACT 2
+#define mySTC_FOLD_PREPROC 4
+
+#define mySTC_FOLD_HTML 16
+#define mySTC_FOLD_HTMLPREP 32
+
+#define mySTC_FOLD_COMMENTPY 64
+#define mySTC_FOLD_QUOTESPY 128
+
+//----------------------------------------------------------------------------
+//! flags
+#define mySTC_FLAG_WRAPMODE 16
+
+//----------------------------------------------------------------------------
+// CommonInfo
+
+struct CommonInfo {
+    // editor functionality prefs
+    bool syntaxEnable;
+    bool foldEnable;
+    bool indentEnable;
+    // display defaults prefs
+    bool readOnlyInitial;
+    bool overTypeInitial;
+    bool wrapModeInitial;
+    bool displayEOLEnable;
+    bool indentGuideEnable;
+    bool lineNumberEnable;
+    bool longLineOnEnable;
+    bool whiteSpaceEnable;
+};
+extern const CommonInfo g_CommonPrefs;
+
+//----------------------------------------------------------------------------
+// LanguageInfo
+
+struct LanguageInfo {
+    wxChar *name;
+    wxChar *filepattern;
+    int lexer;
+    struct {
+        int type;
+        const wxChar *words;
+    } styles [STYLE_TYPES_COUNT];
+    int folds;
+};
+
+extern const LanguageInfo g_LanguagePrefs[];
+extern const int g_LanguagePrefsSize;
+
+//----------------------------------------------------------------------------
+// StyleInfo
+struct StyleInfo {
+    wxChar *name;
+    wxChar *foreground;
+    wxChar *background;
+    wxChar *fontname;
+    int fontsize;
+    int fontstyle;
+    int lettercase;
+};
+
+extern const StyleInfo g_StylePrefs[];
+extern const int g_StylePrefsSize;
+
+#endif // _PREFS_H_
+
index aa8ee4f6b4a916b7c1206f42e9c2fe033376d4b8..8ef545ce450a53276efcdf73a6bb92f5bac28fd4 100644 (file)
@@ -7,16 +7,12 @@
     <exe id="stctest" template="wx_contrib_sample" template_append="wx_append">
         <sources>
             stctest.cpp
     <exe id="stctest" template="wx_contrib_sample" template_append="wx_append">
         <sources>
             stctest.cpp
+           edit.cpp
+           prefs.cpp
         </sources>
         <wx-lib>stc</wx-lib>
         <wx-lib>core</wx-lib>
         <wx-lib>base</wx-lib>
     </exe>
         </sources>
         <wx-lib>stc</wx-lib>
         <wx-lib>core</wx-lib>
         <wx-lib>base</wx-lib>
     </exe>
-    
-    <wx-data id="data">
-        <files>
-            stctest.cpp
-        </files>
-    </wx-data>
-    
+
 </makefile>
 </makefile>
index 6c5afdba22dd7099e70a2b799d10a70cac8c2699..8c27905685988659e74416e9684007019675a5d6 100644 (file)
-/////////////////////////////////////////////////////////////////////////////
-// Name:        stctest.cpp
-// Purpose:     sample of using wxStyledTextCtrl
-// Author:      Robin Dunn
-// Modified by:
-// Created:     3-Feb-2000
+//////////////////////////////////////////////////////////////////////////////
+// File:        app.cpp
+// Purpose:     STC test application
+// Maintainer:  Otto Wyss
+// Created:     2003-09-01
 // RCS-ID:      $Id$
 // RCS-ID:      $Id$
-// Copyright:   (c) 2000 by Total Control Software
+// Copyright:   (c) wxGuide
 // Licence:     wxWindows licence
 // Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
 
 
-#if defined(__GNUG__) && !defined(__APPLE__)
-    #pragma implementation "stctest.cpp"
-    #pragma interface "stctest.cpp"
-#endif
+//----------------------------------------------------------------------------
+// headers
+//----------------------------------------------------------------------------
 
 
-// For compilers that support precompilation, includes "wx/wx.h".
-#include "wx/wxprec.h"
+// For compilers that support precompilation, includes <wx/wx.h>.
+#include <wx/wxprec.h>
 
 #ifdef __BORLANDC__
     #pragma hdrstop
 #endif
 
 // for all others, include the necessary headers (this file is usually all you
 
 #ifdef __BORLANDC__
     #pragma hdrstop
 #endif
 
 // for all others, include the necessary headers (this file is usually all you
-// need because it includes almost all "standard" wxWindows headers
+// need because it includes almost all 'standard' wxWindows headers)
 #ifndef WX_PRECOMP
 #ifndef WX_PRECOMP
-    #include "wx/wx.h"
+    #include <wx/wx.h>
 #endif
 
 #endif
 
-#include <wx/wfstream.h>
+//! wxWindows headers
+#include <wx/config.h>   // configuration support
+#include <wx/filedlg.h>  // file dialog support
+#include <wx/filename.h> // filename support
+#include <wx/notebook.h> // notebook support
+#include <wx/settings.h> // system settings
+#include <wx/string.h>   // strings support
+
+//! application headers
+#include "defsext.h"     // Additional definitions
+#include "edit.h"        // Edit module
+#include "prefs.h"       // Prefs
+
+
+//----------------------------------------------------------------------------
+// resources
+//----------------------------------------------------------------------------
+
+// the application icon (under Windows and OS/2 it is in resources)
+#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__)
+    #include "mondrian.xpm"
+#endif
+
+//============================================================================
+// declarations
+//============================================================================
+
+#define APP_NAME _T("STC-Test")
+#define APP_DESCR _("See http://wxguide.sourceforge.net/indexedit.html")
+
+#define APP_MAINT _T("Otto Wyss")
+#define APP_VENDOR _T("wxWindows")
+#define APP_COPYRIGTH _T("(C) 2003 Otto Wyss")
+#define APP_LICENCE _T("wxWindows")
+
+#define APP_VERSION _T("0.1.alpha")
+#define APP_BUILD __DATE__
+
+#define APP_WEBSITE _T("http://www.wxWindows.org")
+#define APP_MAIL _T("mailto://???")
 
 
-#include <wx/stc/stc.h>
+#define NONAME _("<untitled>")
 
 
-//----------------------------------------------------------------------
+class AppBook;
+
+
+//----------------------------------------------------------------------------
+//! global application name
+wxString *g_appname = NULL;
+
+//! global print data, to remember settings during the session
+wxPrintData *g_printData = (wxPrintData*) NULL;
+wxPageSetupData *g_pageSetupData = (wxPageSetupData*) NULL;
+
+
+//----------------------------------------------------------------------------
+//! application APP_VENDOR-APP_NAME.
+class App: public wxApp {
+    friend class AppFrame;
 
 
-class MyApp : public wxApp
-{
 public:
 public:
-    virtual bool OnInit();
+    //! the main function called durning application start
+    virtual bool OnInit ();
+
+    //! application exit function
+    virtual int OnExit ();
+
+private:
+    //! frame window
+    AppFrame* m_frame;
+
 };
 
 };
 
-//----------------------------------------------------------------------
-//  Make an editor class
+// created dynamically by wxWindows
+DECLARE_APP (App);
 
 
-class MySTC : public wxStyledTextCtrl
-{
-public:
-    MySTC(wxWindow *parent, wxWindowID id,
-          const wxPoint& pos = wxDefaultPosition,
-          const wxSize& size = wxDefaultSize, long style = 0);
+//----------------------------------------------------------------------------
+//! frame of the application APP_VENDOR-APP_NAME.
+class AppFrame: public wxFrame {
+    friend class App;
+    friend class AppBook;
+    friend class AppAbout;
 
 
-    void OnKeyPressed(wxKeyEvent& evt);
+public:
+    //! constructor
+    AppFrame (const wxString &title);
+
+    //! destructor
+    ~AppFrame ();
+
+    //! event handlers
+    //! common
+    void OnClose (wxCloseEvent &event);
+    void OnAbout (wxCommandEvent &event);
+    void OnExit (wxCommandEvent &event);
+    void OnTimerEvent (wxTimerEvent &event);
+    //! file
+    void OnFileNew (wxCommandEvent &event);
+    void OnFileNewFrame (wxCommandEvent &event);
+    void OnFileOpen (wxCommandEvent &event);
+    void OnFileOpenFrame (wxCommandEvent &event);
+    void OnFileSave (wxCommandEvent &event);
+    void OnFileSaveAs (wxCommandEvent &event);
+    void OnFileClose (wxCommandEvent &event);
+    //! properties
+    void OnProperties (wxCommandEvent &event);
+    //! print
+    void OnPrintSetup (wxCommandEvent &event);
+    void OnPrintPreview (wxCommandEvent &event);
+    void OnPrint (wxCommandEvent &event);
+    //! edit events
+    void OnEdit (wxCommandEvent &event);
 
 private:
 
 private:
+    // edit object
+    Edit *m_edit;
+    void FileOpen (wxString fname);
+
+    //! creates the application menu bar
+    wxMenuBar *m_menuBar;
+    void CreateMenu ();
+
+    // print preview position and size
+    wxRect DeterminePrintSize ();
+
     DECLARE_EVENT_TABLE()
 };
 
     DECLARE_EVENT_TABLE()
 };
 
-BEGIN_EVENT_TABLE(MySTC, wxStyledTextCtrl)
-    EVT_KEY_DOWN(MySTC::OnKeyPressed)
-END_EVENT_TABLE()
+//----------------------------------------------------------------------------
+//! about box of the application APP_VENDOR-APP_NAME
+class AppAbout: public wxDialog {
 
 
-//----------------------------------------------------------------------
-// Define a new frame type: this is going to be our main frame
-class MyFrame : public wxFrame
-{
 public:
 public:
-    MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
+    //! constructor
+    AppAbout (wxWindow *parent,
+              int milliseconds = 0,
+              long style = 0);
+
+    //! destructor
+    ~AppAbout ();
 
 
-    void OnQuit(wxCommandEvent& event);
-    void OnAbout(wxCommandEvent& event);
+    // event handlers
+    void OnTimerEvent (wxTimerEvent &event);
 
 private:
 
 private:
-    MySTC* ed;
+    // timer
+    wxTimer *m_timer;
 
     DECLARE_EVENT_TABLE()
 };
 
 
 
     DECLARE_EVENT_TABLE()
 };
 
 
-// IDs for the controls and the menu commands
-enum
-{
-    // menu items
-    ID_Quit = 1,
-    ID_About,
-    ID_ED
-};
+//============================================================================
+// implementation
+//============================================================================
 
 
-BEGIN_EVENT_TABLE(MyFrame, wxFrame)
-    EVT_MENU            (ID_Quit,  MyFrame::OnQuit)
-    EVT_MENU            (ID_About, MyFrame::OnAbout)
-END_EVENT_TABLE()
+IMPLEMENT_APP (App)
 
 
-IMPLEMENT_APP(MyApp)
+//----------------------------------------------------------------------------
+// App
+//----------------------------------------------------------------------------
 
 
-//----------------------------------------------------------------------
-// `Main program' equivalent: the program execution "starts" here
+bool App::OnInit () {
 
 
-bool MyApp::OnInit()
-{
-    MyFrame *frame = new MyFrame(_T("Testing wxStyledTextCtrl"),
-                                 wxPoint(5, 5), wxSize(600, 600));
+    wxInitAllImageHandlers();
+    
+    // set application and vendor name
+    SetAppName (APP_NAME);
+    SetVendorName (APP_VENDOR);
+    g_appname = new wxString ();
+    g_appname->Append (APP_VENDOR);
+    g_appname->Append (_T("-"));
+    g_appname->Append (APP_NAME);
 
 
-    frame->Show(TRUE);
-    return TRUE;
-}
+    // initialize print data and setup
+    g_printData = new wxPrintData;
+    g_pageSetupData = new wxPageSetupDialogData;
 
 
-//----------------------------------------------------------------------
+    // create application frame
+    m_frame = new AppFrame (*g_appname);
 
 
-// frame constructor
-MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
-       : wxFrame((wxFrame *)NULL, -1, title, pos, size)
-{
-#ifdef __WXMAC__
-    // we need this in order to allow the about menu relocation, since ABOUT is
-    // not the default id of the about menu
-    wxApp::s_macAboutMenuItemId = ID_About;
-#endif
+    // open application frame
+    m_frame->Layout ();
+    m_frame->Show (true);
+    SetTopWindow (m_frame);
 
 
+    return true;
+}
 
 
-    // create a menu bar
-    wxMenu *menuFile = new wxMenu(wxEmptyString, wxMENU_TEAROFF);
+int App::OnExit () {
 
 
-    // the "About" item should be in the help menu
-    wxMenu *helpMenu = new wxMenu;
-    helpMenu->Append(ID_About, _T("&About...\tCtrl-A"), _T("Show about dialog"));
+    // delete global appname
+    delete g_appname;
 
 
-    menuFile->Append(ID_Quit, _T("E&xit\tAlt-X"), _T("Quit this program"));
+    // delete global print data and setup
+    if (g_printData) delete g_printData;
+    if (g_pageSetupData) delete g_pageSetupData;
 
 
-    // now append the freshly created menu to the menu bar...
-    wxMenuBar *menuBar = new wxMenuBar();
-    menuBar->Append(menuFile, _T("&File"));
-    menuBar->Append(helpMenu, _T("&Help"));
+    return 0;
+}
 
 
-    // ... and attach this menu bar to the frame
-    SetMenuBar(menuBar);
+//----------------------------------------------------------------------------
+// AppFrame
+//----------------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE (AppFrame, wxFrame)
+    // common
+    EVT_CLOSE (                      AppFrame::OnClose)
+    // file
+    EVT_MENU (wxID_OPEN,             AppFrame::OnFileOpen)
+    EVT_MENU (wxID_SAVE,             AppFrame::OnFileSave)
+    EVT_MENU (wxID_SAVEAS,           AppFrame::OnFileSaveAs)
+    EVT_MENU (wxID_CLOSE,            AppFrame::OnFileClose)
+    // properties
+    EVT_MENU (myID_PROPERTIES,       AppFrame::OnProperties)
+    // print and exit
+    EVT_MENU (wxID_PRINT_SETUP,      AppFrame::OnPrintSetup)
+    EVT_MENU (wxID_PREVIEW,          AppFrame::OnPrintPreview)
+    EVT_MENU (wxID_PRINT,            AppFrame::OnPrint)
+    EVT_MENU (wxID_EXIT,             AppFrame::OnExit)
+    // edit
+    EVT_MENU (wxID_CLEAR,            AppFrame::OnEdit)
+    EVT_MENU (wxID_CUT,              AppFrame::OnEdit)
+    EVT_MENU (wxID_COPY,             AppFrame::OnEdit)
+    EVT_MENU (wxID_PASTE,            AppFrame::OnEdit)
+    EVT_MENU (myID_INDENTINC,        AppFrame::OnEdit)
+    EVT_MENU (myID_INDENTRED,        AppFrame::OnEdit)
+    EVT_MENU (wxID_SELECTALL,        AppFrame::OnEdit)
+    EVT_MENU (myID_SELECTLINE,       AppFrame::OnEdit)
+    EVT_MENU (wxID_REDO,             AppFrame::OnEdit)
+    EVT_MENU (wxID_UNDO,             AppFrame::OnEdit)
+    // find
+    EVT_MENU (wxID_FIND,             AppFrame::OnEdit)
+    EVT_MENU (myID_FINDNEXT,         AppFrame::OnEdit)
+    EVT_MENU (myID_REPLACE,          AppFrame::OnEdit)
+    EVT_MENU (myID_REPLACENEXT,      AppFrame::OnEdit)
+    EVT_MENU (myID_BRACEMATCH,       AppFrame::OnEdit)
+    EVT_MENU (myID_GOTO,             AppFrame::OnEdit)
+    // view
+    EVT_MENU_RANGE (myID_HILIGHTFIRST, myID_HILIGHTLAST,
+                                     AppFrame::OnEdit)
+    EVT_MENU (myID_DISPLAYEOL,       AppFrame::OnEdit)
+    EVT_MENU (myID_INDENTGUIDE,      AppFrame::OnEdit)
+    EVT_MENU (myID_LINENUMBER,       AppFrame::OnEdit)
+    EVT_MENU (myID_LONGLINEON,       AppFrame::OnEdit)
+    EVT_MENU (myID_WHITESPACE,       AppFrame::OnEdit)
+    EVT_MENU (myID_FOLDTOGGLE,       AppFrame::OnEdit)
+    EVT_MENU (myID_OVERTYPE,         AppFrame::OnEdit)
+    EVT_MENU (myID_READONLY,         AppFrame::OnEdit)
+    EVT_MENU (myID_WRAPMODEON,       AppFrame::OnEdit)
+    // extra
+    EVT_MENU (myID_CHANGELOWER,      AppFrame::OnEdit)
+    EVT_MENU (myID_CHANGEUPPER,      AppFrame::OnEdit)
+    EVT_MENU (myID_CONVERTCR,        AppFrame::OnEdit)
+    EVT_MENU (myID_CONVERTCRLF,      AppFrame::OnEdit)
+    EVT_MENU (myID_CONVERTLF,        AppFrame::OnEdit)
+    EVT_MENU (myID_CHARSETANSI,      AppFrame::OnEdit)
+    EVT_MENU (myID_CHARSETMAC,       AppFrame::OnEdit)
+    // help
+    EVT_MENU (wxID_ABOUT,            AppFrame::OnAbout)
+END_EVENT_TABLE ()
+
+AppFrame::AppFrame (const wxString &title)
+        : wxFrame ((wxFrame *)NULL, -1, title, wxDefaultPosition, wxSize(600,400),
+                    wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE) {
+
+    // intitialize important variables
+    m_edit = NULL;
+
+    // set icon and background
+    SetTitle (*g_appname);
+    SetIcon (wxICON (mondrian));
+    SetBackgroundColour (_T("WHITE"));
+
+    // about box shown for 1 seconds
+    AppAbout (this, 1000);
+
+    // create menu
+    m_menuBar = new wxMenuBar;
+    CreateMenu ();
+
+    // open first page
+    m_edit = new Edit (this, -1);
+    m_edit->SetFocus();
 
 
-#if wxUSE_STATUSBAR
-    CreateStatusBar(2);
-    SetStatusText(_T("Testing wxStyledTextCtrl"));
-#endif // wxUSE_STATUSBAR
+}
 
 
+AppFrame::~AppFrame () {
+}
 
 
-    //----------------------------------------
-    // Setup the editor
-    ed = new MySTC(this, ID_ED);
+// common event handlers
+void AppFrame::OnClose (wxCloseEvent &event) {
+    wxCommandEvent evt;
+    OnFileClose (evt);
+    if (m_edit && m_edit->Modified()) {
+        if (event.CanVeto()) event.Veto (true);
+        return;
+    }
+    Destroy();
 }
 
 }
 
+void AppFrame::OnAbout (wxCommandEvent &WXUNUSED(event)) {
+    AppAbout (this);
+}
 
 
-// event handlers
+void AppFrame::OnExit (wxCommandEvent &WXUNUSED(event)) {
+    Close (true);
+}
 
 
-void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
-{
-    // TRUE is to force the frame to close
-    Close(TRUE);
-}
-
-void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
-{
-    wxString msg;
-    msg.Printf( _T("Testing wxStyledTextCtrl...\n"));
-
-    wxMessageBox(msg, _T("About This Test"), wxOK | wxICON_INFORMATION, this);
-}
-
-
-//----------------------------------------------------------------------
-
-wxChar* keywords =
-_T("asm auto bool break case catch char class const \
-const_cast continue default delete do double \
-dynamic_cast else enum explicit export extern \
-false float for friend goto if inline int long \
-mutable namespace new operator private protected \
-public register reinterpret_cast return short signed \
-sizeof static static_cast struct switch template this \
-throw true try typedef typeid typename union unsigned \
-using virtual void volatile wchar_t while");
-
-
-
-MySTC::MySTC(wxWindow *parent, wxWindowID id,
-             const wxPoint& pos, const wxSize& size,
-             long style)
-    : wxStyledTextCtrl(parent, id, pos, size, style)
-{
-    // Default font
-    wxFont font(10, wxMODERN, wxNORMAL, wxNORMAL);
-    StyleSetFont(wxSTC_STYLE_DEFAULT, font);
-    StyleClearAll();
-
-    StyleSetForeground(0,  wxColour(0x80, 0x80, 0x80));
-    StyleSetForeground(1,  wxColour(0x00, 0x7f, 0x00));
-    //StyleSetForeground(2,  wxColour(0x00, 0x7f, 0x00));
-    StyleSetForeground(3,  wxColour(0x7f, 0x7f, 0x7f));
-    StyleSetForeground(4,  wxColour(0x00, 0x7f, 0x7f));
-    StyleSetForeground(5,  wxColour(0x00, 0x00, 0x7f));
-    StyleSetForeground(6,  wxColour(0x7f, 0x00, 0x7f));
-    StyleSetForeground(7,  wxColour(0x7f, 0x00, 0x7f));
-    StyleSetForeground(8,  wxColour(0x00, 0x7f, 0x7f));
-    StyleSetForeground(9,  wxColour(0x7f, 0x7f, 0x7f));
-    StyleSetForeground(10, wxColour(0x00, 0x00, 0x00));
-    StyleSetForeground(11, wxColour(0x00, 0x00, 0x00));
-    StyleSetBold(5,  TRUE);
-    StyleSetBold(10, TRUE);
-
-#ifdef __WXMSW__
-    StyleSetSpec(2, _T("fore:#007f00,bold,face:Arial,size:9"));
-#else
-    StyleSetSpec(2, _T("fore:#007f00,bold,face:Helvetica,size:9"));
-#endif
+// file event handlers
+void AppFrame::OnFileOpen (wxCommandEvent &WXUNUSED(event)) {
+    if (!m_edit) return;
+    wxString fname;
+    wxFileDialog dlg (this, _T("Open file"), _T(""), _T(""), _T("Any file (*)|*"),
+                      wxOPEN | wxFILE_MUST_EXIST | wxCHANGE_DIR);
+    if (dlg.ShowModal() != wxID_OK) return;
+    fname = dlg.GetPath ();
+    FileOpen (fname);
+}
+
+void AppFrame::OnFileSave (wxCommandEvent &WXUNUSED(event)) {
+    if (!m_edit) return;
+    if (!m_edit->Modified()) {
+        wxMessageBox (_("There is nothing to save!"), _("Save file"),
+                      wxOK | wxICON_EXCLAMATION);
+        return;
+    }
+    m_edit->SaveFile ();
+}
 
 
-    // give it some text to play with
-    wxString st;
-    wxFileInputStream stream(wxT("stctest.cpp"));
-    size_t sz = stream.GetSize();
-    char* buf = new char[sz + 1];
-    stream.Read((void*) buf, stream.GetSize());
-    buf[sz] = 0;
-    st = wxString::FromAscii(buf);
-    delete[] buf;
-
-    InsertText(0, st);
-    EmptyUndoBuffer();
-
-    SetLexer(wxSTC_LEX_CPP);
-    SetKeyWords(0, keywords);
-}
-
-void MySTC::OnKeyPressed(wxKeyEvent& evt)
-{
-    if (CallTipActive())
-        CallTipCancel();
-
-    int key = evt.GetKeyCode();
-    if ( key == WXK_SPACE && evt.ControlDown()) {
-        int pos = GetCurrentPos();
-
-        if (evt.ShiftDown()) {
-            // show how to do CallTips
-            CallTipSetBackground(wxColour(_T("YELLOW")));
-            CallTipShow(pos, _T("lots of of text: blah, blah, blah\n\n\
-show some suff, maybe parameters..\n\n\
-fubar(param1, param2)"));
+void AppFrame::OnFileSaveAs (wxCommandEvent &WXUNUSED(event)) {
+    if (!m_edit) return;
+    wxString filename = wxEmptyString;
+    wxFileDialog dlg (this, _T("Save file"), _T(""), _T(""), _T("Any file (*)|*"), wxSAVE|wxOVERWRITE_PROMPT);
+    if (dlg.ShowModal() != wxID_OK) return;
+    filename = dlg.GetPath();
+    m_edit->SaveFile (filename);
+}
+
+void AppFrame::OnFileClose (wxCommandEvent &WXUNUSED(event)) {
+    if (!m_edit) return;
+    if (m_edit->Modified()) {
+        if (wxMessageBox (_("Text is not saved, save before closing?"), _("Close"),
+                          wxYES_NO | wxICON_QUESTION) == wxYES) {
+            m_edit->SaveFile();
+            if (m_edit->Modified()) {
+                wxMessageBox (_("Text could not be saved!"), _("Close abort"),
+                              wxOK | wxICON_EXCLAMATION);
+                return;
+            }
         }
         }
-        else {
-            // show how to do AutoComplete
-            AutoCompSetIgnoreCase(false);
-            AutoCompShow(0, keywords);   // reuse the keyword list here
-            // normally you would build a string of completion texts...
+    }
+}
+
+// properties event handlers
+void AppFrame::OnProperties (wxCommandEvent &WXUNUSED(event)) {
+    if (!m_edit) return;
+    EditProperties (m_edit, 0);
+}
+
+// print event handlers
+void AppFrame::OnPrintSetup (wxCommandEvent &WXUNUSED(event)) {
+    (*g_pageSetupData) = * g_printData;
+    wxPageSetupDialog pageSetupDialog(this, g_pageSetupData);
+    pageSetupDialog.ShowModal();
+    (*g_printData) = pageSetupDialog.GetPageSetupData().GetPrintData();
+    (*g_pageSetupData) = pageSetupDialog.GetPageSetupData();
+}
+
+void AppFrame::OnPrintPreview (wxCommandEvent &WXUNUSED(event)) {
+    wxPrintDialogData printDialogData( *g_printData);
+    wxPrintPreview *preview =
+        new wxPrintPreview (new EditPrint (m_edit),
+                            new EditPrint (m_edit),
+                            &printDialogData);
+    if (!preview->Ok()) {
+        delete preview;
+        wxMessageBox (_("There was a problem with previewing.\n\
+                         Perhaps your current printer is not correctly?"),
+                      _("Previewing"), wxOK);
+        return;
+    }
+    wxRect rect = DeterminePrintSize();
+    wxPreviewFrame *frame = new wxPreviewFrame (preview, this, _("Print Preview"));
+    frame->SetSize (rect);
+    frame->Centre(wxBOTH);
+    frame->Initialize();
+    frame->Show(true);
+}
+
+void AppFrame::OnPrint (wxCommandEvent &WXUNUSED(event)) {
+    wxPrintDialogData printDialogData( *g_printData);
+    wxPrinter printer (&printDialogData);
+    EditPrint printout (m_edit);
+    if (!printer.Print (this, &printout, true)) {
+        if (wxPrinter::GetLastError() == wxPRINTER_ERROR) {
+        wxMessageBox (_("There was a problem with printing.\n\
+                         Perhaps your current printer is not correctly?"),
+                      _("Previewing"), wxOK);
+            return;
         }
     }
         }
     }
-    else
-        evt.Skip();
+    (*g_printData) = printer.GetPrintDialogData().GetPrintData();
+}
+
+// edit events
+void AppFrame::OnEdit (wxCommandEvent &event) {
+    if (m_edit) m_edit->ProcessEvent (event);
+}
+
+// private functions
+void AppFrame::CreateMenu () {
+
+    // File menu
+    wxMenu *menuFile = new wxMenu;
+    menuFile->Append (wxID_OPEN, _("&Open ..\tCtrl+O"));
+    menuFile->Append (wxID_SAVE, _("&Save\tCtrl+S"));
+    menuFile->Append (wxID_SAVEAS, _("Save &as ..\tCtrl+Shift+S"));
+    menuFile->Append (wxID_CLOSE, _("&Close\tCtrl+W"));
+    menuFile->AppendSeparator();
+    menuFile->Append (myID_PROPERTIES, _("Proper&ties ..\tCtrl+I"));
+    menuFile->AppendSeparator();
+    menuFile->Append (wxID_PRINT_SETUP, _("Print Set&up .."));
+    menuFile->Append (wxID_PREVIEW, _("Print Pre&view\tCtrl+Shift+P"));
+    menuFile->Append (wxID_PRINT, _("&Print ..\tCtrl+P"));
+    menuFile->AppendSeparator();
+    menuFile->Append (wxID_EXIT, _("&Quit\tCtrl+Q"));
+
+    // Edit menu
+    wxMenu *menuEdit = new wxMenu;
+    menuEdit->Append (wxID_UNDO, _("&Undo\tCtrl+Z"));
+    menuEdit->Append (wxID_REDO, _("&Redo\tCtrl+Shift+Z"));
+    menuEdit->AppendSeparator();
+    menuEdit->Append (wxID_CUT, _("Cu&t\tCtrl+X"));
+    menuEdit->Append (wxID_COPY, _("&Copy\tCtrl+C"));
+    menuEdit->Append (wxID_PASTE, _("&Paste\tCtrl+V"));
+    menuEdit->Append (wxID_CLEAR, _("&Delete\tDel"));
+    menuEdit->AppendSeparator();
+    menuEdit->Append (wxID_FIND, _("&Find\tCtrl+F"));
+    menuEdit->Enable (wxID_FIND, false);
+    menuEdit->Append (myID_FINDNEXT, _("Find &next\tF3"));
+    menuEdit->Enable (myID_FINDNEXT, false);
+    menuEdit->Append (myID_REPLACE, _("&Replace\tCtrl+H"));
+    menuEdit->Enable (myID_REPLACE, false);
+    menuEdit->Append (myID_REPLACENEXT, _("Replace &again\tShift+F4"));
+    menuEdit->Enable (myID_REPLACENEXT, false);
+    menuEdit->AppendSeparator();
+    menuEdit->Append (myID_BRACEMATCH, _("&Match brace\tCtrl+M"));
+    menuEdit->Append (myID_GOTO, _("&Goto\tCtrl+G"));
+    menuEdit->Enable (myID_GOTO, false);
+    menuEdit->AppendSeparator();
+    menuEdit->Append (myID_INDENTINC, _("&Indent increase\tTab"));
+    menuEdit->Append (myID_INDENTRED, _("I&ndent reduce\tBksp"));
+    menuEdit->AppendSeparator();
+    menuEdit->Append (wxID_SELECTALL, _("&Select all\tCtrl+A"));
+    menuEdit->Append (myID_SELECTLINE, _("Select &line\tCtrl+L"));
+
+    // hilight submenu
+    wxMenu *menuHilight = new wxMenu;
+    int Nr;
+    for (Nr = 0; Nr < g_LanguagePrefsSize; Nr++) {
+        menuHilight->Append (myID_HILIGHTFIRST + Nr,
+                             g_LanguagePrefs [Nr].name);
+    }
+
+    // charset submenu
+    wxMenu *menuCharset = new wxMenu;
+    menuCharset->Append (myID_CHARSETANSI, _("&ANSI (Windows)"));
+    menuCharset->Append (myID_CHARSETMAC, _("&MAC (Macintosh)"));
+
+    // View menu
+    wxMenu *menuView = new wxMenu;
+    menuView->Append (myID_HILIGHTLANG, _("&Hilight language .."), menuHilight);
+    menuView->AppendSeparator();
+    menuView->AppendCheckItem (myID_FOLDTOGGLE, _("&Toggle current fold\tCtrl+T"));
+    menuView->AppendCheckItem (myID_OVERTYPE, _("&Overwrite mode\tIns"));
+    menuView->AppendCheckItem (myID_WRAPMODEON, _("&Wrap mode\tCtrl+U"));
+    menuView->AppendSeparator();
+    menuView->AppendCheckItem (myID_DISPLAYEOL, _("Show line &endings"));
+    menuView->AppendCheckItem (myID_INDENTGUIDE, _("Show &indent guides"));
+    menuView->AppendCheckItem (myID_LINENUMBER, _("Show line &numbers"));
+    menuView->AppendCheckItem (myID_LONGLINEON, _("Show &long line marker"));
+    menuView->AppendCheckItem (myID_WHITESPACE, _("Show white&space"));
+    menuView->AppendSeparator();
+    menuView->Append (myID_USECHARSET, _("Use &code page of .."), menuCharset);
+
+    // change case submenu
+    wxMenu *menuChangeCase = new wxMenu;
+    menuChangeCase->Append (myID_CHANGEUPPER, _("&Upper case"));
+    menuChangeCase->Append (myID_CHANGELOWER, _("&Lower case"));
+
+    // convert EOL submenu
+    wxMenu *menuConvertEOL = new wxMenu;
+    menuConvertEOL->Append (myID_CONVERTCR, _("CR (&Linux)"));
+    menuConvertEOL->Append (myID_CONVERTCRLF, _("CR+LF (&Windows)"));
+    menuConvertEOL->Append (myID_CONVERTLF, _("LF (&Macintosh)"));
+
+    // Extra menu
+    wxMenu *menuExtra = new wxMenu;
+    menuExtra->AppendCheckItem (myID_READONLY, _("&Readonly mode"));
+    menuExtra->AppendSeparator();
+    menuExtra->Append (myID_CHANGECASE, _("Change &case to .."), menuChangeCase);
+    menuExtra->AppendSeparator();
+    menuExtra->Append (myID_CONVERTEOL, _("Convert line &endings to .."), menuConvertEOL);
+
+    // Window menu
+    wxMenu *menuWindow = new wxMenu;
+    menuWindow->Append (myID_PAGEPREV, _("&Previous\tCtrl+Shift+Tab"));
+    menuWindow->Append (myID_PAGENEXT, _("&Next\tCtrl+Tab"));
+
+    // Help menu
+    wxMenu *menuHelp = new wxMenu;
+    menuHelp->Append (wxID_ABOUT, _("&About ..\tShift+F1"));
+
+    // construct menu
+    m_menuBar->Append (menuFile, _("&File"));
+    m_menuBar->Append (menuEdit, _("&Edit"));
+    m_menuBar->Append (menuView, _("&View"));
+    m_menuBar->Append (menuExtra, _("E&xtra"));
+    m_menuBar->Append (menuWindow, _("&Window"));
+    m_menuBar->Append (menuHelp, _("&Help"));
+    SetMenuBar (m_menuBar);
+
+}
+
+void AppFrame::FileOpen (wxString fname) {
+    wxFileName w(fname); w.Normalize(); fname = w.GetFullPath();
+    m_edit->LoadFile (fname);
 }
 }
+
+wxRect AppFrame::DeterminePrintSize () {
+
+    wxSize scr = wxGetDisplaySize();
+
+    // determine position and size (shifting 16 left and down)
+    wxRect rect = GetRect();
+    rect.x += 16;
+    rect.y += 16;
+    rect.width = wxMin (rect.width, (scr.x - rect.x));
+    rect.height = wxMin (rect.height, (scr.x - rect.y));
+
+    return rect;
+}
+
+
+//----------------------------------------------------------------------------
+// AppAbout
+//----------------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE (AppAbout, wxDialog)
+    EVT_TIMER (myID_ABOUTTIMER, AppAbout::OnTimerEvent)
+END_EVENT_TABLE ()
+
+AppAbout::AppAbout (wxWindow *parent,
+                    int milliseconds,
+                    long style)
+        : wxDialog (parent, -1, wxEmptyString,
+                    wxDefaultPosition, wxDefaultSize,
+                    wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) {
+
+    // set timer if any
+    m_timer = NULL;
+    if (milliseconds > 0) {
+        m_timer = new wxTimer (this, myID_ABOUTTIMER);
+        m_timer->Start (milliseconds, wxTIMER_ONE_SHOT);
+    }
+
+    // sets the application title
+    SetTitle (_("About .."));
+
+    // about info
+    wxGridSizer *aboutinfo = new wxGridSizer (2, 0, 2);
+    aboutinfo->Add (new wxStaticText(this, -1, _("Written by: ")),
+                    0, wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, APP_MAINT),
+                    1, wxEXPAND | wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, _("Version: ")),
+                    0, wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, APP_VERSION),
+                    1, wxEXPAND | wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, _("Licence type: ")),
+                    0, wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, APP_LICENCE),
+                    1, wxEXPAND | wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, _("Copyright: ")),
+                    0, wxALIGN_LEFT);
+    aboutinfo->Add (new wxStaticText(this, -1, APP_COPYRIGTH),
+                    1, wxEXPAND | wxALIGN_LEFT);
+
+    // about icontitle//info
+    wxBoxSizer *aboutpane = new wxBoxSizer (wxHORIZONTAL);
+    wxBitmap bitmap = wxBitmap(wxICON (mondrian));
+    aboutpane->Add (new wxStaticBitmap (this, -1, bitmap),
+                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 20);
+    aboutpane->Add (aboutinfo, 1, wxEXPAND);
+    aboutpane->Add (60, 0);
+
+    // about complete
+    wxBoxSizer *totalpane = new wxBoxSizer (wxVERTICAL);
+    totalpane->Add (0, 20);
+    wxStaticText *appname = new wxStaticText(this, -1, *g_appname);
+    appname->SetFont (wxFont (24, wxDEFAULT, wxNORMAL, wxBOLD));
+    totalpane->Add (appname, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, 40);
+    totalpane->Add (0, 10);
+    totalpane->Add (aboutpane, 0, wxEXPAND | wxALL, 4);
+    totalpane->Add (new wxStaticText(this, -1, APP_DESCR),
+                    0, wxALIGN_CENTER | wxALL, 10);
+    wxButton *okButton = new wxButton (this, wxID_OK, _("OK"));
+    okButton->SetDefault();
+    totalpane->Add (okButton, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT | wxBOTTOM, 10);
+
+    SetSizerAndFit (totalpane);
+
+    CenterOnScreen();    
+    ShowModal();
+}
+
+AppAbout::~AppAbout () {
+    if (m_timer)  {
+        delete m_timer;
+        m_timer = NULL;
+    }
+}
+
+//----------------------------------------------------------------------------
+// event handlers
+void AppAbout::OnTimerEvent (wxTimerEvent &event) {
+    if (m_timer) delete m_timer;
+    m_timer = NULL;
+    EndModal (wxID_OK);
+}
+
index cb9fdbea9650843bd1620b041e865675230fe436..ed4c03064876109818646100e63a71fd201b7258 100644 (file)
@@ -468,6 +468,14 @@ LINK32=link.exe
 # PROP Default_Filter ""
 # Begin Source File
 
 # PROP Default_Filter ""
 # Begin Source File
 
+SOURCE=.\edit.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\prefs.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=.\..\..\..\samples\sample.rc
 # End Source File
 # Begin Source File
 SOURCE=.\..\..\..\samples\sample.rc
 # End Source File
 # Begin Source File
index b86c4e2265cb0b7085f7319decb80a328250643b..2eeca79368b8dbff6e11ce60d0d3ad822115e341 100644 (file)
@@ -1 +1,5 @@
+mondrian ICON "mondrian.ico"
 #include "wx/msw/wx.rc"
 #include "wx/msw/wx.rc"
+
+print BITMAP "bitmaps/print.bmp"
+
index e104fd7cd04509d4428bc3fc5ae6ce51780dc1b5..a2fad49cb4f6ea6dc200200e208b002bbd4ae795 100644 (file)
@@ -80,14 +80,18 @@ STCDLL_OBJECTS =  \
        stcdll_LexLisp.o \
        stcdll_LexLout.o \
        stcdll_LexLua.o \
        stcdll_LexLisp.o \
        stcdll_LexLout.o \
        stcdll_LexLua.o \
+       stcdll_LexMMIXAL.o \
        stcdll_LexMatlab.o \
        stcdll_LexMatlab.o \
+       stcdll_LexNsis.o \
        stcdll_LexOthers.o \
        stcdll_LexPOV.o \
        stcdll_LexOthers.o \
        stcdll_LexPOV.o \
+       stcdll_LexPS.o \
        stcdll_LexPascal.o \
        stcdll_LexPerl.o \
        stcdll_LexPython.o \
        stcdll_LexRuby.o \
        stcdll_LexSQL.o \
        stcdll_LexPascal.o \
        stcdll_LexPerl.o \
        stcdll_LexPython.o \
        stcdll_LexRuby.o \
        stcdll_LexSQL.o \
+       stcdll_LexScriptol.o \
        stcdll_LexVB.o \
        stcdll_LineMarker.o \
        stcdll_PropSet.o \
        stcdll_LexVB.o \
        stcdll_LineMarker.o \
        stcdll_PropSet.o \
@@ -134,14 +138,18 @@ STCLIB_OBJECTS =  \
        stclib_LexLisp.o \
        stclib_LexLout.o \
        stclib_LexLua.o \
        stclib_LexLisp.o \
        stclib_LexLout.o \
        stclib_LexLua.o \
+       stclib_LexMMIXAL.o \
        stclib_LexMatlab.o \
        stclib_LexMatlab.o \
+       stclib_LexNsis.o \
        stclib_LexOthers.o \
        stclib_LexPOV.o \
        stclib_LexOthers.o \
        stclib_LexPOV.o \
+       stclib_LexPS.o \
        stclib_LexPascal.o \
        stclib_LexPerl.o \
        stclib_LexPython.o \
        stclib_LexRuby.o \
        stclib_LexSQL.o \
        stclib_LexPascal.o \
        stclib_LexPerl.o \
        stclib_LexPython.o \
        stclib_LexRuby.o \
        stclib_LexSQL.o \
+       stclib_LexScriptol.o \
        stclib_LexVB.o \
        stclib_LineMarker.o \
        stclib_PropSet.o \
        stclib_LexVB.o \
        stclib_LineMarker.o \
        stclib_PropSet.o \
@@ -378,15 +386,24 @@ stcdll_LexLout.o: $(srcdir)/scintilla/src/LexLout.cxx
 stcdll_LexLua.o: $(srcdir)/scintilla/src/LexLua.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexLua.o: $(srcdir)/scintilla/src/LexLua.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
+stcdll_LexMMIXAL.o: $(srcdir)/scintilla/src/LexMMIXAL.cxx
+       $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
+
 stcdll_LexMatlab.o: $(srcdir)/scintilla/src/LexMatlab.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexMatlab.o: $(srcdir)/scintilla/src/LexMatlab.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
+stcdll_LexNsis.o: $(srcdir)/scintilla/src/LexNsis.cxx
+       $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
+
 stcdll_LexOthers.o: $(srcdir)/scintilla/src/LexOthers.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexPOV.o: $(srcdir)/scintilla/src/LexPOV.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexOthers.o: $(srcdir)/scintilla/src/LexOthers.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexPOV.o: $(srcdir)/scintilla/src/LexPOV.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
+stcdll_LexPS.o: $(srcdir)/scintilla/src/LexPS.cxx
+       $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
+
 stcdll_LexPascal.o: $(srcdir)/scintilla/src/LexPascal.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexPascal.o: $(srcdir)/scintilla/src/LexPascal.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
@@ -402,6 +419,9 @@ stcdll_LexRuby.o: $(srcdir)/scintilla/src/LexRuby.cxx
 stcdll_LexSQL.o: $(srcdir)/scintilla/src/LexSQL.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexSQL.o: $(srcdir)/scintilla/src/LexSQL.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
+stcdll_LexScriptol.o: $(srcdir)/scintilla/src/LexScriptol.cxx
+       $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
+
 stcdll_LexVB.o: $(srcdir)/scintilla/src/LexVB.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
 stcdll_LexVB.o: $(srcdir)/scintilla/src/LexVB.cxx
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $<
 
@@ -530,15 +550,24 @@ stclib_LexLout.o: $(srcdir)/scintilla/src/LexLout.cxx
 stclib_LexLua.o: $(srcdir)/scintilla/src/LexLua.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexLua.o: $(srcdir)/scintilla/src/LexLua.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
+stclib_LexMMIXAL.o: $(srcdir)/scintilla/src/LexMMIXAL.cxx
+       $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
+
 stclib_LexMatlab.o: $(srcdir)/scintilla/src/LexMatlab.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexMatlab.o: $(srcdir)/scintilla/src/LexMatlab.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
+stclib_LexNsis.o: $(srcdir)/scintilla/src/LexNsis.cxx
+       $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
+
 stclib_LexOthers.o: $(srcdir)/scintilla/src/LexOthers.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexPOV.o: $(srcdir)/scintilla/src/LexPOV.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexOthers.o: $(srcdir)/scintilla/src/LexOthers.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexPOV.o: $(srcdir)/scintilla/src/LexPOV.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
+stclib_LexPS.o: $(srcdir)/scintilla/src/LexPS.cxx
+       $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
+
 stclib_LexPascal.o: $(srcdir)/scintilla/src/LexPascal.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexPascal.o: $(srcdir)/scintilla/src/LexPascal.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
@@ -554,6 +583,9 @@ stclib_LexRuby.o: $(srcdir)/scintilla/src/LexRuby.cxx
 stclib_LexSQL.o: $(srcdir)/scintilla/src/LexSQL.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexSQL.o: $(srcdir)/scintilla/src/LexSQL.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
+stclib_LexScriptol.o: $(srcdir)/scintilla/src/LexScriptol.cxx
+       $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
+
 stclib_LexVB.o: $(srcdir)/scintilla/src/LexVB.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
 stclib_LexVB.o: $(srcdir)/scintilla/src/LexVB.cxx
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $<
 
index 7bda5100eb02db0182e1b41bf5561bd8fbc9b25e..859d11ce9aba8767013670ae0806bcbcf44a2139 100644 (file)
@@ -288,7 +288,7 @@ void SurfaceImpl::Init(SurfaceID hdc_, WindowID) {
     hdc = (wxDC*)hdc_;
 }
 
     hdc = (wxDC*)hdc_;
 }
 
-void SurfaceImpl::InitPixMap(int width, int height, Surface *surface_, WindowID) {
+void SurfaceImpl::InitPixMap(int width, int height, Surface *WXUNUSED(surface_), WindowID) {
     Release();
     hdc = new wxMemoryDC();
     hdcOwned = true;
     Release();
     hdc = new wxMemoryDC();
     hdcOwned = true;
@@ -542,7 +542,7 @@ int SurfaceImpl::Descent(Font &font) {
     return d;
 }
 
     return d;
 }
 
-int SurfaceImpl::InternalLeading(Font &font) {
+int SurfaceImpl::InternalLeading(Font &WXUNUSED(font)) {
     return 0;
 }
 
     return 0;
 }
 
@@ -563,7 +563,7 @@ int SurfaceImpl::AverageCharWidth(Font &font) {
     return hdc->GetCharWidth();
 }
 
     return hdc->GetCharWidth();
 }
 
-int SurfaceImpl::SetPalette(Palette *pal, bool inBackGround) {
+int SurfaceImpl::SetPalette(Palette *WXUNUSED(pal), bool WXUNUSED(inBackGround)) {
     return 0;
 }
 
     return 0;
 }
 
@@ -578,7 +578,7 @@ void SurfaceImpl::SetUnicodeMode(bool unicodeMode_) {
     unicodeMode=unicodeMode_;
 }
 
     unicodeMode=unicodeMode_;
 }
 
-void SurfaceImpl::SetDBCSMode(int codePage) {
+void SurfaceImpl::SetDBCSMode(int WXUNUSED(codePage)) {
     // dbcsMode = codePage == SC_CP_DBCS;
 }
 
     // dbcsMode = codePage == SC_CP_DBCS;
 }
 
@@ -969,7 +969,7 @@ int ListBoxImpl::GetSelection() {
 }
 
 
 }
 
 
-int ListBoxImpl::Find(const char *prefix) {
+int ListBoxImpl::Find(const char *WXUNUSED(prefix)) {
     // No longer used
     return -1;
 }
     // No longer used
     return -1;
 }
@@ -1063,7 +1063,7 @@ void Menu::Show(Point pt, Window &w) {
 
 //----------------------------------------------------------------------
 
 
 //----------------------------------------------------------------------
 
-DynamicLibrary *DynamicLibrary::Load(const char *modulePath) {
+DynamicLibrary *DynamicLibrary::Load(const char *WXUNUSED(modulePath)) {
     wxFAIL_MSG(wxT("Dynamic lexer loading not implemented yet"));
     return NULL;
 }
     wxFAIL_MSG(wxT("Dynamic lexer loading not implemented yet"));
     return NULL;
 }
@@ -1103,7 +1103,7 @@ void Platform::DebugDisplay(const char *s) {
     wxLogDebug(stc2wx(s));
 }
 
     wxLogDebug(stc2wx(s));
 }
 
-bool Platform::IsKeyDown(int key) {
+bool Platform::IsKeyDown(int WXUNUSED(key)) {
     return false;  // I don't think we'll need this.
 }
 
     return false;  // I don't think we'll need this.
 }
 
@@ -1196,11 +1196,11 @@ int Platform::Clamp(int val, int minVal, int maxVal) {
 }
 
 
 }
 
 
-bool Platform::IsDBCSLeadByte(int codePage, char ch) {
+bool Platform::IsDBCSLeadByte(int WXUNUSED(codePage), char WXUNUSED(ch)) {
     return false;
 }
 
     return false;
 }
 
-int Platform::DBCSCharLength(int codePage, const char *s) {
+int Platform::DBCSCharLength(int WXUNUSED(codePage), const char *WXUNUSED(s)) {
     return 1;
 }
 
     return 1;
 }
 
index 3e5ebf0aa601b080725de47a78aae96f1b384435..f294cd6ba2f24c96583333f99f387952b1c67859 100644 (file)
@@ -383,7 +383,8 @@ bool ScintillaWX::CanPaste() {
     bool didOpen;
 
     if (Editor::CanPaste()) {
     bool didOpen;
 
     if (Editor::CanPaste()) {
-        if ( (didOpen = !wxTheClipboard->IsOpened()) )
+        didOpen = !wxTheClipboard->IsOpened();
+        if ( didOpen )
             wxTheClipboard->Open();
 
         if (wxTheClipboard->IsOpened()) {
             wxTheClipboard->Open();
 
         if (wxTheClipboard->IsOpened()) {
@@ -597,7 +598,7 @@ void ScintillaWX::DoMouseWheel(int rotation, int delta,
 }
 
 
 }
 
 
-void ScintillaWX::DoSize(int width, int height) {
+void ScintillaWX::DoSize(int WXUNUSED(width), int WXUNUSED(height)) {
 //      PRectangle rcClient(0,0,width,height);
 //      SetScrollBarsTo(rcClient);
 //      DropGraphics();
 //      PRectangle rcClient(0,0,width,height);
 //      SetScrollBarsTo(rcClient);
 //      DropGraphics();
@@ -628,8 +629,8 @@ void ScintillaWX::DoLeftButtonMove(Point pt) {
     ButtonMove(pt);
 }
 
     ButtonMove(pt);
 }
 
-void ScintillaWX::DoMiddleButtonUp(Point pt) {
 #ifdef __WXGTK__
 #ifdef __WXGTK__
+void ScintillaWX::DoMiddleButtonUp(Point pt) {
     // Set the current position to the mouse click point and
     // then paste in the PRIMARY selection, if any.  wxGTK only.
     int newPos = PositionFromLocation(pt);
     // Set the current position to the mouse click point and
     // then paste in the PRIMARY selection, if any.  wxGTK only.
     int newPos = PositionFromLocation(pt);
@@ -656,8 +657,11 @@ void ScintillaWX::DoMiddleButtonUp(Point pt) {
 
     ShowCaretAtCurrentPosition();
     EnsureCaretVisible();
 
     ShowCaretAtCurrentPosition();
     EnsureCaretVisible();
-#endif
 }
 }
+#else
+void ScintillaWX::DoMiddleButtonUp(Point WXUNUSED(pt)) {
+}
+#endif
 
 
 void ScintillaWX::DoAddChar(int key) {
 
 
 void ScintillaWX::DoAddChar(int key) {
@@ -673,9 +677,10 @@ void ScintillaWX::DoAddChar(int key) {
 }
 
 
 }
 
 
-int  ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* consumed) {
+int  ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool meta, bool* consumed) {
 #if defined(__WXGTK__) || defined(__WXMAC__)
 #if defined(__WXGTK__) || defined(__WXMAC__)
-    // Ctrl chars (A-Z) end up with the wrong keycode on wxGTK...
+    // Ctrl chars (A-Z) end up with the wrong keycode on wxGTK
+    // TODO:  Check this, it shouldn't be true any longer.
     if (ctrl && key >= 1 && key <= 26)
         key += 'A' - 1;
 #endif
     if (ctrl && key >= 1 && key <= 26)
         key += 'A' - 1;
 #endif
@@ -709,6 +714,21 @@ int  ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* cons
     case WXK_MENU:              key = 0; break;
     }
 
     case WXK_MENU:              key = 0; break;
     }
 
+#ifdef __WXMAC__
+    if ( meta ) {
+        // check for a few common Mac Meta-key combos and remap them to Ctrl
+        // for Scintilla
+        switch ( key ) {
+        case 'Z':       // Undo
+        case 'X':       // Cut
+        case 'C':       // Copy
+        case 'V':       // Paste
+        case 'A':       // Select All
+            ctrl = true;
+            break;
+        }                
+#endif
+    
     int rv = KeyDown(key, shift, ctrl, alt, consumed);
 
     if (key)
     int rv = KeyDown(key, shift, ctrl, alt, consumed);
 
     if (key)
@@ -760,7 +780,7 @@ bool ScintillaWX::DoDropText(long x, long y, const wxString& data) {
 }
 
 
 }
 
 
-wxDragResult ScintillaWX::DoDragEnter(wxCoord x, wxCoord y, wxDragResult def) {
+wxDragResult ScintillaWX::DoDragEnter(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), wxDragResult def) {
     dragResult = def;
     return dragResult;
 }
     dragResult = def;
     return dragResult;
 }
@@ -817,8 +837,8 @@ void ScintillaWX::DoScrollToColumn(int column) {
     HorizontalScrollTo(column * vs.spaceWidth);
 }
 
     HorizontalScrollTo(column * vs.spaceWidth);
 }
 
-void ScintillaWX::ClipChildren(wxDC& dc, PRectangle rect) {
 #ifdef __WXGTK__
 #ifdef __WXGTK__
+void ScintillaWX::ClipChildren(wxDC& dc, PRectangle rect) {
     wxRegion rgn(wxRectFromPRectangle(rect));
     if (ac.Active()) {
         wxRect childRect = ((wxWindow*)ac.lb->GetID())->GetRect();
     wxRegion rgn(wxRectFromPRectangle(rect));
     if (ac.Active()) {
         wxRect childRect = ((wxWindow*)ac.lb->GetID())->GetRect();
@@ -830,9 +850,11 @@ void ScintillaWX::ClipChildren(wxDC& dc, PRectangle rect) {
     }
 
     dc.SetClippingRegion(rgn);
     }
 
     dc.SetClippingRegion(rgn);
-#endif
 }
 }
-
+#else
+void ScintillaWX::ClipChildren(wxDC& WXUNUSED(dc), PRectangle WXUNUSED(rect)) {
+}
+#endif
 
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
 
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
index 3784f26254f93948d7aa3950c4edd970ff1e9c60..2a6c5b5dbd92ea4f529051533682d23179b14b87 100644 (file)
@@ -139,7 +139,7 @@ public:
     void DoMiddleButtonUp(Point pt);
     void DoMouseWheel(int rotation, int delta, int linesPerAction, int ctrlDown, bool isPageScroll);
     void DoAddChar(int key);
     void DoMiddleButtonUp(Point pt);
     void DoMouseWheel(int rotation, int delta, int linesPerAction, int ctrlDown, bool isPageScroll);
     void DoAddChar(int key);
-    int  DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* consumed);
+    int  DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool meta, bool* consumed);
     void DoTick() { Tick(); }
 
 #if wxUSE_DRAG_AND_DROP
     void DoTick() { Tick(); }
 
 #if wxUSE_DRAG_AND_DROP
index d88aae231bc64d1d357d9b21528b379d9bc3b229..aa9432d377e9be65ad2fa3b19618e28436339056 100644 (file)
@@ -547,9 +547,12 @@ methodOverrideMap = {
 
 
     'GrabFocus' : (None, 0, 0, 0),
 
 
     'GrabFocus' : (None, 0, 0, 0),
+
+    # Rename some that woudl otherwise hid the wxWindow methods
     'SetFocus'  : ('SetSTCFocus', 0, 0, 0),
     'GetFocus'  : ('GetSTCFocus', 0, 0, 0),
     'SetFocus'  : ('SetSTCFocus', 0, 0, 0),
     'GetFocus'  : ('GetSTCFocus', 0, 0, 0),
-
+    'SetCursor' : ('SetSTCCursor', 0, 0, 0),
+    'GetCursor' : ('GetSTCCursor', 0, 0, 0),
 
     'LoadLexerLibrary' : (None, 0,0,0),
 
 
     'LoadLexerLibrary' : (None, 0,0,0),
 
index bba521448edeccdec80c79562152a0ff2fb3ac18..1960be5d3ddedce5e6188b5775e85b4cd5559f36 100644 (file)
@@ -3,4 +3,4 @@ scintilla/include directories from the Scintilla/SCiTE source
 distribution.  All other code needed to implement Scintilla on top of
 wxWindows is located in the directory above this one.
 
 distribution.  All other code needed to implement Scintilla on top of
 wxWindows is located in the directory above this one.
 
-The current version of the Scintilla code is 1.53
+The current version of the Scintilla code is 1.54
index 3f59c07939bad89bbb469d31eb992912022e6b92..0b2c4baee25cb8a8bc1768adf22a05c9a5fe2358 100644 (file)
@@ -25,7 +25,7 @@ protected:
        char buf[bufferSize+1];
        int startPos;
        int endPos;
        char buf[bufferSize+1];
        int startPos;
        int endPos;
-       int codePage;
+       int codePage;   
 
        virtual bool InternalIsLeadByte(char ch)=0;
        virtual void Fill(int position)=0;
 
        virtual bool InternalIsLeadByte(char ch)=0;
        virtual void Fill(int position)=0;
@@ -44,7 +44,7 @@ public:
                if (position < startPos || position >= endPos) {
                        Fill(position);
                        if (position < startPos || position >= endPos) {
                if (position < startPos || position >= endPos) {
                        Fill(position);
                        if (position < startPos || position >= endPos) {
-                               // Position is outside range of document
+                               // Position is outside range of document 
                                return chDefault;
                        }
                }
                                return chDefault;
                        }
                }
index c51c88ef594b090d6323ac316f73d04651170b1c..df4e870c580f507203f57f61f2cc58a7af04a2fe 100644 (file)
@@ -7,7 +7,7 @@
 
 typedef void (*LexerFunction)(unsigned int startPos, int lengthDoc, int initStyle,
                   WordList *keywordlists[], Accessor &styler);
 
 typedef void (*LexerFunction)(unsigned int startPos, int lengthDoc, int initStyle,
                   WordList *keywordlists[], Accessor &styler);
-
+                  
 /**
  * A LexerModule is responsible for lexing and folding a particular language.
  * The class maintains a list of LexerModules which can be searched to find a
 /**
  * A LexerModule is responsible for lexing and folding a particular language.
  * The class maintains a list of LexerModules which can be searched to find a
@@ -26,7 +26,7 @@ protected:
 
 public:
        const char *languageName;
 
 public:
        const char *languageName;
-       LexerModule(int language_, LexerFunction fnLexer_,
+       LexerModule(int language_, LexerFunction fnLexer_, 
                const char *languageName_=0, LexerFunction fnFolder_=0,
                const char * const wordListDescriptions_[] = NULL);
        int GetLanguage() const { return language; }
                const char *languageName_=0, LexerFunction fnFolder_=0,
                const char * const wordListDescriptions_[] = NULL);
        int GetLanguage() const { return language; }
index 1a7e2f166536cfb248906cd498759354430f5a51..20ac5f774ac3ed8fdacf5d9b8ad01cea1295f5b4 100644 (file)
@@ -24,11 +24,21 @@ struct Property {
 /**
  */
 class PropSet {
 /**
  */
 class PropSet {
-private:
+protected:
        enum { hashRoots=31 };
        Property *props[hashRoots];
        Property *enumnext;
        int enumhash;
        enum { hashRoots=31 };
        Property *props[hashRoots];
        Property *enumnext;
        int enumhash;
+       static unsigned int HashString(const char *s, size_t len) {
+               unsigned int ret = 0;
+               while (len--) {
+                       ret <<= 4;
+                       ret ^= *s;
+                       s++;
+               }
+               return ret;
+       }
+       static bool IncludesVar(const char *value, const char *key);
 public:
        PropSet *superPS;
        PropSet();
 public:
        PropSet *superPS;
        PropSet();
index edf4bd0d2478a49d7582da041f273c51b7c48a1f..34867542f9a8bf7d55771a58c60c30ae5884fce0 100644 (file)
@@ -56,6 +56,9 @@
 #define SCLEX_POV 39
 #define SCLEX_LOUT 40
 #define SCLEX_ESCRIPT 41
 #define SCLEX_POV 39
 #define SCLEX_LOUT 40
 #define SCLEX_ESCRIPT 41
+#define SCLEX_PS 42
+#define SCLEX_NSIS 43
+#define SCLEX_MMIXAL 44
 #define SCLEX_AUTOMATIC 1000
 #define SCE_P_DEFAULT 0
 #define SCE_P_COMMENTLINE 1
 #define SCLEX_AUTOMATIC 1000
 #define SCE_P_DEFAULT 0
 #define SCE_P_COMMENTLINE 1
 #define SCE_LUA_WORD4 15
 #define SCE_LUA_WORD5 16
 #define SCE_LUA_WORD6 17
 #define SCE_LUA_WORD4 15
 #define SCE_LUA_WORD5 16
 #define SCE_LUA_WORD6 17
+#define SCE_LUA_WORD7 18
+#define SCE_LUA_WORD8 19
 #define SCE_ERR_DEFAULT 0
 #define SCE_ERR_PYTHON 1
 #define SCE_ERR_GCC 2
 #define SCE_ERR_DEFAULT 0
 #define SCE_ERR_PYTHON 1
 #define SCE_ERR_GCC 2
 #define SCE_POV_DEFAULT 0
 #define SCE_POV_COMMENT 1
 #define SCE_POV_COMMENTLINE 2
 #define SCE_POV_DEFAULT 0
 #define SCE_POV_COMMENT 1
 #define SCE_POV_COMMENTLINE 2
-#define SCE_POV_COMMENTDOC 3
-#define SCE_POV_NUMBER 4
-#define SCE_POV_WORD 5
+#define SCE_POV_NUMBER 3
+#define SCE_POV_OPERATOR 4
+#define SCE_POV_IDENTIFIER 5
 #define SCE_POV_STRING 6
 #define SCE_POV_STRING 6
-#define SCE_POV_OPERATOR 7
-#define SCE_POV_IDENTIFIER 8
-#define SCE_POV_BRACE 9
+#define SCE_POV_STRINGEOL 7
+#define SCE_POV_DIRECTIVE 8
+#define SCE_POV_BADDIRECTIVE 9
 #define SCE_POV_WORD2 10
 #define SCE_POV_WORD2 10
+#define SCE_POV_WORD3 11
+#define SCE_POV_WORD4 12
+#define SCE_POV_WORD5 13
+#define SCE_POV_WORD6 14
+#define SCE_POV_WORD7 15
+#define SCE_POV_WORD8 16
 #define SCE_LOUT_DEFAULT 0
 #define SCE_LOUT_COMMENT 1
 #define SCE_LOUT_NUMBER 2
 #define SCE_LOUT_DEFAULT 0
 #define SCE_LOUT_COMMENT 1
 #define SCE_LOUT_NUMBER 2
 #define SCE_ESCRIPT_BRACE 9
 #define SCE_ESCRIPT_WORD2 10
 #define SCE_ESCRIPT_WORD3 11
 #define SCE_ESCRIPT_BRACE 9
 #define SCE_ESCRIPT_WORD2 10
 #define SCE_ESCRIPT_WORD3 11
+#define SCE_PS_DEFAULT 0
+#define SCE_PS_COMMENT 1
+#define SCE_PS_DSC_COMMENT 2
+#define SCE_PS_DSC_VALUE 3
+#define SCE_PS_NUMBER 4
+#define SCE_PS_NAME 5
+#define SCE_PS_KEYWORD 6
+#define SCE_PS_LITERAL 7
+#define SCE_PS_IMMEVAL 8
+#define SCE_PS_PAREN_ARRAY 9
+#define SCE_PS_PAREN_DICT 10
+#define SCE_PS_PAREN_PROC 11
+#define SCE_PS_TEXT 12
+#define SCE_PS_HEXSTRING 13
+#define SCE_PS_BASE85STRING 14
+#define SCE_PS_BADSTRINGCHAR 15
+#define SCE_NSIS_DEFAULT 0
+#define SCE_NSIS_COMMENT 1
+#define SCE_NSIS_STRINGDQ 2
+#define SCE_NSIS_STRINGLQ 3
+#define SCE_NSIS_STRINGRQ 4
+#define SCE_NSIS_FUNCTION 5
+#define SCE_NSIS_VARIABLE 6
+#define SCE_NSIS_LABEL 7
+#define SCE_NSIS_USERDEFINED 8
+#define SCE_NSIS_SECTIONDEF 9
+#define SCE_NSIS_SUBSECTIONDEF 10
+#define SCE_NSIS_IFDEFINEDEF 11
+#define SCE_NSIS_MACRODEF 12
+#define SCE_NSIS_STRINGVAR 13
+#define SCE_MMIXAL_LEADWS 0
+#define SCE_MMIXAL_COMMENT 1
+#define SCE_MMIXAL_LABEL 2
+#define SCE_MMIXAL_OPCODE 3
+#define SCE_MMIXAL_OPCODE_PRE 4
+#define SCE_MMIXAL_OPCODE_VALID 5
+#define SCE_MMIXAL_OPCODE_UNKNOWN 6
+#define SCE_MMIXAL_OPCODE_POST 7
+#define SCE_MMIXAL_OPERANDS 8
+#define SCE_MMIXAL_NUMBER 9
+#define SCE_MMIXAL_REF 10
+#define SCE_MMIXAL_CHAR 11
+#define SCE_MMIXAL_STRING 12
+#define SCE_MMIXAL_REGISTER 13
+#define SCE_MMIXAL_HEX 14
+#define SCE_MMIXAL_OPERATOR 15
+#define SCE_MMIXAL_SYMBOL 16
+#define SCE_MMIXAL_INCLUDE 17
 //--Autogenerated -- end of section automatically generated from Scintilla.iface
 
 #endif
 //--Autogenerated -- end of section automatically generated from Scintilla.iface
 
 #endif
index 250f793142b885bc75588c8dcdec876a7f969b40..34893c89382b259f7964bb35be47b628ae2ca81f 100644 (file)
@@ -204,6 +204,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
 #define INDIC_TT 2
 #define INDIC_DIAGONAL 3
 #define INDIC_STRIKE 4
 #define INDIC_TT 2
 #define INDIC_DIAGONAL 3
 #define INDIC_STRIKE 4
+#define INDIC_HIDDEN 5
 #define INDIC0_MASK 0x20
 #define INDIC1_MASK 0x40
 #define INDIC2_MASK 0x80
 #define INDIC0_MASK 0x20
 #define INDIC1_MASK 0x40
 #define INDIC2_MASK 0x80
@@ -546,6 +547,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
 #define SCI_GETLEXER 4002
 #define SCI_COLOURISE 4003
 #define SCI_SETPROPERTY 4004
 #define SCI_GETLEXER 4002
 #define SCI_COLOURISE 4003
 #define SCI_SETPROPERTY 4004
+#define KEYWORDSET_MAX 8
 #define SCI_SETKEYWORDS 4005
 #define SCI_SETLEXERLANGUAGE 4006
 #define SCI_LOADLEXERLIBRARY 4007
 #define SCI_SETKEYWORDS 4005
 #define SCI_SETLEXERLANGUAGE 4006
 #define SCI_LOADLEXERLIBRARY 4007
index 2ac0b66f5037c478861b2ad75add2980948547be..9ca4ad539a10e6143c5935e26fc2bc1b3db5176c 100644 (file)
@@ -462,6 +462,7 @@ val INDIC_SQUIGGLE=1
 val INDIC_TT=2
 val INDIC_DIAGONAL=3
 val INDIC_STRIKE=4
 val INDIC_TT=2
 val INDIC_DIAGONAL=3
 val INDIC_STRIKE=4
+val INDIC_HIDDEN=5
 val INDIC0_MASK=0x20
 val INDIC1_MASK=0x40
 val INDIC2_MASK=0x80
 val INDIC0_MASK=0x20
 val INDIC1_MASK=0x40
 val INDIC2_MASK=0x80
@@ -1476,6 +1477,9 @@ fun void Colourise=4003(position start, position end)
 # Set up a value that may be used by a lexer for some optional feature.
 set void SetProperty=4004(string key, string value)
 
 # Set up a value that may be used by a lexer for some optional feature.
 set void SetProperty=4004(string key, string value)
 
+# Maximum value of keywordSet parameter of SetKeyWords.
+val KEYWORDSET_MAX=8
+
 # Set up the key words used by the lexer.
 set void SetKeyWords=4005(int keywordSet, string keyWords)
 
 # Set up the key words used by the lexer.
 set void SetKeyWords=4005(int keywordSet, string keyWords)
 
@@ -1584,6 +1588,9 @@ val SCLEX_CSS=38
 val SCLEX_POV=39
 val SCLEX_LOUT=40
 val SCLEX_ESCRIPT=41
 val SCLEX_POV=39
 val SCLEX_LOUT=40
 val SCLEX_ESCRIPT=41
+val SCLEX_PS=42
+val SCLEX_NSIS=43
+val SCLEX_MMIXAL=44
 
 # When a lexer specifies its language as SCLEX_AUTOMATIC it receives a
 # value assigned in sequence from SCLEX_AUTOMATIC+1.
 
 # When a lexer specifies its language as SCLEX_AUTOMATIC it receives a
 # value assigned in sequence from SCLEX_AUTOMATIC+1.
@@ -1835,6 +1842,8 @@ val SCE_LUA_WORD3=14
 val SCE_LUA_WORD4=15
 val SCE_LUA_WORD5=16
 val SCE_LUA_WORD6=17
 val SCE_LUA_WORD4=15
 val SCE_LUA_WORD5=16
 val SCE_LUA_WORD6=17
+val SCE_LUA_WORD7=18
+val SCE_LUA_WORD8=19
 # Lexical states for SCLEX_ERRORLIST
 lex ErrorList=SCLEX_ERRORLIST SCE_ERR_
 val SCE_ERR_DEFAULT=0
 # Lexical states for SCLEX_ERRORLIST
 lex ErrorList=SCLEX_ERRORLIST SCE_ERR_
 val SCE_ERR_DEFAULT=0
@@ -2058,14 +2067,20 @@ lex POV=SCLEX_POV SCE_POV_
 val SCE_POV_DEFAULT=0
 val SCE_POV_COMMENT=1
 val SCE_POV_COMMENTLINE=2
 val SCE_POV_DEFAULT=0
 val SCE_POV_COMMENT=1
 val SCE_POV_COMMENTLINE=2
-val SCE_POV_COMMENTDOC=3
-val SCE_POV_NUMBER=4
-val SCE_POV_WORD=5
+val SCE_POV_NUMBER=3
+val SCE_POV_OPERATOR=4
+val SCE_POV_IDENTIFIER=5
 val SCE_POV_STRING=6
 val SCE_POV_STRING=6
-val SCE_POV_OPERATOR=7
-val SCE_POV_IDENTIFIER=8
-val SCE_POV_BRACE=9
+val SCE_POV_STRINGEOL=7
+val SCE_POV_DIRECTIVE=8
+val SCE_POV_BADDIRECTIVE=9
 val SCE_POV_WORD2=10
 val SCE_POV_WORD2=10
+val SCE_POV_WORD3=11
+val SCE_POV_WORD4=12
+val SCE_POV_WORD5=13
+val SCE_POV_WORD6=14
+val SCE_POV_WORD7=15
+val SCE_POV_WORD8=16
 # Lexical states for SCLEX_LOUT
 lex LOUT=SCLEX_LOUT SCE_LOUT_
 val SCE_LOUT_DEFAULT=0
 # Lexical states for SCLEX_LOUT
 lex LOUT=SCLEX_LOUT SCE_LOUT_
 val SCE_LOUT_DEFAULT=0
@@ -2093,6 +2108,60 @@ val SCE_ESCRIPT_IDENTIFIER=8
 val SCE_ESCRIPT_BRACE=9
 val SCE_ESCRIPT_WORD2=10
 val SCE_ESCRIPT_WORD3=11
 val SCE_ESCRIPT_BRACE=9
 val SCE_ESCRIPT_WORD2=10
 val SCE_ESCRIPT_WORD3=11
+# Lexical states for SCLEX_PS
+lex PS=SCLEX_PS SCE_PS_
+val SCE_PS_DEFAULT=0
+val SCE_PS_COMMENT=1
+val SCE_PS_DSC_COMMENT=2
+val SCE_PS_DSC_VALUE=3
+val SCE_PS_NUMBER=4
+val SCE_PS_NAME=5
+val SCE_PS_KEYWORD=6
+val SCE_PS_LITERAL=7
+val SCE_PS_IMMEVAL=8
+val SCE_PS_PAREN_ARRAY=9
+val SCE_PS_PAREN_DICT=10
+val SCE_PS_PAREN_PROC=11
+val SCE_PS_TEXT=12
+val SCE_PS_HEXSTRING=13
+val SCE_PS_BASE85STRING=14
+val SCE_PS_BADSTRINGCHAR=15
+# Lexical states for SCLEX_NSIS
+lex NSIS=SCLEX_NSIS SCE_NSIS_
+val SCE_NSIS_DEFAULT=0
+val SCE_NSIS_COMMENT=1
+val SCE_NSIS_STRINGDQ=2
+val SCE_NSIS_STRINGLQ=3
+val SCE_NSIS_STRINGRQ=4
+val SCE_NSIS_FUNCTION=5
+val SCE_NSIS_VARIABLE=6
+val SCE_NSIS_LABEL=7
+val SCE_NSIS_USERDEFINED=8
+val SCE_NSIS_SECTIONDEF=9
+val SCE_NSIS_SUBSECTIONDEF=10
+val SCE_NSIS_IFDEFINEDEF=11
+val SCE_NSIS_MACRODEF=12
+val SCE_NSIS_STRINGVAR=13
+# Lexical states for SCLEX_MMIXAL
+lex MMIXAL=SCLEX_MMIXAL SCE_MMIXAL_
+val SCE_MMIXAL_LEADWS=0
+val SCE_MMIXAL_COMMENT=1
+val SCE_MMIXAL_LABEL=2
+val SCE_MMIXAL_OPCODE=3
+val SCE_MMIXAL_OPCODE_PRE=4
+val SCE_MMIXAL_OPCODE_VALID=5
+val SCE_MMIXAL_OPCODE_UNKNOWN=6
+val SCE_MMIXAL_OPCODE_POST=7
+val SCE_MMIXAL_OPERANDS=8
+val SCE_MMIXAL_NUMBER=9
+val SCE_MMIXAL_REF=10
+val SCE_MMIXAL_CHAR=11
+val SCE_MMIXAL_STRING=12
+val SCE_MMIXAL_REGISTER=13
+val SCE_MMIXAL_HEX=14
+val SCE_MMIXAL_OPERATOR=15
+val SCE_MMIXAL_SYMBOL=16
+val SCE_MMIXAL_INCLUDE=17
 
 # Events
 
 
 # Events
 
index 43246050170cf5efd355f9e5a38648d772e3ddeb..6c16b150f267751c1cc38f2e2213b9d934a64da8 100644 (file)
@@ -26,8 +26,8 @@ protected:
        bool InternalIsLeadByte(char ch);
        void Fill(int position);
 public:
        bool InternalIsLeadByte(char ch);
        void Fill(int position);
 public:
-       WindowAccessor(WindowID id_, PropSet &props_) :
-               Accessor(), id(id_), props(props_),
+       WindowAccessor(WindowID id_, PropSet &props_) : 
+               Accessor(), id(id_), props(props_), 
                lenDoc(-1), validLen(0), chFlags(0), chWhile(0) {
        }
        ~WindowAccessor();
                lenDoc(-1), validLen(0), chFlags(0), chWhile(0) {
        }
        ~WindowAccessor();
@@ -40,8 +40,8 @@ public:
        void Flush();
        int GetLineState(int line);
        int SetLineState(int line, int state);
        void Flush();
        int GetLineState(int line);
        int SetLineState(int line, int state);
-       int GetPropertyInt(const char *key, int defaultValue=0) {
-               return props.GetInt(key, defaultValue);
+       int GetPropertyInt(const char *key, int defaultValue=0) { 
+               return props.GetInt(key, defaultValue); 
        }
        char *GetProperties() {
                return props.ToString();
        }
        char *GetProperties() {
                return props.ToString();
index 8f292869d743ed28d3bfc7aaf6f9c3c5de2953b6..6dae67507527f33fa135e9042e3993ccfba24ff5 100644 (file)
@@ -103,9 +103,9 @@ void MarkerHandleSet::RemoveNumber(int markerNum) {
                if (mhn->number == markerNum) {
                        *pmhn = mhn->next;
                        delete mhn;
                if (mhn->number == markerNum) {
                        *pmhn = mhn->next;
                        delete mhn;
-                       return ;
+               } else {
+                       pmhn = &((*pmhn)->next);
                }
                }
-               pmhn = &((*pmhn)->next);
        }
 }
 
        }
 }
 
index 2866d548cb808560373c6d7040c495a0ae277020..5cfcbfe1f01fcaac2f1601f029401227dc187f4c 100644 (file)
@@ -212,7 +212,7 @@ public:
        int GetMark(int line);
        void DeleteAllMarks(int markerNum);
        int LineFromHandle(int markerHandle);
        int GetMark(int line);
        void DeleteAllMarks(int markerNum);
        int LineFromHandle(int markerHandle);
-
        /// Actions without undo
        void BasicInsertString(int position, char *s, int insertLength);
        void BasicDeleteChars(int position, int deleteLength);
        /// Actions without undo
        void BasicInsertString(int position, char *s, int insertLength);
        void BasicDeleteChars(int position, int deleteLength);
index 98fc6b330ca986d3ed15b0d556bdf7f9784d09f3..487262f8add4bad246193af66d17025bb6eebb64 100644 (file)
@@ -394,7 +394,7 @@ bool Document::InsertStyledString(int position, char *s, int insertLength) {
                            DocModification(
                                SC_MOD_BEFOREINSERT | SC_PERFORMED_USER,
                                position / 2, insertLength / 2,
                            DocModification(
                                SC_MOD_BEFOREINSERT | SC_PERFORMED_USER,
                                position / 2, insertLength / 2,
-                               0, 0));
+                               0, s));
                        int prevLinesTotal = LinesTotal();
                        bool startSavePoint = cb.IsSavePoint();
                        const char *text = cb.InsertString(position, s, insertLength);
                        int prevLinesTotal = LinesTotal();
                        bool startSavePoint = cb.IsSavePoint();
                        const char *text = cb.InsertString(position, s, insertLength);
@@ -926,7 +926,7 @@ long Document::FindText(int minPos, int maxPos, const char *s,
                                if (line == lineRangeStart) {
                                        if ((startPos != endOfLine) && (searchEnd == '$'))
                                                continue;       // Can't match end of line if start position before end of line
                                if (line == lineRangeStart) {
                                        if ((startPos != endOfLine) && (searchEnd == '$'))
                                                continue;       // Can't match end of line if start position before end of line
-                                       endOfLine = startPos;
+                                       endOfLine = startPos+1;
                                }
                        }
 
                                }
                        }
 
@@ -938,10 +938,10 @@ long Document::FindText(int minPos, int maxPos, const char *s,
                                if (increment == -1) {
                                        // Check for the last match on this line.
                                        int repetitions = 1000; // Break out of infinite loop
                                if (increment == -1) {
                                        // Check for the last match on this line.
                                        int repetitions = 1000; // Break out of infinite loop
-                                       while (success && (pre->eopat[0] < endOfLine) && (repetitions--)) {
-                                               success = pre->Execute(di, pre->eopat[0], endOfLine);
+                                       while (success && (pre->eopat[0] <= (endOfLine+1)) && (repetitions--)) {
+                                               success = pre->Execute(di, pos+1, endOfLine+1);
                                                if (success) {
                                                if (success) {
-                                                       if (pre->eopat[0] <= minPos) {
+                                                       if (pre->eopat[0] <= (minPos+1)) {
                                                                pos = pre->bopat[0];
                                                                lenRet = pre->eopat[0] - pre->bopat[0];
                                                        } else {
                                                                pos = pre->bopat[0];
                                                                lenRet = pre->eopat[0] - pre->bopat[0];
                                                        } else {
index b7902df35a1bfc02e764275f2709879440507f3c..738eca7a07695a3f6be0e9ecb1dbd4fe189f7f94 100644 (file)
@@ -130,8 +130,8 @@ void DocumentAccessor::Flush() {
        lenDoc = -1;
        if (validLen > 0) {
                pdoc->SetStyles(validLen, styleBuf);
        lenDoc = -1;
        if (validLen > 0) {
                pdoc->SetStyles(validLen, styleBuf);
-               validLen = 0;
                startPosStyling += validLen;
                startPosStyling += validLen;
+               validLen = 0;
        }
 }
 
        }
 }
 
index f6523c94f995c1ce37a20ec1b65917b420aefc93..dc591d13ec3142c08216f5451b18e752db0fb6e1 100644 (file)
@@ -32,9 +32,9 @@ protected:
        void Fill(int position);
 
 public:
        void Fill(int position);
 
 public:
-       DocumentAccessor(Document *pdoc_, PropSet &props_, WindowID id_=0) :
+       DocumentAccessor(Document *pdoc_, PropSet &props_, WindowID id_=0) : 
                Accessor(), pdoc(pdoc_), props(props_), id(id_),
                Accessor(), pdoc(pdoc_), props(props_), id(id_),
-               lenDoc(-1), validLen(0), chFlags(0), chWhile(0),
+               lenDoc(-1), validLen(0), chFlags(0), chWhile(0), 
                startSeg(0), startPosStyling(0) {
        }
        ~DocumentAccessor();
                startSeg(0), startPosStyling(0) {
        }
        ~DocumentAccessor();
@@ -47,8 +47,8 @@ public:
        void Flush();
        int GetLineState(int line);
        int SetLineState(int line, int state);
        void Flush();
        int GetLineState(int line);
        int SetLineState(int line, int state);
-       int GetPropertyInt(const char *key, int defaultValue=0) {
-               return props.GetInt(key, defaultValue);
+       int GetPropertyInt(const char *key, int defaultValue=0) { 
+               return props.GetInt(key, defaultValue); 
        }
        char *GetProperties() {
                return props.ToString();
        }
        char *GetProperties() {
                return props.ToString();
index cc53f5aac85cdea2e0f00ef5b502dc96f92f14df..df260ed5126ba79716a43a99638dbeb7ac53bd50 100644 (file)
@@ -1414,7 +1414,7 @@ void Editor::LinesSplit(int pixelWidth) {
                                for (int subLine = 1; subLine < ll->lines; subLine++) {
                                        pdoc->InsertString(posLineStart + (subLine - 1) * strlen(eol) +
                                                ll->LineStart(subLine), eol);
                                for (int subLine = 1; subLine < ll->lines; subLine++) {
                                        pdoc->InsertString(posLineStart + (subLine - 1) * strlen(eol) +
                                                ll->LineStart(subLine), eol);
-                                       targetEnd += strlen(eol);
+                                       targetEnd += static_cast<int>(strlen(eol));
                                }
                        }
                }
                                }
                        }
                }
@@ -1428,6 +1428,12 @@ int Editor::SubstituteMarkerIfEmpty(int markerCheck, int markerDefault) {
        return markerCheck;
 }
 
        return markerCheck;
 }
 
+// Avoid 64 bit compiler warnings.
+// Scintilla does not support text buffers larger than 2**31
+static int istrlen(const char *s) {
+       return static_cast<int>(strlen(s));
+}
+
 void Editor::PaintSelMargin(Surface *surfWindow, PRectangle &rc) {
        if (vs.fixedColumnWidth == 0)
                return;
 void Editor::PaintSelMargin(Surface *surfWindow, PRectangle &rc) {
        if (vs.fixedColumnWidth == 0)
                return;
@@ -1589,11 +1595,11 @@ void Editor::PaintSelMargin(Surface *surfWindow, PRectangle &rc) {
                                        }
                                        PRectangle rcNumber = rcMarker;
                                        // Right justify
                                        }
                                        PRectangle rcNumber = rcMarker;
                                        // Right justify
-                                       int width = surface->WidthText(vs.styles[STYLE_LINENUMBER].font, number, strlen(number));
+                                       int width = surface->WidthText(vs.styles[STYLE_LINENUMBER].font, number, istrlen(number));
                                        int xpos = rcNumber.right - width - 3;
                                        rcNumber.left = xpos;
                                        surface->DrawTextNoClip(rcNumber, vs.styles[STYLE_LINENUMBER].font,
                                        int xpos = rcNumber.right - width - 3;
                                        rcNumber.left = xpos;
                                        surface->DrawTextNoClip(rcNumber, vs.styles[STYLE_LINENUMBER].font,
-                                                               rcNumber.top + vs.maxAscent, number, strlen(number),
+                                                               rcNumber.top + vs.maxAscent, number, istrlen(number),
                                                                vs.styles[STYLE_LINENUMBER].fore.allocated,
                                                                vs.styles[STYLE_LINENUMBER].back.allocated);
                                }
                                                                vs.styles[STYLE_LINENUMBER].fore.allocated,
                                                                vs.styles[STYLE_LINENUMBER].back.allocated);
                                }
@@ -1770,7 +1776,7 @@ void Editor::LayoutLine(int line, Surface *surface, ViewStyle &vstyle, LineLayou
                                                } else if (controlCharSymbol < 32) {
                                                        const char *ctrlChar = ControlCharacterString(ll->chars[charInLine]);
                                                        // +3 For a blank on front and rounded edge each side:
                                                } else if (controlCharSymbol < 32) {
                                                        const char *ctrlChar = ControlCharacterString(ll->chars[charInLine]);
                                                        // +3 For a blank on front and rounded edge each side:
-                                                       ll->positions[charInLine + 1] = surface->WidthText(ctrlCharsFont, ctrlChar, strlen(ctrlChar)) + 3;
+                                                       ll->positions[charInLine + 1] = surface->WidthText(ctrlCharsFont, ctrlChar, istrlen(ctrlChar)) + 3;
                                                } else {
                                                        char cc[2] = { static_cast<char>(controlCharSymbol), '\0' };
                                                        surface->MeasureWidths(ctrlCharsFont, cc, 1,
                                                } else {
                                                        char cc[2] = { static_cast<char>(controlCharSymbol), '\0' };
                                                        surface->MeasureWidths(ctrlCharsFont, cc, 1,
@@ -2135,7 +2141,7 @@ void Editor::DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int lineVis
                                                rcChar.left++;
                                                rcChar.right--;
                                                surface->DrawTextClipped(rcChar, ctrlCharsFont,
                                                rcChar.left++;
                                                rcChar.right--;
                                                surface->DrawTextClipped(rcChar, ctrlCharsFont,
-                                                                        rcSegment.top + vsDraw.maxAscent, ctrlChar, strlen(ctrlChar),
+                                                                        rcSegment.top + vsDraw.maxAscent, ctrlChar, istrlen(ctrlChar),
                                                                         textBack, textFore);
                                        } else {
                                                char cc[2] = { static_cast<char>(controlCharSymbol), '\0' };
                                                                         textBack, textFore);
                                        } else {
                                                char cc[2] = { static_cast<char>(controlCharSymbol), '\0' };
@@ -2360,7 +2366,9 @@ void Editor::Paint(Surface *surfaceWindow, PRectangle rcArea) {
                if (AbandonPaint()) {
                        return;
                }
                if (AbandonPaint()) {
                        return;
                }
+               RefreshPixMaps(surfaceWindow);  // In case pixmaps invalidated by scrollbar change
        }
        }
+       PLATFORM_ASSERT(pixmapSelPattern->Initialised());
 
        PRectangle rcRightMargin = rcClient;
        rcRightMargin.left = rcRightMargin.right - vs.rightMarginWidth;
 
        PRectangle rcRightMargin = rcClient;
        rcRightMargin.left = rcRightMargin.right - vs.rightMarginWidth;
@@ -2389,6 +2397,7 @@ void Editor::Paint(Surface *surfaceWindow, PRectangle rcArea) {
                Surface *surface = surfaceWindow;
                if (bufferedDraw) {
                        surface = pixmapLine;
                Surface *surface = surfaceWindow;
                if (bufferedDraw) {
                        surface = pixmapLine;
+                       PLATFORM_ASSERT(pixmapLine->Initialised());
                }
                surface->SetUnicodeMode(IsUnicodeMode());
                surface->SetDBCSMode(CodePage());
                }
                surface->SetUnicodeMode(IsUnicodeMode());
                surface->SetDBCSMode(CodePage());
@@ -2680,7 +2689,7 @@ long Editor::FormatRange(bool draw, RangeToFormat *pfr) {
        int lineNumberWidth = 0;
        if (lineNumberIndex >= 0) {
                lineNumberWidth = surfaceMeasure->WidthText(vsPrint.styles[STYLE_LINENUMBER].font,
        int lineNumberWidth = 0;
        if (lineNumberIndex >= 0) {
                lineNumberWidth = surfaceMeasure->WidthText(vsPrint.styles[STYLE_LINENUMBER].font,
-                                 "99999" lineNumberPrintSpace, 5 + strlen(lineNumberPrintSpace));
+                                 "99999" lineNumberPrintSpace, 5 + istrlen(lineNumberPrintSpace));
                vsPrint.ms[lineNumberIndex].width = lineNumberWidth;
        }
 
                vsPrint.ms[lineNumberIndex].width = lineNumberWidth;
        }
 
@@ -2760,10 +2769,10 @@ long Editor::FormatRange(bool draw, RangeToFormat *pfr) {
                        rcNumber.right = rcNumber.left + lineNumberWidth;
                        // Right justify
                        rcNumber.left -= surfaceMeasure->WidthText(
                        rcNumber.right = rcNumber.left + lineNumberWidth;
                        // Right justify
                        rcNumber.left -= surfaceMeasure->WidthText(
-                                            vsPrint.styles[STYLE_LINENUMBER].font, number, strlen(number));
+                                            vsPrint.styles[STYLE_LINENUMBER].font, number, istrlen(number));
                        surface->FlushCachedState();
                        surface->DrawTextNoClip(rcNumber, vsPrint.styles[STYLE_LINENUMBER].font,
                        surface->FlushCachedState();
                        surface->DrawTextNoClip(rcNumber, vsPrint.styles[STYLE_LINENUMBER].font,
-                                               ypos + vsPrint.maxAscent, number, strlen(number),
+                                               ypos + vsPrint.maxAscent, number, istrlen(number),
                                                vsPrint.styles[STYLE_LINENUMBER].fore.allocated,
                                                vsPrint.styles[STYLE_LINENUMBER].back.allocated);
                }
                                                vsPrint.styles[STYLE_LINENUMBER].fore.allocated,
                                                vsPrint.styles[STYLE_LINENUMBER].back.allocated);
                }
@@ -2799,7 +2808,7 @@ int Editor::TextWidth(int style, const char *text) {
        RefreshStyleData();
        AutoSurface surface(this);
        if (surface) {
        RefreshStyleData();
        AutoSurface surface(this);
        if (surface) {
-               return surface->WidthText(vs.styles[style].font, text, strlen(text));
+               return surface->WidthText(vs.styles[style].font, text, istrlen(text));
        } else {
                return 1;
        }
        } else {
                return 1;
        }
@@ -3553,7 +3562,7 @@ void Editor::LineDuplicate() {
        char *thisLine = CopyRange(start, end);
        const char *eol = StringFromEOLMode(pdoc->eolMode);
        pdoc->InsertString(end, eol);
        char *thisLine = CopyRange(start, end);
        const char *eol = StringFromEOLMode(pdoc->eolMode);
        pdoc->InsertString(end, eol);
-       pdoc->InsertString(end + strlen(eol), thisLine, end - start);
+       pdoc->InsertString(end + istrlen(eol), thisLine, end - start);
        delete []thisLine;
 }
 
        delete []thisLine;
 }
 
@@ -3568,7 +3577,7 @@ void Editor::NewLine() {
                eol = "\r";
        } // else SC_EOL_LF -> "\n" already set
        if (pdoc->InsertString(currentPos, eol)) {
                eol = "\r";
        } // else SC_EOL_LF -> "\n" already set
        if (pdoc->InsertString(currentPos, eol)) {
-               SetEmptySelection(currentPos + strlen(eol));
+               SetEmptySelection(currentPos + istrlen(eol));
                while (*eol) {
                        NotifyChar(*eol);
                        eol++;
                while (*eol) {
                        NotifyChar(*eol);
                        eol++;
@@ -4069,7 +4078,7 @@ long Editor::FindText(
     sptr_t lParam) {                   ///< @c TextToFind structure: The text to search for in the given range.
 
        TextToFind *ft = reinterpret_cast<TextToFind *>(lParam);
     sptr_t lParam) {                   ///< @c TextToFind structure: The text to search for in the given range.
 
        TextToFind *ft = reinterpret_cast<TextToFind *>(lParam);
-       int lengthFound = strlen(ft->lpstrText);
+       int lengthFound = istrlen(ft->lpstrText);
        int pos = pdoc->FindText(ft->chrg.cpMin, ft->chrg.cpMax, ft->lpstrText,
                                 (wParam & SCFIND_MATCHCASE) != 0,
                                 (wParam & SCFIND_WHOLEWORD) != 0,
        int pos = pdoc->FindText(ft->chrg.cpMin, ft->chrg.cpMax, ft->lpstrText,
                                 (wParam & SCFIND_MATCHCASE) != 0,
                                 (wParam & SCFIND_WHOLEWORD) != 0,
@@ -4112,7 +4121,7 @@ long Editor::SearchText(
 
        const char *txt = reinterpret_cast<char *>(lParam);
        int pos;
 
        const char *txt = reinterpret_cast<char *>(lParam);
        int pos;
-       int lengthFound = strlen(txt);
+       int lengthFound = istrlen(txt);
        if (iMessage == SCI_SEARCHNEXT) {
                pos = pdoc->FindText(searchAnchor, pdoc->Length(), txt,
                                     (wParam & SCFIND_MATCHCASE) != 0,
        if (iMessage == SCI_SEARCHNEXT) {
                pos = pdoc->FindText(searchAnchor, pdoc->Length(), txt,
                                     (wParam & SCFIND_MATCHCASE) != 0,
@@ -4315,14 +4324,14 @@ void Editor::DropAt(int position, const char *value, bool moving, bool rectangul
                position = positionAfterDeletion;
 
                if (rectangular) {
                position = positionAfterDeletion;
 
                if (rectangular) {
-                       PasteRectangular(position, value, strlen(value));
+                       PasteRectangular(position, value, istrlen(value));
                        pdoc->EndUndoAction();
                        // Should try to select new rectangle but it may not be a rectangle now so just select the drop position
                        SetSelection(position, position);
                } else {
                        position = MovePositionOutsideChar(position, currentPos - position);
                        if (pdoc->InsertString(position, value)) {
                        pdoc->EndUndoAction();
                        // Should try to select new rectangle but it may not be a rectangle now so just select the drop position
                        SetSelection(position, position);
                } else {
                        position = MovePositionOutsideChar(position, currentPos - position);
                        if (pdoc->InsertString(position, value)) {
-                               SetSelection(position + strlen(value), position);
+                               SetSelection(position + istrlen(value), position);
                        }
                        pdoc->EndUndoAction();
                }
                        }
                        pdoc->EndUndoAction();
                }
@@ -4990,7 +4999,7 @@ void Editor::EnsureLineVisible(int lineDoc, bool enforcePolicy) {
 int Editor::ReplaceTarget(bool replacePatterns, const char *text, int length) {
        pdoc->BeginUndoAction();
        if (length == -1)
 int Editor::ReplaceTarget(bool replacePatterns, const char *text, int length) {
        pdoc->BeginUndoAction();
        if (length == -1)
-               length = strlen(text);
+               length = istrlen(text);
        if (replacePatterns) {
                text = pdoc->SubstituteByPosition(text, &length);
                if (!text)
        if (replacePatterns) {
                text = pdoc->SubstituteByPosition(text, &length);
                if (!text)
@@ -5186,7 +5195,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
                        char *replacement = CharPtrFromSPtr(lParam);
                        pdoc->InsertString(currentPos, replacement);
                        pdoc->EndUndoAction();
                        char *replacement = CharPtrFromSPtr(lParam);
                        pdoc->InsertString(currentPos, replacement);
                        pdoc->EndUndoAction();
-                       SetEmptySelection(currentPos + strlen(replacement));
+                       SetEmptySelection(currentPos + istrlen(replacement));
                        EnsureCaretVisible();
                }
                break;
                        EnsureCaretVisible();
                }
                break;
@@ -5357,7 +5366,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
                        char *sz = CharPtrFromSPtr(lParam);
                        pdoc->InsertString(insertPos, sz);
                        if (newCurrent > insertPos)
                        char *sz = CharPtrFromSPtr(lParam);
                        pdoc->InsertString(insertPos, sz);
                        if (newCurrent > insertPos)
-                               newCurrent += strlen(sz);
+                               newCurrent += istrlen(sz);
                        SetEmptySelection(newCurrent);
                        return 0;
                }
                        SetEmptySelection(newCurrent);
                        return 0;
                }
index 01d9ac71410d9b67c0e372d1ddd0600689e2eac3..6308fc28be4a4c83a8657f4d072286378e1e4c0c 100644 (file)
 
 #if PLAT_WIN
 #define EXT_LEXER_DECL __stdcall
 
 #if PLAT_WIN
 #define EXT_LEXER_DECL __stdcall
-#elif PLAT_GTK
-#define EXT_LEXER_DECL
-#endif
-
-#if PLAT_WX
-#ifdef __WXMSW__
-#define EXT_LEXER_DECL __stdcall
 #else
 #else
-#define EXT_LEXER_DECL
-#endif
+#define EXT_LEXER_DECL 
 #endif
 
 // External Lexer function definitions...
 #endif
 
 // External Lexer function definitions...
@@ -41,7 +33,7 @@ protected:
        int externalLanguage;
        char name[100];
 public:
        int externalLanguage;
        char name[100];
 public:
-       ExternalLexerModule(int language_, LexerFunction fnLexer_,
+       ExternalLexerModule(int language_, LexerFunction fnLexer_, 
                const char *languageName_=0, LexerFunction fnFolder_=0) : LexerModule(language_, fnLexer_, 0, fnFolder_){
                strncpy(name, languageName_, sizeof(name));
                languageName = name;
                const char *languageName_=0, LexerFunction fnFolder_=0) : LexerModule(language_, fnLexer_, 0, fnFolder_){
                strncpy(name, languageName_, sizeof(name));
                languageName = name;
@@ -70,7 +62,7 @@ public:
        LexerLibrary(const char* ModuleName);
        ~LexerLibrary();
        void Release();
        LexerLibrary(const char* ModuleName);
        ~LexerLibrary();
        void Release();
-
+       
        LexerLibrary    *next;
        SString                 m_sModuleName;
 };
        LexerLibrary    *next;
        SString                 m_sModuleName;
 };
@@ -79,10 +71,10 @@ public:
 class LexerManager {
 public:
        ~LexerManager();
 class LexerManager {
 public:
        ~LexerManager();
-
+       
        static LexerManager *GetInstance();
        static void DeleteInstance();
        static LexerManager *GetInstance();
        static void DeleteInstance();
-
+       
        void Load(const char* path);
        void Clear();
 
        void Load(const char* path);
        void Clear();
 
index 580e9f86da9e34cbd0615d607bd394a87d1752cd..1e386b68e30111ba6aba6b0ade58898dad9ca0b1 100644 (file)
@@ -55,6 +55,8 @@ void Indicator::Draw(Surface *surface, PRectangle &rc) {
        } else if (style == INDIC_STRIKE) {
                surface->MoveTo(rc.left, rc.top - 4);
                surface->LineTo(rc.right, rc.top - 4);
        } else if (style == INDIC_STRIKE) {
                surface->MoveTo(rc.left, rc.top - 4);
                surface->LineTo(rc.right, rc.top - 4);
+       } else if (style == INDIC_HIDDEN) {
+               // Draw nothing
        } else {        // Either INDIC_PLAIN or unknown
                surface->MoveTo(rc.left, ymid);
                surface->LineTo(rc.right, ymid);
        } else {        // Either INDIC_PLAIN or unknown
                surface->MoveTo(rc.left, ymid);
                surface->LineTo(rc.right, ymid);
index 8fb51bdb764ea66c13dbabffefbbc9f9f5603fa2..ae22baf2f27dc5b37f62fbd1012745f0e65a2b40 100644 (file)
@@ -153,6 +153,8 @@ int Scintilla_LinkLexers() {
        LINK_LEXER(lmLout);
        LINK_LEXER(lmLua);
        LINK_LEXER(lmMatlab);
        LINK_LEXER(lmLout);
        LINK_LEXER(lmLua);
        LINK_LEXER(lmMatlab);
+       LINK_LEXER(lmMMIXAL);
+       LINK_LEXER(lmNsis);
        LINK_LEXER(lmBatch);
        LINK_LEXER(lmDiff);
        LINK_LEXER(lmProps);
        LINK_LEXER(lmBatch);
        LINK_LEXER(lmDiff);
        LINK_LEXER(lmProps);
@@ -163,8 +165,10 @@ int Scintilla_LinkLexers() {
        LINK_LEXER(lmPascal);
        LINK_LEXER(lmPerl);
        LINK_LEXER(lmPOV);
        LINK_LEXER(lmPascal);
        LINK_LEXER(lmPerl);
        LINK_LEXER(lmPOV);
+       LINK_LEXER(lmPS);
        LINK_LEXER(lmPython);
        LINK_LEXER(lmRuby);
        LINK_LEXER(lmPython);
        LINK_LEXER(lmRuby);
+       LINK_LEXER(lmScriptol);
        LINK_LEXER(lmSQL);
        LINK_LEXER(lmVB);
        LINK_LEXER(lmVBScript);
        LINK_LEXER(lmSQL);
        LINK_LEXER(lmVB);
        LINK_LEXER(lmVBScript);
index 263f7da4564910053ca7f3259afe693cf2193f32..2e5f891b4b1fbf11757e5a1267ef0c022348420c 100644 (file)
@@ -321,7 +321,7 @@ static bool IsValidIdentifier(const SString& identifier) {
        // First character can't be '_', so initialize the flag to true
        bool lastWasUnderscore = true;
 
        // First character can't be '_', so initialize the flag to true
        bool lastWasUnderscore = true;
 
-       int length = identifier.length();
+       size_t length = identifier.length();
 
        // Zero-length identifiers are not valid (these can occur inside labels)
        if (length == 0) {
 
        // Zero-length identifiers are not valid (these can occur inside labels)
        if (length == 0) {
@@ -334,7 +334,7 @@ static bool IsValidIdentifier(const SString& identifier) {
        }
 
        // Check for only valid characters and no double underscores
        }
 
        // Check for only valid characters and no double underscores
-       for (int i = 0; i < length; i++) {
+       for (size_t i = 0; i < length; i++) {
                if (!IsWordCharacter(identifier[i]) ||
                        (identifier[i] == '_' && lastWasUnderscore)) {
                        return false;
                if (!IsWordCharacter(identifier[i]) ||
                        (identifier[i] == '_' && lastWasUnderscore)) {
                        return false;
@@ -355,8 +355,8 @@ static bool IsValidNumber(const SString& number) {
        int hashPos = number.search("#");
        bool seenDot = false;
 
        int hashPos = number.search("#");
        bool seenDot = false;
 
-       int i = 0;
-       int length = number.length();
+       size_t i = 0;
+       size_t length = number.length();
 
        if (length == 0)
                return false; // Just in case
 
        if (length == 0)
                return false; // Just in case
index b89f7ea8bb34bea37c4850afae417c3b05eaad8f..11daa142388d83d3080f53c7b878d8a3b4a1a281 100644 (file)
@@ -108,7 +108,8 @@ static void ColouriseCssDoc(unsigned int startPos, int length, int initStyle, Wo
                                        sc.SetState(SCE_CSS_DEFAULT);
                                break;
                        case ':':
                                        sc.SetState(SCE_CSS_DEFAULT);
                                break;
                        case ':':
-                               if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_DEFAULT || lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID)
+                               if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_DEFAULT ||
+                                       lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID || lastState == SCE_CSS_UNKNOWN_PSEUDOCLASS)
                                        sc.SetState(SCE_CSS_PSEUDOCLASS);
                                else if (lastState == SCE_CSS_IDENTIFIER || lastState == SCE_CSS_UNKNOWN_IDENTIFIER)
                                        sc.SetState(SCE_CSS_VALUE);
                                        sc.SetState(SCE_CSS_PSEUDOCLASS);
                                else if (lastState == SCE_CSS_IDENTIFIER || lastState == SCE_CSS_UNKNOWN_IDENTIFIER)
                                        sc.SetState(SCE_CSS_VALUE);
index 28e3b3b0de80e73ec5f52dce109b81877081e812..49411588aa50b8eb423d2148cd3e854456a67f10 100644 (file)
@@ -195,7 +195,7 @@ static void FoldESCRIPTDoc(unsigned int startPos, int length, int initStyle, Wor
                styleNext = styler.StyleAt(i + 1);
                bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
 
                styleNext = styler.StyleAt(i + 1);
                bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
 
-
+            
                if (foldComment && IsStreamCommentStyle(style)) {
                        if (!IsStreamCommentStyle(stylePrev)) {
                                levelCurrent++;
                if (foldComment && IsStreamCommentStyle(style)) {
                        if (!IsStreamCommentStyle(stylePrev)) {
                                levelCurrent++;
index 345b15edcb3b1c6c6a931d7340e8aae2fc996a1a..e442054b36275965101a3e0d0100ace166727639 100644 (file)
@@ -127,7 +127,7 @@ static int stateForPrintState(int StateToPrint) {
 }
 
 static inline bool IsNumber(unsigned int start, Accessor &styler) {
 }
 
 static inline bool IsNumber(unsigned int start, Accessor &styler) {
-       return isdigit(styler[start]) || (styler[start] == '.') ||
+       return IsADigit(styler[start]) || (styler[start] == '.') ||
               (styler[start] == '-') || (styler[start] == '#');
 }
 
               (styler[start] == '-') || (styler[start] == '#');
 }
 
@@ -246,7 +246,7 @@ static int classifyTagHTML(unsigned int start, unsigned int end,
 static void classifyWordHTJS(unsigned int start, unsigned int end,
                              WordList &keywords, Accessor &styler, script_mode inScriptType) {
        char chAttr = SCE_HJ_WORD;
 static void classifyWordHTJS(unsigned int start, unsigned int end,
                              WordList &keywords, Accessor &styler, script_mode inScriptType) {
        char chAttr = SCE_HJ_WORD;
-       bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
+       bool wordIsNumber = IsADigit(styler[start]) || (styler[start] == '.');
        if (wordIsNumber)
                chAttr = SCE_HJ_NUMBER;
        else {
        if (wordIsNumber)
                chAttr = SCE_HJ_NUMBER;
        else {
@@ -264,7 +264,7 @@ static void classifyWordHTJS(unsigned int start, unsigned int end,
 
 static int classifyWordHTVB(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, script_mode inScriptType) {
        char chAttr = SCE_HB_IDENTIFIER;
 
 static int classifyWordHTVB(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, script_mode inScriptType) {
        char chAttr = SCE_HB_IDENTIFIER;
-       bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
+       bool wordIsNumber = IsADigit(styler[start]) || (styler[start] == '.');
        if (wordIsNumber)
                chAttr = SCE_HB_NUMBER;
        else {
        if (wordIsNumber)
                chAttr = SCE_HB_NUMBER;
        else {
@@ -288,7 +288,7 @@ static int classifyWordHTVB(unsigned int start, unsigned int end, WordList &keyw
 }
 
 static void classifyWordHTPy(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, char *prevWord, script_mode inScriptType) {
 }
 
 static void classifyWordHTPy(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, char *prevWord, script_mode inScriptType) {
-       bool wordIsNumber = isdigit(styler[start]) != 0;
+       bool wordIsNumber = IsADigit(styler[start]);
        char s[30 + 1];
        unsigned int i = 0;
        for (; i < end - start + 1 && i < 30; i++) {
        char s[30 + 1];
        unsigned int i = 0;
        for (; i < end - start + 1 && i < 30; i++) {
@@ -312,7 +312,7 @@ static void classifyWordHTPy(unsigned int start, unsigned int end, WordList &key
 // Called when in a PHP word
 static void classifyWordHTPHP(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
        char chAttr = SCE_HPHP_DEFAULT;
 // Called when in a PHP word
 static void classifyWordHTPHP(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
        char chAttr = SCE_HPHP_DEFAULT;
-       bool wordIsNumber = isdigit(styler[start]) != 0;
+       bool wordIsNumber = IsADigit(styler[start]);
        if (wordIsNumber)
                chAttr = SCE_HPHP_NUMBER;
        else {
        if (wordIsNumber)
                chAttr = SCE_HPHP_NUMBER;
        else {
@@ -375,19 +375,21 @@ static int StateForScript(script_type scriptLanguage) {
 }
 
 static inline bool ishtmlwordchar(char ch) {
 }
 
 static inline bool ishtmlwordchar(char ch) {
-       return isalnum(ch) || ch == '.' || ch == '-' || ch == '_' || ch == ':' || ch == '!' || ch == '#';
+       return !isascii(ch) ||
+               (isalnum(ch) || ch == '.' || ch == '-' || ch == '_' || ch == ':' || ch == '!' || ch == '#');
 }
 
 static inline bool issgmlwordchar(char ch) {
 }
 
 static inline bool issgmlwordchar(char ch) {
-       return isalnum(ch) || ch == '.' || ch == '_' || ch == ':' || ch == '!' || ch == '#' || ch == '[';
+       return !isascii(ch) ||
+               (isalnum(ch) || ch == '.' || ch == '_' || ch == ':' || ch == '!' || ch == '#' || ch == '[');
 }
 
 static inline bool IsPhpWordStart(const unsigned char ch) {
 }
 
 static inline bool IsPhpWordStart(const unsigned char ch) {
-       return isalpha(ch) || (ch == '_') || (ch >= 0x7f);
+       return (isascii(ch) && (isalpha(ch) || (ch == '_'))) || (ch >= 0x7f);
 }
 
 static inline bool IsPhpWordChar(char ch) {
 }
 
 static inline bool IsPhpWordChar(char ch) {
-       return isdigit(ch) || IsPhpWordStart(ch);
+       return IsADigit(ch) || IsPhpWordStart(ch);
 }
 
 static bool InTagState(int state) {
 }
 
 static bool InTagState(int state) {
@@ -787,7 +789,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
                        } else if ((ch == '-') && (chPrev == '-')) {
                                styler.ColourTo(i - 2, StateToPrint);
                                state = SCE_H_SGML_COMMENT;
                        } else if ((ch == '-') && (chPrev == '-')) {
                                styler.ColourTo(i - 2, StateToPrint);
                                state = SCE_H_SGML_COMMENT;
-                       } else if (isalpha(ch) && (chPrev == '%')) {
+                       } else if (isascii(ch) && isalpha(ch) && (chPrev == '%')) {
                                styler.ColourTo(i - 2, StateToPrint);
                                state = SCE_H_SGML_ENTITY;
                        } else if (ch == '#') {
                                styler.ColourTo(i - 2, StateToPrint);
                                state = SCE_H_SGML_ENTITY;
                        } else if (ch == '#') {
@@ -905,7 +907,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
                        }
                        break;
                case SCE_H_SGML_SPECIAL:
                        }
                        break;
                case SCE_H_SGML_SPECIAL:
-                       if (!isupper(ch)) {
+                       if (!(isascii(ch) && isupper(ch))) {
                                styler.ColourTo(i - 1, StateToPrint);
                                if (isalnum(ch)) {
                                        state = SCE_H_SGML_ERROR;
                                styler.ColourTo(i - 1, StateToPrint);
                                if (isalnum(ch)) {
                                        state = SCE_H_SGML_ERROR;
@@ -918,7 +920,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
                        if (ch == ';') {
                                styler.ColourTo(i, StateToPrint);
                                state = SCE_H_SGML_DEFAULT;
                        if (ch == ';') {
                                styler.ColourTo(i, StateToPrint);
                                state = SCE_H_SGML_DEFAULT;
-                       } else if (!isalnum(ch) && ch != '-' && ch != '.') {
+                       } else if (!(isascii(ch) && isalnum(ch)) && ch != '-' && ch != '.') {
                                styler.ColourTo(i, SCE_H_SGML_ERROR);
                                state = SCE_H_SGML_DEFAULT;
                        }
                                styler.ColourTo(i, SCE_H_SGML_ERROR);
                                state = SCE_H_SGML_DEFAULT;
                        }
@@ -928,7 +930,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
                                styler.ColourTo(i, StateToPrint);
                                state = SCE_H_DEFAULT;
                        }
                                styler.ColourTo(i, StateToPrint);
                                state = SCE_H_DEFAULT;
                        }
-                       if (ch != '#' && !isalnum(ch)) {        // Should check that '#' follows '&', but it is unlikely anyway...
+                       if (ch != '#' && !(isascii(ch) && isalnum(ch))) {       // Should check that '#' follows '&', but it is unlikely anyway...
                                styler.ColourTo(i, SCE_H_TAGUNKNOWN);
                                state = SCE_H_DEFAULT;
                        }
                                styler.ColourTo(i, SCE_H_TAGUNKNOWN);
                                state = SCE_H_DEFAULT;
                        }
@@ -1464,7 +1466,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
                        }
                        break;
                case SCE_HPHP_NUMBER:
                        }
                        break;
                case SCE_HPHP_NUMBER:
-                       if (!isdigit(ch)) {
+                       if (!IsADigit(ch)) {
                                styler.ColourTo(i - 1, SCE_HPHP_NUMBER);
                                if (isoperator(ch))
                                        state = SCE_HPHP_OPERATOR;
                                styler.ColourTo(i - 1, SCE_HPHP_NUMBER);
                                if (isoperator(ch))
                                        state = SCE_HPHP_OPERATOR;
@@ -1524,7 +1526,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
                case SCE_HPHP_OPERATOR:
                case SCE_HPHP_DEFAULT:
                        styler.ColourTo(i - 1, StateToPrint);
                case SCE_HPHP_OPERATOR:
                case SCE_HPHP_DEFAULT:
                        styler.ColourTo(i - 1, StateToPrint);
-                       if (isdigit(ch)) {
+                       if (IsADigit(ch)) {
                                state = SCE_HPHP_NUMBER;
                        } else if (iswordstart(ch)) {
                                state = SCE_HPHP_WORD;
                                state = SCE_HPHP_NUMBER;
                        } else if (iswordstart(ch)) {
                                state = SCE_HPHP_WORD;
index 159bc1585d14f4347fd258c3114944a873613bb8..18612c9ee3558bd4574a397ce8f3d68a911a8477 100644 (file)
@@ -24,7 +24,7 @@
 #include "SciLexer.h"
 
 static inline bool IsAWordChar(const int ch) {
 #include "SciLexer.h"
 
 static inline bool IsAWordChar(const int ch) {
-       return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_');
+       return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '.');
 }
 
 inline bool IsAWordStart(const int ch) {
 }
 
 inline bool IsAWordStart(const int ch) {
@@ -58,6 +58,8 @@ static void ColouriseLuaDoc(
        WordList &keywords4 = *keywordlists[3];
        WordList &keywords5 = *keywordlists[4];
        WordList &keywords6 = *keywordlists[5];
        WordList &keywords4 = *keywordlists[3];
        WordList &keywords5 = *keywordlists[4];
        WordList &keywords6 = *keywordlists[5];
+       WordList &keywords7 = *keywordlists[6];
+       WordList &keywords8 = *keywordlists[7];
 
        int currentLine = styler.GetLine(startPos);
        // Initialize the literal string [[ ... ]] nesting level, if we are inside such a string.
 
        int currentLine = styler.GetLine(startPos);
        // Initialize the literal string [[ ... ]] nesting level, if we are inside such a string.
@@ -121,11 +123,15 @@ static void ColouriseLuaDoc(
                if (sc.state == SCE_LUA_OPERATOR) {
                        sc.SetState(SCE_LUA_DEFAULT);
                } else if (sc.state == SCE_LUA_NUMBER) {
                if (sc.state == SCE_LUA_OPERATOR) {
                        sc.SetState(SCE_LUA_DEFAULT);
                } else if (sc.state == SCE_LUA_NUMBER) {
-                       if (!IsAWordChar(sc.ch)) {
-                               sc.SetState(SCE_LUA_DEFAULT);
+                       // We stop the number definition on non-numerical non-dot non-eE non-sign char
+                       if (!(isdigit(sc.ch) || sc.ch == '.' ||
+                                 toupper(sc.ch) == 'E' || sc.ch == '-' || sc.ch == '+')) {
+                                       // Not exactly following number definition (several dots are seen as OK, etc.)
+                                       // but probably enough in most cases.
+                                       sc.SetState(SCE_LUA_DEFAULT);
                        }
                } else if (sc.state == SCE_LUA_IDENTIFIER) {
                        }
                } else if (sc.state == SCE_LUA_IDENTIFIER) {
-                       if (!IsAWordChar(sc.ch) || (sc.ch == '.')) {
+                       if (!IsAWordChar(sc.ch)) {
                                char s[100];
                                sc.GetCurrent(s, sizeof(s));
                                if (keywords.InList(s)) {
                                char s[100];
                                sc.GetCurrent(s, sizeof(s));
                                if (keywords.InList(s)) {
@@ -140,6 +146,12 @@ static void ColouriseLuaDoc(
                                        sc.ChangeState(SCE_LUA_WORD5);
                                } else if (keywords6.InList(s)) {
                                        sc.ChangeState(SCE_LUA_WORD6);
                                        sc.ChangeState(SCE_LUA_WORD5);
                                } else if (keywords6.InList(s)) {
                                        sc.ChangeState(SCE_LUA_WORD6);
+                               } else if (keywords6.InList(s)) {
+                                       sc.ChangeState(SCE_LUA_WORD6);
+                               } else if (keywords7.InList(s)) {
+                                       sc.ChangeState(SCE_LUA_WORD7);
+                               } else if (keywords8.InList(s)) {
+                                       sc.ChangeState(SCE_LUA_WORD8);
                                }
                                sc.SetState(SCE_LUA_DEFAULT);
                        }
                                }
                                sc.SetState(SCE_LUA_DEFAULT);
                        }
@@ -300,8 +312,8 @@ static void FoldLuaDoc(unsigned int startPos, int length, int /* initStyle */, W
 static const char * const luaWordListDesc[] = {
        "Keywords",
        "Basic functions",
 static const char * const luaWordListDesc[] = {
        "Keywords",
        "Basic functions",
-       "String & math functions",
-       "I/O & system facilities",
+       "String, (table) & math functions",
+       "(coroutines), I/O & system facilities",
        "XXX",
        "XXX",
        0
        "XXX",
        "XXX",
        0
diff --git a/src/stc/scintilla/src/LexMMIXAL.cxx b/src/stc/scintilla/src/LexMMIXAL.cxx
new file mode 100644 (file)
index 0000000..f447899
--- /dev/null
@@ -0,0 +1,183 @@
+// Scintilla source code edit control
+/** @file LexMMIXAL.cxx
+ ** Lexer for MMIX Assembler Language.
+ ** Written by Christoph Hösler <christoph.hoesler@student.uni-tuebingen.de>
+ ** For information about MMIX visit http://www-cs-faculty.stanford.edu/~knuth/mmix.html
+ **/
+// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
+// The License.txt file describes the conditions under which this software may be distributed.
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "Platform.h"
+
+#include "PropSet.h"
+#include "Accessor.h"
+#include "StyleContext.h"
+#include "KeyWords.h"
+#include "Scintilla.h"
+#include "SciLexer.h"
+
+
+
+static inline bool IsAWordChar(const int ch) {
+       return (ch < 0x80) && (isalnum(ch) || ch == ':' || ch == '_');
+}
+
+inline bool isMMIXALOperator(char ch) {
+       if (isalnum(ch))
+               return false;
+       if (ch == '+' || ch == '-' || ch == '|' || ch == '^' ||
+               ch == '*' || ch == '/' || ch == '/' ||
+               ch == '%' || ch == '<' || ch == '>' || ch == '&' ||
+               ch == '~' || ch == '$' ||
+               ch == ',' || ch == '(' || ch == ')' ||
+               ch == '[' || ch == ']')
+               return true;
+       return false;
+}
+
+static void ColouriseMMIXALDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
+                            Accessor &styler) {
+
+       WordList &opcodes = *keywordlists[0];
+       WordList &special_register = *keywordlists[1];
+       WordList &predef_symbols = *keywordlists[2];
+
+       StyleContext sc(startPos, length, initStyle, styler);
+
+       for (; sc.More(); sc.Forward())
+       {
+               // No EOL continuation
+               if (sc.atLineStart) {
+                       if (sc.ch ==  '@' && sc.chNext == 'i') {
+                               sc.SetState(SCE_MMIXAL_INCLUDE);
+                       } else {
+                               sc.SetState(SCE_MMIXAL_LEADWS);
+                       }
+               }
+
+               // Check if first non whitespace character in line is alphanumeric
+               if (sc.state == SCE_MMIXAL_LEADWS && !isspace(sc.ch)) { // LEADWS
+                       if(!IsAWordChar(sc.ch)) {
+                               sc.SetState(SCE_MMIXAL_COMMENT);
+                       } else {
+                               if(sc.atLineStart) {
+                                       sc.SetState(SCE_MMIXAL_LABEL);
+                               } else {
+                                       sc.SetState(SCE_MMIXAL_OPCODE_PRE);
+                               }
+                       }
+               }
+
+               // Determine if the current state should terminate.
+               if (sc.state == SCE_MMIXAL_OPERATOR) {                  // OPERATOR
+                       sc.SetState(SCE_MMIXAL_OPERANDS);
+               } else if (sc.state == SCE_MMIXAL_NUMBER) {             // NUMBER
+                       if (!isdigit(sc.ch)) {
+                               if (IsAWordChar(sc.ch)) {
+                                       char s[100];
+                                       sc.GetCurrent(s, sizeof(s));
+                                       sc.ChangeState(SCE_MMIXAL_REF);
+                                       sc.SetState(SCE_MMIXAL_REF);
+                               } else {
+                                       sc.SetState(SCE_MMIXAL_OPERANDS);
+                               }
+                       }
+               } else if (sc.state == SCE_MMIXAL_LABEL) {                      // LABEL
+                       if (!IsAWordChar(sc.ch) ) {
+                               sc.SetState(SCE_MMIXAL_OPCODE_PRE);
+                       }
+               } else if (sc.state == SCE_MMIXAL_REF) {                        // REF
+                       if (!IsAWordChar(sc.ch) ) {
+                               char s[100];
+                               sc.GetCurrent(s, sizeof(s));
+                               if (*s == ':') {        // ignore base prefix for match
+                                       for (size_t i = 0; i != sizeof(s); ++i) {
+                                               *(s+i) = *(s+i+1);
+                                       }
+                               }
+                               if (special_register.InList(s)) {
+                                       sc.ChangeState(SCE_MMIXAL_REGISTER);
+                               } else if (predef_symbols.InList(s)) {
+                                       sc.ChangeState(SCE_MMIXAL_SYMBOL);
+                               }
+                               sc.SetState(SCE_MMIXAL_OPERANDS);
+                       }
+               } else if (sc.state == SCE_MMIXAL_OPCODE_PRE) { // OPCODE_PRE
+                               if (!isspace(sc.ch)) {
+                                       sc.SetState(SCE_MMIXAL_OPCODE);
+                               }
+               } else if (sc.state == SCE_MMIXAL_OPCODE) {             // OPCODE
+                       if (!IsAWordChar(sc.ch) ) {
+                               char s[100];
+                               sc.GetCurrent(s, sizeof(s));
+                               if (opcodes.InList(s)) {
+                                       sc.ChangeState(SCE_MMIXAL_OPCODE_VALID);
+                               } else {
+                                       sc.ChangeState(SCE_MMIXAL_OPCODE_UNKNOWN);
+                               }
+                               sc.SetState(SCE_MMIXAL_OPCODE_POST);
+                       }
+               } else if (sc.state == SCE_MMIXAL_STRING) {             // STRING
+                       if (sc.ch == '\"') {
+                               sc.ForwardSetState(SCE_MMIXAL_OPERANDS);
+                       } else if (sc.atLineEnd) {
+                               sc.ForwardSetState(SCE_MMIXAL_OPERANDS);
+                       }
+               } else if (sc.state == SCE_MMIXAL_CHAR) {                       // CHAR
+                       if (sc.ch == '\'') {
+                               sc.ForwardSetState(SCE_MMIXAL_OPERANDS);
+                       } else if (sc.atLineEnd) {
+                               sc.ForwardSetState(SCE_MMIXAL_OPERANDS);
+                       }
+               } else if (sc.state == SCE_MMIXAL_REGISTER) {           // REGISTER
+                       if (!isdigit(sc.ch)) {
+                               sc.SetState(SCE_MMIXAL_OPERANDS);
+                       }
+               } else if (sc.state == SCE_MMIXAL_HEX) {                        // HEX
+                       if (!isxdigit(sc.ch)) {
+                               sc.SetState(SCE_MMIXAL_OPERANDS);
+                       }
+               }
+
+               // Determine if a new state should be entered.
+               if (sc.state == SCE_MMIXAL_OPCODE_POST ||               // OPCODE_POST
+                       sc.state == SCE_MMIXAL_OPERANDS) {                      // OPERANDS
+                       if (sc.state == SCE_MMIXAL_OPERANDS && isspace(sc.ch)) {
+                               if (!sc.atLineEnd) {
+                                       sc.SetState(SCE_MMIXAL_COMMENT);
+                               }
+                       } else if (isdigit(sc.ch)) {
+                               sc.SetState(SCE_MMIXAL_NUMBER);
+                       } else if (IsAWordChar(sc.ch) || sc.Match('@')) {
+                               sc.SetState(SCE_MMIXAL_REF);
+                       } else if (sc.Match('\"')) {
+                               sc.SetState(SCE_MMIXAL_STRING);
+                       } else if (sc.Match('\'')) {
+                               sc.SetState(SCE_MMIXAL_CHAR);
+                       } else if (sc.Match('$')) {
+                               sc.SetState(SCE_MMIXAL_REGISTER);
+                       } else if (sc.Match('#')) {
+                               sc.SetState(SCE_MMIXAL_HEX);
+                       } else if (isMMIXALOperator(static_cast<char>(sc.ch))) {
+                               sc.SetState(SCE_MMIXAL_OPERATOR);
+                       }
+               }
+       }
+       sc.Complete();
+}
+
+static const char * const MMIXALWordListDesc[] = {
+       "Operation Codes",
+       "Special Register",
+       "Predefined Symbols",
+       0
+};
+
+LexerModule lmMMIXAL(SCLEX_MMIXAL, ColouriseMMIXALDoc, "mmixal", 0, MMIXALWordListDesc);
+
diff --git a/src/stc/scintilla/src/LexNsis.cxx b/src/stc/scintilla/src/LexNsis.cxx
new file mode 100644 (file)
index 0000000..c09a8ae
--- /dev/null
@@ -0,0 +1,346 @@
+// Scintilla source code edit control
+/** @file LexNsis.cxx
+ ** Lexer for NSIS
+ **/
+// Copyright 2003 by Angelo Mandato <angelo@spaceblue.com>
+// The License.txt file describes the conditions under which this software may be distributed.
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "Platform.h"
+
+#include "PropSet.h"
+#include "Accessor.h"
+#include "KeyWords.h"
+#include "Scintilla.h"
+#include "SciLexer.h"
+
+/*
+// Put in SciLexer.h
+#define SCLEX_NSIS 34
+
+#define SCE_NSIS_DEFAULT 0
+#define SCE_NSIS_COMMENT 1
+#define SCE_NSIS_STRINGDQ 2
+#define SCE_NSIS_STRINGLQ 3
+#define SCE_NSIS_STRINGRQ 4
+#define SCE_NSIS_FUNCTION 5
+#define SCE_NSIS_VARIABLE 6
+#define SCE_NSIS_LABEL 7
+#define SCE_NSIS_USERDEFINED 8
+#define SCE_NSIS_SECTIONDEF 9
+#define SCE_NSIS_SUBSECTIONDEF 10
+#define SCE_NSIS_IFDEFINEDEF 11
+#define SCE_NSIS_MACRODEF 12
+#define SCE_NSIS_STRINGVAR 13
+*/
+
+static int classifyWordNsis(unsigned int start, unsigned int end, WordList *keywordLists[], Accessor &styler)
+{
+       char s[100];
+
+       WordList &Functions = *keywordLists[0];
+       WordList &Variables = *keywordLists[1];
+       WordList &Lables = *keywordLists[2];
+       WordList &UserDefined = *keywordLists[3];
+
+       for (unsigned int i = 0; i < end - start + 1 && i < 30; i++)
+       {
+               s[i] = static_cast<char>( styler[ start + i ] );
+               s[i + 1] = '\0';
+       }
+
+       // Check for special words...
+
+       if( strcmp(s, "!macro") == 0 || strcmp(s, "!macroend") == 0 ) // Covers !micro and !microend
+               return SCE_NSIS_MACRODEF;
+
+       if( strcmp(s, "!ifdef") == 0 ||  strcmp(s, "!ifndef") == 0 ||  strcmp(s, "!endif") == 0 )
+               return SCE_NSIS_IFDEFINEDEF;
+
+       if( strcmp(s, "Section") == 0 || strcmp(s, "SectionEnd") == 0 ) // Covers Section and SectionEnd
+               return SCE_NSIS_SECTIONDEF;
+
+       if( strcmp(s, "SubSection") == 0 || strcmp(s, "SubSectionEnd") == 0 ) // Covers SubSection and SubSectionEnd
+               return SCE_NSIS_SUBSECTIONDEF;
+
+       if( strcmp(s, "Function") == 0 || strcmp(s, "FunctionEnd") == 0 ) // Covers SubSection and SubSectionEnd
+               return SCE_NSIS_FUNCTION;
+
+       if ( Functions.InList(s) )
+               return SCE_NSIS_FUNCTION;
+
+       if ( Variables.InList(s) )
+               return SCE_NSIS_VARIABLE;
+
+       if ( Lables.InList(s) )
+               return SCE_NSIS_LABEL;
+
+       if( UserDefined.InList(s) )
+               return SCE_NSIS_USERDEFINED;
+
+       if( strlen(s) > 2 )
+       {
+               if( s[1] == '{' && s[strlen(s)-1] == '}' )
+                       return SCE_NSIS_VARIABLE;
+       }
+
+       return SCE_NSIS_DEFAULT;
+}
+
+static void ColouriseNsisDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler)
+{
+       int state = SCE_NSIS_DEFAULT;
+       styler.StartAt( startPos );
+       styler.GetLine( startPos );
+
+       unsigned int nLengthDoc = startPos + length;
+       styler.StartSegment( startPos );
+
+       char cCurrChar;
+       bool bVarInString = true;
+
+       unsigned int i;
+       for( i = startPos; i < nLengthDoc; i++ )
+       {
+               cCurrChar = styler.SafeGetCharAt( i );
+               char cNextChar = styler.SafeGetCharAt( i+1, EOF );
+
+
+
+               switch(state)
+               {
+                       case SCE_NSIS_DEFAULT:
+        if( cNextChar == EOF )
+        {
+          styler.ColourTo(i,SCE_NSIS_DEFAULT);
+                           break;
+        }
+                               if( cCurrChar == ';' || cCurrChar == '#' ) // we have a comment line
+                               {
+                                       styler.ColourTo(i-1, state );
+                                       state = SCE_NSIS_COMMENT;
+                                       break;
+                               }
+                               if( cCurrChar == '"' )
+                               {
+                                       styler.ColourTo(i-1, state );
+                                       state = SCE_NSIS_STRINGDQ;
+                                       bVarInString = false;
+                                       break;
+                               }
+                               if( cCurrChar == '\'' )
+                               {
+                                       styler.ColourTo(i-1, state );
+                                       state = SCE_NSIS_STRINGRQ;
+                                       bVarInString = false;
+                                       break;
+                               }
+                               if( cCurrChar == '`' )
+                               {
+                                       styler.ColourTo(i-1, state );
+                                       state = SCE_NSIS_STRINGLQ;
+                                       bVarInString = false;
+                                       break;
+                               }
+
+                               // NSIS KeyWord,Function, Variable, UserDefined:
+                               if( cCurrChar == '$' || iswordchar(cCurrChar) || cCurrChar == '!' )
+                               {
+                                       styler.ColourTo(i-1,state);
+                                 state = SCE_NSIS_FUNCTION;
+                                       break;
+                               }
+                               break;
+                       case SCE_NSIS_COMMENT:
+                               if( cNextChar == '\n' || cNextChar == '\r' || cNextChar == EOF )
+        {
+                                 styler.ColourTo(i,state);
+          state = SCE_NSIS_DEFAULT;
+        }
+                               break;
+                       case SCE_NSIS_STRINGDQ:
+                               if( cCurrChar == '"' || cNextChar == '\r' || cNextChar == '\n' )
+                               {
+                                       styler.ColourTo(i,SCE_NSIS_STRINGDQ);
+                                 state = SCE_NSIS_DEFAULT;
+                               }
+                               break;
+                       case SCE_NSIS_STRINGLQ:
+                               if( cCurrChar == '`' || cNextChar == '\r' || cNextChar == '\n' )
+                               {
+                                       styler.ColourTo(i,SCE_NSIS_STRINGLQ);
+                                 state = SCE_NSIS_DEFAULT;
+                               }
+                               break;
+                       case SCE_NSIS_STRINGRQ:
+                               if( cCurrChar == '\'' || cNextChar == '\r' || cNextChar == '\n' )
+                               {
+                                       styler.ColourTo(i,SCE_NSIS_STRINGRQ);
+                                 state = SCE_NSIS_DEFAULT;
+                               }
+                               break;
+                       case SCE_NSIS_FUNCTION:
+
+                               // NSIS KeyWord:
+                               if( (iswordchar(cCurrChar) && !iswordchar( cNextChar) && cNextChar != '}') || cCurrChar == '}' )
+                               {
+                                       state = classifyWordNsis( styler.GetStartSegment(), i, keywordLists, styler);
+                                       styler.ColourTo( i, state);
+                                       state = SCE_NSIS_DEFAULT; // Everything after goes back to the default state
+                               }
+                               else if( !iswordchar( cCurrChar ) && cCurrChar != '{' && cCurrChar != '}' )
+                               {
+                                       state = SCE_NSIS_DEFAULT;
+
+                                       if( cCurrChar == '"' ) // Next
+                                       {
+                                               state = SCE_NSIS_STRINGDQ;
+                                               bVarInString = false;
+                                       }
+                                       if( cCurrChar == '`' )
+                                       {
+                                               state = SCE_NSIS_STRINGLQ;
+                                               bVarInString = false;
+                                       }
+                                       if( cCurrChar == '\'' )
+                                       {
+                                               state = SCE_NSIS_STRINGRQ;
+                                               bVarInString = false;
+                                       }
+                                       if( cCurrChar == '#' || cCurrChar == ';' )
+                                               state = SCE_NSIS_COMMENT;
+
+                                       styler.ColourTo( i, state);
+                               }
+                               break;
+               }
+
+               if( state == SCE_NSIS_COMMENT )
+               {
+                       styler.ColourTo(i,state);
+               }
+               else if( state == SCE_NSIS_STRINGDQ || state == SCE_NSIS_STRINGLQ || state == SCE_NSIS_STRINGRQ )
+               {
+                       // Check for var in String..
+                       if( bVarInString && (iswordchar(cCurrChar) || cCurrChar == '}') ) // || cCurrChar == '{' ) )
+                       {
+                               int nWordState = classifyWordNsis( styler.GetStartSegment(), i, keywordLists, styler);
+                               if( nWordState == SCE_NSIS_VARIABLE )
+                               {
+                                       styler.ColourTo( i, SCE_NSIS_STRINGVAR);
+                                       bVarInString = false;
+                               }
+                       }
+                       if( cCurrChar == '$' )
+                       {
+                               styler.ColourTo( i-1, state);
+                               bVarInString = true;
+                       }
+               }
+       }
+}
+
+
+static void FoldNsisDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler)
+{
+       // No folding enabled, no reason to continue...
+       if( styler.GetPropertyInt("fold") == 0 )
+               return;
+
+       unsigned int endPos = startPos + length;
+       int lineCurrent = styler.GetLine(startPos);
+       int levelCurrent = SC_FOLDLEVELBASE;
+       if (lineCurrent > 0)
+               levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
+       int levelNext = levelCurrent;
+       char chNext = styler[startPos];
+       int styleNext = styler.StyleAt(startPos);
+       int style;
+
+       for (unsigned int i = startPos; i < endPos; i++)
+       {
+               char ch = chNext;
+               chNext = styler.SafeGetCharAt(i + 1);
+               style = styleNext;
+               styleNext = styler.StyleAt(i + 1);
+               bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
+               // Functions Start: Function, Section, SubSection
+               // Functions End: FunctionEnd, SectionEnd, SubSectionEnd
+               // Label Start: !ifdef, !ifndef
+               // Label End: !endif
+
+               if( style == SCE_NSIS_FUNCTION )
+               {
+                       if( styler.Match(i, "FunctionEnd") )
+                               levelNext--;
+                       else if( styler.Match(i, "Function") )
+                               levelNext++;
+               }
+               else if( style == SCE_NSIS_SECTIONDEF )
+               {
+                       if( styler.Match(i, "SectionEnd") )
+                               levelNext--;
+                       else if( styler.Match(i, "Section") )
+                               levelNext++;
+               }
+               else if( style == SCE_NSIS_SUBSECTIONDEF )
+               {
+                       if( styler.Match(i, "SubSectionEnd") )
+                               levelNext--;
+                       else if( styler.Match(i, "SubSection") )
+                               levelNext++;
+               }
+               else if( style == SCE_NSIS_IFDEFINEDEF )
+               {
+                       if( styler.Match(i, "!endif") )
+                               levelNext--;
+                       else if( styler.Match(i, "!ifdef") || styler.Match(i, "!ifndef"))
+                               levelNext++;
+               }
+               else if( style == SCE_NSIS_MACRODEF )
+               {
+                       if( styler.Match(i, "!macroend") )
+                               levelNext--;
+                       else if( styler.Match(i, "!macro") )
+                               levelNext++;
+               }
+
+               if( atEOL )
+               {
+                       int levelUse = levelCurrent;
+                       int lev = levelUse | levelNext << 16;
+                       if (levelUse < levelNext)
+                               lev |= SC_FOLDLEVELHEADERFLAG;
+                       if (lev != styler.LevelAt(lineCurrent))
+                       {
+                               styler.SetLevel(lineCurrent, lev);
+                       }
+                       lineCurrent++;
+                       levelCurrent = levelNext;
+               }
+       }
+
+       int levelUse = levelCurrent;
+       int lev = levelUse | levelNext << 16;
+       if (levelUse < levelNext)
+               lev |= SC_FOLDLEVELHEADERFLAG;
+       if (lev != styler.LevelAt(lineCurrent))
+       {
+               styler.SetLevel(lineCurrent, lev);
+       }
+}
+
+static const char * const nsisWordLists[] = {
+       "Functions",
+       "Variables",
+       "Lables",
+       "UserDefined",
+       0, };
+
+
+LexerModule lmNsis(SCLEX_NSIS, ColouriseNsisDoc, "nsis", FoldNsisDoc, nsisWordLists);
index 45e2d515446c24f84b3f61fc7e395b0ac40b0ba1..31ac415ad4eb7b7ebf865e55628c46853d252c62 100644 (file)
@@ -268,6 +268,59 @@ static void ColourisePropsDoc(unsigned int startPos, int length, int, WordList *
        }
 }
 
        }
 }
 
+// adaption by ksc, using the "} else {" trick of 1.53
+// 030721
+static void FoldPropsDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
+       bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
+
+       unsigned int endPos = startPos + length;
+       int visibleChars = 0;
+       int lineCurrent = styler.GetLine(startPos);
+
+       char chNext = styler[startPos];
+       int styleNext = styler.StyleAt(startPos);
+       bool headerPoint = false;
+
+       for (unsigned int i = startPos; i < endPos; i++) {
+               char ch = chNext;
+               chNext = styler[i+1];
+
+               int style = styleNext;
+               styleNext = styler.StyleAt(i + 1);
+               bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
+
+               if (style==2) {
+                       headerPoint = true;
+               }
+
+               if (atEOL) {
+                       int lev = SC_FOLDLEVELBASE+1;
+                       if (headerPoint)
+                               lev = SC_FOLDLEVELBASE;
+
+                       if (visibleChars == 0 && foldCompact)
+                               lev |= SC_FOLDLEVELWHITEFLAG;
+
+                       if (headerPoint)
+                               lev |= SC_FOLDLEVELHEADERFLAG;
+
+                       if (lev != styler.LevelAt(lineCurrent)) {
+                               styler.SetLevel(lineCurrent, lev);
+                       }
+
+                       lineCurrent++;
+                       visibleChars = 0;
+                       headerPoint=false;
+               }
+               if (!isspacechar(ch))
+                       visibleChars++;
+       }
+
+       int lev = headerPoint ? SC_FOLDLEVELBASE : SC_FOLDLEVELBASE+1;
+       int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
+       styler.SetLevel(lineCurrent, lev | flagsNext);
+}
+
 static void ColouriseMakeLine(
     char *lineBuffer,
     unsigned int lengthLine,
 static void ColouriseMakeLine(
     char *lineBuffer,
     unsigned int lengthLine,
@@ -638,7 +691,7 @@ static void ColouriseNullDoc(unsigned int startPos, int length, int, WordList *[
 
 LexerModule lmBatch(SCLEX_BATCH, ColouriseBatchDoc, "batch", 0, batchWordListDesc);
 LexerModule lmDiff(SCLEX_DIFF, ColouriseDiffDoc, "diff", 0, emptyWordListDesc);
 
 LexerModule lmBatch(SCLEX_BATCH, ColouriseBatchDoc, "batch", 0, batchWordListDesc);
 LexerModule lmDiff(SCLEX_DIFF, ColouriseDiffDoc, "diff", 0, emptyWordListDesc);
-LexerModule lmProps(SCLEX_PROPERTIES, ColourisePropsDoc, "props", 0, emptyWordListDesc);
+LexerModule lmProps(SCLEX_PROPERTIES, ColourisePropsDoc, "props", FoldPropsDoc, emptyWordListDesc);
 LexerModule lmMake(SCLEX_MAKEFILE, ColouriseMakeDoc, "makefile", 0, emptyWordListDesc);
 LexerModule lmErrorList(SCLEX_ERRORLIST, ColouriseErrorListDoc, "errorlist", 0, emptyWordListDesc);
 LexerModule lmLatex(SCLEX_LATEX, ColouriseLatexDoc, "latex", 0, emptyWordListDesc);
 LexerModule lmMake(SCLEX_MAKEFILE, ColouriseMakeDoc, "makefile", 0, emptyWordListDesc);
 LexerModule lmErrorList(SCLEX_ERRORLIST, ColouriseErrorListDoc, "errorlist", 0, emptyWordListDesc);
 LexerModule lmLatex(SCLEX_LATEX, ColouriseLatexDoc, "latex", 0, emptyWordListDesc);
index 1e44450bbc70419c749b531df63c5eed5e85c817..33ba6a490f999bd27a7195de599df7338f2b5985 100644 (file)
@@ -1,10 +1,19 @@
 // Scintilla source code edit control
 /** @file LexPOV.cxx
 // Scintilla source code edit control
 /** @file LexPOV.cxx
- ** Lexer for POV-Ray, based on lexer for C++.
+ ** Lexer for POV-Ray SDL (Persistance of Vision Raytracer, Scene Description Language).
+ ** Written by Philippe Lhoste but this is mostly a derivative of LexCPP...
  **/
  **/
-// Copyright 2003 by Steven te Brinke <steven.t.b@zonnet.nl>
+// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
 // The License.txt file describes the conditions under which this software may be distributed.
 
 // The License.txt file describes the conditions under which this software may be distributed.
 
+// Some points that distinguish from a simple C lexer:
+// Identifiers start only by a character.
+// No line continuation character.
+// Strings are limited to 256 characters.
+// Directives are similar to preprocessor commands,
+// but we match directive keywords and colorize incorrect ones.
+// Block comments can be nested (code stolen from my code in LexLua).
+
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
 #include "Scintilla.h"
 #include "SciLexer.h"
 
 #include "Scintilla.h"
 #include "SciLexer.h"
 
-#define KEYWORD_BOXHEADER 1
-#define KEYWORD_FOLDCONTRACTED 2
-
 static inline bool IsAWordChar(const int ch) {
 static inline bool IsAWordChar(const int ch) {
-       return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_');
-}
-
-static inline bool IsAWordStart(const int ch) {
-       return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-static inline bool IsStateComment(const int state) {
-       return ((state == SCE_POV_COMMENT) ||
-               (state == SCE_POV_COMMENTLINE) ||
-               (state == SCE_POV_COMMENTDOC));
+       return ch < 0x80 && (isalnum(ch) || ch == '_');
 }
 
 }
 
-static inline bool IsStateString(const int state) {
-       return ((state == SCE_POV_STRING));
+inline bool IsAWordStart(const int ch) {
+       return ch < 0x80 && isalpha(ch);
 }
 
 }
 
-static void ColourisePOVDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
-                            Accessor &styler) {
+static void ColourisePovDoc(
+       unsigned int startPos,
+       int length,
+       int initStyle,
+       WordList *keywordlists[],
+    Accessor &styler) {
 
 
-       WordList &keywords = *keywordlists[0];
+       WordList &keywords1 = *keywordlists[0];
        WordList &keywords2 = *keywordlists[1];
        WordList &keywords2 = *keywordlists[1];
+       WordList &keywords3 = *keywordlists[2];
+       WordList &keywords4 = *keywordlists[3];
+       WordList &keywords5 = *keywordlists[4];
+       WordList &keywords6 = *keywordlists[5];
+       WordList &keywords7 = *keywordlists[6];
+       WordList &keywords8 = *keywordlists[7];
+
+       int currentLine = styler.GetLine(startPos);
+       // Initialize the block comment /* */ nesting level, if we are inside such a comment.
+       int blockCommentLevel = 0;
+       if (initStyle == SCE_POV_COMMENT) {
+               blockCommentLevel = styler.GetLineState(currentLine - 1);
+       }
 
        // Do not leak onto next line
 
        // Do not leak onto next line
-       /*if (initStyle == SCE_POV_STRINGEOL)
-               initStyle = SCE_POV_DEFAULT;*/
+       if (initStyle == SCE_POV_STRINGEOL) {
+               initStyle = SCE_POV_DEFAULT;
+       }
 
        StyleContext sc(startPos, length, initStyle, styler);
 
        StyleContext sc(startPos, length, initStyle, styler);
-
-       bool caseSensitive = styler.GetPropertyInt("pov.case.sensitive", 1) != 0;
+       short stringLen = 0;
 
        for (; sc.More(); sc.Forward()) {
 
        for (; sc.More(); sc.Forward()) {
+               if (sc.atLineEnd) {
+                       // Update the line state, so it can be seen by next line
+                       currentLine = styler.GetLine(sc.currentPos);
+                       if (sc.state == SCE_POV_COMMENT) {
+                               // Inside a block comment, we set the line state
+                               styler.SetLineState(currentLine, blockCommentLevel);
+                       } else {
+                               // Reset the line state
+                               styler.SetLineState(currentLine, 0);
+                       }
+               }
 
 
-               /*if (sc.atLineStart && (sc.state == SCE_POV_STRING)) {
+               if (sc.atLineStart && (sc.state == SCE_POV_STRING)) {
                        // Prevent SCE_POV_STRINGEOL from leaking back to previous line
                        sc.SetState(SCE_POV_STRING);
                        // Prevent SCE_POV_STRINGEOL from leaking back to previous line
                        sc.SetState(SCE_POV_STRING);
-               }*/
-
-               // Handle line continuation generically.
-               if (sc.ch == '\\') {
-                       if (sc.chNext == '\n' || sc.chNext == '\r') {
-                               sc.Forward();
-                               if (sc.ch == '\r' && sc.chNext == '\n') {
-                                       sc.Forward();
-                               }
-                               continue;
-                       }
                }
 
                // Determine if the current state should terminate.
                }
 
                // Determine if the current state should terminate.
-               if (sc.state == SCE_POV_OPERATOR || sc.state == SCE_POV_BRACE) {
+               if (sc.state == SCE_POV_OPERATOR) {
                        sc.SetState(SCE_POV_DEFAULT);
                } else if (sc.state == SCE_POV_NUMBER) {
                        sc.SetState(SCE_POV_DEFAULT);
                } else if (sc.state == SCE_POV_NUMBER) {
-                       if (!IsADigit(sc.ch) || sc.ch != '.') {
-                               sc.SetState(SCE_POV_DEFAULT);
+                       // We stop the number definition on non-numerical non-dot non-eE non-sign char
+                       if (!(isdigit(sc.ch) || sc.ch == '.' ||
+                                 toupper(sc.ch) == 'E' || sc.ch == '-' || sc.ch == '+')) {
+                                       // Not exactly following number definition (several dots are seen as OK, etc.)
+                                       // but probably enough in most cases.
+                                       sc.SetState(SCE_POV_DEFAULT);
                        }
                } else if (sc.state == SCE_POV_IDENTIFIER) {
                        }
                } else if (sc.state == SCE_POV_IDENTIFIER) {
-                       if (!IsAWordChar(sc.ch) || (sc.ch == '.')) {
+                       if (!IsAWordChar(sc.ch)) {
                                char s[100];
                                char s[100];
-                               if (caseSensitive) {
-                                       sc.GetCurrent(s, sizeof(s));
-                               } else {
-                                       sc.GetCurrentLowered(s, sizeof(s));
-                               }
-                               if (keywords.InList(s)) {
-                                       sc.ChangeState(SCE_POV_WORD);
-                               } else if (keywords2.InList(s)) {
+                               sc.GetCurrent(s, sizeof(s));
+                               if (keywords2.InList(s)) {
                                        sc.ChangeState(SCE_POV_WORD2);
                                        sc.ChangeState(SCE_POV_WORD2);
+                               } else if (keywords3.InList(s)) {
+                                       sc.ChangeState(SCE_POV_WORD3);
+                               } else if (keywords4.InList(s)) {
+                                       sc.ChangeState(SCE_POV_WORD4);
+                               } else if (keywords5.InList(s)) {
+                                       sc.ChangeState(SCE_POV_WORD5);
+                               } else if (keywords6.InList(s)) {
+                                       sc.ChangeState(SCE_POV_WORD6);
+                               } else if (keywords7.InList(s)) {
+                                       sc.ChangeState(SCE_POV_WORD7);
+                               } else if (keywords8.InList(s)) {
+                                       sc.ChangeState(SCE_POV_WORD8);
+                               }
+                               sc.SetState(SCE_POV_DEFAULT);
+                       }
+               } else if (sc.state == SCE_POV_DIRECTIVE) {
+                       if (!IsAWordChar(sc.ch)) {
+                               char s[100], *p;
+                               sc.GetCurrent(s, sizeof(s));
+                               p = s;
+                               // Skip # and whitespace between # and directive word
+                               do {
+                                       p++;
+                               } while ((*p == ' ' || *p == '\t') && *p != '\0');
+                               if (!keywords1.InList(p)) {
+                                       sc.ChangeState(SCE_POV_BADDIRECTIVE);
                                }
                                sc.SetState(SCE_POV_DEFAULT);
                        }
                } else if (sc.state == SCE_POV_COMMENT) {
                                }
                                sc.SetState(SCE_POV_DEFAULT);
                        }
                } else if (sc.state == SCE_POV_COMMENT) {
-                       if (sc.Match('*', '/')) {
+                       if (sc.Match('/', '*')) {
+                               blockCommentLevel++;
                                sc.Forward();
                                sc.Forward();
-                               sc.ForwardSetState(SCE_POV_DEFAULT);
-                       }
-               } else if (sc.state == SCE_POV_COMMENTDOC) {
-                       if (sc.Match('*', '/')) {
+                       } else if (sc.Match('*', '/') && blockCommentLevel > 0) {
+                               blockCommentLevel--;
                                sc.Forward();
                                sc.Forward();
-                               sc.ForwardSetState(SCE_POV_DEFAULT);
+                               if (blockCommentLevel == 0) {
+                                       sc.ForwardSetState(SCE_POV_DEFAULT);
+                               }
                        }
                } else if (sc.state == SCE_POV_COMMENTLINE) {
                        if (sc.atLineEnd) {
                                sc.SetState(SCE_POV_DEFAULT);
                        }
                } else if (sc.state == SCE_POV_STRING) {
                        }
                } else if (sc.state == SCE_POV_COMMENTLINE) {
                        if (sc.atLineEnd) {
                                sc.SetState(SCE_POV_DEFAULT);
                        }
                } else if (sc.state == SCE_POV_STRING) {
+                       if (sc.ch == '\\') {
+                               stringLen++;
+                               if (strchr("abfnrtuv0'\"", sc.chNext)) {
+                                       // Compound characters are counted as one.
+                                       // Note: for Unicode chars \u, we shouldn't count the next 4 digits...
+                                       sc.Forward();
+                               }
+                       } else if (sc.ch == '\"') {
+                               sc.ForwardSetState(SCE_POV_DEFAULT);
+                       } else if (sc.atLineEnd) {
+                               sc.ChangeState(SCE_POV_STRINGEOL);
+                               sc.ForwardSetState(SCE_POV_DEFAULT);
+                       } else {
+                               stringLen++;
+                       }
+                       if (stringLen > 256) {
+                               // Strings are limited to 256 chars
+                               sc.SetState(SCE_POV_STRINGEOL);
+                       }
+               } else if (sc.state == SCE_POV_STRINGEOL) {
                        if (sc.ch == '\\') {
                                if (sc.chNext == '\"' || sc.chNext == '\\') {
                                        sc.Forward();
                                }
                        } else if (sc.ch == '\"') {
                        if (sc.ch == '\\') {
                                if (sc.chNext == '\"' || sc.chNext == '\\') {
                                        sc.Forward();
                                }
                        } else if (sc.ch == '\"') {
+                               sc.ForwardSetState(SCE_C_DEFAULT);
+                       } else if (sc.atLineEnd) {
                                sc.ForwardSetState(SCE_POV_DEFAULT);
                        }
                }
                                sc.ForwardSetState(SCE_POV_DEFAULT);
                        }
                }
@@ -123,35 +183,43 @@ static void ColourisePOVDoc(unsigned int startPos, int length, int initStyle, Wo
                if (sc.state == SCE_POV_DEFAULT) {
                        if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
                                sc.SetState(SCE_POV_NUMBER);
                if (sc.state == SCE_POV_DEFAULT) {
                        if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
                                sc.SetState(SCE_POV_NUMBER);
-                       } else if (IsAWordStart(sc.ch) || (sc.ch == '#')) {
+                       } else if (IsAWordStart(sc.ch)) {
                                sc.SetState(SCE_POV_IDENTIFIER);
                        } else if (sc.Match('/', '*')) {
                                sc.SetState(SCE_POV_IDENTIFIER);
                        } else if (sc.Match('/', '*')) {
+                               blockCommentLevel = 1;
                                sc.SetState(SCE_POV_COMMENT);
                                sc.Forward();   // Eat the * so it isn't used for the end of the comment
                        } else if (sc.Match('/', '/')) {
                                sc.SetState(SCE_POV_COMMENTLINE);
                        } else if (sc.ch == '\"') {
                                sc.SetState(SCE_POV_STRING);
                                sc.SetState(SCE_POV_COMMENT);
                                sc.Forward();   // Eat the * so it isn't used for the end of the comment
                        } else if (sc.Match('/', '/')) {
                                sc.SetState(SCE_POV_COMMENTLINE);
                        } else if (sc.ch == '\"') {
                                sc.SetState(SCE_POV_STRING);
-                               //} else if (isoperator(static_cast<char>(sc.ch))) {
-                       } else if (sc.ch == '+' || sc.ch == '-' || sc.ch == '*' || sc.ch == '/' || sc.ch == '=' || sc.ch == '<' || sc.ch == '>' || sc.ch == '&' || sc.ch == '|' || sc.ch == '!' || sc.ch == '?' || sc.ch == ':') {
+                               stringLen = 0;
+                       } else if (sc.ch == '#') {
+                               sc.SetState(SCE_POV_DIRECTIVE);
+                               // Skip whitespace between # and directive word
+                               do {
+                                       sc.Forward();
+                               } while ((sc.ch == ' ' || sc.ch == '\t') && sc.More());
+                               if (sc.atLineEnd) {
+                                       sc.SetState(SCE_POV_DEFAULT);
+                               }
+                       } else if (isoperator(static_cast<char>(sc.ch))) {
                                sc.SetState(SCE_POV_OPERATOR);
                                sc.SetState(SCE_POV_OPERATOR);
-                       } else if (sc.ch == '{' || sc.ch == '}') {
-                               sc.SetState(SCE_POV_BRACE);
                        }
                }
                        }
                }
-
        }
        sc.Complete();
 }
 
        }
        sc.Complete();
 }
 
-static bool IsStreamCommentStyle(int style) {
-       return style == SCE_POV_COMMENT ||
-              style == SCE_POV_COMMENTDOC;
-}
+static void FoldPovDoc(
+       unsigned int startPos,
+       int length,
+       int initStyle,
+       WordList *[],
+       Accessor &styler) {
 
 
-static void FoldNoBoxPOVDoc(unsigned int startPos, int length, int initStyle,
-                            Accessor &styler) {
-       bool foldComment = styler.GetPropertyInt("fold.comment", 1) != 0;
+       bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
+       bool foldDirective = styler.GetPropertyInt("fold.directive") != 0;
        bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
        unsigned int endPos = startPos + length;
        int visibleChars = 0;
        bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
        unsigned int endPos = startPos + length;
        int visibleChars = 0;
@@ -168,15 +236,33 @@ static void FoldNoBoxPOVDoc(unsigned int startPos, int length, int initStyle,
                style = styleNext;
                styleNext = styler.StyleAt(i + 1);
                bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
                style = styleNext;
                styleNext = styler.StyleAt(i + 1);
                bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-               if (foldComment && IsStreamCommentStyle(style)) {
-                       if (!IsStreamCommentStyle(stylePrev)) {
+               if (foldComment && (style == SCE_POV_COMMENT)) {
+                       if (stylePrev != SCE_POV_COMMENT) {
                                levelCurrent++;
                                levelCurrent++;
-                       } else if (!IsStreamCommentStyle(styleNext) && !atEOL) {
+                       } else if ((styleNext != SCE_POV_COMMENT) && !atEOL) {
                                // Comments don't end at end of line and the next character may be unstyled.
                                levelCurrent--;
                        }
                }
                                // Comments don't end at end of line and the next character may be unstyled.
                                levelCurrent--;
                        }
                }
-               if (style == SCE_POV_BRACE) {
+               if (foldComment && (style == SCE_POV_COMMENTLINE)) {
+                       if ((ch == '/') && (chNext == '/')) {
+                               char chNext2 = styler.SafeGetCharAt(i + 2);
+                               if (chNext2 == '{') {
+                                       levelCurrent++;
+                               } else if (chNext2 == '}') {
+                                       levelCurrent--;
+                               }
+                       }
+               }
+               if (foldDirective && (style == SCE_POV_DIRECTIVE)) {
+                       if (ch == '#') {
+                               unsigned int j=i+1;
+                               while ((j<endPos) && IsASpaceOrTab(styler.SafeGetCharAt(j))) {
+                                       j++;
+                               }
+                       }
+               }
+               if (style == SCE_POV_OPERATOR) {
                        if (ch == '{') {
                                levelCurrent++;
                        } else if (ch == '}') {
                        if (ch == '{') {
                                levelCurrent++;
                        } else if (ch == '}') {
@@ -204,19 +290,16 @@ static void FoldNoBoxPOVDoc(unsigned int startPos, int length, int initStyle,
        styler.SetLevel(lineCurrent, levelPrev | flagsNext);
 }
 
        styler.SetLevel(lineCurrent, levelPrev | flagsNext);
 }
 
-static void FoldPOVDoc(unsigned int startPos, int length, int initStyle, WordList *[], Accessor &styler) {
-       FoldNoBoxPOVDoc(startPos, length, initStyle, styler);
-}
-
-static const char * const POVWordLists[] = {
-            "Primary keywords and identifiers",
-            "Secondary keywords and identifiers",
-            0,
-        };
-
-static void ColourisePOVDocSensitive(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
-                                     Accessor &styler) {
-       ColourisePOVDoc(startPos, length, initStyle, keywordlists, styler);
-}
+static const char * const povWordLists[] = {
+       "Language directives",
+       "Objects & CSG & Appearance",
+       "Types & Modifiers & Items",
+       "Predefined Identifiers",
+       "Predefined Functions",
+       "User defined 1",
+       "User defined 2",
+       "User defined 3",
+       0,
+};
 
 
-LexerModule lmPOV(SCLEX_POV, ColourisePOVDocSensitive, "pov", FoldPOVDoc, POVWordLists);
+LexerModule lmPOV(SCLEX_POV, ColourisePovDoc, "pov", FoldPovDoc, povWordLists);
diff --git a/src/stc/scintilla/src/LexPS.cxx b/src/stc/scintilla/src/LexPS.cxx
new file mode 100644 (file)
index 0000000..a44f3ce
--- /dev/null
@@ -0,0 +1,344 @@
+// Scintilla source code edit control
+/** @file LexPS.cxx
+ ** Lexer for PostScript
+ **
+ ** Written by Nigel Hathaway <nigel@bprj.co.uk>.
+ ** The License.txt file describes the conditions under which this software may be distributed.
+ **/
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <fcntl.h>
+
+#include "Platform.h"
+
+#include "PropSet.h"
+#include "Accessor.h"
+#include "StyleContext.h"
+#include "KeyWords.h"
+#include "Scintilla.h"
+#include "SciLexer.h"
+
+static inline bool IsASelfDelimitingChar(const int ch) {
+    return (ch == '[' || ch == ']' || ch == '{' || ch == '}' ||
+            ch == '/' || ch == '<' || ch == '>' ||
+            ch == '(' || ch == ')' || ch == '%');
+}
+
+static inline bool IsAWhitespaceChar(const int ch) {
+    return (ch == ' '  || ch == '\t' || ch == '\r' ||
+            ch == '\n' || ch == '\f' || ch == '\0');
+}
+
+static bool IsABaseNDigit(const int ch, const int base) {
+    int maxdig = '9';
+    int letterext = -1;
+
+    if (base <= 10)
+        maxdig = '0' + base - 1;
+    else
+        letterext = base - 11;
+
+    return ((ch >= '0' && ch <= maxdig) ||
+            (ch >= 'A' && ch <= ('A' + letterext)) ||
+            (ch >= 'a' && ch <= ('a' + letterext)));
+}
+
+static inline bool IsABase85Char(const int ch) {
+    return ((ch >= '!' && ch <= 'u') || ch == 'z');
+}
+
+static void ColourisePSDoc(
+    unsigned int startPos,
+    int length,
+    int initStyle,
+    WordList *keywordlists[],
+    Accessor &styler) {
+
+    WordList &keywords1 = *keywordlists[0];
+    WordList &keywords2 = *keywordlists[1];
+    WordList &keywords3 = *keywordlists[2];
+    WordList &keywords4 = *keywordlists[3];
+    WordList &keywords5 = *keywordlists[4];
+
+    StyleContext sc(startPos, length, initStyle, styler);
+
+    bool tokenizing = styler.GetPropertyInt("ps.tokenize") != 0;
+    int pslevel = styler.GetPropertyInt("ps.level", 3);
+    int lineCurrent = styler.GetLine(startPos);
+    int nestTextCurrent = 0;
+    if (lineCurrent > 0 && initStyle == SCE_PS_TEXT)
+        nestTextCurrent = styler.GetLineState(lineCurrent - 1);
+    int numRadix = 0;
+    bool numHasPoint = false;
+    bool numHasExponent = false;
+    bool numHasSign = false;
+
+    // Clear out existing tokenization
+    if (tokenizing && length > 0) {
+        styler.StartAt(startPos, static_cast<char>(INDIC2_MASK));
+        styler.ColourTo(startPos + length-1, 0);
+        styler.Flush();
+        styler.StartAt(startPos);
+        styler.StartSegment(startPos);
+    }
+
+    for (; sc.More(); sc.Forward()) {
+        if (sc.atLineStart)
+            lineCurrent = styler.GetLine(sc.currentPos);
+
+        // Determine if the current state should terminate.
+        if (sc.state == SCE_PS_COMMENT || sc.state == SCE_PS_DSC_VALUE) {
+            if (sc.atLineEnd) {
+                sc.SetState(SCE_C_DEFAULT);
+            }
+        } else if (sc.state == SCE_PS_DSC_COMMENT) {
+            if (sc.ch == ':') {
+                sc.Forward();
+                if (!sc.atLineEnd)
+                    sc.SetState(SCE_PS_DSC_VALUE);
+                else
+                    sc.SetState(SCE_C_DEFAULT);
+            } else if (sc.atLineEnd) {
+                sc.SetState(SCE_C_DEFAULT);
+            } else if (IsAWhitespaceChar(sc.ch)) {
+                sc.ChangeState(SCE_PS_COMMENT);
+            }
+        } else if (sc.state == SCE_PS_NUMBER) {
+            if (IsASelfDelimitingChar(sc.ch) || IsAWhitespaceChar(sc.ch)) {
+                if ((sc.chPrev == '+' || sc.chPrev == '-' ||
+                     sc.chPrev == 'E' || sc.chPrev == 'e') && numRadix == 0)
+                    sc.ChangeState(SCE_PS_NAME);
+                sc.SetState(SCE_C_DEFAULT);
+            } else if (sc.ch == '#') {
+                if (numHasPoint || numHasExponent || numHasSign || numRadix != 0) {
+                    sc.ChangeState(SCE_PS_NAME);
+                } else {
+                    char szradix[5];
+                    sc.GetCurrent(szradix, 4);
+                    numRadix = atoi(szradix);
+                    if (numRadix < 2 || numRadix > 36)
+                        sc.ChangeState(SCE_PS_NAME);
+                }
+            } else if ((sc.ch == 'E' || sc.ch == 'e') && numRadix == 0) {
+                if (numHasExponent) {
+                    sc.ChangeState(SCE_PS_NAME);
+                } else {
+                    numHasExponent = true;
+                    if (sc.chNext == '+' || sc.chNext == '-')
+                        sc.Forward();
+                }
+            } else if (sc.ch == '.') {
+                if (numHasPoint || numHasExponent || numRadix != 0) {
+                    sc.ChangeState(SCE_PS_NAME);
+                } else {
+                    numHasPoint = true;
+                }
+            } else if (numRadix == 0) {
+                if (!IsABaseNDigit(sc.ch, 10))
+                    sc.ChangeState(SCE_PS_NAME);
+            } else {
+                if (!IsABaseNDigit(sc.ch, numRadix))
+                    sc.ChangeState(SCE_PS_NAME);
+            }
+        } else if (sc.state == SCE_PS_NAME || sc.state == SCE_PS_KEYWORD) {
+            if (IsASelfDelimitingChar(sc.ch) || IsAWhitespaceChar(sc.ch)) {
+                char s[100];
+                sc.GetCurrent(s, sizeof(s));
+                if ((pslevel >= 1 && keywords1.InList(s)) ||
+                    (pslevel >= 2 && keywords2.InList(s)) ||
+                    (pslevel >= 3 && keywords3.InList(s)) ||
+                    keywords4.InList(s) || keywords5.InList(s)) {
+                    sc.ChangeState(SCE_PS_KEYWORD);
+                }
+                sc.SetState(SCE_C_DEFAULT);
+            }
+        } else if (sc.state == SCE_PS_LITERAL || sc.state == SCE_PS_IMMEVAL) {
+            if (IsASelfDelimitingChar(sc.ch) || IsAWhitespaceChar(sc.ch))
+                sc.SetState(SCE_C_DEFAULT);
+        } else if (sc.state == SCE_PS_PAREN_ARRAY || sc.state == SCE_PS_PAREN_DICT ||
+                   sc.state == SCE_PS_PAREN_PROC) {
+            sc.SetState(SCE_C_DEFAULT);
+        } else if (sc.state == SCE_PS_TEXT) {
+            if (sc.ch == '(') {
+                nestTextCurrent++;
+            } else if (sc.ch == ')') {
+                if (--nestTextCurrent == 0)
+                   sc.ForwardSetState(SCE_PS_DEFAULT);
+            } else if (sc.ch == '\\') {
+                sc.Forward();
+            }
+        } else if (sc.state == SCE_PS_HEXSTRING) {
+            if (sc.ch == '>') {
+                sc.ForwardSetState(SCE_PS_DEFAULT);
+            } else if (!IsABaseNDigit(sc.ch, 16) && !IsAWhitespaceChar(sc.ch)) {
+                sc.SetState(SCE_PS_HEXSTRING);
+                styler.ColourTo(sc.currentPos, SCE_PS_BADSTRINGCHAR);
+            }
+        } else if (sc.state == SCE_PS_BASE85STRING) {
+            if (sc.Match('~', '>')) {
+                sc.Forward();
+                sc.ForwardSetState(SCE_PS_DEFAULT);
+            } else if (!IsABase85Char(sc.ch) && !IsAWhitespaceChar(sc.ch)) {
+                sc.SetState(SCE_PS_BASE85STRING);
+                styler.ColourTo(sc.currentPos, SCE_PS_BADSTRINGCHAR);
+            }
+        }
+
+        // Determine if a new state should be entered.
+        if (sc.state == SCE_C_DEFAULT) {
+            unsigned int tokenpos = sc.currentPos;
+
+            if (sc.ch == '[' || sc.ch == ']') {
+                sc.SetState(SCE_PS_PAREN_ARRAY);
+            } else if (sc.ch == '{' || sc.ch == '}') {
+                sc.SetState(SCE_PS_PAREN_PROC);
+            } else if (sc.ch == '/') {
+                if (sc.chNext == '/') {
+                    sc.SetState(SCE_PS_IMMEVAL);
+                    sc.Forward();
+                } else {
+                    sc.SetState(SCE_PS_LITERAL);
+                }
+            } else if (sc.ch == '<') {
+                if (sc.chNext == '<') {
+                    sc.SetState(SCE_PS_PAREN_DICT);
+                    sc.Forward();
+                } else if (sc.chNext == '~') {
+                    sc.SetState(SCE_PS_BASE85STRING);
+                    sc.Forward();
+                } else {
+                    sc.SetState(SCE_PS_HEXSTRING);
+                }
+            } else if (sc.ch == '>' && sc.chNext == '>') {
+                    sc.SetState(SCE_PS_PAREN_DICT);
+                    sc.Forward();
+            } else if (sc.ch == '>' || sc.ch == ')') {
+                sc.SetState(SCE_C_DEFAULT);
+                styler.ColourTo(sc.currentPos, SCE_PS_BADSTRINGCHAR);
+            } else if (sc.ch == '(') {
+                sc.SetState(SCE_PS_TEXT);
+                nestTextCurrent = 1;
+            } else if (sc.ch == '%') {
+                if (sc.chNext == '%' && sc.atLineStart) {
+                    sc.SetState(SCE_PS_DSC_COMMENT);
+                    sc.Forward();
+                    if (sc.chNext == '+') {
+                        sc.Forward();
+                        sc.ForwardSetState(SCE_PS_DSC_VALUE);
+                    }
+                } else {
+                    sc.SetState(SCE_PS_COMMENT);
+                }
+            } else if ((sc.ch == '+' || sc.ch == '-' || sc.ch == '.') &&
+                       IsABaseNDigit(sc.chNext, 10)) {
+                sc.SetState(SCE_PS_NUMBER);
+                numRadix = 0;
+                numHasPoint = (sc.ch == '.');
+                numHasExponent = false;
+                numHasSign = (sc.ch == '+' || sc.ch == '-');
+            } else if ((sc.ch == '+' || sc.ch == '-') && sc.chNext == '.' &&
+                       IsABaseNDigit(sc.GetRelative(2), 10)) {
+                sc.SetState(SCE_PS_NUMBER);
+                numRadix = 0;
+                numHasPoint = false;
+                numHasExponent = false;
+                numHasSign = true;
+            } else if (IsABaseNDigit(sc.ch, 10)) {
+                sc.SetState(SCE_PS_NUMBER);
+                numRadix = 0;
+                numHasPoint = false;
+                numHasExponent = false;
+                numHasSign = false;
+            } else if (!IsAWhitespaceChar(sc.ch)) {
+                sc.SetState(SCE_PS_NAME);
+            }
+
+            // Mark the start of tokens
+            if (tokenizing && sc.state != SCE_C_DEFAULT && sc.state != SCE_PS_COMMENT &&
+                sc.state != SCE_PS_DSC_COMMENT && sc.state != SCE_PS_DSC_VALUE) {
+                styler.Flush();
+                styler.StartAt(tokenpos, static_cast<char>(INDIC2_MASK));
+                styler.ColourTo(tokenpos, INDIC2_MASK);
+                styler.Flush();
+                styler.StartAt(tokenpos);
+                styler.StartSegment(tokenpos);
+            }
+        }
+
+        if (sc.atLineEnd)
+            styler.SetLineState(lineCurrent, nestTextCurrent);
+    }
+
+    sc.Complete();
+}
+
+static void FoldPSDoc(unsigned int startPos, int length, int, WordList *[],
+                       Accessor &styler) {
+    bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
+    bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) != 0;
+    unsigned int endPos = startPos + length;
+    int visibleChars = 0;
+    int lineCurrent = styler.GetLine(startPos);
+    int levelCurrent = SC_FOLDLEVELBASE;
+    if (lineCurrent > 0)
+        levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
+    int levelMinCurrent = levelCurrent;
+    int levelNext = levelCurrent;
+    char chNext = styler[startPos];
+    int styleNext = styler.StyleAt(startPos);
+    int style;
+    for (unsigned int i = startPos; i < endPos; i++) {
+        char ch = chNext;
+        chNext = styler.SafeGetCharAt(i + 1);
+        style = styleNext;
+        styleNext = styler.StyleAt(i + 1);
+        bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');  //mac??
+        if ((style & 31) == SCE_PS_PAREN_PROC) {
+            if (ch == '{') {
+                // Measure the minimum before a '{' to allow
+                // folding on "} {"
+                if (levelMinCurrent > levelNext) {
+                    levelMinCurrent = levelNext;
+                }
+                levelNext++;
+            } else if (ch == '}') {
+                levelNext--;
+            }
+        }
+        if (atEOL) {
+            int levelUse = levelCurrent;
+            if (foldAtElse) {
+                levelUse = levelMinCurrent;
+            }
+            int lev = levelUse | levelNext << 16;
+            if (visibleChars == 0 && foldCompact)
+                lev |= SC_FOLDLEVELWHITEFLAG;
+            if (levelUse < levelNext)
+                lev |= SC_FOLDLEVELHEADERFLAG;
+            if (lev != styler.LevelAt(lineCurrent)) {
+                styler.SetLevel(lineCurrent, lev);
+            }
+            lineCurrent++;
+            levelCurrent = levelNext;
+            levelMinCurrent = levelCurrent;
+            visibleChars = 0;
+        }
+        if (!isspacechar(ch))
+            visibleChars++;
+    }
+}
+
+static const char * const psWordListDesc[] = {
+    "PS Level 1 operators",
+    "PS Level 2 operators",
+    "PS Level 3 operators",
+    "RIP-specific operators",
+    "User-defined operators",
+    0
+};
+
+LexerModule lmPS(SCLEX_PS, ColourisePSDoc, "ps", FoldPSDoc, psWordListDesc);
index c3bea6773df0f57a15b27e6fc1c52f391a3a21aa..434f88d4fe493c6a6b39bc0b1be7302eb4f90153 100644 (file)
@@ -3,6 +3,7 @@
  ** Lexer for Pascal.
  ** Written by Laurent le Tynevez
  ** Updated by Simon Steele <s.steele@pnotepad.org> September 2002
  ** Lexer for Pascal.
  ** Written by Laurent le Tynevez
  ** Updated by Simon Steele <s.steele@pnotepad.org> September 2002
+ ** Updated by Mathias Rauen <scite@madshi.net> May 2003 (Delphi adjustments)
  **/
 
 #include <stdlib.h>
  **/
 
 #include <stdlib.h>
@@ -40,12 +41,15 @@ static bool IsStreamCommentStyle(int style) {
                style == SCE_C_COMMENTDOCKEYWORDERROR;
 }
 
                style == SCE_C_COMMENTDOCKEYWORDERROR;
 }
 
-static inline bool IsAWordChar(const int ch) {
-       return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_');
+static void ColourTo(Accessor &styler, unsigned int end, unsigned int attr, bool bInAsm) {
+       if ((bInAsm) && (attr == SCE_C_OPERATOR || attr == SCE_C_NUMBER || attr == SCE_C_DEFAULT || attr == SCE_C_WORD || attr == SCE_C_IDENTIFIER)) {
+               styler.ColourTo(end, SCE_C_REGEX);
+       } else
+               styler.ColourTo(end, attr);
 }
 
 }
 
-// returns 1 if the item starts a class definition, and -1 if the word is "end".
-static int classifyWordPascal(unsigned int start, unsigned int end, /*WordList &keywords*/WordList *keywordlists[], Accessor &styler, bool bInClass) {
+// returns 1 if the item starts a class definition, and -1 if the word is "end", and 2 if the word is "asm"
+static int classifyWordPascal(unsigned int start, unsigned int end, /*WordList &keywords*/WordList *keywordlists[], Accessor &styler, bool bInClass, bool bInAsm) {
        int ret = 0;
 
        WordList& keywords = *keywordlists[0];
        int ret = 0;
 
        WordList& keywords = *keywordlists[0];
@@ -55,24 +59,34 @@ static int classifyWordPascal(unsigned int start, unsigned int end, /*WordList &
        getRange(start, end, styler, s, sizeof(s));
 
        char chAttr = SCE_C_IDENTIFIER;
        getRange(start, end, styler, s, sizeof(s));
 
        char chAttr = SCE_C_IDENTIFIER;
-       if (isdigit(s[0]) || (s[0] == '.')) {
+       if (isdigit(s[0]) || (s[0] == '.') ||(s[0] == '$')) {
                chAttr = SCE_C_NUMBER;
        }
        else {
                chAttr = SCE_C_NUMBER;
        }
        else {
-               if (keywords.InList(s)) {
-                       chAttr = SCE_C_WORD;
-
-                       if(strcmp(s, "class") == 0)
-                               ret = 1;
-                       else if(strcmp(s, "end") == 0)
-                               ret = -1;
-               } else if (bInClass) {
-                       if (classwords.InList(s)) {
+               if (s[0] == '#') {
+                       chAttr = SCE_C_CHARACTER;
+               }
+               else {
+                       if (keywords.InList(s)) {
                                chAttr = SCE_C_WORD;
                                chAttr = SCE_C_WORD;
+
+                               if(strcmp(s, "class") == 0) {
+                                       ret = 1;
+                               }
+                               else if (strcmp(s, "asm") == 0) {
+                                       ret = 2;
+                               }
+                               else if (strcmp(s, "end") == 0) {
+                                       ret = -1;
+                               }
+                       } else if (bInClass) {
+                               if (classwords.InList(s)) {
+                                       chAttr = SCE_C_WORD;
+                               }
                        }
                }
        }
                        }
                }
        }
-       styler.ColourTo(end, chAttr);
+       ColourTo(styler, end, chAttr, (bInAsm && ret != -1));
        return ret;
 }
 
        return ret;
 }
 
@@ -99,14 +113,14 @@ static void ColourisePascalDoc(unsigned int startPos, int length, int initStyle,
        styler.StartAt(startPos);
 
        int state = initStyle;
        styler.StartAt(startPos);
 
        int state = initStyle;
-       if (state == SCE_C_STRINGEOL)   // Does not leak onto next line
+       if (state == SCE_C_CHARACTER)   // Does not leak onto next line
                state = SCE_C_DEFAULT;
        char chPrev = ' ';
        char chNext = styler[startPos];
        unsigned int lengthDoc = startPos + length;
                state = SCE_C_DEFAULT;
        char chPrev = ' ';
        char chNext = styler[startPos];
        unsigned int lengthDoc = startPos + length;
-       int visibleChars = 0;
 
        bool bInClassDefinition;
 
        bool bInClassDefinition;
+
        int currentLine = styler.GetLine(startPos);
        if (currentLine > 0) {
                styler.SetLineState(currentLine, styler.GetLineState(currentLine-1));
        int currentLine = styler.GetLine(startPos);
        if (currentLine > 0) {
                styler.SetLineState(currentLine, styler.GetLineState(currentLine-1));
@@ -116,6 +130,10 @@ static void ColourisePascalDoc(unsigned int startPos, int length, int initStyle,
                bInClassDefinition = false;
        }
 
                bInClassDefinition = false;
        }
 
+       bool bInAsm = (state == SCE_C_REGEX);
+       if (bInAsm)
+               state = SCE_C_DEFAULT;
+
        styler.StartSegment(startPos);
        for (unsigned int i = startPos; i < lengthDoc; i++) {
                char ch = chNext;
        styler.StartSegment(startPos);
        for (unsigned int i = startPos; i < lengthDoc; i++) {
                char ch = chNext;
@@ -126,16 +144,13 @@ static void ColourisePascalDoc(unsigned int startPos, int length, int initStyle,
                        // Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix)
                        // Avoid triggering two times on Dos/Win
                        // End of line
                        // Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix)
                        // Avoid triggering two times on Dos/Win
                        // End of line
-                       if (state == SCE_C_STRINGEOL) {
-                               styler.ColourTo(i, state);
+                       if (state == SCE_C_CHARACTER) {
+                               ColourTo(styler, i, state, bInAsm);
                                state = SCE_C_DEFAULT;
                        }
                                state = SCE_C_DEFAULT;
                        }
-                       visibleChars = 0;
                        currentLine++;
                        styler.SetLineState(currentLine, (bInClassDefinition ? 1 : 0));
                }
                        currentLine++;
                        styler.SetLineState(currentLine, (bInClassDefinition ? 1 : 0));
                }
-               if (!isspacechar(ch))
-                       visibleChars++;
 
                if (styler.IsLeadByte(ch)) {
                        chNext = styler.SafeGetCharAt(i + 2);
 
                if (styler.IsLeadByte(ch)) {
                        chNext = styler.SafeGetCharAt(i + 2);
@@ -145,41 +160,50 @@ static void ColourisePascalDoc(unsigned int startPos, int length, int initStyle,
                }
 
                if (state == SCE_C_DEFAULT) {
                }
 
                if (state == SCE_C_DEFAULT) {
-                       if (iswordstart(ch) || (ch == '@')) {
-                               styler.ColourTo(i-1, state);
+                       if (iswordstart(ch) || ch == '#' || ch == '$' || (ch == '@' && bInAsm)) {
+                               ColourTo(styler, i-1, state, bInAsm);
                                state = SCE_C_IDENTIFIER;
                        } else if (ch == '{' && chNext != '$' && chNext != '&') {
                                state = SCE_C_IDENTIFIER;
                        } else if (ch == '{' && chNext != '$' && chNext != '&') {
-                               styler.ColourTo(i-1, state);
+                               ColourTo(styler, i-1, state, bInAsm);
                                state = SCE_C_COMMENT;
                        } else if (ch == '(' && chNext == '*'
                                                && styler.SafeGetCharAt(i + 2) != '$'
                                                && styler.SafeGetCharAt(i + 2) != '&') {
                                state = SCE_C_COMMENT;
                        } else if (ch == '(' && chNext == '*'
                                                && styler.SafeGetCharAt(i + 2) != '$'
                                                && styler.SafeGetCharAt(i + 2) != '&') {
-                               styler.ColourTo(i-1, state);
+                               ColourTo(styler, i-1, state, bInAsm);
                                state = SCE_C_COMMENTDOC;
                        } else if (ch == '/' && chNext == '/') {
                                state = SCE_C_COMMENTDOC;
                        } else if (ch == '/' && chNext == '/') {
-                               styler.ColourTo(i-1, state);
+                               ColourTo(styler, i-1, state, bInAsm);
                                state = SCE_C_COMMENTLINE;
                        } else if (ch == '\'') {
                                state = SCE_C_COMMENTLINE;
                        } else if (ch == '\'') {
-                               styler.ColourTo(i-1, state);
+                               ColourTo(styler, i-1, state, bInAsm);
                                state = SCE_C_CHARACTER;
                                state = SCE_C_CHARACTER;
-                       } else if (ch == '{' && (chNext == '$' || chNext=='&') && visibleChars == 1) {
-                               styler.ColourTo(i-1, state);
+                       } else if (ch == '{' && (chNext == '$' || chNext=='&')) {
+                               ColourTo(styler, i-1, state, bInAsm);
                                state = SCE_C_PREPROCESSOR;
                        } else if (isoperator(ch)) {
                                state = SCE_C_PREPROCESSOR;
                        } else if (isoperator(ch)) {
-                               styler.ColourTo(i-1, state);
-                               styler.ColourTo(i, SCE_C_OPERATOR);
+                               ColourTo(styler, i-1, state, bInAsm);
+                               ColourTo(styler, i, SCE_C_OPERATOR, bInAsm);
 
                        }
                } else if (state == SCE_C_IDENTIFIER) {
 
                        }
                } else if (state == SCE_C_IDENTIFIER) {
-                       if (!iswordchar(ch)) {
-                               int lStateChange = classifyWordPascal(styler.GetStartSegment(), i - 1, keywordlists, styler, bInClassDefinition);
+                       bool bDoublePoint = ((ch == '.') && (chPrev == '.'));
+                       if ((!iswordchar(ch) && ch != '$' && ch != '#' && (ch != '@' || !bInAsm)) || bDoublePoint) {
+                               if (bDoublePoint) i--;
+                               int lStateChange = classifyWordPascal(styler.GetStartSegment(), i - 1, keywordlists, styler, bInClassDefinition, bInAsm);
 
                                if(lStateChange == 1) {
                                        styler.SetLineState(currentLine, 1);
                                        bInClassDefinition = true;
 
                                if(lStateChange == 1) {
                                        styler.SetLineState(currentLine, 1);
                                        bInClassDefinition = true;
+                               } else if(lStateChange == 2) {
+                                       bInAsm = true;
                                } else if(lStateChange == -1) {
                                        styler.SetLineState(currentLine, 0);
                                        bInClassDefinition = false;
                                } else if(lStateChange == -1) {
                                        styler.SetLineState(currentLine, 0);
                                        bInClassDefinition = false;
+                                       bInAsm = false;
+                               }
+                               if (bDoublePoint) {
+                                       i++;
+                                       ColourTo(styler, i-1, SCE_C_DEFAULT, bInAsm);
                                }
 
                                state = SCE_C_DEFAULT;
                                }
 
                                state = SCE_C_DEFAULT;
@@ -189,30 +213,30 @@ static void ColourisePascalDoc(unsigned int startPos, int length, int initStyle,
                                } else if (ch == '(' && chNext == '*'
                                                && styler.SafeGetCharAt(i + 2) != '$'
                                                && styler.SafeGetCharAt(i + 2) != '&') {
                                } else if (ch == '(' && chNext == '*'
                                                && styler.SafeGetCharAt(i + 2) != '$'
                                                && styler.SafeGetCharAt(i + 2) != '&') {
-                                       styler.ColourTo(i-1, state);
+                                       ColourTo(styler, i-1, state, bInAsm);
                                        state = SCE_C_COMMENTDOC;
                                } else if (ch == '/' && chNext == '/') {
                                        state = SCE_C_COMMENTLINE;
                                } else if (ch == '\'') {
                                        state = SCE_C_CHARACTER;
                                } else if (isoperator(ch)) {
                                        state = SCE_C_COMMENTDOC;
                                } else if (ch == '/' && chNext == '/') {
                                        state = SCE_C_COMMENTLINE;
                                } else if (ch == '\'') {
                                        state = SCE_C_CHARACTER;
                                } else if (isoperator(ch)) {
-                                       styler.ColourTo(i, SCE_C_OPERATOR);
+                                       ColourTo(styler, i, SCE_C_OPERATOR, bInAsm);
                                }
                        }
                } else {
                        if (state == SCE_C_PREPROCESSOR) {
                                if (ch=='}'){
                                }
                        }
                } else {
                        if (state == SCE_C_PREPROCESSOR) {
                                if (ch=='}'){
-                                       styler.ColourTo(i, state);
+                                       ColourTo(styler, i, state, bInAsm);
                                        state = SCE_C_DEFAULT;
                                } else {
                                        if ((ch == '\r' || ch == '\n') && !(chPrev == '\\' || chPrev == '\r')) {
                                        state = SCE_C_DEFAULT;
                                } else {
                                        if ((ch == '\r' || ch == '\n') && !(chPrev == '\\' || chPrev == '\r')) {
-                                               styler.ColourTo(i-1, state);
+                                               ColourTo(styler, i-1, state, bInAsm);
                                                state = SCE_C_DEFAULT;
                                        }
                                }
                        } else if (state == SCE_C_COMMENT) {
                                if (ch == '}' ) {
                                                state = SCE_C_DEFAULT;
                                        }
                                }
                        } else if (state == SCE_C_COMMENT) {
                                if (ch == '}' ) {
-                                       styler.ColourTo(i, state);
+                                       ColourTo(styler, i, state, bInAsm);
                                        state = SCE_C_DEFAULT;
                                }
                        } else if (state == SCE_C_COMMENTDOC) {
                                        state = SCE_C_DEFAULT;
                                }
                        } else if (state == SCE_C_COMMENTDOC) {
@@ -220,28 +244,25 @@ static void ColourisePascalDoc(unsigned int startPos, int length, int initStyle,
                                        if (((i > styler.GetStartSegment() + 2) || (
                                                (initStyle == SCE_C_COMMENTDOC) &&
                                                (styler.GetStartSegment() == static_cast<unsigned int>(startPos))))) {
                                        if (((i > styler.GetStartSegment() + 2) || (
                                                (initStyle == SCE_C_COMMENTDOC) &&
                                                (styler.GetStartSegment() == static_cast<unsigned int>(startPos))))) {
-                                                       styler.ColourTo(i, state);
+                                                       ColourTo(styler, i, state, bInAsm);
                                                        state = SCE_C_DEFAULT;
                                        }
                                }
                        } else if (state == SCE_C_COMMENTLINE) {
                                if (ch == '\r' || ch == '\n') {
                                                        state = SCE_C_DEFAULT;
                                        }
                                }
                        } else if (state == SCE_C_COMMENTLINE) {
                                if (ch == '\r' || ch == '\n') {
-                                       styler.ColourTo(i-1, state);
+                                       ColourTo(styler, i-1, state, bInAsm);
                                        state = SCE_C_DEFAULT;
                                }
                        } else if (state == SCE_C_CHARACTER) {
                                        state = SCE_C_DEFAULT;
                                }
                        } else if (state == SCE_C_CHARACTER) {
-                               if ((ch == '\r' || ch == '\n')) {
-                                       styler.ColourTo(i-1, SCE_C_STRINGEOL);
-                                       state = SCE_C_STRINGEOL;
-                               } else if (ch == '\'') {
-                                       styler.ColourTo(i, state);
+                               if (ch == '\'') {
+                                       ColourTo(styler, i, state, bInAsm);
                                        state = SCE_C_DEFAULT;
                                }
                        }
                }
                chPrev = ch;
        }
                                        state = SCE_C_DEFAULT;
                                }
                        }
                }
                chPrev = ch;
        }
-       styler.ColourTo(lengthDoc - 1, state);
+       ColourTo(styler, lengthDoc - 1, state, bInAsm);
 }
 
 static void FoldPascalDoc(unsigned int startPos, int length, int initStyle, WordList *[],
 }
 
 static void FoldPascalDoc(unsigned int startPos, int length, int initStyle, WordList *[],
index 0520c00ed6fcefb48dd7e6ce0ba71cfaae0b5788..3f65b12097a161e3b295f7844b76e85bfaa702e4 100644 (file)
@@ -23,7 +23,7 @@ static void classifyWordSQL(unsigned int start, unsigned int end, WordList &keyw
        char s[100];
        bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
        for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) {
        char s[100];
        bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
        for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) {
-               s[i] = static_cast<char>(toupper(styler[start + i]));
+               s[i] = static_cast<char>(tolower(styler[start + i]));
                s[i + 1] = '\0';
        }
        char chAttr = SCE_C_IDENTIFIER;
                s[i + 1] = '\0';
        }
        char chAttr = SCE_C_IDENTIFIER;
@@ -88,7 +88,7 @@ static void ColouriseSQLDoc(unsigned int startPos, int length,
                        } else if (ch == '-' && chNext == '-') {
                                styler.ColourTo(i - 1, state);
                                state = SCE_C_COMMENTLINE;
                        } else if (ch == '-' && chNext == '-') {
                                styler.ColourTo(i - 1, state);
                                state = SCE_C_COMMENTLINE;
-                       } else if (ch == '\'') {
+                       } else if ((ch == '\'') || (ch == '"')) {
                                styler.ColourTo(i - 1, state);
                                state = SCE_C_STRING;
                        } else if (isoperator(ch)) {
                                styler.ColourTo(i - 1, state);
                                state = SCE_C_STRING;
                        } else if (isoperator(ch)) {
@@ -103,7 +103,7 @@ static void ColouriseSQLDoc(unsigned int startPos, int length,
                                        state = SCE_C_COMMENT;
                                } else if (ch == '-' && chNext == '-') {
                                        state = SCE_C_COMMENTLINE;
                                        state = SCE_C_COMMENT;
                                } else if (ch == '-' && chNext == '-') {
                                        state = SCE_C_COMMENTLINE;
-                               } else if (ch == '\'') {
+                               } else if ((ch == '\'') || (ch == '"'))  {
                                        state = SCE_C_STRING;
                                } else if (isoperator(ch)) {
                                        styler.ColourTo(i, SCE_C_OPERATOR);
                                        state = SCE_C_STRING;
                                } else if (isoperator(ch)) {
                                        styler.ColourTo(i, SCE_C_OPERATOR);
@@ -134,6 +134,16 @@ static void ColouriseSQLDoc(unsigned int startPos, int length,
                                        }
                                        ch = chNext;
                                        chNext = styler.SafeGetCharAt(i + 1);
                                        }
                                        ch = chNext;
                                        chNext = styler.SafeGetCharAt(i + 1);
+                               } else if (ch == '"') {
+                                       if (chNext == '"') {
+                                               i++;
+                                       } else {
+                                               styler.ColourTo(i, state);
+                                               state = SCE_C_DEFAULT;
+                                               i++;
+                                       }
+                                       ch = chNext;
+                                       chNext = styler.SafeGetCharAt(i + 1);
                                }
                        }
                        if (state == SCE_C_DEFAULT) {    // One of the above succeeded
                                }
                        }
                        if (state == SCE_C_DEFAULT) {    // One of the above succeeded
@@ -141,7 +151,7 @@ static void ColouriseSQLDoc(unsigned int startPos, int length,
                                        state = SCE_C_COMMENT;
                                } else if (ch == '-' && chNext == '-') {
                                        state = SCE_C_COMMENTLINE;
                                        state = SCE_C_COMMENT;
                                } else if (ch == '-' && chNext == '-') {
                                        state = SCE_C_COMMENTLINE;
-                               } else if (ch == '\'') {
+                               } else if ((ch == '\'') || (ch == '"')) {
                                        state = SCE_C_STRING;
                                } else if (iswordstart(ch)) {
                                        state = SCE_C_WORD;
                                        state = SCE_C_STRING;
                                } else if (iswordstart(ch)) {
                                        state = SCE_C_WORD;
diff --git a/src/stc/scintilla/src/LexScriptol.cxx b/src/stc/scintilla/src/LexScriptol.cxx
new file mode 100644 (file)
index 0000000..fda10e3
--- /dev/null
@@ -0,0 +1,427 @@
+// Scintilla source code edit control
+/** @file LexScriptol.cxx
+ ** Lexer for Scriptol.
+ **/
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "Platform.h"
+
+#include "PropSet.h"
+#include "Accessor.h"
+#include "KeyWords.h"
+#include "Scintilla.h"
+#include "SciLexer.h"
+
+static void ClassifyWordSol(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, char *prevWord)
+{
+       char s[100];
+       bool wordIsNumber = isdigit(styler[start]) != 0;
+       for (unsigned int i = 0; i < end - start + 1 && i < 30; i++)
+    {
+               s[i] = styler[start + i];
+               s[i + 1] = '\0';
+       }
+       char chAttr = SCE_P_IDENTIFIER;
+    if (0 == strcmp(prevWord, "class"))       chAttr = SCE_P_CLASSNAME;
+    else if (wordIsNumber)                    chAttr = SCE_P_NUMBER;
+    else if (keywords.InList(s))              chAttr = SCE_P_WORD;
+    else for (unsigned int i = 0; i < end - start + 1; i++)  // test dotted idents
+    {
+               if (styler[start + i] == '.')
+        {
+                       styler.ColourTo(start + i - 1, chAttr);
+                       styler.ColourTo(start + i, SCE_P_OPERATOR);
+               }
+       }
+       styler.ColourTo(end, chAttr);
+       strcpy(prevWord, s);
+}
+
+static bool IsSolComment(Accessor &styler, int pos, int len)
+{
+//    return len > 0 && styler[pos]=='`';
+   char c;
+   if(len > 0)
+   {
+     c = styler[pos];
+     if(c == '`') return true;
+     if(len > 1)
+     {
+        if(c == '/')
+        {
+          c = styler[pos + 1];
+          if(c == '/') return true;
+          if(c == '*') return true;
+        }
+     }
+   }
+   return false;
+}
+
+static bool IsSolStringStart(char ch, char /*chNext*/)
+{
+    if (ch == '\'' || ch == '"')  return true;
+    //chNext = chNext;  // for future use
+
+       return false;
+}
+
+static bool IsSolWordStart(char ch, char chNext)
+{
+    return (iswordchar(ch) && !IsSolStringStart(ch, chNext));
+}
+
+/* Return the state to use for the string starting at i; *nextIndex will be set to the first index following the quote(s) */
+static int GetSolStringState(Accessor &styler, int i, int *nextIndex)
+{
+       char ch = styler.SafeGetCharAt(i);
+       char chNext = styler.SafeGetCharAt(i + 1);
+
+       if (ch != '"' && ch != '\'') {
+               *nextIndex = i + 1;
+               return SCE_P_DEFAULT;
+       }
+
+       if (ch == chNext && ch == styler.SafeGetCharAt(i + 2))
+    {
+       *nextIndex = i + 3;
+       if (ch == '"') return SCE_P_TRIPLEDOUBLE;
+       else           return SCE_P_TRIPLE;
+       }
+    else
+    {
+       *nextIndex = i + 1;
+       if (ch == '"') return SCE_P_STRING;
+       else           return SCE_P_CHARACTER;
+       }
+}
+
+static void ColouriseSolDoc(unsigned int startPos, int length, int initStyle,
+                                                  WordList *keywordlists[], Accessor &styler)
+ {
+
+       int lengthDoc = startPos + length;
+
+       // Backtrack to previous line in case need to fix its tab whinging
+       if (startPos > 0)
+    {
+               int lineCurrent = styler.GetLine(startPos);
+               if (lineCurrent > 0)
+        {
+           startPos = styler.LineStart(lineCurrent-1);
+           if (startPos == 0) initStyle = SCE_P_DEFAULT;
+           else               initStyle = styler.StyleAt(startPos-1);
+               }
+       }
+
+       styler.StartAt(startPos, 127);
+
+       WordList &keywords = *keywordlists[0];
+
+       int whingeLevel = styler.GetPropertyInt("tab.timmy.whinge.level");
+       char prevWord[200];
+       prevWord[0] = '\0';
+    if (length == 0)  return ;
+
+       int state = initStyle & 31;
+
+       int nextIndex = 0;
+       char chPrev = ' ';
+       //char chPrev2 = ' ';
+       char chNext = styler[startPos];
+       styler.StartSegment(startPos);
+       bool atStartLine = true;
+       int spaceFlags = 0;
+       for (int i = startPos; i < lengthDoc; i++)
+    {
+
+      if (atStartLine)
+      {
+         char chBad = static_cast<char>(64);
+         char chGood = static_cast<char>(0);
+         char chFlags = chGood;
+
+         if (whingeLevel == 1)
+         {
+                               chFlags = (spaceFlags & wsInconsistent) ? chBad : chGood;
+         }
+         else if (whingeLevel == 2)
+         {
+                               chFlags = (spaceFlags & wsSpaceTab) ? chBad : chGood;
+         }
+         else if (whingeLevel == 3)
+         {
+                               chFlags = (spaceFlags & wsSpace) ? chBad : chGood;
+         }
+         else if (whingeLevel == 4)
+         {
+                               chFlags = (spaceFlags & wsTab) ? chBad : chGood;
+         }
+         styler.SetFlags(chFlags, static_cast<char>(state));
+         atStartLine = false;
+       }
+
+               char ch = chNext;
+               chNext = styler.SafeGetCharAt(i + 1);
+
+               if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == lengthDoc))
+        {
+                       if ((state == SCE_P_DEFAULT) || (state == SCE_P_TRIPLE) || (state == SCE_P_TRIPLEDOUBLE))
+            {
+                               styler.ColourTo(i, state);
+                       }
+                       atStartLine = true;
+         }
+
+               if (styler.IsLeadByte(ch))
+        {
+                       chNext = styler.SafeGetCharAt(i + 2);
+                       chPrev = ' ';
+                       //chPrev2 = ' ';
+                       i += 1;
+                       continue;
+               }
+
+               if (state == SCE_P_STRINGEOL)
+        {
+                       if (ch != '\r' && ch != '\n')
+             {
+                               styler.ColourTo(i - 1, state);
+                               state = SCE_P_DEFAULT;
+             }
+        }
+
+               if (state == SCE_P_DEFAULT)
+        {
+            if (IsSolWordStart(ch, chNext))
+            {
+                               styler.ColourTo(i - 1, state);
+                               state = SCE_P_WORD;
+            }
+            else if (ch == '`')
+            {
+                               styler.ColourTo(i - 1, state);
+                state = SCE_P_COMMENTLINE;
+            }
+            else if (ch == '/')
+            {
+                               styler.ColourTo(i - 1, state);
+                if(chNext == '/') state = SCE_P_COMMENTLINE;
+                if(chNext == '*') state = SCE_P_COMMENTBLOCK;
+            }
+
+            else if (ch == '=' && chNext == 'b')
+            {
+                               // =begin indicates the start of a comment (doc) block
+               if(styler.SafeGetCharAt(i + 2) == 'e' && styler.SafeGetCharAt(i + 3) == 'g' && styler.SafeGetCharAt(i + 4) == 'i' && styler.SafeGetCharAt(i + 5) == 'n')
+               {
+                                       styler.ColourTo(i - 1, state);
+                                       state = SCE_P_TRIPLEDOUBLE; //SCE_C_COMMENT;
+               }
+            }
+            else if (IsSolStringStart(ch, chNext))
+            {
+               styler.ColourTo(i - 1, state);
+               state = GetSolStringState(styler, i, &nextIndex);
+               if (nextIndex != i + 1)
+               {
+                                       i = nextIndex - 1;
+                                       ch = ' ';
+                                       //chPrev = ' ';
+                                       chNext = styler.SafeGetCharAt(i + 1);
+               }
+                       }
+            else if (isoperator(ch))
+            {
+                               styler.ColourTo(i - 1, state);
+                               styler.ColourTo(i, SCE_P_OPERATOR);
+                       }
+          }
+          else if (state == SCE_P_WORD)
+          {
+              if (!iswordchar(ch))
+              {
+                 ClassifyWordSol(styler.GetStartSegment(), i - 1, keywords, styler, prevWord);
+                 state = SCE_P_DEFAULT;
+                 if (ch == '`')
+                 {
+                     state = chNext == '`' ? SCE_P_COMMENTBLOCK : SCE_P_COMMENTLINE;
+                 }
+                 else if (IsSolStringStart(ch, chNext))
+                 {
+                    styler.ColourTo(i - 1, state);
+                    state = GetSolStringState(styler, i, &nextIndex);
+                                       if (nextIndex != i + 1)
+                    {
+                                               i = nextIndex - 1;
+                                               ch = ' ';
+                                               //chPrev = ' ';
+                                               chNext = styler.SafeGetCharAt(i + 1);
+                                       }
+                 }
+                 else if (isoperator(ch))
+                 {
+                                       styler.ColourTo(i, SCE_P_OPERATOR);
+                 }
+             }
+          }
+          else
+          {
+            if (state == SCE_P_COMMENTLINE)
+            {
+                               if (ch == '\r' || ch == '\n')
+                 {
+                                       styler.ColourTo(i - 1, state);
+                                       state = SCE_P_DEFAULT;
+                 }
+            }
+            else if(state == SCE_P_COMMENTBLOCK)
+            {
+              if(ch == '*' && chNext == '/') state = SCE_P_DEFAULT;
+            }
+            else if (state == SCE_P_STRING)
+            {
+                               if ((ch == '\r' || ch == '\n') && (chPrev != '\\'))
+                {
+                                       styler.ColourTo(i - 1, state);
+                                       state = SCE_P_STRINGEOL;
+                               }
+                else if (ch == '\\')
+                {
+                   if (chNext == '\"' || chNext == '\'' || chNext == '\\')
+                   {
+                                               i++;
+                                               ch = chNext;
+                                               chNext = styler.SafeGetCharAt(i + 1);
+                   }
+                               }
+                else if (ch == '\"')
+                {
+                                       styler.ColourTo(i, state);
+                                       state = SCE_P_DEFAULT;
+                               }
+                       }
+            else if (state == SCE_P_CHARACTER)
+             {
+                               if ((ch == '\r' || ch == '\n') && (chPrev != '\\'))
+                 {
+                                       styler.ColourTo(i - 1, state);
+                                       state = SCE_P_STRINGEOL;
+                 }
+                 else if (ch == '\\')
+                 {
+                                       if (chNext == '\"' || chNext == '\'' || chNext == '\\')
+                    {
+                                               i++;
+                                               ch = chNext;
+                                               chNext = styler.SafeGetCharAt(i + 1);
+                                       }
+                               }
+                else if (ch == '\'')
+                {
+                                       styler.ColourTo(i, state);
+                                       state = SCE_P_DEFAULT;
+                               }
+            }
+            /*
+            else if (state == SCE_P_TRIPLE)
+             {
+                               if (ch == '\'' && chPrev == '\'' && chPrev2 == '\'')
+                 {
+                    styler.ColourTo(i, state);
+                                       state = SCE_P_DEFAULT;
+                 }
+              }
+            else if (state == SCE_P_TRIPLEDOUBLE)
+              {
+                               // =end terminates the comment block
+                               if (ch == 'd' && chPrev == 'n' && chPrev2 == 'e')
+                {
+                                       if  (styler.SafeGetCharAt(i - 3) == '=')
+                     {
+                                               styler.ColourTo(i, state);
+                                               state = SCE_P_DEFAULT;
+                     }
+                 }
+                       }
+            */
+               }
+               //chPrev2 = chPrev;
+               chPrev = ch;
+       }
+       if (state == SCE_P_WORD)
+    {
+       ClassifyWordSol(styler.GetStartSegment(), lengthDoc-1, keywords, styler, prevWord);
+       }
+    else
+    {
+               styler.ColourTo(lengthDoc-1, state);
+       }
+}
+
+static void FoldSolDoc(unsigned int startPos, int length, int initStyle,
+                                                  WordList *[], Accessor &styler)
+ {
+       int lengthDoc = startPos + length;
+
+       // Backtrack to previous line in case need to fix its fold status
+       int lineCurrent = styler.GetLine(startPos);
+       if (startPos > 0) {
+               if (lineCurrent > 0)
+        {
+                       lineCurrent--;
+                       startPos = styler.LineStart(lineCurrent);
+                       if (startPos == 0)
+                               initStyle = SCE_P_DEFAULT;
+                       else
+                               initStyle = styler.StyleAt(startPos-1);
+               }
+       }
+       int state = initStyle & 31;
+       int spaceFlags = 0;
+        int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, IsSolComment);
+       if ((state == SCE_P_TRIPLE) || (state == SCE_P_TRIPLEDOUBLE))
+               indentCurrent |= SC_FOLDLEVELWHITEFLAG;
+       char chNext = styler[startPos];
+       for (int i = startPos; i < lengthDoc; i++)
+    {
+               char ch = chNext;
+               chNext = styler.SafeGetCharAt(i + 1);
+               int style = styler.StyleAt(i) & 31;
+
+               if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == lengthDoc))
+        {
+                       int lev = indentCurrent;
+            int indentNext = styler.IndentAmount(lineCurrent + 1, &spaceFlags, IsSolComment);
+                       if ((style == SCE_P_TRIPLE) || (style== SCE_P_TRIPLEDOUBLE))
+                               indentNext |= SC_FOLDLEVELWHITEFLAG;
+                       if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG))
+            {
+                               // Only non whitespace lines can be headers
+                               if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK))
+                {
+                                       lev |= SC_FOLDLEVELHEADERFLAG;
+                               } else if (indentNext & SC_FOLDLEVELWHITEFLAG)
+                {
+                                       // Line after is blank so check the next - maybe should continue further?
+                                       int spaceFlags2 = 0;
+                    int indentNext2 = styler.IndentAmount(lineCurrent + 2, &spaceFlags2, IsSolComment);
+                                       if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext2 & SC_FOLDLEVELNUMBERMASK))
+                    {
+                                               lev |= SC_FOLDLEVELHEADERFLAG;
+                                       }
+                               }
+                       }
+                       indentCurrent = indentNext;
+                       styler.SetLevel(lineCurrent, lev);
+                       lineCurrent++;
+               }
+       }
+}
+
+LexerModule lmScriptol(SCLEX_SCRIPTOL, ColouriseSolDoc, "scriptol", FoldSolDoc);
index 8455d854d2bc74fea4f697e1b9a0a506360458da..021a6572739172bb6868a3c8518be713356bf297 100644 (file)
@@ -71,16 +71,6 @@ bool EqualCaseInsensitive(const char *a, const char *b) {
        return 0 == CompareCaseInsensitive(a, b);
 }
 
        return 0 == CompareCaseInsensitive(a, b);
 }
 
-inline unsigned int HashString(const char *s, size_t len) {
-       unsigned int ret = 0;
-       while (len--) {
-               ret <<= 4;
-               ret ^= *s;
-               s++;
-       }
-       return ret;
-}
-
 PropSet::PropSet() {
        superPS = 0;
        for (int root = 0; root < hashRoots; root++)
 PropSet::PropSet() {
        superPS = 0;
        for (int root = 0; root < hashRoots; root++)
@@ -160,7 +150,7 @@ SString PropSet::Get(const char *key) {
        }
 }
 
        }
 }
 
-static bool IncludesVar(const char *value, const char *key) {
+bool PropSet::IncludesVar(const char *value, const char *key) {
        const char *var = strstr(value, "$(");
        while (var) {
                if (isprefix(var + 2, key) && (var[2 + strlen(key)] == ')')) {
        const char *var = strstr(value, "$(");
        while (var) {
                if (isprefix(var + 2, key) && (var[2 + strlen(key)] == ')')) {
index 3bce611f0df288eda0552da4072c59eaa49b13e4..3ca61bb9cec295647b059cc43c4bf8f1e4034ef1 100644 (file)
  *      Dept. of Computer Science
  *      York University
  *
  *      Dept. of Computer Science
  *      York University
  *
- * Original code available from http://www.cs.yorku.ca/~oz/
+ * Original code available from http://www.cs.yorku.ca/~oz/ 
  * Translation to C++ by Neil Hodgson neilh@scintilla.org
  * Removed all use of register.
  * Converted to modern function prototypes.
  * Translation to C++ by Neil Hodgson neilh@scintilla.org
  * Removed all use of register.
  * Converted to modern function prototypes.
- * Put all global/static variables into an object so this code can be
+ * Put all global/static variables into an object so this code can be 
  * used from multiple threads etc.
  *
  * These routines are the PUBLIC DOMAIN equivalents of regex
  * used from multiple threads etc.
  *
  * These routines are the PUBLIC DOMAIN equivalents of regex
  * Modification history:
  *
  * $Log$
  * Modification history:
  *
  * $Log$
- * Revision 1.7  2003/07/18 06:43:23  RD
- * Update to Scintilla 1.53
+ * Revision 1.8  2003/09/18 05:05:38  RD
+ * Updated to Scintilla 1.54
+ * Applied most of patch #806092
+ * Added new wxSTC sample from Otto Wyss
  *
  * Revision 1.9  2003/03/21 10:36:08  nyamatongwe
  * Detect patterns too long in regular expression search.
  *
  * Revision 1.9  2003/03/21 10:36:08  nyamatongwe
  * Detect patterns too long in regular expression search.
  *
  * Revision 1.2  88/08/28  15:36:04  oz
  * Use a complement bitmap to represent NCL.
  *
  * Revision 1.2  88/08/28  15:36:04  oz
  * Use a complement bitmap to represent NCL.
- * This removes the need to have seperate
- * code in the PMatch case block - it is
+ * This removes the need to have seperate 
+ * code in the PMatch case block - it is 
  * just CCL code now.
  * just CCL code now.
- *
+ * 
  * Use the actual CCL code in the CLO
  * section of PMatch. No need for a recursive
  * PMatch call.
  * Use the actual CCL code in the CLO
  * section of PMatch. No need for a recursive
  * PMatch call.
- *
+ * 
  * Use a bitmap table to set char bits in an
  * 8-bit chunk.
  * Use a bitmap table to set char bits in an
  * 8-bit chunk.
- *
+ * 
  * Interfaces:
  *      RESearch::Compile:        compile a regular expression into a NFA.
  *
  * Interfaces:
  *      RESearch::Compile:        compile a regular expression into a NFA.
  *
  *                     void re_fail(msg, op)
  *                     char *msg;
  *                     char op;
  *                     void re_fail(msg, op)
  *                     char *msg;
  *                     char op;
- *
+ *  
  * Regular Expressions:
  *
  *      [1]     char    matches itself, unless it is a special
  * Regular Expressions:
  *
  *      [1]     char    matches itself, unless it is a special
  *
  *      [3]     \       matches the character following it, except
  *                     when followed by a left or right round bracket,
  *
  *      [3]     \       matches the character following it, except
  *                     when followed by a left or right round bracket,
- *                     a digit 1 to 9 or a left or right angle bracket.
+ *                     a digit 1 to 9 or a left or right angle bracket. 
  *                     (see [7], [8] and [9])
  *                     (see [7], [8] and [9])
- *                     It is used as an escape character for all
+ *                     It is used as an escape character for all 
  *                     other meta-characters, and itself. When used
  *                     in a set ([4]), it is treated as an ordinary
  *                     character.
  *
  *      [4]     [set]   matches one of the characters in the set.
  *                      If the first character in the set is "^",
  *                     other meta-characters, and itself. When used
  *                     in a set ([4]), it is treated as an ordinary
  *                     character.
  *
  *      [4]     [set]   matches one of the characters in the set.
  *                      If the first character in the set is "^",
- *                      it matches a character NOT in the set, i.e.
- *                     complements the set. A shorthand S-E is
- *                     used to specify a set of characters S upto
- *                     E, inclusive. The special characters "]" and
- *                     "-" have no special meaning if they appear
+ *                      it matches a character NOT in the set, i.e. 
+ *                     complements the set. A shorthand S-E is 
+ *                     used to specify a set of characters S upto 
+ *                     E, inclusive. The special characters "]" and 
+ *                     "-" have no special meaning if they appear 
  *                     as the first chars in the set.
  *                      examples:        match:
  *
  *                     as the first chars in the set.
  *                      examples:        match:
  *
  * Notes:
  *
  *     This implementation uses a bit-set representation for character
  * Notes:
  *
  *     This implementation uses a bit-set representation for character
- *     classes for speed and compactness. Each character is represented
- *     by one bit in a 128-bit block. Thus, CCL always takes a
+ *     classes for speed and compactness. Each character is represented 
+ *     by one bit in a 128-bit block. Thus, CCL always takes a 
  *     constant 16 bytes in the internal nfa, and RESearch::Execute does a single
  *     bit comparison to locate the character in the set.
  *
  *     constant 16 bytes in the internal nfa, and RESearch::Execute does a single
  *     bit comparison to locate the character in the set.
  *
  *     compile:        CHR f CHR o CLO CHR o END CLO ANY END END
  *     matches:        fo foo fooo foobar fobar foxx ...
  *
  *     compile:        CHR f CHR o CLO CHR o END CLO ANY END END
  *     matches:        fo foo fooo foobar fobar foxx ...
  *
- *     pattern:        fo[ob]a[rz]
+ *     pattern:        fo[ob]a[rz]     
  *     compile:        CHR f CHR o CCL bitset CHR a CCL bitset END
  *     matches:        fobar fooar fobaz fooaz
  *
  *     compile:        CHR f CHR o CCL bitset CHR a CCL bitset END
  *     matches:        fobar fooar fobaz fooaz
  *
 const char bitarr[] = {1,2,4,8,16,32,64,'\200'};
 
 #define badpat(x)      (*nfa = END, x)
 const char bitarr[] = {1,2,4,8,16,32,64,'\200'};
 
 #define badpat(x)      (*nfa = END, x)
-
 RESearch::RESearch() {
        Init();
 }
 RESearch::RESearch() {
        Init();
 }
@@ -359,7 +361,7 @@ const char *RESearch::Compile(const char *pat, int length, bool caseSensitive, b
        int n;
        char mask;              /* xor mask -CCL/NCL */
        int c1, c2;
        int n;
        char mask;              /* xor mask -CCL/NCL */
        int c1, c2;
-
+               
        if (!pat || !length)
                if (sta)
                        return 0;
        if (!pat || !length)
                if (sta)
                        return 0;
@@ -401,7 +403,7 @@ const char *RESearch::Compile(const char *pat, int length, bool caseSensitive, b
 
                        i++;
                        if (*++p == '^') {
 
                        i++;
                        if (*++p == '^') {
-                               mask = '\377';
+                               mask = '\377';  
                                i++;
                                p++;
                        } else
                                i++;
                                p++;
                        } else
@@ -445,7 +447,7 @@ const char *RESearch::Compile(const char *pat, int length, bool caseSensitive, b
 
                        for (n = 0; n < BITBLK; bittab[n++] = (char) 0)
                                *mp++ = static_cast<char>(mask ^ bittab[n]);
 
                        for (n = 0; n < BITBLK; bittab[n++] = (char) 0)
                                *mp++ = static_cast<char>(mask ^ bittab[n]);
-
+       
                        break;
 
                case '*':               /* match 0 or more.. */
                        break;
 
                case '*':               /* match 0 or more.. */
@@ -590,7 +592,7 @@ const char *RESearch::Compile(const char *pat, int length, bool caseSensitive, b
  * RESearch::Execute:
  *     execute nfa to find a match.
  *
  * RESearch::Execute:
  *     execute nfa to find a match.
  *
- *     special cases: (nfa[0])
+ *     special cases: (nfa[0]) 
  *             BOL
  *                     Match only once, starting from the
  *                     beginning.
  *             BOL
  *                     Match only once, starting from the
  *                     beginning.
@@ -615,7 +617,7 @@ int RESearch::Execute(CharacterIndexer &ci, int lp, int endp) {
 
        bol = lp;
        failure = 0;
 
        bol = lp;
        failure = 0;
-
+       
        Clear();
 
        switch(*ap) {
        Clear();
 
        switch(*ap) {
@@ -656,7 +658,7 @@ int RESearch::Execute(CharacterIndexer &ci, int lp, int endp) {
        return 1;
 }
 
        return 1;
 }
 
-/*
+/* 
  * PMatch: internal routine for the hard part
  *
  *     This code is partly snarfed from an early grep written by
  * PMatch: internal routine for the hard part
  *
  *     This code is partly snarfed from an early grep written by
@@ -682,7 +684,7 @@ int RESearch::Execute(CharacterIndexer &ci, int lp, int endp) {
  *
  *     At the end of a successful match, bopat[n] and eopat[n]
  *     are set to the beginning and end of subpatterns matched
  *
  *     At the end of a successful match, bopat[n] and eopat[n]
  *     are set to the beginning and end of subpatterns matched
- *     by tagged expressions (n = 1 to 9).
+ *     by tagged expressions (n = 1 to 9).     
  *
  */
 
  *
  */
 
@@ -693,23 +695,23 @@ extern void re_fail(char *,char);
  * and EOW. the reason for not using ctype macros is that we can
  * let the user add into our own table. see RESearch::ModifyWord. This table
  * is not in the bitset form, since we may wish to extend it in the
  * and EOW. the reason for not using ctype macros is that we can
  * let the user add into our own table. see RESearch::ModifyWord. This table
  * is not in the bitset form, since we may wish to extend it in the
- * future for other character classifications.
+ * future for other character classifications. 
  *
  *     TRUE for 0-9 A-Z a-z _
  */
 static char chrtyp[MAXCHR] = {
  *
  *     TRUE for 0-9 A-Z a-z _
  */
 static char chrtyp[MAXCHR] = {
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
-       1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
-       0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
-       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-       1, 0, 0, 0, 0, 1, 0, 1, 1, 1,
-       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 
+       0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 0, 0, 0, 0, 0
        };
 
        1, 1, 1, 0, 0, 0, 0, 0
        };
 
@@ -831,10 +833,10 @@ int RESearch::PMatch(CharacterIndexer &ci, int lp, int endp, char *ap) {
  *     the compact bitset representation for the default table]
  */
 
  *     the compact bitset representation for the default table]
  */
 
-static char deftab[16] = {
-       0, 0, 0, 0, 0, 0, '\377', 003, '\376', '\377', '\377', '\207',
-       '\376', '\377', '\377', 007
-};
+static char deftab[16] = {     
+       0, 0, 0, 0, 0, 0, '\377', 003, '\376', '\377', '\377', '\207',  
+       '\376', '\377', '\377', 007 
+}; 
 
 void RESearch::ModifyWord(char *s) {
        int i;
 
 void RESearch::ModifyWord(char *s) {
        int i;
@@ -881,7 +883,7 @@ int RESearch::Substitute(CharacterIndexer &ci, char *src, char *dst) {
                                pin = c - '0';
                                break;
                        }
                                pin = c - '0';
                                break;
                        }
-
+                       
                default:
                        *dst++ = c;
                        continue;
                default:
                        *dst++ = c;
                        continue;
index d676e0f3181b072260ba48b188c60a9c0c553ba7..8ca9cd0b825608ebd24729430cdde3dbd3f471dc 100644 (file)
@@ -18,7 +18,7 @@
 #define BITBLK MAXCHR/CHRBIT
 
 class CharacterIndexer {
 #define BITBLK MAXCHR/CHRBIT
 
 class CharacterIndexer {
-public:
+public: 
        virtual char CharAt(int index)=0;
 };
 
        virtual char CharAt(int index)=0;
 };
 
index 9c3235d580f08e6c44edd76705e99dbb2f5bf124..c8edb513bc3fdca89e6ef43f7341ee4a73f5ed13 100644 (file)
  */
 class SVector {
        enum { allocSize = 4000 };
  */
 class SVector {
        enum { allocSize = 4000 };
-
+       
        int *v;                         ///< The vector
        unsigned int size;      ///< Number of elements allocated
        unsigned int len;       ///< Number of elements used in vector
        bool allocFailure;      ///< A memory allocation call has failed
        int *v;                         ///< The vector
        unsigned int size;      ///< Number of elements allocated
        unsigned int len;       ///< Number of elements used in vector
        bool allocFailure;      ///< A memory allocation call has failed
-
+       
        /** Internally allocate more elements than the user wants
         * to avoid thrashing the memory allocator. */
        void SizeTo(int newSize) {
                if (newSize < allocSize)
                        newSize += allocSize;
        /** Internally allocate more elements than the user wants
         * to avoid thrashing the memory allocator. */
        void SizeTo(int newSize) {
                if (newSize < allocSize)
                        newSize += allocSize;
-               else
+               else 
                        newSize = (newSize * 3) / 2;
                int* newv = new int[newSize];
                if (!newv) {
                        newSize = (newSize * 3) / 2;
                int* newv = new int[newSize];
                if (!newv) {
@@ -44,7 +44,7 @@ class SVector {
                delete []v;
                v = newv;
        }
                delete []v;
                v = newv;
        }
-
+       
 public:
        SVector() {
                allocFailure = false;
 public:
        SVector() {
                allocFailure = false;
index ea2e2d1d6db9eef8e3a48ccc347a2ea13c6b3aa1..039539ad3c3ece57230f7b9d8581a68ef7fa4d2d 100644 (file)
@@ -203,11 +203,11 @@ void ScintillaBase::AutoCompleteStart(int lenEntered, const char *list) {
                                pdoc->DeleteChars(currentPos, lenEntered);
                                SetEmptySelection(currentPos);
                                pdoc->InsertString(currentPos, list);
                                pdoc->DeleteChars(currentPos, lenEntered);
                                SetEmptySelection(currentPos);
                                pdoc->InsertString(currentPos, list);
-                               SetEmptySelection(currentPos + strlen(list));
+                               SetEmptySelection(currentPos + static_cast<int>(strlen(list)));
                        } else {
                                SetEmptySelection(currentPos);
                                pdoc->InsertString(currentPos, list + lenEntered);
                        } else {
                                SetEmptySelection(currentPos);
                                pdoc->InsertString(currentPos, list + lenEntered);
-                               SetEmptySelection(currentPos + strlen(list + lenEntered));
+                               SetEmptySelection(currentPos + static_cast<int>(strlen(list + lenEntered)));
                        }
                        return;
                }
                        }
                        return;
                }
@@ -340,7 +340,7 @@ void ScintillaBase::AutoCompleteCompleted() {
        if (item != -1) {
                SString piece = selected;
                pdoc->InsertString(firstPos, piece.c_str());
        if (item != -1) {
                SString piece = selected;
                pdoc->InsertString(firstPos, piece.c_str());
-               SetEmptySelection(firstPos + piece.length());
+               SetEmptySelection(firstPos + static_cast<int>(piece.length()));
        }
        pdoc->EndUndoAction();
 }
        }
        pdoc->EndUndoAction();
 }
@@ -557,7 +557,7 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara
                return ac.GetTypesep();
 
        case SCI_CALLTIPSHOW:
                return ac.GetTypesep();
 
        case SCI_CALLTIPSHOW:
-               CallTipShow(LocationFromPosition(wParam),
+               CallTipShow(LocationFromPosition(wParam), 
                        reinterpret_cast<const char *>(lParam));
                break;
 
                        reinterpret_cast<const char *>(lParam));
                break;
 
index bf0b92d57da6acee322f33c3b9f2c058a5ba1366..bb09e3f5b314f6764407a5925881d1f3db95d7cb 100644 (file)
@@ -43,7 +43,7 @@ protected:
        int lexLanguage;
        const LexerModule *lexCurrent;
        PropSet props;
        int lexLanguage;
        const LexerModule *lexCurrent;
        PropSet props;
-       enum {numWordLists=9};
+       enum {numWordLists=KEYWORDSET_MAX+1};
        WordList *keyWordLists[numWordLists+1];
        void SetLexer(uptr_t wParam);
        void SetLexerLanguage(const char *languageName);
        WordList *keyWordLists[numWordLists+1];
        void SetLexer(uptr_t wParam);
        void SetLexerLanguage(const char *languageName);
index 40a8dba6a456b8a63433b9dd0796208f415e63bd..c37bcac90045a49e44b4cc0347f117239e3412d7 100644 (file)
@@ -67,8 +67,8 @@ Style &Style::operator=(const Style &source) {
 
 void Style::Clear(ColourDesired fore_, ColourDesired back_, int size_,
                   const char *fontName_, int characterSet_,
 
 void Style::Clear(ColourDesired fore_, ColourDesired back_, int size_,
                   const char *fontName_, int characterSet_,
-                  bool bold_, bool italic_, bool eolFilled_,
-                  bool underline_, ecaseForced caseForce_,
+                  bool bold_, bool italic_, bool eolFilled_, 
+                  bool underline_, ecaseForced caseForce_, 
                  bool visible_, bool changeable_, bool hotspot_) {
        fore.desired = fore_;
        back.desired = back_;
                  bool visible_, bool changeable_, bool hotspot_) {
        fore.desired = fore_;
        back.desired = back_;
@@ -102,7 +102,7 @@ void Style::ClearTo(const Style &source) {
                source.eolFilled,
                source.underline,
                source.caseForce,
                source.eolFilled,
                source.underline,
                source.caseForce,
-               source.visible,
+               source.visible, 
                source.changeable,
                source.hotspot);
 }
                source.changeable,
                source.hotspot);
 }
index 2f1e57586089f7dc1d6289caabe4d40cf7591861..6ee930b6bbd1ec6e8090f191dd24e2f812f0e496 100644 (file)
@@ -44,8 +44,8 @@ public:
        void Clear(ColourDesired fore_, ColourDesired back_,
                   int size_,
                   const char *fontName_, int characterSet_,
        void Clear(ColourDesired fore_, ColourDesired back_,
                   int size_,
                   const char *fontName_, int characterSet_,
-                  bool bold_, bool italic_, bool eolFilled_,
-                  bool underline_, ecaseForced caseForce_,
+                  bool bold_, bool italic_, bool eolFilled_, 
+                  bool underline_, ecaseForced caseForce_, 
                   bool visible_, bool changeable_, bool hotspot_);
        void ClearTo(const Style &source);
        bool EquivalentFontTo(const Style *other) const;
                   bool visible_, bool changeable_, bool hotspot_);
        void ClearTo(const Style &source);
        bool EquivalentFontTo(const Style *other) const;
index d70ddf5c3472752facb5f2b4144f67f517e5f0f5..ce42534e7bffa52b588207e0dcd4ef38854102eb 100644 (file)
@@ -7,7 +7,7 @@
 
 #include <stdlib.h>
 #include <string.h>
 
 #include <stdlib.h>
 #include <string.h>
-#include <ctype.h>
+#include <ctype.h> 
 #include <stdio.h>
 
 #include "Platform.h"
 #include <stdio.h>
 
 #include "Platform.h"
@@ -24,7 +24,7 @@ bool WindowAccessor::InternalIsLeadByte(char ch) {
        if (SC_CP_UTF8 == codePage)
                // For lexing, all characters >= 0x80 are treated the
                // same so none is considered a lead byte.
        if (SC_CP_UTF8 == codePage)
                // For lexing, all characters >= 0x80 are treated the
                // same so none is considered a lead byte.
-               return false;
+               return false;   
        else
                return Platform::IsDBCSLeadByte(codePage, ch);
 }
        else
                return Platform::IsDBCSLeadByte(codePage, ch);
 }
@@ -71,10 +71,10 @@ int WindowAccessor::LevelAt(int line) {
        return Platform::SendScintilla(id, SCI_GETFOLDLEVEL, line, 0);
 }
 
        return Platform::SendScintilla(id, SCI_GETFOLDLEVEL, line, 0);
 }
 
-int WindowAccessor::Length() {
-       if (lenDoc == -1)
+int WindowAccessor::Length() { 
+       if (lenDoc == -1) 
                lenDoc = Platform::SendScintilla(id, SCI_GETTEXTLENGTH, 0, 0);
                lenDoc = Platform::SendScintilla(id, SCI_GETTEXTLENGTH, 0, 0);
-       return lenDoc;
+       return lenDoc; 
 }
 
 int WindowAccessor::GetLineState(int line) {
 }
 
 int WindowAccessor::GetLineState(int line) {
@@ -125,7 +125,7 @@ void WindowAccessor::Flush() {
        startPos = extremePosition;
        lenDoc = -1;
        if (validLen > 0) {
        startPos = extremePosition;
        lenDoc = -1;
        if (validLen > 0) {
-               Platform::SendScintillaPointer(id, SCI_SETSTYLINGEX, validLen,
+               Platform::SendScintillaPointer(id, SCI_SETSTYLINGEX, validLen, 
                        styleBuf);
                validLen = 0;
        }
                        styleBuf);
                validLen = 0;
        }
@@ -134,12 +134,12 @@ void WindowAccessor::Flush() {
 int WindowAccessor::IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsCommentLeader) {
        int end = Length();
        int spaceFlags = 0;
 int WindowAccessor::IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsCommentLeader) {
        int end = Length();
        int spaceFlags = 0;
-
-       // Determines the indentation level of the current line and also checks for consistent
+       
+       // Determines the indentation level of the current line and also checks for consistent 
        // indentation compared to the previous line.
        // indentation compared to the previous line.
-       // Indentation is judged consistent when the indentation whitespace of each line lines
+       // Indentation is judged consistent when the indentation whitespace of each line lines 
        // the same or the indentation of one line is a prefix of the other.
        // the same or the indentation of one line is a prefix of the other.
-
+       
        int pos = LineStart(line);
        char ch = (*this)[pos];
        int indent = 0;
        int pos = LineStart(line);
        char ch = (*this)[pos];
        int indent = 0;
@@ -166,7 +166,7 @@ int WindowAccessor::IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsC
                }
                ch = (*this)[++pos];
        }
                }
                ch = (*this)[++pos];
        }
-
+       
        *flags = spaceFlags;
        indent += SC_FOLDLEVELBASE;
        // if completely empty line or the start of a comment...
        *flags = spaceFlags;
        indent += SC_FOLDLEVELBASE;
        // if completely empty line or the start of a comment...
index c4e4f888efff31c26ed895450bdd6ac5af136f4d..c3f66c2e405d84fc26bc4b92bc437b3249a5055c 100644 (file)
@@ -49,7 +49,7 @@ void XPM::FillRun(Surface *surface, int code, int startX, int y, int x) {
        }
 }
 
        }
 }
 
-XPM::XPM(const char *textForm) :
+XPM::XPM(const char *textForm) : 
        data(0),        codes(0), colours(0), lines(0) {
        Init(textForm);
 }
        data(0),        codes(0), colours(0), lines(0) {
        Init(textForm);
 }
@@ -102,7 +102,7 @@ void XPM::Init(const char * const *linesForm) {
 
        int strings = 1+height+nColours;
        lines = new char *[strings];
 
        int strings = 1+height+nColours;
        lines = new char *[strings];
-       int allocation = 0;
+       size_t allocation = 0;
        for (int i=0; i<strings; i++) {
                allocation += MeasureLength(linesForm[i]) + 1;
        }
        for (int i=0; i<strings; i++) {
                allocation += MeasureLength(linesForm[i]) + 1;
        }
index 534196f5516b50a9a409df54b5f210f443f4664d..829cb32e6173407be04e8cc4f1bdda9cda484b51 100644 (file)
@@ -475,7 +475,7 @@ void wxStyledTextCtrl::MarkerDefineBitmap(int markerNumber, const wxBitmap& bmp)
         buff[len] = 0;
         SendMsg(2049, markerNumber, (long)buff);
         delete [] buff;
         buff[len] = 0;
         SendMsg(2049, markerNumber, (long)buff);
         delete [] buff;
-
+        
 }
 
 // Set a margin to be either numeric or symbolic.
 }
 
 // Set a margin to be either numeric or symbolic.
@@ -858,7 +858,7 @@ void wxStyledTextCtrl::RegisterImage(int type, const wxBitmap& bmp) {
         buff[len] = 0;
         SendMsg(2405, type, (long)buff);
         delete [] buff;
         buff[len] = 0;
         SendMsg(2405, type, (long)buff);
         delete [] buff;
-
+     
 }
 
 // Clear all the registered images.
 }
 
 // Clear all the registered images.
@@ -1802,12 +1802,12 @@ bool wxStyledTextCtrl::GetMouseDownCaptures() {
 }
 
 // Sets the cursor to one of the SC_CURSOR* values.
 }
 
 // Sets the cursor to one of the SC_CURSOR* values.
-void wxStyledTextCtrl::SetCursor(int cursorType) {
+void wxStyledTextCtrl::SetSTCCursor(int cursorType) {
     SendMsg(2386, cursorType, 0);
 }
 
 // Get cursor type.
     SendMsg(2386, cursorType, 0);
 }
 
 // Get cursor type.
-int wxStyledTextCtrl::GetCursor() {
+int wxStyledTextCtrl::GetSTCCursor() {
     return SendMsg(2387, 0, 0);
 }
 
     return SendMsg(2387, 0, 0);
 }
 
@@ -2115,11 +2115,11 @@ bool wxStyledTextCtrl::SaveFile(const wxString& filename)
     if (!file.IsOpened())
         return FALSE;
 
     if (!file.IsOpened())
         return FALSE;
 
-    bool success = file.Write(GetText());
+    bool success = file.Write(GetText(), *wxConvCurrent);
 
 
-    if (success)
+    if (success) {
         SetSavePoint();
         SetSavePoint();
-
+    }
     return success;
 }
 
     return success;
 }
 
@@ -2131,13 +2131,23 @@ bool wxStyledTextCtrl::LoadFile(const wxString& filename)
     if (file.IsOpened())
     {
         wxString contents;
     if (file.IsOpened())
     {
         wxString contents;
+#if wxUSE_UNICODE
+        wxMemoryBuffer buffer;
+#else
+        wxString buffer;
+#endif
+        
         off_t len = file.Length();
         off_t len = file.Length();
-
         if (len > 0)
         {
         if (len > 0)
         {
-            wxChar *buf = contents.GetWriteBuf(len);
-            success = (file.Read(buf, len) == len);
-            contents.UngetWriteBuf();
+            void *bufptr = buffer.GetWriteBuf(len);
+            success = (file.Read(bufptr, len) == len);
+            buffer.UngetWriteBuf(len);
+#if wxUSE_UNICODE
+            contents = wxString(buffer, *wxConvCurrent);
+#else
+            contents = buffer;
+#endif
         }
         else
             success = true;            // empty file is ok
         }
         else
             success = true;            // empty file is ok
@@ -2157,7 +2167,7 @@ bool wxStyledTextCtrl::LoadFile(const wxString& filename)
 //----------------------------------------------------------------------
 // Event handlers
 
 //----------------------------------------------------------------------
 // Event handlers
 
-void wxStyledTextCtrl::OnPaint(wxPaintEvent& evt) {
+void wxStyledTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(evt)) {
     wxPaintDC dc(this);
     m_swx->DoPaint(&dc, GetUpdateRegion().GetBox());
 }
     wxPaintDC dc(this);
     m_swx->DoPaint(&dc, GetUpdateRegion().GetBox());
 }
@@ -2179,7 +2189,7 @@ void wxStyledTextCtrl::OnScroll(wxScrollEvent& evt) {
     }
 }
 
     }
 }
 
-void wxStyledTextCtrl::OnSize(wxSizeEvent& evt) {
+void wxStyledTextCtrl::OnSize(wxSizeEvent& WXUNUSED(evt)) {
     wxSize sz = GetClientSize();
     m_swx->DoSize(sz.x, sz.y);
 }
     wxSize sz = GetClientSize();
     m_swx->DoSize(sz.x, sz.y);
 }
@@ -2257,9 +2267,10 @@ void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
     int key = evt.GetKeyCode();
     bool shift = evt.ShiftDown(),
          ctrl  = evt.ControlDown(),
     int key = evt.GetKeyCode();
     bool shift = evt.ShiftDown(),
          ctrl  = evt.ControlDown(),
-         alt   = evt.AltDown();
+         alt   = evt.AltDown(),
+         meta  = evt.MetaDown();
 
 
-    int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, &m_lastKeyDownConsumed);
+    int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, meta, &m_lastKeyDownConsumed);
 
 //     printf("KeyDn  key:%d  shift:%d  ctrl:%d  alt:%d  processed:%d  consumed:%d\n",
 //            key, shift, ctrl, alt, processed, m_lastKeyDownConsumed);
 
 //     printf("KeyDn  key:%d  shift:%d  ctrl:%d  alt:%d  processed:%d  consumed:%d\n",
 //            key, shift, ctrl, alt, processed, m_lastKeyDownConsumed);
@@ -2269,22 +2280,22 @@ void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
 }
 
 
 }
 
 
-void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
+void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& WXUNUSED(evt)) {
     m_swx->DoLoseFocus();
 }
 
 
     m_swx->DoLoseFocus();
 }
 
 
-void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) {
+void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& WXUNUSED(evt)) {
     m_swx->DoGainFocus();
 }
 
 
     m_swx->DoGainFocus();
 }
 
 
-void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) {
+void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(evt)) {
     m_swx->DoSysColourChange();
 }
 
 
     m_swx->DoSysColourChange();
 }
 
 
-void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) {
+void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& WXUNUSED(evt)) {
     // do nothing to help avoid flashing
 }
 
     // do nothing to help avoid flashing
 }
 
@@ -2295,7 +2306,7 @@ void wxStyledTextCtrl::OnMenu(wxCommandEvent& evt) {
 }
 
 
 }
 
 
-void wxStyledTextCtrl::OnListBox(wxCommandEvent& evt) {
+void wxStyledTextCtrl::OnListBox(wxCommandEvent& WXUNUSED(evt)) {
     m_swx->DoOnListBox();
 }
 
     m_swx->DoOnListBox();
 }
 
index c339d40d8ff39b97ff4396b96514ec796033049c..be24cc98f7a5bc1b6125ec2eb4fb612176a8669e 100644 (file)
@@ -362,7 +362,7 @@ bool wxStyledTextCtrl::LoadFile(const wxString& filename)
 //----------------------------------------------------------------------
 // Event handlers
 
 //----------------------------------------------------------------------
 // Event handlers
 
-void wxStyledTextCtrl::OnPaint(wxPaintEvent& evt) {
+void wxStyledTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(evt)) {
     wxPaintDC dc(this);
     m_swx->DoPaint(&dc, GetUpdateRegion().GetBox());
 }
     wxPaintDC dc(this);
     m_swx->DoPaint(&dc, GetUpdateRegion().GetBox());
 }
@@ -384,7 +384,7 @@ void wxStyledTextCtrl::OnScroll(wxScrollEvent& evt) {
     }
 }
 
     }
 }
 
-void wxStyledTextCtrl::OnSize(wxSizeEvent& evt) {
+void wxStyledTextCtrl::OnSize(wxSizeEvent& WXUNUSED(evt)) {
     wxSize sz = GetClientSize();
     m_swx->DoSize(sz.x, sz.y);
 }
     wxSize sz = GetClientSize();
     m_swx->DoSize(sz.x, sz.y);
 }
@@ -462,9 +462,10 @@ void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
     int key = evt.GetKeyCode();
     bool shift = evt.ShiftDown(),
          ctrl  = evt.ControlDown(),
     int key = evt.GetKeyCode();
     bool shift = evt.ShiftDown(),
          ctrl  = evt.ControlDown(),
-         alt   = evt.AltDown();
+         alt   = evt.AltDown(),
+         meta  = evt.MetaDown();
 
 
-    int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, &m_lastKeyDownConsumed);
+    int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, meta, &m_lastKeyDownConsumed);
 
 //     printf("KeyDn  key:%%d  shift:%%d  ctrl:%%d  alt:%%d  processed:%%d  consumed:%%d\n",
 //            key, shift, ctrl, alt, processed, m_lastKeyDownConsumed);
 
 //     printf("KeyDn  key:%%d  shift:%%d  ctrl:%%d  alt:%%d  processed:%%d  consumed:%%d\n",
 //            key, shift, ctrl, alt, processed, m_lastKeyDownConsumed);
@@ -474,22 +475,22 @@ void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
 }
 
 
 }
 
 
-void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
+void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& WXUNUSED(evt)) {
     m_swx->DoLoseFocus();
 }
 
 
     m_swx->DoLoseFocus();
 }
 
 
-void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) {
+void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& WXUNUSED(evt)) {
     m_swx->DoGainFocus();
 }
 
 
     m_swx->DoGainFocus();
 }
 
 
-void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) {
+void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(evt)) {
     m_swx->DoSysColourChange();
 }
 
 
     m_swx->DoSysColourChange();
 }
 
 
-void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) {
+void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& WXUNUSED(evt)) {
     // do nothing to help avoid flashing
 }
 
     // do nothing to help avoid flashing
 }
 
@@ -500,7 +501,7 @@ void wxStyledTextCtrl::OnMenu(wxCommandEvent& evt) {
 }
 
 
 }
 
 
-void wxStyledTextCtrl::OnListBox(wxCommandEvent& evt) {
+void wxStyledTextCtrl::OnListBox(wxCommandEvent& WXUNUSED(evt)) {
     m_swx->DoOnListBox();
 }
 
     m_swx->DoOnListBox();
 }
 
index ac9599b50d529f30537a668be674e79b5989a1c3..5adb5df385203a3b682b9926888eb0897f834b70 100644 (file)
@@ -52,6 +52,7 @@
 
 //-----------------------------------------
 // Commands that can be bound to keystrokes
 
 //-----------------------------------------
 // Commands that can be bound to keystrokes
+
 %(CMDS)s
 
 
 %(CMDS)s