# Define SciTE settings for C++, C, C#, Ch, Java, IDL, JavaScript, Flash (ActionScript 2) files.

# sma files are Small script (C-like)
file.patterns.cpp=*.c;*.cc;*.cpp;*.cxx;*.h;*.hh;*.hpp;*.hxx;*.ipp;*.m;*.mm;*.sma
file.patterns.cplusplus=*.cc;*.cpp;*.cxx
# jad = decompiled class files; pde = Processing.org sketch files
file.patterns.java=*.java;*.jad;*.pde
file.patterns.javafx=*.fx
# pln, inc and t are SilkTest (4Test) files.
file.patterns.test=*.pln;*.inc;*.t
# es = JS dialect of Abobe for SVG
file.patterns.js=*.js;*.es
file.patterns.cs=*.cs
file.patterns.rc=*.rc;*.rc2;*.dlg
file.patterns.idl=*.idl;*.odl
file.patterns.flash=*.as;*.asc;*.jsfl
file.patterns.ch=*.ch;*.chf;*.chs
file.patterns.vala=*.vala
file.patterns.go=*.go
file.patterns.pike=*.pike
file.patterns.c.like=$(file.patterns.cpp);$(file.patterns.cs);$(file.patterns.idl);$(file.patterns.java);$(file.patterns.js);$(file.patterns.flash);$(file.patterns.ch);$(file.patterns.vala);$(file.patterns.pike)

shbang.tcc=cpp
shbang.tinycc=cpp

filter.cpp=C/C++ (c cc cpp cxx cs vala h hh hxx hpp ipp dlg rc rc2 mak)|\
$(file.patterns.cpp);$(file.patterns.cs);$(file.patterns.rc);$(file.patterns.vala);*.mak;make*|
filter.java=Java (java)|*.java|
filter.js=JavaScript (js es)|$(file.patterns.js)|
filter.idl=IDL (idl odl)|$(file.patterns.idl)|
filter.test=SilkTest (pln inc t)|$(file.patterns.test)|
filter.flash=Flash (as asc jsfl)|$(file.patterns.flash)|
filter.ch=Ch (ch chf chs)|$(file.patterns.ch)|
filter.go=Go (go)|$(file.patterns.go)|
filter.pike=Pike (pike)|$(file.patterns.pike)|

lexer.$(file.patterns.java)=cpp
lexer.$(file.patterns.javafx)=cpp
lexer.$(file.patterns.cpp)=cpp
lexer.$(file.patterns.rc)=cpp
lexer.$(file.patterns.idl)=cpp
lexer.$(file.patterns.cs)=cpp
lexer.$(file.patterns.js)=cpp
lexer.$(file.patterns.test)=cpp
lexer.$(file.patterns.flash)=cpp
lexer.$(file.patterns.ch)=cpp
lexer.$(file.patterns.vala)=cpp
lexer.$(file.patterns.go)=cpp
lexer.$(file.patterns.pike)=cpp

keywordclass.cpp=and and_eq asm auto bitand bitor bool break \
case catch char class compl const const_cast continue \
default delete do double dynamic_cast else enum explicit export extern false float for \
friend goto if inline int long mutable namespace new not not_eq \
operator or or_eq private protected public \
register reinterpret_cast return short signed sizeof static static_cast struct switch \
template this throw true try typedef typeid typename union unsigned using \
virtual void volatile wchar_t while xor xor_eq

directives.objective.c=\
@class @defs @protocol @required @optional @end \
@interface @public @package @protected @private @property \
@implementation @synthesize @dynamic \
@throw @try @catch @finally \
@synchronized @autoreleasepool \
@selector @encode \
@compatibility_alias

# Since Objective C and C++ share the .h extension, allow Objective C directives as keywords
# For stricter display of pure C++, specify keywords.$(file.patterns.cpp)=$(keywordclass.cpp)
keywords.$(file.patterns.cpp)=$(keywordclass.cpp) $(directives.objective.c)

# keywords2 is for highlighting user defined keywords or function calls or similar
#keywords2.$(file.patterns.cpp)=file

