# SciTE settings for F#
*language.fsharp=F#|fsharp||
file.patterns.fsharp=*.fs;*.fsi;*.fsx;*.fsscript
lexer.$(file.patterns.fsharp)=fsharp
filter.fsharp=F# (fs fsi fsx fsscript)|$(file.patterns.fsharp)|
*filter.fsharp=$(filter.fsharp)

word.chars.fsharp=$(chars.alpha)$(chars.numeric)_'`
word.characters.$(file.patterns.fsharp)=$(word.chars.fsharp)

indent.size.$(file.patterns.fsharp)=4
statement.indent.$(file.patterns.fsharp)=4 let type
use.tabs.$(file.patterns.fsharp)=0

comment.block.fsharp=//
comment.stream.start.fsharp=(*
comment.stream.end.fsharp=*)

preprocessor.symbol.$(file.patterns.fsharp)=#
preprocessor.start.$(file.patterns.fsharp)=if indent light load nowarn r
preprocessor.middle.$(file.patterns.fsharp)=else
preprocessor.end.$(file.patterns.fsharp)=endif

# fold.fsharp.comment.stream=0
# fold.fsharp.comment.multiline=0
# fold.fsharp.syntax.based=0
fold.fsharp.preprocessor=1
# fold.fsharp.imports=0

# Default
style.fsharp.0=$(font.base)
# Keywords (std language keywords)
style.fsharp.1=$(colour.keyword)
# Keywords2 (core functions)
style.fsharp.2=$(colour.keyword),bold
# Keywords3 (built-in types, core namespaces, modules)
style.fsharp.3=fore:#378bba,bold
# Keywords4 (user-defined type names)
style.fsharp.4=fore:#b72f14,bold
# Keywords5 (user-defined type variants)
style.fsharp.5=fore:#378bba
# Identifiers
style.fsharp.6=fore:#686868
# Quoted identifiers
style.fsharp.7=fore:#a00100
# Comments
style.fsharp.8=$(colour.code.comment.line)
style.fsharp.9=$(colour.code.comment.line)
# Compiler directive
style.fsharp.10=fore:#5c2c26
# Line numbers
style.fsharp.11=fore:#5c2c26,back:#e0f3ff
# Operators
style.fsharp.12=$(colour.operator),bold
# Number
style.fsharp.13=$(colour.number)
# Character constant
style.fsharp.14=fore:#cd6000
# String constant
style.fsharp.15=fore:#cd6000
# Verbatim string
style.fsharp.16=fore:#800080
# Quoted expressions
style.fsharp.17=fore:#b72f14,back:#fefde0
# Attributes
style.fsharp.18=fore:#378bba
# Format specifiers
style.fsharp.19=$(colour.operator)

# standard language keywords
keywords.standard.fsharp= \
abstract and as assert base begin class default delegate do done downcast \
downto elif else end exception extern false finally fixed for fun function \
global if in inherit inline interface internal lazy let let! match match! \
member module mutable namespace new null of open or override private public \
rec return return! select static struct then to true try type upcast use use! \
val void when while with yield yield! atomic break checked component const \
constraint constructor continue eager event external fixed functor global \
include method mixin object parallel process protected pure sealed tailcall \
trait virtual volatile

# core functions, including those in FSharp.Collections
keywords.functions.fsharp= \
abs acos add allPairs append asin asr atan atan2 average averageBy base1 base2 \
blit cache cast ceil choose chunkBySize collect compareWith concat contains containsKey \
copy cos cosh count countBy create createBased delay difference distinct distinctBy empty \
eprintf except exists exists2 exactlyOne failwith fill filter find findBack findIndex findIndexBack \
findKey floor fold fold2 foldBack foldBack2 forall forall2 fprintf fst get groupBy head ignore indexed \
init initBased initInfinite intersect intersectMany invalidArg isEmpty isProperSubset \
isProperSuperset isSubset isSuperset item iter iter2 iteri iteri2 land last length \
length1 length2 length3 length4 lor lsl lsr lxor map map2 map3 mapFold mapFoldBack mapi mapi2 \
max maxBy maxElement min minBy minElement mod nameof not ofArray ofList ofSeq pairwise partition \
permute pick pown printf printfn raise readonly rebase reduce reduceBack remove replicate rev round scan \
scanBack seq set sig sin sinh singleton skip skipWhile snd sort sortBy sortByDescending sortDescending \
sortInPlace sortInPlaceBy sortInPlaceWith sortWith splitAt splitInto sprintf sqrt sub sum \
sumBy tail take takeWhile tan tanh toArray toList toSeq transpose truncate \
tryExactlyOne tryFind tryFindBack tryFindIndex tryFindIndexBack tryHead \
tryItem tryFindKey tryLast tryPick typeof unfold union unionMany unzip unzip3 where \
windowed zeroCreate zeroCreateBased zip zip3

# built-in types, core namespaces, modules
keywords.types.fsharp= \
ArgumentException Array Array2D Array3D Array4D BigInteger Boolean Byte Char Collections Console Core \
CultureInfo DateTime Decimal Double Environment Expr Float FSharp Globalization Int16 Int32 Int64 IntPtr \
IO Linq List Map Math Microsoft NumberStyles Object Parallel Printf Random Regex ResizeArray SByte Seq Set Single \
String System UInt16 UInt32 UInt64 UIntPtr array bigint bool byte byref char comparison decimal double enum \
equality Error Exception exn float float32 inref int int8 int16 int32 int64 list nativeint nativeptr None obj \
Ok option Option outref ref Result sbyte Some single string unmanaged unativeint uint uint8 uint16 uint32 uint64 \
unit void voidptr voption

# optional (e.g. user-defined record or union types and classes)
keywords.optional.1.fsharp=
# optional (e.g. user-defined union type variants, record members)
keywords.optional.2.fsharp=

keywords.$(file.patterns.fsharp)=$(keywords.standard.fsharp)
keywords2.$(file.patterns.fsharp)=$(keywords.functions.fsharp)
keywords3.$(file.patterns.fsharp)=$(keywords.types.fsharp)
keywords4.$(file.patterns.fsharp)=$(keywords.optional.1.fsharp)
keywords5.$(file.patterns.fsharp)=$(keywords.optional.2.fsharp)

# The below command(s) can and should be adjusted to reflect your environment;
# in addition, per-directory overrides are possible, so that project-specific "build"
# commands may be used for more complex cases - see the SciTE documentation.
command.compile.$(file.patterns.fsharp)=fsc /nologo "$(FileNameExt)"
command.go.$(file.patterns.fsharp)=dotnet fsi /nologo /exec "$(FileNameExt)"