Styles.c
上传用户:tj_dwf
上传日期:2020-11-17
资源大小:215k
文件大小:151k
源码类别:

RichEdit

开发平台:

Visual C++

  1. /******************************************************************************
  2. *
  3. *
  4. * Notepad2
  5. *
  6. * Styles.c
  7. *   Scintilla Style Management
  8. *
  9. * See Readme.txt for more information about this source code.
  10. * Please send me your comments to this work.
  11. *
  12. * See License.txt for details about distribution and modification.
  13. *
  14. *                                              (c) Florian Balmer 1996-2010
  15. *                                                  florian.balmer@gmail.com
  16. *                                               http://www.flos-freeware.ch
  17. *
  18. *
  19. ******************************************************************************/
  20. #define _WIN32_WINNT 0x501
  21. #include <windows.h>
  22. #include <commctrl.h>
  23. #include <commdlg.h>
  24. #include <shlobj.h>
  25. #include <shlwapi.h>
  26. #include <stdio.h>
  27. #include "dialogs.h"
  28. #include "helpers.h"
  29. #include "notepad2.h"
  30. #include "scintilla.h"
  31. #include "scilexer.h"
  32. #include "edit.h"
  33. #include "styles.h"
  34. #include "resource.h"
  35. #define MULTI_STYLE(a,b,c,d) ((a)|(b<<8)|(c<<16)|(d<<24))
  36. KEYWORDLIST KeyWords_NULL = {
  37. "", "", "", "", "", "", "", "", "" };
  38. EDITLEXER lexDefault = { SCLEX_NULL, 63000, L"Default Text", L"txt; text; wtx; log; asc; doc; diz; nfo", L"", &KeyWords_NULL, {
  39.                 /*  0 */ { STYLE_DEFAULT, 63100, L"Default Style", L"font:Lucida Console; size:10", L"" },
  40.                 /*  1 */ { STYLE_LINENUMBER, 63101, L"Margins and Line Numbers", L"size:-2; fore:#FF0000", L"" },
  41.                 /*  2 */ { STYLE_BRACELIGHT, 63102, L"Matching Braces", L"size:+1; bold; fore:#FF0000", L"" },
  42.                 /*  3 */ { STYLE_BRACEBAD, 63103, L"Matching Braces Error", L"size:+1; bold; fore:#000080", L"" },
  43.                 /*  4 */ { STYLE_CONTROLCHAR, 63104, L"Control Characters (Font)", L"size:-1", L"" },
  44.                 /*  5 */ { STYLE_INDENTGUIDE, 63105, L"Indentation Guide (Color)", L"fore:#FFC000", L"" },
  45.                 /*  6 */ { SCI_SETSELFORE+SCI_SETSELBACK, 63106, L"Selected Text (Colors)", L"back:#0A246A; eolfilled; alpha:95", L"" },
  46.                 /*  7 */ { SCI_SETWHITESPACEFORE+SCI_SETWHITESPACEBACK+SCI_SETWHITESPACESIZE, 63107, L"Whitespace (Colors, Size 0-5)", L"fore:#FF4000", L"" },
  47.                 /*  8 */ { SCI_SETCARETLINEBACK, 63108, L"Current Line Background (Color)", L"back:#FFFF00; alpha:50", L"" },
  48.                 /*  9 */ { SCI_SETCARETFORE, 63109, L"Caret Foreground (Color)", L"", L"" },
  49.                 /* 10 */ { SCI_SETCARETWIDTH, 63110, L"Caret Width (Size 1-3)", L"", L"" },
  50.                 /* 11 */ { SCI_SETEDGECOLOUR, 63111, L"Long Line Marker (Colors)", L"fore:#FFC000", L"" },
  51.                 /* 12 */ { SCI_SETEXTRAASCENT+SCI_SETEXTRADESCENT, 63112, L"Extra Line Spacing (Size)", L"size:2", L"" },
  52.                 /* 13 */ { STYLE_DEFAULT, 63113, L"2nd Default Style", L"font:Courier New; size:10", L"" },
  53.                 /* 14 */ { STYLE_LINENUMBER, 63114, L"2nd Margins and Line Numbers", L"font:Tahoma; size:-2; fore:#FF0000", L"" },
  54.                 /* 15 */ { STYLE_BRACELIGHT, 63115, L"2nd Matching Braces", L"bold; fore:#FF0000", L"" },
  55.                 /* 16 */ { STYLE_BRACEBAD, 63116, L"2nd Matching Braces Error", L"bold; fore:#000080", L"" },
  56.                 /* 17 */ { STYLE_CONTROLCHAR, 63117, L"2nd Control Characters (Font)", L"size:-1", L"" },
  57.                 /* 18 */ { STYLE_INDENTGUIDE, 63118, L"2nd Indentation Guide (Color)", L"fore:#FFC000", L"" },
  58.                 /* 19 */ { SCI_SETSELFORE+SCI_SETSELBACK, 63119, L"2nd Selected Text (Colors)", L"eolfilled", L"" },
  59.                 /* 20 */ { SCI_SETWHITESPACEFORE+SCI_SETWHITESPACEBACK+SCI_SETWHITESPACESIZE, 63120, L"2nd Whitespace (Colors, Size 0-5)", L"fore:#FF4000", L"" },
  60.                 /* 21 */ { SCI_SETCARETLINEBACK, 63121, L"2nd Current Line Background (Color)", L"", L"" },
  61.                 /* 22 */ { SCI_SETCARETFORE, 63122, L"2nd Caret Foreground (Color)", L"", L"" },
  62.                 /* 23 */ { SCI_SETCARETWIDTH, 63123, L"2nd Caret Width (Size 1-3)", L"", L"" },
  63.                 /* 24 */ { SCI_SETEDGECOLOUR, 63124, L"2nd Long Line Marker (Colors)", L"fore:#FFC000", L"" },
  64.                 /* 25 */ { SCI_SETEXTRAASCENT+SCI_SETEXTRADESCENT, 63125, L"2nd Extra Line Spacing (Size)", L"", L"" },
  65.                          { -1, 00000, L"", L"", L"" } } };
  66. KEYWORDLIST KeyWords_HTML = {
  67. "a abbr accept accept-charset accesskey acronym action address align alink alt and applet archive "
  68. "area article aside async audio autocomplete autofocus axis b background base basefont bb bdo "
  69. "bgcolor big blockquote body border bordercolor br button canvas caption cellpadding cellspacing "
  70. "center char charoff charset checkbox checked cite class classid clear code codebase codetype col "
  71. "colgroup color cols colspan command compact content contenteditable contextmenu coords data "
  72. "datafld dataformatas datagrid datalist datapagesize datasrc datetime dd declare defer del "
  73. "details dfn dialog dir disabled div dl draggable dt em embed enctype event eventsource face "
  74. "fieldset figure file font footer for form formaction formenctype formmethod formnovalidate "
  75. "formtarget frame frameborder frameset h1 h2 h3 h4 h5 h6 head header headers height hidden hr "
  76. "href hreflang hspace html http-equiv i id iframe image img input ins isindex ismap kbd keygen "
  77. "label lang language leftmargin legend li link list longdesc manifest map marginheight "
  78. "marginwidth mark max maxlength media menu meta meter method min multiple name nav noframes "
  79. "nohref noresize noscript noshade novalidate nowrap object ol onblur onchange onclick ondblclick "
  80. "onfocus onkeydown onkeypress onkeyup onload onmessage onmousedown onmousemove onmouseout "
  81. "onmouseover onmouseup onreset onselect onsubmit onunload optgroup option output p param password "
  82. "pattern ping placeholder pre profile progress prompt public q radio readonly rel required reset "
  83. "rev reversed rows rowspan rp rt ruby rules s samp sandbox scheme scope scoped script scrolling "
  84. "seamless section select selected shape size sizes small source span spellcheck src standby start "
  85. "step strike strong style sub submit summary sup tabindex table target tbody td text textarea "
  86. "tfoot th thead time title topmargin tr tt type u ul usemap valign value valuetype var version "
  87. "video vlink vspace width xml xmlns !doctype",
  88. "abstract boolean break byte case catch char class const continue debugger default delete do "
  89. "double else enum export extends false final finally float for function goto if implements "
  90. "import in instanceof int interface long native new null package private protected public "
  91. "return short static super switch synchronized this throw throws transient true try typeof var "
  92. "void volatile while with",
  93. "and begin case call continue do each else elseif end erase error event exit false for function get "
  94. "gosub goto if implement in load loop lset me mid new next not nothing on or property raiseevent "
  95. "rem resume return rset select set stop sub then to true unload until wend while with withevents "
  96. "attribute alias as boolean byref byte byval const compare currency date declare dim double enum "
  97. "explicit friend global integer let lib long module object option optional preserve private property "
  98. "public redim single static string type variant",
  99. "and assert break class continue def del elif else except exec finally for from global if import in is "
  100. "lambda None not or pass print raise return try while yield",
  101. "__callstatic __class__ __dir__ __file__ __function__ __get __isset __line__ __method__ "
  102. "__namespace__ __set __sleep __unset __wakeup abstract and argc argv array as break case catch "
  103. "cfunction class clone const continue declare default define die do e_all e_error e_fatal "
  104. "e_notice e_parse e_strict e_warning echo else elseif empty enddeclare endfor endforeach endif "
  105. "endswitch endwhile eval exception exit extends false final for foreach function global goto "
  106. "http_cookie_vars http_env_vars http_get_vars http_post_files http_post_vars http_server_vars if "
  107. "implements include include_once instanceof interface isset list namespace new not null "
  108. "old_function or parent php_self print private protected public require require_once return "
  109. "static stdclass switch this throw true try unset use var virtual while xor",
  110. "", "", "", "" };
  111. EDITLEXER lexHTML = { SCLEX_HTML, 63001, L"Web Source Code", L"html; htm; asp; aspx; shtml; htd; xhtml; php; php3; phtml; htt; cfm; tpl; dtd; hta; htc", L"", &KeyWords_HTML, {
  112.                       { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  113.                       { MULTI_STYLE(SCE_H_TAG,SCE_H_TAGEND,0,0), 63136, L"HTML Tag", L"fore:#648000", L"" },
  114.                       { SCE_H_TAGUNKNOWN, 63137, L"HTML Unknown Tag", L"fore:#C80000; back:#FFFF80", L"" },
  115.                       { SCE_H_ATTRIBUTE, 63138, L"HTML Attribute", L"fore:#FF4000", L"" },
  116.                       { SCE_H_ATTRIBUTEUNKNOWN, 63139, L"HTML Unknown Attribute", L"fore:#C80000; back:#FFFF80", L"" },
  117.                       { SCE_H_VALUE, 63140, L"HTML Value", L"fore:#3A6EA5", L"" },
  118.                       { MULTI_STYLE(SCE_H_DOUBLESTRING,SCE_H_SINGLESTRING,0,0), 63141, L"HTML String", L"fore:#3A6EA5", L"" },
  119.                       { SCE_H_OTHER, 63142, L"HTML Other Inside Tag", L"fore:#3A6EA5", L"" },
  120.                       { MULTI_STYLE(SCE_H_COMMENT,SCE_H_XCCOMMENT,0,0), 63143, L"HTML Comment", L"fore:#646464", L"" },
  121.                       { SCE_H_ENTITY, 63144, L"HTML Entity", L"fore:#B000B0", L"" },
  122.                       { SCE_H_DEFAULT, 63256, L"HTML Element Text", L"", L"" },
  123.                       { MULTI_STYLE(SCE_H_XMLSTART,SCE_H_XMLEND,0,0), 63145, L"XML Identifier", L"bold; fore:#881280", L"" },
  124.                       { SCE_H_SGML_DEFAULT, 63237, L"SGML", L"fore:#881280", L"" },
  125.                       { SCE_H_CDATA, 63147, L"CDATA", L"fore:#646464", L"" },
  126.                       { MULTI_STYLE(SCE_H_ASP,SCE_H_ASPAT,0,0), 63146, L"ASP Start Tag", L"bold; fore:#000080", L"" },
  127.                       //{ SCE_H_SCRIPT, L"Script", L"", L"" },
  128.                       { SCE_H_QUESTION, 63148, L"PHP Start Tag", L"bold; fore:#000080", L"" },
  129.                       { SCE_HPHP_DEFAULT, 63149, L"PHP Default", L"", L"" },
  130.                       { MULTI_STYLE(SCE_HPHP_COMMENT,SCE_HPHP_COMMENTLINE,0,0), 63157, L"PHP Comment", L"fore:#FF8000", L"" },
  131.                       { SCE_HPHP_WORD, 63152, L"PHP Keyword", L"bold; fore:#A46000", L"" },
  132.                       { SCE_HPHP_HSTRING, 63150, L"PHP String", L"fore:#008000", L"" },
  133.                       { SCE_HPHP_SIMPLESTRING, 63151, L"PHP Simple String", L"fore:#008000", L"" },
  134.                       { SCE_HPHP_NUMBER, 63153, L"PHP Number", L"fore:#FF0000", L"" },
  135.                       { SCE_HPHP_OPERATOR, 63158, L"PHP Operator", L"fore:#B000B0", L"" },
  136.                       { SCE_HPHP_VARIABLE, 63154, L"PHP Variable", L"italic; fore:#000080", L"" },
  137.                       { SCE_HPHP_HSTRING_VARIABLE, 63155, L"PHP String Variable", L"italic; fore:#000080", L"" },
  138.                       { SCE_HPHP_COMPLEX_VARIABLE, 63156, L"PHP Complex Variable", L"italic; fore:#000080", L"" },
  139.                       { MULTI_STYLE(SCE_HJ_DEFAULT,SCE_HJ_START,0,0), 63159, L"JS Default", L"", L"" },
  140.                       { MULTI_STYLE(SCE_HJ_COMMENT,SCE_HJ_COMMENTLINE,SCE_HJ_COMMENTDOC,0), 63160, L"JS Comment", L"fore:#646464", L"" },
  141.                       { SCE_HJ_KEYWORD, 63163, L"JS Keyword", L"bold; fore:#A46000", L"" },
  142.                       { SCE_HJ_WORD, 63162, L"JS Identifier", L"", L"" },
  143.                       { MULTI_STYLE(SCE_HJ_DOUBLESTRING,SCE_HJ_SINGLESTRING,SCE_HJ_STRINGEOL,0), 63164, L"JS String", L"fore:#008000", L"" },
  144.                       { SCE_HJ_REGEX, 63166, L"JS Regex", L"fore:#006633; back:#FFF1A8", L"" },
  145.                       { SCE_HJ_NUMBER, 63161, L"JS Number", L"fore:#FF0000", L"" },
  146.                       { SCE_HJ_SYMBOLS, 63165, L"JS Symbols", L"fore:#B000B0", L"" },
  147.                       { MULTI_STYLE(SCE_HJA_DEFAULT,SCE_HJA_START,0,0), 63167, L"ASP JS Default", L"", L"" },
  148.                       { MULTI_STYLE(SCE_HJA_COMMENT,SCE_HJA_COMMENTLINE,SCE_HJA_COMMENTDOC,0), 63168, L"ASP JS Comment", L"fore:#646464", L"" },
  149.                       { SCE_HJA_KEYWORD, 63171, L"ASP JS Keyword", L"bold; fore:#A46000", L"" },
  150.                       { SCE_HJA_WORD, 63170, L"ASP JS Identifier", L"", L"" },
  151.                       { MULTI_STYLE(SCE_HJA_DOUBLESTRING,SCE_HJA_SINGLESTRING,SCE_HJA_STRINGEOL,0), 63172, L"ASP JS String", L"fore:#008000", L"" },
  152.                       { SCE_HJA_REGEX, 63174, L"ASP JS Regex", L"fore:#006633; back:#FFF1A8", L"" },
  153.                       { SCE_HJA_NUMBER, 63169, L"ASP JS Number", L"fore:#FF0000", L"" },
  154.                       { SCE_HJA_SYMBOLS, 63173, L"ASP JS Symbols", L"fore:#B000B0", L"" },
  155.                       { MULTI_STYLE(SCE_HB_DEFAULT,SCE_HB_START,0,0), 63175, L"VBS Default", L"", L"" },
  156.                       { SCE_HB_COMMENTLINE, 63176, L"VBS Comment", L"fore:#646464", L"" },
  157.                       { SCE_HB_WORD, 63178, L"VBS Keyword", L"bold; fore:#B000B0", L"" },
  158.                       { SCE_HB_IDENTIFIER, 63180, L"VBS Identifier", L"", L"" },
  159.                       { MULTI_STYLE(SCE_HB_STRING,SCE_HB_STRINGEOL,0,0), 63179, L"VBS String", L"fore:#008000", L"" },
  160.                       { SCE_HB_NUMBER, 63177, L"VBS Number", L"fore:#FF0000", L"" },
  161.                       { MULTI_STYLE(SCE_HBA_DEFAULT,SCE_HBA_START,0,0), 63181, L"ASP VBS Default", L"", L"" },
  162.                       { SCE_HBA_COMMENTLINE, 63182, L"ASP VBS Comment", L"fore:#646464", L"" },
  163.                       { SCE_HBA_WORD, 63184, L"ASP VBS Keyword", L"bold; fore:#B000B0", L"" },
  164.                       { SCE_HBA_IDENTIFIER, 63186, L"ASP VBS Identifier", L"", L"" },
  165.                       { MULTI_STYLE(SCE_HBA_STRING,SCE_HBA_STRINGEOL,0,0), 63185, L"ASP VBS String", L"fore:#008000", L"" },
  166.                       { SCE_HBA_NUMBER, 63183, L"ASP VBS Number", L"fore:#FF0000", L"" },
  167.                       //{ SCE_HP_START, L"Phyton Start", L"", L"" },
  168.                       //{ SCE_HP_DEFAULT, L"Phyton Default", L"", L"" },
  169.                       //{ SCE_HP_COMMENTLINE, L"Phyton Comment Line", L"", L"" },
  170.                       //{ SCE_HP_NUMBER, L"Phyton Number", L"", L"" },
  171.                       //{ SCE_HP_STRING, L"Phyton String", L"", L"" },
  172.                       //{ SCE_HP_CHARACTER, L"Phyton Character", L"", L"" },
  173.                       //{ SCE_HP_WORD, L"Phyton Keyword", L"", L"" },
  174.                       //{ SCE_HP_TRIPLE, L"Phyton Triple", L"", L"" },
  175.                       //{ SCE_HP_TRIPLEDOUBLE, L"Phyton Triple Double", L"", L"" },
  176.                       //{ SCE_HP_CLASSNAME, L"Phyton Class Name", L"", L"" },
  177.                       //{ SCE_HP_DEFNAME, L"Phyton Def Name", L"", L"" },
  178.                       //{ SCE_HP_OPERATOR, L"Phyton Operator", L"", L"" },
  179.                       //{ SCE_HP_IDENTIFIER, L"Phyton Identifier", L"", L"" },
  180.                       //{ SCE_HPA_START, L"ASP Phyton Start", L"", L"" },
  181.                       //{ SCE_HPA_DEFAULT, L"ASP Phyton Default", L"", L"" },
  182.                       //{ SCE_HPA_COMMENTLINE, L"ASP Phyton Comment Line", L"", L"" },
  183.                       //{ SCE_HPA_NUMBER, L"ASP Phyton Number", L"", L"" },
  184.                       //{ SCE_HPA_STRING, L"ASP Phyton String", L"", L"" },
  185.                       //{ SCE_HPA_CHARACTER, L"ASP Phyton Character", L"", L"" },
  186.                       //{ SCE_HPA_WORD, L"ASP Phyton Keyword", L"", L"" },
  187.                       //{ SCE_HPA_TRIPLE, L"ASP Phyton Triple", L"", L"" },
  188.                       //{ SCE_HPA_TRIPLEDOUBLE, L"ASP Phyton Triple Double", L"", L"" },
  189.                       //{ SCE_HPA_CLASSNAME, L"ASP Phyton Class Name", L"", L"" },
  190.                       //{ SCE_HPA_DEFNAME, L"ASP Phyton Def Name", L"", L"" },
  191.                       //{ SCE_HPA_OPERATOR, L"ASP Phyton Operator", L"", L"" },
  192.                       //{ SCE_HPA_IDENTIFIER, L"ASP Phyton Identifier", L"", L"" },
  193.                       { -1, 00000, L"", L"", L"" } } };
  194. KEYWORDLIST KeyWords_XML = {
  195. "", "", "", "", "", "", "", "", "" };
  196. EDITLEXER lexXML = { SCLEX_XML, 63002, L"XML Document", L"xml; xsl; rss; svg; xul; xsd; xslt; axl; rdf; xaml; vcproj", L"", &KeyWords_XML, {
  197.                      { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  198.                      { MULTI_STYLE(SCE_H_TAG,SCE_H_TAGUNKNOWN,SCE_H_TAGEND,0), 63187, L"XML Tag", L"fore:#881280", L"" },
  199.                      { MULTI_STYLE(SCE_H_ATTRIBUTE,SCE_H_ATTRIBUTEUNKNOWN,0,0), 63188, L"XML Attribute", L"fore:#994500", L"" },
  200.                      { SCE_H_VALUE, 63189, L"XML Value", L"fore:#1A1AA6", L"" },
  201.                      { MULTI_STYLE(SCE_H_DOUBLESTRING,SCE_H_SINGLESTRING,0,0), 63190, L"XML String", L"fore:#1A1AA6", L"" },
  202.                      { SCE_H_OTHER, 63191, L"XML Other Inside Tag", L"fore:#1A1AA6", L"" },
  203.                      { MULTI_STYLE(SCE_H_COMMENT,SCE_H_XCCOMMENT,0,0), 63192, L"XML Comment", L"fore:#646464", L"" },
  204.                      { SCE_H_ENTITY, 63193, L"XML Entity", L"fore:#B000B0", L"" },
  205.                       { SCE_H_DEFAULT, 63257, L"XML Element Text", L"", L"" },
  206.                      { MULTI_STYLE(SCE_H_XMLSTART,SCE_H_XMLEND,0,0), 63145, L"XML Identifier", L"bold; fore:#881280", L"" },
  207.                      { SCE_H_SGML_DEFAULT, 63237, L"SGML", L"fore:#881280", L"" },
  208.                      { SCE_H_CDATA, 63147, L"CDATA", L"fore:#646464", L"" },
  209.                      { -1, 00000, L"", L"", L"" } } };
  210. KEYWORDLIST KeyWords_CSS = {
  211. "background background-attachment background-color background-image "
  212. "background-position background-repeat border border-bottom "
  213. "border-bottom-width border-color border-left border-left-width border-right "
  214. "border-right-width border-style border-top border-top-width border-width "
  215. "clear color display float font font-family font-size font-style font-variant "
  216. "font-weight height letter-spacing line-height list-style list-style-image "
  217. "list-style-position list-style-type margin margin-bottom margin-left "
  218. "margin-right margin-top padding padding-bottom padding-left padding-right "
  219. "padding-top text-align text-decoration text-indent text-transform "
  220. "vertical-align white-space width word-spacing",
  221. "first-letter first-line link active visited first-child "
  222. "focus hover lang before after left right first",
  223. "ascent azimuth baseline bbox border-bottom-color border-bottom-style "
  224. "border-collapse border-color border-left-color border-left-style "
  225. "border-right-color border-right-style border-spacing border-style "
  226. "border-top-color border-top-style bottom cap-height caption-side centerline "
  227. "clip content counter-increment counter-reset cue cue-after cue-before cursor "
  228. "definition-src descent direction elevation empty-cells font-size-adjust "
  229. "font-stretch left marker-offset marks mathline max-height max-width "
  230. "min-height min-width orphans outline outline-color outline-style "
  231. "outline-width overflow page page-break-after page-break-before "
  232. "page-break-inside panose-1 pause pause-after pause-before pitch pitch-range "
  233. "play-during position quotes richness right size slope speak speak-header "
  234. "speak-numeral speak-punctuation speech-rate src stemh stemv stress "
  235. "table-layout text-shadow top topline unicode-bidi unicode-range units-per-em "
  236. "visibility voice-family volume widows widths x-height z-index",
  237. "", "", "", "", "", "" };
  238. EDITLEXER lexCSS = { SCLEX_CSS, 63003, L"CSS Style Sheets", L"css", L"", &KeyWords_CSS, {
  239.                      { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  240.                      //{ SCE_CSS_DEFAULT, L"Default", L"", L"" },
  241.                      { SCE_CSS_COMMENT, 63127, L"Comment", L"fore:#646464", L"" },
  242.                      { SCE_CSS_TAG, 63136, L"HTML Tag", L"bold; fore:#0A246A", L"" },
  243.                      { SCE_CSS_CLASS, 63194, L"Tag-Class", L"fore:#648000", L"" },
  244.                      { SCE_CSS_ID, 63195, L"Tag-Id", L"fore:#648000", L"" },
  245.                      { SCE_CSS_ATTRIBUTE, 63196, L"Tag-Attribute", L"italic; fore:#648000", L"" },
  246.                      { MULTI_STYLE(SCE_CSS_PSEUDOCLASS,SCE_CSS_EXTENDED_PSEUDOCLASS,SCE_CSS_PSEUDOELEMENT,SCE_CSS_EXTENDED_PSEUDOELEMENT), 63197, L"Pseudo-class/element", L"fore:#B000B0", L"" },
  247.                      { SCE_CSS_UNKNOWN_PSEUDOCLASS, 63198, L"Unknown Pseudo-class", L"fore:#C80000; back:#FFFF80", L"" },
  248.                      { MULTI_STYLE(SCE_CSS_IDENTIFIER,SCE_CSS_IDENTIFIER2,SCE_CSS_IDENTIFIER3,SCE_CSS_EXTENDED_IDENTIFIER), 63199, L"CSS Property", L"fore:#FF4000", L"" },
  249.                      { SCE_CSS_UNKNOWN_IDENTIFIER, 63200, L"Unknown Property", L"fore:#C80000; back:#FFFF80", L"" },
  250.                      { MULTI_STYLE(SCE_CSS_DOUBLESTRING,SCE_CSS_SINGLESTRING,0,0), 63131, L"String", L"fore:#008000", L"" },
  251.                      { SCE_CSS_VALUE, 63201, L"Value", L"fore:#3A6EA5", L"" },
  252.                      { SCE_CSS_OPERATOR, 63132, L"Operator", L"fore:#B000B0", L"" },
  253.                      { SCE_CSS_IMPORTANT, 63202, L"Important", L"bold; fore:#C80000", L"" },
  254.                      { SCE_CSS_DIRECTIVE, 63203, L"Directive", L"bold; fore:#000000; back:#FFF1A8", L"" },
  255.                      { -1, 00000, L"", L"", L"" } } };
  256. KEYWORDLIST KeyWords_CPP = {
  257. "__abstract __alignof __asm __assume __based __box __cdecl __declspec __delegate __event "
  258. "__except __except__try __fastcall __finally __forceinline __gc __hook __identifier "
  259. "__if_exists __if_not_exists __inline __int16 __int32 __int64 __int8 __interface __leave "
  260. "__m128 __m128d __m128i __m64 __multiple_inheritance __nogc __noop __pin __property __raise "
  261. "__sealed __single_inheritance __stdcall __super __try __try_cast __unhook __uuidof __value "
  262. "__virtual_inheritance __wchar_t auto bool break case catch char class const const_cast "
  263. "continue default defined delete do double dynamic_cast else enum explicit extern false float "
  264. "for friend goto if inline int long mutable naked namespace new operator private protected "
  265. "public register reinterpret_cast return short signed size_t sizeof static static_cast struct "
  266. "switch template this throw true try typedef typeid typename union unsigned using uuid "
  267. "virtual void volatile wchar_t while",
  268. "",
  269. "", "", "", "", "", "", "" };
  270. EDITLEXER lexCPP = { SCLEX_CPP, 63004, L"C/C++ Source Code", L"c; cpp; cxx; cc; h; hpp; hxx; hh; m; mm; idl; inl; odl", L"", &KeyWords_CPP, {
  271.                      { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  272.                      //{ SCE_C_DEFAULT, L"Default", L"", L"" },
  273.                      { SCE_C_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
  274.                      { SCE_C_WORD, 63128, L"Keyword", L"bold; fore:#0A246A", L"" },
  275.                      { SCE_C_IDENTIFIER, 63129, L"Identifier", L"", L"" },
  276.                      { MULTI_STYLE(SCE_C_STRING,SCE_C_CHARACTER,SCE_C_STRINGEOL,SCE_C_VERBATIM), 63131, L"String", L"fore:#008000", L"" },
  277.                      { SCE_C_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
  278.                      { SCE_C_OPERATOR, 63132, L"Operator", L"fore:#B000B0", L"" },
  279.                      { SCE_C_PREPROCESSOR, 63133, L"Preprocessor", L"fore:#FF8000", L"" },
  280.                      //{ SCE_C_UUID, L"UUID", L"", L"" },
  281.                      //{ SCE_C_REGEX, L"Regex", L"", L"" },
  282.                      //{ SCE_C_WORD2, L"Word 2", L"", L"" },
  283.                      //{ SCE_C_GLOBALCLASS, L"Global Class", L"", L"" },
  284.                      { -1, 00000, L"", L"", L"" } } };
  285. KEYWORDLIST KeyWords_CS = {
  286. "abstract as base bool break byte case catch char checked class const "
  287. "continue decimal default delegate do double else enum event explicit "
  288. "extern false finally fixed float for foreach goto if implicit in int interface "
  289. "internal is lock long namespace new null object operator out override "
  290. "params private protected public readonly ref return sbyte sealed short "
  291. "sizeof stackalloc static string struct switch this throw true try typeof "
  292. "uint ulong unchecked unsafe ushort using virtual void while",
  293. "",
  294. "", "", "", "", "", "", "" };
  295. EDITLEXER lexCS = { SCLEX_CPP, 63005, L"C# Source Code", L"cs", L"", &KeyWords_CS, {
  296.                     { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  297.                     //{ SCE_C_DEFAULT, L"Default", L"", L"" },
  298.                     { SCE_C_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
  299.                     { SCE_C_WORD, 63128, L"Keyword", L"bold; fore:#804000", L"" },
  300.                     { SCE_C_IDENTIFIER, 63129, L"Identifier", L"", L"" },
  301.                     { MULTI_STYLE(SCE_C_STRING,SCE_C_CHARACTER,SCE_C_STRINGEOL,0), 63131, L"String", L"fore:#008000", L"" },
  302.                     { SCE_C_VERBATIM, 63134, L"Verbatim String", L"fore:#008000", L"" },
  303.                     { SCE_C_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
  304.                     { SCE_C_OPERATOR, 63132, L"Operator", L"fore:#B000B0", L"" },
  305.                     { SCE_C_PREPROCESSOR, 63133, L"Preprocessor", L"fore:#FF8000", L"" },
  306.                     //{ SCE_C_UUID, L"UUID", L"", L"" },
  307.                     //{ SCE_C_REGEX, L"Regex", L"", L"" },
  308.                     //{ SCE_C_WORD2, L"Word 2", L"", L"" },
  309.                     //{ SCE_C_GLOBALCLASS, L"Global Class", L"", L"" },
  310.                     { -1, 00000, L"", L"", L"" } } };
  311. KEYWORDLIST KeyWords_RC = {
  312. "ACCELERATORS ALT AUTO3STATE AUTOCHECKBOX AUTORADIOBUTTON "
  313. "BEGIN BITMAP BLOCK BUTTON CAPTION CHARACTERISTICS CHECKBOX "
  314. "CLASS COMBOBOX CONTROL CTEXT CURSOR DEFPUSHBUTTON DIALOG "
  315. "DIALOGEX DISCARDABLE EDITTEXT END EXSTYLE FONT GROUPBOX "
  316. "ICON LANGUAGE LISTBOX LTEXT MENU MENUEX MENUITEM "
  317. "MESSAGETABLE POPUP PUSHBUTTON RADIOBUTTON RCDATA RTEXT "
  318. "SCROLLBAR SEPARATOR SHIFT STATE3 STRINGTABLE STYLE "
  319. "TEXTINCLUDE VALUE VERSION VERSIONINFO VIRTKEY",
  320. "", "", "", "", "", "", "", "" };
  321. EDITLEXER lexRC = { SCLEX_CPP, 63006, L"Resource Script", L"rc; rc2; rct; rh; r; dlg", L"", &KeyWords_RC, {
  322.                     { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  323.                     //{ SCE_C_DEFAULT, L"Default", L"", L"" },
  324.                     { SCE_C_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
  325.                     { SCE_C_WORD, 63128, L"Keyword", L"bold; fore:#0A246A", L"" },
  326.                     { SCE_C_IDENTIFIER, 63129, L"Identifier", L"", L"" },
  327.                     { MULTI_STYLE(SCE_C_STRING,SCE_C_CHARACTER,SCE_C_STRINGEOL,SCE_C_VERBATIM), 63131, L"String", L"fore:#008000", L"" },
  328.                     { SCE_C_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
  329.                     { SCE_C_OPERATOR, 63132, L"Operator", L"fore:#0A246A", L"" },
  330.                     { SCE_C_PREPROCESSOR, 63133, L"Preprocessor", L"fore:#FF8000", L"" },
  331.                     //{ SCE_C_UUID, L"UUID", L"", L"" },
  332.                     //{ SCE_C_REGEX, L"Regex", L"", L"" },
  333.                     //{ SCE_C_WORD2, L"Word 2", L"", L"" },
  334.                     //{ SCE_C_GLOBALCLASS, L"Global Class", L"", L"" },
  335.                     { -1, 00000, L"", L"", L"" } } };
  336. KEYWORDLIST KeyWords_MAK = {
  337. "", "", "", "", "", "", "", "", "" };
  338. EDITLEXER lexMAK = { SCLEX_MAKEFILE, 63007, L"Makefiles", L"mak; make; dsp", L"", &KeyWords_MAK, {
  339.                      { STYLE_DEFAULT, 63126, L"Default", L"fore:#0A246A", L"" },
  340.                      //{ SCE_MAKE_DEFAULT, L"Default", L"", L"" },
  341.                      { SCE_MAKE_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
  342.                      { MULTI_STYLE(SCE_MAKE_IDENTIFIER,SCE_MAKE_IDEOL,0,0), 63129, L"Identifier", L"fore:#003CE6", L"" },
  343.                      { SCE_MAKE_OPERATOR, 63132, L"Operator", L"", L"" },
  344.                      { SCE_MAKE_TARGET, 63204, L"Target", L"fore:#003CE6; back:#FFC000", L"" },
  345.                      { SCE_MAKE_PREPROCESSOR, 63133, L"Preprocessor", L"fore:#FF8000", L"" },
  346.                      { -1, 00000, L"", L"", L"" } } };
  347. KEYWORDLIST KeyWords_VBS = {
  348. "alias and as attribute begin boolean byref byte byval call case class compare const continue "
  349. "currency date declare dim do double each else elseif empty end enum eqv erase error event exit "
  350. "explicit false for friend function get global gosub goto if imp implement in integer is let lib "
  351. "load long loop lset me mid mod module new next not nothing null object on option optional or "
  352. "preserve private property public raiseevent redim rem resume return rset select set single "
  353. "static stop string sub then to true type unload until variant wend while with withevents xor",
  354. "", "", "", "", "", "", "", "" };
  355. EDITLEXER lexVBS = { SCLEX_VBSCRIPT, 63008, L"VBScript", L"vbs; dsm", L"", &KeyWords_VBS, {
  356.                     { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  357.                     //{ SCE_B_DEFAULT, L"Default", L"", L"" },
  358.                     { SCE_B_COMMENT, 63127, L"Comment", L"fore:#808080", L"" },
  359.                     { SCE_B_KEYWORD, 63128, L"Keyword", L"bold; fore:#B000B0", L"" },
  360.                     { SCE_B_IDENTIFIER, 63129, L"Identifier", L"", L"" },
  361.                     { MULTI_STYLE(SCE_B_STRING,SCE_B_STRINGEOL,0,0), 63131, L"String", L"fore:#008000", L"" },
  362.                     { SCE_B_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
  363.                     { SCE_B_OPERATOR, 63132, L"Operator", L"", L"" },
  364.                     //{ SCE_B_PREPROCESSOR, 63133, L"Preprocessor", L"fore:#FF9C00", L"" },
  365.                     //{ SCE_B_CONSTANT, L"Constant", L"", L"" },
  366.                     //{ SCE_B_DATE, L"Date", L"", L"" },
  367.                     //{ SCE_B_KEYWORD2, L"Keyword 2", L"", L"" },
  368.                     //{ SCE_B_KEYWORD3, L"Keyword 3", L"", L"" },
  369.                     //{ SCE_B_KEYWORD4, L"Keyword 4", L"", L"" },
  370.                     //{ SCE_B_ASM, L"Inline Asm", L"fore:#FF8000", L"" },
  371.                     { -1, 00000, L"", L"", L"" } } };
  372. KEYWORDLIST KeyWords_VB = {
  373. "addhandler addressof alias and andalso ansi any as assembly auto boolean byref byte byval call "
  374. "case catch cbool cbyte cchar cdate cdbl cdec char cint class clng cobj compare const cshort csng "
  375. "cstr ctype date decimal declare default delegate dim directcast do double each else elseif end "
  376. "enum erase error event exit explicit externalsource false finally for friend function get "
  377. "gettype gosub goto handles if implements imports in inherits integer interface is let lib like "
  378. "long loop me mid mod module mustinherit mustoverride mybase myclass namespace new next not "
  379. "nothing notinheritable notoverridable object on option optional or orelse overloads overridable "
  380. "overrides paramarray preserve private property protected public raiseevent randomize readonly "
  381. "redim rem removehandler resume return select set shadows shared short single static step stop "
  382. "strict string structure sub synclock then throw to true try typeof unicode until variant when "
  383. "while with withevents writeonly xor",
  384. "", "", "", "", "", "", "", "" };
  385. EDITLEXER lexVB = { SCLEX_VB, 63009, L"Visual Basic", L"vb; bas; frm; cls; ctl; pag; dsr; dob", L"", &KeyWords_VB, {
  386.                     { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  387.                     //{ SCE_B_DEFAULT, L"Default", L"", L"" },
  388.                     { SCE_B_COMMENT, 63127, L"Comment", L"fore:#808080", L"" },
  389.                     { SCE_B_KEYWORD, 63128, L"Keyword", L"bold; fore:#B000B0", L"" },
  390.                     { SCE_B_IDENTIFIER, 63129, L"Identifier", L"", L"" },
  391.                     { MULTI_STYLE(SCE_B_STRING,SCE_B_STRINGEOL,0,0), 63131, L"String", L"fore:#008000", L"" },
  392.                     { SCE_B_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
  393.                     { SCE_B_OPERATOR, 63132, L"Operator", L"", L"" },
  394.                     { SCE_B_PREPROCESSOR, 63133, L"Preprocessor", L"fore:#FF9C00", L"" },
  395.                     //{ SCE_B_CONSTANT, L"Constant", L"", L"" },
  396.                     //{ SCE_B_DATE, L"Date", L"", L"" },
  397.                     //{ SCE_B_KEYWORD2, L"Keyword 2", L"", L"" },
  398.                     //{ SCE_B_KEYWORD3, L"Keyword 3", L"", L"" },
  399.                     //{ SCE_B_KEYWORD4, L"Keyword 4", L"", L"" },
  400.                     //{ SCE_B_ASM, L"Inline Asm", L"fore:#FF8000", L"" },
  401.                     { -1, 00000, L"", L"", L"" } } };
  402. KEYWORDLIST KeyWords_JS = {
  403. "abstract boolean break byte case catch char class const continue debugger default delete do "
  404. "double else enum export extends false final finally float for function goto if implements "
  405. "import in instanceof int interface long native new null package private protected public "
  406. "return short static super switch synchronized this throw throws transient true try typeof var "
  407. "void volatile while with",
  408. "", "", "", "", "", "", "", "" };
  409. EDITLEXER lexJS = { SCLEX_CPP, 63010, L"JavaScript", L"js; jse; jsm; json; as", L"", &KeyWords_JS, {
  410.                     { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  411.                     //{ SCE_C_DEFAULT, L"Default", L"", L"" },
  412.                     { SCE_C_COMMENT, 63127, L"Comment", L"fore:#646464", L"" },
  413.                     { SCE_C_WORD, 63128, L"Keyword", L"bold; fore:#A46000", L"" },
  414.                     { SCE_C_IDENTIFIER, 63129, L"Identifier", L"", L"" },
  415.                     { MULTI_STYLE(SCE_C_STRING,SCE_C_CHARACTER,SCE_C_STRINGEOL,SCE_C_VERBATIM), 63131, L"String", L"fore:#008000", L"" },
  416.                     { SCE_C_REGEX, 63135, L"Regex", L"fore:#006633; back:#FFF1A8", L"" },
  417.                     { SCE_C_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
  418.                     { SCE_C_OPERATOR, 63132, L"Operator", L"fore:#B000B0", L"" },
  419.                     //{ SCE_C_UUID, L"UUID", L"", L"" },
  420.                     //{ SCE_C_PREPROCESSOR, L"Preprocessor", L"fore:#FF8000", L"" },
  421.                     //{ SCE_C_WORD2, L"Word 2", L"", L"" },
  422.                     //{ SCE_C_GLOBALCLASS, L"Global Class", L"", L"" },
  423.                     { -1, 00000, L"", L"", L"" } } };
  424. KEYWORDLIST KeyWords_JAVA = {
  425. "abstract assert boolean break byte case catch char class const "
  426. "continue default do double else extends final finally float for future "
  427. "generic goto if implements import inner instanceof int interface long "
  428. "native new null outer package private protected public rest return "
  429. "short static super switch synchronized this throw throws transient try "
  430. "var void volatile while",
  431. "", "", "", "", "", "", "", "" };
  432. EDITLEXER lexJAVA = { SCLEX_CPP, 63011, L"Java Source Code", L"java", L"", &KeyWords_JAVA, {
  433.                       { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  434.                       //{ SCE_C_DEFAULT, L"Default", L"", L"" },
  435.                       { SCE_C_COMMENT, 63127, L"Comment", L"fore:#646464", L"" },
  436.                       { SCE_C_WORD, 63128, L"Keyword", L"bold; fore:#A46000", L"" },
  437.                       { SCE_C_IDENTIFIER, 63129, L"Identifier", L"", L"" },
  438.                       { MULTI_STYLE(SCE_C_STRING,SCE_C_CHARACTER,SCE_C_STRINGEOL,SCE_C_VERBATIM), 63131, L"String", L"fore:#008000", L"" },
  439.                       { SCE_C_REGEX, 63135, L"Regex", L"fore:#006633; back:#FFF1A8", L"" },
  440.                       { SCE_C_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
  441.                       { SCE_C_OPERATOR, 63132, L"Operator", L"fore:#B000B0", L"" },
  442.                       //{ SCE_C_UUID, L"UUID", L"", L"" },
  443.                       //{ SCE_C_PREPROCESSOR, L"Preprocessor", L"fore:#FF8000", L"" },
  444.                       //{ SCE_C_WORD2, L"Word 2", L"", L"" },
  445.                       //{ SCE_C_GLOBALCLASS, L"Global Class", L"", L"" },
  446.                       { -1, 00000, L"", L"", L"" } } };
  447. KEYWORDLIST KeyWords_PAS = {
  448. "absolute abstract alias and array as asm assembler begin break case cdecl class const constructor continue cppdecl default "
  449. "destructor dispose div do downto else end end. except exit export exports external false far far16 file finalization finally for "
  450. "forward function goto if implementation in index inherited initialization inline interface is label library local message mod "
  451. "name near new nil nostackframe not object of oldfpccall on operator or out overload override packed pascal private procedure "
  452. "program property protected public published raise read record register reintroduce repeat resourcestring safecall self set shl "
  453. "shr softfloat stdcall stored string then threadvar to true try type unit until uses var virtual while with write xor",
  454. "", "", "", "", "", "", "", "" };
  455. EDITLEXER lexPAS = { SCLEX_PASCAL, 63012, L"Pascal Source Code", L"pas; dpr; dpk; dfm; inc; pp", L"", &KeyWords_PAS, {
  456.                      { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  457.                      //{ SCE_PAS_DEFAULT, L"Default", L"", L"" },
  458.                      { MULTI_STYLE(SCE_PAS_COMMENT,SCE_PAS_COMMENT2,SCE_PAS_COMMENTLINE,0), 63127, L"Comment", L"fore:#646464", L"" },
  459.                      { SCE_PAS_WORD, 63128, L"Keyword", L"bold; fore:#800080", L"" },
  460.                      { SCE_PAS_IDENTIFIER, 63129, L"Identifier", L"", L"" },
  461.                      { MULTI_STYLE(SCE_PAS_STRING,SCE_PAS_CHARACTER,SCE_PAS_STRINGEOL,0), 63131, L"String", L"fore:#008000", L"" },
  462.                      { MULTI_STYLE(SCE_PAS_NUMBER,SCE_PAS_HEXNUMBER,0,0), 63130, L"Number", L"fore:#FF0000", L"" },
  463.                      { SCE_PAS_OPERATOR, 63132, L"Operator", L"bold", L"" },
  464.                      { SCE_PAS_ASM, 63205, L"Inline Asm", L"fore:#0000FF", L"" },
  465.                      { MULTI_STYLE(SCE_PAS_PREPROCESSOR,SCE_PAS_PREPROCESSOR2,0,0), 63133, L"Preprocessor", L"fore:#FF00FF", L"" },
  466.                      { -1, 00000, L"", L"", L"" } } };
  467. KEYWORDLIST KeyWords_ASM = {
  468. "aaa aad aam aas adc add and call cbw clc cld cli cmc cmp cmps cmpsb "
  469. "cmpsw cwd daa das dec div esc hlt idiv imul in inc int into iret ja jae jb jbe "
  470. "jc jcxz je jg jge jl jle jmp jna jnae jnb jnbe jnc jne jng jnge jnl jnle jno jnp "
  471. "jns jnz jo jp jpe jpo js jz lahf lds lea les lods lodsb lodsw loop loope loopew "
  472. "loopne loopnew loopnz loopnzw loopw loopz loopzw mov movs movsb "
  473. "movsw mul neg nop not or out pop popf push pushf rcl rcr ret retf retn rol "
  474. "ror sahf sal sar sbb scas scasb scasw shl shr stc std sti stos stosb stosw "
  475. "sub test wait xchg xlat xlatb xor bound enter ins insb insw leave outs "
  476. "outsb outsw popa pusha pushw arpl lar lsl sgdt sidt sldt smsw str verr "
  477. "verw clts lgdt lidt lldt lmsw ltr bsf bsr bt btc btr bts cdq cmpsd cwde insd "
  478. "iretd iretdf iretf jecxz lfs lgs lodsd loopd looped loopned loopnzd loopzd "
  479. "lss movsd movsx movzx outsd popad popfd pushad pushd pushfd scasd "
  480. "seta setae setb setbe setc sete setg setge setl setle setna setnae "
  481. "setnb setnbe setnc setne setng setnge setnl setnle setno setnp setns "
  482. "setnz seto setp setpe setpo sets setz shld shrd stosd bswap cmpxchg "
  483. "invd invlpg wbinvd xadd lock rep repe repne repnz repz cflush cpuid emms "
  484. "femms cmovo cmovno cmovb cmovc cmovnae cmovae cmovnb cmovnc "
  485. "cmove cmovz cmovne cmovnz cmovbe cmovna cmova cmovnbe cmovs "
  486. "cmovns cmovp cmovpe cmovnp cmovpo cmovl cmovnge cmovge cmovnl "
  487. "cmovle cmovng cmovg cmovnle cmpxchg486 cmpxchg8b loadall loadall286 "
  488. "ibts icebp int1 int3 int01 int03 iretw popaw popfw pushaw pushfw rdmsr "
  489. "rdpmc rdshr rdtsc rsdc rsldt rsm rsts salc smi smint smintold svdc svldt "
  490. "svts syscall sysenter sysexit sysret ud0 ud1 ud2 umov xbts wrmsr wrshr",
  491. "f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcom fcomp fcompp fdecstp "
  492. "fdisi fdiv fdivp fdivr fdivrp feni ffree fiadd ficom ficomp fidiv fidivr fild fimul "
  493. "fincstp finit fist fistp fisub fisubr fld fld1 fldcw fldenv fldenvw fldl2e fldl2t "
  494. "fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave "
  495. "fnsavew fnstcw fnstenv fnstenvw fnstsw fpatan fprem fptan frndint frstor "
  496. "frstorw fsave fsavew fscale fsqrt fst fstcw fstenv fstenvw fstp fstsw fsub "
  497. "fsubp fsubr fsubrp ftst fwait fxam fxch fxtract fyl2x fyl2xp1 fsetpm fcos "
  498. "fldenvd fnsaved fnstenvd fprem1 frstord fsaved fsin fsincos fstenvd fucom "
  499. "fucomp fucompp fcomi fcomip ffreep fcmovb fcmove fcmovbe fcmovu "
  500. "fcmovnb fcmovne fcmovnbe fcmovnu",
  501. "ah al ax bh bl bp bx ch cl cr0 cr2 cr3 cr4 cs cx dh di dl dr0 dr1 dr2 dr3 dr6 "
  502. "dr7 ds dx eax ebp ebx ecx edi edx es esi esp fs gs si sp ss st tr3 tr4 tr5 "
  503. "tr6 tr7 st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 "
  504. "mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7",
  505. ".186 .286 .286c .286p .287 .386 .386c .386p .387 .486 .486p .8086 .8087 "
  506. ".alpha .break .code .const .continue .cref .data .data? .dosseg .else "
  507. ".elseif .endif .endw .err .err1 .err2 .errb .errdef .errdif .errdifi .erre .erridn "
  508. ".erridni .errnb .errndef .errnz .exit .fardata .fardata? .if .lall .lfcond .list "
  509. ".listall .listif .listmacro .listmacroall .model .no87 .nocref .nolist .nolistif "
  510. ".nolistmacro .radix .repeat .sall .seq .sfcond .stack .startup .tfcond .type "
  511. ".until .untilcxz .while .xall .xcref .xlist alias align assume catstr comm "
  512. "comment db dd df dosseg dq dt dup dw echo else elseif elseif1 elseif2 "
  513. "elseifb elseifdef elseifdif elseifdifi elseife elseifidn elseifidni elseifnb "
  514. "elseifndef end endif endm endp ends eq equ even exitm extern externdef "
  515. "extrn for forc ge goto group gt high highword if if1 if2 ifb ifdef ifdif ifdifi ife "
  516. "ifidn ifidni ifnb ifndef include includelib instr invoke irp irpc label le length "
  517. "lengthof local low lowword lroffset lt macro mask mod .msfloat name ne "
  518. "offset opattr option org %out page popcontext proc proto ptr public "
  519. "purge pushcontext record repeat rept seg segment short size sizeof "
  520. "sizestr struc struct substr subtitle subttl textequ this title type typedef "
  521. "union while width db dw dd dq dt resb resw resd resq rest incbin equ "
  522. "times %define %idefine %xdefine %xidefine %undef %assign %iassign "
  523. "%strlen %substr %macro %imacro %endmacro %rotate .nolist %if %elif "
  524. "%else %endif %ifdef %ifndef %elifdef %elifndef %ifmacro %ifnmacro "
  525. "%elifmacro %elifnmacro %ifctk %ifnctk %elifctk %elifnctk %ifidn %ifnidn "
  526. "%elifidn %elifnidn %ifidni %ifnidni %elifidni %elifnidni %ifid %ifnid %elifid "
  527. "%elifnid %ifstr %ifnstr %elifstr %elifnstr %ifnum %ifnnum %elifnum "
  528. "%elifnnum %error %rep %endrep %exitrep %include %push %pop %repl "
  529. "struct endstruc istruc at iend align alignb %arg %stacksize %local %line "
  530. "bits use16 use32 section absolute extern global common cpu org section "
  531. "group import export",
  532. "$ ? @b @f addr basic byte c carry? dword far far16 fortran fword near "
  533. "near16 overflow? parity? pascal qword real4 real8 real10 sbyte sdword "
  534. "sign? stdcall sword syscall tbyte vararg word zero? flat near32 far32 abs "
  535. "all assumes at casemap common compact cpu dotname emulator epilogue "
  536. "error export expr16 expr32 farstack flat forceframe huge language large "
  537. "listing ljmp loadds m510 medium memory nearstack nodotname noemulator "
  538. "nokeyword noljmp nom510 none nonunique nooldmacros nooldstructs "
  539. "noreadonly noscoped nosignextend nothing notpublic oldmacros oldstructs "
  540. "os_dos para private prologue radix readonly req scoped setif2 smallstack "
  541. "tiny use16 use32 uses # nasm directives, mostly complete, does not parse "
  542. "properly a16 a32 o16 o32 byte word dword nosplit $ $$ seq wrt flat large "
  543. "small .text .data .bss near far %0 %1 %2 %3 %4 %5 %6 %7 %8 %9",
  544. "addpd addps addsd addss andpd andps andnpd andnps cmpeqpd cmpltpd "
  545. "cmplepd cmpunordpd cmpnepd cmpnltpd cmpnlepd cmpordpd cmpeqps "
  546. "cmpltps cmpleps cmpunordps cmpneps cmpnltps cmpnleps cmpordps "
  547. "cmpeqsd cmpltsd cmplesd cmpunordsd cmpnesd cmpnltsd cmpnlesd "
  548. "cmpordsd cmpeqss cmpltss cmpless cmpunordss cmpness cmpnltss "
  549. "cmpnless cmpordss comisd comiss cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi "
  550. "cvtpd2ps cvtpi2pd cvtpi2ps cvtps2dq cvtps2pd cvtps2pi cvtss2sd "
  551. "cvtss2si cvtsd2si cvtsd2ss cvtsi2sd cvtsi2ss cvttpd2dq cvttpd2pi "
  552. "cvttps2dq cvttps2pi cvttsd2si cvttss2si divpd divps divsd divss fxrstor "
  553. "fxsave ldmxscr lfence mfence maskmovdqu maskmovdq maxpd maxps "
  554. "paxsd maxss minpd minps minsd minss movapd movaps movdq2q movdqa "
  555. "movdqu movhlps movhpd movhps movd movq movlhps movlpd movlps "
  556. "movmskpd movmskps movntdq movnti movntpd movntps movntq "
  557. "movq2dq movsd movss movupd movups mulpd mulps mulsd mulss orpd "
  558. "orps packssdw packsswb packuswb paddb paddsb paddw paddsw paddd "
  559. "paddsiw paddq paddusb paddusw pand pandn pause paveb pavgb pavgw "
  560. "pavgusb pdistib pextrw pcmpeqb pcmpeqw pcmpeqd pcmpgtb pcmpgtw "
  561. "pcmpgtd pf2id pf2iw pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin "
  562. "pfmul pmachriw pmaddwd pmagw pmaxsw pmaxub pminsw pminub "
  563. "pmovmskb pmulhrwc pmulhriw pmulhrwa pmulhuw pmulhw pmullw pmuludq "
  564. "pmvzb pmvnzb pmvlzb pmvgezb pfnacc pfpnacc por prefetch prefetchw "
  565. "prefetchnta prefetcht0 prefetcht1 prefetcht2 pfrcp pfrcpit1 pfrcpit2 "
  566. "pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pf2iw pinsrw psadbw pshufd pshufhw "
  567. "pshuflw pshufw psllw pslld psllq pslldq psraw psrad psrlw psrld psrlq psrldq "
  568. "psubb psubw psubd psubq psubsb psubsw psubusb psubusw psubsiw "
  569. "pswapd punpckhbw punpckhwd punpckhdq punpckhqdq punpcklbw "
  570. "punpcklwd punpckldq punpcklqdq pxor rcpps rcpss rsqrtps rsqrtss sfence "
  571. "shufpd shufps sqrtpd sqrtps sqrtsd sqrtss stmxcsr subpd subps subsd "
  572. "subss ucomisd ucomiss unpckhpd unpckhps unpcklpd unpcklps xorpd xorps",
  573. "", "", "" };
  574. EDITLEXER lexASM = { SCLEX_ASM, 63013, L"Assembly Script", L"asm", L"", &KeyWords_ASM, {
  575.                      { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  576.                      //{ SCE_ASM_DEFAULT, L"Default", L"", L"" },
  577.                      { MULTI_STYLE(SCE_ASM_COMMENT,SCE_ASM_COMMENTBLOCK,0,0), 63127, L"Comment", L"fore:#008000", L"" },
  578.                      { SCE_ASM_IDENTIFIER, 63129, L"Identifier", L"", L"" },
  579.                      { MULTI_STYLE(SCE_ASM_STRING,SCE_ASM_CHARACTER,SCE_ASM_STRINGEOL,0), 63131, L"String", L"fore:#008000", L"" },
  580.                      { SCE_ASM_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
  581.                      { SCE_ASM_OPERATOR, 63132, L"Operator", L"fore:#0A246A", L"" },
  582.                      { SCE_ASM_CPUINSTRUCTION, 63206, L"CPU Instruction", L"fore:#0A246A", L"" },
  583.                      { SCE_ASM_MATHINSTRUCTION, 63207, L"FPU Instruction", L"fore:#0A246A", L"" },
  584.                      { SCE_ASM_EXTINSTRUCTION, 63210, L"Extended Instruction", L"fore:#0A246A", L"" },
  585.                      { SCE_ASM_DIRECTIVE, 63203, L"Directive", L"fore:#0A246A", L"" },
  586.                      { SCE_ASM_DIRECTIVEOPERAND, 63209, L"Directive Operand", L"fore:#0A246A", L"" },
  587.                      { SCE_ASM_REGISTER, 63208, L"Register", L"fore:#FF8000", L"" },
  588.                      { -1, 00000, L"", L"", L"" } } };
  589. KEYWORDLIST KeyWords_PL = {
  590. "__DATA__ __END__ __FILE__ __LINE__ __PACKAGE__ abs accept alarm and atan2 AUTOLOAD BEGIN "
  591. "bind binmode bless caller chdir CHECK chmod chomp chop chown chr chroot close closedir cmp "
  592. "connect continue CORE cos crypt dbmclose dbmopen default defined delete DESTROY die do "
  593. "dump each else elsif END endgrent endhostent endnetent endprotoent endpwent endservent eof "
  594. "eq EQ eval exec exists exit exp fcntl fileno flock for foreach fork format formline ge GE "
  595. "getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin "
  596. "getnetbyaddr getnetbyname getnetent getpeername getpgrp getppid getpriority getprotobyname "
  597. "getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport "
  598. "getservent getsockname getsockopt given glob gmtime goto grep gt GT hex if index INIT int "
  599. "ioctl join keys kill last lc lcfirst le LE length link listen local localtime lock log "
  600. "lstat lt LT map mkdir msgctl msgget msgrcv msgsnd my ne NE next no not NULL oct open "
  601. "opendir or ord our pack package pipe pop pos print printf prototype push qu quotemeta rand "
  602. "read readdir readline readlink readpipe recv redo ref rename require reset return reverse "
  603. "rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent "
  604. "sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift "
  605. "shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split "
  606. "sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek "
  607. "system syswrite tell telldir tie tied time times truncate uc ucfirst umask undef UNITCHECK "
  608. "unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn "
  609. "when while write xor",
  610. "", "", "", "", "", "", "", "" };
  611. EDITLEXER lexPL = { SCLEX_PERL, 63014, L"Perl Script", L"pl; pm; cgi; pod", L"", &KeyWords_PL, {
  612.                     { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  613.                     //{ SCE_PL_DEFAULT, L"Default", L"", L"" },
  614.                     { SCE_PL_COMMENTLINE, 63127, L"Comment", L"fore:#646464", L"" },
  615.                     { SCE_PL_WORD, 63128, L"Keyword", L"bold; fore:#804000", L"" },
  616.                     { SCE_PL_IDENTIFIER, 63129, L"Identifier", L"", L"" },
  617.                     { SCE_PL_STRING, 63211, L"String double quoted", L"fore:#008000", L"" },
  618.                     { SCE_PL_CHARACTER, 63212, L"String single quoted", L"fore:#008000", L"" },
  619.                     { SCE_PL_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
  620.                     { SCE_PL_OPERATOR, 63132, L"Operator", L"bold", L"" },
  621.                     { SCE_PL_SCALAR, 63215, L"Scalar $var", L"fore:#0A246A", L"" },
  622.                     { SCE_PL_ARRAY, 63216, L"Array @var", L"fore:#003CE6", L"" },
  623.                     { SCE_PL_HASH, 63217, L"Hash %var", L"fore:#B000B0", L"" },
  624.                     { SCE_PL_SYMBOLTABLE, 63218, L"Symbol table *var", L"fore:#3A6EA5", L"" },
  625.                     { SCE_PL_REGEX, 63219, L"Regex /re/ or m{re}", L"fore:#006633; back:#FFF1A8", L"" },
  626.                     { SCE_PL_REGSUBST, 63220, L"Substitution s/re/ore/", L"fore:#006633; back:#FFF1A8", L"" },
  627.                     { SCE_PL_BACKTICKS, 63221, L"Back ticks", L"fore:#E24000; back:#FFF1A8", L"" },
  628.                     { SCE_PL_HERE_DELIM, 63223, L"Here-doc (delimiter)", L"fore:#648000", L"" },
  629.                     { SCE_PL_HERE_Q, 63224, L"Here-doc (single quoted, q)", L"fore:#648000", L"" },
  630.                     { SCE_PL_HERE_QQ, 63225, L"Here-doc (double quoted, qq)", L"fore:#648000", L"" },
  631.                     { SCE_PL_HERE_QX, 63226, L"Here-doc (back ticks, qx)", L"fore:#E24000; back:#FFF1A8", L"" },
  632.                     { SCE_PL_STRING_Q, 63227, L"Single quoted string (generic, q)", L"fore:#008000", L"" },
  633.                     { SCE_PL_STRING_QQ, 63228, L"Double quoted string (qq)", L"fore:#008000", L"" },
  634.                     { SCE_PL_STRING_QX, 63229, L"Back ticks (qx)", L"fore:#E24000; back:#FFF1A8", L"" },
  635.                     { SCE_PL_STRING_QR, 63230, L"Regex (qr)", L"fore:#006633; back:#FFF1A8", L"" },
  636.                     { SCE_PL_STRING_QW, 63231, L"Array (qw)", L"fore:#003CE6", L"" },
  637.                     { SCE_PL_SUB_PROTOTYPE, 63253, L"Prototype", L"fore:#800080; back:#FFE2FF", L"" },
  638.                     { SCE_PL_FORMAT_IDENT, 63254, L"Format identifier", L"bold; fore:#648000; back:#FFF1A8", L"" },
  639.                     { SCE_PL_FORMAT, 63255, L"Format body", L"fore:#648000; back:#FFF1A8", L"" },
  640.                     { SCE_PL_POD, 63213, L"POD (common)", L"fore:#A46000; back:#FFFFC0; eolfilled", L"" },
  641.                     { SCE_PL_POD_VERB, 63214, L"POD (verbatim)", L"fore:#A46000; back:#FFFFC0; eolfilled", L"" },
  642.                     { SCE_PL_DATASECTION, 63222, L"Data section", L"fore:#A46000; back:#FFFFC0; eolfilled", L"" },
  643.                     { SCE_PL_ERROR, 63252, L"Parsing error", L"fore:#C80000; back:#FFFF80", L"" },
  644.                     //{ SCE_PL_PUNCTUATION, L"Symbols / punctuation (not used)", L"", L"" },
  645.                     //{ SCE_PL_PREPROCESSOR, L"Preprocessor (not used)", L"", L"" },
  646.                     //{ SCE_PL_LONGQUOTE, L"Long quote (qq, qr, qw, qx) (not used)", L"", L"" },
  647.                     { -1, 00000, L"", L"", L"" } } };
  648. KEYWORDLIST KeyWords_INI = {
  649. "", "", "", "", "", "", "", "", "" };
  650. EDITLEXER lexINI = { SCLEX_PROPERTIES, 63015, L"Configuration Files", L"ini; inf; reg; cfg; properties; oem; sif; url; sed; theme", L"", &KeyWords_INI, {
  651.                      { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  652.                      //{ SCE_PROPS_DEFAULT, L"Default", L"", L"" },
  653.                      { SCE_PROPS_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
  654.                      { SCE_PROPS_SECTION, 63232, L"Section", L"bold; fore:#000000; back:#FFD24D; eolfilled", L"" },
  655.                      { SCE_PROPS_ASSIGNMENT, 63233, L"Assignment", L"fore:#FF0000", L"" },
  656.                      { SCE_PROPS_DEFVAL, 63234, L"Default Value", L"fore:#FF0000", L"" },
  657.                      { -1, 00000, L"", L"", L"" } } };
  658. KEYWORDLIST KeyWords_BAT = {
  659. "rem set if exist errorlevel for in do break call chcp cd chdir choice cls "
  660. "country ctty date del erase dir echo exit goto loadfix loadhigh mkdir md "
  661. "move path pause prompt rename ren rmdir rd shift time type ver verify vol "
  662. "com con lpt nul echo.",
  663. "", "", "", "", "", "", "", "" };
  664. EDITLEXER lexBAT = { SCLEX_BATCH, 63016, L"Batch Files", L"bat; cmd", L"", &KeyWords_BAT, {
  665.                      { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  666.                      //{ SCE_BAT_DEFAULT, L"Default", L"", L"" },
  667.                      { SCE_BAT_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
  668.                      { SCE_BAT_WORD, 63128, L"Keyword", L"bold; fore:#0A246A", L"" },
  669.                      { SCE_BAT_IDENTIFIER, 63129, L"Identifier", L"fore:#003CE6; back:#FFF1A8", L"" },
  670.                      { SCE_BAT_OPERATOR, 63132, L"Operator", L"", L"" },
  671.                      { MULTI_STYLE(SCE_BAT_COMMAND,SCE_BAT_HIDE,0,0), 63236, L"Command", L"bold", L"" },
  672.                      { SCE_BAT_LABEL, 63235, L"Label", L"fore:#C80000; back:#F4F4F4; eolfilled", L"" },
  673.                      { -1, 00000, L"", L"", L"" } } };
  674. KEYWORDLIST KeyWords_DIFF = {
  675. "", "", "", "", "", "", "", "", "" };
  676. EDITLEXER lexDIFF = { SCLEX_DIFF, 63017, L"Diff Files", L"diff; patch", L"", &KeyWords_DIFF, {
  677.                       { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  678.                       //{ SCE_DIFF_DEFAULT, L"Default", L"", L"" },
  679.                       { SCE_DIFF_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
  680.                       { SCE_DIFF_COMMAND, 63236, L"Command", L"bold; fore:#0A246A", L"" },
  681.                       { SCE_DIFF_HEADER, 63238, L"Source and Destination", L"fore:#C80000; back:#FFF1A8; eolfilled", L"" },
  682.                       { SCE_DIFF_POSITION, 63239, L"Position Setting", L"fore:#0000FF", L"" },
  683.                       { SCE_DIFF_ADDED, 63240, L"Line Addition", L"fore:#000000; back:#C0FF60; eolfilled", L"" },
  684.                       { SCE_DIFF_DELETED, 63241, L"Line Removal", L"fore:#000000; back:#FF8060; eolfilled", L"" },
  685.                       { SCE_DIFF_CHANGED, 63242, L"Line Change", L"fore:#000000; back:#99D7FF; eolfilled", L"" },
  686.                       { -1, 00000, L"", L"", L"" } } };
  687. KEYWORDLIST KeyWords_SQL = {
  688. "abort accessible action add after all alter analyze and as asc asensitive attach autoincrement "
  689. "before begin between bigint binary bit blob both by call cascade case cast change char character "
  690. "check collate column commit condition conflict constraint continue convert create cross current_date "
  691. "current_time current_timestamp current_user cursor database databases date day_hour day_microsecond "
  692. "day_minute day_second dec decimal declare default deferrable deferred delayed delete desc describe "
  693. "detach deterministic distinct distinctrow div double drop dual each else elseif enclosed end enum "
  694. "escape escaped except exclusive exists exit explain fail false fetch float float4 float8 for force "
  695. "foreign from full fulltext glob grant group having high_priority hour_microsecond hour_minute "
  696. "hour_second if ignore immediate in index infile initially inner inout insensitive insert instead int "
  697. "int1 int2 int3 int4 int8 integer intersect interval into is isnull iterate join key keys kill "
  698. "leading leave left like limit linear lines load localtime localtimestamp lock long longblob longtext "
  699. "loop low_priority master_ssl_verify_server_cert match mediumblob mediumint mediumtext middleint "
  700. "minute_microsecond minute_second mod modifies natural no no_write_to_binlog not notnull null numeric "
  701. "of offset on optimize option optionally or order out outer outfile plan pragma precision primary "
  702. "procedure purge query raise range read read_only read_write reads real references regexp reindex "
  703. "release rename repeat replace require restrict return revoke right rlike rollback row rowid schema "
  704. "schemas second_microsecond select sensitive separator set show smallint spatial specific sql "
  705. "sql_big_result sql_calc_found_rows sql_small_result sqlexception sqlstate sqlwarning ssl starting "
  706. "straight_join table temp temporary terminated text then time timestamp tinyblob tinyint tinytext to "
  707. "trailing transaction trigger true undo union unique unlock unsigned update usage use using utc_date "
  708. "utc_time utc_timestamp vacuum values varbinary varchar varcharacter varying view virtual when where "
  709. "while with write xor year_month zerofill",
  710. "", "", "", "", "", "", "", "" };
  711. EDITLEXER lexSQL = { SCLEX_SQL, 63018, L"SQL Query", L"sql", L"", &KeyWords_SQL, {
  712.                      { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  713.                      //{ SCE_SQL_DEFAULT, L"Default", L"", L"" },
  714.                      { SCE_SQL_COMMENT, 63127, L"Comment", L"fore:#505050", L"" },
  715.                      { SCE_SQL_WORD, 63128, L"Keyword", L"bold; fore:#800080", L"" },
  716.                      { MULTI_STYLE(SCE_SQL_STRING,SCE_SQL_CHARACTER,0,0), 63131, L"String", L"fore:#008000; back:#FFF1A8", L"" },
  717.                      { SCE_SQL_IDENTIFIER, 63129, L"Identifier", L"fore:#800080", L"" },
  718.                      { SCE_SQL_QUOTEDIDENTIFIER, 63243, L"Quoted Identifier", L"fore:#800080; back:#FFCCFF", L"" },
  719.                      { SCE_SQL_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
  720.                      { SCE_SQL_OPERATOR, 63132, L"Operator", L"bold; fore:#800080", L"" },
  721.                      { -1, 00000, L"", L"", L"" } } };
  722. KEYWORDLIST KeyWords_PY = {
  723. "and as assert break class continue def del elif else except "
  724. "exec False finally for from global if import in is lambda None "
  725. "not or pass print raise return True try with while yield",
  726. "", "", "", "", "", "", "", "" };
  727. EDITLEXER lexPY = { SCLEX_PYTHON, 63019, L"Python Script", L"py; pyw", L"", &KeyWords_PY, {
  728.                     { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  729.                     //{ SCE_P_DEFAULT, L"Default", L"", L"" },
  730.                     { MULTI_STYLE(SCE_P_COMMENTLINE,SCE_P_COMMENTBLOCK,0,0), 63127, L"Comment", L"fore:#880000", L"" },
  731.                     { SCE_P_WORD, 63128, L"Keyword", L"fore:#000088", L"" },
  732.                     { SCE_P_IDENTIFIER, 63129, L"Identifier", L"", L"" },
  733.                     { MULTI_STYLE(SCE_P_STRING,SCE_P_STRINGEOL,0,0), 63211, L"String double quoted", L"fore:#008800", L"" },
  734.                     { SCE_P_CHARACTER, 63212, L"String single quoted", L"fore:#008800", L"" },
  735.                     { SCE_P_TRIPLEDOUBLE, 63244, L"String triple double quotes", L"fore:#008800", L"" },
  736.                     { SCE_P_TRIPLE, 63245, L"String triple single quotes", L"fore:#008800", L"" },
  737.                     { SCE_P_NUMBER, 63130, L"Number", L"fore:#FF4000", L"" },
  738.                     { SCE_P_OPERATOR, 63132, L"Operator", L"bold; fore:#666600", L"" },
  739.                     { SCE_P_DEFNAME, 63247, L"Function name", L"fore:#660066", L"" },
  740.                     { SCE_P_CLASSNAME, 63246, L"Class name", L"fore:#660066", L"" },
  741.                     { -1, 00000, L"", L"", L"" } } };
  742. KEYWORDLIST KeyWords_CONF = {
  743. "acceptmutex acceptpathinfo accessconfig accessfilename action addalt addaltbyencoding addaltbytype addcharset adddefaultcharset "
  744. "adddescription addencoding addhandler addicon addiconbyencoding addiconbytype addinputfilter addlanguage addmodule addmoduleinfo "
  745. "addoutputfilter addoutputfilterbytype addtype agentlog alias aliasmatch all allow allowconnect allowencodedslashes allowoverride "
  746. "anonymous anonymous_authoritative anonymous_logemail anonymous_mustgiveemail anonymous_nouserid anonymous_verifyemail "
  747. "assignuserid authauthoritative authdbauthoritative authdbgroupfile authdbmauthoritative authdbmgroupfile authdbmtype "
  748. "authdbmuserfile authdbuserfile authdigestalgorithm authdigestdomain authdigestfile authdigestgroupfile authdigestnccheck "
  749. "authdigestnonceformat authdigestnoncelifetime authdigestqop authdigestshmemsize authgroupfile authldapauthoritative "
  750. "authldapbinddn authldapbindpassword authldapcharsetconfig authldapcomparednonserver authldapdereferencealiases authldapenabled "
  751. "authldapfrontpagehack authldapgroupattribute authldapgroupattributeisdn authldapremoteuserisdn authldapurl authname authtype "
  752. "authuserfile bindaddress browsermatch browsermatchnocase bs2000account bufferedlogs cachedefaultexpire cachedirlength "
  753. "cachedirlevels cachedisable cacheenable cacheexpirycheck cachefile cacheforcecompletion cachegcclean cachegcdaily "
  754. "cachegcinterval cachegcmemusage cachegcunused cacheignorecachecontrol cacheignoreheaders cacheignorenolastmod "
  755. "cachelastmodifiedfactor cachemaxexpire cachemaxfilesize cacheminfilesize cachenegotiateddocs cacheroot cachesize cachetimemargin "
  756. "cgimapextension charsetdefault charsetoptions charsetsourceenc checkspelling childperuserid clearmodulelist contentdigest "
  757. "cookiedomain cookieexpires cookielog cookiename cookiestyle cookietracking coredumpdirectory customlog dav davdepthinfinity "
  758. "davlockdb davmintimeout defaulticon defaultlanguage defaulttype define deflatebuffersize deflatecompressionlevel "
  759. "deflatefilternote deflatememlevel deflatewindowsize deny directory directoryindex directorymatch directoryslash documentroot "
  760. "dumpioinput dumpiooutput enableexceptionhook enablemmap enablesendfile errordocument errorlog example expiresactive "
  761. "expiresbytype expiresdefault extendedstatus extfilterdefine extfilteroptions fancyindexing fileetag files filesmatch "
  762. "forcelanguagepriority forcetype forensiclog from group header headername hostnamelookups identitycheck ifdefine ifmodule "
  763. "imapbase imapdefault imapmenu include indexignore indexoptions indexorderdefault isapiappendlogtoerrors isapiappendlogtoquery "
  764. "isapicachefile isapifakeasync isapilognotsupported isapireadaheadbuffer keepalive keepalivetimeout languagepriority "
  765. "ldapcacheentries ldapcachettl ldapconnectiontimeout ldapopcacheentries ldapopcachettl ldapsharedcachefile ldapsharedcachesize "
  766. "ldaptrustedca ldaptrustedcatype limit limitexcept limitinternalrecursion limitrequestbody limitrequestfields "
  767. "limitrequestfieldsize limitrequestline limitxmlrequestbody listen listenbacklog loadfile loadmodule location locationmatch "
  768. "lockfile logformat loglevel maxclients maxkeepaliverequests maxmemfree maxrequestsperchild maxrequestsperthread maxspareservers "
  769. "maxsparethreads maxthreads maxthreadsperchild mcachemaxobjectcount mcachemaxobjectsize mcachemaxstreamingbuffer "
  770. "mcacheminobjectsize mcacheremovalalgorithm mcachesize metadir metafiles metasuffix mimemagicfile minspareservers minsparethreads "
  771. "mmapfile modmimeusepathinfo multiviewsmatch namevirtualhost nocache noproxy numservers nwssltrustedcerts nwsslupgradeable "
  772. "options order passenv pidfile port protocolecho proxy proxybadheader proxyblock proxydomain proxyerroroverride proxyiobuffersize "
  773. "proxymatch proxymaxforwards proxypass proxypassreverse proxypreservehost proxyreceivebuffersize proxyremote proxyremotematch "
  774. "proxyrequests proxytimeout proxyvia qsc readmename redirect redirectmatch redirectpermanent redirecttemp refererignore "
  775. "refererlog removecharset removeencoding removehandler removeinputfilter removelanguage removeoutputfilter removetype "
  776. "requestheader require resourceconfig rewritebase rewritecond rewriteengine rewritelock rewritelog rewriteloglevel rewritemap "
  777. "rewriteoptions rewriterule rlimitcpu rlimitmem rlimitnproc satisfy scoreboardfile script scriptalias scriptaliasmatch "
  778. "scriptinterpretersource scriptlog scriptlogbuffer scriptloglength scriptsock securelisten sendbuffersize serveradmin serveralias "
  779. "serverlimit servername serverpath serverroot serversignature servertokens servertype setenv setenvif setenvifnocase sethandler "
  780. "setinputfilter setoutputfilter singlelisten ssiendtag ssierrormsg ssistarttag ssitimeformat ssiundefinedecho "
  781. "sslcacertificatefile sslcacertificatepath sslcarevocationfile sslcarevocationpath sslcertificatechainfile sslcertificatefile "
  782. "sslcertificatekeyfile sslciphersuite sslengine sslmutex ssloptions sslpassphrasedialog sslprotocol sslproxycacertificatefile "
  783. "sslproxycacertificatepath sslproxycarevocationfile sslproxycarevocationpath sslproxyciphersuite sslproxyengine "
  784. "sslproxymachinecertificatefile sslproxymachinecertificatepath sslproxyprotocol sslproxyverify sslproxyverifydepth sslrandomseed "
  785. "sslrequire sslrequiressl sslsessioncache sslsessioncachetimeout sslusername sslverifyclient sslverifydepth startservers "
  786. "startthreads suexecusergroup threadlimit threadsperchild threadstacksize timeout transferlog typesconfig unsetenv "
  787. "usecanonicalname user userdir virtualdocumentroot virtualdocumentrootip virtualhost virtualscriptalias virtualscriptaliasip "
  788. "win32disableacceptex xbithack",
  789. "", //"on off standalone inetd force-response-1.0 downgrade-1.0 nokeepalive indexes includes followsymlinks none x-compress x-gzip",
  790. "", "", "", "", "", "", "" };
  791. EDITLEXER lexCONF = { SCLEX_CONF, 63020, L"Apache Config Files", L"conf; htaccess", L"", &KeyWords_CONF, {
  792.                       { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  793.                       { SCE_CONF_COMMENT, 63127, L"Comment", L"fore:#648000", L"" },
  794.                       { SCE_CONF_STRING, 63131, L"String", L"fore:#B000B0", L"" },
  795.                       { SCE_CONF_NUMBER, 63130, L"Number", L"fore:#FF4000", L"" },
  796.                       { SCE_CONF_DIRECTIVE, 63203, L"Directive", L"fore:#003CE6", L"" },
  797.                       { SCE_CONF_IP, 63248, L"IP Address", L"bold; fore:#FF4000", L"" },
  798. // Not used by lexer  { SCE_CONF_IDENTIFIER, L"Identifier", L"", L"" },
  799. // Lexer is buggy     { SCE_CONF_OPERATOR, L"Operator", L"", L"" },
  800. // Lexer is buggy     { SCE_CONF_PARAMETER, L"Runtime Directive Parameter", L"", L"" },
  801. // Lexer is buggy     { SCE_CONF_EXTENSION, L"Extension", L"", L"" },
  802.                       { -1, 00000, L"", L"", L"" } } };
  803. KEYWORDLIST KeyWords_PS = {
  804. "break continue do else elseif filter for foreach function if in return switch until where while",
  805. "add-computer add-content add-history add-member add-pssnapin add-type checkpoint-computer "
  806. "clear-content clear-eventlog clear-history clear-host clear-item clear-itemproperty "
  807. "clear-variable compare-object complete-transaction connect-wsman convertfrom-csv "
  808. "convertfrom-securestring convertfrom-stringdata convert-path convertto-csv convertto-html "
  809. "convertto-securestring convertto-xml copy-item copy-itemproperty debug-process "
  810. "disable-computerrestore disable-psbreakpoint disable-psremoting disable-pssessionconfiguration "
  811. "disable-wsmancredssp disconnect-wsman enable-computerrestore enable-psbreakpoint "
  812. "enable-psremoting enable-pssessionconfiguration enable-wsmancredssp enter-pssession "
  813. "exit-pssession export-alias export-clixml export-console export-counter export-csv "
  814. "export-formatdata export-modulemember export-pssession foreach-object format-custom format-list "
  815. "format-table format-wide get-acl get-alias get-authenticodesignature get-childitem get-command "
  816. "get-computerrestorepoint get-content get-counter get-credential get-culture get-date get-event "
  817. "get-eventlog get-eventsubscriber get-executionpolicy get-formatdata get-help get-history "
  818. "get-host get-hotfix get-item get-itemproperty get-job get-location get-member get-module "
  819. "get-pfxcertificate get-process get-psbreakpoint get-pscallstack get-psdrive get-psprovider "
  820. "get-pssession get-pssessionconfiguration get-pssnapin get-random get-service get-tracesource "
  821. "get-transaction get-uiculture get-unique get-variable get-verb get-winevent get-wmiobject "
  822. "get-wsmancredssp get-wsmaninstance group-object help import-alias import-clixml import-counter "
  823. "import-csv import-localizeddata import-module import-pssession importsystemmodules "
  824. "invoke-command invoke-expression invoke-history invoke-item invoke-wmimethod invoke-wsmanaction "
  825. "join-path limit-eventlog measure-command measure-object mkdir more move-item move-itemproperty "
  826. "new-alias new-event new-eventlog new-item new-itemproperty new-module new-modulemanifest "
  827. "new-object new-psdrive new-pssession new-pssessionoption new-service new-timespan new-variable "
  828. "new-webserviceproxy new-wsmaninstance new-wsmansessionoption out-default out-file out-gridview "
  829. "out-host out-null out-printer out-string pop-location prompt push-location read-host receive-job "
  830. "register-engineevent register-objectevent register-pssessionconfiguration register-wmievent "
  831. "remove-computer remove-event remove-eventlog remove-item remove-itemproperty remove-job "
  832. "remove-module remove-psbreakpoint remove-psdrive remove-pssession remove-pssnapin "
  833. "remove-variable remove-wmiobject remove-wsmaninstance rename-item rename-itemproperty "
  834. "reset-computermachinepassword resolve-path restart-computer restart-service restore-computer "
  835. "resume-service select-object select-string select-xml send-mailmessage set-acl set-alias "
  836. "set-authenticodesignature set-content set-date set-executionpolicy set-item set-itemproperty "
  837. "set-location set-psbreakpoint set-psdebug set-pssessionconfiguration set-service set-strictmode "
  838. "set-tracesource set-variable set-wmiinstance set-wsmaninstance set-wsmanquickconfig "
  839. "show-eventlog sort-object split-path start-job start-process start-service start-sleep "
  840. "start-transaction start-transcript stop-computer stop-job stop-process stop-service "
  841. "stop-transcript suspend-service tee-object test-computersecurechannel test-connection "
  842. "test-modulemanifest test-path test-wsman trace-command undo-transaction unregister-event "
  843. "unregister-pssessionconfiguration update-formatdata update-list update-typedata use-transaction "
  844. "wait-event wait-job wait-process where-object write-debug write-error write-eventlog write-host "
  845. "write-output write-progress write-verbose write-warning",
  846. "ac asnp cat cd chdir clc clear clhy cli clp cls clv compare copy cp cpi cpp cvpa dbp del diff "
  847. "dir ebp echo epal epcsv epsn erase etsn exsn fc fl foreach ft fw gal gbp gc gci gcm gcs gdr ghy "
  848. "gi gjb gl gm gmo gp gps group gsn gsnp gsv gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo "
  849. "ipsn ise iwmi kill lp ls man md measure mi mount move mp mv nal ndr ni nmo nsn nv ogv oh popd ps "
  850. "pushd pwd r rbp rcjb rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rv rvpa rwmi sajb sal "
  851. "saps sasv sbp sc select set si sl sleep sort sp spjb spps spsv start sv swmi tee type where wjb "
  852. "write", "", "", "", "", "", "" };
  853. EDITLEXER lexPS = { SCLEX_POWERSHELL, 63021, L"PowerShell Script", L"ps1; psc1", L"", &KeyWords_PS, {
  854.                     { STYLE_DEFAULT, 63126, L"Default", L"", L"" },
  855.                     //{ SCE_POWERSHELL_DEFAULT, L"Default", L"", L"" },
  856.                     { SCE_POWERSHELL_COMMENT, 63127, L"Comment", L"fore:#646464", L"" },
  857.                     { SCE_POWERSHELL_KEYWORD, 63128, L"Keyword", L"bold; fore:#804000", L"" },
  858.                     { SCE_POWERSHELL_IDENTIFIER, 63129, L"Identifier", L"", L"" },
  859.                     { MULTI_STYLE(SCE_POWERSHELL_STRING,SCE_POWERSHELL_CHARACTER,0,0), 63131, L"String", L"fore:#008000", L"" },
  860.                     { SCE_POWERSHELL_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
  861.                     { SCE_POWERSHELL_OPERATOR, 63132, L"Operator", L"bold", L"" },
  862.                     { SCE_POWERSHELL_VARIABLE, 63249, L"Variable", L"fore:#0A246A", L"" },
  863.                     { SCE_POWERSHELL_CMDLET, 63250, L"Cmdlet", L"fore:#804000; back:#FFF1A8", L"" },
  864.                     { SCE_POWERSHELL_ALIAS, 63251, L"Alias", L"bold; fore:#0A246A", L"" },
  865.                     { -1, 00000, L"", L"", L"" } } };
  866. // This array holds all the lexers...
  867. PEDITLEXER pLexArray[NUMLEXERS] =
  868. {
  869.   &lexDefault,
  870.   &lexHTML,
  871.   &lexXML,
  872.   &lexCSS,
  873.   &lexJS,
  874.   &lexVBS,
  875.   &lexCPP,
  876.   &lexCS,
  877.   &lexRC,
  878.   &lexMAK,
  879.   &lexJAVA,
  880.   &lexVB,
  881.   &lexPAS,
  882.   &lexASM,
  883.   &lexSQL,
  884.   &lexPL,
  885.   &lexPY,
  886.   &lexINI,
  887.   &lexCONF,
  888.   &lexPS,
  889.   &lexBAT,
  890.   &lexDIFF
  891. };
  892. // Currently used lexer
  893. PEDITLEXER pLexCurrent = &lexDefault;
  894. COLORREF crCustom[16];
  895. BOOL bUse2ndDefaultStyle;
  896. BOOL fStylesModified = FALSE;
  897. BOOL fWarnedNoIniFile = FALSE;
  898. int iBaseFontSize = 10;
  899. int iDefaultLexer;
  900. BOOL bAutoSelect;
  901. int cxStyleSelectDlg;
  902. int cyStyleSelectDlg;
  903. extern int  iDefaultCodePage;
  904. extern int  iDefaultCharSet;
  905. extern BOOL bHiliteCurrentLine;
  906. //=============================================================================
  907. //
  908. //  Style_Load()
  909. //
  910. void Style_Load()
  911. {
  912.   int i,iLexer;
  913.   WCHAR tch[32];
  914.   WCHAR *pIniSection = LocalAlloc(LPTR,sizeof(WCHAR)*32*1024);
  915.   int   cchIniSection = LocalSize(pIniSection)/sizeof(WCHAR);
  916.   // Custom colors
  917.   crCustom [0] = RGB(0x00,0x00,0x00);
  918.   crCustom [1] = RGB(0x0A,0x24,0x6A);
  919.   crCustom [2] = RGB(0x3A,0x6E,0xA5);
  920.   crCustom [3] = RGB(0x00,0x3C,0xE6);
  921.   crCustom [4] = RGB(0x00,0x66,0x33);
  922.   crCustom [5] = RGB(0x60,0x80,0x20);
  923.   crCustom [6] = RGB(0x64,0x80,0x00);
  924.   crCustom [7] = RGB(0xA4,0x60,0x00);
  925.   crCustom [8] = RGB(0xFF,0xFF,0xFF);
  926.   crCustom [9] = RGB(0xFF,0xFF,0xE2);
  927.   crCustom[10] = RGB(0xFF,0xF1,0xA8);
  928.   crCustom[11] = RGB(0xFF,0xC0,0x00);
  929.   crCustom[12] = RGB(0xFF,0x40,0x00);
  930.   crCustom[13] = RGB(0xC8,0x00,0x00);
  931.   crCustom[14] = RGB(0xB0,0x00,0xB0);
  932.   crCustom[15] = RGB(0xB2,0x8B,0x40);
  933.   LoadIniSection(L"Custom Colors",pIniSection,cchIniSection);
  934.   for (i = 0; i < 16; i++) {
  935.     wsprintf(tch,L"%02i",i+1);
  936.     crCustom[i] = IniSectionGetInt(pIniSection,tch,crCustom[i]);
  937.   }
  938.   LoadIniSection(L"Styles",pIniSection,cchIniSection);
  939.   // 2nd default
  940.   bUse2ndDefaultStyle = (IniSectionGetInt(pIniSection,L"Use2ndDefaultStyle",0)) ? 1 : 0;
  941.   // default scheme
  942.   iDefaultLexer = IniSectionGetInt(pIniSection,L"DefaultScheme",0);
  943.   iDefaultLexer = min(max(iDefaultLexer,0),NUMLEXERS-1);
  944.   // auto select
  945.   bAutoSelect = (IniSectionGetInt(pIniSection,L"AutoSelect",1)) ? 1 : 0;
  946.   // scheme select dlg dimensions
  947.   cxStyleSelectDlg = IniSectionGetInt(pIniSection,L"SelectDlgSizeX",304);
  948.   cxStyleSelectDlg = max(cxStyleSelectDlg,0);
  949.   cyStyleSelectDlg = IniSectionGetInt(pIniSection,L"SelectDlgSizeY",0);
  950.   cyStyleSelectDlg = max(cyStyleSelectDlg,324);
  951.   for (iLexer = 0; iLexer < NUMLEXERS; iLexer++) {
  952.     LoadIniSection(pLexArray[iLexer]->pszName,pIniSection,cchIniSection);
  953.     if (!IniSectionGetString(pIniSection,L"FileNameExtensions",pLexArray[iLexer]->pszDefExt,
  954.           pLexArray[iLexer]->szExtensions,COUNTOF(pLexArray[iLexer]->szExtensions)))
  955.       lstrcpyn(pLexArray[iLexer]->szExtensions,pLexArray[iLexer]->pszDefExt,
  956.         COUNTOF(pLexArray[iLexer]->szExtensions));
  957.     i = 0;
  958.     while (pLexArray[iLexer]->Styles[i].iStyle != -1) {
  959.       IniSectionGetString(pIniSection,pLexArray[iLexer]->Styles[i].pszName,
  960.         pLexArray[iLexer]->Styles[i].pszDefault,
  961.         pLexArray[iLexer]->Styles[i].szValue,
  962.         COUNTOF(pLexArray[iLexer]->Styles[i].szValue));
  963.       i++;
  964.     }
  965.   }
  966.   LocalFree(pIniSection);
  967. }
  968. //=============================================================================
  969. //
  970. //  Style_Save()
  971. //
  972. void Style_Save()
  973. {
  974.   int i,iLexer;
  975.   WCHAR tch[32];
  976.   WCHAR *pIniSection = LocalAlloc(LPTR,sizeof(WCHAR)*32*1024);
  977.   int   cchIniSection = LocalSize(pIniSection)/sizeof(WCHAR);
  978.   // Custom colors
  979.   for (i = 0; i < 16; i++) {
  980.     wsprintf(tch,L"%02i",i+1);
  981.     IniSectionSetInt(pIniSection,tch,crCustom[i]);
  982.   }
  983.   SaveIniSection(L"Custom Colors",pIniSection);
  984.   ZeroMemory(pIniSection,cchIniSection);
  985.   // auto select
  986.   IniSectionSetInt(pIniSection,L"Use2ndDefaultStyle",bUse2ndDefaultStyle);
  987.   // default scheme
  988.   IniSectionSetInt(pIniSection,L"DefaultScheme",iDefaultLexer);
  989.   // auto select
  990.   IniSectionSetInt(pIniSection,L"AutoSelect",bAutoSelect);
  991.   // scheme select dlg dimensions
  992.   IniSectionSetInt(pIniSection,L"SelectDlgSizeX",cxStyleSelectDlg);
  993.   IniSectionSetInt(pIniSection,L"SelectDlgSizeY",cyStyleSelectDlg);
  994.   SaveIniSection(L"Styles",pIniSection);
  995.   if (!fStylesModified) {
  996.     LocalFree(pIniSection);
  997.     return;
  998.   }
  999.   ZeroMemory(pIniSection,cchIniSection);
  1000.   for (iLexer = 0; iLexer < NUMLEXERS; iLexer++) {
  1001.     IniSectionSetString(pIniSection,L"FileNameExtensions",pLexArray[iLexer]->szExtensions);
  1002.     i = 0;
  1003.     while (pLexArray[iLexer]->Styles[i].iStyle != -1) {
  1004.       IniSectionSetString(pIniSection,pLexArray[iLexer]->Styles[i].pszName,pLexArray[iLexer]->Styles[i].szValue);
  1005.       i++;
  1006.     }
  1007.     SaveIniSection(pLexArray[iLexer]->pszName,pIniSection);
  1008.     ZeroMemory(pIniSection,cchIniSection);
  1009.   }
  1010.   LocalFree(pIniSection);
  1011. }
  1012. //=============================================================================
  1013. //
  1014. //  Style_Import()
  1015. //
  1016. BOOL Style_Import(HWND hwnd)
  1017. {
  1018.   WCHAR szFile[MAX_PATH * 2] = L"";
  1019.   WCHAR szFilter[256];
  1020.   OPENFILENAME ofn;
  1021.   ZeroMemory(&ofn,sizeof(OPENFILENAME));
  1022.   GetString(IDS_FILTER_INI,szFilter,COUNTOF(szFilter));
  1023.   PrepareFilterStr(szFilter);
  1024.   ofn.lStructSize = sizeof(OPENFILENAME);
  1025.   ofn.hwndOwner = hwnd;
  1026.   ofn.lpstrFilter = szFilter;
  1027.   ofn.lpstrFile = szFile;
  1028.   ofn.lpstrDefExt = L"ini";
  1029.   ofn.nMaxFile = COUNTOF(szFile);
  1030.   ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_DONTADDTORECENT
  1031.             | OFN_PATHMUSTEXIST | OFN_SHAREAWARE /*| OFN_NODEREFERENCELINKS*/;
  1032.   if (GetOpenFileName(&ofn)) {
  1033.     int i,iLexer;
  1034.     WCHAR *pIniSection = LocalAlloc(LPTR,sizeof(WCHAR)*32*1024);
  1035.     int   cchIniSection = LocalSize(pIniSection)/sizeof(WCHAR);
  1036.     for (iLexer = 0; iLexer < NUMLEXERS; iLexer++) {
  1037.       if (GetPrivateProfileSection(pLexArray[iLexer]->pszName,pIniSection,cchIniSection,szFile)) {
  1038.         if (!IniSectionGetString(pIniSection,L"FileNameExtensions",pLexArray[iLexer]->pszDefExt,
  1039.               pLexArray[iLexer]->szExtensions,COUNTOF(pLexArray[iLexer]->szExtensions)))
  1040.           lstrcpyn(pLexArray[iLexer]->szExtensions,pLexArray[iLexer]->pszDefExt,
  1041.             COUNTOF(pLexArray[iLexer]->szExtensions));
  1042.         i = 0;
  1043.         while (pLexArray[iLexer]->Styles[i].iStyle != -1) {
  1044.           IniSectionGetString(pIniSection,pLexArray[iLexer]->Styles[i].pszName,
  1045.             pLexArray[iLexer]->Styles[i].pszDefault,
  1046.             pLexArray[iLexer]->Styles[i].szValue,
  1047.             COUNTOF(pLexArray[iLexer]->Styles[i].szValue));
  1048.           i++;
  1049.         }
  1050.       }
  1051.     }
  1052.     LocalFree(pIniSection);
  1053.     return(TRUE);
  1054.   }
  1055.   else
  1056.     return(FALSE);
  1057. }
  1058. //=============================================================================
  1059. //
  1060. //  Style_Export()
  1061. //
  1062. BOOL Style_Export(HWND hwnd)
  1063. {
  1064.   WCHAR szFile[MAX_PATH * 2] = L"";
  1065.   WCHAR szFilter[256];
  1066.   OPENFILENAME ofn;
  1067.   ZeroMemory(&ofn,sizeof(OPENFILENAME));
  1068.   GetString(IDS_FILTER_INI,szFilter,COUNTOF(szFilter));
  1069.   PrepareFilterStr(szFilter);
  1070.   ofn.lStructSize = sizeof(OPENFILENAME);
  1071.   ofn.hwndOwner = hwnd;
  1072.   ofn.lpstrFilter = szFilter;
  1073.   ofn.lpstrFile = szFile;
  1074.   ofn.lpstrDefExt = L"ini";
  1075.   ofn.nMaxFile = COUNTOF(szFile);
  1076.   ofn.Flags = /*OFN_FILEMUSTEXIST |*/ OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_DONTADDTORECENT
  1077.             | OFN_PATHMUSTEXIST | OFN_SHAREAWARE /*| OFN_NODEREFERENCELINKS*/ | OFN_OVERWRITEPROMPT;
  1078.   if (GetSaveFileName(&ofn)) {
  1079.     int i,iLexer;
  1080.     WCHAR *pIniSection = LocalAlloc(LPTR,sizeof(WCHAR)*32*1024);
  1081.     int   cchIniSection = LocalSize(pIniSection)/sizeof(WCHAR);
  1082.     for (iLexer = 0; iLexer < NUMLEXERS; iLexer++) {
  1083.       IniSectionSetString(pIniSection,L"FileNameExtensions",pLexArray[iLexer]->szExtensions);
  1084.       i = 0;
  1085.       while (pLexArray[iLexer]->Styles[i].iStyle != -1) {
  1086.         IniSectionSetString(pIniSection,pLexArray[iLexer]->Styles[i].pszName,pLexArray[iLexer]->Styles[i].szValue);
  1087.         i++;
  1088.       }
  1089.       WritePrivateProfileSection(pLexArray[iLexer]->pszName,pIniSection,szFile);
  1090.       ZeroMemory(pIniSection,cchIniSection);
  1091.     }
  1092.     LocalFree(pIniSection);
  1093.     return(TRUE);
  1094.   }
  1095.   else
  1096.     return(FALSE);
  1097. }
  1098. //=============================================================================
  1099. //
  1100. //  Style_SetLexer()
  1101. //
  1102. void Style_SetLexer(HWND hwnd,PEDITLEXER pLexNew)
  1103. {
  1104.   int i;
  1105.   //WCHAR *p;
  1106.   int rgb;
  1107.   int iValue;
  1108.   int iIdx;
  1109.   // Select default if NULL is specified
  1110.   if (!pLexNew)
  1111.     pLexNew = pLexArray[iDefaultLexer];
  1112.   // Lexer
  1113.   SendMessage(hwnd,SCI_SETLEXER,pLexNew->iLexer,0);
  1114.   if (pLexNew->iLexer == SCLEX_HTML || pLexNew->iLexer == SCLEX_XML || pLexNew->iLexer == SCLEX_PERL)
  1115.     SendMessage(hwnd,SCI_SETSTYLEBITS,7,0);
  1116.   else
  1117.     SendMessage(hwnd,SCI_SETSTYLEBITS,5,0);
  1118.   if (pLexNew->iLexer == SCLEX_CPP)
  1119.     SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"styling.within.preprocessor",(LPARAM)"1");
  1120.   else if (pLexNew->iLexer == SCLEX_PASCAL)
  1121.     SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"lexer.pascal.smart.highlighting",(LPARAM)"1");
  1122.   else if (pLexNew->iLexer == SCLEX_SQL) {
  1123.     SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"sql.backslash.escapes",(LPARAM)"1");
  1124.     SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"lexer.sql.backticks.identifier",(LPARAM)"1");
  1125.   }
  1126.   // Add KeyWord Lists
  1127.   for (i = 0; i < 9; i++)
  1128.     SendMessage(hwnd,SCI_SETKEYWORDS,i,(LPARAM)pLexNew->pKeyWords->pszKeyWords[i]);
  1129.   // Use 2nd default style
  1130.   iIdx = (bUse2ndDefaultStyle) ? 13 : 0;
  1131.   // Font Quality
  1132.   Style_SetFontQuality(hwnd,lexDefault.Styles[0+iIdx].szValue);
  1133.   // Clear
  1134.   SendMessage(hwnd,SCI_CLEARDOCUMENTSTYLE,0,0);
  1135.   // Default Values are always set
  1136.   SendMessage(hwnd,SCI_STYLERESETDEFAULT,0,0);
  1137.   SendMessage(hwnd,SCI_STYLESETCHARACTERSET,STYLE_DEFAULT,(LPARAM)DEFAULT_CHARSET);
  1138.   iBaseFontSize = 10;
  1139.   Style_SetStyles(hwnd,lexDefault.Styles[0+iIdx].iStyle,lexDefault.Styles[0+iIdx].szValue);  // default
  1140.   Style_StrGetSize(lexDefault.Styles[0+iIdx].szValue,&iBaseFontSize);                        // base size
  1141.   // Auto-select codepage according to charset
  1142.   //Style_SetACPfromCharSet(hwnd);
  1143.   if (!Style_StrGetColor(TRUE,lexDefault.Styles[0+iIdx].szValue,&iValue))
  1144.     SendMessage(hwnd,SCI_STYLESETFORE,STYLE_DEFAULT,(LPARAM)GetSysColor(COLOR_WINDOWTEXT));   // default text color
  1145.   if (!Style_StrGetColor(FALSE,lexDefault.Styles[0+iIdx].szValue,&iValue))
  1146.     SendMessage(hwnd,SCI_STYLESETBACK,STYLE_DEFAULT,(LPARAM)GetSysColor(COLOR_WINDOW));       // default window color
  1147.   if (pLexNew->iLexer != SCLEX_NULL)
  1148.     Style_SetStyles(hwnd,pLexNew->Styles[0].iStyle,pLexNew->Styles[0].szValue); // lexer default
  1149.   SendMessage(hwnd,SCI_STYLECLEARALL,0,0);
  1150.   Style_SetStyles(hwnd,lexDefault.Styles[1+iIdx].iStyle,lexDefault.Styles[1+iIdx].szValue); // linenumber
  1151.   Style_SetStyles(hwnd,lexDefault.Styles[2+iIdx].iStyle,lexDefault.Styles[2+iIdx].szValue); // brace light
  1152.   Style_SetStyles(hwnd,lexDefault.Styles[3+iIdx].iStyle,lexDefault.Styles[3+iIdx].szValue); // brace bad
  1153.   Style_SetStyles(hwnd,lexDefault.Styles[4+iIdx].iStyle,lexDefault.Styles[4+iIdx].szValue); // control char
  1154.   Style_SetStyles(hwnd,lexDefault.Styles[5+iIdx].iStyle,lexDefault.Styles[5+iIdx].szValue); // indent guide
  1155.   // More default values...
  1156.   if (Style_StrGetColor(TRUE,lexDefault.Styles[6+iIdx].szValue,&rgb)) { // selection fore
  1157.     SendMessage(hwnd,SCI_SETSELFORE,TRUE,rgb);
  1158.     SendMessage(hwnd,SCI_SETADDITIONALSELFORE,rgb,0);
  1159.   }
  1160.   else {
  1161.     SendMessage(hwnd,SCI_SETSELFORE,0,0);
  1162.     SendMessage(hwnd,SCI_SETADDITIONALSELFORE,0,0);
  1163.   }
  1164.   if (Style_StrGetColor(FALSE,lexDefault.Styles[6+iIdx].szValue,&iValue)) { // selection back
  1165.     SendMessage(hwnd,SCI_SETSELBACK,TRUE,iValue);
  1166.     SendMessage(hwnd,SCI_SETADDITIONALSELBACK,iValue,0);
  1167.   }
  1168.   else {
  1169.     SendMessage(hwnd,SCI_SETSELBACK,TRUE,RGB(0xC0,0xC0,0xC0)); // use a default value...
  1170.     SendMessage(hwnd,SCI_SETADDITIONALSELBACK,RGB(0xC0,0xC0,0xC0),0);
  1171.   }
  1172.   if (Style_StrGetAlpha(lexDefault.Styles[6+iIdx].szValue,&iValue)) { // selection alpha
  1173.     SendMessage(hwnd,SCI_SETSELALPHA,iValue,0);
  1174.     SendMessage(hwnd,SCI_SETADDITIONALSELALPHA,iValue,0);
  1175.   }
  1176.   else {
  1177.     SendMessage(hwnd,SCI_SETSELALPHA,SC_ALPHA_NOALPHA,0);
  1178.     SendMessage(hwnd,SCI_SETADDITIONALSELALPHA,SC_ALPHA_NOALPHA,0);
  1179.   }
  1180.   if (StrStrI(lexDefault.Styles[6+iIdx].szValue,L"eolfilled")) // selection eolfilled
  1181.     SendMessage(hwnd,SCI_SETSELEOLFILLED,1,0);
  1182.   else
  1183.     SendMessage(hwnd,SCI_SETSELEOLFILLED,0,0);
  1184.   if (Style_StrGetColor(TRUE,lexDefault.Styles[7+iIdx].szValue,&rgb)) // whitespace fore
  1185.     SendMessage(hwnd,SCI_SETWHITESPACEFORE,TRUE,rgb);
  1186.   else
  1187.     SendMessage(hwnd,SCI_SETWHITESPACEFORE,0,0);
  1188.   if (Style_StrGetColor(FALSE,lexDefault.Styles[7+iIdx].szValue,&rgb)) // whitespace back
  1189.     SendMessage(hwnd,SCI_SETWHITESPACEBACK,TRUE,rgb);
  1190.   else
  1191.     SendMessage(hwnd,SCI_SETWHITESPACEBACK,0,0);    // use a default value...
  1192.   // whitespace dot size
  1193.   iValue = 1;
  1194.   if (Style_StrGetSize(lexDefault.Styles[7+iIdx].szValue,&iValue)) {
  1195.     WCHAR tch[32];
  1196.     WCHAR wchStyle[COUNTOF(lexDefault.Styles[0].szValue)];
  1197.     lstrcpyn(wchStyle,lexDefault.Styles[7+iIdx].szValue,COUNTOF(lexDefault.Styles[0].szValue));
  1198.     iValue = max(min(iValue,5),0);
  1199.     wsprintf(lexDefault.Styles[7+iIdx].szValue,L"size:%i",iValue);
  1200.     if (Style_StrGetColor(TRUE,wchStyle,&rgb)) {
  1201.       wsprintf(tch,L"; fore:#%02X%02X%02X",
  1202.         (int)GetRValue(rgb),
  1203.         (int)GetGValue(rgb),
  1204.         (int)GetBValue(rgb));
  1205.       lstrcat(lexDefault.Styles[7+iIdx].szValue,tch);
  1206.     }
  1207.     if (Style_StrGetColor(FALSE,wchStyle,&rgb)) {
  1208.       wsprintf(tch,L"; back:#%02X%02X%02X",
  1209.         (int)GetRValue(rgb),
  1210.         (int)GetGValue(rgb),
  1211.         (int)GetBValue(rgb));
  1212.       lstrcat(lexDefault.Styles[7+iIdx].szValue,tch);
  1213.     }
  1214.   }
  1215.   SendMessage(hwnd,SCI_SETWHITESPACESIZE,iValue,0);
  1216.   if (bHiliteCurrentLine) {
  1217.     if (Style_StrGetColor(FALSE,lexDefault.Styles[8+iIdx].szValue,&rgb)) // caret line back
  1218.     {
  1219.       SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,TRUE,0);
  1220.       SendMessage(hwnd,SCI_SETCARETLINEBACK,rgb,0);
  1221.       if (Style_StrGetAlpha(lexDefault.Styles[8+iIdx].szValue,&iValue))
  1222.         SendMessage(hwnd,SCI_SETCARETLINEBACKALPHA,iValue,0);
  1223.       else
  1224.         SendMessage(hwnd,SCI_SETCARETLINEBACKALPHA,SC_ALPHA_NOALPHA,0);
  1225.     }
  1226.     else
  1227.       SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,FALSE,0);
  1228.   }
  1229.   else
  1230.     SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,FALSE,0);
  1231.   // caret fore
  1232.   if (!Style_StrGetColor(TRUE,lexDefault.Styles[9+iIdx].szValue,&rgb))
  1233.     rgb = GetSysColor(COLOR_WINDOWTEXT);
  1234.   if (!VerifyContrast(rgb,SendMessage(hwnd,SCI_STYLEGETBACK,0,0)))
  1235.     rgb = SendMessage(hwnd,SCI_STYLEGETFORE,0,0);
  1236.   SendMessage(hwnd,SCI_SETCARETFORE,rgb,0);
  1237.   SendMessage(hwnd,SCI_SETADDITIONALCARETFORE,rgb,0);
  1238.   // caret style and width
  1239.   if (StrStr(lexDefault.Styles[10+iIdx].szValue,L"block"))
  1240.     SendMessage(hwnd,SCI_SETCARETSTYLE,CARETSTYLE_BLOCK,0);
  1241.   else {
  1242.     iValue = 1;
  1243.     if (Style_StrGetSize(lexDefault.Styles[10+iIdx].szValue,&iValue)) {
  1244.       iValue = max(min(iValue,3),1);
  1245.       wsprintf(lexDefault.Styles[10+iIdx].szValue,L"size:%i",iValue);
  1246.     }
  1247.     SendMessage(hwnd,SCI_SETCARETSTYLE,CARETSTYLE_LINE,0);
  1248.     SendMessage(hwnd,SCI_SETCARETWIDTH,iValue,0);
  1249.   }
  1250.   if (SendMessage(hwnd,SCI_GETEDGEMODE,0,0) == EDGE_LINE) {
  1251.     if (Style_StrGetColor(TRUE,lexDefault.Styles[11+iIdx].szValue,&rgb)) // edge fore
  1252.       SendMessage(hwnd,SCI_SETEDGECOLOUR,rgb,0);
  1253.     else
  1254.       SendMessage(hwnd,SCI_SETEDGECOLOUR,GetSysColor(COLOR_3DLIGHT),0);
  1255.   }
  1256.   else {
  1257.     if (Style_StrGetColor(FALSE,lexDefault.Styles[11+iIdx].szValue,&rgb)) // edge back
  1258.       SendMessage(hwnd,SCI_SETEDGECOLOUR,rgb,0);
  1259.     else
  1260.       SendMessage(hwnd,SCI_SETEDGECOLOUR,GetSysColor(COLOR_3DLIGHT),0);
  1261.   }
  1262.   // Extra Line Spacing
  1263.   if (Style_StrGetSize(lexDefault.Styles[12+iIdx].szValue,&iValue)) {
  1264.     int iAscent = 0;
  1265.     int iDescent = 0;
  1266.     iValue = min(max(iValue,0),64);
  1267.     if (iValue % 2) {
  1268.       iAscent++;
  1269.       iValue--;
  1270.     }
  1271.     iAscent += iValue / 2;
  1272.     iDescent += iValue / 2;
  1273.     SendMessage(hwnd,SCI_SETEXTRAASCENT,(WPARAM)iAscent,0);
  1274.     SendMessage(hwnd,SCI_SETEXTRADESCENT,(WPARAM)iDescent,0);
  1275.     wsprintf(lexDefault.Styles[12+iIdx].szValue,L"size:%i",iValue);
  1276.   }
  1277.   else {
  1278.     SendMessage(hwnd,SCI_SETEXTRAASCENT,0,0);
  1279.     SendMessage(hwnd,SCI_SETEXTRADESCENT,0,0);
  1280.     //wsprintf(lexDefault.Styles[12+iIdx].szValue,L"size:0");
  1281.   }
  1282.   if (SendMessage(hwnd,SCI_GETINDENTATIONGUIDES,0,0) != SC_IV_NONE)
  1283.     Style_SetIndentGuides(hwnd,TRUE);
  1284.   if (pLexNew->iLexer != SCLEX_NULL)
  1285.   {
  1286.     int j;
  1287.     i = 1;
  1288.     while (pLexNew->Styles[i].iStyle != -1) {
  1289.       for (j = 0; j < 4 && (pLexNew->Styles[i].iStyle8[j] != 0 || j == 0); ++j)
  1290.         Style_SetStyles(hwnd,pLexNew->Styles[i].iStyle8[j],pLexNew->Styles[i].szValue);
  1291.       if (pLexNew->iLexer == SCLEX_HTML && pLexNew->Styles[i].iStyle8[0] == SCE_HPHP_DEFAULT) {
  1292.         int iRelated[] = { SCE_HPHP_COMMENT, SCE_HPHP_COMMENTLINE, SCE_HPHP_WORD, SCE_HPHP_HSTRING, SCE_HPHP_SIMPLESTRING, SCE_HPHP_NUMBER,
  1293.                            SCE_HPHP_OPERATOR, SCE_HPHP_VARIABLE, SCE_HPHP_HSTRING_VARIABLE, SCE_HPHP_COMPLEX_VARIABLE };
  1294.         for (j = 0; j < COUNTOF(iRelated); j++)
  1295.           Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
  1296.       }
  1297.       if (pLexNew->iLexer == SCLEX_HTML && pLexNew->Styles[i].iStyle8[0] == SCE_HJ_DEFAULT) {
  1298.         int iRelated[] = { SCE_HJ_COMMENT, SCE_HJ_COMMENTLINE, SCE_HJ_COMMENTDOC, SCE_HJ_KEYWORD, SCE_HJ_WORD, SCE_HJ_DOUBLESTRING,
  1299.                            SCE_HJ_SINGLESTRING, SCE_HJ_STRINGEOL, SCE_HJ_REGEX, SCE_HJ_NUMBER, SCE_HJ_SYMBOLS };
  1300.         for (j = 0; j < COUNTOF(iRelated); j++)
  1301.           Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
  1302.       }
  1303.       if (pLexNew->iLexer == SCLEX_HTML && pLexNew->Styles[i].iStyle8[0] == SCE_HJA_DEFAULT) {
  1304.         int iRelated[] = { SCE_HJA_COMMENT, SCE_HJA_COMMENTLINE, SCE_HJA_COMMENTDOC, SCE_HJA_KEYWORD, SCE_HJA_WORD, SCE_HJA_DOUBLESTRING,
  1305.                            SCE_HJA_SINGLESTRING, SCE_HJA_STRINGEOL, SCE_HJA_REGEX, SCE_HJA_NUMBER, SCE_HJA_SYMBOLS };
  1306.         for (j = 0; j < COUNTOF(iRelated); j++)
  1307.           Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
  1308.       }
  1309.       if (pLexNew->iLexer == SCLEX_HTML && pLexNew->Styles[i].iStyle8[0] == SCE_HB_DEFAULT) {
  1310.         int iRelated[] = { SCE_HB_COMMENTLINE, SCE_HB_WORD, SCE_HB_IDENTIFIER, SCE_HB_STRING, SCE_HB_STRINGEOL, SCE_HB_NUMBER };
  1311.         for (j = 0; j < COUNTOF(iRelated); j++)
  1312.           Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
  1313.       }
  1314.       if (pLexNew->iLexer == SCLEX_HTML && pLexNew->Styles[i].iStyle8[0] == SCE_HBA_DEFAULT) {
  1315.         int iRelated[] = { SCE_HBA_COMMENTLINE, SCE_HBA_WORD, SCE_HBA_IDENTIFIER, SCE_HBA_STRING, SCE_HBA_STRINGEOL, SCE_HBA_NUMBER };
  1316.         for (j = 0; j < COUNTOF(iRelated); j++)
  1317.           Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
  1318.       }
  1319.       if ((pLexNew->iLexer == SCLEX_HTML || pLexNew->iLexer == SCLEX_XML) && pLexNew->Styles[i].iStyle8[0] == SCE_H_SGML_DEFAULT) {
  1320.         int iRelated[] = { SCE_H_SGML_COMMAND, SCE_H_SGML_1ST_PARAM, SCE_H_SGML_DOUBLESTRING, SCE_H_SGML_SIMPLESTRING, SCE_H_SGML_ERROR,
  1321.                            SCE_H_SGML_SPECIAL, SCE_H_SGML_ENTITY, SCE_H_SGML_COMMENT, SCE_H_SGML_1ST_PARAM_COMMENT, SCE_H_SGML_BLOCK_DEFAULT };
  1322.         for (j = 0; j < COUNTOF(iRelated); j++)
  1323.           Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
  1324.       }
  1325.       if ((pLexNew->iLexer == SCLEX_HTML || pLexNew->iLexer == SCLEX_XML) && pLexNew->Styles[i].iStyle8[0] == SCE_H_CDATA) {
  1326.         int iRelated[] = { SCE_HP_START, SCE_HP_DEFAULT, SCE_HP_COMMENTLINE, SCE_HP_NUMBER, SCE_HP_STRING,
  1327.                            SCE_HP_CHARACTER, SCE_HP_WORD, SCE_HP_TRIPLE, SCE_HP_TRIPLEDOUBLE, SCE_HP_CLASSNAME,
  1328.                            SCE_HP_DEFNAME, SCE_HP_OPERATOR, SCE_HP_IDENTIFIER, SCE_HPA_START, SCE_HPA_DEFAULT,
  1329.                            SCE_HPA_COMMENTLINE, SCE_HPA_NUMBER, SCE_HPA_STRING, SCE_HPA_CHARACTER, SCE_HPA_WORD,
  1330.                            SCE_HPA_TRIPLE, SCE_HPA_TRIPLEDOUBLE, SCE_HPA_CLASSNAME, SCE_HPA_DEFNAME, SCE_HPA_OPERATOR,
  1331.                            SCE_HPA_IDENTIFIER };
  1332.         for (j = 0; j < COUNTOF(iRelated); j++)
  1333.           Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
  1334.       }
  1335.       if (pLexNew->iLexer == SCLEX_XML && pLexNew->Styles[i].iStyle8[0] == SCE_H_CDATA) {
  1336.         int iRelated[] = { SCE_H_SCRIPT, SCE_H_ASP, SCE_H_ASPAT, SCE_H_QUESTION,
  1337.                            SCE_HPHP_DEFAULT, SCE_HPHP_COMMENT, SCE_HPHP_COMMENTLINE, SCE_HPHP_WORD, SCE_HPHP_HSTRING,
  1338.                            SCE_HPHP_SIMPLESTRING, SCE_HPHP_NUMBER, SCE_HPHP_OPERATOR, SCE_HPHP_VARIABLE,
  1339.                            SCE_HPHP_HSTRING_VARIABLE, SCE_HPHP_COMPLEX_VARIABLE, SCE_HJ_START, SCE_HJ_DEFAULT,
  1340.                            SCE_HJ_COMMENT, SCE_HJ_COMMENTLINE, SCE_HJ_COMMENTDOC, SCE_HJ_KEYWORD, SCE_HJ_WORD,
  1341.                            SCE_HJ_DOUBLESTRING, SCE_HJ_SINGLESTRING, SCE_HJ_STRINGEOL, SCE_HJ_REGEX, SCE_HJ_NUMBER,
  1342.                            SCE_HJ_SYMBOLS, SCE_HJA_START, SCE_HJA_DEFAULT, SCE_HJA_COMMENT, SCE_HJA_COMMENTLINE,
  1343.                            SCE_HJA_COMMENTDOC, SCE_HJA_KEYWORD, SCE_HJA_WORD, SCE_HJA_DOUBLESTRING, SCE_HJA_SINGLESTRING,
  1344.                            SCE_HJA_STRINGEOL, SCE_HJA_REGEX, SCE_HJA_NUMBER, SCE_HJA_SYMBOLS, SCE_HB_START, SCE_HB_DEFAULT,
  1345.                            SCE_HB_COMMENTLINE, SCE_HB_WORD, SCE_HB_IDENTIFIER, SCE_HB_STRING, SCE_HB_STRINGEOL,
  1346.                            SCE_HB_NUMBER, SCE_HBA_START, SCE_HBA_DEFAULT, SCE_HBA_COMMENTLINE, SCE_HBA_WORD,
  1347.                            SCE_HBA_IDENTIFIER, SCE_HBA_STRING, SCE_HBA_STRINGEOL, SCE_HBA_NUMBER, SCE_HP_START,
  1348.                            SCE_HP_DEFAULT, SCE_HP_COMMENTLINE, SCE_HP_NUMBER, SCE_HP_STRING, SCE_HP_CHARACTER, SCE_HP_WORD,
  1349.                            SCE_HP_TRIPLE, SCE_HP_TRIPLEDOUBLE, SCE_HP_CLASSNAME, SCE_HP_DEFNAME, SCE_HP_OPERATOR,
  1350.                            SCE_HP_IDENTIFIER, SCE_HPA_START, SCE_HPA_DEFAULT, SCE_HPA_COMMENTLINE, SCE_HPA_NUMBER,
  1351.                            SCE_HPA_STRING, SCE_HPA_CHARACTER, SCE_HPA_WORD, SCE_HPA_TRIPLE, SCE_HPA_TRIPLEDOUBLE,
  1352.                            SCE_HPA_CLASSNAME, SCE_HPA_DEFNAME, SCE_HPA_OPERATOR, SCE_HPA_IDENTIFIER };
  1353.         for (j = 0; j < COUNTOF(iRelated); j++)
  1354.           Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
  1355.       }
  1356.       if (pLexNew->iLexer == SCLEX_CPP && pLexNew->Styles[i].iStyle8[0] == SCE_C_COMMENT) {
  1357.         int iRelated[] = { SCE_C_COMMENTLINE, SCE_C_COMMENTDOC, SCE_C_COMMENTLINEDOC, SCE_C_COMMENTDOCKEYWORD, SCE_C_COMMENTDOCKEYWORDERROR };
  1358.         for (j = 0; j < COUNTOF(iRelated); j++)
  1359.           Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
  1360.       }
  1361.       if (pLexNew -> iLexer == SCLEX_SQL && pLexNew->Styles[i].iStyle8[0] == SCE_SQL_COMMENT) {
  1362.         int iRelated[] = { SCE_SQL_COMMENTLINE, SCE_SQL_COMMENTDOC, SCE_SQL_COMMENTLINEDOC, SCE_SQL_COMMENTDOCKEYWORD, SCE_SQL_COMMENTDOCKEYWORDERROR };
  1363.         for (j = 0; j < COUNTOF(iRelated); j++)
  1364.           Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
  1365.       }
  1366.       i++;
  1367.     }
  1368.   }
  1369.   SendMessage(hwnd,SCI_COLOURISE,0,(LPARAM)-1);
  1370.   // Save current lexer
  1371.   pLexCurrent = pLexNew;
  1372. }
  1373. //=============================================================================
  1374. //
  1375. //  Style_SetLongLineColors()
  1376. //
  1377. void Style_SetLongLineColors(HWND hwnd)
  1378. {
  1379.   int rgb;
  1380.   // Use 2nd default style
  1381.   int iIdx = (bUse2ndDefaultStyle) ? 13 : 0;
  1382.   if (SendMessage(hwnd,SCI_GETEDGEMODE,0,0) == EDGE_LINE) {
  1383.     if (Style_StrGetColor(TRUE,lexDefault.Styles[11+iIdx].szValue,&rgb)) // edge fore
  1384.       SendMessage(hwnd,SCI_SETEDGECOLOUR,rgb,0);
  1385.     else
  1386.       SendMessage(hwnd,SCI_SETEDGECOLOUR,GetSysColor(COLOR_3DLIGHT),0);
  1387.   }
  1388.   else {
  1389.     if (Style_StrGetColor(FALSE,lexDefault.Styles[11+iIdx].szValue,&rgb)) // edge back
  1390.       SendMessage(hwnd,SCI_SETEDGECOLOUR,rgb,0);
  1391.     else
  1392.       SendMessage(hwnd,SCI_SETEDGECOLOUR,GetSysColor(COLOR_3DLIGHT),0);
  1393.   }
  1394. }
  1395. //=============================================================================
  1396. //
  1397. //  Style_SetCurrentLineBackground()
  1398. //
  1399. void Style_SetCurrentLineBackground(HWND hwnd)
  1400. {
  1401.   int rgb, iValue;
  1402.   // Use 2nd default style
  1403.   int iIdx = (bUse2ndDefaultStyle) ? 13 : 0;
  1404.   if (bHiliteCurrentLine) {
  1405.     if (Style_StrGetColor(FALSE,lexDefault.Styles[8+iIdx].szValue,&rgb)) // caret line back
  1406.     {
  1407.       SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,TRUE,0);
  1408.       SendMessage(hwnd,SCI_SETCARETLINEBACK,rgb,0);
  1409.       if (Style_StrGetAlpha(lexDefault.Styles[8+iIdx].szValue,&iValue))
  1410.         SendMessage(hwnd,SCI_SETCARETLINEBACKALPHA,iValue,0);
  1411.       else
  1412.         SendMessage(hwnd,SCI_SETCARETLINEBACKALPHA,SC_ALPHA_NOALPHA,0);
  1413.     }
  1414.     else
  1415.       SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,FALSE,0);
  1416.   }
  1417.   else
  1418.     SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,FALSE,0);
  1419. }
  1420. //=============================================================================
  1421. //
  1422. //  Style_SniffShebang()
  1423. //
  1424. PEDITLEXER __fastcall Style_SniffShebang(char *pchText)
  1425. {
  1426.   if (StrCmpNA(pchText,"#!",2) == 0) {
  1427.     char *pch = pchText + 2;
  1428.     while (*pch == ' ' || *pch == 't')
  1429.       pch++;
  1430.     while (*pch && *pch != ' ' && *pch != 't' && *pch != 'r' && *pch != 'n')
  1431.       pch++;
  1432.     if ((pch - pchText) >= 3 && StrCmpNA(pch-3,"env",3) == 0) {
  1433.       while (*pch == ' ')
  1434.         pch++;
  1435.       while (*pch && *pch != ' ' && *pch != 't' && *pch != 'r' && *pch != 'n')
  1436.         pch++;
  1437.     }
  1438.     if ((pch - pchText) >= 3 && StrCmpNIA(pch-3,"php",3) == 0)
  1439.       return(&lexHTML);
  1440.     else if ((pch - pchText) >= 4 && StrCmpNIA(pch-4,"perl",4) == 0)
  1441.       return(&lexPL);
  1442.     else if ((pch - pchText) >= 6 && StrCmpNIA(pch-6,"python",6) == 0)
  1443.       return(&lexPY);
  1444.   }
  1445.   return(NULL);
  1446. }
  1447. //=============================================================================
  1448. //
  1449. //  Style_MatchLexer()
  1450. //
  1451. PEDITLEXER __fastcall Style_MatchLexer(LPCWSTR lpszMatch,BOOL bCheckNames)
  1452. {
  1453.   int i;
  1454.   WCHAR  tch[256+16];
  1455.   WCHAR  *p1,*p2;
  1456.   if (!bCheckNames) {
  1457.     for (i = 0; i < NUMLEXERS; i++) {
  1458.       ZeroMemory(tch,sizeof(WCHAR)*COUNTOF(tch));
  1459.       lstrcpy(tch,pLexArray[i]->szExtensions);
  1460.       p1 = tch;
  1461.       while (*p1) {
  1462.         if (p2 = StrChr(p1,L';'))
  1463.           *p2 = L'';
  1464.         else
  1465.           p2 = StrEnd(p1);
  1466.         StrTrim(p1,L" .");
  1467.         if (lstrcmpi(p1,lpszMatch) == 0)
  1468.           return(pLexArray[i]);
  1469.         p1 = p2+1;
  1470.       }
  1471.     }
  1472.   }
  1473.   else {
  1474.     int cch = lstrlen(lpszMatch);
  1475.     if (cch >= 3) {
  1476.       for (i = 0; i < NUMLEXERS; i++) {
  1477.         if (StrCmpNI(pLexArray[i]->pszName,lpszMatch,cch) == 0)
  1478.           return(pLexArray[i]);
  1479.       }
  1480.     }
  1481.   }
  1482.   return(NULL);
  1483. }
  1484. //=============================================================================
  1485. //
  1486. //  Style_SetLexerFromFile()
  1487. //
  1488. extern int fNoHTMLGuess;
  1489. extern int fNoCGIGuess;
  1490. extern FILEVARS fvCurFile;
  1491. void Style_SetLexerFromFile(HWND hwnd,LPCWSTR lpszFile)
  1492. {
  1493.   LPWSTR lpszExt;
  1494.   BOOL  bFound = FALSE;
  1495.   PEDITLEXER pLexNew = pLexArray[iDefaultLexer];
  1496.   PEDITLEXER pLexSniffed;
  1497.   if ((fvCurFile.mask & FV_MODE) && fvCurFile.tchMode[0]) {
  1498.     WCHAR wchMode[32];
  1499.     PEDITLEXER pLexMode;
  1500.     UINT cp = SendMessage(hwnd,SCI_GETCODEPAGE,0,0);
  1501.     MultiByteToWideChar(cp,0,fvCurFile.tchMode,-1,wchMode,COUNTOF(wchMode));
  1502.     if (!fNoCGIGuess && (lstrcmpi(wchMode,L"cgi") == 0 || lstrcmpi(wchMode,L"fcgi") == 0)) {
  1503.       char tchText[256];
  1504.       SendMessage(hwnd,SCI_GETTEXT,(WPARAM)COUNTOF(tchText)-1,(LPARAM)tchText);
  1505.       StrTrimA(tchText," tnr");
  1506.       if (pLexSniffed = Style_SniffShebang(tchText)) {
  1507.         pLexNew = pLexSniffed;
  1508.         bFound = TRUE;
  1509.       }
  1510.     }
  1511.     if (!bFound) {
  1512.       if (pLexMode = Style_MatchLexer(wchMode,FALSE)) {
  1513.         pLexNew = pLexMode;
  1514.         bFound = TRUE;
  1515.       }