# keywords3 is for doc comment keywords, highlighted in style 17
#CPP doxygen
file.patterns.doxygen.langs=$(file.patterns.cpp);$(file.patterns.java)
keywordclass.doxygen=a addindex addtogroup anchor arg attention \
author b brief bug c class code date def defgroup deprecated dontinclude \
e em endcode endhtmlonly endif endlatexonly endlink endverbatim enum example exception \
f$ f[ f] file fn hideinitializer htmlinclude htmlonly \
if image include ingroup internal invariant interface latexonly li line link \
mainpage name namespace nosubgrouping note overload \
p page par param param[in] param[out] \
post pre ref relates remarks return retval \
sa section see showinitializer since skip skipline struct subsection \
test throw throws todo typedef union until \
var verbatim verbinclude version warning weakgroup $ @ \ & < > # { }
keywords3.$(file.patterns.doxygen.langs)=$(keywordclass.doxygen)

# keywords5 is for preprocessor definitions and will cause inactive code
# to be greyed out. This setting is a space separated list of definitions
# where a definition may be of the form NAME=VALUE or simply NAME.
#keywords5.$(file.patterns.cpp)=_MSC_VER SCI_NAMESPACE GTK_MAJOR_VERSION=2

word.chars.cxx=$(chars.alpha)$(chars.numeric)_#
word.characters.$(file.patterns.cpp)=$(word.chars.cxx)
calltip.cpp.word.characters=$(chars.alpha)$(chars.numeric)_
comment.block.cpp=//~
#comment.block.at.line.start.cpp=1
comment.stream.start.cpp=/*
comment.stream.end.cpp=*/
comment.box.start.cpp=/*
comment.box.middle.cpp= *
comment.box.end.cpp= */

# Folding
#fold.cpp.syntax.based=0
#fold.cpp.comment.multiline=0
#fold.cpp.comment.explicit=0
#defaults for fold.cpp.explicit.start=//{ and fold.cpp.explicit.end=//}
#  can be replaced by defining custom strings, e.g. //[ and //]
#fold.cpp.explicit.start=//[
#fold.cpp.explicit.end=//]
#if fold strings are set to something like /*{{{ and /*}}} (Origami/WinF style fold strings), enable
#  fold.cpp.explicit.anywhere, allowing explicit fold points being anywhere, not just in line comments
#fold.cpp.explicit.anywhere=1
#fold.at.else=1

word.characters.$(file.patterns.javafx)=$(word.chars.cxx)$-

file.patterns.c.except.cpp=$(file.patterns.cs);$(file.patterns.idl);*.java;$(file.patterns.flash);$(file.patterns.ch)
statement.indent.$(file.patterns.c.except.cpp)=5 case default do else for if while
statement.indent.$(file.patterns.cpp)=5 case default do else for if private protected public while
statement.end.$(file.patterns.c.like)=10 ;
statement.lookback.$(file.patterns.c.like)=20
block.start.$(file.patterns.c.like)=10 {
block.end.$(file.patterns.c.like)=10 }

#autocomplete.cpp.fillups=(

#styling.within.preprocessor=1
preprocessor.symbol.$(file.patterns.cpp)=#
preprocessor.start.$(file.patterns.cpp)=if ifdef ifndef
preprocessor.middle.$(file.patterns.cpp)=else elif
preprocessor.end.$(file.patterns.cpp)=endif

preprocessor.symbol.$(file.patterns.cs)=#
preprocessor.start.$(file.patterns.cs)=if region
preprocessor.middle.$(file.patterns.cs)=else elif
preprocessor.end.$(file.patterns.cs)=endif endregion

