Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

3475 lines (2983 sloc) 152.465 kb
/******************************************************************************
*
*
* Notepad2
*
* Styles.c
* Scintilla Style Management
*
* See Readme.txt for more information about this source code.
* Please send me your comments to this work.
*
* See License.txt for details about distribution and modification.
*
* (c) Florian Balmer 1996-2010
* florian.balmer@gmail.com
* http://www.flos-freeware.ch
*
*
******************************************************************************/
#define _WIN32_WINNT 0x501
#include <windows.h>
#include <commctrl.h>
#include <commdlg.h>
#include <shlobj.h>
#include <shlwapi.h>
#include <stdio.h>
#include "dialogs.h"
#include "helpers.h"
#include "notepad2.h"
#include "scintilla.h"
#include "scilexer.h"
#include "edit.h"
#include "styles.h"
#include "resource.h"
#define MULTI_STYLE(a,b,c,d) ((a)|(b<<8)|(c<<16)|(d<<24))
KEYWORDLIST KeyWords_NULL = {
"", "", "", "", "", "", "", "", "" };
EDITLEXER lexDefault = { SCLEX_NULL, 63000, L"Default Text", L"txt; text; wtx; log; asc; doc; diz; nfo", L"", &KeyWords_NULL, {
/* 0 */ { STYLE_DEFAULT, L"Default Style", L"font:Default; size:10", L"" },
/* 1 */ { STYLE_LINENUMBER, 63101, L"Margins and Line Numbers", L"size:-2; fore:#FF0000", L"" },
/* 2 */ { STYLE_BRACELIGHT, 63102, L"Matching Braces", L"size:+1; bold; fore:#FF0000", L"" },
/* 3 */ { STYLE_BRACEBAD, 63103, L"Matching Braces Error", L"size:+1; bold; fore:#000080", L"" },
/* 4 */ { STYLE_CONTROLCHAR, 63104, L"Control Characters (Font)", L"size:-1", L"" },
/* 5 */ { STYLE_INDENTGUIDE, 63105, L"Indentation Guide (Color)", L"fore:#FFC000", L"" },
/* 6 */ { SCI_SETSELFORE+SCI_SETSELBACK, 63106, L"Selected Text (Colors)", L"back:#0A246A; eolfilled; alpha:95", L"" },
/* 7 */ { SCI_SETWHITESPACEFORE+SCI_SETWHITESPACEBACK+SCI_SETWHITESPACESIZE, 63107, L"Whitespace (Colors, Size 0-5)", L"fore:#FF4000", L"" },
/* 8 */ { SCI_SETCARETLINEBACK, 63108, L"Current Line Background (Color)", L"back:#FFFF00; alpha:50", L"" },
/* 9 */ { SCI_SETCARETFORE, 63109, L"Caret Foreground (Color)", L"", L"" },
/* 10 */ { SCI_SETCARETWIDTH, 63110, L"Caret Width (Size 1-3)", L"", L"" },
/* 11 */ { SCI_SETEDGECOLOUR, 63111, L"Long Line Marker (Colors)", L"fore:#FFC000", L"" },
/* 12 */ { SCI_SETEXTRAASCENT+SCI_SETEXTRADESCENT, 63112, L"Extra Line Spacing (Size)", L"size:2", L"" },
/* 13 */ { STYLE_DEFAULT, 63113, L"2nd Default Style", L"font:Courier New; size:10", L"" },
/* 14 */ { STYLE_LINENUMBER, 63114, L"2nd Margins and Line Numbers", L"font:Tahoma; size:-2; fore:#FF0000", L"" },
/* 15 */ { STYLE_BRACELIGHT, 63115, L"2nd Matching Braces", L"bold; fore:#FF0000", L"" },
/* 16 */ { STYLE_BRACEBAD, 63116, L"2nd Matching Braces Error", L"bold; fore:#000080", L"" },
/* 17 */ { STYLE_CONTROLCHAR, 63117, L"2nd Control Characters (Font)", L"size:-1", L"" },
/* 18 */ { STYLE_INDENTGUIDE, 63118, L"2nd Indentation Guide (Color)", L"fore:#FFC000", L"" },
/* 19 */ { SCI_SETSELFORE+SCI_SETSELBACK, 63119, L"2nd Selected Text (Colors)", L"eolfilled", L"" },
/* 20 */ { SCI_SETWHITESPACEFORE+SCI_SETWHITESPACEBACK+SCI_SETWHITESPACESIZE, 63120, L"2nd Whitespace (Colors, Size 0-5)", L"fore:#FF4000", L"" },
/* 21 */ { SCI_SETCARETLINEBACK, 63121, L"2nd Current Line Background (Color)", L"", L"" },
/* 22 */ { SCI_SETCARETFORE, 63122, L"2nd Caret Foreground (Color)", L"", L"" },
/* 23 */ { SCI_SETCARETWIDTH, 63123, L"2nd Caret Width (Size 1-3)", L"", L"" },
/* 24 */ { SCI_SETEDGECOLOUR, 63124, L"2nd Long Line Marker (Colors)", L"fore:#FFC000", L"" },
/* 25 */ { SCI_SETEXTRAASCENT+SCI_SETEXTRADESCENT, 63125, L"2nd Extra Line Spacing (Size)", L"", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_HTML = {
"a abbr accept accept-charset accesskey acronym action address align alink alt and applet archive "
"area article aside async audio autocomplete autofocus axis b background base basefont bb bdo "
"bgcolor big blockquote body border bordercolor br button canvas caption cellpadding cellspacing "
"center char charoff charset checkbox checked cite class classid clear code codebase codetype col "
"colgroup color cols colspan command compact content contenteditable contextmenu coords data "
"datafld dataformatas datagrid datalist datapagesize datasrc datetime dd declare defer del "
"details dfn dialog dir disabled div dl draggable dt em embed enctype event eventsource face "
"fieldset figure file font footer for form formaction formenctype formmethod formnovalidate "
"formtarget frame frameborder frameset h1 h2 h3 h4 h5 h6 head header headers height hidden hr "
"href hreflang hspace html http-equiv i id iframe image img input ins isindex ismap kbd keygen "
"label lang language leftmargin legend li link list longdesc manifest map marginheight "
"marginwidth mark max maxlength media menu meta meter method min multiple name nav noframes "
"nohref noresize noscript noshade novalidate nowrap object ol onblur onchange onclick ondblclick "
"onfocus onkeydown onkeypress onkeyup onload onmessage onmousedown onmousemove onmouseout "
"onmouseover onmouseup onreset onselect onsubmit onunload optgroup option output p param password "
"pattern ping placeholder pre profile progress prompt public q radio readonly rel required reset "
"rev reversed rows rowspan rp rt ruby rules s samp sandbox scheme scope scoped script scrolling "
"seamless section select selected shape size sizes small source span spellcheck src standby start "
"step strike strong style sub submit summary sup tabindex table target tbody td text textarea "
"tfoot th thead time title topmargin tr tt type u ul usemap valign value valuetype var version "
"video vlink vspace width xml xmlns !doctype",
"abstract boolean break byte case catch char class const continue debugger default delete do "
"double else enum export extends false final finally float for function goto if implements "
"import in instanceof int interface long native new null package private protected public "
"return short static super switch synchronized this throw throws transient true try typeof var "
"void volatile while with",
"and begin case call continue do each else elseif end erase error event exit false for function get "
"gosub goto if implement in load loop lset me mid new next not nothing on or property raiseevent "
"rem resume return rset select set stop sub then to true unload until wend while with withevents "
"attribute alias as boolean byref byte byval const compare currency date declare dim double enum "
"explicit friend global integer let lib long module object option optional preserve private property "
"public redim single static string type variant",
"and assert break class continue def del elif else except exec finally for from global if import in is "
"lambda None not or pass print raise return try while yield",
"__callstatic __class__ __dir__ __file__ __function__ __get __isset __line__ __method__ "
"__namespace__ __set __sleep __unset __wakeup abstract and argc argv array as break case catch "
"cfunction class clone const continue declare default define die do e_all e_error e_fatal "
"e_notice e_parse e_strict e_warning echo else elseif empty enddeclare endfor endforeach endif "
"endswitch endwhile eval exception exit extends false final for foreach function global goto "
"http_cookie_vars http_env_vars http_get_vars http_post_files http_post_vars http_server_vars if "
"implements include include_once instanceof interface isset list namespace new not null "
"old_function or parent php_self print private protected public require require_once return "
"static stdclass switch this throw true try unset use var virtual while xor",
"", "", "", "" };
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, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
{ MULTI_STYLE(SCE_H_TAG,SCE_H_TAGEND,0,0), 63136, L"HTML Tag", L"fore:#648000", L"" },
{ SCE_H_TAGUNKNOWN, 63137, L"HTML Unknown Tag", L"fore:#C80000; back:#FFFF80", L"" },
{ SCE_H_ATTRIBUTE, 63138, L"HTML Attribute", L"fore:#FF4000", L"" },
{ SCE_H_ATTRIBUTEUNKNOWN, 63139, L"HTML Unknown Attribute", L"fore:#C80000; back:#FFFF80", L"" },
{ SCE_H_VALUE, 63140, L"HTML Value", L"fore:#3A6EA5", L"" },
{ MULTI_STYLE(SCE_H_DOUBLESTRING,SCE_H_SINGLESTRING,0,0), 63141, L"HTML String", L"fore:#3A6EA5", L"" },
{ SCE_H_OTHER, 63142, L"HTML Other Inside Tag", L"fore:#3A6EA5", L"" },
{ MULTI_STYLE(SCE_H_COMMENT,SCE_H_XCCOMMENT,0,0), 63143, L"HTML Comment", L"fore:#646464", L"" },
{ SCE_H_ENTITY, 63144, L"HTML Entity", L"fore:#B000B0", L"" },
{ SCE_H_DEFAULT, 63256, L"HTML Element Text", L"", L"" },
{ MULTI_STYLE(SCE_H_XMLSTART,SCE_H_XMLEND,0,0), 63145, L"XML Identifier", L"bold; fore:#881280", L"" },
{ SCE_H_SGML_DEFAULT, 63237, L"SGML", L"fore:#881280", L"" },
{ SCE_H_CDATA, 63147, L"CDATA", L"fore:#646464", L"" },
{ MULTI_STYLE(SCE_H_ASP,SCE_H_ASPAT,0,0), 63146, L"ASP Start Tag", L"bold; fore:#000080", L"" },
//{ SCE_H_SCRIPT, L"Script", L"", L"" },
{ SCE_H_QUESTION, 63148, L"PHP Start Tag", L"bold; fore:#000080", L"" },
{ SCE_HPHP_DEFAULT, 63149, L"PHP Default", L"", L"" },
{ MULTI_STYLE(SCE_HPHP_COMMENT,SCE_HPHP_COMMENTLINE,0,0), 63157, L"PHP Comment", L"fore:#FF8000", L"" },
{ SCE_HPHP_WORD, 63152, L"PHP Keyword", L"bold; fore:#A46000", L"" },
{ SCE_HPHP_HSTRING, 63150, L"PHP String", L"fore:#008000", L"" },
{ SCE_HPHP_SIMPLESTRING, 63151, L"PHP Simple String", L"fore:#008000", L"" },
{ SCE_HPHP_NUMBER, 63153, L"PHP Number", L"fore:#FF0000", L"" },
{ SCE_HPHP_OPERATOR, 63158, L"PHP Operator", L"fore:#B000B0", L"" },
{ SCE_HPHP_VARIABLE, 63154, L"PHP Variable", L"italic; fore:#000080", L"" },
{ SCE_HPHP_HSTRING_VARIABLE, 63155, L"PHP String Variable", L"italic; fore:#000080", L"" },
{ SCE_HPHP_COMPLEX_VARIABLE, 63156, L"PHP Complex Variable", L"italic; fore:#000080", L"" },
{ MULTI_STYLE(SCE_HJ_DEFAULT,SCE_HJ_START,0,0), 63159, L"JS Default", L"", L"" },
{ MULTI_STYLE(SCE_HJ_COMMENT,SCE_HJ_COMMENTLINE,SCE_HJ_COMMENTDOC,0), 63160, L"JS Comment", L"fore:#646464", L"" },
{ SCE_HJ_KEYWORD, 63163, L"JS Keyword", L"bold; fore:#A46000", L"" },
{ SCE_HJ_WORD, 63162, L"JS Identifier", L"", L"" },
{ MULTI_STYLE(SCE_HJ_DOUBLESTRING,SCE_HJ_SINGLESTRING,SCE_HJ_STRINGEOL,0), 63164, L"JS String", L"fore:#008000", L"" },
{ SCE_HJ_REGEX, 63166, L"JS Regex", L"fore:#006633; back:#FFF1A8", L"" },
{ SCE_HJ_NUMBER, 63161, L"JS Number", L"fore:#FF0000", L"" },
{ SCE_HJ_SYMBOLS, 63165, L"JS Symbols", L"fore:#B000B0", L"" },
{ MULTI_STYLE(SCE_HJA_DEFAULT,SCE_HJA_START,0,0), 63167, L"ASP JS Default", L"", L"" },
{ MULTI_STYLE(SCE_HJA_COMMENT,SCE_HJA_COMMENTLINE,SCE_HJA_COMMENTDOC,0), 63168, L"ASP JS Comment", L"fore:#646464", L"" },
{ SCE_HJA_KEYWORD, 63171, L"ASP JS Keyword", L"bold; fore:#A46000", L"" },
{ SCE_HJA_WORD, 63170, L"ASP JS Identifier", L"", L"" },
{ MULTI_STYLE(SCE_HJA_DOUBLESTRING,SCE_HJA_SINGLESTRING,SCE_HJA_STRINGEOL,0), 63172, L"ASP JS String", L"fore:#008000", L"" },
{ SCE_HJA_REGEX, 63174, L"ASP JS Regex", L"fore:#006633; back:#FFF1A8", L"" },
{ SCE_HJA_NUMBER, 63169, L"ASP JS Number", L"fore:#FF0000", L"" },
{ SCE_HJA_SYMBOLS, 63173, L"ASP JS Symbols", L"fore:#B000B0", L"" },
{ MULTI_STYLE(SCE_HB_DEFAULT,SCE_HB_START,0,0), 63175, L"VBS Default", L"", L"" },
{ SCE_HB_COMMENTLINE, 63176, L"VBS Comment", L"fore:#646464", L"" },
{ SCE_HB_WORD, 63178, L"VBS Keyword", L"bold; fore:#B000B0", L"" },
{ SCE_HB_IDENTIFIER, 63180, L"VBS Identifier", L"", L"" },
{ MULTI_STYLE(SCE_HB_STRING,SCE_HB_STRINGEOL,0,0), 63179, L"VBS String", L"fore:#008000", L"" },
{ SCE_HB_NUMBER, 63177, L"VBS Number", L"fore:#FF0000", L"" },
{ MULTI_STYLE(SCE_HBA_DEFAULT,SCE_HBA_START,0,0), 63181, L"ASP VBS Default", L"", L"" },
{ SCE_HBA_COMMENTLINE, 63182, L"ASP VBS Comment", L"fore:#646464", L"" },
{ SCE_HBA_WORD, 63184, L"ASP VBS Keyword", L"bold; fore:#B000B0", L"" },
{ SCE_HBA_IDENTIFIER, 63186, L"ASP VBS Identifier", L"", L"" },
{ MULTI_STYLE(SCE_HBA_STRING,SCE_HBA_STRINGEOL,0,0), 63185, L"ASP VBS String", L"fore:#008000", L"" },
{ SCE_HBA_NUMBER, 63183, L"ASP VBS Number", L"fore:#FF0000", L"" },
//{ SCE_HP_START, L"Phyton Start", L"", L"" },
//{ SCE_HP_DEFAULT, L"Phyton Default", L"", L"" },
//{ SCE_HP_COMMENTLINE, L"Phyton Comment Line", L"", L"" },
//{ SCE_HP_NUMBER, L"Phyton Number", L"", L"" },
//{ SCE_HP_STRING, L"Phyton String", L"", L"" },
//{ SCE_HP_CHARACTER, L"Phyton Character", L"", L"" },
//{ SCE_HP_WORD, L"Phyton Keyword", L"", L"" },
//{ SCE_HP_TRIPLE, L"Phyton Triple", L"", L"" },
//{ SCE_HP_TRIPLEDOUBLE, L"Phyton Triple Double", L"", L"" },
//{ SCE_HP_CLASSNAME, L"Phyton Class Name", L"", L"" },
//{ SCE_HP_DEFNAME, L"Phyton Def Name", L"", L"" },
//{ SCE_HP_OPERATOR, L"Phyton Operator", L"", L"" },
//{ SCE_HP_IDENTIFIER, L"Phyton Identifier", L"", L"" },
//{ SCE_HPA_START, L"ASP Phyton Start", L"", L"" },
//{ SCE_HPA_DEFAULT, L"ASP Phyton Default", L"", L"" },
//{ SCE_HPA_COMMENTLINE, L"ASP Phyton Comment Line", L"", L"" },
//{ SCE_HPA_NUMBER, L"ASP Phyton Number", L"", L"" },
//{ SCE_HPA_STRING, L"ASP Phyton String", L"", L"" },
//{ SCE_HPA_CHARACTER, L"ASP Phyton Character", L"", L"" },
//{ SCE_HPA_WORD, L"ASP Phyton Keyword", L"", L"" },
//{ SCE_HPA_TRIPLE, L"ASP Phyton Triple", L"", L"" },
//{ SCE_HPA_TRIPLEDOUBLE, L"ASP Phyton Triple Double", L"", L"" },
//{ SCE_HPA_CLASSNAME, L"ASP Phyton Class Name", L"", L"" },
//{ SCE_HPA_DEFNAME, L"ASP Phyton Def Name", L"", L"" },
//{ SCE_HPA_OPERATOR, L"ASP Phyton Operator", L"", L"" },
//{ SCE_HPA_IDENTIFIER, L"ASP Phyton Identifier", L"", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_XML = {
"", "", "", "", "", "", "", "", "" };
EDITLEXER lexXML = { SCLEX_XML, 63002, L"XML Document", L"xml; xsl; rss; svg; xul; xsd; xslt; axl; rdf; xaml; vcproj", L"", &KeyWords_XML, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
{ MULTI_STYLE(SCE_H_TAG,SCE_H_TAGUNKNOWN,SCE_H_TAGEND,0), 63187, L"XML Tag", L"fore:#881280", L"" },
{ MULTI_STYLE(SCE_H_ATTRIBUTE,SCE_H_ATTRIBUTEUNKNOWN,0,0), 63188, L"XML Attribute", L"fore:#994500", L"" },
{ SCE_H_VALUE, 63189, L"XML Value", L"fore:#1A1AA6", L"" },
{ MULTI_STYLE(SCE_H_DOUBLESTRING,SCE_H_SINGLESTRING,0,0), 63190, L"XML String", L"fore:#1A1AA6", L"" },
{ SCE_H_OTHER, 63191, L"XML Other Inside Tag", L"fore:#1A1AA6", L"" },
{ MULTI_STYLE(SCE_H_COMMENT,SCE_H_XCCOMMENT,0,0), 63192, L"XML Comment", L"fore:#646464", L"" },
{ SCE_H_ENTITY, 63193, L"XML Entity", L"fore:#B000B0", L"" },
{ SCE_H_DEFAULT, 63257, L"XML Element Text", L"", L"" },
{ MULTI_STYLE(SCE_H_XMLSTART,SCE_H_XMLEND,0,0), 63145, L"XML Identifier", L"bold; fore:#881280", L"" },
{ SCE_H_SGML_DEFAULT, 63237, L"SGML", L"fore:#881280", L"" },
{ SCE_H_CDATA, 63147, L"CDATA", L"fore:#646464", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_CSS = {
"background background-attachment background-color background-image "
"background-position background-repeat border border-bottom "
"border-bottom-width border-color border-left border-left-width border-right "
"border-right-width border-style border-top border-top-width border-width "
"clear color display float font font-family font-size font-style font-variant "
"font-weight height letter-spacing line-height list-style list-style-image "
"list-style-position list-style-type margin margin-bottom margin-left "
"margin-right margin-top padding padding-bottom padding-left padding-right "
"padding-top text-align text-decoration text-indent text-transform "
"vertical-align white-space width word-spacing",
"first-letter first-line link active visited first-child "
"focus hover lang before after left right first",
"ascent azimuth baseline bbox border-bottom-color border-bottom-style "
"border-collapse border-color border-left-color border-left-style "
"border-right-color border-right-style border-spacing border-style "
"border-top-color border-top-style bottom cap-height caption-side centerline "
"clip content counter-increment counter-reset cue cue-after cue-before cursor "
"definition-src descent direction elevation empty-cells font-size-adjust "
"font-stretch left marker-offset marks mathline max-height max-width "
"min-height min-width orphans outline outline-color outline-style "
"outline-width overflow page page-break-after page-break-before "
"page-break-inside panose-1 pause pause-after pause-before pitch pitch-range "
"play-during position quotes richness right size slope speak speak-header "
"speak-numeral speak-punctuation speech-rate src stemh stemv stress "
"table-layout text-shadow top topline unicode-bidi unicode-range units-per-em "
"visibility voice-family volume widows widths x-height z-index",
"", "", "", "", "", "" };
EDITLEXER lexCSS = { SCLEX_CSS, 63003, L"CSS Style Sheets", L"css", L"", &KeyWords_CSS, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_CSS_DEFAULT, L"Default", L"", L"" },
{ SCE_CSS_COMMENT, 63127, L"Comment", L"fore:#646464", L"" },
{ SCE_CSS_TAG, 63136, L"HTML Tag", L"bold; fore:#0A246A", L"" },
{ SCE_CSS_CLASS, 63194, L"Tag-Class", L"fore:#648000", L"" },
{ SCE_CSS_ID, 63195, L"Tag-Id", L"fore:#648000", L"" },
{ SCE_CSS_ATTRIBUTE, 63196, L"Tag-Attribute", L"italic; fore:#648000", L"" },
{ 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"" },
{ SCE_CSS_UNKNOWN_PSEUDOCLASS, 63198, L"Unknown Pseudo-class", L"fore:#C80000; back:#FFFF80", L"" },
{ MULTI_STYLE(SCE_CSS_IDENTIFIER,SCE_CSS_IDENTIFIER2,SCE_CSS_IDENTIFIER3,SCE_CSS_EXTENDED_IDENTIFIER), 63199, L"CSS Property", L"fore:#FF4000", L"" },
{ SCE_CSS_UNKNOWN_IDENTIFIER, 63200, L"Unknown Property", L"fore:#C80000; back:#FFFF80", L"" },
{ MULTI_STYLE(SCE_CSS_DOUBLESTRING,SCE_CSS_SINGLESTRING,0,0), 63131, L"String", L"fore:#008000", L"" },
{ SCE_CSS_VALUE, 63201, L"Value", L"fore:#3A6EA5", L"" },
{ SCE_CSS_OPERATOR, 63132, L"Operator", L"fore:#B000B0", L"" },
{ SCE_CSS_IMPORTANT, 63202, L"Important", L"bold; fore:#C80000", L"" },
{ SCE_CSS_DIRECTIVE, 63203, L"Directive", L"bold; fore:#000000; back:#FFF1A8", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_CPP = {
"__abstract __alignof __asm __assume __based __box __cdecl __declspec __delegate __event "
"__except __except__try __fastcall __finally __forceinline __gc __hook __identifier "
"__if_exists __if_not_exists __inline __int16 __int32 __int64 __int8 __interface __leave "
"__m128 __m128d __m128i __m64 __multiple_inheritance __nogc __noop __pin __property __raise "
"__sealed __single_inheritance __stdcall __super __try __try_cast __unhook __uuidof __value "
"__virtual_inheritance __wchar_t auto bool break case catch char class const const_cast "
"continue default defined delete do double dynamic_cast else enum explicit extern false float "
"for friend goto if inline int long mutable naked namespace new operator private protected "
"public register reinterpret_cast return short signed size_t sizeof static static_cast struct "
"switch template this throw true try typedef typeid typename union unsigned using uuid "
"virtual void volatile wchar_t while",
"",
"", "", "", "", "", "", "" };
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, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_C_DEFAULT, L"Default", L"", L"" },
{ SCE_C_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
{ SCE_C_WORD, 63128, L"Keyword", L"bold; fore:#0A246A", L"" },
{ SCE_C_IDENTIFIER, 63129, L"Identifier", L"", L"" },
{ MULTI_STYLE(SCE_C_STRING,SCE_C_CHARACTER,SCE_C_STRINGEOL,SCE_C_VERBATIM), 63131, L"String", L"fore:#008000", L"" },
{ SCE_C_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
{ SCE_C_OPERATOR, 63132, L"Operator", L"fore:#B000B0", L"" },
{ SCE_C_PREPROCESSOR, 63133, L"Preprocessor", L"fore:#FF8000", L"" },
//{ SCE_C_UUID, L"UUID", L"", L"" },
//{ SCE_C_REGEX, L"Regex", L"", L"" },
//{ SCE_C_WORD2, L"Word 2", L"", L"" },
//{ SCE_C_GLOBALCLASS, L"Global Class", L"", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_CS = {
"abstract as base bool break byte case catch char checked class const "
"continue decimal default delegate do double else enum event explicit "
"extern false finally fixed float for foreach goto if implicit in int interface "
"internal is lock long namespace new null object operator out override "
"params private protected public readonly ref return sbyte sealed short "
"sizeof stackalloc static string struct switch this throw true try typeof "
"uint ulong unchecked unsafe ushort using virtual void while",
"",
"", "", "", "", "", "", "" };
EDITLEXER lexCS = { SCLEX_CPP, 63005, L"C# Source Code", L"cs", L"", &KeyWords_CS, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_C_DEFAULT, L"Default", L"", L"" },
{ SCE_C_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
{ SCE_C_WORD, 63128, L"Keyword", L"bold; fore:#804000", L"" },
{ SCE_C_IDENTIFIER, 63129, L"Identifier", L"", L"" },
{ MULTI_STYLE(SCE_C_STRING,SCE_C_CHARACTER,SCE_C_STRINGEOL,0), 63131, L"String", L"fore:#008000", L"" },
{ SCE_C_VERBATIM, 63134, L"Verbatim String", L"fore:#008000", L"" },
{ SCE_C_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
{ SCE_C_OPERATOR, 63132, L"Operator", L"fore:#B000B0", L"" },
{ SCE_C_PREPROCESSOR, 63133, L"Preprocessor", L"fore:#FF8000", L"" },
//{ SCE_C_UUID, L"UUID", L"", L"" },
//{ SCE_C_REGEX, L"Regex", L"", L"" },
//{ SCE_C_WORD2, L"Word 2", L"", L"" },
//{ SCE_C_GLOBALCLASS, L"Global Class", L"", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_RC = {
"ACCELERATORS ALT AUTO3STATE AUTOCHECKBOX AUTORADIOBUTTON "
"BEGIN BITMAP BLOCK BUTTON CAPTION CHARACTERISTICS CHECKBOX "
"CLASS COMBOBOX CONTROL CTEXT CURSOR DEFPUSHBUTTON DIALOG "
"DIALOGEX DISCARDABLE EDITTEXT END EXSTYLE FONT GROUPBOX "
"ICON LANGUAGE LISTBOX LTEXT MENU MENUEX MENUITEM "
"MESSAGETABLE POPUP PUSHBUTTON RADIOBUTTON RCDATA RTEXT "
"SCROLLBAR SEPARATOR SHIFT STATE3 STRINGTABLE STYLE "
"TEXTINCLUDE VALUE VERSION VERSIONINFO VIRTKEY",
"", "", "", "", "", "", "", "" };
EDITLEXER lexRC = { SCLEX_CPP, 63006, L"Resource Script", L"rc; rc2; rct; rh; r; dlg", L"", &KeyWords_RC, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_C_DEFAULT, L"Default", L"", L"" },
{ SCE_C_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
{ SCE_C_WORD, 63128, L"Keyword", L"bold; fore:#0A246A", L"" },
{ SCE_C_IDENTIFIER, 63129, L"Identifier", L"", L"" },
{ MULTI_STYLE(SCE_C_STRING,SCE_C_CHARACTER,SCE_C_STRINGEOL,SCE_C_VERBATIM), 63131, L"String", L"fore:#008000", L"" },
{ SCE_C_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
{ SCE_C_OPERATOR, 63132, L"Operator", L"fore:#0A246A", L"" },
{ SCE_C_PREPROCESSOR, 63133, L"Preprocessor", L"fore:#FF8000", L"" },
//{ SCE_C_UUID, L"UUID", L"", L"" },
//{ SCE_C_REGEX, L"Regex", L"", L"" },
//{ SCE_C_WORD2, L"Word 2", L"", L"" },
//{ SCE_C_GLOBALCLASS, L"Global Class", L"", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_MAK = {
"", "", "", "", "", "", "", "", "" };
EDITLEXER lexMAK = { SCLEX_MAKEFILE, 63007, L"Makefiles", L"mak; make; dsp", L"", &KeyWords_MAK, {
{ STYLE_DEFAULT, 63126, L"Default", L"fore:#0A246A", L"" },
//{ SCE_MAKE_DEFAULT, L"Default", L"", L"" },
{ SCE_MAKE_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
{ MULTI_STYLE(SCE_MAKE_IDENTIFIER,SCE_MAKE_IDEOL,0,0), 63129, L"Identifier", L"fore:#003CE6", L"" },
{ SCE_MAKE_OPERATOR, 63132, L"Operator", L"", L"" },
{ SCE_MAKE_TARGET, 63204, L"Target", L"fore:#003CE6; back:#FFC000", L"" },
{ SCE_MAKE_PREPROCESSOR, 63133, L"Preprocessor", L"fore:#FF8000", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_VBS = {
"alias and as attribute begin boolean byref byte byval call case class compare const continue "
"currency date declare dim do double each else elseif empty end enum eqv erase error event exit "
"explicit false for friend function get global gosub goto if imp implement in integer is let lib "
"load long loop lset me mid mod module new next not nothing null object on option optional or "
"preserve private property public raiseevent redim rem resume return rset select set single "
"static stop string sub then to true type unload until variant wend while with withevents xor",
"", "", "", "", "", "", "", "" };
EDITLEXER lexVBS = { SCLEX_VBSCRIPT, 63008, L"VBScript", L"vbs; dsm", L"", &KeyWords_VBS, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_B_DEFAULT, L"Default", L"", L"" },
{ SCE_B_COMMENT, 63127, L"Comment", L"fore:#808080", L"" },
{ SCE_B_KEYWORD, 63128, L"Keyword", L"bold; fore:#B000B0", L"" },
{ SCE_B_IDENTIFIER, 63129, L"Identifier", L"", L"" },
{ MULTI_STYLE(SCE_B_STRING,SCE_B_STRINGEOL,0,0), 63131, L"String", L"fore:#008000", L"" },
{ SCE_B_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
{ SCE_B_OPERATOR, 63132, L"Operator", L"", L"" },
//{ SCE_B_PREPROCESSOR, 63133, L"Preprocessor", L"fore:#FF9C00", L"" },
//{ SCE_B_CONSTANT, L"Constant", L"", L"" },
//{ SCE_B_DATE, L"Date", L"", L"" },
//{ SCE_B_KEYWORD2, L"Keyword 2", L"", L"" },
//{ SCE_B_KEYWORD3, L"Keyword 3", L"", L"" },
//{ SCE_B_KEYWORD4, L"Keyword 4", L"", L"" },
//{ SCE_B_ASM, L"Inline Asm", L"fore:#FF8000", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_VB = {
"addhandler addressof alias and andalso ansi any as assembly auto boolean byref byte byval call "
"case catch cbool cbyte cchar cdate cdbl cdec char cint class clng cobj compare const cshort csng "
"cstr ctype date decimal declare default delegate dim directcast do double each else elseif end "
"enum erase error event exit explicit externalsource false finally for friend function get "
"gettype gosub goto handles if implements imports in inherits integer interface is let lib like "
"long loop me mid mod module mustinherit mustoverride mybase myclass namespace new next not "
"nothing notinheritable notoverridable object on option optional or orelse overloads overridable "
"overrides paramarray preserve private property protected public raiseevent randomize readonly "
"redim rem removehandler resume return select set shadows shared short single static step stop "
"strict string structure sub synclock then throw to true try typeof unicode until variant when "
"while with withevents writeonly xor",
"", "", "", "", "", "", "", "" };
EDITLEXER lexVB = { SCLEX_VB, 63009, L"Visual Basic", L"vb; bas; frm; cls; ctl; pag; dsr; dob", L"", &KeyWords_VB, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_B_DEFAULT, L"Default", L"", L"" },
{ SCE_B_COMMENT, 63127, L"Comment", L"fore:#808080", L"" },
{ SCE_B_KEYWORD, 63128, L"Keyword", L"bold; fore:#B000B0", L"" },
{ SCE_B_IDENTIFIER, 63129, L"Identifier", L"", L"" },
{ MULTI_STYLE(SCE_B_STRING,SCE_B_STRINGEOL,0,0), 63131, L"String", L"fore:#008000", L"" },
{ SCE_B_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
{ SCE_B_OPERATOR, 63132, L"Operator", L"", L"" },
{ SCE_B_PREPROCESSOR, 63133, L"Preprocessor", L"fore:#FF9C00", L"" },
//{ SCE_B_CONSTANT, L"Constant", L"", L"" },
//{ SCE_B_DATE, L"Date", L"", L"" },
//{ SCE_B_KEYWORD2, L"Keyword 2", L"", L"" },
//{ SCE_B_KEYWORD3, L"Keyword 3", L"", L"" },
//{ SCE_B_KEYWORD4, L"Keyword 4", L"", L"" },
//{ SCE_B_ASM, L"Inline Asm", L"fore:#FF8000", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_JS = {
"abstract boolean break byte case catch char class const continue debugger default delete do "
"double else enum export extends false final finally float for function goto if implements "
"import in instanceof int interface long native new null package private protected public "
"return short static super switch synchronized this throw throws transient true try typeof var "
"void volatile while with",
"", "", "", "", "", "", "", "" };
EDITLEXER lexJS = { SCLEX_CPP, 63010, L"JavaScript", L"js; jse; jsm; json; as", L"", &KeyWords_JS, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_C_DEFAULT, L"Default", L"", L"" },
{ SCE_C_COMMENT, 63127, L"Comment", L"fore:#646464", L"" },
{ SCE_C_WORD, 63128, L"Keyword", L"bold; fore:#A46000", L"" },
{ SCE_C_IDENTIFIER, 63129, L"Identifier", L"", L"" },
{ MULTI_STYLE(SCE_C_STRING,SCE_C_CHARACTER,SCE_C_STRINGEOL,SCE_C_VERBATIM), 63131, L"String", L"fore:#008000", L"" },
{ SCE_C_REGEX, 63135, L"Regex", L"fore:#006633; back:#FFF1A8", L"" },
{ SCE_C_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
{ SCE_C_OPERATOR, 63132, L"Operator", L"fore:#B000B0", L"" },
//{ SCE_C_UUID, L"UUID", L"", L"" },
//{ SCE_C_PREPROCESSOR, L"Preprocessor", L"fore:#FF8000", L"" },
//{ SCE_C_WORD2, L"Word 2", L"", L"" },
//{ SCE_C_GLOBALCLASS, L"Global Class", L"", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_JAVA = {
"abstract assert boolean break byte case catch char class const "
"continue default do double else extends final finally float for future "
"generic goto if implements import inner instanceof int interface long "
"native new null outer package private protected public rest return "
"short static super switch synchronized this throw throws transient try "
"var void volatile while",
"", "", "", "", "", "", "", "" };
EDITLEXER lexJAVA = { SCLEX_CPP, 63011, L"Java Source Code", L"java", L"", &KeyWords_JAVA, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_C_DEFAULT, L"Default", L"", L"" },
{ SCE_C_COMMENT, 63127, L"Comment", L"fore:#646464", L"" },
{ SCE_C_WORD, 63128, L"Keyword", L"bold; fore:#A46000", L"" },
{ SCE_C_IDENTIFIER, 63129, L"Identifier", L"", L"" },
{ MULTI_STYLE(SCE_C_STRING,SCE_C_CHARACTER,SCE_C_STRINGEOL,SCE_C_VERBATIM), 63131, L"String", L"fore:#008000", L"" },
{ SCE_C_REGEX, 63135, L"Regex", L"fore:#006633; back:#FFF1A8", L"" },
{ SCE_C_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
{ SCE_C_OPERATOR, 63132, L"Operator", L"fore:#B000B0", L"" },
//{ SCE_C_UUID, L"UUID", L"", L"" },
//{ SCE_C_PREPROCESSOR, L"Preprocessor", L"fore:#FF8000", L"" },
//{ SCE_C_WORD2, L"Word 2", L"", L"" },
//{ SCE_C_GLOBALCLASS, L"Global Class", L"", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_PAS = {
"absolute abstract alias and array as asm assembler begin break case cdecl class const constructor continue cppdecl default "
"destructor dispose div do downto else end end. except exit export exports external false far far16 file finalization finally for "
"forward function goto if implementation in index inherited initialization inline interface is label library local message mod "
"name near new nil nostackframe not object of oldfpccall on operator or out overload override packed pascal private procedure "
"program property protected public published raise read record register reintroduce repeat resourcestring safecall self set shl "
"shr softfloat stdcall stored string then threadvar to true try type unit until uses var virtual while with write xor",
"", "", "", "", "", "", "", "" };
EDITLEXER lexPAS = { SCLEX_PASCAL, 63012, L"Pascal Source Code", L"pas; dpr; dpk; dfm; inc; pp", L"", &KeyWords_PAS, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_PAS_DEFAULT, L"Default", L"", L"" },
{ MULTI_STYLE(SCE_PAS_COMMENT,SCE_PAS_COMMENT2,SCE_PAS_COMMENTLINE,0), 63127, L"Comment", L"fore:#646464", L"" },
{ SCE_PAS_WORD, 63128, L"Keyword", L"bold; fore:#800080", L"" },
{ SCE_PAS_IDENTIFIER, 63129, L"Identifier", L"", L"" },
{ MULTI_STYLE(SCE_PAS_STRING,SCE_PAS_CHARACTER,SCE_PAS_STRINGEOL,0), 63131, L"String", L"fore:#008000", L"" },
{ MULTI_STYLE(SCE_PAS_NUMBER,SCE_PAS_HEXNUMBER,0,0), 63130, L"Number", L"fore:#FF0000", L"" },
{ SCE_PAS_OPERATOR, 63132, L"Operator", L"bold", L"" },
{ SCE_PAS_ASM, 63205, L"Inline Asm", L"fore:#0000FF", L"" },
{ MULTI_STYLE(SCE_PAS_PREPROCESSOR,SCE_PAS_PREPROCESSOR2,0,0), 63133, L"Preprocessor", L"fore:#FF00FF", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_ASM = {
"aaa aad aam aas adc add and call cbw clc cld cli cmc cmp cmps cmpsb "
"cmpsw cwd daa das dec div esc hlt idiv imul in inc int into iret ja jae jb jbe "
"jc jcxz je jg jge jl jle jmp jna jnae jnb jnbe jnc jne jng jnge jnl jnle jno jnp "
"jns jnz jo jp jpe jpo js jz lahf lds lea les lods lodsb lodsw loop loope loopew "
"loopne loopnew loopnz loopnzw loopw loopz loopzw mov movs movsb "
"movsw mul neg nop not or out pop popf push pushf rcl rcr ret retf retn rol "
"ror sahf sal sar sbb scas scasb scasw shl shr stc std sti stos stosb stosw "
"sub test wait xchg xlat xlatb xor bound enter ins insb insw leave outs "
"outsb outsw popa pusha pushw arpl lar lsl sgdt sidt sldt smsw str verr "
"verw clts lgdt lidt lldt lmsw ltr bsf bsr bt btc btr bts cdq cmpsd cwde insd "
"iretd iretdf iretf jecxz lfs lgs lodsd loopd looped loopned loopnzd loopzd "
"lss movsd movsx movzx outsd popad popfd pushad pushd pushfd scasd "
"seta setae setb setbe setc sete setg setge setl setle setna setnae "
"setnb setnbe setnc setne setng setnge setnl setnle setno setnp setns "
"setnz seto setp setpe setpo sets setz shld shrd stosd bswap cmpxchg "
"invd invlpg wbinvd xadd lock rep repe repne repnz repz cflush cpuid emms "
"femms cmovo cmovno cmovb cmovc cmovnae cmovae cmovnb cmovnc "
"cmove cmovz cmovne cmovnz cmovbe cmovna cmova cmovnbe cmovs "
"cmovns cmovp cmovpe cmovnp cmovpo cmovl cmovnge cmovge cmovnl "
"cmovle cmovng cmovg cmovnle cmpxchg486 cmpxchg8b loadall loadall286 "
"ibts icebp int1 int3 int01 int03 iretw popaw popfw pushaw pushfw rdmsr "
"rdpmc rdshr rdtsc rsdc rsldt rsm rsts salc smi smint smintold svdc svldt "
"svts syscall sysenter sysexit sysret ud0 ud1 ud2 umov xbts wrmsr wrshr",
"f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcom fcomp fcompp fdecstp "
"fdisi fdiv fdivp fdivr fdivrp feni ffree fiadd ficom ficomp fidiv fidivr fild fimul "
"fincstp finit fist fistp fisub fisubr fld fld1 fldcw fldenv fldenvw fldl2e fldl2t "
"fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave "
"fnsavew fnstcw fnstenv fnstenvw fnstsw fpatan fprem fptan frndint frstor "
"frstorw fsave fsavew fscale fsqrt fst fstcw fstenv fstenvw fstp fstsw fsub "
"fsubp fsubr fsubrp ftst fwait fxam fxch fxtract fyl2x fyl2xp1 fsetpm fcos "
"fldenvd fnsaved fnstenvd fprem1 frstord fsaved fsin fsincos fstenvd fucom "
"fucomp fucompp fcomi fcomip ffreep fcmovb fcmove fcmovbe fcmovu "
"fcmovnb fcmovne fcmovnbe fcmovnu",
"ah al ax bh bl bp bx ch cl cr0 cr2 cr3 cr4 cs cx dh di dl dr0 dr1 dr2 dr3 dr6 "
"dr7 ds dx eax ebp ebx ecx edi edx es esi esp fs gs si sp ss st tr3 tr4 tr5 "
"tr6 tr7 st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 "
"mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7",
".186 .286 .286c .286p .287 .386 .386c .386p .387 .486 .486p .8086 .8087 "
".alpha .break .code .const .continue .cref .data .data? .dosseg .else "
".elseif .endif .endw .err .err1 .err2 .errb .errdef .errdif .errdifi .erre .erridn "
".erridni .errnb .errndef .errnz .exit .fardata .fardata? .if .lall .lfcond .list "
".listall .listif .listmacro .listmacroall .model .no87 .nocref .nolist .nolistif "
".nolistmacro .radix .repeat .sall .seq .sfcond .stack .startup .tfcond .type "
".until .untilcxz .while .xall .xcref .xlist alias align assume catstr comm "
"comment db dd df dosseg dq dt dup dw echo else elseif elseif1 elseif2 "
"elseifb elseifdef elseifdif elseifdifi elseife elseifidn elseifidni elseifnb "
"elseifndef end endif endm endp ends eq equ even exitm extern externdef "
"extrn for forc ge goto group gt high highword if if1 if2 ifb ifdef ifdif ifdifi ife "
"ifidn ifidni ifnb ifndef include includelib instr invoke irp irpc label le length "
"lengthof local low lowword lroffset lt macro mask mod .msfloat name ne "
"offset opattr option org %out page popcontext proc proto ptr public "
"purge pushcontext record repeat rept seg segment short size sizeof "
"sizestr struc struct substr subtitle subttl textequ this title type typedef "
"union while width db dw dd dq dt resb resw resd resq rest incbin equ "
"times %define %idefine %xdefine %xidefine %undef %assign %iassign "
"%strlen %substr %macro %imacro %endmacro %rotate .nolist %if %elif "
"%else %endif %ifdef %ifndef %elifdef %elifndef %ifmacro %ifnmacro "
"%elifmacro %elifnmacro %ifctk %ifnctk %elifctk %elifnctk %ifidn %ifnidn "
"%elifidn %elifnidn %ifidni %ifnidni %elifidni %elifnidni %ifid %ifnid %elifid "
"%elifnid %ifstr %ifnstr %elifstr %elifnstr %ifnum %ifnnum %elifnum "
"%elifnnum %error %rep %endrep %exitrep %include %push %pop %repl "
"struct endstruc istruc at iend align alignb %arg %stacksize %local %line "
"bits use16 use32 section absolute extern global common cpu org section "
"group import export",
"$ ? @b @f addr basic byte c carry? dword far far16 fortran fword near "
"near16 overflow? parity? pascal qword real4 real8 real10 sbyte sdword "
"sign? stdcall sword syscall tbyte vararg word zero? flat near32 far32 abs "
"all assumes at casemap common compact cpu dotname emulator epilogue "
"error export expr16 expr32 farstack flat forceframe huge language large "
"listing ljmp loadds m510 medium memory nearstack nodotname noemulator "
"nokeyword noljmp nom510 none nonunique nooldmacros nooldstructs "
"noreadonly noscoped nosignextend nothing notpublic oldmacros oldstructs "
"os_dos para private prologue radix readonly req scoped setif2 smallstack "
"tiny use16 use32 uses # nasm directives, mostly complete, does not parse "
"properly a16 a32 o16 o32 byte word dword nosplit $ $$ seq wrt flat large "
"small .text .data .bss near far %0 %1 %2 %3 %4 %5 %6 %7 %8 %9",
"addpd addps addsd addss andpd andps andnpd andnps cmpeqpd cmpltpd "
"cmplepd cmpunordpd cmpnepd cmpnltpd cmpnlepd cmpordpd cmpeqps "
"cmpltps cmpleps cmpunordps cmpneps cmpnltps cmpnleps cmpordps "
"cmpeqsd cmpltsd cmplesd cmpunordsd cmpnesd cmpnltsd cmpnlesd "
"cmpordsd cmpeqss cmpltss cmpless cmpunordss cmpness cmpnltss "
"cmpnless cmpordss comisd comiss cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi "
"cvtpd2ps cvtpi2pd cvtpi2ps cvtps2dq cvtps2pd cvtps2pi cvtss2sd "
"cvtss2si cvtsd2si cvtsd2ss cvtsi2sd cvtsi2ss cvttpd2dq cvttpd2pi "
"cvttps2dq cvttps2pi cvttsd2si cvttss2si divpd divps divsd divss fxrstor "
"fxsave ldmxscr lfence mfence maskmovdqu maskmovdq maxpd maxps "
"paxsd maxss minpd minps minsd minss movapd movaps movdq2q movdqa "
"movdqu movhlps movhpd movhps movd movq movlhps movlpd movlps "
"movmskpd movmskps movntdq movnti movntpd movntps movntq "
"movq2dq movsd movss movupd movups mulpd mulps mulsd mulss orpd "
"orps packssdw packsswb packuswb paddb paddsb paddw paddsw paddd "
"paddsiw paddq paddusb paddusw pand pandn pause paveb pavgb pavgw "
"pavgusb pdistib pextrw pcmpeqb pcmpeqw pcmpeqd pcmpgtb pcmpgtw "
"pcmpgtd pf2id pf2iw pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin "
"pfmul pmachriw pmaddwd pmagw pmaxsw pmaxub pminsw pminub "
"pmovmskb pmulhrwc pmulhriw pmulhrwa pmulhuw pmulhw pmullw pmuludq "
"pmvzb pmvnzb pmvlzb pmvgezb pfnacc pfpnacc por prefetch prefetchw "
"prefetchnta prefetcht0 prefetcht1 prefetcht2 pfrcp pfrcpit1 pfrcpit2 "
"pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pf2iw pinsrw psadbw pshufd pshufhw "
"pshuflw pshufw psllw pslld psllq pslldq psraw psrad psrlw psrld psrlq psrldq "
"psubb psubw psubd psubq psubsb psubsw psubusb psubusw psubsiw "
"pswapd punpckhbw punpckhwd punpckhdq punpckhqdq punpcklbw "
"punpcklwd punpckldq punpcklqdq pxor rcpps rcpss rsqrtps rsqrtss sfence "
"shufpd shufps sqrtpd sqrtps sqrtsd sqrtss stmxcsr subpd subps subsd "
"subss ucomisd ucomiss unpckhpd unpckhps unpcklpd unpcklps xorpd xorps",
"", "", "" };
EDITLEXER lexASM = { SCLEX_ASM, 63013, L"Assembly Script", L"asm", L"", &KeyWords_ASM, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_ASM_DEFAULT, L"Default", L"", L"" },
{ MULTI_STYLE(SCE_ASM_COMMENT,SCE_ASM_COMMENTBLOCK,0,0), 63127, L"Comment", L"fore:#008000", L"" },
{ SCE_ASM_IDENTIFIER, 63129, L"Identifier", L"", L"" },
{ MULTI_STYLE(SCE_ASM_STRING,SCE_ASM_CHARACTER,SCE_ASM_STRINGEOL,0), 63131, L"String", L"fore:#008000", L"" },
{ SCE_ASM_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
{ SCE_ASM_OPERATOR, 63132, L"Operator", L"fore:#0A246A", L"" },
{ SCE_ASM_CPUINSTRUCTION, 63206, L"CPU Instruction", L"fore:#0A246A", L"" },
{ SCE_ASM_MATHINSTRUCTION, 63207, L"FPU Instruction", L"fore:#0A246A", L"" },
{ SCE_ASM_EXTINSTRUCTION, 63210, L"Extended Instruction", L"fore:#0A246A", L"" },
{ SCE_ASM_DIRECTIVE, 63203, L"Directive", L"fore:#0A246A", L"" },
{ SCE_ASM_DIRECTIVEOPERAND, 63209, L"Directive Operand", L"fore:#0A246A", L"" },
{ SCE_ASM_REGISTER, 63208, L"Register", L"fore:#FF8000", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_PL = {
"__DATA__ __END__ __FILE__ __LINE__ __PACKAGE__ abs accept alarm and atan2 AUTOLOAD BEGIN "
"bind binmode bless caller chdir CHECK chmod chomp chop chown chr chroot close closedir cmp "
"connect continue CORE cos crypt dbmclose dbmopen default defined delete DESTROY die do "
"dump each else elsif END endgrent endhostent endnetent endprotoent endpwent endservent eof "
"eq EQ eval exec exists exit exp fcntl fileno flock for foreach fork format formline ge GE "
"getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin "
"getnetbyaddr getnetbyname getnetent getpeername getpgrp getppid getpriority getprotobyname "
"getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport "
"getservent getsockname getsockopt given glob gmtime goto grep gt GT hex if index INIT int "
"ioctl join keys kill last lc lcfirst le LE length link listen local localtime lock log "
"lstat lt LT map mkdir msgctl msgget msgrcv msgsnd my ne NE next no not NULL oct open "
"opendir or ord our pack package pipe pop pos print printf prototype push qu quotemeta rand "
"read readdir readline readlink readpipe recv redo ref rename require reset return reverse "
"rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent "
"sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift "
"shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split "
"sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek "
"system syswrite tell telldir tie tied time times truncate uc ucfirst umask undef UNITCHECK "
"unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn "
"when while write xor",
"", "", "", "", "", "", "", "" };
EDITLEXER lexPL = { SCLEX_PERL, 63014, L"Perl Script", L"pl; pm; cgi; pod", L"", &KeyWords_PL, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_PL_DEFAULT, L"Default", L"", L"" },
{ SCE_PL_COMMENTLINE, 63127, L"Comment", L"fore:#646464", L"" },
{ SCE_PL_WORD, 63128, L"Keyword", L"bold; fore:#804000", L"" },
{ SCE_PL_IDENTIFIER, 63129, L"Identifier", L"", L"" },
{ SCE_PL_STRING, 63211, L"String double quoted", L"fore:#008000", L"" },
{ SCE_PL_CHARACTER, 63212, L"String single quoted", L"fore:#008000", L"" },
{ SCE_PL_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
{ SCE_PL_OPERATOR, 63132, L"Operator", L"bold", L"" },
{ SCE_PL_SCALAR, 63215, L"Scalar $var", L"fore:#0A246A", L"" },
{ SCE_PL_ARRAY, 63216, L"Array @var", L"fore:#003CE6", L"" },
{ SCE_PL_HASH, 63217, L"Hash %var", L"fore:#B000B0", L"" },
{ SCE_PL_SYMBOLTABLE, 63218, L"Symbol table *var", L"fore:#3A6EA5", L"" },
{ SCE_PL_REGEX, 63219, L"Regex /re/ or m{re}", L"fore:#006633; back:#FFF1A8", L"" },
{ SCE_PL_REGSUBST, 63220, L"Substitution s/re/ore/", L"fore:#006633; back:#FFF1A8", L"" },
{ SCE_PL_BACKTICKS, 63221, L"Back ticks", L"fore:#E24000; back:#FFF1A8", L"" },
{ SCE_PL_HERE_DELIM, 63223, L"Here-doc (delimiter)", L"fore:#648000", L"" },
{ SCE_PL_HERE_Q, 63224, L"Here-doc (single quoted, q)", L"fore:#648000", L"" },
{ SCE_PL_HERE_QQ, 63225, L"Here-doc (double quoted, qq)", L"fore:#648000", L"" },
{ SCE_PL_HERE_QX, 63226, L"Here-doc (back ticks, qx)", L"fore:#E24000; back:#FFF1A8", L"" },
{ SCE_PL_STRING_Q, 63227, L"Single quoted string (generic, q)", L"fore:#008000", L"" },
{ SCE_PL_STRING_QQ, 63228, L"Double quoted string (qq)", L"fore:#008000", L"" },
{ SCE_PL_STRING_QX, 63229, L"Back ticks (qx)", L"fore:#E24000; back:#FFF1A8", L"" },
{ SCE_PL_STRING_QR, 63230, L"Regex (qr)", L"fore:#006633; back:#FFF1A8", L"" },
{ SCE_PL_STRING_QW, 63231, L"Array (qw)", L"fore:#003CE6", L"" },
{ SCE_PL_SUB_PROTOTYPE, 63253, L"Prototype", L"fore:#800080; back:#FFE2FF", L"" },
{ SCE_PL_FORMAT_IDENT, 63254, L"Format identifier", L"bold; fore:#648000; back:#FFF1A8", L"" },
{ SCE_PL_FORMAT, 63255, L"Format body", L"fore:#648000; back:#FFF1A8", L"" },
{ SCE_PL_POD, 63213, L"POD (common)", L"fore:#A46000; back:#FFFFC0; eolfilled", L"" },
{ SCE_PL_POD_VERB, 63214, L"POD (verbatim)", L"fore:#A46000; back:#FFFFC0; eolfilled", L"" },
{ SCE_PL_DATASECTION, 63222, L"Data section", L"fore:#A46000; back:#FFFFC0; eolfilled", L"" },
{ SCE_PL_ERROR, 63252, L"Parsing error", L"fore:#C80000; back:#FFFF80", L"" },
//{ SCE_PL_PUNCTUATION, L"Symbols / punctuation (not used)", L"", L"" },
//{ SCE_PL_PREPROCESSOR, L"Preprocessor (not used)", L"", L"" },
//{ SCE_PL_LONGQUOTE, L"Long quote (qq, qr, qw, qx) (not used)", L"", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_INI = {
"", "", "", "", "", "", "", "", "" };
EDITLEXER lexINI = { SCLEX_PROPERTIES, 63015, L"Configuration Files", L"ini; inf; reg; cfg; properties; oem; sif; url; sed; theme", L"", &KeyWords_INI, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_PROPS_DEFAULT, L"Default", L"", L"" },
{ SCE_PROPS_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
{ SCE_PROPS_SECTION, 63232, L"Section", L"bold; fore:#000000; back:#FFD24D; eolfilled", L"" },
{ SCE_PROPS_ASSIGNMENT, 63233, L"Assignment", L"fore:#FF0000", L"" },
{ SCE_PROPS_DEFVAL, 63234, L"Default Value", L"fore:#FF0000", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_BAT = {
"rem set if exist errorlevel for in do break call chcp cd chdir choice cls "
"country ctty date del erase dir echo exit goto loadfix loadhigh mkdir md "
"move path pause prompt rename ren rmdir rd shift time type ver verify vol "
"com con lpt nul echo.",
"", "", "", "", "", "", "", "" };
EDITLEXER lexBAT = { SCLEX_BATCH, 63016, L"Batch Files", L"bat; cmd", L"", &KeyWords_BAT, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_BAT_DEFAULT, L"Default", L"", L"" },
{ SCE_BAT_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
{ SCE_BAT_WORD, 63128, L"Keyword", L"bold; fore:#0A246A", L"" },
{ SCE_BAT_IDENTIFIER, 63129, L"Identifier", L"fore:#003CE6; back:#FFF1A8", L"" },
{ SCE_BAT_OPERATOR, 63132, L"Operator", L"", L"" },
{ MULTI_STYLE(SCE_BAT_COMMAND,SCE_BAT_HIDE,0,0), 63236, L"Command", L"bold", L"" },
{ SCE_BAT_LABEL, 63235, L"Label", L"fore:#C80000; back:#F4F4F4; eolfilled", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_DIFF = {
"", "", "", "", "", "", "", "", "" };
EDITLEXER lexDIFF = { SCLEX_DIFF, 63017, L"Diff Files", L"diff; patch", L"", &KeyWords_DIFF, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_DIFF_DEFAULT, L"Default", L"", L"" },
{ SCE_DIFF_COMMENT, 63127, L"Comment", L"fore:#008000", L"" },
{ SCE_DIFF_COMMAND, 63236, L"Command", L"bold; fore:#0A246A", L"" },
{ SCE_DIFF_HEADER, 63238, L"Source and Destination", L"fore:#C80000; back:#FFF1A8; eolfilled", L"" },
{ SCE_DIFF_POSITION, 63239, L"Position Setting", L"fore:#0000FF", L"" },
{ SCE_DIFF_ADDED, 63240, L"Line Addition", L"fore:#000000; back:#C0FF60; eolfilled", L"" },
{ SCE_DIFF_DELETED, 63241, L"Line Removal", L"fore:#000000; back:#FF8060; eolfilled", L"" },
{ SCE_DIFF_CHANGED, 63242, L"Line Change", L"fore:#000000; back:#99D7FF; eolfilled", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_SQL = {
"abort accessible action add after all alter analyze and as asc asensitive attach autoincrement "
"before begin between bigint binary bit blob both by call cascade case cast change char character "
"check collate column commit condition conflict constraint continue convert create cross current_date "
"current_time current_timestamp current_user cursor database databases date day_hour day_microsecond "
"day_minute day_second dec decimal declare default deferrable deferred delayed delete desc describe "
"detach deterministic distinct distinctrow div double drop dual each else elseif enclosed end enum "
"escape escaped except exclusive exists exit explain fail false fetch float float4 float8 for force "
"foreign from full fulltext glob grant group having high_priority hour_microsecond hour_minute "
"hour_second if ignore immediate in index infile initially inner inout insensitive insert instead int "
"int1 int2 int3 int4 int8 integer intersect interval into is isnull iterate join key keys kill "
"leading leave left like limit linear lines load localtime localtimestamp lock long longblob longtext "
"loop low_priority master_ssl_verify_server_cert match mediumblob mediumint mediumtext middleint "
"minute_microsecond minute_second mod modifies natural no no_write_to_binlog not notnull null numeric "
"of offset on optimize option optionally or order out outer outfile plan pragma precision primary "
"procedure purge query raise range read read_only read_write reads real references regexp reindex "
"release rename repeat replace require restrict return revoke right rlike rollback row rowid schema "
"schemas second_microsecond select sensitive separator set show smallint spatial specific sql "
"sql_big_result sql_calc_found_rows sql_small_result sqlexception sqlstate sqlwarning ssl starting "
"straight_join table temp temporary terminated text then time timestamp tinyblob tinyint tinytext to "
"trailing transaction trigger true undo union unique unlock unsigned update usage use using utc_date "
"utc_time utc_timestamp vacuum values varbinary varchar varcharacter varying view virtual when where "
"while with write xor year_month zerofill",
"", "", "", "", "", "", "", "" };
EDITLEXER lexSQL = { SCLEX_SQL, 63018, L"SQL Query", L"sql", L"", &KeyWords_SQL, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_SQL_DEFAULT, L"Default", L"", L"" },
{ SCE_SQL_COMMENT, 63127, L"Comment", L"fore:#505050", L"" },
{ SCE_SQL_WORD, 63128, L"Keyword", L"bold; fore:#800080", L"" },
{ MULTI_STYLE(SCE_SQL_STRING,SCE_SQL_CHARACTER,0,0), 63131, L"String", L"fore:#008000; back:#FFF1A8", L"" },
{ SCE_SQL_IDENTIFIER, 63129, L"Identifier", L"fore:#800080", L"" },
{ SCE_SQL_QUOTEDIDENTIFIER, 63243, L"Quoted Identifier", L"fore:#800080; back:#FFCCFF", L"" },
{ SCE_SQL_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
{ SCE_SQL_OPERATOR, 63132, L"Operator", L"bold; fore:#800080", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_PY = {
"and as assert break class continue def del elif else except "
"exec False finally for from global if import in is lambda None "
"not or pass print raise return True try with while yield",
"", "", "", "", "", "", "", "" };
EDITLEXER lexPY = { SCLEX_PYTHON, 63019, L"Python Script", L"py; pyw", L"", &KeyWords_PY, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_P_DEFAULT, L"Default", L"", L"" },
{ MULTI_STYLE(SCE_P_COMMENTLINE,SCE_P_COMMENTBLOCK,0,0), 63127, L"Comment", L"fore:#880000", L"" },
{ SCE_P_WORD, 63128, L"Keyword", L"fore:#000088", L"" },
{ SCE_P_IDENTIFIER, 63129, L"Identifier", L"", L"" },
{ MULTI_STYLE(SCE_P_STRING,SCE_P_STRINGEOL,0,0), 63211, L"String double quoted", L"fore:#008800", L"" },
{ SCE_P_CHARACTER, 63212, L"String single quoted", L"fore:#008800", L"" },
{ SCE_P_TRIPLEDOUBLE, 63244, L"String triple double quotes", L"fore:#008800", L"" },
{ SCE_P_TRIPLE, 63245, L"String triple single quotes", L"fore:#008800", L"" },
{ SCE_P_NUMBER, 63130, L"Number", L"fore:#FF4000", L"" },
{ SCE_P_OPERATOR, 63132, L"Operator", L"bold; fore:#666600", L"" },
{ SCE_P_DEFNAME, 63247, L"Function name", L"fore:#660066", L"" },
{ SCE_P_CLASSNAME, 63246, L"Class name", L"fore:#660066", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_CONF = {
"acceptmutex acceptpathinfo accessconfig accessfilename action addalt addaltbyencoding addaltbytype addcharset adddefaultcharset "
"adddescription addencoding addhandler addicon addiconbyencoding addiconbytype addinputfilter addlanguage addmodule addmoduleinfo "
"addoutputfilter addoutputfilterbytype addtype agentlog alias aliasmatch all allow allowconnect allowencodedslashes allowoverride "
"anonymous anonymous_authoritative anonymous_logemail anonymous_mustgiveemail anonymous_nouserid anonymous_verifyemail "
"assignuserid authauthoritative authdbauthoritative authdbgroupfile authdbmauthoritative authdbmgroupfile authdbmtype "
"authdbmuserfile authdbuserfile authdigestalgorithm authdigestdomain authdigestfile authdigestgroupfile authdigestnccheck "
"authdigestnonceformat authdigestnoncelifetime authdigestqop authdigestshmemsize authgroupfile authldapauthoritative "
"authldapbinddn authldapbindpassword authldapcharsetconfig authldapcomparednonserver authldapdereferencealiases authldapenabled "
"authldapfrontpagehack authldapgroupattribute authldapgroupattributeisdn authldapremoteuserisdn authldapurl authname authtype "
"authuserfile bindaddress browsermatch browsermatchnocase bs2000account bufferedlogs cachedefaultexpire cachedirlength "
"cachedirlevels cachedisable cacheenable cacheexpirycheck cachefile cacheforcecompletion cachegcclean cachegcdaily "
"cachegcinterval cachegcmemusage cachegcunused cacheignorecachecontrol cacheignoreheaders cacheignorenolastmod "
"cachelastmodifiedfactor cachemaxexpire cachemaxfilesize cacheminfilesize cachenegotiateddocs cacheroot cachesize cachetimemargin "
"cgimapextension charsetdefault charsetoptions charsetsourceenc checkspelling childperuserid clearmodulelist contentdigest "
"cookiedomain cookieexpires cookielog cookiename cookiestyle cookietracking coredumpdirectory customlog dav davdepthinfinity "
"davlockdb davmintimeout defaulticon defaultlanguage defaulttype define deflatebuffersize deflatecompressionlevel "
"deflatefilternote deflatememlevel deflatewindowsize deny directory directoryindex directorymatch directoryslash documentroot "
"dumpioinput dumpiooutput enableexceptionhook enablemmap enablesendfile errordocument errorlog example expiresactive "
"expiresbytype expiresdefault extendedstatus extfilterdefine extfilteroptions fancyindexing fileetag files filesmatch "
"forcelanguagepriority forcetype forensiclog from group header headername hostnamelookups identitycheck ifdefine ifmodule "
"imapbase imapdefault imapmenu include indexignore indexoptions indexorderdefault isapiappendlogtoerrors isapiappendlogtoquery "
"isapicachefile isapifakeasync isapilognotsupported isapireadaheadbuffer keepalive keepalivetimeout languagepriority "
"ldapcacheentries ldapcachettl ldapconnectiontimeout ldapopcacheentries ldapopcachettl ldapsharedcachefile ldapsharedcachesize "
"ldaptrustedca ldaptrustedcatype limit limitexcept limitinternalrecursion limitrequestbody limitrequestfields "
"limitrequestfieldsize limitrequestline limitxmlrequestbody listen listenbacklog loadfile loadmodule location locationmatch "
"lockfile logformat loglevel maxclients maxkeepaliverequests maxmemfree maxrequestsperchild maxrequestsperthread maxspareservers "
"maxsparethreads maxthreads maxthreadsperchild mcachemaxobjectcount mcachemaxobjectsize mcachemaxstreamingbuffer "
"mcacheminobjectsize mcacheremovalalgorithm mcachesize metadir metafiles metasuffix mimemagicfile minspareservers minsparethreads "
"mmapfile modmimeusepathinfo multiviewsmatch namevirtualhost nocache noproxy numservers nwssltrustedcerts nwsslupgradeable "
"options order passenv pidfile port protocolecho proxy proxybadheader proxyblock proxydomain proxyerroroverride proxyiobuffersize "
"proxymatch proxymaxforwards proxypass proxypassreverse proxypreservehost proxyreceivebuffersize proxyremote proxyremotematch "
"proxyrequests proxytimeout proxyvia qsc readmename redirect redirectmatch redirectpermanent redirecttemp refererignore "
"refererlog removecharset removeencoding removehandler removeinputfilter removelanguage removeoutputfilter removetype "
"requestheader require resourceconfig rewritebase rewritecond rewriteengine rewritelock rewritelog rewriteloglevel rewritemap "
"rewriteoptions rewriterule rlimitcpu rlimitmem rlimitnproc satisfy scoreboardfile script scriptalias scriptaliasmatch "
"scriptinterpretersource scriptlog scriptlogbuffer scriptloglength scriptsock securelisten sendbuffersize serveradmin serveralias "
"serverlimit servername serverpath serverroot serversignature servertokens servertype setenv setenvif setenvifnocase sethandler "
"setinputfilter setoutputfilter singlelisten ssiendtag ssierrormsg ssistarttag ssitimeformat ssiundefinedecho "
"sslcacertificatefile sslcacertificatepath sslcarevocationfile sslcarevocationpath sslcertificatechainfile sslcertificatefile "
"sslcertificatekeyfile sslciphersuite sslengine sslmutex ssloptions sslpassphrasedialog sslprotocol sslproxycacertificatefile "
"sslproxycacertificatepath sslproxycarevocationfile sslproxycarevocationpath sslproxyciphersuite sslproxyengine "
"sslproxymachinecertificatefile sslproxymachinecertificatepath sslproxyprotocol sslproxyverify sslproxyverifydepth sslrandomseed "
"sslrequire sslrequiressl sslsessioncache sslsessioncachetimeout sslusername sslverifyclient sslverifydepth startservers "
"startthreads suexecusergroup threadlimit threadsperchild threadstacksize timeout transferlog typesconfig unsetenv "
"usecanonicalname user userdir virtualdocumentroot virtualdocumentrootip virtualhost virtualscriptalias virtualscriptaliasip "
"win32disableacceptex xbithack",
"", //"on off standalone inetd force-response-1.0 downgrade-1.0 nokeepalive indexes includes followsymlinks none x-compress x-gzip",
"", "", "", "", "", "", "" };
EDITLEXER lexCONF = { SCLEX_CONF, 63020, L"Apache Config Files", L"conf; htaccess", L"", &KeyWords_CONF, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
{ SCE_CONF_COMMENT, 63127, L"Comment", L"fore:#648000", L"" },
{ SCE_CONF_STRING, 63131, L"String", L"fore:#B000B0", L"" },
{ SCE_CONF_NUMBER, 63130, L"Number", L"fore:#FF4000", L"" },
{ SCE_CONF_DIRECTIVE, 63203, L"Directive", L"fore:#003CE6", L"" },
{ SCE_CONF_IP, 63248, L"IP Address", L"bold; fore:#FF4000", L"" },
// Not used by lexer { SCE_CONF_IDENTIFIER, L"Identifier", L"", L"" },
// Lexer is buggy { SCE_CONF_OPERATOR, L"Operator", L"", L"" },
// Lexer is buggy { SCE_CONF_PARAMETER, L"Runtime Directive Parameter", L"", L"" },
// Lexer is buggy { SCE_CONF_EXTENSION, L"Extension", L"", L"" },
{ -1, 00000, L"", L"", L"" } } };
KEYWORDLIST KeyWords_PS = {
"break continue do else elseif filter for foreach function if in return switch until where while",
"add-computer add-content add-history add-member add-pssnapin add-type checkpoint-computer "
"clear-content clear-eventlog clear-history clear-host clear-item clear-itemproperty "
"clear-variable compare-object complete-transaction connect-wsman convertfrom-csv "
"convertfrom-securestring convertfrom-stringdata convert-path convertto-csv convertto-html "
"convertto-securestring convertto-xml copy-item copy-itemproperty debug-process "
"disable-computerrestore disable-psbreakpoint disable-psremoting disable-pssessionconfiguration "
"disable-wsmancredssp disconnect-wsman enable-computerrestore enable-psbreakpoint "
"enable-psremoting enable-pssessionconfiguration enable-wsmancredssp enter-pssession "
"exit-pssession export-alias export-clixml export-console export-counter export-csv "
"export-formatdata export-modulemember export-pssession foreach-object format-custom format-list "
"format-table format-wide get-acl get-alias get-authenticodesignature get-childitem get-command "
"get-computerrestorepoint get-content get-counter get-credential get-culture get-date get-event "
"get-eventlog get-eventsubscriber get-executionpolicy get-formatdata get-help get-history "
"get-host get-hotfix get-item get-itemproperty get-job get-location get-member get-module "
"get-pfxcertificate get-process get-psbreakpoint get-pscallstack get-psdrive get-psprovider "
"get-pssession get-pssessionconfiguration get-pssnapin get-random get-service get-tracesource "
"get-transaction get-uiculture get-unique get-variable get-verb get-winevent get-wmiobject "
"get-wsmancredssp get-wsmaninstance group-object help import-alias import-clixml import-counter "
"import-csv import-localizeddata import-module import-pssession importsystemmodules "
"invoke-command invoke-expression invoke-history invoke-item invoke-wmimethod invoke-wsmanaction "
"join-path limit-eventlog measure-command measure-object mkdir more move-item move-itemproperty "
"new-alias new-event new-eventlog new-item new-itemproperty new-module new-modulemanifest "
"new-object new-psdrive new-pssession new-pssessionoption new-service new-timespan new-variable "
"new-webserviceproxy new-wsmaninstance new-wsmansessionoption out-default out-file out-gridview "
"out-host out-null out-printer out-string pop-location prompt push-location read-host receive-job "
"register-engineevent register-objectevent register-pssessionconfiguration register-wmievent "
"remove-computer remove-event remove-eventlog remove-item remove-itemproperty remove-job "
"remove-module remove-psbreakpoint remove-psdrive remove-pssession remove-pssnapin "
"remove-variable remove-wmiobject remove-wsmaninstance rename-item rename-itemproperty "
"reset-computermachinepassword resolve-path restart-computer restart-service restore-computer "
"resume-service select-object select-string select-xml send-mailmessage set-acl set-alias "
"set-authenticodesignature set-content set-date set-executionpolicy set-item set-itemproperty "
"set-location set-psbreakpoint set-psdebug set-pssessionconfiguration set-service set-strictmode "
"set-tracesource set-variable set-wmiinstance set-wsmaninstance set-wsmanquickconfig "
"show-eventlog sort-object split-path start-job start-process start-service start-sleep "
"start-transaction start-transcript stop-computer stop-job stop-process stop-service "
"stop-transcript suspend-service tee-object test-computersecurechannel test-connection "
"test-modulemanifest test-path test-wsman trace-command undo-transaction unregister-event "
"unregister-pssessionconfiguration update-formatdata update-list update-typedata use-transaction "
"wait-event wait-job wait-process where-object write-debug write-error write-eventlog write-host "
"write-output write-progress write-verbose write-warning",
"ac asnp cat cd chdir clc clear clhy cli clp cls clv compare copy cp cpi cpp cvpa dbp del diff "
"dir ebp echo epal epcsv epsn erase etsn exsn fc fl foreach ft fw gal gbp gc gci gcm gcs gdr ghy "
"gi gjb gl gm gmo gp gps group gsn gsnp gsv gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo "
"ipsn ise iwmi kill lp ls man md measure mi mount move mp mv nal ndr ni nmo nsn nv ogv oh popd ps "
"pushd pwd r rbp rcjb rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rv rvpa rwmi sajb sal "
"saps sasv sbp sc select set si sl sleep sort sp spjb spps spsv start sv swmi tee type where wjb "
"write", "", "", "", "", "", "" };
EDITLEXER lexPS = { SCLEX_POWERSHELL, 63021, L"PowerShell Script", L"ps1; psc1", L"", &KeyWords_PS, {
{ STYLE_DEFAULT, 63126, L"Default", L"", L"" },
//{ SCE_POWERSHELL_DEFAULT, L"Default", L"", L"" },
{ SCE_POWERSHELL_COMMENT, 63127, L"Comment", L"fore:#646464", L"" },
{ SCE_POWERSHELL_KEYWORD, 63128, L"Keyword", L"bold; fore:#804000", L"" },
{ SCE_POWERSHELL_IDENTIFIER, 63129, L"Identifier", L"", L"" },
{ MULTI_STYLE(SCE_POWERSHELL_STRING,SCE_POWERSHELL_CHARACTER,0,0), 63131, L"String", L"fore:#008000", L"" },
{ SCE_POWERSHELL_NUMBER, 63130, L"Number", L"fore:#FF0000", L"" },
{ SCE_POWERSHELL_OPERATOR, 63132, L"Operator", L"bold", L"" },
{ SCE_POWERSHELL_VARIABLE, 63249, L"Variable", L"fore:#0A246A", L"" },
{ SCE_POWERSHELL_CMDLET, 63250, L"Cmdlet", L"fore:#804000; back:#FFF1A8", L"" },
{ SCE_POWERSHELL_ALIAS, 63251, L"Alias", L"bold; fore:#0A246A", L"" },
{ -1, 00000, L"", L"", L"" } } };
// This array holds all the lexers...
PEDITLEXER pLexArray[NUMLEXERS] =
{
&lexDefault,
&lexHTML,
&lexXML,
&lexCSS,
&lexJS,
&lexVBS,
&lexCPP,
&lexCS,
&lexRC,
&lexMAK,
&lexJAVA,
&lexVB,
&lexPAS,
&lexASM,
&lexSQL,
&lexPL,
&lexPY,
&lexINI,
&lexCONF,
&lexPS,
&lexBAT,
&lexDIFF
};
// Currently used lexer
PEDITLEXER pLexCurrent = &lexDefault;
COLORREF crCustom[16];
BOOL bUse2ndDefaultStyle;
BOOL fStylesModified = FALSE;
BOOL fWarnedNoIniFile = FALSE;
int iBaseFontSize = 10;
int iDefaultLexer;
BOOL bAutoSelect;
int cxStyleSelectDlg;
int cyStyleSelectDlg;
extern int iDefaultCodePage;
extern int iDefaultCharSet;
extern BOOL bHiliteCurrentLine;
//=============================================================================
//
// Style_Load()
//
void Style_Load()
{
int i,iLexer;
WCHAR tch[32];
WCHAR *pIniSection = LocalAlloc(LPTR,sizeof(WCHAR)*32*1024);
int cchIniSection = LocalSize(pIniSection)/sizeof(WCHAR);
// Custom colors
crCustom [0] = RGB(0x00,0x00,0x00);
crCustom [1] = RGB(0x0A,0x24,0x6A);
crCustom [2] = RGB(0x3A,0x6E,0xA5);
crCustom [3] = RGB(0x00,0x3C,0xE6);
crCustom [4] = RGB(0x00,0x66,0x33);
crCustom [5] = RGB(0x60,0x80,0x20);
crCustom [6] = RGB(0x64,0x80,0x00);
crCustom [7] = RGB(0xA4,0x60,0x00);
crCustom [8] = RGB(0xFF,0xFF,0xFF);
crCustom [9] = RGB(0xFF,0xFF,0xE2);
crCustom[10] = RGB(0xFF,0xF1,0xA8);
crCustom[11] = RGB(0xFF,0xC0,0x00);
crCustom[12] = RGB(0xFF,0x40,0x00);
crCustom[13] = RGB(0xC8,0x00,0x00);
crCustom[14] = RGB(0xB0,0x00,0xB0);
crCustom[15] = RGB(0xB2,0x8B,0x40);
LoadIniSection(L"Custom Colors",pIniSection,cchIniSection);
for (i = 0; i < 16; i++) {
wsprintf(tch,L"%02i",i+1);
crCustom[i] = IniSectionGetInt(pIniSection,tch,crCustom[i]);
}
LoadIniSection(L"Styles",pIniSection,cchIniSection);
// 2nd default
bUse2ndDefaultStyle = (IniSectionGetInt(pIniSection,L"Use2ndDefaultStyle",0)) ? 1 : 0;
// default scheme
iDefaultLexer = IniSectionGetInt(pIniSection,L"DefaultScheme",0);
iDefaultLexer = min(max(iDefaultLexer,0),NUMLEXERS-1);
// auto select
bAutoSelect = (IniSectionGetInt(pIniSection,L"AutoSelect",1)) ? 1 : 0;
// scheme select dlg dimensions
cxStyleSelectDlg = IniSectionGetInt(pIniSection,L"SelectDlgSizeX",304);
cxStyleSelectDlg = max(cxStyleSelectDlg,0);
cyStyleSelectDlg = IniSectionGetInt(pIniSection,L"SelectDlgSizeY",0);
cyStyleSelectDlg = max(cyStyleSelectDlg,324);
for (iLexer = 0; iLexer < NUMLEXERS; iLexer++) {
LoadIniSection(pLexArray[iLexer]->pszName,pIniSection,cchIniSection);
if (!IniSectionGetString(pIniSection,L"FileNameExtensions",pLexArray[iLexer]->pszDefExt,
pLexArray[iLexer]->szExtensions,COUNTOF(pLexArray[iLexer]->szExtensions)))
lstrcpyn(pLexArray[iLexer]->szExtensions,pLexArray[iLexer]->pszDefExt,
COUNTOF(pLexArray[iLexer]->szExtensions));
i = 0;
while (pLexArray[iLexer]->Styles[i].iStyle != -1) {
IniSectionGetString(pIniSection,pLexArray[iLexer]->Styles[i].pszName,
pLexArray[iLexer]->Styles[i].pszDefault,
pLexArray[iLexer]->Styles[i].szValue,
COUNTOF(pLexArray[iLexer]->Styles[i].szValue));
i++;
}
}
LocalFree(pIniSection);
}
//=============================================================================
//
// Style_Save()
//
void Style_Save()
{
int i,iLexer;
WCHAR tch[32];
WCHAR *pIniSection = LocalAlloc(LPTR,sizeof(WCHAR)*32*1024);
int cchIniSection = LocalSize(pIniSection)/sizeof(WCHAR);
// Custom colors
for (i = 0; i < 16; i++) {
wsprintf(tch,L"%02i",i+1);
IniSectionSetInt(pIniSection,tch,crCustom[i]);
}
SaveIniSection(L"Custom Colors",pIniSection);
ZeroMemory(pIniSection,cchIniSection);
// auto select
IniSectionSetInt(pIniSection,L"Use2ndDefaultStyle",bUse2ndDefaultStyle);
// default scheme
IniSectionSetInt(pIniSection,L"DefaultScheme",iDefaultLexer);
// auto select
IniSectionSetInt(pIniSection,L"AutoSelect",bAutoSelect);
// scheme select dlg dimensions
IniSectionSetInt(pIniSection,L"SelectDlgSizeX",cxStyleSelectDlg);
IniSectionSetInt(pIniSection,L"SelectDlgSizeY",cyStyleSelectDlg);
SaveIniSection(L"Styles",pIniSection);
if (!fStylesModified) {
LocalFree(pIniSection);
return;
}
ZeroMemory(pIniSection,cchIniSection);
for (iLexer = 0; iLexer < NUMLEXERS; iLexer++) {
IniSectionSetString(pIniSection,L"FileNameExtensions",pLexArray[iLexer]->szExtensions);
i = 0;
while (pLexArray[iLexer]->Styles[i].iStyle != -1) {
IniSectionSetString(pIniSection,pLexArray[iLexer]->Styles[i].pszName,pLexArray[iLexer]->Styles[i].szValue);
i++;
}
SaveIniSection(pLexArray[iLexer]->pszName,pIniSection);
ZeroMemory(pIniSection,cchIniSection);
}
LocalFree(pIniSection);
}
//=============================================================================
//
// Style_Import()
//
BOOL Style_Import(HWND hwnd)
{
WCHAR szFile[MAX_PATH * 2] = L"";
WCHAR szFilter[256];
OPENFILENAME ofn;
ZeroMemory(&ofn,sizeof(OPENFILENAME));
GetString(IDS_FILTER_INI,szFilter,COUNTOF(szFilter));
PrepareFilterStr(szFilter);
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = szFilter;
ofn.lpstrFile = szFile;
ofn.lpstrDefExt = L"ini";
ofn.nMaxFile = COUNTOF(szFile);
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_DONTADDTORECENT
| OFN_PATHMUSTEXIST | OFN_SHAREAWARE /*| OFN_NODEREFERENCELINKS*/;
if (GetOpenFileName(&ofn)) {
int i,iLexer;
WCHAR *pIniSection = LocalAlloc(LPTR,sizeof(WCHAR)*32*1024);
int cchIniSection = LocalSize(pIniSection)/sizeof(WCHAR);
for (iLexer = 0; iLexer < NUMLEXERS; iLexer++) {
if (GetPrivateProfileSection(pLexArray[iLexer]->pszName,pIniSection,cchIniSection,szFile)) {
if (!IniSectionGetString(pIniSection,L"FileNameExtensions",pLexArray[iLexer]->pszDefExt,
pLexArray[iLexer]->szExtensions,COUNTOF(pLexArray[iLexer]->szExtensions)))
lstrcpyn(pLexArray[iLexer]->szExtensions,pLexArray[iLexer]->pszDefExt,
COUNTOF(pLexArray[iLexer]->szExtensions));
i = 0;
while (pLexArray[iLexer]->Styles[i].iStyle != -1) {
IniSectionGetString(pIniSection,pLexArray[iLexer]->Styles[i].pszName,
pLexArray[iLexer]->Styles[i].pszDefault,
pLexArray[iLexer]->Styles[i].szValue,
COUNTOF(pLexArray[iLexer]->Styles[i].szValue));
i++;
}
}
}
LocalFree(pIniSection);
return(TRUE);
}
else
return(FALSE);
}
//=============================================================================
//
// Style_Export()
//
BOOL Style_Export(HWND hwnd)
{
WCHAR szFile[MAX_PATH * 2] = L"";
WCHAR szFilter[256];
OPENFILENAME ofn;
ZeroMemory(&ofn,sizeof(OPENFILENAME));
GetString(IDS_FILTER_INI,szFilter,COUNTOF(szFilter));
PrepareFilterStr(szFilter);
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = szFilter;
ofn.lpstrFile = szFile;
ofn.lpstrDefExt = L"ini";
ofn.nMaxFile = COUNTOF(szFile);
ofn.Flags = /*OFN_FILEMUSTEXIST |*/ OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_DONTADDTORECENT
| OFN_PATHMUSTEXIST | OFN_SHAREAWARE /*| OFN_NODEREFERENCELINKS*/ | OFN_OVERWRITEPROMPT;
if (GetSaveFileName(&ofn)) {
int i,iLexer;
WCHAR *pIniSection = LocalAlloc(LPTR,sizeof(WCHAR)*32*1024);
int cchIniSection = LocalSize(pIniSection)/sizeof(WCHAR);
for (iLexer = 0; iLexer < NUMLEXERS; iLexer++) {
IniSectionSetString(pIniSection,L"FileNameExtensions",pLexArray[iLexer]->szExtensions);
i = 0;
while (pLexArray[iLexer]->Styles[i].iStyle != -1) {
IniSectionSetString(pIniSection,pLexArray[iLexer]->Styles[i].pszName,pLexArray[iLexer]->Styles[i].szValue);
i++;
}
WritePrivateProfileSection(pLexArray[iLexer]->pszName,pIniSection,szFile);
ZeroMemory(pIniSection,cchIniSection);
}
LocalFree(pIniSection);
return(TRUE);
}
else
return(FALSE);
}
//=============================================================================
//
// Style_SetLexer()
//
void Style_SetLexer(HWND hwnd,PEDITLEXER pLexNew)
{
int i;
//WCHAR *p;
int rgb;
int iValue;
int iIdx;
// Select default if NULL is specified
if (!pLexNew)
pLexNew = pLexArray[iDefaultLexer];
// Lexer
SendMessage(hwnd,SCI_SETLEXER,pLexNew->iLexer,0);
if (pLexNew->iLexer == SCLEX_HTML || pLexNew->iLexer == SCLEX_XML || pLexNew->iLexer == SCLEX_PERL)
SendMessage(hwnd,SCI_SETSTYLEBITS,7,0);
else
SendMessage(hwnd,SCI_SETSTYLEBITS,5,0);
if (pLexNew->iLexer == SCLEX_CPP)
SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"styling.within.preprocessor",(LPARAM)"1");
else if (pLexNew->iLexer == SCLEX_PASCAL)
SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"lexer.pascal.smart.highlighting",(LPARAM)"1");
else if (pLexNew->iLexer == SCLEX_SQL) {
SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"sql.backslash.escapes",(LPARAM)"1");
SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"lexer.sql.backticks.identifier",(LPARAM)"1");
}
// Add KeyWord Lists
for (i = 0; i < 9; i++)
SendMessage(hwnd,SCI_SETKEYWORDS,i,(LPARAM)pLexNew->pKeyWords->pszKeyWords[i]);
// Use 2nd default style
iIdx = (bUse2ndDefaultStyle) ? 13 : 0;
// Font Quality
Style_SetFontQuality(hwnd,lexDefault.Styles[0+iIdx].szValue);
// Clear
SendMessage(hwnd,SCI_CLEARDOCUMENTSTYLE,0,0);
// Default Values are always set
SendMessage(hwnd,SCI_STYLERESETDEFAULT,0,0);
SendMessage(hwnd,SCI_STYLESETCHARACTERSET,STYLE_DEFAULT,(LPARAM)DEFAULT_CHARSET);
iBaseFontSize = 10;
Style_SetStyles(hwnd,lexDefault.Styles[0+iIdx].iStyle,lexDefault.Styles[0+iIdx].szValue); // default
Style_StrGetSize(lexDefault.Styles[0+iIdx].szValue,&iBaseFontSize); // base size
// Auto-select codepage according to charset
//Style_SetACPfromCharSet(hwnd);
if (!Style_StrGetColor(TRUE,lexDefault.Styles[0+iIdx].szValue,&iValue))
SendMessage(hwnd,SCI_STYLESETFORE,STYLE_DEFAULT,(LPARAM)GetSysColor(COLOR_WINDOWTEXT)); // default text color
if (!Style_StrGetColor(FALSE,lexDefault.Styles[0+iIdx].szValue,&iValue))
SendMessage(hwnd,SCI_STYLESETBACK,STYLE_DEFAULT,(LPARAM)GetSysColor(COLOR_WINDOW)); // default window color
if (pLexNew->iLexer != SCLEX_NULL)
Style_SetStyles(hwnd,pLexNew->Styles[0].iStyle,pLexNew->Styles[0].szValue); // lexer default
SendMessage(hwnd,SCI_STYLECLEARALL,0,0);
Style_SetStyles(hwnd,lexDefault.Styles[1+iIdx].iStyle,lexDefault.Styles[1+iIdx].szValue); // linenumber
Style_SetStyles(hwnd,lexDefault.Styles[2+iIdx].iStyle,lexDefault.Styles[2+iIdx].szValue); // brace light
Style_SetStyles(hwnd,lexDefault.Styles[3+iIdx].iStyle,lexDefault.Styles[3+iIdx].szValue); // brace bad
Style_SetStyles(hwnd,lexDefault.Styles[4+iIdx].iStyle,lexDefault.Styles[4+iIdx].szValue); // control char
Style_SetStyles(hwnd,lexDefault.Styles[5+iIdx].iStyle,lexDefault.Styles[5+iIdx].szValue); // indent guide
// More default values...
if (Style_StrGetColor(TRUE,lexDefault.Styles[6+iIdx].szValue,&rgb)) { // selection fore
SendMessage(hwnd,SCI_SETSELFORE,TRUE,rgb);
SendMessage(hwnd,SCI_SETADDITIONALSELFORE,rgb,0);
}
else {
SendMessage(hwnd,SCI_SETSELFORE,0,0);
SendMessage(hwnd,SCI_SETADDITIONALSELFORE,0,0);
}
if (Style_StrGetColor(FALSE,lexDefault.Styles[6+iIdx].szValue,&iValue)) { // selection back
SendMessage(hwnd,SCI_SETSELBACK,TRUE,iValue);
SendMessage(hwnd,SCI_SETADDITIONALSELBACK,iValue,0);
}
else {
SendMessage(hwnd,SCI_SETSELBACK,TRUE,RGB(0xC0,0xC0,0xC0)); // use a default value...
SendMessage(hwnd,SCI_SETADDITIONALSELBACK,RGB(0xC0,0xC0,0xC0),0);
}
if (Style_StrGetAlpha(lexDefault.Styles[6+iIdx].szValue,&iValue)) { // selection alpha
SendMessage(hwnd,SCI_SETSELALPHA,iValue,0);
SendMessage(hwnd,SCI_SETADDITIONALSELALPHA,iValue,0);
}
else {
SendMessage(hwnd,SCI_SETSELALPHA,SC_ALPHA_NOALPHA,0);
SendMessage(hwnd,SCI_SETADDITIONALSELALPHA,SC_ALPHA_NOALPHA,0);
}
if (StrStrI(lexDefault.Styles[6+iIdx].szValue,L"eolfilled")) // selection eolfilled
SendMessage(hwnd,SCI_SETSELEOLFILLED,1,0);
else
SendMessage(hwnd,SCI_SETSELEOLFILLED,0,0);
if (Style_StrGetColor(TRUE,lexDefault.Styles[7+iIdx].szValue,&rgb)) // whitespace fore
SendMessage(hwnd,SCI_SETWHITESPACEFORE,TRUE,rgb);
else
SendMessage(hwnd,SCI_SETWHITESPACEFORE,0,0);
if (Style_StrGetColor(FALSE,lexDefault.Styles[7+iIdx].szValue,&rgb)) // whitespace back
SendMessage(hwnd,SCI_SETWHITESPACEBACK,TRUE,rgb);
else
SendMessage(hwnd,SCI_SETWHITESPACEBACK,0,0); // use a default value...
// whitespace dot size
iValue = 1;
if (Style_StrGetSize(lexDefault.Styles[7+iIdx].szValue,&iValue)) {
WCHAR tch[32];
WCHAR wchStyle[COUNTOF(lexDefault.Styles[0].szValue)];
lstrcpyn(wchStyle,lexDefault.Styles[7+iIdx].szValue,COUNTOF(lexDefault.Styles[0].szValue));
iValue = max(min(iValue,5),0);
wsprintf(lexDefault.Styles[7+iIdx].szValue,L"size:%i",iValue);
if (Style_StrGetColor(TRUE,wchStyle,&rgb)) {
wsprintf(tch,L"; fore:#%02X%02X%02X",
(int)GetRValue(rgb),
(int)GetGValue(rgb),
(int)GetBValue(rgb));
lstrcat(lexDefault.Styles[7+iIdx].szValue,tch);
}
if (Style_StrGetColor(FALSE,wchStyle,&rgb)) {
wsprintf(tch,L"; back:#%02X%02X%02X",
(int)GetRValue(rgb),
(int)GetGValue(rgb),
(int)GetBValue(rgb));
lstrcat(lexDefault.Styles[7+iIdx].szValue,tch);
}
}
SendMessage(hwnd,SCI_SETWHITESPACESIZE,iValue,0);
if (bHiliteCurrentLine) {
if (Style_StrGetColor(FALSE,lexDefault.Styles[8+iIdx].szValue,&rgb)) // caret line back
{
SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,TRUE,0);
SendMessage(hwnd,SCI_SETCARETLINEBACK,rgb,0);
if (Style_StrGetAlpha(lexDefault.Styles[8+iIdx].szValue,&iValue))
SendMessage(hwnd,SCI_SETCARETLINEBACKALPHA,iValue,0);
else
SendMessage(hwnd,SCI_SETCARETLINEBACKALPHA,SC_ALPHA_NOALPHA,0);
}
else
SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,FALSE,0);
}
else
SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,FALSE,0);
// caret fore
if (!Style_StrGetColor(TRUE,lexDefault.Styles[9+iIdx].szValue,&rgb))
rgb = GetSysColor(COLOR_WINDOWTEXT);
if (!VerifyContrast(rgb,SendMessage(hwnd,SCI_STYLEGETBACK,0,0)))
rgb = SendMessage(hwnd,SCI_STYLEGETFORE,0,0);
SendMessage(hwnd,SCI_SETCARETFORE,rgb,0);
SendMessage(hwnd,SCI_SETADDITIONALCARETFORE,rgb,0);
// caret style and width
if (StrStr(lexDefault.Styles[10+iIdx].szValue,L"block"))
SendMessage(hwnd,SCI_SETCARETSTYLE,CARETSTYLE_BLOCK,0);
else {
iValue = 1;
if (Style_StrGetSize(lexDefault.Styles[10+iIdx].szValue,&iValue)) {
iValue = max(min(iValue,3),1);
wsprintf(lexDefault.Styles[10+iIdx].szValue,L"size:%i",iValue);
}
SendMessage(hwnd,SCI_SETCARETSTYLE,CARETSTYLE_LINE,0);
SendMessage(hwnd,SCI_SETCARETWIDTH,iValue,0);
}
if (SendMessage(hwnd,SCI_GETEDGEMODE,0,0) == EDGE_LINE) {
if (Style_StrGetColor(TRUE,lexDefault.Styles[11+iIdx].szValue,&rgb)) // edge fore
SendMessage(hwnd,SCI_SETEDGECOLOUR,rgb,0);
else
SendMessage(hwnd,SCI_SETEDGECOLOUR,GetSysColor(COLOR_3DLIGHT),0);
}
else {
if (Style_StrGetColor(FALSE,lexDefault.Styles[11+iIdx].szValue,&rgb)) // edge back
SendMessage(hwnd,SCI_SETEDGECOLOUR,rgb,0);
else
SendMessage(hwnd,SCI_SETEDGECOLOUR,GetSysColor(COLOR_3DLIGHT),0);
}
// Extra Line Spacing
if (Style_StrGetSize(lexDefault.Styles[12+iIdx].szValue,&iValue)) {
int iAscent = 0;
int iDescent = 0;
iValue = min(max(iValue,0),64);
if (iValue % 2) {
iAscent++;
iValue--;
}
iAscent += iValue / 2;
iDescent += iValue / 2;
SendMessage(hwnd,SCI_SETEXTRAASCENT,(WPARAM)iAscent,0);
SendMessage(hwnd,SCI_SETEXTRADESCENT,(WPARAM)iDescent,0);
wsprintf(lexDefault.Styles[12+iIdx].szValue,L"size:%i",iValue);
}
else {
SendMessage(hwnd,SCI_SETEXTRAASCENT,0,0);
SendMessage(hwnd,SCI_SETEXTRADESCENT,0,0);
//wsprintf(lexDefault.Styles[12+iIdx].szValue,L"size:0");
}
if (SendMessage(hwnd,SCI_GETINDENTATIONGUIDES,0,0) != SC_IV_NONE)
Style_SetIndentGuides(hwnd,TRUE);
if (pLexNew->iLexer != SCLEX_NULL)
{
int j;
i = 1;
while (pLexNew->Styles[i].iStyle != -1) {
for (j = 0; j < 4 && (pLexNew->Styles[i].iStyle8[j] != 0 || j == 0); ++j)
Style_SetStyles(hwnd,pLexNew->Styles[i].iStyle8[j],pLexNew->Styles[i].szValue);
if (pLexNew->iLexer == SCLEX_HTML && pLexNew->Styles[i].iStyle8[0] == SCE_HPHP_DEFAULT) {
int iRelated[] = { SCE_HPHP_COMMENT, SCE_HPHP_COMMENTLINE, SCE_HPHP_WORD, SCE_HPHP_HSTRING, SCE_HPHP_SIMPLESTRING, SCE_HPHP_NUMBER,
SCE_HPHP_OPERATOR, SCE_HPHP_VARIABLE, SCE_HPHP_HSTRING_VARIABLE, SCE_HPHP_COMPLEX_VARIABLE };
for (j = 0; j < COUNTOF(iRelated); j++)
Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
}
if (pLexNew->iLexer == SCLEX_HTML && pLexNew->Styles[i].iStyle8[0] == SCE_HJ_DEFAULT) {
int iRelated[] = { SCE_HJ_COMMENT, SCE_HJ_COMMENTLINE, SCE_HJ_COMMENTDOC, SCE_HJ_KEYWORD, SCE_HJ_WORD, SCE_HJ_DOUBLESTRING,
SCE_HJ_SINGLESTRING, SCE_HJ_STRINGEOL, SCE_HJ_REGEX, SCE_HJ_NUMBER, SCE_HJ_SYMBOLS };
for (j = 0; j < COUNTOF(iRelated); j++)
Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
}
if (pLexNew->iLexer == SCLEX_HTML && pLexNew->Styles[i].iStyle8[0] == SCE_HJA_DEFAULT) {
int iRelated[] = { SCE_HJA_COMMENT, SCE_HJA_COMMENTLINE, SCE_HJA_COMMENTDOC, SCE_HJA_KEYWORD, SCE_HJA_WORD, SCE_HJA_DOUBLESTRING,
SCE_HJA_SINGLESTRING, SCE_HJA_STRINGEOL, SCE_HJA_REGEX, SCE_HJA_NUMBER, SCE_HJA_SYMBOLS };
for (j = 0; j < COUNTOF(iRelated); j++)
Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
}
if (pLexNew->iLexer == SCLEX_HTML && pLexNew->Styles[i].iStyle8[0] == SCE_HB_DEFAULT) {
int iRelated[] = { SCE_HB_COMMENTLINE, SCE_HB_WORD, SCE_HB_IDENTIFIER, SCE_HB_STRING, SCE_HB_STRINGEOL, SCE_HB_NUMBER };
for (j = 0; j < COUNTOF(iRelated); j++)
Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
}
if (pLexNew->iLexer == SCLEX_HTML && pLexNew->Styles[i].iStyle8[0] == SCE_HBA_DEFAULT) {
int iRelated[] = { SCE_HBA_COMMENTLINE, SCE_HBA_WORD, SCE_HBA_IDENTIFIER, SCE_HBA_STRING, SCE_HBA_STRINGEOL, SCE_HBA_NUMBER };
for (j = 0; j < COUNTOF(iRelated); j++)
Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
}
if ((pLexNew->iLexer == SCLEX_HTML || pLexNew->iLexer == SCLEX_XML) && pLexNew->Styles[i].iStyle8[0] == SCE_H_SGML_DEFAULT) {
int iRelated[] = { SCE_H_SGML_COMMAND, SCE_H_SGML_1ST_PARAM, SCE_H_SGML_DOUBLESTRING, SCE_H_SGML_SIMPLESTRING, SCE_H_SGML_ERROR,
SCE_H_SGML_SPECIAL, SCE_H_SGML_ENTITY, SCE_H_SGML_COMMENT, SCE_H_SGML_1ST_PARAM_COMMENT, SCE_H_SGML_BLOCK_DEFAULT };
for (j = 0; j < COUNTOF(iRelated); j++)
Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
}
if ((pLexNew->iLexer == SCLEX_HTML || pLexNew->iLexer == SCLEX_XML) && pLexNew->Styles[i].iStyle8[0] == SCE_H_CDATA) {
int iRelated[] = { SCE_HP_START, SCE_HP_DEFAULT, SCE_HP_COMMENTLINE, SCE_HP_NUMBER, SCE_HP_STRING,
SCE_HP_CHARACTER, SCE_HP_WORD, SCE_HP_TRIPLE, SCE_HP_TRIPLEDOUBLE, SCE_HP_CLASSNAME,
SCE_HP_DEFNAME, SCE_HP_OPERATOR, SCE_HP_IDENTIFIER, SCE_HPA_START, SCE_HPA_DEFAULT,
SCE_HPA_COMMENTLINE, SCE_HPA_NUMBER, SCE_HPA_STRING, SCE_HPA_CHARACTER, SCE_HPA_WORD,
SCE_HPA_TRIPLE, SCE_HPA_TRIPLEDOUBLE, SCE_HPA_CLASSNAME, SCE_HPA_DEFNAME, SCE_HPA_OPERATOR,
SCE_HPA_IDENTIFIER };
for (j = 0; j < COUNTOF(iRelated); j++)
Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
}
if (pLexNew->iLexer == SCLEX_XML && pLexNew->Styles[i].iStyle8[0] == SCE_H_CDATA) {
int iRelated[] = { SCE_H_SCRIPT, SCE_H_ASP, SCE_H_ASPAT, SCE_H_QUESTION,
SCE_HPHP_DEFAULT, SCE_HPHP_COMMENT, SCE_HPHP_COMMENTLINE, SCE_HPHP_WORD, SCE_HPHP_HSTRING,
SCE_HPHP_SIMPLESTRING, SCE_HPHP_NUMBER, SCE_HPHP_OPERATOR, SCE_HPHP_VARIABLE,
SCE_HPHP_HSTRING_VARIABLE, SCE_HPHP_COMPLEX_VARIABLE, SCE_HJ_START, SCE_HJ_DEFAULT,
SCE_HJ_COMMENT, SCE_HJ_COMMENTLINE, SCE_HJ_COMMENTDOC, SCE_HJ_KEYWORD, SCE_HJ_WORD,
SCE_HJ_DOUBLESTRING, SCE_HJ_SINGLESTRING, SCE_HJ_STRINGEOL, SCE_HJ_REGEX, SCE_HJ_NUMBER,
SCE_HJ_SYMBOLS, SCE_HJA_START, SCE_HJA_DEFAULT, SCE_HJA_COMMENT, SCE_HJA_COMMENTLINE,
SCE_HJA_COMMENTDOC, SCE_HJA_KEYWORD, SCE_HJA_WORD, SCE_HJA_DOUBLESTRING, SCE_HJA_SINGLESTRING,
SCE_HJA_STRINGEOL, SCE_HJA_REGEX, SCE_HJA_NUMBER, SCE_HJA_SYMBOLS, SCE_HB_START, SCE_HB_DEFAULT,
SCE_HB_COMMENTLINE, SCE_HB_WORD, SCE_HB_IDENTIFIER, SCE_HB_STRING, SCE_HB_STRINGEOL,
SCE_HB_NUMBER, SCE_HBA_START, SCE_HBA_DEFAULT, SCE_HBA_COMMENTLINE, SCE_HBA_WORD,
SCE_HBA_IDENTIFIER, SCE_HBA_STRING, SCE_HBA_STRINGEOL, SCE_HBA_NUMBER, SCE_HP_START,
SCE_HP_DEFAULT, SCE_HP_COMMENTLINE, SCE_HP_NUMBER, SCE_HP_STRING, SCE_HP_CHARACTER, SCE_HP_WORD,
SCE_HP_TRIPLE, SCE_HP_TRIPLEDOUBLE, SCE_HP_CLASSNAME, SCE_HP_DEFNAME, SCE_HP_OPERATOR,
SCE_HP_IDENTIFIER, SCE_HPA_START, SCE_HPA_DEFAULT, SCE_HPA_COMMENTLINE, SCE_HPA_NUMBER,
SCE_HPA_STRING, SCE_HPA_CHARACTER, SCE_HPA_WORD, SCE_HPA_TRIPLE, SCE_HPA_TRIPLEDOUBLE,
SCE_HPA_CLASSNAME, SCE_HPA_DEFNAME, SCE_HPA_OPERATOR, SCE_HPA_IDENTIFIER };
for (j = 0; j < COUNTOF(iRelated); j++)
Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
}
if (pLexNew->iLexer == SCLEX_CPP && pLexNew->Styles[i].iStyle8[0] == SCE_C_COMMENT) {
int iRelated[] = { SCE_C_COMMENTLINE, SCE_C_COMMENTDOC, SCE_C_COMMENTLINEDOC, SCE_C_COMMENTDOCKEYWORD, SCE_C_COMMENTDOCKEYWORDERROR };
for (j = 0; j < COUNTOF(iRelated); j++)
Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
}
if (pLexNew -> iLexer == SCLEX_SQL && pLexNew->Styles[i].iStyle8[0] == SCE_SQL_COMMENT) {
int iRelated[] = { SCE_SQL_COMMENTLINE, SCE_SQL_COMMENTDOC, SCE_SQL_COMMENTLINEDOC, SCE_SQL_COMMENTDOCKEYWORD, SCE_SQL_COMMENTDOCKEYWORDERROR };
for (j = 0; j < COUNTOF(iRelated); j++)
Style_SetStyles(hwnd,iRelated[j],pLexNew->Styles[i].szValue);
}
i++;
}
}
SendMessage(hwnd,SCI_COLOURISE,0,(LPARAM)-1);
// Save current lexer
pLexCurrent = pLexNew;
}
//=============================================================================
//
// Style_SetLongLineColors()
//
void Style_SetLongLineColors(HWND hwnd)
{
int rgb;
// Use 2nd default style
int iIdx = (bUse2ndDefaultStyle) ? 13 : 0;
if (SendMessage(hwnd,SCI_GETEDGEMODE,0,0) == EDGE_LINE) {
if (Style_StrGetColor(TRUE,lexDefault.Styles[11+iIdx].szValue,&rgb)) // edge fore
SendMessage(hwnd,SCI_SETEDGECOLOUR,rgb,0);
else
SendMessage(hwnd,SCI_SETEDGECOLOUR,GetSysColor(COLOR_3DLIGHT),0);
}
else {
if (Style_StrGetColor(FALSE,lexDefault.Styles[11+iIdx].szValue,&rgb)) // edge back
SendMessage(hwnd,SCI_SETEDGECOLOUR,rgb,0);
else
SendMessage(hwnd,SCI_SETEDGECOLOUR,GetSysColor(COLOR_3DLIGHT),0);
}
}
//=============================================================================
//
// Style_SetCurrentLineBackground()
//
void Style_SetCurrentLineBackground(HWND hwnd)
{
int rgb, iValue;
// Use 2nd default style
int iIdx = (bUse2ndDefaultStyle) ? 13 : 0;
if (bHiliteCurrentLine) {
if (Style_StrGetColor(FALSE,lexDefault.Styles[8+iIdx].szValue,&rgb)) // caret line back
{
SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,TRUE,0);
SendMessage(hwnd,SCI_SETCARETLINEBACK,rgb,0);
if (Style_StrGetAlpha(lexDefault.Styles[8+iIdx].szValue,&iValue))
SendMessage(hwnd,SCI_SETCARETLINEBACKALPHA,iValue,0);
else
SendMessage(hwnd,SCI_SETCARETLINEBACKALPHA,SC_ALPHA_NOALPHA,0);
}
else
SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,FALSE,0);
}
else
SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,FALSE,0);
}
//=============================================================================
//
// Style_SniffShebang()
//
PEDITLEXER __fastcall Style_SniffShebang(char *pchText)
{
if (StrCmpNA(pchText,"#!",2) == 0) {
char *pch = pchText + 2;
while (*pch == ' ' || *pch == '\t')
pch++;
while (*pch && *pch != ' ' && *pch != '\t' && *pch != '\r' && *pch != '\n')
pch++;
if ((pch - pchText) >= 3 && StrCmpNA(pch-3,"env",3) == 0) {
while (*pch == ' ')
pch++;
while (*pch && *pch != ' ' && *pch != '\t' && *pch != '\r' && *pch != '\n')
pch++;
}
if ((pch - pchText) >= 3 && StrCmpNIA(pch-3,"php",3) == 0)
return(&lexHTML);
else if ((pch - pchText) >= 4 && StrCmpNIA(pch-4,"perl",4) == 0)
return(&lexPL);
else if ((pch - pchText) >= 6 && StrCmpNIA(pch-6,"python",6) == 0)
return(&lexPY);
}
return(NULL);
}
//=============================================================================
//
// Style_MatchLexer()
//
PEDITLEXER __fastcall Style_MatchLexer(LPCWSTR lpszMatch,BOOL bCheckNames)
{
int i;
WCHAR tch[256+16];
WCHAR *p1,*p2;
if (!bCheckNames) {
for (i = 0; i < NUMLEXERS; i++) {
ZeroMemory(tch,sizeof(WCHAR)*COUNTOF(tch));
lstrcpy(tch,pLexArray[i]->szExtensions);
p1 = tch;
while (*p1) {
if (p2 = StrChr(p1,L';'))
*p2 = L'\0';
else
p2 = StrEnd(p1);
StrTrim(p1,L" .");
if (lstrcmpi(p1,lpszMatch) == 0)
return(pLexArray[i]);
p1 = p2+1;
}
}
}
else {
int cch = lstrlen(lpszMatch);
if (cch >= 3) {
for (i = 0; i < NUMLEXERS; i++) {
if (StrCmpNI(pLexArray[i]->pszName,lpszMatch,cch) == 0)
return(pLexArray[i]);
}
}
}
return(NULL);
}
//=============================================================================
//
// Style_SetLexerFromFile()
//
extern int fNoHTMLGuess;
extern int fNoCGIGuess;
extern FILEVARS fvCurFile;
void Style_SetLexerFromFile(HWND hwnd,LPCWSTR lpszFile)
{
LPWSTR lpszExt;
BOOL bFound = FALSE;
PEDITLEXER pLexNew = pLexArray[iDefaultLexer];
PEDITLEXER pLexSniffed;
if ((fvCurFile.mask & FV_MODE) && fvCurFile.tchMode[0]) {
WCHAR wchMode[32];
PEDITLEXER pLexMode;
UINT cp = SendMessage(hwnd,SCI_GETCODEPAGE,0,0);
MultiByteToWideChar(cp,0,fvCurFile.tchMode,-1,wchMode,COUNTOF(wchMode));
if (!fNoCGIGuess && (lstrcmpi(wchMode,L"cgi") == 0 || lstrcmpi(wchMode,L"fcgi") == 0)) {
char tchText[256];
SendMessage(hwnd,SCI_GETTEXT,(WPARAM)COUNTOF(tchText)-1,(LPARAM)tchText);
StrTrimA(tchText," \t\n\r");
if (pLexSniffed = Style_SniffShebang(tchText)) {
pLexNew = pLexSniffed;
bFound = TRUE;
}
}
if (!bFound) {
if (pLexMode = Style_MatchLexer(wchMode,FALSE)) {
pLexNew = pLexMode;
bFound = TRUE;
}
else if (pLexMode = Style_MatchLexer(wchMode,TRUE)) {
pLexNew = pLexMode;
bFound = TRUE;
}
}
}
lpszExt = PathFindExtension(lpszFile);
if (!bFound && bAutoSelect && /* bAutoSelect == FALSE skips lexer search */
(lpszFile && lstrlen(lpszFile) > 0 && *lpszExt)) {
if (*lpszExt == L'.')
lpszExt++;
if (!fNoCGIGuess && (lstrcmpi(lpszExt,L"cgi") == 0 || lstrcmpi(lpszExt,L"fcgi") == 0)) {
char tchText[256];
SendMessage(hwnd,SCI_GETTEXT,(WPARAM)COUNTOF(tchText)-1,(LPARAM)tchText);
StrTrimA(tchText," \t\n\r");
if (pLexSniffed = Style_SniffShebang(tchText)) {
pLexNew = pLexSniffed;
bFound = TRUE;
}
}
// check associated extensions
if (!bFound) {
if (pLexSniffed = Style_MatchLexer(lpszExt,FALSE)) {
pLexNew = pLexSniffed;
bFound = TRUE;
}
}
}
if (!bFound && bAutoSelect &&
lstrcmpi(PathFindFileName(lpszFile),L"makefile") == 0) {
pLexNew = &lexMAK;
bFound = TRUE;
}
if (!bFound && bAutoSelect && (!fNoHTMLGuess || !fNoCGIGuess)) {
char tchText[512];
SendMessage(hwnd,SCI_GETTEXT,(WPARAM)COUNTOF(tchText)-1,(LPARAM)tchText);
StrTrimA(tchText," \t\n\r");
if (!fNoHTMLGuess && tchText[0] == '<') {
if (StrStrIA(tchText,"<html"))
pLexNew = &lexHTML;
else
pLexNew = &lexXML;
bFound = TRUE;
}
else if (!fNoCGIGuess && (pLexSniffed = Style_SniffShebang(tchText))) {
pLexNew = pLexSniffed;
bFound = TRUE;
}
}
// Apply the new lexer
Style_SetLexer(hwnd,pLexNew);
}
//=============================================================================
//
// Style_SetLexerFromName()
//
void Style_SetLexerFromName(HWND hwnd,LPCWSTR lpszFile,LPCWSTR lpszName)
{
PEDITLEXER pLexNew;
if (pLexNew = Style_MatchLexer(lpszName,FALSE))
Style_SetLexer(hwnd,pLexNew);
else if (pLexNew = Style_MatchLexer(lpszName,TRUE))
Style_SetLexer(hwnd,pLexNew);
else
Style_SetLexerFromFile(hwnd,lpszFile);
}
//=============================================================================
//
// Style_SetDefaultLexer()
//
void Style_SetDefaultLexer(HWND hwnd)
{
Style_SetLexer(hwnd,pLexArray[0]);
}
//=============================================================================
//
// Style_SetHTMLLexer()
//
void Style_SetHTMLLexer(HWND hwnd)
{
Style_SetLexer(hwnd,pLexArray[1]);
}
//=============================================================================
//
// Style_SetXMLLexer()
//
void Style_SetXMLLexer(HWND hwnd)
{
Style_SetLexer(hwnd,pLexArray[2]);
}
//=============================================================================
//
// Style_SetLexerFromID()
//
void Style_SetLexerFromID(HWND hwnd,int id)
{
if (id >= 0 && id < NUMLEXERS) {
Style_SetLexer(hwnd,pLexArray[id]);
}
}
//=============================================================================
//
// Style_ToggleUse2ndDefault()
//
void Style_ToggleUse2ndDefault(HWND hwnd)
{
bUse2ndDefaultStyle = (bUse2ndDefaultStyle) ? 0 : 1;
Style_SetLexer(hwnd,pLexCurrent);
}
//=============================================================================
//
// Style_SetDefaultFont()
//
void Style_SetDefaultFont(HWND hwnd)
{
int iIdx = (bUse2ndDefaultStyle) ? 13 : 0;
if (Style_SelectFont(hwnd,
lexDefault.Styles[0+iIdx].szValue,
COUNTOF(lexDefault.Styles[0+iIdx].szValue),
TRUE)) {
fStylesModified = TRUE;
Style_SetLexer(hwnd,pLexCurrent);
}
}
//=============================================================================
//
// Style_GetUse2ndDefault()
//
BOOL Style_GetUse2ndDefault(HWND hwnd)
{
return (bUse2ndDefaultStyle);
}
//=============================================================================
//
// Style_SetIndentGuides()
//
extern int flagSimpleIndentGuides;
void Style_SetIndentGuides(HWND hwnd,BOOL bShow)
{
int iIndentView = SC_IV_NONE;
if (bShow) {
if (!flagSimpleIndentGuides) {
if (SendMessage(hwnd,SCI_GETLEXER,0,0) == SCLEX_PYTHON)
iIndentView = SC_IV_LOOKFORWARD;
else
iIndentView = SC_IV_LOOKBOTH;
}
else
iIndentView = SC_IV_REAL;
}
SendMessage(hwnd,SCI_SETINDENTATIONGUIDES,iIndentView,0);
}
//=============================================================================
//
// Style_GetFileOpenDlgFilter()
//
extern WCHAR tchFileDlgFilters[5*1024];
BOOL Style_GetOpenDlgFilterStr(LPWSTR lpszFilter,int cchFilter)
{
if (lstrlen(tchFileDlgFilters) == 0)
GetString(IDS_FILTER_ALL,lpszFilter,cchFilter);
else {
lstrcpyn(lpszFilter,tchFileDlgFilters,cchFilter-2);
lstrcat(lpszFilter,L"||");
}
PrepareFilterStr(lpszFilter);
return TRUE;
}
//=============================================================================
//
// IsConsolasAvailable()
//
int CALLBACK EnumFontsProc( CONST LOGFONT *plf, CONST TEXTMETRIC *ptm,
DWORD FontType, LPARAM lParam )
{
*((PBOOL)lParam) = TRUE;
return(FALSE);
}
BOOL IsConsolasAvailable( )
{
// Yes, EnumFonts is old, but we neither need nor care about the additional
// info returned by the newer font enumeration APIs; all that we care about
// is whether the callback is ever called.
BOOL fFound = FALSE;
HDC hDC = GetDC(NULL);
EnumFonts(hDC, TEXT("Consolas"), EnumFontsProc, (LPARAM)&fFound);
ReleaseDC(NULL, hDC);
return(fFound);
}
//=============================================================================
//
// Style_StrGetFont()
//
BOOL Style_StrGetFont(LPCWSTR lpszStyle,LPWSTR lpszFont,int cchFont)
{
WCHAR tch[256];
WCHAR *p;
if (p = StrStrI(lpszStyle,L"font:"))
{
lstrcpy(tch,p + lstrlen(L"font:"));
if (p = StrChr(tch,L';'))
*p = L'\0';
TrimString(tch);
if (lstrcmpi(tch,L"Default") == 0)
{
if (IsConsolasAvailable())
lstrcpyn(lpszFont,L"Consolas",cchFont);
else
lstrcpyn(lpszFont,L"Lucida Console",cchFont);
}
else
{
lstrcpyn(lpszFont,tch,cchFont);
}
return TRUE;
}
return FALSE;
}
//=============================================================================
//
// Style_StrGetFontQuality()
//
BOOL Style_StrGetFontQuality(LPCWSTR lpszStyle,LPWSTR lpszQuality,int cchQuality)
{
WCHAR tch[256];
WCHAR *p;
if (p = StrStrI(lpszStyle,L"smoothing:"))
{
lstrcpy(tch,p + lstrlen(L"smoothing:"));
if (p = StrChr(tch,L';'))
*p = L'\0';
TrimString(tch);
if (lstrcmpi(tch,L"none") == 0 ||
lstrcmpi(tch,L"standard") == 0 ||
lstrcmpi(tch,L"cleartype") == 0 ||
lstrcmpi(tch,L"default") == 0) {
lstrcpyn(lpszQuality,tch,cchQuality);
return TRUE;
}
}
return FALSE;
}
//=============================================================================
//
// Style_StrGetCharSet()
//
BOOL Style_StrGetCharSet(LPCWSTR lpszStyle,int *i)
{
WCHAR tch[256];
WCHAR *p;
int iValue;
int itok;
if (p = StrStrI(lpszStyle,L"charset:"))
{
lstrcpy(tch,p + lstrlen(L"charset:"));
if (p = StrChr(tch,L';'))
*p = L'\0';
TrimString(tch);
itok = swscanf(tch,L"%i",&iValue);
if (itok == 1)
{
*i = iValue;
return TRUE;
}
}
return FALSE;
}
//=============================================================================
//
// Style_StrGetSize()
//
BOOL Style_StrGetSize(LPCWSTR lpszStyle,int *i)
{
WCHAR tch[256];
WCHAR *p;
int iValue;
int iSign = 0;
int itok;
if (p = StrStrI(lpszStyle,L"size:"))
{
lstrcpy(tch,p + lstrlen(L"size:"));
if (tch[0] == L'+')
{
iSign = 1;
tch[0] = L' ';
}
else if (tch[0] == L'-')
{
iSign = -1;
tch[0] = L' ';
}
if (p = StrChr(tch,L';'))
*p = L'\0';
TrimString(tch);
itok = swscanf(tch,L"%i",&iValue);
if (itok == 1)
{
if (iSign == 0)
*i = iValue;
else
*i = max(0,iBaseFontSize + iValue * iSign); // size must be +
return TRUE;
}
}
return FALSE;
}
//=============================================================================
//
// Style_StrGetSizeStr()
//
BOOL Style_StrGetSizeStr(LPCWSTR lpszStyle,LPWSTR lpszSize,int cchSize)
{
WCHAR tch[256];
WCHAR *p;
if (p = StrStrI(lpszStyle,L"size:"))
{
lstrcpy(tch,p + lstrlen(L"size:"));
if (p = StrChr(tch,L';'))
*p = L'\0';
TrimString(tch);
lstrcpyn(lpszSize,tch,cchSize);
return TRUE;
}
return FALSE;
}
//=============================================================================
//
// Style_StrGetColor()
//
BOOL Style_StrGetColor(BOOL bFore,LPCWSTR lpszStyle,int *rgb)
{
WCHAR tch[256];
WCHAR *p;
int iValue;
int itok;
WCHAR *pItem = (bFore) ? L"fore:" : L"back:";
if (p = StrStrI(lpszStyle,pItem))
{
lstrcpy(tch,p + lstrlen(pItem));
if (tch[0] == L'#')
tch[0] = L' ';
if (p = StrChr(tch,L';'))
*p = L'\0';
TrimString(tch);
itok = swscanf(tch,L"%x",&iValue);
if (itok == 1)
{
*rgb = RGB((iValue&0xFF0000) >> 16,(iValue&0xFF00) >> 8,iValue&0xFF);
return TRUE;
}
}
return FALSE;
}
//=============================================================================
//
// Style_StrGetCase()
//
BOOL Style_StrGetCase(LPCWSTR lpszStyle,int *i)
{
WCHAR tch[256];
WCHAR *p;
if (p = StrStrI(lpszStyle,L"case:"))
{
lstrcpy(tch,p + lstrlen(L"case:"));
if (p = StrChr(tch,L';'))
*p = L'\0';
TrimString(tch);
if (tch[0] == L'u' || tch[0] == L'U') {
*i = SC_CASE_UPPER;
return TRUE;
}
else if (tch[0] == L'l' || tch[0] == L'L') {
*i = SC_CASE_LOWER;
return TRUE;
}
}
return FALSE;
}
//=============================================================================
//
// Style_StrGetAlpha()
//
BOOL Style_StrGetAlpha(LPCWSTR lpszStyle,int *i)
{
WCHAR tch[256];
WCHAR *p;
int iValue;
int itok;
if (p = StrStrI(lpszStyle,L"alpha:"))
{
lstrcpy(tch,p + lstrlen(L"alpha:"));
if (p = StrChr(tch,L';'))
*p = L'\0';
TrimString(tch);
itok = swscanf(tch,L"%i",&iValue);
if (itok == 1)
{
*i = min(max(SC_ALPHA_TRANSPARENT,iValue),SC_ALPHA_OPAQUE);
return TRUE;
}
}
return FALSE;
}
//=============================================================================
//
// Style_SelectFont()
//
BOOL Style_SelectFont(HWND hwnd,LPWSTR lpszStyle,int cchStyle,BOOL bDefaultStyle)
{
CHOOSEFONT cf;
LOGFONT lf;
WCHAR szNewStyle[512];
int iValue;
WCHAR tch[32];
HDC hdc;
ZeroMemory(&cf,sizeof(CHOOSEFONT));
ZeroMemory(&lf,sizeof(LOGFONT));
// Map lpszStyle to LOGFONT
if (Style_StrGetFont(lpszStyle,tch,COUNTOF(tch)))
lstrcpyn(lf.lfFaceName,tch,COUNTOF(lf.lfFaceName));
if (Style_StrGetCharSet(lpszStyle,&iValue))
lf.lfCharSet = iValue;
if (Style_StrGetSize(lpszStyle,&iValue)) {
hdc = GetDC(hwnd);
lf.lfHeight = -MulDiv(iValue,GetDeviceCaps(hdc,LOGPIXELSY),72);
ReleaseDC(hwnd,hdc);
}
lf.lfWeight = (StrStrI(lpszStyle,L"bold")) ? FW_BOLD : FW_NORMAL;
lf.lfItalic = (StrStrI(lpszStyle,L"italic")) ? 1 : 0;
// Init cf
cf.lStructSize = sizeof(CHOOSEFONT);
cf.hwndOwner = hwnd;
cf.lpLogFont = &lf;
cf.Flags = CF_INITTOLOGFONTSTRUCT /*| CF_NOSCRIPTSEL*/ | CF_SCREENFONTS;
if (HIBYTE(GetKeyState(VK_SHIFT)))
cf.Flags |= CF_FIXEDPITCHONLY;
if (!ChooseFont(&cf) || !lstrlen(lf.lfFaceName))
return FALSE;
// Map back to lpszStyle
lstrcpy(szNewStyle,L"font:");
lstrcat(szNewStyle,lf.lfFaceName);
if (Style_StrGetFontQuality(lpszStyle,tch,COUNTOF(tch)))
{
lstrcat(szNewStyle,L"; smoothing:");
lstrcat(szNewStyle,tch);
}
if (bDefaultStyle &&
lf.lfCharSet != DEFAULT_CHARSET &&
lf.lfCharSet != ANSI_CHARSET &&
lf.lfCharSet != iDefaultCharSet) {
lstrcat(szNewStyle,L"; charset:");
wsprintf(tch,L"%i",lf.lfCharSet);
lstrcat(szNewStyle,tch);
}
lstrcat(szNewStyle,L"; size:");
wsprintf(tch,L"%i",cf.iPointSize/10);
lstrcat(szNewStyle,tch);
if (cf.nFontType & BOLD_FONTTYPE)
lstrcat(szNewStyle,L"; bold");
if (cf.nFontType & ITALIC_FONTTYPE)
lstrcat(szNewStyle,L"; italic");
if (StrStrI(lpszStyle,L"underline"))
lstrcat(szNewStyle,L"; underline");
// save colors
if (Style_StrGetColor(TRUE,lpszStyle,&iValue))
{
wsprintf(tch,L"; fore:#%02X%02X%02X",
(int)GetRValue(iValue),
(int)GetGValue(iValue),
(int)GetBValue(iValue));
lstrcat(szNewStyle,tch);
}
if (Style_StrGetColor(FALSE,lpszStyle,&iValue))
{
wsprintf(tch,L"; back:#%02X%02X%02X",
(int)GetRValue(iValue),
(int)GetGValue(iValue),
(int)GetBValue(iValue));
lstrcat(szNewStyle,tch);
}
if (StrStrI(lpszStyle,L"eolfilled"))
lstrcat(szNewStyle,L"; eolfilled");
if (Style_StrGetCase(lpszStyle,&iValue)) {
lstrcat(szNewStyle,L"; case:");
lstrcat(szNewStyle,(iValue == SC_CASE_UPPER) ? L"u" : L"");
}
if (Style_StrGetAlpha(lpszStyle,&iValue)) {
lstrcat(szNewStyle,L"; alpha:");
wsprintf(tch,L"%i",iValue);
lstrcat(szNewStyle,tch);
}
lstrcpyn(lpszStyle,szNewStyle,cchStyle);
return TRUE;
}
//=============================================================================
//
// Style_SelectColor()
//
BOOL Style_SelectColor(HWND hwnd,BOOL bFore,LPWSTR lpszStyle,int cchStyle)
{
CHOOSECOLOR cc;
WCHAR szNewStyle[512];
int iRGBResult;
int iValue;
WCHAR tch[32];
ZeroMemory(&cc,sizeof(CHOOSECOLOR));
iRGBResult = (bFore) ? GetSysColor(COLOR_WINDOWTEXT) : GetSysColor(COLOR_WINDOW);
Style_StrGetColor(bFore,lpszStyle,&iRGBResult);
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.hwndOwner = hwnd;
cc.rgbResult = iRGBResult;
cc.lpCustColors = crCustom;
cc.Flags = CC_FULLOPEN | CC_RGBINIT | CC_SOLIDCOLOR;
if (!ChooseColor(&cc))
return FALSE;
iRGBResult = cc.rgbResult;
// Rebuild style string
lstrcpy(szNewStyle,L"");
if (Style_StrGetFont(lpszStyle,tch,COUNTOF(tch)))
{
lstrcat(szNewStyle,L"font:");
lstrcat(szNewStyle,tch);
}
if (Style_StrGetFontQuality(lpszStyle,tch,COUNTOF(tch)))
{
if (lstrlen(szNewStyle))
lstrcat(szNewStyle,L"; ");
lstrcat(szNewStyle,L"smoothing:");
lstrcat(szNewStyle,tch);
}
if (Style_StrGetCharSet(lpszStyle,&iValue))
{
if (lstrlen(szNewStyle))
lstrcat(szNewStyle,L"; ");
wsprintf(tch,L"charset:%i",iValue);
lstrcat(szNewStyle,tch);
}
if (Style_StrGetSizeStr(lpszStyle,tch,COUNTOF(tch)))
{
if (lstrlen(szNewStyle))
lstrcat(szNewStyle,L"; ");
lstrcat(szNewStyle,L"size:");
lstrcat(szNewStyle,tch);
}
if (StrStrI(lpszStyle,L"bold"))
{
if (lstrlen(szNewStyle))
lstrcat(szNewStyle,L"; ");
lstrcat(szNewStyle,L"bold");
}
if (StrStrI(lpszStyle,L"italic"))
{
if (lstrlen(szNewStyle))
lstrcat(szNewStyle,L"; ");
lstrcat(szNewStyle,L"italic");
}
if (StrStrI(lpszStyle,L"underline"))
{
if (lstrlen(szNewStyle))
lstrcat(szNewStyle,L"; ");
lstrcat(szNewStyle,L"underline");
}
if (bFore)
{
if (lstrlen(szNewStyle))
lstrcat(szNewStyle,L"; ");
wsprintf(tch,L"fore:#%02X%02X%02X",
(int)GetRValue(iRGBResult),
(int)GetGValue(iRGBResult),
(int)GetBValue(iRGBResult));
lstrcat(szNewStyle,tch);
if (Style_StrGetColor(FALSE,lpszStyle,&iValue))
{
wsprintf(tch,L"; back:#%02X%02X%02X",
(int)GetRValue(iValue),
(int)GetGValue(iValue),
(int)GetBValue(iValue));
lstrcat(szNewStyle,tch);
}
}
else
{
if (lstrlen(szNewStyle))
lstrcat(szNewStyle,L"; ");
if (Style_StrGetColor(TRUE,lpszStyle,&iValue))
{
wsprintf(tch,L"fore:#%02X%02X%02X; ",
(int)GetRValue(iValue),
(int)GetGValue(iValue),
(int)GetBValue(iValue));
lstrcat(szNewStyle,tch);
}
wsprintf(tch,L"back:#%02X%02X%02X",
(int)GetRValue(iRGBResult),
(int)GetGValue(iRGBResult),
(int)GetBValue(iRGBResult));
lstrcat(szNewStyle,tch);
}
if (StrStrI(lpszStyle,L"eolfilled"))
lstrcat(szNewStyle,L"; eolfilled");
if (Style_StrGetCase(lpszStyle,&iValue)) {
lstrcat(szNewStyle,L"; case:");
lstrcat(szNewStyle,(iValue == SC_CASE_UPPER) ? L"u" : L"");
}
if (Style_StrGetAlpha(lpszStyle,&iValue)) {
lstrcat(szNewStyle,L"; alpha:");
wsprintf(tch,L"%i",iValue);
lstrcat(szNewStyle,tch);
}
lstrcpyn(lpszStyle,szNewStyle,cchStyle);
return TRUE;
}
//=============================================================================
//
// Style_SetStyles()
//
void Style_SetStyles(HWND hwnd,int iStyle,LPCWSTR lpszStyle)
{
WCHAR tch[256];
WCHAR *p;
int iValue;
// Font
if (Style_StrGetFont(lpszStyle,tch,COUNTOF(tch))) {
char mch[256];
WideCharToMultiByte(CP_ACP,0,tch,-1,mch,COUNTOF(mch),NULL,NULL);
SendMessage(hwnd,SCI_STYLESETFONT,iStyle,(LPARAM)mch);
}
// Size
if (Style_StrGetSize(lpszStyle,&iValue))
SendMessage(hwnd,SCI_STYLESETSIZE,iStyle,(LPARAM)iValue);
// Fore
if (Style_StrGetColor(TRUE,lpszStyle,&iValue))
SendMessage(hwnd,SCI_STYLESETFORE,iStyle,(LPARAM)iValue);
// Back
if (Style_StrGetColor(FALSE,lpszStyle,&iValue))
SendMessage(hwnd,SCI_STYLESETBACK,iStyle,(LPARAM)iValue);
// Bold
if (p = StrStrI(lpszStyle,L"bold"))
SendMessage(hwnd,SCI_STYLESETBOLD,iStyle,(LPARAM)TRUE);
else
SendMessage(hwnd,SCI_STYLESETBOLD,iStyle,(LPARAM)FALSE);
// Italic
if (p = StrStrI(lpszStyle,L"italic"))
SendMessage(hwnd,SCI_STYLESETITALIC,iStyle,(LPARAM)TRUE);
else
SendMessage(hwnd,SCI_STYLESETITALIC,iStyle,(LPARAM)FALSE);
// Underline
if (p = StrStrI(lpszStyle,L"underline"))
SendMessage(hwnd,SCI_STYLESETUNDERLINE,iStyle,(LPARAM)TRUE);
else
SendMessage(hwnd,SCI_STYLESETUNDERLINE,iStyle,(LPARAM)FALSE);
// EOL Filled
if (p = StrStrI(lpszStyle,L"eolfilled"))
SendMessage(hwnd,SCI_STYLESETEOLFILLED,iStyle,(LPARAM)TRUE);
else
SendMessage(hwnd,SCI_STYLESETEOLFILLED,iStyle,(LPARAM)FALSE);
// Case
if (Style_StrGetCase(lpszStyle,&iValue))
SendMessage(hwnd,SCI_STYLESETCASE,iStyle,(LPARAM)iValue);
// Character Set
if (Style_StrGetCharSet(lpszStyle,&iValue))
SendMessage(hwnd,SCI_STYLESETCHARACTERSET,iStyle,(LPARAM)iValue);
}
//=============================================================================
//
// Style_SetFontQuality()
//
void Style_SetFontQuality(HWND hwnd,LPCWSTR lpszStyle) {
WPARAM wQuality = SC_EFF_QUALITY_DEFAULT;
WCHAR tch[32];
if (Style_StrGetFontQuality(lpszStyle,tch,COUNTOF(tch))) {
if (lstrcmpi(tch,L"none") == 0)
wQuality = SC_EFF_QUALITY_NON_ANTIALIASED;
else if (lstrcmpi(tch,L"standard") == 0)
wQuality = SC_EFF_QUALITY_ANTIALIASED;
else if (lstrcmpi(tch,L"cleartype") == 0)
wQuality = SC_EFF_QUALITY_LCD_OPTIMIZED;
else
wQuality = SC_EFF_QUALITY_DEFAULT;
}
else {
WCHAR tch[32];
if (Style_StrGetFont(lpszStyle,tch,COUNTOF(tch))) {
if (lstrcmpi(tch,L"Calibri") == 0 ||
lstrcmpi(tch,L"Cambria") == 0 ||
lstrcmpi(tch,L"Candara") == 0 ||
lstrcmpi(tch,L"Consolas") == 0 ||
lstrcmpi(tch,L"Constantia") == 0 ||
lstrcmpi(tch,L"Corbel") == 0 ||
lstrcmpi(tch,L"Segoe UI") == 0)
wQuality = SC_EFF_QUALITY_LCD_OPTIMIZED;
}
else
wQuality = SC_EFF_QUALITY_DEFAULT;
}
SendMessage(hwnd,SCI_SETFONTQUALITY,wQuality,0);
}
//=============================================================================
//
// Style_GetCurrentLexerName()
//
void Style_GetCurrentLexerName(LPWSTR lpszName,int cchName)
{
if (!GetString(pLexCurrent->rid,lpszName,cchName))
lstrcpyn(lpszName,pLexCurrent->pszName,cchName);
}
//=============================================================================
//
// Style_GetLexerIconId()
//
int Style_GetLexerIconId(PEDITLEXER plex)
{
WCHAR *p;
WCHAR *pszExtensions;
WCHAR *pszFile;
SHFILEINFO shfi;
if (lstrlen(plex->szExtensions))
pszExtensions = plex->szExtensions;
else
pszExtensions = plex->pszDefExt;
pszFile = GlobalAlloc(GPTR,sizeof(WCHAR)*(lstrlen(pszExtensions) + lstrlen(L"*.txt") + 16));
lstrcpy(pszFile,L"*.");
lstrcat(pszFile,pszExtensions);
if (p = StrChr(pszFile,L';'))
*p = L'\0';
// check for ; at beginning
if (lstrlen(pszFile) < 3)
lstrcat(pszFile,L"txt");
SHGetFileInfo(pszFile,FILE_ATTRIBUTE_NORMAL,&shfi,sizeof(SHFILEINFO),
SHGFI_SMALLICON | SHGFI_SYSICONINDEX | SHGFI_USEFILEATTRIBUTES);
GlobalFree(pszFile);
return (shfi.iIcon);
}
//=============================================================================
//
// Style_AddLexerToTreeView()
//
void Style_AddLexerToTreeView(HWND hwnd,PEDITLEXER plex)
{
int i = 0;
WCHAR tch[128];
HTREEITEM hTreeNode;
TVINSERTSTRUCT tvis;
ZeroMemory(&tvis,sizeof(TVINSERTSTRUCT));
tvis.hInsertAfter = TVI_LAST;
tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
if (GetString(plex->rid,tch,COUNTOF(tch)))
tvis.item.pszText = tch;
else
tvis.item.pszText = plex->pszName;
tvis.item.iImage = Style_GetLexerIconId(plex);
tvis.item.iSelectedImage = tvis.item.iImage;
tvis.item.lParam = (LPARAM)plex;
hTreeNode = (HTREEITEM)TreeView_InsertItem(hwnd,&tvis);
tvis.hParent = hTreeNode;
tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
//tvis.item.iImage = -1;
//tvis.item.iSelectedImage = -1;
while (plex->Styles[i].iStyle != -1) {
if (GetString(plex->Styles[i].rid,tch,COUNTOF(tch)))
tvis.item.pszText = tch;
else
tvis.item.pszText = plex->Styles[i].pszName;
tvis.item.lParam = (LPARAM)(&plex->Styles[i]);
TreeView_InsertItem(hwnd,&tvis);
i++;
}
}
//=============================================================================
//
// Style_AddLexerToListView()
//
void Style_AddLexerToListView(HWND hwnd,PEDITLEXER plex)
{
WCHAR tch[128];
LVITEM lvi;
ZeroMemory(&lvi,sizeof(LVITEM));
lvi.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_TEXT;
lvi.iItem = ListView_GetItemCount(hwnd);
if (GetString(plex->rid,tch,COUNTOF(tch)))
lvi.pszText = tch;
else
lvi.pszText = plex->pszName;
lvi.iImage = Style_GetLexerIconId(plex);
lvi.lParam = (LPARAM)plex;
ListView_InsertItem(hwnd,&lvi);
}
//=============================================================================
//
// Style_ConfigDlgProc()
//
BOOL CALLBACK Style_ConfigDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
{
static HWND hwndTV;
static BOOL fDragging;
static PEDITLEXER pCurrentLexer;
static PEDITSTYLE pCurrentStyle;
static HFONT hFontTitle;
static HBRUSH hbrFore;
static HBRUSH hbrBack;
switch(umsg)
{
case WM_INITDIALOG:
{
int i;
SHFILEINFO shfi;
LOGFONT lf;
hwndTV = GetDlgItem(hwnd,IDC_STYLELIST);
fDragging = FALSE;
TreeView_SetImageList(hwndTV,
(HIMAGELIST)SHGetFileInfo(L"C:\\",0,&shfi,sizeof(SHFILEINFO),
SHGFI_SMALLICON | SHGFI_SYSICONINDEX),TVSIL_NORMAL);
// Add lexers
for (i = 0; i < NUMLEXERS; i++)
Style_AddLexerToTreeView(hwndTV,pLexArray[i]);
pCurrentLexer = 0;
pCurrentStyle = 0;
//SetExplorerTheme(hwndTV);
//TreeView_Expand(hwndTV,TreeView_GetRoot(hwndTV),TVE_EXPAND);
TreeView_Select(hwndTV,TreeView_GetRoot(hwndTV),TVGN_CARET);
SendDlgItemMessage(hwnd,IDC_STYLEEDIT,EM_LIMITTEXT,COUNTOF(lexDefault.Styles[0].szValue)-1,0);
MakeBitmapButton(hwnd,IDC_PREVSTYLE,g_hInstance,IDB_PREV);
MakeBitmapButton(hwnd,IDC_NEXTSTYLE,g_hInstance,IDB_NEXT);
// Setup title font
if (hFontTitle)
DeleteObject(hFontTitle);
if (NULL == (hFontTitle = (HFONT)SendDlgItemMessage(hwnd,IDC_TITLE,WM_GETFONT,0,0)))
hFontTitle = GetStockObject(DEFAULT_GUI_FONT);
GetObject(hFontTitle,sizeof(LOGFONT),&lf);
lf.lfHeight += lf.lfHeight / 5;
lf.lfWeight = FW_BOLD;
hFontTitle = CreateFontIndirect(&lf);
SendDlgItemMessage(hwnd,IDC_TITLE,WM_SETFONT,(WPARAM)hFontTitle,TRUE);
CenterDlgInParent(hwnd);
}
return TRUE;
case WM_DESTROY:
DeleteBitmapButton(hwnd,IDC_STYLEFORE);
DeleteBitmapButton(hwnd,IDC_STYLEBACK);
DeleteBitmapButton(hwnd,IDC_PREVSTYLE);
DeleteBitmapButton(hwnd,IDC_NEXTSTYLE);
return FALSE;
case WM_NOTIFY:
if (((LPNMHDR)(lParam))->idFrom == IDC_STYLELIST)
{
LPNMTREEVIEW lpnmtv = (LPNMTREEVIEW)lParam;
switch (lpnmtv->hdr.code)
{
case TVN_SELCHANGED:
{
if (pCurrentStyle)
GetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentStyle->szValue,COUNTOF(pCurrentStyle->szValue));
else if (pCurrentLexer) {
if (!GetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentLexer->szExtensions,COUNTOF(pCurrentLexer->szExtensions)))
lstrcpy(pCurrentLexer->szExtensions,pCurrentLexer->pszDefExt);
}
// a lexer has been selected
if (!TreeView_GetParent(hwndTV,lpnmtv->itemNew.hItem))
{
WCHAR wch[128];
GetDlgItemText(hwnd,IDC_STYLELABELS,wch,COUNTOF(wch));
if (StrChr(wch,L'|')) *StrChr(wch,L'|') = 0;
pCurrentStyle = 0;
if (pCurrentLexer = (PEDITLEXER)lpnmtv->itemNew.lParam)
{
SetDlgItemText(hwnd,IDC_STYLELABEL,wch);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEEDIT),TRUE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEFONT),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEFORE),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEBACK),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEDEFAULT),TRUE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEBOLD),FALSE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEITALIC),FALSE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEUNDERLINE),FALSE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEEOLFILLED),FALSE);
//CheckDlgButton(hwnd,IDC_STYLEBOLD,BST_UNCHECKED);
//CheckDlgButton(hwnd,IDC_STYLEITALIC,BST_UNCHECKED);
//CheckDlgButton(hwnd,IDC_STYLEUNDERLINE,BST_UNCHECKED);
//CheckDlgButton(hwnd,IDC_STYLEEOLFILLED,BST_UNCHECKED);
SetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentLexer->szExtensions);
}
else
{
SetDlgItemText(hwnd,IDC_STYLELABEL,L"");
EnableWindow(GetDlgItem(hwnd,IDC_STYLEEDIT),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEFONT),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEFORE),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEBACK),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEDEFAULT),FALSE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEBOLD),FALSE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEITALIC),FALSE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEUNDERLINE),FALSE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEEOLFILLED),FALSE);
//CheckDlgButton(hwnd,IDC_STYLEBOLD,BST_UNCHECKED);
//CheckDlgButton(hwnd,IDC_STYLEITALIC,BST_UNCHECKED);
//CheckDlgButton(hwnd,IDC_STYLEUNDERLINE,BST_UNCHECKED);
//CheckDlgButton(hwnd,IDC_STYLEEOLFILLED,BST_UNCHECKED);
SetDlgItemText(hwnd,IDC_STYLEEDIT,L"");
}
}
// a style has been selected
else
{
WCHAR wch[128];
GetDlgItemText(hwnd,IDC_STYLELABELS,wch,COUNTOF(wch));
if (StrChr(wch,L'|')) *StrChr(wch,L'|') = 0;
pCurrentLexer = 0;
if (pCurrentStyle = (PEDITSTYLE)lpnmtv->itemNew.lParam)
{
SetDlgItemText(hwnd,IDC_STYLELABEL,StrEnd(wch)+1);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEEDIT),TRUE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEFONT),TRUE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEFORE),TRUE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEBACK),TRUE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEDEFAULT),TRUE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEBOLD),TRUE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEITALIC),TRUE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEUNDERLINE),TRUE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEEOLFILLED),TRUE);
//CheckDlgButton(hwnd,IDC_STYLEBOLD,(Style_StrGetAttribute(pCurrentStyle->szValue,L"bold") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEITALIC,(Style_StrGetAttribute(pCurrentStyle->szValue,L"italic") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEUNDERLINE,(Style_StrGetAttribute(pCurrentStyle->szValue,L"underline") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEEOLFILLED,(Style_StrGetAttribute(pCurrentStyle->szValue,L"eolfilled") ? BST_CHECKED : BST_UNCHECKED));
SetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentStyle->szValue);
}
else
{
SetDlgItemText(hwnd,IDC_STYLELABEL,L"");
EnableWindow(GetDlgItem(hwnd,IDC_STYLEEDIT),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEFONT),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEFORE),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEBACK),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_STYLEDEFAULT),FALSE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEBOLD),FALSE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEITALIC),FALSE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEUNDERLINE),FALSE);
//EnableWindow(GetDlgItem(hwnd,IDC_STYLEEOLFILLED),FALSE);
//CheckDlgButton(hwnd,IDC_STYLEBOLD,BST_UNCHECKED);
//CheckDlgButton(hwnd,IDC_STYLEITALIC,BST_UNCHECKED);
//CheckDlgButton(hwnd,IDC_STYLEUNDERLINE,BST_UNCHECKED);
//CheckDlgButton(hwnd,IDC_STYLEEOLFILLED,BST_UNCHECKED);
SetDlgItemText(hwnd,IDC_STYLEEDIT,L"");
}
}
}
break;
case TVN_BEGINDRAG:
{
//HIMAGELIST himl;
//if (pCurrentStyle)
// GetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentStyle->szValue,COUNTOF(pCurrentStyle->szValue));
TreeView_Select(hwndTV,lpnmtv->itemNew.hItem,TVGN_CARET);
//himl = TreeView_CreateDragImage(hwndTV,lpnmtv->itemNew.hItem);
//ImageList_BeginDrag(himl,0,0,0);
//ImageList_DragEnter(hwndTV,lpnmtv->ptDrag.x,lpnmtv->ptDrag.y);
if (pCurrentStyle)
DestroyCursor(SetCursor(LoadCursor(g_hInstance,MAKEINTRESOURCE(IDC_COPY))));
else
DestroyCursor(SetCursor(LoadCursor(NULL,IDC_NO)));
SetCapture(hwnd);
fDragging = TRUE;
}
}
}
break;
case WM_MOUSEMOVE:
{
HTREEITEM htiTarget;
TVHITTESTINFO tvht;
if (fDragging && pCurrentStyle)
{
LONG xCur = LOWORD(lParam);
LONG yCur = HIWORD(lParam);
//ImageList_DragMove(xCur,yCur);
//ImageList_DragShowNolock(FALSE);
tvht.pt.x = xCur;
tvht.pt.y = yCur;
//ClientToScreen(hwnd,&tvht.pt);
//ScreenToClient(hwndTV,&tvht.pt);
MapWindowPoints(hwnd,hwndTV,&tvht.pt,1);
if ((htiTarget = TreeView_HitTest(hwndTV,&tvht)) != NULL &&
TreeView_GetParent(hwndTV,htiTarget) != NULL)
{
TreeView_SelectDropTarget(hwndTV,htiTarget);
//TreeView_Expand(hwndTV,htiTarget,TVE_EXPAND);
TreeView_EnsureVisible(hwndTV,htiTarget);
}
else
TreeView_SelectDropTarget(hwndTV,NULL);
//ImageList_DragShowNolock(TRUE);
}
}
break;
case WM_LBUTTONUP:
{
if (fDragging)
{
HTREEITEM htiTarget;
//ImageList_EndDrag();
if (htiTarget = TreeView_GetDropHilight(hwndTV))
{
WCHAR tchCopy[256];
TreeView_SelectDropTarget(hwndTV,NULL);
GetDlgItemText(hwnd,IDC_STYLEEDIT,tchCopy,COUNTOF(tchCopy));
TreeView_Select(hwndTV,htiTarget,TVGN_CARET);
// after select, this is new current item
if (pCurrentStyle)
{
lstrcpy(pCurrentStyle->szValue,tchCopy);
SetDlgItemText(hwnd,IDC_STYLEEDIT,tchCopy);
//CheckDlgButton(hwnd,IDC_STYLEBOLD,(Style_StrGetAttribute(tchCopy,L"bold") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEITALIC,(Style_StrGetAttribute(tchCopy,L"italic") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEUNDERLINE,(Style_StrGetAttribute(tchCopy,L"underline") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEEOLFILLED,(Style_StrGetAttribute(tchCopy,L"eolfilled") ? BST_CHECKED : BST_UNCHECKED));
}
}
ReleaseCapture();
DestroyCursor(SetCursor(LoadCursor(NULL,IDC_ARROW)));
fDragging = FALSE;
}
}
break;
case WM_CANCELMODE:
{
if (fDragging)
{
//ImageList_EndDrag();
TreeView_SelectDropTarget(hwndTV,NULL);
ReleaseCapture();
DestroyCursor(SetCursor(LoadCursor(NULL,IDC_ARROW)));
fDragging = FALSE;
}
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_PREVSTYLE:
if (TreeView_GetSelection(hwndTV))
TreeView_Select(hwndTV,TreeView_GetPrevVisible(hwndTV,
TreeView_GetSelection(hwndTV)),TVGN_CARET);
PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,IDC_STYLEEDIT)),1);
break;
case IDC_NEXTSTYLE:
if (TreeView_GetSelection(hwndTV))
TreeView_Select(hwndTV,TreeView_GetNextVisible(hwndTV,
TreeView_GetSelection(hwndTV)),TVGN_CARET);
PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,IDC_STYLEEDIT)),1);
break;
case IDC_STYLEFONT:
if (pCurrentStyle)
{
WCHAR tch[256];
GetDlgItemText(hwnd,IDC_STYLEEDIT,tch,COUNTOF(tch));
if (Style_SelectFont(hwnd,tch,COUNTOF(tch),
lstrcmpi(pCurrentStyle->pszName,L"Default Style") == 0 ||
lstrcmpi(pCurrentStyle->pszName,L"2nd Default Style") == 0)) {
SetDlgItemText(hwnd,IDC_STYLEEDIT,tch);
//CheckDlgButton(hwnd,IDC_STYLEBOLD,(Style_StrGetAttribute(tch,L"bold") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEITALIC,(Style_StrGetAttribute(tch,L"italic") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEUNDERLINE,(Style_StrGetAttribute(tch,L"underline") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEEOLFILLED,(Style_StrGetAttribute(tch,L"eolfilled") ? BST_CHECKED : BST_UNCHECKED));
}
}
PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,IDC_STYLEEDIT)),1);
break;
case IDC_STYLEFORE:
if (pCurrentStyle)
{
WCHAR tch[256];
GetDlgItemText(hwnd,IDC_STYLEEDIT,tch,COUNTOF(tch));
if (Style_SelectColor(hwnd,TRUE,tch,COUNTOF(tch))) {
SetDlgItemText(hwnd,IDC_STYLEEDIT,tch);
//CheckDlgButton(hwnd,IDC_STYLEBOLD,(Style_StrGetAttribute(tch,L"bold") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEITALIC,(Style_StrGetAttribute(tch,L"italic") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEUNDERLINE,(Style_StrGetAttribute(tch,L"underline") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEEOLFILLED,(Style_StrGetAttribute(tch,L"eolfilled") ? BST_CHECKED : BST_UNCHECKED));
}
}
PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,IDC_STYLEEDIT)),1);
break;
case IDC_STYLEBACK:
if (pCurrentStyle)
{
WCHAR tch[256];
GetDlgItemText(hwnd,IDC_STYLEEDIT,tch,COUNTOF(tch));
if (Style_SelectColor(hwnd,FALSE,tch,COUNTOF(tch))) {
SetDlgItemText(hwnd,IDC_STYLEEDIT,tch);
//CheckDlgButton(hwnd,IDC_STYLEBOLD,(Style_StrGetAttribute(tch,L"bold") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEITALIC,(Style_StrGetAttribute(tch,L"italic") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEUNDERLINE,(Style_StrGetAttribute(tch,L"underline") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEEOLFILLED,(Style_StrGetAttribute(tch,L"eolfilled") ? BST_CHECKED : BST_UNCHECKED));
}
}
PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,IDC_STYLEEDIT)),1);
break;
case IDC_STYLEDEFAULT:
if (pCurrentStyle)
{
lstrcpy(pCurrentStyle->szValue,pCurrentStyle->pszDefault);
SetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentStyle->szValue);
//CheckDlgButton(hwnd,IDC_STYLEBOLD,(Style_StrGetAttribute(pCurrentStyle->szValue,L"bold") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEITALIC,(Style_StrGetAttribute(pCurrentStyle->szValue,L"italic") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEUNDERLINE,(Style_StrGetAttribute(pCurrentStyle->szValue,L"underline") ? BST_CHECKED : BST_UNCHECKED));
//CheckDlgButton(hwnd,IDC_STYLEEOLFILLED,(Style_StrGetAttribute(pCurrentStyle->szValue,L"eolfilled") ? BST_CHECKED : BST_UNCHECKED));
}
else if (pCurrentLexer) {
lstrcpy(pCurrentLexer->szExtensions,pCurrentLexer->pszDefExt);
SetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentLexer->szExtensions);
}
PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,IDC_STYLEEDIT)),1);
break;
//case IDC_STYLEBOLD:
// if (pCurrentStyle)
// {
// WCHAR tch[256];
// GetDlgItemText(hwnd,IDC_STYLEEDIT,tch,COUNTOF(tch));
// Style_StrSetAttribute(tch,COUNTOF(tch),L"bold",IsDlgButtonChecked(hwnd,IDC_STYLEBOLD));
// SetDlgItemText(hwnd,IDC_STYLEEDIT,tch);
// }
// break;
//case IDC_STYLEITALIC:
// if (pCurrentStyle)
// {
// WCHAR tch[256];
// GetDlgItemText(hwnd,IDC_STYLEEDIT,tch,COUNTOF(tch));
// Style_StrSetAttribute(tch,COUNTOF(tch),L"italic",IsDlgButtonChecked(hwnd,IDC_STYLEITALIC));
// SetDlgItemText(hwnd,IDC_STYLEEDIT,tch);
// }
// break;
//case IDC_STYLEUNDERLINE:
// if (pCurrentStyle)
// {
// WCHAR tch[256];
// GetDlgItemText(hwnd,IDC_STYLEEDIT,tch,COUNTOF(tch));
// Style_StrSetAttribute(tch,COUNTOF(tch),L"underline",IsDlgButtonChecked(hwnd,IDC_STYLEUNDERLINE));
// SetDlgItemText(hwnd,IDC_STYLEEDIT,tch);
// }
// break;
//case IDC_STYLEEOLFILLED:
// if (pCurrentStyle)
// {
// WCHAR tch[256];
// GetDlgItemText(hwnd,IDC_STYLEEDIT,tch,COUNTOF(tch));
// Style_StrSetAttribute(tch,COUNTOF(tch),L"eolfilled",IsDlgButtonChecked(hwnd,IDC_STYLEEOLFILLED));
// SetDlgItemText(hwnd,IDC_STYLEEDIT,tch);
// }
// break;
case IDC_STYLEEDIT:
{
if (HIWORD(wParam) == EN_CHANGE) {
int cr;
WCHAR tch[256];
GetDlgItemText(hwnd,IDC_STYLEEDIT,tch,COUNTOF(tch));
cr = -1;
Style_StrGetColor(TRUE,tch,&cr);
MakeColorPickButton(hwnd,IDC_STYLEFORE,g_hInstance,cr);
cr = -1;
Style_StrGetColor(FALSE,tch,&cr);
MakeColorPickButton(hwnd,IDC_STYLEBACK,g_hInstance,cr);
}
}
break;
case IDC_IMPORT:
{
HWND hwndTV = GetDlgItem(hwnd,IDC_STYLELIST);
if (pCurrentStyle)
GetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentStyle->szValue,COUNTOF(pCurrentStyle->szValue));
else if (pCurrentLexer) {
if (!GetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentLexer->szExtensions,COUNTOF(pCurrentLexer->szExtensions)))
lstrcpy(pCurrentLexer->szExtensions,pCurrentLexer->pszDefExt);
}
if (Style_Import(hwnd)) {
if (pCurrentStyle)
SetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentStyle->szValue);
else if (pCurrentLexer)
SetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentLexer->szExtensions);
TreeView_Select(hwndTV,TreeView_GetRoot(hwndTV),TVGN_CARET);
MsgBox(0,IDS_IMPORT_OK);
}
}
break;
case IDC_EXPORT:
{
if (pCurrentStyle)
GetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentStyle->szValue,COUNTOF(pCurrentStyle->szValue));
else if (pCurrentLexer) {
if (!GetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentLexer->szExtensions,COUNTOF(pCurrentLexer->szExtensions)))
lstrcpy(pCurrentLexer->szExtensions,pCurrentLexer->pszDefExt);
}
if (Style_Export(hwnd))
MsgBox(0,IDS_EXPORT_OK);
}
break;
case IDC_PREVIEW:
{
// Hack from outside
extern HWND hwndEdit;
extern void UpdateLineNumerWidth();
if (pCurrentStyle)
GetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentStyle->szValue,COUNTOF(pCurrentStyle->szValue));
else if (pCurrentLexer) {
if (!GetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentLexer->szExtensions,COUNTOF(pCurrentLexer->szExtensions)))
lstrcpy(pCurrentLexer->szExtensions,pCurrentLexer->pszDefExt);
}
Style_SetLexer(hwndEdit,pLexCurrent);
UpdateLineNumberWidth();
}
break;
case IDOK:
if (pCurrentStyle)
GetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentStyle->szValue,COUNTOF(pCurrentStyle->szValue));
else if (pCurrentLexer) {
if (!GetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentLexer->szExtensions,COUNTOF(pCurrentLexer->szExtensions)))
lstrcpy(pCurrentLexer->szExtensions,pCurrentLexer->pszDefExt);
}
EndDialog(hwnd,IDOK);
break;
case IDCANCEL:
if (fDragging)
SendMessage(hwnd,WM_CANCELMODE,0,0);
else
EndDialog(hwnd,IDCANCEL);
break;
}
return TRUE;
}
return FALSE;
}
//=============================================================================
//
// Style_ConfigDlg()
//
void Style_ConfigDlg(HWND hwnd)
{
WCHAR *StyleBackup[1024];
int c,cItems,i,iLexer;
// Backup Styles
c = 0;
for (iLexer = 0; iLexer < NUMLEXERS; iLexer++) {
StyleBackup[c++] = StrDup(pLexArray[iLexer]->szExtensions);
i = 0;
while (pLexArray[iLexer]->Styles[i].iStyle != -1) {
StyleBackup[c++] = StrDup(pLexArray[iLexer]->Styles[i].szValue);
i++;
}
}
cItems = c;
if (IDCANCEL == ThemedDialogBoxParam(g_hInstance,
MAKEINTRESOURCE(IDD_STYLECONFIG),
GetParent(hwnd),Style_ConfigDlgProc,
(LPARAM)&StyleBackup))
{
// Restore Styles
c = 0;
for (iLexer = 0; iLexer < NUMLEXERS; iLexer++) {
lstrcpy(pLexArray[iLexer]->szExtensions,StyleBackup[c++]);
i = 0;
while (pLexArray[iLexer]->Styles[i].iStyle != -1) {
lstrcpy(pLexArray[iLexer]->Styles[i].szValue,StyleBackup[c++]);
i++;
}
}
}
else {
fStylesModified = TRUE;
if (lstrlen(szIniFile) == 0 && !fWarnedNoIniFile) {
MsgBox(MBINFO,IDS_SETTINGSNOTSAVED);
fWarnedNoIniFile = TRUE;
}
}
for (c = 0; c < cItems; c++)
LocalFree(StyleBackup[c]);
// Apply new (or previous) Styles
Style_SetLexer(hwnd,pLexCurrent);
}
//=============================================================================
//
// Style_SelectLexerDlgProc()
//
BOOL CALLBACK Style_SelectLexerDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
{
static int cxClient;
static int cyClient;
static int mmiPtMaxY;
static int mmiPtMinX;
static HWND hwndLV;
static int iInternalDefault;
switch(umsg)
{
case WM_INITDIALOG:
{
int i;
int lvItems;
LVITEM lvi;
SHFILEINFO shfi;
LVCOLUMN lvc = { LVCF_FMT|LVCF_TEXT, LVCFMT_LEFT, 0, L"", -1, 0, 0, 0 };
RECT rc;
WCHAR tch[MAX_PATH];
int cGrip;
GetClientRect(hwnd,&rc);
cxClient = rc.right - rc.left;
cyClient = rc.bottom - rc.top;
AdjustWindowRectEx(&rc,GetWindowLongPtr(hwnd,GWL_STYLE)|WS_THICKFRAME,FALSE,0);
mmiPtMinX = rc.right-rc.left;
mmiPtMaxY = rc.bottom-rc.top;
if (cxStyleSelectDlg < (rc.right-rc.left))
cxStyleSelectDlg = rc.right-rc.left;
if (cyStyleSelectDlg < (rc.bottom-rc.top))
cyStyleSelectDlg = rc.bottom-rc.top;
SetWindowPos(hwnd,NULL,rc.left,rc.top,cxStyleSelectDlg,cyStyleSelectDlg,SWP_NOZORDER);
SetWindowLongPtr(hwnd,GWL_STYLE,GetWindowLongPtr(hwnd,GWL_STYLE)|WS_THICKFRAME);
SetWindowPos(hwnd,NULL,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED);
GetMenuString(GetSystemMenu(GetParent(hwnd),FALSE),SC_SIZE,tch,COUNTOF(tch),MF_BYCOMMAND);
InsertMenu(GetSystemMenu(hwnd,FALSE),SC_CLOSE,MF_BYCOMMAND|MF_STRING|MF_ENABLED,SC_SIZE,tch);
InsertMenu(GetSystemMenu(hwnd,FALSE),SC_CLOSE,MF_BYCOMMAND|MF_SEPARATOR,0,NULL);
SetWindowLongPtr(GetDlgItem(hwnd,IDC_RESIZEGRIP3),GWL_STYLE,
GetWindowLongPtr(GetDlgItem(hwnd,IDC_RESIZEGRIP3),GWL_STYLE)|SBS_SIZEGRIP|WS_CLIPSIBLINGS);
cGrip = GetSystemMetrics(SM_CXHTHUMB);
SetWindowPos(GetDlgItem(hwnd,IDC_RESIZEGRIP3),NULL,cxClient-cGrip,
cyClient-cGrip,cGrip,cGrip,SWP_NOZORDER);
hwndLV = GetDlgItem(hwnd,IDC_STYLELIST);
ListView_SetImageList(hwndLV,
(HIMAGELIST)SHGetFileInfo(L"C:\\",0,&shfi,sizeof(SHFILEINFO),SHGFI_SMALLICON | SHGFI_SYSICONINDEX),
LVSIL_SMALL);
ListView_SetImageList(hwndLV,
(HIMAGELIST)SHGetFileInfo(L"C:\\",0,&shfi,sizeof(SHFILEINFO),SHGFI_LARGEICON | SHGFI_SYSICONINDEX),
LVSIL_NORMAL);
//SetExplorerTheme(hwndLV);
ListView_SetExtendedListViewStyle(hwndLV,/*LVS_EX_FULLROWSELECT|*/LVS_EX_DOUBLEBUFFER|LVS_EX_LABELTIP);
ListView_InsertColumn(hwndLV,0,&lvc);
// Add lexers
for (i = 0; i < NUMLEXERS; i++)
Style_AddLexerToListView(hwndLV,pLexArray[i]);
ListView_SetColumnWidth(hwndLV,0,LVSCW_AUTOSIZE_USEHEADER);
// Select current lexer
lvItems = ListView_GetItemCount(hwndLV);
lvi.mask = LVIF_PARAM;
for (i = 0; i < lvItems; i++) {
lvi.iItem = i;
ListView_GetItem(hwndLV,&lvi);;
if (lstrcmp(((PEDITLEXER)lvi.lParam)->pszName,pLexCurrent->pszName) == 0) {
ListView_SetItemState(hwndLV,i,LVIS_FOCUSED|LVIS_SELECTED,LVIS_FOCUSED|LVIS_SELECTED);
ListView_EnsureVisible(hwndLV,i,FALSE);
if (iDefaultLexer == i) {
CheckDlgButton(hwnd,IDC_DEFAULTSCHEME,BST_CHECKED);
}
}
}
iInternalDefault = iDefaultLexer;
if (bAutoSelect)
CheckDlgButton(hwnd,IDC_AUTOSELECT,BST_CHECKED);
CenterDlgInParent(hwnd);
}
return TRUE;
case WM_DESTROY:
{
RECT rc;
GetWindowRect(hwnd,&rc);
cxStyleSelectDlg = rc.right-rc.left;
cyStyleSelectDlg = rc.bottom-rc.top;
}
return FALSE;
case WM_SIZE:
{
RECT rc;
int dxClient = LOWORD(lParam) - cxClient;
int dyClient = HIWORD(lParam) - cyClient;
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
GetWindowRect(GetDlgItem(hwnd,IDC_RESIZEGRIP3),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDC_RESIZEGRIP3),NULL,rc.left+dxClient,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
InvalidateRect(GetDlgItem(hwnd,IDC_RESIZEGRIP3),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDOK),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDOK),NULL,rc.left+dxClient,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
InvalidateRect(GetDlgItem(hwnd,IDOK),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDCANCEL),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDCANCEL),NULL,rc.left+dxClient,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
InvalidateRect(GetDlgItem(hwnd,IDCANCEL),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDC_STYLELIST),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDC_STYLELIST),NULL,0,0,rc.right-rc.left+dxClient,rc.bottom-rc.top+dyClient,SWP_NOZORDER|SWP_NOMOVE);
ListView_SetColumnWidth(GetDlgItem(hwnd,IDC_STYLELIST),0,LVSCW_AUTOSIZE_USEHEADER);
InvalidateRect(GetDlgItem(hwnd,IDC_STYLELIST),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDC_AUTOSELECT),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDC_AUTOSELECT),NULL,rc.left,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
InvalidateRect(GetDlgItem(hwnd,IDC_AUTOSELECT),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDC_DEFAULTSCHEME),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDC_DEFAULTSCHEME),NULL,rc.left,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
InvalidateRect(GetDlgItem(hwnd,IDC_DEFAULTSCHEME),NULL,TRUE);
}
return TRUE;
case WM_GETMINMAXINFO:
{
LPMINMAXINFO lpmmi = (LPMINMAXINFO)lParam;
lpmmi->ptMinTrackSize.x = mmiPtMinX;
lpmmi->ptMinTrackSize.y = mmiPtMaxY;
//lpmmi->ptMaxTrackSize.y = mmiPtMaxY;
}
return TRUE;
case WM_NOTIFY: {
if (((LPNMHDR)(lParam))->idFrom == IDC_STYLELIST) {
switch (((LPNMHDR)(lParam))->code) {
case NM_DBLCLK:
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDOK,1),0);
break;
case LVN_ITEMCHANGED:
case LVN_DELETEITEM: {
int i = ListView_GetNextItem(hwndLV,-1,LVNI_ALL | LVNI_SELECTED);
if (iInternalDefault == i)
CheckDlgButton(hwnd,IDC_DEFAULTSCHEME,BST_CHECKED);
else
CheckDlgButton(hwnd,IDC_DEFAULTSCHEME,BST_UNCHECKED);
EnableWindow(GetDlgItem(hwnd,IDC_DEFAULTSCHEME),i != -1);
EnableWindow(GetDlgItem(hwnd,IDOK),i != -1);
}
break;
}
}
}
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_DEFAULTSCHEME:
if (IsDlgButtonChecked(hwnd,IDC_DEFAULTSCHEME) == BST_CHECKED)
iInternalDefault = ListView_GetNextItem(hwndLV,-1,LVNI_ALL | LVNI_SELECTED);
else
iInternalDefault = 0;
break;
case IDOK:
{
LVITEM lvi;
lvi.mask = LVIF_PARAM;
lvi.iItem = ListView_GetNextItem(hwndLV,-1,LVNI_ALL | LVNI_SELECTED);
if (ListView_GetItem(hwndLV,&lvi)) {
pLexCurrent = (PEDITLEXER)lvi.lParam;
iDefaultLexer = iInternalDefault;
bAutoSelect = (IsDlgButtonChecked(hwnd,IDC_AUTOSELECT) == BST_CHECKED) ? 1 : 0;
EndDialog(hwnd,IDOK);
}
}
break;
case IDCANCEL:
EndDialog(hwnd,IDCANCEL);
break;
}
return TRUE;
}
return FALSE;
}
//=============================================================================
//
// Style_SelectLexerDlg()
//
void Style_SelectLexerDlg(HWND hwnd)
{
if (IDOK == ThemedDialogBoxParam(g_hInstance,
MAKEINTRESOURCE(IDD_STYLESELECT),
GetParent(hwnd),Style_SelectLexerDlgProc,0))
Style_SetLexer(hwnd,pLexCurrent);
}
// End of Styles.c
Jump to Line
Something went wrong with that request. Please try again.