lists.geany.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
March
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
List overview
Commits
November 2010
----- 2025 -----
March 2025
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
commits@lists.geany.org
4 participants
109 discussions
Start a n
N
ew thread
SF.net SVN: geany:[5444] branches/unstable
by eht16@users.sourceforge.net
28 Nov '10
28 Nov '10
Revision: 5444
http://geany.svn.sourceforge.net/geany/?rev=5444&view=rev
Author: eht16 Date: 2010-11-28 15:27:43 +0000 (Sun, 28 Nov 2010) Log Message: ----------- Disable preprocessor #define tracking for the CPP lexer (enabled by default in Scintilla). Modified Paths: -------------- branches/unstable/ChangeLog branches/unstable/data/filetypes.c branches/unstable/data/filetypes.cpp branches/unstable/data/filetypes.cs branches/unstable/data/filetypes.glsl branches/unstable/data/filetypes.vala Modified: branches/unstable/ChangeLog =================================================================== --- branches/unstable/ChangeLog 2010-11-24 23:38:29 UTC (rev 5443) +++ branches/unstable/ChangeLog 2010-11-28 15:27:43 UTC (rev 5444) @@ -1,3 +1,11 @@ +2010-11-28 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + + * data/filetypes.cpp, data/filetypes.vala, data/filetypes.glsl, + data/filetypes.cs, data/filetypes.c: + Disable preprocessor #define tracking for the CPP lexer + (enabled by default in Scintilla). + + 2010-11-24 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * scintilla/*: Modified: branches/unstable/data/filetypes.c =================================================================== --- branches/unstable/data/filetypes.c 2010-11-24 23:38:29 UTC (rev 5443) +++ branches/unstable/data/filetypes.c 2010-11-28 15:27:43 UTC (rev 5444) @@ -33,6 +33,7 @@ [lexer_properties] styling.within.preprocessor=1 +lexer.cpp.track.preprocessor=0 preprocessor.symbol.$(file.patterns.cpp)=# preprocessor.start.$(file.patterns.cpp)=if ifdef ifndef preprocessor.middle.$(file.patterns.cpp)=else elif Modified: branches/unstable/data/filetypes.cpp =================================================================== --- branches/unstable/data/filetypes.cpp 2010-11-24 23:38:29 UTC (rev 5443) +++ branches/unstable/data/filetypes.cpp 2010-11-28 15:27:43 UTC (rev 5444) @@ -33,6 +33,7 @@ [lexer_properties] styling.within.preprocessor=1 +lexer.cpp.track.preprocessor=0 preprocessor.symbol.$(file.patterns.cpp)=# preprocessor.start.$(file.patterns.cpp)=if ifdef ifndef preprocessor.middle.$(file.patterns.cpp)=else elif Modified: branches/unstable/data/filetypes.cs =================================================================== --- branches/unstable/data/filetypes.cs 2010-11-24 23:38:29 UTC (rev 5443) +++ branches/unstable/data/filetypes.cs 2010-11-28 15:27:43 UTC (rev 5444) @@ -33,6 +33,7 @@ [lexer_properties] styling.within.preprocessor=1 +lexer.cpp.track.preprocessor=0 preprocessor.symbol.$(file.patterns.cpp)=# preprocessor.start.$(file.patterns.cpp)=if preprocessor.middle.$(file.patterns.cpp)=else elif Modified: branches/unstable/data/filetypes.glsl =================================================================== --- branches/unstable/data/filetypes.glsl 2010-11-24 23:38:29 UTC (rev 5443) +++ branches/unstable/data/filetypes.glsl 2010-11-28 15:27:43 UTC (rev 5444) @@ -36,6 +36,7 @@ [lexer_properties] styling.within.preprocessor=1 +lexer.cpp.track.preprocessor=0 preprocessor.symbol.$(file.patterns.cpp)=# preprocessor.start.$(file.patterns.cpp)=if ifdef ifndef preprocessor.middle.$(file.patterns.cpp)=else elif Modified: branches/unstable/data/filetypes.vala =================================================================== --- branches/unstable/data/filetypes.vala 2010-11-24 23:38:29 UTC (rev 5443) +++ branches/unstable/data/filetypes.vala 2010-11-28 15:27:43 UTC (rev 5444) @@ -33,6 +33,7 @@ [lexer_properties] styling.within.preprocessor=1 +lexer.cpp.track.preprocessor=0 preprocessor.symbol.$(file.patterns.cpp)=# preprocessor.start.$(file.patterns.cpp)=if preprocessor.middle.$(file.patterns.cpp)=else elif This was sent by the
SourceForge.net
collaborative development platform, the world's largest Open Source development site.
1
0
0
0
SF.net SVN: geany:[5443] trunk
by eht16@users.sourceforge.net
25 Nov '10
25 Nov '10
Revision: 5443
http://geany.svn.sourceforge.net/geany/?rev=5443&view=rev
Author: eht16 Date: 2010-11-24 23:38:29 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Reformat and improve the Windows resource file. Modified Paths: -------------- trunk/ChangeLog trunk/geany_private.rc Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2010-11-24 23:14:59 UTC (rev 5442) +++ trunk/ChangeLog 2010-11-24 23:38:29 UTC (rev 5443) @@ -1,3 +1,9 @@ +2010-11-25 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + + * geany_private.rc: + Reformat and improve the Windows resource file. + + 2010-11-24 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> * data/filetype_extensions.conf: Modified: trunk/geany_private.rc =================================================================== --- trunk/geany_private.rc 2010-11-24 23:14:59 UTC (rev 5442) +++ trunk/geany_private.rc 2010-11-24 23:38:29 UTC (rev 5443) @@ -1,28 +1,32 @@ #include <windows.h> // include for version info constants +#define VER_FILEVERSION 0,20,0,0 +#define VER_FILEVERSION_STR "0.20" A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "../icons/geany.ico" -1 VERSIONINFO -FILEVERSION 0,20,0,0 -PRODUCTVERSION 0,20,0,0 -FILETYPE VFT_APP +VS_VERSION_INFO VERSIONINFO +FILEVERSION VER_FILEVERSION +PRODUCTVERSION VER_FILEVERSION +FILETYPE VFT_APP { - BLOCK "StringFileInfo" - { - BLOCK "040704E4" - { - VALUE "CompanyName", "" - VALUE "FileVersion", "0.20" - VALUE "FileDescription", "Geany" - VALUE "InternalName", "geany" - VALUE "LegalCopyright", "Copyright 2005-2010 by the Geany developers" - VALUE "LegalTrademarks", "" - VALUE "OriginalFilename", "geany" - VALUE "ProductName", "geany" - VALUE "ProductVersion", "0.20" - } - } + BLOCK "StringFileInfo" + { + // U.S. English, Multilingual + // (see
http://msdn.microsoft.com/en-us/library/aa381049%28VS.85%29.aspx
) + BLOCK "040904E4" + { + VALUE "CompanyName", "" + VALUE "FileVersion", VER_FILEVERSION_STR + VALUE "FileDescription", "Geany" + VALUE "InternalName", "Geany" + VALUE "LegalCopyright", "Copyright 2005-2010 by the Geany developers" + VALUE "LegalTrademarks", "" + VALUE "OriginalFilename", "Geany.exe" + VALUE "ProductName", "Geany" + VALUE "ProductVersion", VER_FILEVERSION_STR + } + } } This was sent by the
SourceForge.net
collaborative development platform, the world's largest Open Source development site.
1
0
0
0
SF.net SVN: geany:[5442] branches/unstable
by eht16@users.sourceforge.net
25 Nov '10
25 Nov '10
Revision: 5442
http://geany.svn.sourceforge.net/geany/?rev=5442&view=rev
Author: eht16 Date: 2010-11-24 23:14:59 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Update Windows-Makefile-based build system for Scintilla. Modified Paths: -------------- branches/unstable/ChangeLog branches/unstable/scintilla/makefile.win32 Modified: branches/unstable/ChangeLog =================================================================== --- branches/unstable/ChangeLog 2010-11-24 21:43:31 UTC (rev 5441) +++ branches/unstable/ChangeLog 2010-11-24 23:14:59 UTC (rev 5442) @@ -8,6 +8,8 @@ Update Waf-based build system for Scintilla. * scintilla/Makefile.am, scintilla/include/Makefile.am: Update autotools-based build system for Scintilla. + * scintilla/makefile.win32: + Update Windows-Makefile-based build system for Scintilla. 2010-11-22 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> Modified: branches/unstable/scintilla/makefile.win32 =================================================================== --- branches/unstable/scintilla/makefile.win32 2010-11-24 21:43:31 UTC (rev 5441) +++ branches/unstable/scintilla/makefile.win32 2010-11-24 23:14:59 UTC (rev 5442) @@ -31,11 +31,12 @@ -I$(PREFIX)/include -vpath %.h . include -vpath %.cxx . +vpath %.h gtk lexers lexlib src include +vpath %.cxx gtk lexers lexlib src +vpath %.c gtk -INCLUDEDIRS=-I include -I . $(GTK_INCLUDES) -CXXBASEFLAGS=-Wall -Wno-missing-braces -Wno-char-subscripts -DGTK -DGTK2 -DSCI_LEXER $(INCLUDEDIRS) -mms-bitfields +INCLUDEDIRS=-I include -I src -I lexlib -I . $(GTK_INCLUDES) +CXXBASEFLAGS=-Wall -Wno-missing-braces -Wno-char-subscripts -DGTK -DSCI_LEXER $(INCLUDEDIRS) -mms-bitfields ifdef THREADS THREADFLAGS= @@ -57,32 +58,86 @@ .c.o: $(CCOMP) $(CXXFLAGS) -w -c $< -#++Autogenerated -- run src/LexGen.py to regenerate -#**LEXOBJS=\\\n\(\*.o \) LEXOBJS=\ -LexAda.o LexBash.o LexAsm.o LexCSS.o LexCPP.o LexHTML.o LexOthers.o LexPascal.o \ -LexPerl.o LexPython.o LexSQL.o LexCaml.o LexTCL.o LexTxt2tags.o LexRuby.o \ -LexErlang.o LexForth.o LexFortran.o LexVHDL.o LexVerilog.o \ -LexMarkdown.o LexMatlab.o \ -LexD.o LexLisp.o LexLua.o LexHaskell.o LexBasic.o LexR.o LexYAML.o LexCmake.o LexNsis.o -#--Autogenerated -- end of automatically generated section +LexAda.o \ +LexAsm.o \ +LexBash.o \ +LexCSS.o \ +LexCPP.o \ +LexHTML.o \ +LexOthers.o \ +LexPascal.o \ +LexPerl.o \ +LexPython.o \ +LexSQL.o \ +LexCaml.o \ +LexTCL.o \ +LexTxt2tags.o \ +LexRuby.o \ +LexErlang.o \ +LexForth.o \ +LexFortran.o \ +LexVHDL.o \ +LexVerilog.o \ +LexMarkdown.o \ +LexMatlab.o \ +LexD.o \ +LexLisp.o \ +LexLua.o \ +LexHaskell.o \ +LexBasic.o \ +LexR.o \ +LexYAML.o \ +LexCmake.o \ +LexNsis.o all: $(COMPLIB) clean: -$(RM) deps.mak *.o $(COMPLIB) -$(COMPLIB): DocumentAccessor.o WindowAccessor.o KeyWords.o StyleContext.o Document.o CallTip.o \ - ScintillaBase.o ContractionState.o Editor.o ExternalLexer.o PropSet.o PlatGTK.o \ - KeyMap.o LineMarker.o ScintillaGTK.o CellBuffer.o ViewStyle.o \ - RESearch.o Style.o Indicator.o AutoComplete.o UniConversion.o CharClassify.o XPM.o \ - RunStyles.o Decoration.o PositionCache.o PerLine.o Selection.o \ - $(MARSHALLER) $(LEXOBJS) +SRCOBJS=\ + PlatGTK.o \ + ScintillaGTK.o \ + Accessor.o \ + CharacterSet.o \ + LexerBase.o \ + LexerModule.o \ + LexerNoExceptions.o \ + LexerSimple.o \ + PropSetSimple.o \ + StyleContext.o \ + WordList.o \ + AutoComplete.o \ + CallTip.o \ + Catalogue.o \ + CellBuffer.o \ + CharClassify.o \ + ContractionState.o \ + Decoration.o \ + Document.o \ + Editor.o \ + ExternalLexer.o \ + Indicator.o \ + KeyMap.o \ + LineMarker.o \ + PerLine.o \ + PositionCache.o \ + RESearch.o \ + RunStyles.o \ + ScintillaBase.o \ + Selection.o \ + Style.o \ + UniConversion.o \ + ViewStyle.o \ + XPM.o + +$(COMPLIB): $(MARSHALLER) $(LEXOBJS) $(SRCOBJS) $(AR) rc $@ $^ $(RANLIB) $@ deps.mak: - $(CC) -MM $(CXXFLAGS) *.cxx >deps.mak + $(CC) -MM $(CXXFLAGS) gtk\*.cxx lexers\*.cxx lexlib\*.cxx src\*.cxx >deps.mak # Generate header dependencies with "make deps.mak" include deps.mak This was sent by the
SourceForge.net
collaborative development platform, the world's largest Open Source development site.
1
0
0
0
SF.net SVN: geany:[5441] branches/unstable
by eht16@users.sourceforge.net
24 Nov '10
24 Nov '10
Revision: 5441
http://geany.svn.sourceforge.net/geany/?rev=5441&view=rev
Author: eht16 Date: 2010-11-24 21:43:31 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Update autotools-based build system for Scintilla. Modified Paths: -------------- branches/unstable/ChangeLog branches/unstable/scintilla/Makefile.am branches/unstable/scintilla/include/Makefile.am Modified: branches/unstable/ChangeLog =================================================================== --- branches/unstable/ChangeLog 2010-11-24 21:41:47 UTC (rev 5440) +++ branches/unstable/ChangeLog 2010-11-24 21:43:31 UTC (rev 5441) @@ -6,6 +6,8 @@ remove unused lexers. * wscript: Update Waf-based build system for Scintilla. + * scintilla/Makefile.am, scintilla/include/Makefile.am: + Update autotools-based build system for Scintilla. 2010-11-22 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> Modified: branches/unstable/scintilla/Makefile.am =================================================================== --- branches/unstable/scintilla/Makefile.am 2010-11-24 21:41:47 UTC (rev 5440) +++ branches/unstable/scintilla/Makefile.am 2010-11-24 21:43:31 UTC (rev 5441) @@ -3,111 +3,125 @@ noinst_LIBRARIES=libscintilla.a -AM_CXXFLAGS = -DNDEBUG -DGTK -DGTK2 -DSCI_LEXER -DG_THREADS_IMPL_NONE +AM_CXXFLAGS = -DNDEBUG -DGTK -DSCI_LEXER -DG_THREADS_IMPL_NONE LEXER_SRCS= \ -LexAda.cxx \ -LexAsm.cxx \ -LexBasic.cxx \ -LexBash.cxx \ -LexCPP.cxx \ -LexCaml.cxx \ -LexCmake.cxx \ -LexCSS.cxx \ -LexD.cxx \ -LexErlang.cxx \ -LexForth.cxx \ -LexFortran.cxx \ -LexHaskell.cxx \ -LexHTML.cxx \ -LexLisp.cxx \ -LexLua.cxx \ -LexMarkdown.cxx \ -LexMatlab.cxx \ -LexNsis.cxx \ -LexOthers.cxx \ -LexPascal.cxx \ -LexPerl.cxx \ -LexPython.cxx \ -LexR.cxx \ -LexRuby.cxx \ -LexSQL.cxx \ -LexTxt2tags.cxx \ -LexTCL.cxx \ -LexVHDL.cxx \ -LexVerilog.cxx \ -LexYAML.cxx +lexers/LexAda.cxx \ +lexers/LexAsm.cxx \ +lexers/LexBash.cxx \ +lexers/LexBasic.cxx \ +lexers/LexCPP.cxx \ +lexers/LexCSS.cxx \ +lexers/LexCaml.cxx \ +lexers/LexCmake.cxx \ +lexers/LexD.cxx \ +lexers/LexErlang.cxx \ +lexers/LexForth.cxx \ +lexers/LexFortran.cxx \ +lexers/LexHTML.cxx \ +lexers/LexHaskell.cxx \ +lexers/LexLisp.cxx \ +lexers/LexLua.cxx \ +lexers/LexMarkdown.cxx \ +lexers/LexMatlab.cxx \ +lexers/LexNsis.cxx \ +lexers/LexOthers.cxx \ +lexers/LexPascal.cxx \ +lexers/LexPerl.cxx \ +lexers/LexPython.cxx \ +lexers/LexR.cxx \ +lexers/LexRuby.cxx \ +lexers/LexSQL.cxx \ +lexers/LexTCL.cxx \ +lexers/LexTxt2tags.cxx \ +lexers/LexVHDL.cxx \ +lexers/LexVerilog.cxx \ +lexers/LexYAML.cxx SRCS= \ -CallTip.cxx \ -CellBuffer.cxx \ -CharClassify.cxx \ -ContractionState.cxx \ -Decoration.cxx \ -DocumentAccessor.cxx \ -Document.cxx \ -Editor.cxx \ -Indicator.cxx \ -KeyMap.cxx \ -KeyWords.cxx \ -LineMarker.cxx \ -PerLine.cxx \ -PositionCache.cxx \ -PropSet.cxx \ -RESearch.cxx \ -RunStyles.cxx \ -ScintillaBase.cxx \ -Selection.cxx \ -StyleContext.cxx \ -Style.cxx \ -UniConversion.cxx \ -ViewStyle.cxx \ -WindowAccessor.cxx \ -XPM.cxx \ -AutoComplete.cxx \ -ExternalLexer.cxx \ -PlatGTK.cxx \ -ScintillaGTK.cxx \ -AutoComplete.h \ -CallTip.h \ -CellBuffer.h \ -CharClassify.h \ -CharacterSet.h \ -ContractionState.h \ -Converter.h \ -Decoration.h \ -DocumentAccessor.h \ -Document.h \ -Editor.h \ -ExternalLexer.h \ -Indicator.h \ -KeyMap.h \ -LineMarker.h \ -Partitioning.h \ -PerLine.h \ -PositionCache.h \ -PropSetSimple.h \ -RESearch.h \ -RunStyles.h \ -ScintillaBase.h \ -scintilla-marshal.h \ -Selection.h \ -SplitVector.h \ -StyleContext.h \ -Style.h \ -SVector.h \ -UniConversion.h \ -ViewStyle.h \ -XPM.h \ -scintilla-marshal.c \ +gtk/Converter.h \ +gtk/PlatGTK.cxx \ +gtk/ScintillaGTK.cxx \ +gtk/scintilla-marshal.c \ +gtk/scintilla-marshal.h \ +lexlib/Accessor.cxx \ +lexlib/Accessor.h \ +lexlib/CharacterSet.cxx \ +lexlib/CharacterSet.h \ +lexlib/LexAccessor.h \ +lexlib/LexerBase.cxx \ +lexlib/LexerBase.h \ +lexlib/LexerModule.cxx \ +lexlib/LexerModule.h \ +lexlib/LexerNoExceptions.cxx \ +lexlib/LexerNoExceptions.h \ +lexlib/LexerSimple.cxx \ +lexlib/LexerSimple.h \ +lexlib/OptionSet.h \ +lexlib/PropSetSimple.cxx \ +lexlib/PropSetSimple.h \ +lexlib/StyleContext.cxx \ +lexlib/StyleContext.h \ +lexlib/WordList.cxx \ +lexlib/WordList.h \ +src/AutoComplete.cxx \ +src/AutoComplete.h \ +src/CallTip.cxx \ +src/CallTip.h \ +src/Catalogue.cxx \ +src/Catalogue.h \ +src/CellBuffer.cxx \ +src/CellBuffer.h \ +src/CharClassify.cxx \ +src/CharClassify.h \ +src/ContractionState.cxx \ +src/ContractionState.h \ +src/Decoration.cxx \ +src/Decoration.h \ +src/Document.cxx \ +src/Document.h \ +src/Editor.cxx \ +src/Editor.h \ +src/ExternalLexer.cxx \ +src/ExternalLexer.h \ +src/FontQuality.h \ +src/Indicator.cxx \ +src/Indicator.h \ +src/KeyMap.cxx \ +src/KeyMap.h \ +src/LineMarker.cxx \ +src/LineMarker.h \ +src/Partitioning.h \ +src/PerLine.cxx \ +src/PerLine.h \ +src/PositionCache.cxx \ +src/PositionCache.h \ +src/RESearch.cxx \ +src/RESearch.h \ +src/RunStyles.cxx \ +src/RunStyles.h \ +src/SVector.h \ +src/ScintillaBase.cxx \ +src/ScintillaBase.h \ +src/Selection.cxx \ +src/Selection.h \ +src/SplitVector.h \ +src/Style.cxx \ +src/Style.h \ +src/UniConversion.cxx \ +src/UniConversion.h \ +src/ViewStyle.cxx \ +src/ViewStyle.h \ +src/XPM.cxx \ +src/XPM.h \ $(LEXER_SRCS) libscintilla_a_SOURCES = $(SRCS) -INCLUDES=-I$(top_srcdir) -I$(srcdir)/include @GTK_CFLAGS@ +INCLUDES=-I$(top_srcdir) -I$(srcdir)/include -I$(srcdir)/src -I$(srcdir)/lexlib @GTK_CFLAGS@ -marshallers: scintilla-marshal.list - glib-genmarshal --prefix scintilla_marshal scintilla-marshal.list --header > scintilla-marshal.h - glib-genmarshal --prefix scintilla_marshal scintilla-marshal.list --body > scintilla-marshal.c +marshallers: gtk/scintilla-marshal.list + glib-genmarshal --prefix scintilla_marshal gtk/scintilla-marshal.list --header > gtk/scintilla-marshal.h + glib-genmarshal --prefix scintilla_marshal gtk/scintilla-marshal.list --body > gtk/scintilla-marshal.c -EXTRA_DIST=scintilla-marshal.list scintilla-marshal.c scintilla-marshal.h License.txt +EXTRA_DIST=gtk/scintilla-marshal.list License.txt Modified: branches/unstable/scintilla/include/Makefile.am =================================================================== --- branches/unstable/scintilla/include/Makefile.am 2010-11-24 21:41:47 UTC (rev 5440) +++ branches/unstable/scintilla/include/Makefile.am 2010-11-24 21:43:31 UTC (rev 5441) @@ -1,12 +1,8 @@ ## Process this file with automake to produce Makefile.in noinst_HEADERS = \ - Accessor.h \ - KeyWords.h \ - Platform.h \ - PropSet.h \ - WindowAccessor.h \ - SString.h + ILexer.h \ + Platform.h scintilla_includedir = $(includedir)/geany/scintilla/ scintilla_include_HEADERS = \ This was sent by the
SourceForge.net
collaborative development platform, the world's largest Open Source development site.
1
0
0
0
SF.net SVN: geany:[5440] branches/unstable/wscript
by eht16@users.sourceforge.net
24 Nov '10
24 Nov '10
Revision: 5440
http://geany.svn.sourceforge.net/geany/?rev=5440&view=rev
Author: eht16 Date: 2010-11-24 21:41:47 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Revert last commit, not necessary Modified Paths: -------------- branches/unstable/wscript Modified: branches/unstable/wscript =================================================================== --- branches/unstable/wscript 2010-11-24 21:39:50 UTC (rev 5439) +++ branches/unstable/wscript 2010-11-24 21:41:47 UTC (rev 5440) @@ -405,7 +405,7 @@ src/templates.h src/toolbar.h src/ui_utils.h src/utils.h plugins/geanyplugin.h plugins/geanyfunctions.h''') bld.install_files('${PREFIX}/include/geany/scintilla', ''' - scintilla/include/ILexer.h scintilla/include/SciLexer.h scintilla/include/Scintilla.h + scintilla/include/SciLexer.h scintilla/include/Scintilla.h scintilla/include/Scintilla.iface scintilla/include/ScintillaWidget.h ''') bld.install_files('${PREFIX}/include/geany/tagmanager', ''' tagmanager/include/tm_file_entry.h tagmanager/include/tm_project.h This was sent by the
SourceForge.net
collaborative development platform, the world's largest Open Source development site.
1
0
0
0
SF.net SVN: geany:[5439] branches/unstable/wscript
by eht16@users.sourceforge.net
24 Nov '10
24 Nov '10
Revision: 5439
http://geany.svn.sourceforge.net/geany/?rev=5439&view=rev
Author: eht16 Date: 2010-11-24 21:39:50 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Install ILexer.h as well Modified Paths: -------------- branches/unstable/wscript Modified: branches/unstable/wscript =================================================================== --- branches/unstable/wscript 2010-11-24 21:29:16 UTC (rev 5438) +++ branches/unstable/wscript 2010-11-24 21:39:50 UTC (rev 5439) @@ -405,7 +405,7 @@ src/templates.h src/toolbar.h src/ui_utils.h src/utils.h plugins/geanyplugin.h plugins/geanyfunctions.h''') bld.install_files('${PREFIX}/include/geany/scintilla', ''' - scintilla/include/SciLexer.h scintilla/include/Scintilla.h + scintilla/include/ILexer.h scintilla/include/SciLexer.h scintilla/include/Scintilla.h scintilla/include/Scintilla.iface scintilla/include/ScintillaWidget.h ''') bld.install_files('${PREFIX}/include/geany/tagmanager', ''' tagmanager/include/tm_file_entry.h tagmanager/include/tm_project.h This was sent by the
SourceForge.net
collaborative development platform, the world's largest Open Source development site.
1
0
0
0
SF.net SVN: geany:[5438] branches/unstable
by eht16@users.sourceforge.net
24 Nov '10
24 Nov '10
Revision: 5438
http://geany.svn.sourceforge.net/geany/?rev=5438&view=rev
Author: eht16 Date: 2010-11-24 21:29:16 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Update Waf-based build system for Scintilla. Modified Paths: -------------- branches/unstable/ChangeLog branches/unstable/wscript Modified: branches/unstable/ChangeLog =================================================================== --- branches/unstable/ChangeLog 2010-11-24 21:23:05 UTC (rev 5437) +++ branches/unstable/ChangeLog 2010-11-24 21:29:16 UTC (rev 5438) @@ -4,6 +4,8 @@ Update Scintilla to version 2.22. Keep Scintilla's directory structure mostly and only remove unused lexers. + * wscript: + Update Waf-based build system for Scintilla. 2010-11-22 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> Modified: branches/unstable/wscript =================================================================== --- branches/unstable/wscript 2010-11-24 21:23:05 UTC (rev 5437) +++ branches/unstable/wscript 2010-11-24 21:29:16 UTC (rev 5438) @@ -77,29 +77,7 @@ 'tagmanager/tm_tag.c', 'tagmanager/tm_tagmanager.c', 'tagmanager/tm_work_object.c', 'tagmanager/tm_workspace.c', 'tagmanager/vhdl.c', 'tagmanager/verilog.c', 'tagmanager/vstring.c']) -scintilla_sources = set([ - 'scintilla/AutoComplete.cxx', 'scintilla/CallTip.cxx', 'scintilla/CellBuffer.cxx', - 'scintilla/CharClassify.cxx', 'scintilla/ContractionState.cxx', 'scintilla/Decoration.cxx', - 'scintilla/DocumentAccessor.cxx', 'scintilla/Document.cxx', 'scintilla/Editor.cxx', - 'scintilla/ExternalLexer.cxx', 'scintilla/Indicator.cxx', 'scintilla/KeyMap.cxx', - 'scintilla/KeyWords.cxx', - 'scintilla/LexAda.cxx', 'scintilla/LexAsm.cxx', 'scintilla/LexBash.cxx', - 'scintilla/LexBasic.cxx', 'scintilla/LexCaml.cxx', 'scintilla/LexCmake.cxx', 'scintilla/LexCPP.cxx', - 'scintilla/LexCSS.cxx', 'scintilla/LexD.cxx', 'scintilla/LexErlang.cxx', 'scintilla/LexForth.cxx', - 'scintilla/LexFortran.cxx', 'scintilla/LexHaskell.cxx', 'scintilla/LexHTML.cxx', 'scintilla/LexLisp.cxx', - 'scintilla/LexLua.cxx', 'scintilla/LexMarkdown.cxx', 'scintilla/LexMatlab.cxx', - 'scintilla/LexNsis.cxx', 'scintilla/LexOthers.cxx', - 'scintilla/LexPascal.cxx', 'scintilla/LexPerl.cxx', 'scintilla/LexPython.cxx', - 'scintilla/LexR.cxx', 'scintilla/LexRuby.cxx', 'scintilla/LexSQL.cxx', - 'scintilla/LexTCL.cxx', 'scintilla/LexTxt2tags.cxx', - 'scintilla/LexVHDL.cxx', 'scintilla/LexVerilog.cxx', 'scintilla/LexYAML.cxx', - 'scintilla/LineMarker.cxx', 'scintilla/PerLine.cxx', - 'scintilla/PlatGTK.cxx', - 'scintilla/PositionCache.cxx', 'scintilla/PropSet.cxx', 'scintilla/RESearch.cxx', - 'scintilla/RunStyles.cxx', 'scintilla/ScintillaBase.cxx', 'scintilla/ScintillaGTK.cxx', - 'scintilla/scintilla-marshal.c', 'scintilla/Selection.cxx', 'scintilla/StyleContext.cxx', 'scintilla/Style.cxx', - 'scintilla/UniConversion.cxx', 'scintilla/ViewStyle.cxx', 'scintilla/WindowAccessor.cxx', - 'scintilla/XPM.cxx']) +scintilla_sources = set(['scintilla/gtk/scintilla-marshal.c']) geany_sources = set([ 'src/about.c', 'src/build.c', 'src/callbacks.c', 'src/dialogs.c', 'src/document.c', @@ -233,7 +211,7 @@ # Scintilla flags conf.env.append_value('CFLAGS', ['-DGTK']) conf.env.append_value('CXXFLAGS', - ['-DNDEBUG', '-DGTK', '-DGTK2', '-DSCI_LEXER', '-DG_THREADS_IMPL_NONE']) + ['-DNDEBUG', '-DGTK', '-DSCI_LEXER', '-DG_THREADS_IMPL_NONE']) # summary Logs.pprint('BLUE', 'Summary:') @@ -314,12 +292,14 @@ # Scintilla + files = bld.srcnode.ant_glob('scintilla/**/*.cxx', src=True, dir=False) + scintilla_sources.update(files) bld.new_task_gen( features = ['c', 'cxx', 'cxxstlib'], name = 'scintilla', target = 'scintilla', source = scintilla_sources, - includes = ['.', 'scintilla/include/'], + includes = ['.', 'scintilla/include', 'scintilla/src', 'scintilla/lexlib'], uselib = 'GTK', install_path = None) # do not install this library This was sent by the
SourceForge.net
collaborative development platform, the world's largest Open Source development site.
1
0
0
0
SF.net SVN: geany:[5437] branches/unstable
by eht16@users.sourceforge.net
24 Nov '10
24 Nov '10
Revision: 5437
http://geany.svn.sourceforge.net/geany/?rev=5437&view=rev
Author: eht16 Date: 2010-11-24 21:23:05 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Update Scintilla to version 2.22. Keep Scintilla's directory structure mostly and only remove unused lexers. For now, this will break the build. The build systems have to be updated as well as scintilla_changes.patch. Modified Paths: -------------- branches/unstable/ChangeLog branches/unstable/scintilla/include/SciLexer.h branches/unstable/scintilla/include/Scintilla.h branches/unstable/scintilla/include/Scintilla.iface branches/unstable/scintilla/include/ScintillaWidget.h Added Paths: ----------- branches/unstable/scintilla/gtk/ branches/unstable/scintilla/gtk/Converter.h branches/unstable/scintilla/gtk/PlatGTK.cxx branches/unstable/scintilla/gtk/ScintillaGTK.cxx branches/unstable/scintilla/gtk/scintilla-marshal.c branches/unstable/scintilla/gtk/scintilla-marshal.h branches/unstable/scintilla/gtk/scintilla-marshal.list branches/unstable/scintilla/include/ILexer.h branches/unstable/scintilla/lexers/ branches/unstable/scintilla/lexers/LexAda.cxx branches/unstable/scintilla/lexers/LexAsm.cxx branches/unstable/scintilla/lexers/LexBash.cxx branches/unstable/scintilla/lexers/LexBasic.cxx branches/unstable/scintilla/lexers/LexCPP.cxx branches/unstable/scintilla/lexers/LexCSS.cxx branches/unstable/scintilla/lexers/LexCaml.cxx branches/unstable/scintilla/lexers/LexCmake.cxx branches/unstable/scintilla/lexers/LexD.cxx branches/unstable/scintilla/lexers/LexErlang.cxx branches/unstable/scintilla/lexers/LexForth.cxx branches/unstable/scintilla/lexers/LexFortran.cxx branches/unstable/scintilla/lexers/LexHTML.cxx branches/unstable/scintilla/lexers/LexHaskell.cxx branches/unstable/scintilla/lexers/LexLisp.cxx branches/unstable/scintilla/lexers/LexLua.cxx branches/unstable/scintilla/lexers/LexMarkdown.cxx branches/unstable/scintilla/lexers/LexMatlab.cxx branches/unstable/scintilla/lexers/LexNsis.cxx branches/unstable/scintilla/lexers/LexOthers.cxx branches/unstable/scintilla/lexers/LexPascal.cxx branches/unstable/scintilla/lexers/LexPerl.cxx branches/unstable/scintilla/lexers/LexPython.cxx branches/unstable/scintilla/lexers/LexR.cxx branches/unstable/scintilla/lexers/LexRuby.cxx branches/unstable/scintilla/lexers/LexSQL.cxx branches/unstable/scintilla/lexers/LexTCL.cxx branches/unstable/scintilla/lexers/LexTxt2tags.cxx branches/unstable/scintilla/lexers/LexVHDL.cxx branches/unstable/scintilla/lexers/LexVerilog.cxx branches/unstable/scintilla/lexers/LexYAML.cxx branches/unstable/scintilla/lexlib/ branches/unstable/scintilla/lexlib/Accessor.cxx branches/unstable/scintilla/lexlib/Accessor.h branches/unstable/scintilla/lexlib/CharacterSet.cxx branches/unstable/scintilla/lexlib/CharacterSet.h branches/unstable/scintilla/lexlib/LexAccessor.h branches/unstable/scintilla/lexlib/LexerBase.cxx branches/unstable/scintilla/lexlib/LexerBase.h branches/unstable/scintilla/lexlib/LexerModule.cxx branches/unstable/scintilla/lexlib/LexerModule.h branches/unstable/scintilla/lexlib/LexerNoExceptions.cxx branches/unstable/scintilla/lexlib/LexerNoExceptions.h branches/unstable/scintilla/lexlib/LexerSimple.cxx branches/unstable/scintilla/lexlib/LexerSimple.h branches/unstable/scintilla/lexlib/OptionSet.h branches/unstable/scintilla/lexlib/PropSetSimple.cxx branches/unstable/scintilla/lexlib/PropSetSimple.h branches/unstable/scintilla/lexlib/StyleContext.cxx branches/unstable/scintilla/lexlib/StyleContext.h branches/unstable/scintilla/lexlib/WordList.cxx branches/unstable/scintilla/lexlib/WordList.h branches/unstable/scintilla/src/ branches/unstable/scintilla/src/AutoComplete.cxx branches/unstable/scintilla/src/AutoComplete.h branches/unstable/scintilla/src/CallTip.cxx branches/unstable/scintilla/src/CallTip.h branches/unstable/scintilla/src/Catalogue.cxx branches/unstable/scintilla/src/Catalogue.h branches/unstable/scintilla/src/CellBuffer.cxx branches/unstable/scintilla/src/CellBuffer.h branches/unstable/scintilla/src/CharClassify.cxx branches/unstable/scintilla/src/CharClassify.h branches/unstable/scintilla/src/ContractionState.cxx branches/unstable/scintilla/src/ContractionState.h branches/unstable/scintilla/src/Decoration.cxx branches/unstable/scintilla/src/Decoration.h branches/unstable/scintilla/src/Document.cxx branches/unstable/scintilla/src/Document.h branches/unstable/scintilla/src/Editor.cxx branches/unstable/scintilla/src/Editor.h branches/unstable/scintilla/src/ExternalLexer.cxx branches/unstable/scintilla/src/ExternalLexer.h branches/unstable/scintilla/src/FontQuality.h branches/unstable/scintilla/src/Indicator.cxx branches/unstable/scintilla/src/Indicator.h branches/unstable/scintilla/src/KeyMap.cxx branches/unstable/scintilla/src/KeyMap.h branches/unstable/scintilla/src/LineMarker.cxx branches/unstable/scintilla/src/LineMarker.h branches/unstable/scintilla/src/Partitioning.h branches/unstable/scintilla/src/PerLine.cxx branches/unstable/scintilla/src/PerLine.h branches/unstable/scintilla/src/PositionCache.cxx branches/unstable/scintilla/src/PositionCache.h branches/unstable/scintilla/src/RESearch.cxx branches/unstable/scintilla/src/RESearch.h branches/unstable/scintilla/src/RunStyles.cxx branches/unstable/scintilla/src/RunStyles.h branches/unstable/scintilla/src/SVector.h branches/unstable/scintilla/src/ScintillaBase.cxx branches/unstable/scintilla/src/ScintillaBase.h branches/unstable/scintilla/src/Selection.cxx branches/unstable/scintilla/src/Selection.h branches/unstable/scintilla/src/SplitVector.h branches/unstable/scintilla/src/Style.cxx branches/unstable/scintilla/src/Style.h branches/unstable/scintilla/src/UniConversion.cxx branches/unstable/scintilla/src/UniConversion.h branches/unstable/scintilla/src/ViewStyle.cxx branches/unstable/scintilla/src/ViewStyle.h branches/unstable/scintilla/src/XPM.cxx branches/unstable/scintilla/src/XPM.h Removed Paths: ------------- branches/unstable/scintilla/AutoComplete.cxx branches/unstable/scintilla/AutoComplete.h branches/unstable/scintilla/CallTip.cxx branches/unstable/scintilla/CallTip.h branches/unstable/scintilla/CellBuffer.cxx branches/unstable/scintilla/CellBuffer.h branches/unstable/scintilla/CharClassify.cxx branches/unstable/scintilla/CharClassify.h branches/unstable/scintilla/CharacterSet.h branches/unstable/scintilla/ContractionState.cxx branches/unstable/scintilla/ContractionState.h branches/unstable/scintilla/Converter.h branches/unstable/scintilla/Decoration.cxx branches/unstable/scintilla/Decoration.h branches/unstable/scintilla/Document.cxx branches/unstable/scintilla/Document.h branches/unstable/scintilla/DocumentAccessor.cxx branches/unstable/scintilla/DocumentAccessor.h branches/unstable/scintilla/Editor.cxx branches/unstable/scintilla/Editor.h branches/unstable/scintilla/ExternalLexer.cxx branches/unstable/scintilla/ExternalLexer.h branches/unstable/scintilla/Indicator.cxx branches/unstable/scintilla/Indicator.h branches/unstable/scintilla/KeyMap.cxx branches/unstable/scintilla/KeyMap.h branches/unstable/scintilla/KeyWords.cxx branches/unstable/scintilla/LexAda.cxx branches/unstable/scintilla/LexAsm.cxx branches/unstable/scintilla/LexBash.cxx branches/unstable/scintilla/LexBasic.cxx branches/unstable/scintilla/LexCPP.cxx branches/unstable/scintilla/LexCSS.cxx branches/unstable/scintilla/LexCaml.cxx branches/unstable/scintilla/LexCmake.cxx branches/unstable/scintilla/LexD.cxx branches/unstable/scintilla/LexErlang.cxx branches/unstable/scintilla/LexForth.cxx branches/unstable/scintilla/LexFortran.cxx branches/unstable/scintilla/LexHTML.cxx branches/unstable/scintilla/LexHaskell.cxx branches/unstable/scintilla/LexLisp.cxx branches/unstable/scintilla/LexLua.cxx branches/unstable/scintilla/LexMarkdown.cxx branches/unstable/scintilla/LexMatlab.cxx branches/unstable/scintilla/LexNsis.cxx branches/unstable/scintilla/LexOthers.cxx branches/unstable/scintilla/LexPascal.cxx branches/unstable/scintilla/LexPerl.cxx branches/unstable/scintilla/LexPython.cxx branches/unstable/scintilla/LexR.cxx branches/unstable/scintilla/LexRuby.cxx branches/unstable/scintilla/LexSQL.cxx branches/unstable/scintilla/LexTCL.cxx branches/unstable/scintilla/LexTxt2tags.cxx branches/unstable/scintilla/LexVHDL.cxx branches/unstable/scintilla/LexVerilog.cxx branches/unstable/scintilla/LexYAML.cxx branches/unstable/scintilla/LineMarker.cxx branches/unstable/scintilla/LineMarker.h branches/unstable/scintilla/Partitioning.h branches/unstable/scintilla/PerLine.cxx branches/unstable/scintilla/PerLine.h branches/unstable/scintilla/PlatGTK.cxx branches/unstable/scintilla/PositionCache.cxx branches/unstable/scintilla/PositionCache.h branches/unstable/scintilla/PropSet.cxx branches/unstable/scintilla/PropSetSimple.h branches/unstable/scintilla/RESearch.cxx branches/unstable/scintilla/RESearch.h branches/unstable/scintilla/RunStyles.cxx branches/unstable/scintilla/RunStyles.h branches/unstable/scintilla/SVector.h branches/unstable/scintilla/ScintillaBase.cxx branches/unstable/scintilla/ScintillaBase.h branches/unstable/scintilla/ScintillaGTK.cxx branches/unstable/scintilla/Selection.cxx branches/unstable/scintilla/Selection.h branches/unstable/scintilla/SplitVector.h branches/unstable/scintilla/Style.cxx branches/unstable/scintilla/Style.h branches/unstable/scintilla/StyleContext.cxx branches/unstable/scintilla/StyleContext.h branches/unstable/scintilla/UniConversion.cxx branches/unstable/scintilla/UniConversion.h branches/unstable/scintilla/ViewStyle.cxx branches/unstable/scintilla/ViewStyle.h branches/unstable/scintilla/WindowAccessor.cxx branches/unstable/scintilla/XPM.cxx branches/unstable/scintilla/XPM.h branches/unstable/scintilla/include/Accessor.h branches/unstable/scintilla/include/KeyWords.h branches/unstable/scintilla/include/PropSet.h branches/unstable/scintilla/include/SString.h branches/unstable/scintilla/include/WindowAccessor.h branches/unstable/scintilla/scintilla-marshal.c branches/unstable/scintilla/scintilla-marshal.h branches/unstable/scintilla/scintilla-marshal.list Modified: branches/unstable/ChangeLog =================================================================== --- branches/unstable/ChangeLog 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/ChangeLog 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,3 +1,11 @@ +2010-11-24 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + + * scintilla/*: + Update Scintilla to version 2.22. + Keep Scintilla's directory structure mostly and only + remove unused lexers. + + 2010-11-22 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> * doc/geany.txt, doc/geany.html: Deleted: branches/unstable/scintilla/AutoComplete.cxx =================================================================== --- branches/unstable/scintilla/AutoComplete.cxx 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/AutoComplete.cxx 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,178 +0,0 @@ -// Scintilla source code edit control -/** @file AutoComplete.cxx - ** Defines the auto completion list box. - **/ -// Copyright 1998-2003 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#include <stdlib.h> -#include <string.h> -#include <stdio.h> - -#include "Platform.h" - -#include "CharClassify.h" -#include "AutoComplete.h" - -#ifdef SCI_NAMESPACE -using namespace Scintilla; -#endif - -AutoComplete::AutoComplete() : - active(false), - separator(' '), - typesep('?'), - ignoreCase(false), - chooseSingle(false), - lb(0), - posStart(0), - startLen(0), - cancelAtStartPos(true), - autoHide(true), - dropRestOfWord(false) { - lb = ListBox::Allocate(); - stopChars[0] = '\0'; - fillUpChars[0] = '\0'; -} - -AutoComplete::~AutoComplete() { - if (lb) { - lb->Destroy(); - delete lb; - lb = 0; - } -} - -bool AutoComplete::Active() const { - return active; -} - -void AutoComplete::Start(Window &parent, int ctrlID, - int position, Point location, int startLen_, - int lineHeight, bool unicodeMode) { - if (active) { - Cancel(); - } - lb->Create(parent, ctrlID, location, lineHeight, unicodeMode); - lb->Clear(); - active = true; - startLen = startLen_; - posStart = position; -} - -void AutoComplete::SetStopChars(const char *stopChars_) { - strncpy(stopChars, stopChars_, sizeof(stopChars)); - stopChars[sizeof(stopChars) - 1] = '\0'; -} - -bool AutoComplete::IsStopChar(char ch) { - return ch && strchr(stopChars, ch); -} - -void AutoComplete::SetFillUpChars(const char *fillUpChars_) { - strncpy(fillUpChars, fillUpChars_, sizeof(fillUpChars)); - fillUpChars[sizeof(fillUpChars) - 1] = '\0'; -} - -bool AutoComplete::IsFillUpChar(char ch) { - return ch && strchr(fillUpChars, ch); -} - -void AutoComplete::SetSeparator(char separator_) { - separator = separator_; -} - -char AutoComplete::GetSeparator() const { - return separator; -} - -void AutoComplete::SetTypesep(char separator_) { - typesep = separator_; -} - -char AutoComplete::GetTypesep() const { - return typesep; -} - -void AutoComplete::SetList(const char *list) { - lb->SetList(list, separator, typesep); -} - -void AutoComplete::Show(bool show) { - lb->Show(show); - if (show) - lb->Select(0); -} - -void AutoComplete::Cancel() { - if (lb->Created()) { - lb->Clear(); - lb->Destroy(); - active = false; - } -} - - -void AutoComplete::Move(int delta) { - int count = lb->Length(); - int current = lb->GetSelection(); - current += delta; - if (current >= count) - current = count - 1; - if (current < 0) - current = 0; - lb->Select(current); -} - -void AutoComplete::Select(const char *word) { - size_t lenWord = strlen(word); - int location = -1; - const int maxItemLen=1000; - char item[maxItemLen]; - int start = 0; // lower bound of the api array block to search - int end = lb->Length() - 1; // upper bound of the api array block to search - while ((start <= end) && (location == -1)) { // Binary searching loop - int pivot = (start + end) / 2; - lb->GetValue(pivot, item, maxItemLen); - int cond; - if (ignoreCase) - cond = CompareNCaseInsensitive(word, item, lenWord); - else - cond = strncmp(word, item, lenWord); - if (!cond) { - // Find first match - while (pivot > start) { - lb->GetValue(pivot-1, item, maxItemLen); - if (ignoreCase) - cond = CompareNCaseInsensitive(word, item, lenWord); - else - cond = strncmp(word, item, lenWord); - if (0 != cond) - break; - --pivot; - } - location = pivot; - if (ignoreCase) { - // Check for exact-case match - for (; pivot <= end; pivot++) { - lb->GetValue(pivot, item, maxItemLen); - if (!strncmp(word, item, lenWord)) { - location = pivot; - break; - } - if (CompareNCaseInsensitive(word, item, lenWord)) - break; - } - } - } else if (cond < 0) { - end = pivot - 1; - } else if (cond > 0) { - start = pivot + 1; - } - } - if (location == -1 && autoHide) - Cancel(); - else - lb->Select(location); -} - Deleted: branches/unstable/scintilla/AutoComplete.h =================================================================== --- branches/unstable/scintilla/AutoComplete.h 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/AutoComplete.h 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,78 +0,0 @@ -// Scintilla source code edit control -/** @file AutoComplete.h - ** Defines the auto completion list box. - **/ -// Copyright 1998-2003 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef AUTOCOMPLETE_H -#define AUTOCOMPLETE_H - -#ifdef SCI_NAMESPACE -namespace Scintilla { -#endif - -/** - */ -class AutoComplete { - bool active; - char stopChars[256]; - char fillUpChars[256]; - char separator; - char typesep; // Type seperator - -public: - bool ignoreCase; - bool chooseSingle; - ListBox *lb; - int posStart; - int startLen; - /// Should autocompletion be canceled if editor's currentPos <= startPos? - bool cancelAtStartPos; - bool autoHide; - bool dropRestOfWord; - - AutoComplete(); - ~AutoComplete(); - - /// Is the auto completion list displayed? - bool Active() const; - - /// Display the auto completion list positioned to be near a character position - void Start(Window &parent, int ctrlID, int position, Point location, - int startLen_, int lineHeight, bool unicodeMode); - - /// The stop chars are characters which, when typed, cause the auto completion list to disappear - void SetStopChars(const char *stopChars_); - bool IsStopChar(char ch); - - /// The fillup chars are characters which, when typed, fill up the selected word - void SetFillUpChars(const char *fillUpChars_); - bool IsFillUpChar(char ch); - - /// The separator character is used when interpreting the list in SetList - void SetSeparator(char separator_); - char GetSeparator() const; - - /// The typesep character is used for seperating the word from the type - void SetTypesep(char separator_); - char GetTypesep() const; - - /// The list string contains a sequence of words separated by the separator character - void SetList(const char *list); - - void Show(bool show); - void Cancel(); - - /// Move the current list element by delta, scrolling appropriately - void Move(int delta); - - /// Select a list element that starts with word as the current element - void Select(const char *word); -}; - -#ifdef SCI_NAMESPACE -} -#endif - -#endif Deleted: branches/unstable/scintilla/CallTip.cxx =================================================================== --- branches/unstable/scintilla/CallTip.cxx 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/CallTip.cxx 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,327 +0,0 @@ -// Scintilla source code edit control -/** @file CallTip.cxx - ** Code for displaying call tips. - **/ -// Copyright 1998-2001 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#include <stdlib.h> -#include <string.h> - -#include "Platform.h" - -#include "Scintilla.h" -#include "CallTip.h" -#include <stdio.h> - -#ifdef SCI_NAMESPACE -using namespace Scintilla; -#endif - -static const int insetX = 5; // text inset in x from calltip border -static const int widthArrow = 14; - -CallTip::CallTip() { - wCallTip = 0; - inCallTipMode = false; - posStartCallTip = 0; - val = 0; - rectUp = PRectangle(0,0,0,0); - rectDown = PRectangle(0,0,0,0); - lineHeight = 1; - startHighlight = 0; - endHighlight = 0; - tabSize = 0; - useStyleCallTip = false; // for backwards compatibility - -#ifdef __APPLE__ - // proper apple colours for the default - colourBG.desired = ColourDesired(0xff, 0xff, 0xc6); - colourUnSel.desired = ColourDesired(0, 0, 0); -#else - colourBG.desired = ColourDesired(0xff, 0xff, 0xff); - colourUnSel.desired = ColourDesired(0x80, 0x80, 0x80); -#endif - colourSel.desired = ColourDesired(0, 0, 0x80); - colourShade.desired = ColourDesired(0, 0, 0); - colourLight.desired = ColourDesired(0xc0, 0xc0, 0xc0); -} - -CallTip::~CallTip() { - font.Release(); - wCallTip.Destroy(); - delete []val; - val = 0; -} - -void CallTip::RefreshColourPalette(Palette &pal, bool want) { - pal.WantFind(colourBG, want); - pal.WantFind(colourUnSel, want); - pal.WantFind(colourSel, want); - pal.WantFind(colourShade, want); - pal.WantFind(colourLight, want); -} - -// Although this test includes 0, we should never see a \0 character. -static bool IsArrowCharacter(char ch) { - return (ch == 0) || (ch == '\001') || (ch == '\002'); -} - -// We ignore tabs unless a tab width has been set. -bool CallTip::IsTabCharacter(char ch) const { - return (tabSize > 0) && (ch == '\t'); -} - -int CallTip::NextTabPos(int x) { - if (tabSize > 0) { // paranoia... not called unless this is true - x -= insetX; // position relative to text - x = (x + tabSize) / tabSize; // tab "number" - return tabSize*x + insetX; // position of next tab - } else { - return x + 1; // arbitrary - } -} - -// Draw a section of the call tip that does not include \n in one colour. -// The text may include up to numEnds tabs or arrow characters. -void CallTip::DrawChunk(Surface *surface, int &x, const char *s, - int posStart, int posEnd, int ytext, PRectangle rcClient, - bool highlight, bool draw) { - s += posStart; - int len = posEnd - posStart; - - // Divide the text into sections that are all text, or that are - // single arrows or single tab characters (if tabSize > 0). - int maxEnd = 0; - const int numEnds = 10; - int ends[numEnds + 2]; - for (int i=0; i<len; i++) { - if ((maxEnd < numEnds) && - (IsArrowCharacter(s[i]) || IsTabCharacter(s[i])) ) { - if (i > 0) - ends[maxEnd++] = i; - ends[maxEnd++] = i+1; - } - } - ends[maxEnd++] = len; - int startSeg = 0; - int xEnd; - for (int seg = 0; seg<maxEnd; seg++) { - int endSeg = ends[seg]; - if (endSeg > startSeg) { - if (IsArrowCharacter(s[startSeg])) { - bool upArrow = s[startSeg] == '\001'; - rcClient.left = x; - rcClient.right = rcClient.left + widthArrow; - if (draw) { - const int halfWidth = widthArrow / 2 - 3; - const int centreX = rcClient.left + widthArrow / 2 - 1; - const int centreY = (rcClient.top + rcClient.bottom) / 2; - surface->FillRectangle(rcClient, colourBG.allocated); - PRectangle rcClientInner(rcClient.left + 1, rcClient.top + 1, - rcClient.right - 2, rcClient.bottom - 1); - surface->FillRectangle(rcClientInner, colourUnSel.allocated); - - if (upArrow) { // Up arrow - Point pts[] = { - Point(centreX - halfWidth, centreY + halfWidth / 2), - Point(centreX + halfWidth, centreY + halfWidth / 2), - Point(centreX, centreY - halfWidth + halfWidth / 2), - }; - surface->Polygon(pts, sizeof(pts) / sizeof(pts[0]), - colourBG.allocated, colourBG.allocated); - } else { // Down arrow - Point pts[] = { - Point(centreX - halfWidth, centreY - halfWidth / 2), - Point(centreX + halfWidth, centreY - halfWidth / 2), - Point(centreX, centreY + halfWidth - halfWidth / 2), - }; - surface->Polygon(pts, sizeof(pts) / sizeof(pts[0]), - colourBG.allocated, colourBG.allocated); - } - } - xEnd = rcClient.right; - offsetMain = xEnd; - if (upArrow) { - rectUp = rcClient; - } else { - rectDown = rcClient; - } - } else if (IsTabCharacter(s[startSeg])) { - xEnd = NextTabPos(x); - } else { - xEnd = x + surface->WidthText(font, s + startSeg, endSeg - startSeg); - if (draw) { - rcClient.left = x; - rcClient.right = xEnd; - surface->DrawTextTransparent(rcClient, font, ytext, - s+startSeg, endSeg - startSeg, - highlight ? colourSel.allocated : colourUnSel.allocated); - } - } - x = xEnd; - startSeg = endSeg; - } - } -} - -int CallTip::PaintContents(Surface *surfaceWindow, bool draw) { - PRectangle rcClientPos = wCallTip.GetClientPosition(); - PRectangle rcClientSize(0, 0, rcClientPos.right - rcClientPos.left, - rcClientPos.bottom - rcClientPos.top); - PRectangle rcClient(1, 1, rcClientSize.right - 1, rcClientSize.bottom - 1); - - // To make a nice small call tip window, it is only sized to fit most normal characters without accents - int ascent = surfaceWindow->Ascent(font) - surfaceWindow->InternalLeading(font); - - // For each line... - // Draw the definition in three parts: before highlight, highlighted, after highlight - int ytext = rcClient.top + ascent + 1; - rcClient.bottom = ytext + surfaceWindow->Descent(font) + 1; - char *chunkVal = val; - bool moreChunks = true; - int maxWidth = 0; - - while (moreChunks) { - char *chunkEnd = strchr(chunkVal, '\n'); - if (chunkEnd == NULL) { - chunkEnd = chunkVal + strlen(chunkVal); - moreChunks = false; - } - int chunkOffset = chunkVal - val; - int chunkLength = chunkEnd - chunkVal; - int chunkEndOffset = chunkOffset + chunkLength; - int thisStartHighlight = Platform::Maximum(startHighlight, chunkOffset); - thisStartHighlight = Platform::Minimum(thisStartHighlight, chunkEndOffset); - thisStartHighlight -= chunkOffset; - int thisEndHighlight = Platform::Maximum(endHighlight, chunkOffset); - thisEndHighlight = Platform::Minimum(thisEndHighlight, chunkEndOffset); - thisEndHighlight -= chunkOffset; - rcClient.top = ytext - ascent - 1; - - int x = insetX; // start each line at this inset - - DrawChunk(surfaceWindow, x, chunkVal, 0, thisStartHighlight, - ytext, rcClient, false, draw); - DrawChunk(surfaceWindow, x, chunkVal, thisStartHighlight, thisEndHighlight, - ytext, rcClient, true, draw); - DrawChunk(surfaceWindow, x, chunkVal, thisEndHighlight, chunkLength, - ytext, rcClient, false, draw); - - chunkVal = chunkEnd + 1; - ytext += lineHeight; - rcClient.bottom += lineHeight; - maxWidth = Platform::Maximum(maxWidth, x); - } - return maxWidth; -} - -void CallTip::PaintCT(Surface *surfaceWindow) { - if (!val) - return; - PRectangle rcClientPos = wCallTip.GetClientPosition(); - PRectangle rcClientSize(0, 0, rcClientPos.right - rcClientPos.left, - rcClientPos.bottom - rcClientPos.top); - PRectangle rcClient(1, 1, rcClientSize.right - 1, rcClientSize.bottom - 1); - - surfaceWindow->FillRectangle(rcClient, colourBG.allocated); - - offsetMain = insetX; // initial alignment assuming no arrows - PaintContents(surfaceWindow, true); - -#ifndef __APPLE__ - // OSX doesn't put borders on "help tags" - // Draw a raised border around the edges of the window - surfaceWindow->MoveTo(0, rcClientSize.bottom - 1); - surfaceWindow->PenColour(colourShade.allocated); - surfaceWindow->LineTo(rcClientSize.right - 1, rcClientSize.bottom - 1); - surfaceWindow->LineTo(rcClientSize.right - 1, 0); - surfaceWindow->PenColour(colourLight.allocated); - surfaceWindow->LineTo(0, 0); - surfaceWindow->LineTo(0, rcClientSize.bottom - 1); -#endif -} - -void CallTip::MouseClick(Point pt) { - clickPlace = 0; - if (rectUp.Contains(pt)) - clickPlace = 1; - if (rectDown.Contains(pt)) - clickPlace = 2; -} - -PRectangle CallTip::CallTipStart(int pos, Point pt, const char *defn, - const char *faceName, int size, - int codePage_, int characterSet, Window &wParent) { - clickPlace = 0; - delete []val; - val = 0; - val = new char[strlen(defn) + 1]; - strcpy(val, defn); - codePage = codePage_; - Surface *surfaceMeasure = Surface::Allocate(); - if (!surfaceMeasure) - return PRectangle(); - surfaceMeasure->Init(wParent.GetID()); - surfaceMeasure->SetUnicodeMode(SC_CP_UTF8 == codePage); - surfaceMeasure->SetDBCSMode(codePage); - startHighlight = 0; - endHighlight = 0; - inCallTipMode = true; - posStartCallTip = pos; - int deviceHeight = surfaceMeasure->DeviceHeightFont(size); - font.Create(faceName, characterSet, deviceHeight, false, false); - // Look for multiple lines in the text - // Only support \n here - simply means container must avoid \r! - int numLines = 1; - const char *newline; - const char *look = val; - rectUp = PRectangle(0,0,0,0); - rectDown = PRectangle(0,0,0,0); - offsetMain = insetX; // changed to right edge of any arrows - int width = PaintContents(surfaceMeasure, false) + insetX; - while ((newline = strchr(look, '\n')) != NULL) { - look = newline + 1; - numLines++; - } - lineHeight = surfaceMeasure->Height(font); - - // Extra line for border and an empty line at top and bottom. The returned - // rectangle is aligned to the right edge of the last arrow encountered in - // the tip text, else to the tip text left edge. - int height = lineHeight * numLines - surfaceMeasure->InternalLeading(font) + 2 + 2; - delete surfaceMeasure; - return PRectangle(pt.x - offsetMain, pt.y + 1, pt.x + width - offsetMain, pt.y + 1 + height); -} - -void CallTip::CallTipCancel() { - inCallTipMode = false; - if (wCallTip.Created()) { - wCallTip.Destroy(); - } -} - -void CallTip::SetHighlight(int start, int end) { - // Avoid flashing by checking something has really changed - if ((start != startHighlight) || (end != endHighlight)) { - startHighlight = start; - endHighlight = end; - if (wCallTip.Created()) { - wCallTip.InvalidateAll(); - } - } -} - -// Set the tab size (sizes > 0 enable the use of tabs). This also enables the -// use of the STYLE_CALLTIP. -void CallTip::SetTabSize(int tabSz) { - tabSize = tabSz; - useStyleCallTip = true; -} - -// It might be better to have two access functions for this and to use -// them for all settings of colours. -void CallTip::SetForeBack(const ColourPair &fore, const ColourPair &back) { - colourBG = back; - colourUnSel = fore; -} Deleted: branches/unstable/scintilla/CallTip.h =================================================================== --- branches/unstable/scintilla/CallTip.h 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/CallTip.h 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,87 +0,0 @@ -// Scintilla source code edit control -/** @file CallTip.h - ** Interface to the call tip control. - **/ -// Copyright 1998-2001 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef CALLTIP_H -#define CALLTIP_H - -#ifdef SCI_NAMESPACE -namespace Scintilla { -#endif - -/** - */ -class CallTip { - int startHighlight; // character offset to start and... - int endHighlight; // ...end of highlighted text - char *val; - Font font; - PRectangle rectUp; // rectangle of last up angle in the tip - PRectangle rectDown; // rectangle of last down arrow in the tip - int lineHeight; // vertical line spacing - int offsetMain; // The alignment point of the call tip - int tabSize; // Tab size in pixels, <=0 no TAB expand - bool useStyleCallTip; // if true, STYLE_CALLTIP should be used - - // Private so CallTip objects can not be copied - CallTip(const CallTip &); - CallTip &operator=(const CallTip &); - void DrawChunk(Surface *surface, int &x, const char *s, - int posStart, int posEnd, int ytext, PRectangle rcClient, - bool highlight, bool draw); - int PaintContents(Surface *surfaceWindow, bool draw); - bool IsTabCharacter(char c) const; - int NextTabPos(int x); - -public: - Window wCallTip; - Window wDraw; - bool inCallTipMode; - int posStartCallTip; - ColourPair colourBG; - ColourPair colourUnSel; - ColourPair colourSel; - ColourPair colourShade; - ColourPair colourLight; - int codePage; - int clickPlace; - - CallTip(); - ~CallTip(); - - /// Claim or accept palette entries for the colours required to paint a calltip. - void RefreshColourPalette(Palette &pal, bool want); - - void PaintCT(Surface *surfaceWindow); - - void MouseClick(Point pt); - - /// Setup the calltip and return a rectangle of the area required. - PRectangle CallTipStart(int pos, Point pt, const char *defn, - const char *faceName, int size, int codePage_, - int characterSet, Window &wParent); - - void CallTipCancel(); - - /// Set a range of characters to be displayed in a highlight style. - /// Commonly used to highlight the current parameter. - void SetHighlight(int start, int end); - - /// Set the tab size in pixels for the call tip. 0 or -ve means no tab expand. - void SetTabSize(int tabSz); - - /// Used to determine which STYLE_xxxx to use for call tip information - bool UseStyleCallTip() const { return useStyleCallTip;} - - // Modify foreground and background colours - void SetForeBack(const ColourPair &fore, const ColourPair &back); -}; - -#ifdef SCI_NAMESPACE -} -#endif - -#endif Deleted: branches/unstable/scintilla/CellBuffer.cxx =================================================================== --- branches/unstable/scintilla/CellBuffer.cxx 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/CellBuffer.cxx 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,656 +0,0 @@ -// Scintilla source code edit control -/** @file CellBuffer.cxx - ** Manages a buffer of cells. - **/ -// Copyright 1998-2001 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <stdarg.h> - -#include "Platform.h" - -#include "Scintilla.h" -#include "SplitVector.h" -#include "Partitioning.h" -#include "CellBuffer.h" - -#ifdef SCI_NAMESPACE -using namespace Scintilla; -#endif - -LineVector::LineVector() : starts(256), perLine(0) { - Init(); -} - -LineVector::~LineVector() { - starts.DeleteAll(); -} - -void LineVector::Init() { - starts.DeleteAll(); - if (perLine) { - perLine->Init(); - } -} - -void LineVector::SetPerLine(PerLine *pl) { - perLine = pl; -} - -void LineVector::InsertText(int line, int delta) { - starts.InsertText(line, delta); -} - -void LineVector::InsertLine(int line, int position, bool lineStart) { - starts.InsertPartition(line, position); - if (perLine) { - if ((line > 0) && lineStart) - line--; - perLine->InsertLine(line); - } -} - -void LineVector::SetLineStart(int line, int position) { - starts.SetPartitionStartPosition(line, position); -} - -void LineVector::RemoveLine(int line) { - starts.RemovePartition(line); - if (perLine) { - perLine->RemoveLine(line); - } -} - -int LineVector::LineFromPosition(int pos) const { - return starts.PartitionFromPosition(pos); -} - -Action::Action() { - at = startAction; - position = 0; - data = 0; - lenData = 0; - mayCoalesce = false; -} - -Action::~Action() { - Destroy(); -} - -void Action::Create(actionType at_, int position_, char *data_, int lenData_, bool mayCoalesce_) { - delete []data; - position = position_; - at = at_; - data = data_; - lenData = lenData_; - mayCoalesce = mayCoalesce_; -} - -void Action::Destroy() { - delete []data; - data = 0; -} - -void Action::Grab(Action *source) { - delete []data; - - position = source->position; - at = source->at; - data = source->data; - lenData = source->lenData; - mayCoalesce = source->mayCoalesce; - - // Ownership of source data transferred to this - source->position = 0; - source->at = startAction; - source->data = 0; - source->lenData = 0; - source->mayCoalesce = true; -} - -// The undo history stores a sequence of user operations that represent the user's view of the -// commands executed on the text. -// Each user operation contains a sequence of text insertion and text deletion actions. -// All the user operations are stored in a list of individual actions with 'start' actions used -// as delimiters between user operations. -// Initially there is one start action in the history. -// As each action is performed, it is recorded in the history. The action may either become -// part of the current user operation or may start a new user operation. If it is to be part of the -// current operation, then it overwrites the current last action. If it is to be part of a new -// operation, it is appended after the current last action. -// After writing the new action, a new start action is appended at the end of the history. -// The decision of whether to start a new user operation is based upon two factors. If a -// compound operation has been explicitly started by calling BeginUndoAction and no matching -// EndUndoAction (these calls nest) has been called, then the action is coalesced into the current -// operation. If there is no outstanding BeginUndoAction call then a new operation is started -// unless it looks as if the new action is caused by the user typing or deleting a stream of text. -// Sequences that look like typing or deletion are coalesced into a single user operation. - -UndoHistory::UndoHistory() { - - lenActions = 100; - actions = new Action[lenActions]; - maxAction = 0; - currentAction = 0; - undoSequenceDepth = 0; - savePoint = 0; - - actions[currentAction].Create(startAction); -} - -UndoHistory::~UndoHistory() { - delete []actions; - actions = 0; -} - -void UndoHistory::EnsureUndoRoom() { - // Have to test that there is room for 2 more actions in the array - // as two actions may be created by the calling function - if (currentAction >= (lenActions - 2)) { - // Run out of undo nodes so extend the array - int lenActionsNew = lenActions * 2; - Action *actionsNew = new Action[lenActionsNew]; - for (int act = 0; act <= currentAction; act++) - actionsNew[act].Grab(&actions[act]); - delete []actions; - lenActions = lenActionsNew; - actions = actionsNew; - } -} - -void UndoHistory::AppendAction(actionType at, int position, char *data, int lengthData, - bool &startSequence, bool mayCoalesce) { - EnsureUndoRoom(); - //Platform::DebugPrintf("%% %d action %d %d %d\n", at, position, lengthData, currentAction); - //Platform::DebugPrintf("^ %d action %d %d\n", actions[currentAction - 1].at, - // actions[currentAction - 1].position, actions[currentAction - 1].lenData); - if (currentAction < savePoint) { - savePoint = -1; - } - int oldCurrentAction = currentAction; - if (currentAction >= 1) { - if (0 == undoSequenceDepth) { - // Top level actions may not always be coalesced - int targetAct = -1; - const Action *actPrevious = &(actions[currentAction + targetAct]); - // Container actions may forward the coalesce state of Scintilla Actions. - while ((actPrevious->at == containerAction) && actPrevious->mayCoalesce) { - targetAct--; - actPrevious = &(actions[currentAction + targetAct]); - } - // See if current action can be coalesced into previous action - // Will work if both are inserts or deletes and position is same - if (currentAction == savePoint) { - currentAction++; - } else if (!actions[currentAction].mayCoalesce) { - // Not allowed to coalesce if this set - currentAction++; - } else if (!mayCoalesce || !actPrevious->mayCoalesce) { - currentAction++; - } else if (at == containerAction || actions[currentAction].at == containerAction) { - ; // A coalescible containerAction - } else if ((at != actPrevious->at) && (actPrevious->at != startAction)) { - currentAction++; - } else if ((at == insertAction) && - (position != (actPrevious->position + actPrevious->lenData))) { - // Insertions must be immediately after to coalesce - currentAction++; - } else if (at == removeAction) { - if ((lengthData == 1) || (lengthData == 2)) { - if ((position + lengthData) == actPrevious->position) { - ; // Backspace -> OK - } else if (position == actPrevious->position) { - ; // Delete -> OK - } else { - // Removals must be at same position to coalesce - currentAction++; - } - } else { - // Removals must be of one character to coalesce - currentAction++; - } - } else { - // Action coalesced. - } - - } else { - // Actions not at top level are always coalesced unless this is after return to top level - if (!actions[currentAction].mayCoalesce) - currentAction++; - } - } else { - currentAction++; - } - startSequence = oldCurrentAction != currentAction; - actions[currentAction].Create(at, position, data, lengthData, mayCoalesce); - currentAction++; - actions[currentAction].Create(startAction); - maxAction = currentAction; -} - -void UndoHistory::BeginUndoAction() { - EnsureUndoRoom(); - if (undoSequenceDepth == 0) { - if (actions[currentAction].at != startAction) { - currentAction++; - actions[currentAction].Create(startAction); - maxAction = currentAction; - } - actions[currentAction].mayCoalesce = false; - } - undoSequenceDepth++; -} - -void UndoHistory::EndUndoAction() { - PLATFORM_ASSERT(undoSequenceDepth > 0); - EnsureUndoRoom(); - undoSequenceDepth--; - if (0 == undoSequenceDepth) { - if (actions[currentAction].at != startAction) { - currentAction++; - actions[currentAction].Create(startAction); - maxAction = currentAction; - } - actions[currentAction].mayCoalesce = false; - } -} - -void UndoHistory::DropUndoSequence() { - undoSequenceDepth = 0; -} - -void UndoHistory::DeleteUndoHistory() { - for (int i = 1; i < maxAction; i++) - actions[i].Destroy(); - maxAction = 0; - currentAction = 0; - actions[currentAction].Create(startAction); - savePoint = 0; -} - -void UndoHistory::SetSavePoint() { - savePoint = currentAction; -} - -bool UndoHistory::IsSavePoint() const { - return savePoint == currentAction; -} - -bool UndoHistory::CanUndo() const { - return (currentAction > 0) && (maxAction > 0); -} - -int UndoHistory::StartUndo() { - // Drop any trailing startAction - if (actions[currentAction].at == startAction && currentAction > 0) - currentAction--; - - // Count the steps in this action - int act = currentAction; - while (actions[act].at != startAction && act > 0) { - act--; - } - return currentAction - act; -} - -const Action &UndoHistory::GetUndoStep() const { - return actions[currentAction]; -} - -void UndoHistory::CompletedUndoStep() { - currentAction--; -} - -bool UndoHistory::CanRedo() const { - return maxAction > currentAction; -} - -int UndoHistory::StartRedo() { - // Drop any leading startAction - if (actions[currentAction].at == startAction && currentAction < maxAction) - currentAction++; - - // Count the steps in this action - int act = currentAction; - while (actions[act].at != startAction && act < maxAction) { - act++; - } - return act - currentAction; -} - -const Action &UndoHistory::GetRedoStep() const { - return actions[currentAction]; -} - -void UndoHistory::CompletedRedoStep() { - currentAction++; -} - -CellBuffer::CellBuffer() { - readOnly = false; - collectingUndo = true; -} - -CellBuffer::~CellBuffer() { -} - -char CellBuffer::CharAt(int position) const { - return substance.ValueAt(position); -} - -void CellBuffer::GetCharRange(char *buffer, int position, int lengthRetrieve) const { - if (lengthRetrieve < 0) - return; - if (position < 0) - return; - if ((position + lengthRetrieve) > substance.Length()) { - Platform::DebugPrintf("Bad GetCharRange %d for %d of %d\n", position, - lengthRetrieve, substance.Length()); - return; - } - - for (int i=0; i<lengthRetrieve; i++) { - *buffer++ = substance.ValueAt(position + i); - } -} - -char CellBuffer::StyleAt(int position) const { - return style.ValueAt(position); -} - -const char *CellBuffer::BufferPointer() { - return substance.BufferPointer(); -} - -// The char* returned is to an allocation owned by the undo history -const char *CellBuffer::InsertString(int position, const char *s, int insertLength, bool &startSequence) { - char *data = 0; - // InsertString and DeleteChars are the bottleneck though which all changes occur - if (!readOnly) { - if (collectingUndo) { - // Save into the undo/redo stack, but only the characters - not the formatting - // This takes up about half load time - data = new char[insertLength]; - for (int i = 0; i < insertLength; i++) { - data[i] = s[i]; - } - uh.AppendAction(insertAction, position, data, insertLength, startSequence); - } - - BasicInsertString(position, s, insertLength); - } - return data; -} - -bool CellBuffer::SetStyleAt(int position, char styleValue, char mask) { - styleValue &= mask; - char curVal = style.ValueAt(position); - if ((curVal & mask) != styleValue) { - style.SetValueAt(position, static_cast<char>((curVal & ~mask) | styleValue)); - return true; - } else { - return false; - } -} - -bool CellBuffer::SetStyleFor(int position, int lengthStyle, char styleValue, char mask) { - bool changed = false; - PLATFORM_ASSERT(lengthStyle == 0 || - (lengthStyle > 0 && lengthStyle + position <= style.Length())); - while (lengthStyle--) { - char curVal = style.ValueAt(position); - if ((curVal & mask) != styleValue) { - style.SetValueAt(position, static_cast<char>((curVal & ~mask) | styleValue)); - changed = true; - } - position++; - } - return changed; -} - -// The char* returned is to an allocation owned by the undo history -const char *CellBuffer::DeleteChars(int position, int deleteLength, bool &startSequence) { - // InsertString and DeleteChars are the bottleneck though which all changes occur - PLATFORM_ASSERT(deleteLength > 0); - char *data = 0; - if (!readOnly) { - if (collectingUndo) { - // Save into the undo/redo stack, but only the characters - not the formatting - data = new char[deleteLength]; - for (int i = 0; i < deleteLength; i++) { - data[i] = substance.ValueAt(position + i); - } - uh.AppendAction(removeAction, position, data, deleteLength, startSequence); - } - - BasicDeleteChars(position, deleteLength); - } - return data; -} - -int CellBuffer::Length() const { - return substance.Length(); -} - -void CellBuffer::Allocate(int newSize) { - substance.ReAllocate(newSize); - style.ReAllocate(newSize); -} - -void CellBuffer::SetPerLine(PerLine *pl) { - lv.SetPerLine(pl); -} - -int CellBuffer::Lines() const { - return lv.Lines(); -} - -int CellBuffer::LineStart(int line) const { - if (line < 0) - return 0; - else if (line >= Lines()) - return Length(); - else - return lv.LineStart(line); -} - -bool CellBuffer::IsReadOnly() const { - return readOnly; -} - -void CellBuffer::SetReadOnly(bool set) { - readOnly = set; -} - -void CellBuffer::SetSavePoint() { - uh.SetSavePoint(); -} - -bool CellBuffer::IsSavePoint() { - return uh.IsSavePoint(); -} - -// Without undo - -void CellBuffer::InsertLine(int line, int position, bool lineStart) { - lv.InsertLine(line, position, lineStart); -} - -void CellBuffer::RemoveLine(int line) { - lv.RemoveLine(line); -} - -void CellBuffer::BasicInsertString(int position, const char *s, int insertLength) { - if (insertLength == 0) - return; - PLATFORM_ASSERT(insertLength > 0); - - substance.InsertFromArray(position, s, 0, insertLength); - style.InsertValue(position, insertLength, 0); - - int lineInsert = lv.LineFromPosition(position) + 1; - bool atLineStart = lv.LineStart(lineInsert-1) == position; - // Point all the lines after the insertion point further along in the buffer - lv.InsertText(lineInsert-1, insertLength); - char chPrev = substance.ValueAt(position - 1); - char chAfter = substance.ValueAt(position + insertLength); - if (chPrev == '\r' && chAfter == '\n') { - // Splitting up a crlf pair at position - InsertLine(lineInsert, position, false); - lineInsert++; - } - char ch = ' '; - for (int i = 0; i < insertLength; i++) { - ch = s[i]; - if (ch == '\r') { - InsertLine(lineInsert, (position + i) + 1, atLineStart); - lineInsert++; - } else if (ch == '\n') { - if (chPrev == '\r') { - // Patch up what was end of line - lv.SetLineStart(lineInsert - 1, (position + i) + 1); - } else { - InsertLine(lineInsert, (position + i) + 1, atLineStart); - lineInsert++; - } - } - chPrev = ch; - } - // Joining two lines where last insertion is cr and following substance starts with lf - if (chAfter == '\n') { - if (ch == '\r') { - // End of line already in buffer so drop the newly created one - RemoveLine(lineInsert - 1); - } - } -} - -void CellBuffer::BasicDeleteChars(int position, int deleteLength) { - if (deleteLength == 0) - return; - - if ((position == 0) && (deleteLength == substance.Length())) { - // If whole buffer is being deleted, faster to reinitialise lines data - // than to delete each line. - lv.Init(); - } else { - // Have to fix up line positions before doing deletion as looking at text in buffer - // to work out which lines have been removed - - int lineRemove = lv.LineFromPosition(position) + 1; - lv.InsertText(lineRemove-1, - (deleteLength)); - char chPrev = substance.ValueAt(position - 1); - char chBefore = chPrev; - char chNext = substance.ValueAt(position); - bool ignoreNL = false; - if (chPrev == '\r' && chNext == '\n') { - // Move back one - lv.SetLineStart(lineRemove, position); - lineRemove++; - ignoreNL = true; // First \n is not real deletion - } - - char ch = chNext; - for (int i = 0; i < deleteLength; i++) { - chNext = substance.ValueAt(position + i + 1); - if (ch == '\r') { - if (chNext != '\n') { - RemoveLine(lineRemove); - } - } else if (ch == '\n') { - if (ignoreNL) { - ignoreNL = false; // Further \n are real deletions - } else { - RemoveLine(lineRemove); - } - } - - ch = chNext; - } - // May have to fix up end if last deletion causes cr to be next to lf - // or removes one of a crlf pair - char chAfter = substance.ValueAt(position + deleteLength); - if (chBefore == '\r' && chAfter == '\n') { - // Using lineRemove-1 as cr ended line before start of deletion - RemoveLine(lineRemove - 1); - lv.SetLineStart(lineRemove - 1, position + 1); - } - } - substance.DeleteRange(position, deleteLength); - style.DeleteRange(position, deleteLength); -} - -bool CellBuffer::SetUndoCollection(bool collectUndo) { - collectingUndo = collectUndo; - uh.DropUndoSequence(); - return collectingUndo; -} - -bool CellBuffer::IsCollectingUndo() const { - return collectingUndo; -} - -void CellBuffer::BeginUndoAction() { - uh.BeginUndoAction(); -} - -void CellBuffer::EndUndoAction() { - uh.EndUndoAction(); -} - -void CellBuffer::AddUndoAction(int token, bool mayCoalesce) { - bool startSequence; - uh.AppendAction(containerAction, token, 0, 0, startSequence, mayCoalesce); -} - -void CellBuffer::DeleteUndoHistory() { - uh.DeleteUndoHistory(); -} - -bool CellBuffer::CanUndo() { - return uh.CanUndo(); -} - -int CellBuffer::StartUndo() { - return uh.StartUndo(); -} - -const Action &CellBuffer::GetUndoStep() const { - return uh.GetUndoStep(); -} - -void CellBuffer::PerformUndoStep() { - const Action &actionStep = uh.GetUndoStep(); - if (actionStep.at == insertAction) { - BasicDeleteChars(actionStep.position, actionStep.lenData); - } else if (actionStep.at == removeAction) { - BasicInsertString(actionStep.position, actionStep.data, actionStep.lenData); - } - uh.CompletedUndoStep(); -} - -bool CellBuffer::CanRedo() { - return uh.CanRedo(); -} - -int CellBuffer::StartRedo() { - return uh.StartRedo(); -} - -const Action &CellBuffer::GetRedoStep() const { - return uh.GetRedoStep(); -} - -void CellBuffer::PerformRedoStep() { - const Action &actionStep = uh.GetRedoStep(); - if (actionStep.at == insertAction) { - BasicInsertString(actionStep.position, actionStep.data, actionStep.lenData); - } else if (actionStep.at == removeAction) { - BasicDeleteChars(actionStep.position, actionStep.lenData); - } - uh.CompletedRedoStep(); -} - Deleted: branches/unstable/scintilla/CellBuffer.h =================================================================== --- branches/unstable/scintilla/CellBuffer.h 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/CellBuffer.h 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,208 +0,0 @@ -// Scintilla source code edit control -/** @file CellBuffer.h - ** Manages the text of the document. - **/ -// Copyright 1998-2004 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef CELLBUFFER_H -#define CELLBUFFER_H - -#ifdef SCI_NAMESPACE -namespace Scintilla { -#endif - -// Interface to per-line data that wants to see each line insertion and deletion -class PerLine { -public: - virtual ~PerLine() {} - virtual void Init()=0; - virtual void InsertLine(int)=0; - virtual void RemoveLine(int)=0; -}; - -/** - * The line vector contains information about each of the lines in a cell buffer. - */ -class LineVector { - - Partitioning starts; - PerLine *perLine; - -public: - - LineVector(); - ~LineVector(); - void Init(); - void SetPerLine(PerLine *pl); - - void InsertText(int line, int delta); - void InsertLine(int line, int position, bool lineStart); - void SetLineStart(int line, int position); - void RemoveLine(int line); - int Lines() const { - return starts.Partitions(); - } - int LineFromPosition(int pos) const; - int LineStart(int line) const { - return starts.PositionFromPartition(line); - } - - int MarkValue(int line); - int AddMark(int line, int marker); - void MergeMarkers(int pos); - void DeleteMark(int line, int markerNum, bool all); - void DeleteMarkFromHandle(int markerHandle); - int LineFromHandle(int markerHandle); - - void ClearLevels(); - int SetLevel(int line, int level); - int GetLevel(int line); - - int SetLineState(int line, int state); - int GetLineState(int line); - int GetMaxLineState(); - -}; - -enum actionType { insertAction, removeAction, startAction, containerAction }; - -/** - * Actions are used to store all the information required to perform one undo/redo step. - */ -class Action { -public: - actionType at; - int position; - char *data; - int lenData; - bool mayCoalesce; - - Action(); - ~Action(); - void Create(actionType at_, int position_=0, char *data_=0, int lenData_=0, bool mayCoalesce_=true); - void Destroy(); - void Grab(Action *source); -}; - -/** - * - */ -class UndoHistory { - Action *actions; - int lenActions; - int maxAction; - int currentAction; - int undoSequenceDepth; - int savePoint; - - void EnsureUndoRoom(); - -public: - UndoHistory(); - ~UndoHistory(); - - void AppendAction(actionType at, int position, char *data, int length, bool &startSequence, bool mayCoalesce=true); - - void BeginUndoAction(); - void EndUndoAction(); - void DropUndoSequence(); - void DeleteUndoHistory(); - - /// The save point is a marker in the undo stack where the container has stated that - /// the buffer was saved. Undo and redo can move over the save point. - void SetSavePoint(); - bool IsSavePoint() const; - - /// To perform an undo, StartUndo is called to retrieve the number of steps, then UndoStep is - /// called that many times. Similarly for redo. - bool CanUndo() const; - int StartUndo(); - const Action &GetUndoStep() const; - void CompletedUndoStep(); - bool CanRedo() const; - int StartRedo(); - const Action &GetRedoStep() const; - void CompletedRedoStep(); -}; - -/** - * Holder for an expandable array of characters that supports undo and line markers. - * Based on article "Data Structures in a Bit-Mapped Text Editor" - * by Wilfred J. Hansen, Byte January 1987, page 183. - */ -class CellBuffer { -private: - SplitVector<char> substance; - SplitVector<char> style; - bool readOnly; - - bool collectingUndo; - UndoHistory uh; - - LineVector lv; - -public: - - CellBuffer(); - ~CellBuffer(); - - /// Retrieving positions outside the range of the buffer works and returns 0 - char CharAt(int position) const; - void GetCharRange(char *buffer, int position, int lengthRetrieve) const; - char StyleAt(int position) const; - const char *BufferPointer(); - - int Length() const; - void Allocate(int newSize); - void SetPerLine(PerLine *pl); - int Lines() const; - int LineStart(int line) const; - int LineFromPosition(int pos) const { return lv.LineFromPosition(pos); } - void InsertLine(int line, int position, bool lineStart); - void RemoveLine(int line); - const char *InsertString(int position, const char *s, int insertLength, bool &startSequence); - - /// Setting styles for positions outside the range of the buffer is safe and has no effect. - /// @return true if the style of a character is changed. - bool SetStyleAt(int position, char styleValue, char mask='\377'); - bool SetStyleFor(int position, int length, char styleValue, char mask); - - const char *DeleteChars(int position, int deleteLength, bool &startSequence); - - bool IsReadOnly() const; - void SetReadOnly(bool set); - - /// The save point is a marker in the undo stack where the container has stated that - /// the buffer was saved. Undo and redo can move over the save point. - void SetSavePoint(); - bool IsSavePoint(); - - /// Actions without undo - void BasicInsertString(int position, const char *s, int insertLength); - void BasicDeleteChars(int position, int deleteLength); - - bool SetUndoCollection(bool collectUndo); - bool IsCollectingUndo() const; - void BeginUndoAction(); - void EndUndoAction(); - void AddUndoAction(int token, bool mayCoalesce); - void DeleteUndoHistory(); - - /// To perform an undo, StartUndo is called to retrieve the number of steps, then UndoStep is - /// called that many times. Similarly for redo. - bool CanUndo(); - int StartUndo(); - const Action &GetUndoStep() const; - void PerformUndoStep(); - bool CanRedo(); - int StartRedo(); - const Action &GetRedoStep() const; - void PerformRedoStep(); -}; - -#ifdef SCI_NAMESPACE -} -#endif - -#endif Deleted: branches/unstable/scintilla/CharClassify.cxx =================================================================== --- branches/unstable/scintilla/CharClassify.cxx 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/CharClassify.cxx 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,78 +0,0 @@ -// Scintilla source code edit control -/** @file CharClassify.cxx - ** Character classifications used by Document and RESearch. - **/ -// Copyright 2006 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#include <stdlib.h> -#include <ctype.h> - -#include "CharClassify.h" - -// Shut up annoying Visual C++ warnings: -#ifdef _MSC_VER -#pragma warning(disable: 4514) -#endif - -CharClassify::CharClassify() { - SetDefaultCharClasses(true); -} - -void CharClassify::SetDefaultCharClasses(bool includeWordClass) { - // Initialize all char classes to default values - for (int ch = 0; ch < 256; ch++) { - if (ch == '\r' || ch == '\n') - charClass[ch] = ccNewLine; - else if (ch < 0x20 || ch == ' ') - charClass[ch] = ccSpace; - else if (includeWordClass && (ch >= 0x80 || isalnum(ch) || ch == '_')) - charClass[ch] = ccWord; - else - charClass[ch] = ccPunctuation; - } -} - -void CharClassify::SetCharClasses(const unsigned char *chars, cc newCharClass) { - // Apply the newCharClass to the specifed chars - if (chars) { - while (*chars) { - charClass[*chars] = static_cast<unsigned char>(newCharClass); - chars++; - } - } -} - -int CompareCaseInsensitive(const char *a, const char *b) { - while (*a && *b) { - if (*a != *b) { - char upperA = MakeUpperCase(*a); - char upperB = MakeUpperCase(*b); - if (upperA != upperB) - return upperA - upperB; - } - a++; - b++; - } - // Either *a or *b is nul - return *a - *b; -} - -int CompareNCaseInsensitive(const char *a, const char *b, size_t len) { - while (*a && *b && len) { - if (*a != *b) { - char upperA = MakeUpperCase(*a); - char upperB = MakeUpperCase(*b); - if (upperA != upperB) - return upperA - upperB; - } - a++; - b++; - len--; - } - if (len == 0) - return 0; - else - // Either *a or *b is nul - return *a - *b; -} Deleted: branches/unstable/scintilla/CharClassify.h =================================================================== --- branches/unstable/scintilla/CharClassify.h 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/CharClassify.h 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,37 +0,0 @@ -// Scintilla source code edit control -/** @file CharClassify.h - ** Character classifications used by Document and RESearch. - **/ -// Copyright 2006-2009 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef CHARCLASSIFY_H -#define CHARCLASSIFY_H - -class CharClassify { -public: - CharClassify(); - - enum cc { ccSpace, ccNewLine, ccWord, ccPunctuation }; - void SetDefaultCharClasses(bool includeWordClass); - void SetCharClasses(const unsigned char *chars, cc newCharClass); - cc GetClass(unsigned char ch) const { return static_cast<cc>(charClass[ch]);} - bool IsWord(unsigned char ch) const { return static_cast<cc>(charClass[ch]) == ccWord;} - -private: - enum { maxChar=256 }; - unsigned char charClass[maxChar]; // not type cc to save space -}; - -// These functions are implemented because each platform calls them something different. -int CompareCaseInsensitive(const char *a, const char *b); -int CompareNCaseInsensitive(const char *a, const char *b, size_t len); - -inline char MakeUpperCase(char ch) { - if (ch < 'a' || ch > 'z') - return ch; - else - return static_cast<char>(ch - 'a' + 'A'); -} - -#endif Deleted: branches/unstable/scintilla/CharacterSet.h =================================================================== --- branches/unstable/scintilla/CharacterSet.h 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/CharacterSet.h 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,59 +0,0 @@ -// Scintilla source code edit control -/** @file CharacterSet.h - ** Encapsulates a set of characters. Used to test if a character is within a set. - **/ -// Copyright 2007 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -class CharacterSet { - int size; - bool valueAfter; - bool *bset; -public: - enum setBase { - setNone=0, - setLower=1, - setUpper=2, - setDigits=4, - setAlpha=setLower|setUpper, - setAlphaNum=setAlpha|setDigits - }; - CharacterSet(setBase base=setNone, const char *initialSet="", int size_=0x80, bool valueAfter_=false) { - size = size_; - valueAfter = valueAfter_; - bset = new bool[size]; - for (int i=0; i < size; i++) { - bset[i] = false; - } - AddString(initialSet); - if (base & setLower) - AddString("abcdefghijklmnopqrstuvwxyz"); - if (base & setUpper) - AddString("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); - if (base & setDigits) - AddString("0123456789"); - } - ~CharacterSet() { - delete []bset; - bset = 0; - size = 0; - } - void Add(int val) { - PLATFORM_ASSERT(val >= 0); - PLATFORM_ASSERT(val < size); - bset[val] = true; - } - void AddString(const char *CharacterSet) { - for (const char *cp=CharacterSet; *cp; cp++) { - int val = static_cast<unsigned char>(*cp); - PLATFORM_ASSERT(val >= 0); - PLATFORM_ASSERT(val < size); - bset[val] = true; - } - } - bool Contains(int val) const { - PLATFORM_ASSERT(val >= 0); - if (val < 0) return false; - return (val < size) ? bset[val] : valueAfter; - } -}; Deleted: branches/unstable/scintilla/ContractionState.cxx =================================================================== --- branches/unstable/scintilla/ContractionState.cxx 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/ContractionState.cxx 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,251 +0,0 @@ -// Scintilla source code edit control -/** @file ContractionState.cxx - ** Manages visibility of lines for folding and wrapping. - **/ -// Copyright 1998-2007 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#include <string.h> - -#include "Platform.h" - -#include "SplitVector.h" -#include "Partitioning.h" -#include "RunStyles.h" -#include "ContractionState.h" - -#ifdef SCI_NAMESPACE -using namespace Scintilla; -#endif - -ContractionState::ContractionState() : visible(0), expanded(0), heights(0), displayLines(0), linesInDocument(1) { - //InsertLine(0); -} - -ContractionState::~ContractionState() { - Clear(); -} - -void ContractionState::EnsureData() { - if (OneToOne()) { - visible = new RunStyles(); - expanded = new RunStyles(); - heights = new RunStyles(); - displayLines = new Partitioning(4); - InsertLines(0, linesInDocument); - } -} - -void ContractionState::Clear() { - delete visible; - visible = 0; - delete expanded; - expanded = 0; - delete heights; - heights = 0; - delete displayLines; - displayLines = 0; - linesInDocument = 1; -} - -int ContractionState::LinesInDoc() const { - if (OneToOne()) { - return linesInDocument; - } else { - return displayLines->Partitions() - 1; - } -} - -int ContractionState::LinesDisplayed() const { - if (OneToOne()) { - return linesInDocument; - } else { - return displayLines->PositionFromPartition(LinesInDoc()); - } -} - -int ContractionState::DisplayFromDoc(int lineDoc) const { - if (OneToOne()) { - return lineDoc; - } else { - if (lineDoc > displayLines->Partitions()) - lineDoc = displayLines->Partitions(); - return displayLines->PositionFromPartition(lineDoc); - } -} - -int ContractionState::DocFromDisplay(int lineDisplay) const { - if (OneToOne()) { - return lineDisplay; - } else { - if (lineDisplay <= 0) { - return 0; - } - if (lineDisplay > LinesDisplayed()) { - return displayLines->PartitionFromPosition(LinesDisplayed()); - } - int lineDoc = displayLines->PartitionFromPosition(lineDisplay); - PLATFORM_ASSERT(GetVisible(lineDoc)); - return lineDoc; - } -} - -void ContractionState::InsertLine(int lineDoc) { - if (OneToOne()) { - linesInDocument++; - } else { - visible->InsertSpace(lineDoc, 1); - visible->SetValueAt(lineDoc, 1); - expanded->InsertSpace(lineDoc, 1); - expanded->SetValueAt(lineDoc, 1); - heights->InsertSpace(lineDoc, 1); - heights->SetValueAt(lineDoc, 1); - int lineDisplay = DisplayFromDoc(lineDoc); - displayLines->InsertPartition(lineDoc, lineDisplay); - displayLines->InsertText(lineDoc, 1); - } -} - -void ContractionState::InsertLines(int lineDoc, int lineCount) { - for (int l = 0; l < lineCount; l++) { - InsertLine(lineDoc + l); - } - Check(); -} - -void ContractionState::DeleteLine(int lineDoc) { - if (OneToOne()) { - linesInDocument--; - } else { - if (GetVisible(lineDoc)) { - displayLines->InsertText(lineDoc, -heights->ValueAt(lineDoc)); - } - displayLines->RemovePartition(lineDoc); - visible->DeleteRange(lineDoc, 1); - expanded->DeleteRange(lineDoc, 1); - heights->DeleteRange(lineDoc, 1); - } -} - -void ContractionState::DeleteLines(int lineDoc, int lineCount) { - for (int l = 0; l < lineCount; l++) { - DeleteLine(lineDoc); - } - Check(); -} - -bool ContractionState::GetVisible(int lineDoc) const { - if (OneToOne()) { - return true; - } else { - if (lineDoc >= visible->Length()) - return true; - return visible->ValueAt(lineDoc) == 1; - } -} - -bool ContractionState::SetVisible(int lineDocStart, int lineDocEnd, bool visible_) { - if (OneToOne() && visible_) { - return false; - } else { - EnsureData(); - int delta = 0; - Check(); - if ((lineDocStart <= lineDocEnd) && (lineDocStart >= 0) && (lineDocEnd < LinesInDoc())) { - for (int line = lineDocStart; line <= lineDocEnd; line++) { - if (GetVisible(line) != visible_) { - int difference = visible_ ? heights->ValueAt(line) : -heights->ValueAt(line); - visible->SetValueAt(line, visible_ ? 1 : 0); - displayLines->InsertText(line, difference); - delta += difference; - } - } - } else { - return false; - } - Check(); - return delta != 0; - } -} - -bool ContractionState::GetExpanded(int lineDoc) const { - if (OneToOne()) { - return true; - } else { - Check(); - return expanded->ValueAt(lineDoc) == 1; - } -} - -bool ContractionState::SetExpanded(int lineDoc, bool expanded_) { - if (OneToOne() && expanded_) { - return false; - } else { - EnsureData(); - if (expanded_ != (expanded->ValueAt(lineDoc) == 1)) { - expanded->SetValueAt(lineDoc, expanded_ ? 1 : 0); - Check(); - return true; - } else { - Check(); - return false; - } - } -} - -int ContractionState::GetHeight(int lineDoc) const { - if (OneToOne()) { - return 1; - } else { - return heights->ValueAt(lineDoc); - } -} - -// Set the number of display lines needed for this line. -// Return true if this is a change. -bool ContractionState::SetHeight(int lineDoc, int height) { - if (OneToOne() && (height == 1)) { - return false; - } else { - EnsureData(); - if (GetHeight(lineDoc) != height) { - if (GetVisible(lineDoc)) { - displayLines->InsertText(lineDoc, height - GetHeight(lineDoc)); - } - heights->SetValueAt(lineDoc, height); - Check(); - return true; - } else { - Check(); - return false; - } - } -} - -void ContractionState::ShowAll() { - int lines = LinesInDoc(); - Clear(); - linesInDocument = lines; -} - -// Debugging checks - -void ContractionState::Check() const { -#ifdef CHECK_CORRECTNESS - for (int vline = 0; vline < LinesDisplayed(); vline++) { - const int lineDoc = DocFromDisplay(vline); - PLATFORM_ASSERT(GetVisible(lineDoc)); - } - for (int lineDoc = 0; lineDoc < LinesInDoc(); lineDoc++) { - const int displayThis = DisplayFromDoc(lineDoc); - const int displayNext = DisplayFromDoc(lineDoc + 1); - const int height = displayNext - displayThis; - PLATFORM_ASSERT(height >= 0); - if (GetVisible(lineDoc)) { - PLATFORM_ASSERT(GetHeight(lineDoc) == height); - } else { - PLATFORM_ASSERT(0 == height); - } - } -#endif -} Deleted: branches/unstable/scintilla/ContractionState.h =================================================================== --- branches/unstable/scintilla/ContractionState.h 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/ContractionState.h 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,66 +0,0 @@ -// Scintilla source code edit control -/** @file ContractionState.h - ** Manages visibility of lines for folding and wrapping. - **/ -// Copyright 1998-2007 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef CONTRACTIONSTATE_H -#define CONTRACTIONSTATE_H - -#ifdef SCI_NAMESPACE -namespace Scintilla { -#endif - -/** - */ -class ContractionState { - // These contain 1 element for every document line. - RunStyles *visible; - RunStyles *expanded; - RunStyles *heights; - Partitioning *displayLines; - int linesInDocument; - - void EnsureData(); - - bool OneToOne() const { - // True when each document line is exactly one display line so need for - // complex data structures. - return visible == 0; - } - -public: - ContractionState(); - virtual ~ContractionState(); - - void Clear(); - - int LinesInDoc() const; - int LinesDisplayed() const; - int DisplayFromDoc(int lineDoc) const; - int DocFromDisplay(int lineDisplay) const; - - void InsertLine(int lineDoc); - void InsertLines(int lineDoc, int lineCount); - void DeleteLine(int lineDoc); - void DeleteLines(int lineDoc, int lineCount); - - bool GetVisible(int lineDoc) const; - bool SetVisible(int lineDocStart, int lineDocEnd, bool visible); - - bool GetExpanded(int lineDoc) const; - bool SetExpanded(int lineDoc, bool expanded); - - int GetHeight(int lineDoc) const; - bool SetHeight(int lineDoc, int height); - - void ShowAll(); - void Check() const; -}; - -#ifdef SCI_NAMESPACE -} -#endif - -#endif Deleted: branches/unstable/scintilla/Converter.h =================================================================== --- branches/unstable/scintilla/Converter.h 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/Converter.h 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,70 +0,0 @@ -// Scintilla source code edit control -// Converter.h - Encapsulation of iconv -// Copyright 2004 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -typedef GIConv ConverterHandle; -const ConverterHandle iconvhBad = (ConverterHandle)(-1); -// Since various versions of iconv can not agree on whether the src argument -// is char ** or const char ** provide a templatised adaptor. -template<typename T> -size_t iconv_adaptor(size_t(*f_iconv)(ConverterHandle, T, size_t *, char **, size_t *), - ConverterHandle cd, char** src, size_t *srcleft, - char **dst, size_t *dstleft) { - return f_iconv(cd, (T)src, srcleft, dst, dstleft); -} -/** - * Encapsulate iconv safely and avoid iconv_adaptor complexity in client code. - */ -class Converter { - ConverterHandle iconvh; - void OpenHandle(const char *fullDestination, const char *charSetSource) { - iconvh = g_iconv_open(fullDestination, charSetSource); - } - bool Succeeded() const { - return iconvh != iconvhBad; - } -public: - Converter() { - iconvh = iconvhBad; - } - Converter(const char *charSetDestination, const char *charSetSource, bool transliterations) { - iconvh = iconvhBad; - Open(charSetDestination, charSetSource, transliterations); - } - ~Converter() { - Close(); - } - operator bool() const { - return Succeeded(); - } - void Open(const char *charSetDestination, const char *charSetSource, bool transliterations=true) { - Close(); - if (*charSetSource) { - // Try allowing approximate transliterations - if (transliterations) { - char fullDest[200]; - strcpy(fullDest, charSetDestination); - strcat(fullDest, "//TRANSLIT"); - OpenHandle(fullDest, charSetSource); - } - if (!Succeeded()) { - // Transliterations failed so try basic name - OpenHandle(charSetDestination, charSetSource); - } - } - } - void Close() { - if (Succeeded()) { - g_iconv_close(iconvh); - iconvh = iconvhBad; - } - } - size_t Convert(char** src, size_t *srcleft, char **dst, size_t *dstleft) const { - if (!Succeeded()) { - return (size_t)(-1); - } else { - return iconv_adaptor(g_iconv, iconvh, src, srcleft, dst, dstleft); - } - } -}; Deleted: branches/unstable/scintilla/Decoration.cxx =================================================================== --- branches/unstable/scintilla/Decoration.cxx 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/Decoration.cxx 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,188 +0,0 @@ -/** @file Decoration.cxx - ** Visual elements added over text. - **/ -// Copyright 1998-2007 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <stdarg.h> - -#include "Platform.h" - -#include "Scintilla.h" -#include "SplitVector.h" -#include "Partitioning.h" -#include "RunStyles.h" -#include "Decoration.h" - -#ifdef SCI_NAMESPACE -using namespace Scintilla; -#endif - -Decoration::Decoration(int indicator_) : next(0), indicator(indicator_) { -} - -Decoration::~Decoration() { -} - -bool Decoration::Empty() { - return rs.starts->Partitions() == 1; -} - -DecorationList::DecorationList() : currentIndicator(0), currentValue(1), current(0), - lengthDocument(0), root(0), clickNotified(false) { -} - -DecorationList::~DecorationList() { - Decoration *deco = root; - while (deco) { - Decoration *decoNext = deco->next; - delete deco; - deco = decoNext; - } - root = 0; - current = 0; -} - -Decoration *DecorationList::DecorationFromIndicator(int indicator) { - for (Decoration *deco=root; deco; deco = deco->next) { - if (deco->indicator == indicator) { - return deco; - } - } - return 0; -} - -Decoration *DecorationList::Create(int indicator, int length) { - currentIndicator = indicator; - Decoration *decoNew = new Decoration(indicator); - decoNew->rs.InsertSpace(0, length); - - Decoration *decoPrev = 0; - Decoration *deco = root; - - while (deco && (deco->indicator < indicator)) { - decoPrev = deco; - deco = deco->next; - } - if (decoPrev == 0) { - decoNew->next = root; - root = decoNew; - } else { - decoNew->next = deco; - decoPrev->next = decoNew; - } - return decoNew; -} - -void DecorationList::Delete(int indicator) { - Decoration *decoToDelete = 0; - if (root) { - if (root->indicator == indicator) { - decoToDelete = root; - root = root->next; - } else { - Decoration *deco=root; - while (deco->next && !decoToDelete) { - if (deco->next && deco->next->indicator == indicator) { - decoToDelete = deco->next; - deco->next = decoToDelete->next; - } else { - deco = deco->next; - } - } - } - } - if (decoToDelete) { - delete decoToDelete; - current = 0; - } -} - -void DecorationList::SetCurrentIndicator(int indicator) { - currentIndicator = indicator; - current = DecorationFromIndicator(indicator); - currentValue = 1; -} - -void DecorationList::SetCurrentValue(int value) { - currentValue = value ? value : 1; -} - -bool DecorationList::FillRange(int &position, int value, int &fillLength) { - if (!current) { - current = DecorationFromIndicator(currentIndicator); - if (!current) { - current = Create(currentIndicator, lengthDocument); - } - } - bool changed = current->rs.FillRange(position, value, fillLength); - if (current->Empty()) { - Delete(currentIndicator); - } - return changed; -} - -void DecorationList::InsertSpace(int position, int insertLength) { - lengthDocument += insertLength; - for (Decoration *deco=root; deco; deco = deco->next) { - deco->rs.InsertSpace(position, insertLength); - } -} - -void DecorationList::DeleteRange(int position, int deleteLength) { - lengthDocument -= deleteLength; - Decoration *deco; - for (deco=root; deco; deco = deco->next) { - deco->rs.DeleteRange(position, deleteLength); - } - DeleteAnyEmpty(); -} - -void DecorationList::DeleteAnyEmpty() { - Decoration *deco = root; - while (deco) { - if (deco->Empty()) { - Delete(deco->indicator); - deco = root; - } else { - deco = deco->next; - } - } -} - -int DecorationList::AllOnFor(int position) { - int mask = 0; - for (Decoration *deco=root; deco; deco = deco->next) { - if (deco->rs.ValueAt(position)) { - mask |= 1 << deco->indicator; - } - } - return mask; -} - -int DecorationList::ValueAt(int indicator, int position) { - Decoration *deco = DecorationFromIndicator(indicator); - if (deco) { - return deco->rs.ValueAt(position); - } - return 0; -} - -int DecorationList::Start(int indicator, int position) { - Decoration *deco = DecorationFromIndicator(indicator); - if (deco) { - return deco->rs.StartRun(position); - } - return 0; -} - -int DecorationList::End(int indicator, int position) { - Decoration *deco = DecorationFromIndicator(indicator); - if (deco) { - return deco->rs.EndRun(position); - } - return 0; -} Deleted: branches/unstable/scintilla/Decoration.h =================================================================== --- branches/unstable/scintilla/Decoration.h 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/Decoration.h 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,64 +0,0 @@ -/** @file Decoration.h - ** Visual elements added over text. - **/ -// Copyright 1998-2007 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef DECORATION_H -#define DECORATION_H - -#ifdef SCI_NAMESPACE -namespace Scintilla { -#endif - -class Decoration { -public: - Decoration *next; - RunStyles rs; - int indicator; - - Decoration(int indicator_); - ~Decoration(); - - bool Empty(); -}; - -class DecorationList { - int currentIndicator; - int currentValue; - Decoration *current; - int lengthDocument; - Decoration *DecorationFromIndicator(int indicator); - Decoration *Create(int indicator, int length); - void Delete(int indicator); - void DeleteAnyEmpty(); -public: - Decoration *root; - bool clickNotified; - - DecorationList(); - ~DecorationList(); - - void SetCurrentIndicator(int indicator); - int GetCurrentIndicator() const { return currentIndicator; } - - void SetCurrentValue(int value); - int GetCurrentValue() const { return currentValue; } - - // Returns true if some values may have changed - bool FillRange(int &position, int value, int &fillLength); - - void InsertSpace(int position, int insertLength); - void DeleteRange(int position, int deleteLength); - - int AllOnFor(int position); - int ValueAt(int indicator, int position); - int Start(int indicator, int position); - int End(int indicator, int position); -}; - -#ifdef SCI_NAMESPACE -} -#endif - -#endif Deleted: branches/unstable/scintilla/Document.cxx =================================================================== --- branches/unstable/scintilla/Document.cxx 2010-11-24 13:28:52 UTC (rev 5436) +++ branches/unstable/scintilla/Document.cxx 2010-11-24 21:23:05 UTC (rev 5437) @@ -1,1920 +0,0 @@ -// Scintilla source code edit control -/** @file Document.cxx - ** Text document that handles notifications, DBCS, styling, words and end of line. - **/ -// Copyright 1998-2003 by Neil Hodgson <neilh(a)scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#include <stdlib.h> -#include <string.h> -#include <stdio.h> -#include <ctype.h> - -#include <string> -#include <vector> - -// With Borland C++ 5.5, including <string> includes Windows.h leading to defining -// FindText to FindTextA which makes calls here to Document::FindText fail. -#ifdef __BORLANDC__ -#ifdef FindText -#undef FindText -#endif -#endif - -#include "Platform.h" - -#include "Scintilla.h" -#include "SplitVector.h" -#include "Partitioning.h" -#include "RunStyles.h" -#include "CellBuffer.h" -#include "PerLine.h" -#include "CharClassify.h" -#include "Decoration.h" -#include "Document.h" -#include "RESearch.h" -#include "UniConversion.h" - -#ifdef SCI_NAMESPACE -using namespace Scintilla; -#endif - -// This is ASCII specific but is safe with chars >= 0x80 -static inline bool isspacechar(unsigned char ch) { - return (ch == ' ') || ((ch >= 0x09) && (ch <= 0x0d)); -} - -static inline bool IsPunctuation(char ch) { - return isascii(ch) && ispunct(ch); -} - -static inline bool IsADigit(char ch) { - return isascii(ch) && isdigit(ch); -} - -static inline bool IsLowerCase(char ch) { - return isascii(ch) && islower(ch); -} - -static inline bool IsUpperCase(char ch) { - return isascii(ch) && isupper(ch); -} - -Document::Document() { - refCount = 0; -#ifdef unix - eolMode = SC_EOL_LF; -#else - eolMode = SC_EOL_CRLF; -#endif - dbcsCodePage = 0; - stylingBits = 5; - stylingBitsMask = 0x1F; - stylingMask = 0; - endStyled = 0; - styleClock = 0; - enteredModification = 0; - enteredStyling = 0; - enteredReadOnlyCount = 0; - tabInChars = 8; - indentInChars = 0; - actualIndentInChars = 8; - useTabs = true; - tabIndents = true; - backspaceUnindents = false; - watchers = 0; - lenWatchers = 0; - - matchesValid = false; - regex = 0; - - perLineData[ldMarkers] = new LineMarkers(); - perLineData[ldLevels] = new LineLevels(); - perLineData[ldState] = new LineState(); - perLineData[ldMargin] = new LineAnnotation(); - perLineData[ldAnnotation] = new LineAnnotation(); - - cb.SetPerLine(this); -} - -Document::~Document() { - for (int i = 0; i < lenWatchers; i++) { - watchers[i].watcher->NotifyDeleted(this, watchers[i].userData); - } - delete []watchers; - for (int j=0; j<ldSize; j++) { - delete perLineData[j]; - perLineData[j] = 0; - } - watchers = 0; - lenWatchers = 0; - delete regex; - regex = 0; -} - -void Document::Init() { - for (int j=0; j<ldSize; j++) { - if (perLineData[j]) - perLineData[j]->Init(); - } -} - -void Document::InsertLine(int line) { - for (int j=0; j<ldSize; j++) { - if (perLineData[j]) - perLineData[j]->InsertLine(line); - } -} - -void Document::RemoveLine(int line) { - for (int j=0; j<ldSize; j++) { - if (perLineData[j]) - perLineData[j]->RemoveLine(line); - } -} - -// Increase reference count and return its previous value. -int Document::AddRef() { - return refCount++; -} - -// Decrease reference count and return its previous value. -// Delete the document if reference count reaches zero. -int Document::Release() { - int curRefCount = --refCount; - if (curRefCount == 0) - delete this; - return curRefCount; -} - -void Document::SetSavePoint() { - cb.SetSavePoint(); - NotifySavePoint(true); -} - -int Document::GetMark(int line) { - return static_cast<LineMarkers *>(perLineData[ldMarkers])->MarkValue(line); -} - -int Document::AddMark(int line, int markerNum) { - if (line <= LinesTotal()) { - int prev = static_cast<LineMarkers *>(perLineData[ldMarkers])-> - AddMark(line, markerNum, LinesTotal()); - DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line); - NotifyModified(mh); - return prev; - } else { - return 0; - } -} - -void Document::AddMarkSet(int line, int valueSet) { - unsigned int m = valueSet; - for (int i = 0; m; i++, m >>= 1) - if (m & 1) - static_cast<LineMarkers *>(perLineData[ldMarkers])-> - AddMark(line, i, LinesTotal()); - DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line); - NotifyModified(mh); -} - -void Document::DeleteMark(int line, int markerNum) { - static_cast<LineMarkers *>(perLineData[ldMarkers])->DeleteMark(line, markerNum, false); - DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line); - NotifyModified(mh); -} - -void Document::DeleteMarkFromHandle(int markerHandle) { - static_cast<LineMarkers *>(perLineData[ldMarkers])->DeleteMarkFromHandle(markerHandle); - DocModification mh(SC_MOD_CHANGEMARKER, 0, 0, 0, 0); - mh.line = -1; - NotifyModified(mh); -} - -void Document::DeleteAllMarks(int markerNum) { - for (int line = 0; line < LinesTotal(); line++) { - static_cast<LineMarkers *>(perLineData[ldMarkers])->DeleteMark(line, markerNum, true); - } - DocModification mh(SC_MOD_CHANGEMARKER, 0, 0, 0, 0); - mh.line = -1; - NotifyModified(mh); -} - -int Document::LineFromHandle(int markerHandle) { - return static_cast<LineMarkers *>(perLineData[ldMarkers])->LineFromHandle(markerHandle); -} - -int Document::LineStart(int line) const { - return cb.LineStart(line); -} - -int Document::LineEnd(int line) const { - if (line == LinesTotal() - 1) { - return LineStart(line + 1); - } else { - int position = LineStart(line + 1) - 1; - // When line terminator is CR+LF, may need to go back one more - if ((position > LineStart(line)) && (cb.CharAt(position - 1) == '\r')) { - position--; - } - return position; - } -} - -int Document::LineFromPosition(int pos) const { - return cb.LineFromPosition(pos); -} - -int Document::LineEndPosition(int position) const { - return LineEnd(LineFromPosition(position)); -} - -bool Document::IsLineEndPosition(int position) const { - return LineEnd(LineFromPosition(position)) == position; -} - -int Document::VCHomePosition(int position) const { - int line = LineFromPosition(position); - int startPosition = LineStart(line); - int endLine = LineEnd(line); - int startText = startPosition; - while (startText < endLine && (cb.CharAt(startText) == ' ' || cb.CharAt(startText) == '\t')) - startText++; - if (position == startText) - return startPosition; - else - return startText; -} - -int Document::SetLevel(int line, int level) { - int prev = static_cast<LineLevels *>(perLineData[ldLevels])->SetLevel(line, level, LinesTotal()); - if (prev != level) { - DocModification mh(SC_MOD_CHANGEFOLD | SC_MOD_CHANGEMARKER, - LineStart(line), 0, 0, 0, line); - mh.foldLevelNow = level; - mh.foldLevelPrev = prev; - NotifyModified(mh); - } - return prev; -} - -int Document::GetLevel(int line) const { - return static_cast<LineLevels *>(perLineData[ldLevels])->GetLevel(line); -} - -void Document::ClearLevels() { - static_cast<LineLevels *>(perLineData[ldLevels])->ClearLevels(); -} - -static bool IsSubordinate(int levelStart, int levelTry) { - if (levelTry & SC_FOLDLEVELWHITEFLAG) - return true; - else - return (levelStart & SC_FOLDLEVELNUMBERMASK) < (levelTry & SC_FOLDLEVELNUMBERMASK); -} - -int Document::GetLastChild(int lineParent, int level) { - if (level == -1) - level = GetLevel(lineParent) & SC_FOLDLEVELNUMBERMASK; - int maxLine = LinesTotal(); - int lineMaxSubord = lineParent; - while (lineMaxSubord < maxLine - 1) { - EnsureStyledTo(LineStart(lineMaxSubord + 2)); - if (!IsSubordinate(level, GetLevel(lineMaxSubord + 1))) - break; - lineMaxSubord++; - } - if (lineMaxSubord > lineParent) { - if (level > (GetLevel(lineMaxSubord + 1) & SC_FOLDLEVELNUMBERMASK)) { - // Have chewed up some whitespace that belongs to a parent so seek back - if (GetLevel(lineMaxSubord) & SC_FOLDLEVELWHITEFLAG) { - lineMaxSubord--; - } - } - } - return lineMaxSubord; -} - -int Document::GetFoldParent(int line) { - int level = GetLevel(line) & SC_FOLDLEVELNUMBERMASK; - int lineLook = line - 1; - while ((lineLook > 0) && ( - (!(GetLevel(lineLook) & SC_FOLDLEVELHEADERFLAG)) || - ((GetLevel(lineLook) & SC_FOLDLEVELNUMBERMASK) >= level)) - ) { - lineLook--; - } - if ((GetLevel(lineLook) & SC_FOLDLEVELHEADERFLAG) && - ((GetLevel(lineLook) & SC_FOLDLEVELNUMBERMASK) < level)) { - return lineLook; - } else { - return -1; - } -} - -int Document::ClampPositionIntoDocument(int pos) { - return Platform::Clamp(pos, 0, Length()); -} - -bool Document::IsCrLf(int pos) { - if (pos < 0) - return false; - if (pos >= (Length() - 1)) - return false; - return (cb.CharAt(pos) == '\r') && (cb.CharAt(pos + 1) == '\n'); -} - -static const int maxBytesInDBCSCharacter=5; - -int Document::LenChar(int pos) { - if (pos < 0) { - return 1; - } else if (IsCrLf(pos)) { - return 2; - } else if (SC_CP_UTF8 == dbcsCodePage) { - unsigned char ch = static_cast<unsigned char>(cb.CharAt(pos)); - if (ch < 0x80) - return 1; - int len = 2; - if (ch >= (0x80 + 0x40 + 0x20 + 0x10)) - len = 4; - else if (ch >= (0x80 + 0x40 + 0x20)) - len = 3; - int lengthDoc = Length(); - if ((pos + len) > lengthDoc) - return lengthDoc -pos; - else - return len; - } else if (dbcsCodePage) { - char mbstr[maxBytesInDBCSCharacter+1]; - int i; - for (i=0; i<Platform::DBCSCharMaxLength(); i++) { - mbstr[i] = cb.CharAt(pos+i); - } - mbstr[i] = '\0'; - return Platform::DBCSCharLength(dbcsCodePage, mbstr); - } else { - return 1; - } -} - -static bool IsTrailByte(int ch) { - return (ch >= 0x80) && (ch < (0x80 + 0x40)); -} - -static int BytesFromLead(int leadByte) { - if (leadByte > 0xF4) { - // Characters longer than 4 bytes not possible in current UTF-8 - return 0; - } else if (leadByte >= 0xF0) { - return 4; - } else if (leadByte >= 0xE0) { - return 3; - } else if (leadByte >= 0xC2) { - return 2; - } - return 0; -} - -bool Document::InGoodUTF8(int pos, int &start, int &end) { - int lead = pos; - while ((lead>0) && (pos-lead < 4) && IsTrailByte(static_cast<unsigned char>(cb.CharAt(lead-1)))) - lead--; - start = 0; - if (lead > 0) { - start = lead-1; - } - int leadByte = static_cast<unsigned char>(cb.CharAt(start)); - int bytes = BytesFromLead(leadByte); - if (bytes == 0) { - return false; - } else { - int trailBytes = bytes - 1; - int len = pos - lead + 1; - if (len > trailBytes) - // pos too far from lead - return false; - // Check that there are enough trails for this lead - int trail = pos + 1; - while ((trail-lead<trailBytes) && (trail < Length())) { - if (!IsTrailByte(static_cast<unsigned char>(cb.CharAt(trail)))) { - return false; - } - trail++; - } - end = start + bytes; - return true; - } -} - -// Normalise a position so that it is not halfway through a two byte character. -// This can occur in two situations - -// When lines are terminated with \r\n pairs which should be treated as one character. -// When displaying DBCS text such as Japanese. -// If moving, move the position in the indicated direction. -int Document::MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd) { - //Platform::DebugPrintf("NoCRLF %d %d\n", pos, moveDir); - // If out of range, just return minimum/maximum value. - if (pos <= 0) - return 0; - if (pos >= Length()) - return Length(); - - // PLATFORM_ASSERT(pos > 0 && pos < Length()); - if (checkLineEnd && IsCrLf(pos - 1)) { - if (moveDir > 0) - return pos + 1; - else - return pos - 1; - } - - // Not between CR and LF - - if (dbcsCodePage) { - if (SC_CP_UTF8 == dbcsCodePage) { - unsigned char ch = static_cast<unsigned char>(cb.CharAt(pos)); - int startUTF = pos; - int endUTF = pos; - if (IsTrailByte(ch) && InGoodUTF8(pos, startUTF, endUTF)) { - // ch is a trail byte within a UTF-8 character - if (moveDir > 0) - pos = endUTF; - else - pos = startUTF; - } - } else { - // Anchor DBCS calculations at start of line because start of line can - // not be a DBCS trail byte. - int posCheck = LineStart(LineFromPosition(pos)); - while (posCheck < pos) { - char mbstr[maxBytesInDBCSCharacter+1]; - int i; - for (i=0; i<Platform::DBCSCharMaxLength(); i++) { - mbstr[i] = cb.CharAt(posCheck+i); - } - mbstr[i] = '\0'; - - int mbsize = Platform::DBCSCharLength(dbcsCodePage, mbstr); - if (posCheck + mbsize == pos) { - return pos; - } else if (posCheck + mbsize > pos) { - if (moveDir > 0) { - return posCheck + mbsize; - } else { - return posCheck; - } - } - posCheck += mbsize; - } - } - } - - return pos; -} - -void Document::ModifiedAt(int pos) { - if (endStyled > pos) - endStyled = pos; -} - -void Document::CheckReadOnly() { - if (cb.IsReadOnly() && enteredReadOnlyCount == 0) { - enteredReadOnlyCount++; - NotifyModifyAttempt(); - enteredReadOnlyCount--; - } -} - -// Document only modified by gateways DeleteChars, InsertString, Undo, Redo, and SetStyleAt. -// SetStyleAt does not change the persistent state of a document - -bool Document::DeleteChars(int pos, int len) { - if (len == 0) - return false; - if ((pos + len) > Length()) - return false; - CheckReadOnly(); - if (enteredModification != 0) { - return false; - } else { - enteredModification++; - if (!cb.IsReadOnly()) { - NotifyModified( - DocModification( - SC_MOD_BEFOREDELETE | SC_PERFORMED_USER, - pos, len, - 0, 0)); - int prevLinesTotal = LinesTotal(); - bool startSavePoint = cb.IsSavePoint(); - bool startSequence = false; - const char *text = cb.DeleteChars(pos, len, startSequence); - if (startSavePoint && cb.IsCollectingUndo()) - NotifySavePoint(!startSavePoint); - if ((pos < Length()) || (pos == 0)) - ModifiedAt(pos); - else - ModifiedAt(pos-1); - NotifyModified( - DocModification( - SC_MOD_DELETETEXT | SC_PERFORMED_USER | (startSequence?SC_STARTACTION:0), - pos, len, - LinesTotal() - prevLinesTotal, text)); - } - enteredModification--; - } - return !cb.IsReadOnly(); -} - -/** - * Insert a string with a length. - */ -bool Document::InsertString(int position, const char *s, int insertLength) { - if (insertLength <= 0) { - return false; - } - CheckReadOnly(); - if (enteredModification != 0) { - return false; - } else { - enteredModification++; - if (!cb.IsReadOnly()) { - NotifyModified( - DocModification( - SC_MOD_BEFOREINSERT | SC_PERFORMED_USER, - position, insertLength, - 0, s)); - int prevLinesTotal = LinesTotal(); - bool startSavePoint = cb.IsSavePoint(); - bool startSequence = false; - const char *text = cb.InsertString(position, s, insertLength, startSequence); - if (startSavePoint && cb.IsCollectingUndo()) - NotifySavePoint(!startSavePoint); - ModifiedAt(position); - NotifyModified( - DocModification( - SC_MOD_INSERTTEXT | SC_PERFORMED_USER | (startSequence?SC_STARTACTION:0), - position, insertLength, - LinesTotal() - prevLinesTotal, text)); - } - enteredModification--; - } - return !cb.IsReadOnly(); -} - -int Document::Undo() { - int newPos = -1; - CheckReadOnly(); - if (enteredModification == 0) { - enteredModification++; - if (!cb.IsReadOnly()) { - bool startSavePoint = cb.IsSavePoint(); - bool multiLine = false; - int steps = cb.StartUndo(); - //Platform::DebugPrintf("Steps=%d\n", steps); - for (int step = 0; step < steps; step++) { - const int prevLinesTotal = LinesTotal(); - const Action &action = cb.GetUndoStep(); - if (action.at == removeAction) { - NotifyModified(DocModification( - SC_MOD_BEFOREINSERT | SC_PERFORMED_UNDO, action)); - } else if (action.at == containerAction) { - DocModification dm(SC_MOD_CONTAINER | SC_PERFORMED_UNDO); - dm.token = action.position; - NotifyModified(dm); - } else { - NotifyModified(DocModification( - SC_MOD_BEFOREDELETE | SC_PERFORMED_UNDO, action)); - } - cb.PerformUndoStep(); - int cellPosition = action.position; - if (action.at != containerAction) { - ModifiedAt(cellPosition); - newPos = cellPosition; - } - - int modFlags = SC_PERFORMED_UNDO; - // With undo, an insertion action becomes a deletion notification - if (action.at == removeAction) { - newPos += action.lenData; - modFlags |= SC_MOD_INSERTTEXT; - } else if (action.at == insertAction) { - modFlags |= SC_MOD_DELETETEXT; - } - if (steps > 1) - modFlags |= SC_MULTISTEPUNDOREDO; - const int linesAdded = LinesTotal() - prevLinesTotal; - if (linesAdded != 0) - multiLine = true; - if (step == steps - 1) { - modFlags |= SC_LASTSTEPINUNDOREDO; - if (multiLine) - modFlags |= SC_MULTILINEUNDOREDO; - } - NotifyModified(DocModification(modFlags, cellPosition, action.lenData, - linesAdded, action.data)); - } - - bool endSavePoint = cb.IsSavePoint(); - if (startSavePoint != endSavePoint) - NotifySavePoint(endSavePoint); - } - enteredModification--; - } - return newPos; -} - -int Document::Redo() { - int newPos = -1; - CheckReadOnly(); - if (enteredModification == 0) { - enteredModification++; - if (!cb.IsReadOnly()) { - bool startSavePoint = cb.IsSavePoint(); - bool multiLine = false; - int steps = cb.StartRedo(); - for (int step = 0; step < steps; step++) { - const int prevLinesTotal = LinesTotal(); - const Action &action = cb.GetRedoStep(); - if (action.at == insertAction) { - NotifyModified(DocModification( - SC_MOD_BEFOREINSERT | SC_PERFORMED_REDO, action)); - } else if (action.at == containerAction) { - DocModification dm(SC_MOD_CONTAINER | SC_PERFORMED_REDO); - dm.token = action.position; - NotifyModified(dm); - } else { - NotifyModified(DocModification( - SC_MOD_BEFOREDELETE | SC_PERFORMED_REDO, action)); - } - cb.PerformRedoStep(); - if (action.at != containerAction) { - ModifiedAt(action.position); - newPos = action.position; - } - - int modFlags = SC_PERFORMED_REDO; - if (action.at == insertAction) { - newPos += action.lenData; - modFlags |= SC_MOD_INSERTTEXT; - } else if (action.at == removeAction) { - modFlags |= SC_MOD_DELETETEXT; - } - if (steps > 1) - modFlags |= SC_MULTISTEPUNDOREDO; - const int linesAdded = LinesTotal() - prevLinesTotal; - if (linesAdded != 0) - multiLine = true; - if (step == steps - 1) { - modFlags |= SC_LASTSTEPINUNDOREDO; - if (multiLine) - modFlags |= SC_MULTILINEUNDOREDO; - } - NotifyModified( - DocModification(modFlags, action.position, action.lenData, - linesAdded, action.data)); - } - - bool endSavePoint = cb.IsSavePoint(); - if (startSavePoint != endSavePoint) - NotifySavePoint(endSavePoint); - } - enteredModification--; - } - return newPos; -} - -/** - * Insert a single character. - */ -bool Document::InsertChar(int pos, char ch) { - char chs[1]; - chs[0] = ch; - return InsertString(pos, chs, 1); -} - -/** - * Insert a null terminated string. - */ -bool Document::InsertCString(int position, const char *s) { - return InsertString(position, s, strlen(s)); -} - -void Document::ChangeChar(int pos, char ch) { - DeleteChars(pos, 1); - InsertChar(pos, ch); -} - -void Document::DelChar(int pos) { - DeleteChars(pos, LenChar(pos)); -} - -void Document::DelCharBack(int pos) { - if (pos <= 0) { - return; - } else if (IsCrLf(pos - 2)) { - DeleteChars(pos - 2, 2); - } else if (dbcsCodePage) { - int startChar = MovePositionOutsideChar(pos - 1, -1, false); - DeleteChars(startChar, pos - startChar); - } else { - DeleteChars(pos - 1, 1); - } -} - -static bool isindentchar(char ch) { - return (ch == ' ') || (ch == '\t'); -} - -static int NextTab(int pos, int tabSize) { - return ((pos / tabSize) + 1) * tabSize; -} - -static void CreateIndentation(char *linebuf, int length, int indent, int tabSize, bool insertSpaces) { - length--; // ensure space for \0 - if (!insertSpaces) { - while ((indent >= tabSize) && (length > 0)) { - *linebuf++ = '\t'; - indent -= tabSize; - length--; - } - } - while ((indent > 0) && (length > 0)) { - *linebuf++ = ' '; - indent--; - length--; - } - *linebuf = '\0'; -} - -int Document::GetLineIndentation(int line) { - int indent = 0; - if ((line >= 0) && (line < LinesTotal())) { - int lineStart = LineStart(line); - int length = Length(); - for (int i = lineStart; i < length; i++) { - char ch = cb.CharAt(i); - if (ch == ' ') - indent++; - else if (ch == '\t') - indent = NextTab(indent, tabInChars); - else - return indent; - } - } - return indent; -} - -void Document::SetLineIndentation(int line, int indent) { - int indentOfLine = GetLineIndentation(line); - if (indent < 0) - indent = 0; - if (indent != indentOfLine) { - char linebuf[1000]; - CreateIndentation(linebuf, sizeof(linebuf), indent, tabInChars, !useTabs); - int thisLineStart = LineStart(line); - int indentPos = GetLineIndentPosition(line); - UndoGroup ug(this); - DeleteChars(thisLineStart, indentPos - thisLineStart); - InsertCString(thisLineStart, linebuf); - } -} - -int Document::GetLineIndentPosition(int line) const { - if (line < 0) - return 0; - int pos = LineStart(line); - int length = Length(); - while ((pos < length) && isindentchar(cb.CharAt(pos))) { - pos++; - } - return pos; -} - -int Document::GetColumn(int pos) { - int column = 0; - int line = LineFromPosition(pos); - if ((line >= 0) && (line < LinesTotal())) { - for (int i = LineStart(line); i < pos;) { - char ch = cb.CharAt(i); - if (ch == '\t') { - column = NextTab(column, tabInChars); - i++; - } else if (ch == '\r') { - return column; - } else if (ch == '\n') { - return column; - } else if (i >= Length()) { - return column; - } else { - column++; - i = MovePositionOutsideChar(i + 1, 1, false); - } - } - } - return column; -} - -int Document::FindColumn(int line, int column) { - int position = LineStart(line); - if ((line >= 0) && (line < LinesTotal())) { - int columnCurrent = 0; - while ((columnCurrent < column) && (position < Length())) { - char ch = cb.CharAt(position); - if (ch == '\t') { - columnCurrent = NextTab(columnCurrent, tabInChars); - position++; - } else if (ch == '\r') { - return position; - } else if (ch == '\n') { - return position; - } else { - columnCurrent++; - position = MovePositionOutsideChar(position + 1, 1, false); - } - } - } - return position; -} - -void Document::Indent(bool forwards, int lineBottom, int lineTop) { - // Dedent - suck white space off the front of the line to dedent by equivalent of a tab - for (int line = lineBottom; line >= lineTop; line--) { - int indentOfLine = GetLineIndentation(line); - if (forwards) { - if (LineStart(line) < LineEnd(line)) { - SetLineIndentation(line, indentOfLine + IndentSize()); - } - } else { - SetLineIndentation(line, indentOfLine - IndentSize()); - } - } -} - -// Convert line endings for a piece of text to a particular mode. -// Stop at len or when a NUL is found. -// Caller must delete the returned pointer. -char *Document::TransformLineEnds(int *pLenOut, const char *s, size_t len, int eolMode) { - char *dest = new char[2 * len + 1]; - const char *sptr = s; - char *dptr = dest; - for (size_t i = 0; (i < len) && (*sptr != '\0'); i++) { - if (*sptr == '\n' || *sptr == '\r') { - if (eolMode == SC_EOL_CR) { - *dptr++ = '\r'; - } else if (eolMode == SC_EOL_LF) { - *dptr++ = '\n'; - } else { // eolMode == SC_EOL_CRLF - *dptr++ = '\r'; - *dptr++ = '\n'; - } - if ((*sptr == '\r') && (i+1 < len) && (*(sptr+1) == '\n')) { - i++; - sptr++; - } - sptr++; - } else { - *dptr++ = *sptr++; - } - } - *dptr++ = '\0'; - *pLenOut = (dptr - dest) - 1; - return dest; -} - -void Document::ConvertLineEnds(int eolModeSet) { - UndoGroup ug(this); - - for (int pos = 0; pos < Length(); pos++) { - if (cb.CharAt(pos) == '\r') { - if (cb.CharAt(pos + 1) == '\n') { - // CRLF - if (eolModeSet == SC_EOL_CR) { - DeleteChars(pos + 1, 1); // Delete the LF - } else if (eolModeSet == SC_EOL_LF) { - DeleteChars(pos, 1); // Delete the CR - } else { - pos++; - } - } else { - // CR - if (eolModeSet == SC_EOL_CRLF) { - InsertString(pos + 1, "\n", 1); // Insert LF - pos++; - } else if (eolModeSet == SC_EOL_LF) { - InsertString(pos, "\n", 1); // Insert LF - DeleteChars(pos + 1, 1); // Delete CR - } - } - } else if (cb.CharAt(pos) == '\n') { - // LF - if (eolModeSet == SC_EOL_CRLF) { - InsertString(pos, "\r", 1); // Insert CR - pos++; - } else if (eolModeSet == SC_EOL_CR) { - InsertString(pos, "\r", 1); // Insert CR - DeleteChars(pos + 1, 1); // Delete LF - } - } - } - -} - -bool Document::IsWhiteLine(int line) const { - int currentChar = LineStart(line); - int endLine = LineEnd(line); - while (currentChar < endLine) { - if (cb.CharAt(currentChar) != ' ' && cb.CharAt(currentChar) != '\t') { - return false; - } - ++currentChar; - } - return true; -} - -int Document::ParaUp(int pos) { - int line = LineFromPosition(pos); - line--; - while (line >= 0 && IsWhiteLine(line)) { // skip empty lines - line--; - } - while (line >= 0 && !IsWhiteLine(line)) { // skip non-empty lines - line--; - } - line++; - return LineStart(line); -} - -int Document::ParaDown(int pos) { - int line = LineFromPosition(pos); - while (line < LinesTotal() && !IsWhiteLine(line)) { // skip non-empty lines - line++; - } - while (line < LinesTotal() && IsWhiteLine(line)) { // skip empty lines - line++; - } - if (line < LinesTotal()) - return LineStart(line); - else // end of a document - return LineEnd(line-1); -} - -CharClassify::cc Document::WordCharClass(unsigned char ch) { - if ((SC_CP_UTF8 == dbcsCodePage) && (ch >= 0x80)) - return CharClassify::ccWord; - return charClass.GetClass(ch); -} - -/** - * Used by commmands that want to select whole words. - * Finds the start of word at pos when delta < 0 or the end of the word when delta >= 0. - */ -int Document::ExtendWordSelect(int pos, int delta, bool onlyWordCharacters) { - CharClassify::cc ccStart = CharClassify::ccWord; - if (delta < 0) { - if (!onlyWordCharacters) - ccStart = WordCharClass(cb.CharAt(pos-1)); - while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == ccStart)) - pos--; - } else { - if (!onlyWordCharacters && pos < Length()) - ccStart = WordCharClass(cb.CharAt(pos)); - while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == ccStart)) - pos++; - } - return MovePositionOutsideChar(pos, delta, true); -} - -/** - * Find the start of the next word in either a forward (delta >= 0) or backwards direction - * (delta < 0). - * This is looking for a transition between character classes although there is also some - * additional movement to transit white space. - * Used by cursor movement by word commands. - */ -int Document::NextWordStart(int pos, int delta) { - if (delta < 0) { - while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == CharClassify::ccSpace)) - pos--; - if (pos > 0) { - CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos-1)); - while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == ccStart)) { - pos--; - } - } - } else { - CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos)); - while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == ccStart)) - pos++; - while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == CharClassify::ccSpace)) - pos++; - } - return pos; -} - -/** - * Find the end of the next word in either a forward (delta >= 0) or backwards direction - * (delta < 0). - * This is looking for a transition between character classes although there is also some - * additional movement to transit white space. - * Used by cursor movement by word commands. - */ -int Document::NextWordEnd(int pos, int delta) { - if (delta < 0) { - if (pos > 0) { - CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos-1)); - if (ccStart != CharClassify::ccSpace) { - while (pos > 0 && WordCharClass(cb.CharAt(pos - 1)) == ccStart) { - pos--; - } - } - while (pos > 0 && WordCharClass(cb.CharAt(pos - 1)) == CharClassify::ccSpace) { - pos--; - } - } - } else { - while (pos < Length() && WordCharClass(cb.CharAt(pos)) == CharClassify::ccSpace) { - pos++; - } - if (pos < Length()) { - CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos)); - while (pos < Length() && WordCharClass(cb.CharAt(pos)) == ccStart) { - pos++; - } - } - } - return pos; -} - -/** - * Check that the character at the given position is a word or punctuation character and that - * the previous character is of a different character class. - */ -bool Document::IsWordStartAt(int pos) { - if (pos > 0) { - CharClassify::cc ccPos = WordCharClass(CharAt(pos)); - return (ccPos == CharClassify::ccWord || ccPos == CharClassify::ccPunctuation) && - (ccPos != WordCharClass(CharAt(pos - 1))); - } - return true; -} - -/** - * Check that the character at the given position is a word or punctuation character and that - * the next character is of a different character class. - */ -bool Document::IsWordEndAt(int pos) { - if (pos < Length()) { - CharClassify::cc ccPrev = WordCharClass(CharAt(pos-1)); - return (ccPrev == CharClassify::ccWord || ccPrev == CharClassify::ccPunctuation) && - (ccPrev != WordCharClass(CharAt(pos))); - } - return true; -} - -/** - * Check that the given range is has transitions between character classes at both - * ends and where the characters on the inside are word or punctuation characters. - */ -bool Document::IsWordAt(int start, int end) { - return IsWordStartAt(start) && IsWordEndAt(end); -} - -static inline char MakeLowerCase(char ch) { - if (ch < 'A' || ch > 'Z') - return ch; - else - return static_cast<char>(ch - 'A' + 'a'); -} - -static bool GoodTrailByte(int v) { - return (v >= 0x80) && (v < 0xc0); -} - -size_t Document::ExtractChar(int pos, char *bytes) { - unsigned char ch = static_cast<unsigned char>(cb.CharAt(pos)); - size_t widthChar = UTF8CharLength(ch); - bytes[0] = ch; - for (size_t i=1; i<widthChar; i++) { - bytes[i] = cb.CharAt(pos+i); - if (!GoodTrailByte(static_cast<unsigned char>(bytes[i]))) { // Bad byte - widthChar = 1; - } - } - return widthChar; -} - -CaseFolderTable::CaseFolderTable() { - for (size_t iChar=0; iChar<sizeof(mapping); iChar++) { - mapping[iChar] = static_cast<char>(iChar); - } -} - -CaseFolderTable::~CaseFolderTable() { -} - -size_t CaseFolderTable::Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) { - if (lenMixed > sizeFolded) { - return 0; - } else { - for (size_t i=0; i<lenMixed; i++) { - folded[i] = mapping[static_cast<unsigned char>(mixed[i])]; - } - return lenMixed; - } -} - -void CaseFolderTable::SetTranslation(char ch, char chTranslation) { - mapping[static_cast<unsigned char>(ch)] = chTranslation; -} - -void CaseFolderTable::StandardASCII() { - for (size_t iChar=0; iChar<sizeof(mapping); iChar++) { - if (iChar >= 'A' && iChar <= 'Z') { - mapping[iChar] = static_cast<char>(iChar - 'A' + 'a'); - } else { - mapping[iChar] = static_cast<char>(iChar); - } - } -} - -bool Document::MatchesWordOptions(bool word, bool wordStart, int pos, int length) { - return (!word && !wordStart) || - (word && IsWordAt(pos, pos + length)) || - (wordStart && IsWordStartAt(pos)); -} - -/** - * Find text in document, supporting both forward and backward - * searches (just pass minPos > maxPos to do a backward search) - * Has not been tested with backwards DBCS searches yet. - */ -long Document::FindText(int minPos, int maxPos, const char *search, - bool caseSensitive, bool word, bool wordStart, bool regExp, int flags, - int *length, CaseFolder *pcf) { - if (regExp) { - if (!regex) - regex = CreateRegexSearch(&charClass); - return regex->FindText(this, minPos, maxPos, search, caseSensitive, word, wordStart, flags, length); - } else { - - const bool forward = minPos <= maxPos; - const int increment = forward ? 1 : -1; - - // Range endpoints should not be inside DBCS characters, but just in case, move them. - const int startPos = MovePositionOutsideChar(minPos, increment, false); - const int endPos = MovePositionOutsideChar(maxPos, increment, false); - - // Compute actual search ranges needed - const int lengthFind = (*length == -1) ? static_cast<int>(strlen(search)) : *length; - const int endSearch = (startPos <= endPos) ? endPos - lengthFind + 1 : endPos; - - //Platform::DebugPrintf("Find %d %d %s %d\n", startPos, endPos, ft->lpstrText, lengthFind); - const int limitPos = Platform::Maximum(startPos, endPos); - int pos = forward ? startPos : (startPos - 1); - if (caseSensitive) { - while (forward ? (pos < endSearch) : (pos >= endSearch)) { - bool found = (pos + lengthFind) <= limitPos; - for (int indexSearch = 0; (indexSearch < lengthFind) && found; indexSearch++) { - found = CharAt(pos + indexSearch) == search[indexSearch]; - } - if (found && MatchesWordOptions(word, wordStart, pos, lengthFind)) { - return pos; - } - pos += increment; - if (dbcsCodePage && (pos >= 0)) { - // Have to use >= 0 as otherwise next statement would change - // -1 to 0 and make loop infinite. - // Ensure trying to match from start of character - pos = MovePositionOutsideChar(pos, increment, false); - } - } - } else if (SC_CP_UTF8 == dbcsCodePage) { - const size_t maxBytesCharacter = 4; - const size_t maxFoldingExpansion = 4; - std::vector<char> searchThing(lengthFind * maxBytesCharacter * maxFoldingExpansion + 1); - const int lenSearch = pcf->Fold(&searchThing[0], searchThing.size(), search, lengthFind); - while (forward ? (pos < endSearch) : (pos >= endSearch)) { - int widthFirstCharacter = 0; - int indexDocument = 0; - int indexSearch = 0; - bool characterMatches = true; - while (characterMatches && - ((pos + indexDocument) < limitPos) && - (indexSearch < lenSearch)) { - char bytes[maxBytesCharacter + 1]; - bytes[maxBytesCharacter] = 0; - const int widthChar = ExtractChar(pos + indexDocument, bytes); - if (!widthFirstCharacter) - widthFirstCharacter = widthChar; @@ Diff output truncated at 100000 characters. @@ This was sent by the
SourceForge.net
collaborative development platform, the world's largest Open Source development site.
1
0
0
0
SF.net SVN: geany:[5436] trunk
by ntrel@users.sourceforge.net
24 Nov '10
24 Nov '10
Revision: 5436
http://geany.svn.sourceforge.net/geany/?rev=5436&view=rev
Author: ntrel Date: 2010-11-24 13:28:52 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Add note to indentation prefs page about using Project->Apply Default Indentation for currently open documents. Modified Paths: -------------- trunk/ChangeLog trunk/geany.glade trunk/src/interface.c Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2010-11-24 13:22:49 UTC (rev 5435) +++ trunk/ChangeLog 2010-11-24 13:28:52 UTC (rev 5436) @@ -2,6 +2,9 @@ * data/filetype_extensions.conf: Add *.latex pattern. + * src/interface.c, geany.glade: + Add note to indentation prefs page about using Project->Apply + Default Indentation for currently open documents. 2010-11-23 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> Modified: trunk/geany.glade =================================================================== --- trunk/geany.glade 2010-11-24 13:22:49 UTC (rev 5435) +++ trunk/geany.glade 2010-11-24 13:28:52 UTC (rev 5436) @@ -5990,6 +5990,31 @@ </child> <child> + <widget class="GtkLabel" id="label247"> + <property name="visible">True</property> + <property name="label" translatable="yes">Note: To apply these settings to all currently open documents, use <i>Project->Apply Default Indentation</i>.</property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">True</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> <widget class="GtkFrame" id="frame27"> <property name="visible">True</property> <property name="label_xalign">0</property> Modified: trunk/src/interface.c =================================================================== --- trunk/src/interface.c 2010-11-24 13:22:49 UTC (rev 5435) +++ trunk/src/interface.c 2010-11-24 13:28:52 UTC (rev 5436) @@ -2652,6 +2652,7 @@ GtkWidget *label211; GtkWidget *vbox40; GtkWidget *label_project_indent_warning; + GtkWidget *label247; GtkWidget *frame27; GtkWidget *alignment30; GtkWidget *vbox25; @@ -3773,6 +3774,13 @@ gtk_widget_show (label_project_indent_warning); gtk_box_pack_start (GTK_BOX (vbox40), label_project_indent_warning, FALSE, FALSE, 0); + label247 = gtk_label_new (_("Note: To apply these settings to all currently open documents, use <i>Project->Apply Default Indentation</i>.")); + gtk_widget_show (label247); + gtk_box_pack_start (GTK_BOX (vbox40), label247, FALSE, FALSE, 0); + gtk_label_set_use_markup (GTK_LABEL (label247), TRUE); + gtk_label_set_line_wrap (GTK_LABEL (label247), TRUE); + gtk_misc_set_alignment (GTK_MISC (label247), 0, 0.5); + frame27 = gtk_frame_new (NULL); gtk_widget_show (frame27); gtk_box_pack_start (GTK_BOX (vbox40), frame27, FALSE, TRUE, 0); @@ -5134,6 +5142,7 @@ GLADE_HOOKUP_OBJECT (prefs_dialog, label211, "label211"); GLADE_HOOKUP_OBJECT (prefs_dialog, vbox40, "vbox40"); GLADE_HOOKUP_OBJECT (prefs_dialog, label_project_indent_warning, "label_project_indent_warning"); + GLADE_HOOKUP_OBJECT (prefs_dialog, label247, "label247"); GLADE_HOOKUP_OBJECT (prefs_dialog, frame27, "frame27"); GLADE_HOOKUP_OBJECT (prefs_dialog, alignment30, "alignment30"); GLADE_HOOKUP_OBJECT (prefs_dialog, vbox25, "vbox25"); This was sent by the
SourceForge.net
collaborative development platform, the world's largest Open Source development site.
1
0
0
0
SF.net SVN: geany:[5435] trunk
by ntrel@users.sourceforge.net
24 Nov '10
24 Nov '10
Revision: 5435
http://geany.svn.sourceforge.net/geany/?rev=5435&view=rev
Author: ntrel Date: 2010-11-24 13:22:49 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Add *.latex pattern. Modified Paths: -------------- trunk/ChangeLog trunk/data/filetype_extensions.conf Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2010-11-23 17:56:23 UTC (rev 5434) +++ trunk/ChangeLog 2010-11-24 13:22:49 UTC (rev 5435) @@ -1,3 +1,9 @@ +2010-11-24 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> + + * data/filetype_extensions.conf: + Add *.latex pattern. + + 2010-11-23 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> * src/interface.c, src/keybindings.c, src/callbacks.c, Modified: trunk/data/filetype_extensions.conf =================================================================== --- trunk/data/filetype_extensions.conf 2010-11-23 17:56:23 UTC (rev 5434) +++ trunk/data/filetype_extensions.conf 2010-11-24 13:22:49 UTC (rev 5435) @@ -29,7 +29,7 @@ HTML=*.htm;*.html;*.shtml;*.hta;*.htd;*.htt;*.cfm; Java=*.java;*.jsp; Javascript=*.js; -LaTeX=*.tex;*.sty;*.idx;*.ltx; +LaTeX=*.tex;*.sty;*.idx;*.ltx;*.latex; Lisp=*.lisp; Lua=*.lua; Make=*.mak;*.mk;GNUmakefile;makefile;Makefile;makefile.*;Makefile.*; This was sent by the
SourceForge.net
collaborative development platform, the world's largest Open Source development site.
1
0
0
0
← Newer
1
2
3
4
5
...
11
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
Results per page:
10
25
50
100
200