keywordclass.ch=\
auto array bool break case char class complex ComplexInf ComplexNaN \
const continue default delete \
do double else enum export extern float for foreach goto if Inf inline int \
long namespace NaN new NULL private public register restrict return short \
signed sizeof static string_t struct switch this typedef union unsigned \
using void volatile wchar_t while __declspec
keywords.$(file.patterns.ch)=$(keywordclass.ch)
word.chars.ch=$(chars.alpha)$(chars.numeric)_#
word.characters.$(file.patterns.ch)=$(word.chars.cxx)
comment.block.ch=//~
#comment.block.at.line.start.ch=1
comment.stream.start.ch=/*
comment.stream.end.ch=*/
comment.box.start.ch=/*
comment.box.middle.ch= *
comment.box.end.ch= */
preprocessor.symbol.$(file.patterns.ch)=#
preprocessor.start.$(file.patterns.ch)=if ifdef ifndef
preprocessor.middle.$(file.patterns.ch)=else elif
preprocessor.end.$(file.patterns.ch)=endif

keywordclass.cs=abstract as ascending base bool break by byte case catch char checked \
class const continue decimal default delegate descending do double else enum \
equals event explicit extern false finally fixed float for foreach from goto group if \
implicit in int interface internal into is join lock let long namespace new null \
object on operator orderby out override params private protected public \
readonly ref return sbyte sealed select short sizeof stackalloc static \
string struct switch this throw true try typeof uint ulong \
unchecked unsafe ushort using var virtual void volatile where while
keywords.$(file.patterns.cs)=$(keywordclass.cs)
word.characters.$(file.patterns.cs)=$(word.chars.cxx)

keywordclass.go=\
bool byte break case chan complex64 complex128 const continue defer default  \
else  for func go goto fallthrough false float32 float64 if import int interface int8 int16 int32 int64 \
len map nil package range return select string struct switch true type \
uint uintptr uint8 uint16 uint32 uint64  var
keywords.$(file.patterns.go)=$(keywordclass.go)

keywordclass.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
keywords.$(file.patterns.rc)=$(keywordclass.rc)

keywordclass.idl=\
aggregatable allocate appobject arrays async async_uuid \
auto_handle \
bindable boolean broadcast byte byte_count \
call_as callback char coclass code comm_status \
const context_handle context_handle_noserialize \
context_handle_serialize control cpp_quote custom \
decode default defaultbind defaultcollelem \
defaultvalue defaultvtable dispinterface displaybind dllname \
double dual \
enable_allocate encode endpoint entry enum error_status_t \
explicit_handle \
fault_status first_is float \
handle_t heap helpcontext helpfile helpstring \
helpstringcontext helpstringdll hidden hyper \
id idempotent ignore iid_as iid_is immediatebind implicit_handle \
import importlib in include in_line int __int64 __int3264 interface \
last_is lcid length_is library licensed local long \
max_is maybe message methods midl_pragma \
midl_user_allocate midl_user_free min_is module ms_union \
ncacn_at_dsp ncacn_dnet_nsp ncacn_http ncacn_ip_tcp \
ncacn_nb_ipx ncacn_nb_nb ncacn_nb_tcp ncacn_np \
ncacn_spx ncacn_vns_spp ncadg_ip_udp ncadg_ipx ncadg_mq \
ncalrpc nocode nonbrowsable noncreatable nonextensible notify \
object odl oleautomation optimize optional out out_of_line \
pipe pointer_default pragma properties propget propput propputref \
ptr public \
range readonly ref represent_as requestedit restricted retval \
shape short signed size_is small source strict_context_handle \
string struct switch switch_is switch_type \
transmit_as typedef \
uidefault union unique unsigned user_marshal usesgetlasterror uuid \
v1_enum vararg version void wchar_t wire_marshal

keywordclass.msidl=handle
keywordclass.xpidl=attribute native noscript scriptable shared wstring inout
keywords.$(file.patterns.idl)=$(keywordclass.idl) $(keywordclass.xpidl)

# http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
keywordclass.java=abstract assert boolean break byte case catch char class \
const continue default do double else enum extends final finally float for \
goto if implements import instanceof int interface long \
native new package private protected public \
return short static strictfp super switch synchronized this throw throws \
transient try var void volatile while
keywords.$(file.patterns.java)=$(keywordclass.java)

keywordclass.javafx=abstract after and as assert at attribute before bind bound break \
catch class continue def delete else exclusive extends false finally for from function \
if import indexof insert instanceof lazy mod new not null \
or override package private protected public-init public public-read \
return reverse sizeof static super then this throw true try typeof \
var while
keywords.$(file.patterns.javafx)=$(keywordclass.javafx)
# Base types and global functions (defined in javafx.lang.Builtins and javafx.lang.FX)
# And now language words deprecated from their keyword status...
keywords2.$(file.patterns.javafx)=Boolean Duration Integer Number Object String Void \
Character Byte Short Long Float Double \
isInitialized isSameObject print println \
first in init into inverse last on postinit replace step trigger tween where with
# I don't know what first and last nor trigger do. Neither lazy or typeof...

keywordclass.javascript=abstract boolean break byte case catch char class \
const continue debugger default delete do double else enum export extends \
final finally float for function goto if implements import in instanceof \
int interface long native new package private protected public \
return short static super switch synchronized this throw throws \
transient try typeof var void volatile while with
keywords.$(file.patterns.js)=$(keywordclass.javascript)

keywordclass.flash=add and break case catch class continue default delete do \
dynamic else eq extends false finally for function ge get gt if implements import in \
instanceof interface intrinsic le lt ne new not null or private public return \
set static super switch this throw true try typeof undefined var void while with

keywordclass2.flash=Array Arguments Accessibility Boolean Button Camera Color \
ContextMenu ContextMenuItem Date Error Function Key LoadVars LocalConnection Math \
Microphone Mouse MovieClip MovieClipLoader NetConnection NetStream Number Object \
PrintJob Selection SharedObject Sound Stage String StyleSheet System TextField \
TextFormat TextSnapshot Video Void XML XMLNode XMLSocket \
_accProps _focusrect _global _highquality _parent _quality _root _soundbuftime \
arguments asfunction call capabilities chr clearInterval duplicateMovieClip \
escape eval fscommand getProperty getTimer getURL getVersion gotoAndPlay gotoAndStop \
ifFrameLoaded Infinity -Infinity int isFinite isNaN length loadMovie loadMovieNum \
loadVariables loadVariablesNum maxscroll mbchr mblength mbord mbsubstring MMExecute \
NaN newline nextFrame nextScene on onClipEvent onUpdate ord parseFloat parseInt play \
prevFrame prevScene print printAsBitmap printAsBitmapNum printNum random removeMovieClip \
scroll set setInterval setProperty startDrag stop stopAllSounds stopDrag substring \
targetPath tellTarget toggleHighQuality trace unescape unloadMovie unLoadMovieNum updateAfterEvent

keywords.$(file.patterns.flash)=$(keywordclass.flash)
keywords2.$(file.patterns.flash)=$(keywordclass2.flash)

keywordclass.vala=if else switch case default break continue return yield for foreach in \
do while try catch finally throw

keywordclass2.vala=namespace interface class struct enum delegate signal errordomain \
construct get set value base const static var dynamic weak unowned virtual abstract \
override public protected private extern throws requires ensures yields out ref lock \
using true false null delete generic new this typeof sizeof as owned int string char bool

keywords.$(file.patterns.vala)=$(keywordclass.vala)
keywords2.$(file.patterns.vala)=$(keywordclass2.vala)

keywordclass.pike=constant enum if do for while else foreach case switch break continue \
return typeof catch class lambda import inherit static void int string float mixed object \
function program array mapping multiset
keywords.$(file.patterns.pike)=$(keywordclass.pike)

#lexer.cpp.track.preprocessor=1
#lexer.cpp.update.preprocessor=1
#lexer.cpp.hashquoted.strings=1

# C++ styles

# Default
style.cpp.32=$(font.base)
# White space
style.cpp.0=fore:#808080
# Comment: /* */.
style.cpp.1=$(colour.code.comment.box),$(font.code.comment.box)
# Line Comment: //.
style.cpp.2=$(colour.code.comment.line),$(font.code.comment.line)
# Doc comment: block comments beginning with /** or /*!
style.cpp.3=$(colour.code.comment.doc),$(font.code.comment.doc)
# Number
style.cpp.4=$(colour.number)
# Keyword
style.cpp.5=$(colour.keyword),bold
# Double quoted string
style.cpp.6=$(colour.string)
# Single quoted string
style.cpp.7=$(colour.char)
# UUIDs (only in IDL)
style.cpp.8=fore:#804080
# Preprocessor
style.cpp.9=$(colour.preproc)
# Operators
style.cpp.10=$(colour.operator),bold
# Identifiers
style.cpp.11=
# End of line where string is not closed
style.cpp.12=fore:#000000,$(font.monospace),back:#E0C0E0,eolfilled
# Verbatim strings for C#
style.cpp.13=fore:#007F00,$(font.monospace),back:#E0FFE0,eolfilled
# Regular expressions for JavaScript
style.cpp.14=fore:#3F7F3F,$(font.monospace),back:#E0F0FF,eolfilled
# Doc Comment Line: line comments beginning with /// or //!.
style.cpp.15=$(colour.code.comment.doc),$(font.code.comment.doc)
# Keywords2
style.cpp.16=fore:#B00040
# Comment keyword
style.cpp.17=fore:#3060A0,$(font.code.comment.doc)
# Comment keyword error
style.cpp.18=fore:#804020,$(font.code.comment.doc)
# Raw strings for C++0x
style.cpp.20=$(colour.string),back:#FFF3FF,eolfilled
# Triple-quoted strings for Vala
style.cpp.21=$(font.monospace),fore:#007F00,back:#E0FFE0,eolfilled
# Hash-quoted strings for Pike
style.cpp.22=$(font.monospace),fore:#007F00,back:#E7FFD7,eolfilled
# Preprocessor stream comment
style.cpp.23=fore:#659900
# Preprocessor stream doc comment
style.cpp.24=$(colour.code.comment.doc)
# User defined literals
style.cpp.25=fore:#C06000

# Inactive states are 64 greater than their active counterparts

# White space
style.cpp.64=fore:#C0C0C0
# Comment: /* */.
style.cpp.65=$(style.cpp.1),fore:#90B090
# Line Comment: //.
style.cpp.66=$(style.cpp.2),fore:#90B090
# Doc comment: block comments beginning with /** or /*!
style.cpp.67=$(style.cpp.3),fore:#D0D0D0
# Number
style.cpp.68=$(style.cpp.4),fore:#90B0B0
# Keyword
style.cpp.69=$(style.cpp.5),fore:#9090B0
# Double quoted string
style.cpp.70=$(style.cpp.6),fore:#B090B0
# Single quoted string
style.cpp.71=$(style.cpp.7),fore:#B090B0
# UUIDs (only in IDL)
style.cpp.72=$(style.cpp.8),fore:#C0C0C0
# Preprocessor
style.cpp.73=$(style.cpp.9),fore:#B0B090
# Operators
style.cpp.74=$(style.cpp.10),fore:#B0B0B0
# Identifiers
style.cpp.75=$(style.cpp.11),fore:#B0B0B0
# End of line where string is not closed
style.cpp.76=$(style.cpp.12),fore:#000000
# Verbatim strings for C#
style.cpp.77=$(style.cpp.13),fore:#90B090
# Regular expressions for JavaScript
style.cpp.78=$(style.cpp.14),fore:#7FAF7F
# Doc Comment Line: line comments beginning with /// or //!.
style.cpp.79=$(style.cpp.15),fore:#C0C0C0
# Keywords2
style.cpp.80=$(style.cpp.16),fore:#C0C0C0
# Comment keyword
style.cpp.81=$(style.cpp.17),fore:#C0C0C0
# Comment keyword error
style.cpp.82=$(style.cpp.18),fore:#C0C0C0
# Raw strings for C++0x
style.cpp.84=$(style.cpp.20),fore:#B090B0
# Triple-quoted strings for Vala
style.cpp.85=$(style.cpp.21),fore:#90B090
# Hash-quoted strings for Pike
style.cpp.86=$(style.cpp.22),fore:#90B090
# Preprocessor stream comment
style.cpp.87=$(style.cpp.23),fore:#A0C090
# Preprocessor stream doc comment
style.cpp.88=$(style.cpp.23),fore:#C0C0C0
# User defined literals
style.cpp.89=fore:#D7A090

# Braces are only matched in operator style
braces.cpp.style=10

ccopts=-pedantic -Os
cc=g++ $(ccopts) -c $(FileNameExt) -o $(FileName).o
ccc=gcc $(ccopts) -c $(FileNameExt) -o $(FileName).o

make.command=make
command.compile.*.c=$(ccc) -std=c99
command.build.*.c=$(make.command)
command.build.*.h=$(make.command)
command.go.*.c=./$(FileName)
# To make the Go command both compile (if needed) and execute, use this setting:
#command.go.needs.*.c=gcc $(ccopts) -std=c99 $(FileNameExt) -o $(FileName)

command.compile.$(file.patterns.cplusplus)=$(cc)
command.build.$(file.patterns.cplusplus)=$(make.command)
command.go.$(file.patterns.cplusplus)=./$(FileName)
command.go.needs.$(file.patterns.cplusplus)=g++ $(ccopts) $(FileNameExt) -o $(FileName)

command.name.0.$(file.patterns.cpp)=Indent
command.0.$(file.patterns.cpp)=astyle -taOHUKk3 -M8 $(FileNameExt)
command.is.filter.0.$(file.patterns.cpp)=1

command.name.1.$(file.patterns.cplusplus)=Lint
command.1.$(file.patterns.cplusplus)=g++ -W -Wall -Wshadow -Wwrite-strings -Wold-style-cast \
	-Woverloaded-virtual -pedantic -Os -fno-exceptions -c $(FileNameExt)

if PLAT_WIN
	command.compile.*.rc=windres $(FileNameExt) $(FileName).o
	command.build.*.rc=$(make.command)
	command.help.$(file.patterns.cpp)=$(CurrentWord)!G:\Program Files\Microsoft Visual Studio\MSDN98\98VSa\1033\MSDNVS6A.COL
	command.help.subsystem.$(file.patterns.cpp)=4
	command.go.*.js=cscript /nologo $(FileNameExt)
# When maintaining old Win16 programs...
#	command.help.$(file.patterns.cpp)=$(CurrentWord)!I:\msvc\help\win31wh.hlp
#	command.help.subsystem.$(file.patterns.cpp)=5

if PLAT_GTK
	command.help.$(file.patterns.cpp)=man $(CurrentWord) | col -b

if PLAT_WIN
	command.build.*.cs=csc /t:winexe $(FileNameExt) /r:system.dll,system.drawing.dll
	command.go.*.cs=$(FileName)
	command.go.subsystem.*.cs=0
if PLAT_GTK
	command.build.*.cs=mcs /t:winexe $(FileNameExt) /r:System,System.Drawing
	command.go.*.cs=mono $(FileName).exe
	command.go.subsystem.*.cs=1

command.compile.*.java=javac $(FileNameExt)
command.build.*.java=javac *.java
command.go.*.java=java -cp . $(FileName)

command.compile.*.fx=javafxc -d bin $(FileNameExt)
command.build.*.fx=javafxc -d bin *.fx
command.go.*.fx=javafx -cp bin $(FileName)

if PLAT_WIN
	command.help.*.java=http://java.sun.com/javase/6/docs/api/java/util/$(CurrentWord).html
	command.help.subsystem.*.java=2

command.compile.*.ch=ch -n $(FileNameExt)
command.build.*.ch=ch -n  $(FileNameExt)
command.go.*.ch=ch -u $(FileNameExt)

command.compile.*.as=mtasc -strict $(FileNameExt)
command.build.*.as=mtasc -strict *.as

command.compile.*.fx=javafxc -d . $(FileNameExt)
command.build.*.fx=javafxc -d . *.fx
command.go.*.fx=javafx -cp . $(FileName)

command.build.$(file.patterns.vala)=valac $(FileNameExt)
command.go.*.vala=./$(FileName)

# can also be 6g for 64-bit systems!
command.compile.*.go=8g $(FileNameExt)
command.build.*.go=$(make.command)
command.go.*.go=./$(FileName)
