diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 765dfe26..43983f23 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -180,11 +180,16 @@ jobs:
with:
node-version: 20
+ - name: '⚙️ Install OpenMp'
+ run: |
+ brew update
+ brew install llvm libomp
+
- name: '🚧 Configure with CMake'
run: |
mkdir build
cd build
- cmake ../ -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 -DCMAKE_OSX_ARCHITECTURES="arm64"
+ cmake ../ -DCMAKE_C_COMPILER="/opt/homebrew/opt/llvm/bin/clang" -DCMAKE_CXX_COMPILER="/opt/homebrew/opt/llvm/bin/clang++" -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 -DCMAKE_OSX_ARCHITECTURES="arm64"
- name: '🚧 Build application'
run: |
@@ -239,7 +244,7 @@ jobs:
#
- # macOS (arm64) build
+ # macOS (intel) build
#
build-mac-x86_64:
runs-on: macos-latest
@@ -266,11 +271,16 @@ jobs:
with:
node-version: 20
+ - name: '⚙️ Install OpenMp'
+ run: |
+ brew update
+ brew install llvm libomp
+
- name: '🚧 Configure with CMake'
run: |
mkdir build
cd build
- cmake ../ -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 -DCMAKE_OSX_ARCHITECTURES="x86_64"
+ cmake ../ -DCMAKE_C_COMPILER="/opt/homebrew/opt/llvm/bin/clang" -DCMAKE_CXX_COMPILER="/opt/homebrew/opt/llvm/bin/clang++" -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 -DCMAKE_OSX_ARCHITECTURES="x86_64"
- name: '🚧 Build application'
run: |
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index 00c8d66c..07ce8a9c 100644
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -54,6 +54,7 @@ find_package(
Location
Bluetooth
SerialPort
+ Core5Compat
Positioning
PrintSupport
LinguistTools
@@ -63,7 +64,7 @@ find_package(
qt_standard_project_setup()
qt_policy(SET QTP0001 NEW)
-qt_policy(SET QTP0004 NEW)
+#qt_policy(SET QTP0004 NEW)
#-------------------------------------------------------------------------------
# Import source code
@@ -223,15 +224,16 @@ target_link_libraries(
Qt6::Location
Qt6::Bluetooth
Qt6::SerialPort
+ Qt6::Core5Compat
Qt6::Positioning
Qt6::PrintSupport
Qt6::QuickControls2
simde
qmqtt
+ edbee-lib
QRealFourier
QSimpleUpdater
- QSourceHighlite
)
target_link_openssl(
diff --git a/app/qml/ProjectEditor/Views/FrameParserView.qml b/app/qml/ProjectEditor/Views/FrameParserView.qml
index b20ebd4e..53d56e57 100644
--- a/app/qml/ProjectEditor/Views/FrameParserView.qml
+++ b/app/qml/ProjectEditor/Views/FrameParserView.qml
@@ -236,8 +236,8 @@ Widgets.Pane {
text: qsTr("Undo")
toolbarButton: false
onClicked: frameParser.undo()
- enabled: frameParser.isModified
Layout.alignment: Qt.AlignVCenter
+ enabled: frameParser.undoAvailable
icon.source: "qrc:/rcc/icons/code-editor/undo.svg"
}
@@ -249,8 +249,8 @@ Widgets.Pane {
text: qsTr("Redo")
toolbarButton: false
onClicked: frameParser.redo()
- enabled: frameParser.isModified
Layout.alignment: Qt.AlignVCenter
+ enabled: frameParser.redoAvailable
icon.source: "qrc:/rcc/icons/code-editor/redo.svg"
}
diff --git a/app/rcc/edbee/README.md b/app/rcc/edbee/README.md
new file mode 100644
index 00000000..f7093cdc
--- /dev/null
+++ b/app/rcc/edbee/README.md
@@ -0,0 +1,15 @@
+edbee-data
+==========
+
+These are the data files used by the [edbee application](https://github.com/edbee/edbee-app).
+
+Originally these files were bundled in the code tree of edbee. Because most of these files have external origins, and are not required to use edbee, these are seperated into it's own repository.
+
+The data consists out of
+ * syntaxfiles: Here are some example Textmate grammar files. More definition can be found here on github.
+ * themes: Here are some example Textmate Theme files. Used for syntax highlighting.
+ * keymaps: These are the default keymaps used by edbee.
+ * config: These are the default configuration settings for edbee.
+
+
+
diff --git a/app/rcc/edbee/config/default.json b/app/rcc/edbee/config/default.json
new file mode 100644
index 00000000..95dbf8d7
--- /dev/null
+++ b/app/rcc/edbee/config/default.json
@@ -0,0 +1,21 @@
+{
+ "auto_reveal": false // When autoreveal is enabled it syncs the sidebar with the selected file
+ , "caret_blink_rate": 700
+ , "caret_width": 2
+ , "char_groups": "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~?"
+ , "extra_line_spacing": 0
+ , "font": "Monospace"
+ , "font_size": 12
+ , "indent_size": 4
+ , "smart_tab": true
+// , "line_seperator_pen": " #aaaaaa; 1.5; dashed" // we need to figure out a good format for this
+
+ , "show_caret_offset": true
+ , "theme": "Monokai"
+ , "undo_group_per_space": true
+ , "use_line_seperator": false
+ , "use_tab": false
+ , "whitespaces": "\n\t "
+ , "witespace_without_newline": "\t "
+ , "scroll_past_end": false
+}
diff --git a/app/rcc/edbee/config/default.osx.json b/app/rcc/edbee/config/default.osx.json
new file mode 100644
index 00000000..f03e4a0c
--- /dev/null
+++ b/app/rcc/edbee/config/default.osx.json
@@ -0,0 +1,4 @@
+{
+ "font": "Monaco",
+ "font_size": 12
+}
diff --git a/app/rcc/edbee/config/default.win.json b/app/rcc/edbee/config/default.win.json
new file mode 100644
index 00000000..9a3bbdb7
--- /dev/null
+++ b/app/rcc/edbee/config/default.win.json
@@ -0,0 +1,3 @@
+{
+ "font": "Courier New"
+}
diff --git a/app/rcc/edbee/config/default.x11.json b/app/rcc/edbee/config/default.x11.json
new file mode 100644
index 00000000..4a757cd6
--- /dev/null
+++ b/app/rcc/edbee/config/default.x11.json
@@ -0,0 +1,4 @@
+{
+ "font": "monospace",
+ "font_size": 14
+}
diff --git a/app/rcc/edbee/keymaps/default.json b/app/rcc/edbee/keymaps/default.json
new file mode 100644
index 00000000..f8f17636
--- /dev/null
+++ b/app/rcc/edbee/keymaps/default.json
@@ -0,0 +1,120 @@
+// This is an extended json format, supporting comments
+// standard json doesn't support comments (which I think is plain stupid)
+// If you can parse a json file, skipping comments shouldn't be a problem
+[
+ {
+ // the default editor-key-bindings
+ // on Mac OS X Ctrl is automaticly swapped with Meta
+ // you can use Qt QKeySequence texts here, extended with the default key-names
+ "bindings": [
+ { "keys": "move_to_next_char", "command": "goto_next_char" },
+ { "keys": "move_to_previous_char", "command": "goto_prev_char" },
+ { "keys": "move_to_next_word", "command": "goto_next_word" },
+ { "keys": "move_to_previous_word", "command": "goto_prev_word" },
+ { "keys": "move_to_start_of_line", "command": "goto_bol" },
+ { "keys": "move_to_start_of_block", "command": "goto_bol" },
+ { "keys": "move_to_end_of_line", "command": "goto_eol" },
+ { "keys": "move_to_end_of_block", "command": "goto_eol" },
+ { "keys": "move_to_next_line", "command": "goto_next_line" },
+ { "keys": "move_to_previous_line", "command": "goto_prev_line" },
+ { "keys": "move_to_start_of_document", "command": "goto_bof" },
+ { "keys": "move_to_end_of_document", "command": "goto_eof" },
+ { "keys": "move_to_next_page", "command": "goto_page_down" },
+ { "keys": "move_to_previous_page", "command": "goto_page_up" },
+
+ // selection
+ { "keys": "select_next_char", "command": "sel_next_char" },
+ { "keys": "select_previous_char", "command": "sel_prev_char" },
+ { "keys": "select_next_word", "command": "sel_next_word" },
+ { "keys": "select_previous_word", "command": "sel_prev_word" },
+ { "keys": "select_start_of_line", "command": "sel_to_bol" },
+ { "keys": "select_end_of_line", "command": "sel_to_eol" },
+ { "keys": "select_next_line", "command": "sel_to_next_line" },
+ { "keys": "select_previous_line", "command": "sel_to_prev_Line" },
+ { "keys": "select_start_of_document", "command": "sel_to_bof" },
+ { "keys": "select_end_of_document", "command": "sel_to_eof" },
+ { "keys": "select_next_page", "command": "sel_page_down" },
+ { "keys": "select_previous_page", "command": "sel_page_up" },
+
+ { "keys": "select_all", "command": "sel_all" },
+ // { "keys": "Ctrl+D", "command": "sel_word" }, // is superseeded by 'find_under_expand'
+ { "keys": "Ctrl+L", "command": "sel_line" },
+ { "keys": "Ctrl+Shift+L", "command": "sel_prev_line" },
+ { "keys": "Meta+shift+Up", "command": "add_caret_prev_line" },
+ { "keys": "Meta+shift+Down", "command": "add_caret_next_line" },
+ { "keys": "Escape", "command": "sel_reset" },
+
+ // TODO: We need to build in support for alternative keymaps per platform
+ { "keys": "Ctrl+Alt+Up", "command": "add_caret_prev_line" },
+ { "keys": "Ctrl+Alt+Down", "command": "add_caret_next_line" },
+
+ // line entry
+ { "keys": "Enter", "command": "ins_newline" },
+ { "keys": "Return", "command": "ins_newline" },
+ { "keys": "Shift+Enter", "command": "ins_newline" },
+ { "keys": "Shift+Return", "command": "ins_newline" },
+
+ // deletion left
+ { "keys": "Backspace", "command": "del_left" },
+ { "keys": "Shift+Backspace", "command": "del_left" },
+ { "keys": "Alt+Backspace", "command": "del_word_left" },
+ { "keys": "Ctrl+Backspace", "command": "del_line_left" },
+
+ // deletion right
+ { "keys": "Delete", "command": "del_right" },
+ { "keys": "Alt+Delete", "command": "del_word_right" },
+ { "keys": "Ctrl+Delete", "command": "del_line_right" },
+
+ // tab entry
+ { "keys": "Tab", "command": "tab" },
+ // { "keys": "Backtab", "command": "tab_back" },
+ { "keys": "Shift+Tab", "command": "tab_back" },
+ { "keys": "Shift+Backtab", "command": "tab_back" },
+ { "keys": "Ctrl+]", "command": "indent" },
+ { "keys": "Ctrl+[", "command": "outdent" },
+
+ // special entry
+ { "keys": "Ctrl+Shift+D", "command": "duplicate" },
+ { "keys": "Ctrl+/", "command": "toggle_comment" },
+ { "keys": "Ctrl+Meta+/", "command": "toggle_block_comment" },
+
+ /// TODO: add a backtab action here
+ //set( QKeySequence( Qt::Key_BackTab ), new )
+
+ // undo / redo comamnqds
+ { "keys": "undo", "command": "undo" },
+ { "keys": "redo", "command": "redo" },
+ { "keys": "Ctrl+U", "command": "soft_undo" },
+ { "keys": "Ctrl+Shift+U", "command": "soft_redo" },
+
+ // clipboard operations
+ { "keys": "Ctrl+Insert", "command": "copy" },
+ { "keys": "Shift+Delete", "command": "cut" },
+ { "keys": "Shift+Insert", "command": "paste" },
+ { "keys": "copy", "command": "copy" },
+ { "keys": "cut", "command": "cut" },
+ { "keys": "paste", "command": "paste" },
+
+ // debug commands
+ { "keys": "Ctrl+Shift+X,S", "command": "debug_dump_scopes" },
+ { "keys": "Ctrl+Shift+X,R", "command": "debug_rebuild_scopes" },
+ { "keys": "Ctrl+Shift+X,U", "command": "debug_dump_undo_stack" },
+ { "keys": "Ctrl+Shift+X,C", "command": "debug_dump_character_codes" },
+
+ // find commands
+ { "keys": "Ctrl+E", "command": "find_use_sel" },
+ { "keys": "find_next", "command": "find_next_match" },
+ { "keys": "find_previous", "command": "find_prev_match" },
+ { "keys": "Meta+S", "command": "sel_next_match" },
+ { "keys": "Meta+Shift+S", "command": "sel_prev_match" },
+ { "keys": "Ctrl+Shift+Meta+A", "command": "sel_all_matches" },
+
+ { "keys": "Ctrl+D", "command": "select_under_expand" },
+ { "keys": "Alt+F3", "command": "select_all_under" },
+
+ // move line command
+ { "keys": "Ctrl+Meta+Up", "command": "move_lines_up" },
+ { "keys": "Ctrl+Meta+Down", "command": "move_lines_down" }
+ ]
+ }
+]
diff --git a/app/rcc/edbee/keymaps/default.osx.json b/app/rcc/edbee/keymaps/default.osx.json
new file mode 100644
index 00000000..65584a24
--- /dev/null
+++ b/app/rcc/edbee/keymaps/default.osx.json
@@ -0,0 +1,20 @@
+// This is an extended json format, supporting comments
+// standard json doesn't support comments (which I think is plain stupid)
+// If you can parse a json file, skipping comments shouldn't be a problem
+[
+{
+ // "context": [
+ // { "name": "env.os", "value": "osx" }
+ // ],
+
+ // the default editor-key-bindings
+ // on Mac OS X Ctrl is automaticly swapped with Meta
+ // you can use Qt QKeySequence texts here, extended with the default key-names
+ "bindings": [
+
+ { "keys": "Meta+shift+Up", "command": "add_caret_prev_line" },
+ { "keys": "Meta+shift+Down", "command": "add_caret_next_line" },
+ { "keys": "Ctrl+Meta+G", "command": "select_all_under" }
+ ]
+}
+]
diff --git a/app/rcc/edbee/keymaps/default.win32.json b/app/rcc/edbee/keymaps/default.win32.json
new file mode 100644
index 00000000..accea5f5
--- /dev/null
+++ b/app/rcc/edbee/keymaps/default.win32.json
@@ -0,0 +1,20 @@
+// This is an extended json format, supporting comments
+// standard json doesn't support comments (which I think is plain stupid)
+// If you can parse a json file, skipping comments shouldn't be a problem
+[
+{
+ // "context": [
+ // { "name": "env.os", "value": "win32" }
+ // ],
+
+
+ // the default editor-key-bindings
+ // on Mac OS X Ctrl is automaticly swapped with Meta
+ // you can use Qt QKeySequence texts here, extended with the default key-names
+ "bindings": [
+
+ { "keys": "Ctrl+Alt+Up", "command": "add_caret_prev_line" },
+ { "keys": "Ctrl+Alt+Down", "command": "add_caret_next_line" }
+ ]
+}
+]
\ No newline at end of file
diff --git a/app/rcc/edbee/syntaxfiles/ASP.tmLanguage b/app/rcc/edbee/syntaxfiles/ASP.tmLanguage
new file mode 100644
index 00000000..b5197574
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/ASP.tmLanguage
@@ -0,0 +1,214 @@
+
+
+
+
+ comment
+ ASP SCRIPTING DICTIONARY – By Rich Barton: Version 1.0 (based on PHP Scripting Dictionary by Justin French, Sune Foldager and Allan Odgaard) Note: .asp is handled by asp/html
+ fileTypes
+
+ asa
+
+ foldingStartMarker
+ (?i)^\s*(Public|Private)?\s*(Class|Function|Sub|Property)\s*([a-zA-Z_]\w*)\s*(\(.*\)\s*)?$
+ foldingStopMarker
+ (?i)^\s*End (Class|Function|Sub|Property)\s*$
+ keyEquivalent
+ ^~A
+ name
+ ASP
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.function.asp
+
+ 2
+
+ name
+ entity.name.function.asp
+
+ 3
+
+ name
+ punctuation.definition.parameters.asp
+
+ 4
+
+ name
+ variable.parameter.function.asp
+
+ 5
+
+ name
+ punctuation.definition.parameters.asp
+
+
+ match
+ ^\s*((?i:function|sub))\s*([a-zA-Z_]\w*)\s*(\()([^)]*)(\)).*\n?
+ name
+ meta.function.asp
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.asp
+
+
+ match
+ (').*$\n?
+ name
+ comment.line.apostrophe.asp
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.asp
+
+
+ match
+ (REM ).*$\n?
+ name
+ comment.line.rem.asp
+
+
+ match
+ (?i:\b(If|Then|Else|ElseIf|End If|While|Wend|For|To|Each|In|Step|Case|Select|End Select|Return|Continue|Do|Until|Loop|Next|With|Exit Do|Exit For|Exit Function|Exit Property|Exit Sub)\b)
+ name
+ keyword.control.asp
+
+
+ match
+ =|>=|<|>|<|<>|\+|-|\*|\^|&|\b(?i:(Mod|And|Not|Or|Xor|Is))\b
+ name
+ keyword.operator.asp
+
+
+ match
+ (?i:\b(Call|Class|Const|Dim|Redim|Function|Sub|Property|End Property|End sub|End Function|Set|Let|Get|New|Randomize|Option Explicit|On Error Resume Next|On Error GoTo)\b)
+ name
+ storage.type.asp
+
+
+ match
+ (?i:\b(Private|Public|Default)\b)
+ name
+ storage.modifier.asp
+
+
+ match
+ (?i:\b(Empty|False|Nothing|Null|True)\b)
+ name
+ constant.language.asp
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.asp
+
+
+ end
+ "(?!")
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.asp
+
+
+ name
+ string.quoted.double.asp
+ patterns
+
+
+ match
+ ""
+ name
+ constant.character.escape.apostrophe.asp
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.asp
+
+
+ match
+ (\$)[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\b
+ name
+ variable.other.asp
+
+
+ match
+ (?i:\b(Application|ObjectContext|Request|Response|Server|Session)\b)
+ name
+ support.class.asp
+
+
+ match
+ (?i:\b(Contents|StaticObjects|ClientCertificate|Cookies|Form|QueryString|ServerVariables)\b)
+ name
+ support.class.collection.asp
+
+
+ match
+ (?i:\b(TotalBytes|Buffer|CacheControl|Charset|ContentType|Expires|ExpiresAbsolute|IsClientConnected|PICS|Status|ScriptTimeout|CodePage|LCID|SessionID|Timeout)\b)
+ name
+ support.constant.asp
+
+
+ match
+ (?i:\b(Lock|Unlock|SetAbort|SetComplete|BianryRead|AddHeader|AppendToLog|BinaryWrite|Clear|End|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon)\b)
+ name
+ support.function.asp
+
+
+ match
+ (?i:\b(Application_OnEnd|Application_OnStart|OnTransactionAbort|OnTransactionCommit|Session_OnEnd|Session_OnStart|Class_Initialize|Class_Terminate)\b)
+ name
+ support.function.event.asp
+
+
+ match
+ (?i:\b(Array|Add|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng|Conversions|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial|DateValue|Day|Derived|Math|Escape|Eval|Exists|Exp|Filter|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent|GetLocale|GetObject|GetRef|Hex|Hour|InputBox|InStr|InStrRev|Int|Fix|IsArray|IsDate|IsEmpty|IsNull|IsNumeric|IsObject|Item|Items|Join|Keys|LBound|LCase|Left|Len|LoadPicture|Log|LTrim|RTrim|Trim|Maths|Mid|Minute|Month|MonthName|MsgBox|Now|Oct|Remove|RemoveAll|Replace|RGB|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion|ScriptEngineMinorVersion|Second|SetLocale|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse|Tan|Time|Timer|TimeSerial|TimeValue|TypeName|UBound|UCase|Unescape|VarType|Weekday|WeekdayName|Year)\b)
+ name
+ support.function.vb.asp
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\b
+ name
+ constant.numeric.asp
+
+
+ match
+ (?i:\b(vbtrue|fvbalse|vbcr|vbcrlf|vbformfeed|vblf|vbnewline|vbnullchar|vbnullstring|vbtab|vbverticaltab|vbbinarycompare|vbtextcomparevbsunday|vbmonday|vbtuesday|vbwednesday|vbthursday|vbfriday|vbsaturday|vbusesystemdayofweek|vbfirstjan1|vbfirstfourdays|vbfirstfullweek|vbgeneraldate|vblongdate|vbshortdate|vblongtime|vbshorttime|vbobjecterror|vbEmpty|vbNull|vbInteger|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant|vbDataObject|vbDecimal|vbByte|vbArray)\b)
+ name
+ support.type.vb.asp
+
+
+ scopeName
+ source.asp
+ uuid
+ 291022B4-6B1D-11D9-90EB-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/ActionScript.tmLanguage b/app/rcc/edbee/syntaxfiles/ActionScript.tmLanguage
new file mode 100644
index 00000000..a407771c
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/ActionScript.tmLanguage
@@ -0,0 +1,267 @@
+
+
+
+
+ fileTypes
+
+ as
+
+ foldingStartMarker
+ (/\*\*|\{\s*$)
+ foldingStopMarker
+ (\*\*/|^\s*\})
+ keyEquivalent
+ ^~A
+ name
+ ActionScript
+ patterns
+
+
+ match
+ \b(R(ecordset|DBMSResolver|adioButton(Group)?)|X(ML(Socket|Node|Connector)?|UpdateResolverDataHolder)|M(M(Save|Execute)|icrophoneMicrophone|o(use|vieClip(Loader)?)|e(nu(Bar)?|dia(Controller|Display|Playback))|ath)|B(yName|inding|utton)|S(haredObject|ystem|crollPane|t(yleSheet|age|ream)|ound|e(ndEvent|rviceObject)|OAPCall|lide)|N(umericStepper|et(stream|S(tream|ervices)|Connection|Debug(Config)?))|C(heckBox|o(ntextMenu(Item)?|okie|lor|m(ponentMixins|boBox))|ustomActions|lient|amera)|T(ypedValue|ext(Snapshot|Input|F(ield|ormat)|Area)|ree|AB)|Object|D(ownload|elta(Item|Packet)?|at(e(Chooser|Field)?|a(G(lue|rid)|Set|Type)))|U(RL|TC|IScrollBar)|P(opUpManager|endingCall|r(intJob|o(duct|gressBar)))|E(ndPoint|rror)|Video|Key|F(RadioButton|GridColumn|MessageBox|BarChart|S(croll(Bar|Pane)|tyleFormat|plitView)|orm|C(heckbox|omboBox|alendar)|unction|T(icker|ooltip(Lite)?|ree(Node)?)|IconButton|D(ataGrid|raggablePane)|P(ieChart|ushButton|ro(gressBar|mptBox))|L(i(stBox|neChart)|oadingBox)|AdvancedMessageBox)|W(indow|SDLURL|ebService(Connector)?)|L(ist|o(calConnection|ad(er|Vars)|g)|a(unch|bel))|A(sBroadcaster|cc(ordion|essibility)|S(Set(Native|PropFlags)|N(ew|ative)|C(onstructor|lamp(2)?)|InstanceOf)|pplication|lert|rray))\b
+ name
+ support.class.actionscript.2
+
+
+ match
+ \b(s(h(ift|ow(GridLines|Menu|Border|Settings|Headers|ColumnHeaders|Today|Preferences)?|ad(ow|ePane))|c(hema|ale(X|Mode|Y|Content)|r(oll(Track|Drag)?|een(Resolution|Color|DPI)))|t(yleSheet|op(Drag|A(nimation|llSounds|gent))?|epSize|a(tus|rt(Drag|A(nimation|gent))?))|i(n|ze|lence(TimeOut|Level))|o(ngname|urce|rt(Items(By)?|On(HeaderRelease)?|able(Columns)?)?)|u(ppressInvalidCalls|bstr(ing)?)|p(li(ce|t)|aceCol(umnsEqually|lumnsEqually))|e(nd(DefaultPushButtonEvent|AndLoad)?|curity|t(R(GB|o(otNode|w(Height|Count))|esizable(Columns)?|a(nge|te))|G(ain|roupName)|X(AxisTitle)?|M(i(n(imum|utes)|lliseconds)|o(nth(Names)?|tionLevel|de)|ultilineMode|e(ssage|nu(ItemEnabled(At)?|EnabledAt)|dia)|a(sk|ximum))|B(u(tton(s|Width)|fferTime)|a(seTabIndex|ndwidthLimit|ckground))|S(howAsDisabled|croll(ing|Speed|Content|Target|P(osition|roperties)|barState|Location)|t(yle(Property)?|opOnFocus|at(us|e))|i(ze|lenceLevel)|ort(able(Columns)?|Function)|p(litterBarPosition|acing)|e(conds|lect(Multiple|ion(Required|Type)?|Style|Color|ed(Node(s)?|Cell|I(nd(ices|ex)|tem(s)?))?|able))|kin|m(oothness|allScroll))|H(ighlight(s|Color)|Scroll|o(urs|rizontal)|eader(Symbol|Height|Text|Property|Format|Width|Location)?|as(Shader|CloseBox))|Y(ear|AxisTitle)?|N(ode(Properties|ExpansionHandler)|ewTextFormat)|C(h(ildNodes|a(ngeHandler|rt(Title|EventHandler)))|o(ntent(Size)?|okie|lumns)|ell(Symbol|Data)|l(i(ckHandler|pboard)|oseHandler)|redentials)|T(ype(dVaule)?|i(tle(barHeight)?|p(Target|Offset)?|me(out(Handler)?)?)|oggle|extFormat|ransform)|I(s(Branch|Open)|n(terval|putProperty)|con(SymbolName)?|te(rator|m(ByKey|Symbol)))|Orientation|D(i(splay(Range|Graphics|Mode|Clip|Text|edMonth)|rection)|uration|e(pth(Below|To|Above)|fault(GatewayURL|Mappings|NodeIconSymbolName)|l(iveryMode|ay)|bug(ID)?)|a(yOfWeekNames|t(e(Filter)?|a(Mapping(s)?|Item(Text|Property|Format)|Provider|All(Height|Property|Format|Width))?))|ra(wConnectors|gContent))|U(se(Shadow|HandCursor|EchoSuppression|rInput|Fade)|TC(M(i(nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear))|P(osition|ercentComplete|an(e(M(inimumSize|aximumSize)|Size|Title))?|ro(pert(y(Data)?|iesAt)|gress))|E(nabled|dit(Handler|able)|xpand(NodeTrigger|erSymbolName))|V(Scroll|olume|alue(Source)?)|KeyFrameInterval|Quality|F(i(eld|rst(DayOfWeek|VisibleNode))|ocus|ullYear|ps|ade(InLength|OutLength)|rame(Color|Width))|Width|L(ine(Color|Weight)|o(opback|adTarget)|a(rgeScroll|bel(Source|Placement)?))|A(s(Boolean|String|Number)|n(yTypedValue|imation)|ctiv(e(State(Handler)?|Handler)|ateHandler)|utoH(ideScrollBar|eight)))?|paratorBefore|ek|lect(ion(Disabled|Unfocused)?|ed(Node(s)?|Child|I(nd(ices|ex)|tem(s)?)|Dat(e|a))?|able(Ranges)?)|rver(String)?)|kip|qrt|wapDepths|lice|aveToSharedObj|moothing)|h(scroll(Policy)?|tml(Text)?|i(t(Test(TextNearPos)?|Area)|de(BuiltInItems|Child)?|ghlight(2D|3D)?)|orizontal|e(ight|ader(Re(nderer|lease)|Height|Text))|P(osition|ageScrollSize)|a(s(childNodes|MP3|S(creen(Broadcast|Playback)|treaming(Video|Audio)|ort)|Next|OwnProperty|Pr(inting|evious)|EmbeddedVideo|VideoEncoder|A(ccesibility|udio(Encoder)?))|ndlerName)|LineScrollSize)|ye(sLabel|ar)|n(o(t|de(Name|Close|Type|Open|Value)|Label)|u(llValue|mChild(S(creens|lides)|ren|Forms))|e(w(Item|line|Value|LocationDialog)|xt(S(cene|ibling|lide)|TabIndex|Value|Frame)?)?|ame(s)?)|c(h(ildNodes|eck|a(nge(sPending)?|r(CodeAt|At))|r)|o(s|n(st(ant|ructor)|nect|c(urrency|at)|t(ent(Type|Path)?|ains|rol(Placement|lerPolicy))|denseWhite|version)|py|l(or|umn(Stretch|Name(s)?|Count))|m(p(onent|lete)|ment))|u(stomItems|ePoint(s)?|r(veTo|Value|rent(Slide|ChildSlide|Item|F(ocused(S(creen|lide)|Form)|ps))))|e(il|ll(Renderer|Press|Edit|Focus(In|Out)))|l(i(ck|ents)|o(se(Button|Pane)?|ne(Node)?)|ear(S(haredObjects|treams)|Timeout|Interval)?)|a(ncelLabel|tch|p(tion|abilities)|l(cFields|l(e(e|r))?))|reate(GatewayConnection|Menu|Se(rver|gment)|C(hild(AtDepth)?|l(ient|ass(ChildAtDepth|Object(AtDepth)?))|all)|Text(Node|Field)|Item|Object(AtDepth)?|PopUp|E(lement|mptyMovieClip)))|t(h(is|row)|ype(of|Name)?|i(tle(StyleDeclaration)?|me(out)?)|o(talTime|String|olTipText|p|UpperCase|ggle(HighQuality)?|Lo(caleString|werCase))|e(st|llTarget|xt(RightMargin|Bold|S(ize|elected)|Height|Color|I(ndent|talic)|Disabled|Underline|F(ield|ont)|Width|LeftMargin|Align)?)|a(n|rget(Path)?|b(Stops|Children|Index|Enabled|leName))|r(y|igger|ac(e|k(AsMenu)?)))|i(s(Running|Branch|NaN|Con(soleOpen|nected)|Toggled|Installed|Open|D(own|ebugger)|P(urchased|ro(totypeOf|pertyEnumerable))|Empty|F(inite|ullyPopulated)|Local|Active)|n(s(tall|ertBefore)|cludeDeltaPacketInfo|t|it(ialize|Component|Pod|A(pplication|gent))?|de(nt|terminate|x(InParent(Slide|Form)?|Of)?)|put|validate|finity|LocalInternetCache)?|con(F(ield|unction))?|t(e(ratorScrolled|m(s|RollO(ut|ver)|ClassName))|alic)|d3|p|fFrameLoaded|gnore(Case|White))|o(s|n(R(ollO(ut|ver)|e(s(ize|ult)|l(ease(Outside)?|aseOutside)))|XML|Mouse(Move|Down|Up|Wheel)|S(ync|croller|tatus|oundComplete|e(tFocus|lect(edItem)?))|N(oticeEvent|etworkChange)|C(hanged|onnect|l(ipEvent|ose))|ID3|D(isconnect|eactivate|ata|ragO(ut|ver))|Un(install|load)|P(aymentResult|ress)|EnterFrame|K(illFocus|ey(Down|Up))|Fault|Lo(ad|g)|A(ctiv(ity|ate)|ppSt(op|art)))?|pe(n|ration)|verLayChildren|kLabel|ldValue|r(d)?)|d(i(s(connect|play(Normal|ed(Month|Year)|Full)|able(Shader|d(Ranges|Days)|CloseBox|Events))|rection)|o(cTypeDecl|tall|Decoding|main|LazyDecoding)|u(plicateMovieClip|ration)|e(stroy(ChildAt|Object)|code|fault(PushButton(Enabled)?|KeydownHandler)?|l(ta(Packet(Changed)?)?|ete(PopUp|All)?)|blocking)|a(shBoardSave|yNames|ta(Provider)?|rkshadow)|r(opdown(Width)?|a(w|gO(ut|ver))))|u(se(Sort|HandCursor|Codepage|EchoSuppression)|n(shift|install|derline|escape|format|watch|lo(ck|ad(Movie(Num)?)?))|pdate(Results|Mode|I(nputProperties|tem(ByIndex)?)|P(acket|roperties)|View|AfterEvent)|rl)|join|p(ixelAspectRatio|o(sition|p|w)|u(sh|rge|blish)|ercen(tComplete|Loaded)|lay(head(Change|Time)|ing|Hidden|erType)?|a(ssword|use|r(se(XML|CSS|Int|Float)|ent(Node|Is(S(creen|lide)|Form))|ams))|r(int(Num|AsBitmap(Num)?)?|o(to(type)?|pert(y|ies)|gress)|e(ss|v(ious(S(ibling|lide)|Value)?|Scene|Frame)|ferred(Height|Width))))|e(scape|n(code(r)?|ter(Frame)?|dFill|able(Shader|d|CloseBox|Events))|dit(able|Field|LocationDialog)|v(ent|al(uate)?)|q|x(tended|p|ec(ute)?|actSettings)|m(phasized(StyleDeclaration)?|bedFonts))|v(i(sible|ewPod)|ScrollPolicy|o(id|lume)|ersion|P(osition|ageScrollSize)|a(l(idat(ionError|e(Property|ActivationKey)?)|ue(Of)?)|riable)|LineScrollSize)|k(ind|ey(Down|Up|Press|FrameInterval))|q(sort|uality)|f(scommand|i(n(d(Text|First|Last)?|ally)|eldInfo|lter(ed|Func)?|rst(Slide|Child|DayOfWeek|VisibleNode)?)|o(nt|cus(In|edCell|Out|Enabled)|r(egroundDisabled|mat(ter)?))|unctionName|ps|l(oor|ush)|ace|romCharCode)|w(i(th|dth)|ordWrap|atch|riteAccess)|l(t|i(st(Owner)?|ne(Style|To))|o(c(k|a(t(ion|eByld)|l(ToGlobal|FileReadDisable)))|opback|ad(Movie(Num)?|S(crollContent|ound)|ed|Variables(Num)?|Application)?|g(Changes)?)|e(ngth|ft(Margin)?|ading)?|a(st(Slide|Child|Index(Of)?)?|nguage|b(el(Placement|F(ield|unction))?|leField)))|a(s(scociate(Controller|Display)|in|pectRatio|function)|nd|c(ceptConnection|tiv(ityLevel|ePlayControl)|os)|t(t(ach(Movie|Sound|Video|Audio)|ributes)|an(2)?)|dd(header|RequestHeader|Menu(Item(At)?|At)?|Sort|Header|No(tice|de(At)?)|C(olumn(At)?|uePoint)|T(oLocalInternetCache|reeNode(At)?)|I(con|tem(s(At)?|At)?)|DeltaItem|P(od|age|roperty)|EventListener|View|FieldInfo|Listener|Animation)?|uto(Size|Play|KeyNav|Load)|pp(endChild|ly(Changes|Updates)?)|vHardwareDisable|fterLoaded|l(ternateRowColors|ign|l(ow(InsecureDomain|Domain)|Transitions(InDone|OutDone))|bum)|r(tist|row|g(uments|List))|gent|bs)|r(ight(Margin)?|o(ot(S(creen|lide)|Form)|und|w(Height|Count)|llO(ut|ver))|e(s(yncDepth|t(orePane|artAnimation|rict)|iz(e|able(Columns)?)|olveDelta|ult(s)?|ponse)|c(o(ncile(Results|Updates)|rd)|eive(Video|Audio))|draw|jectConnection|place(Sel|ItemAt|AllItems)?|ve(al(Child)?|rse)|quest(SizeChange|Payment)?|f(errer|resh(ScrollContent|Destinations|Pane|FromSources)?)|lease(Outside)?|ad(Only|Access)|gister(SkinElement|C(olor(Style|Name)|lass)|InheritingStyle|Proxy)|move(Range|M(ovieClip|enu(Item(At)?|At))|Background|Sort|No(tice|de(sAt|At)?)|C(olum(nAt|At)|uePoints)|T(extField|reeNode(At)?)|Item(At)?|Pod|EventListener|FromLocalInternetCache|Listener|All(C(olumns|uePoints)|Items)?))|a(ndom|te|dioDot))|g(t|oto(Slide|NextSlide|PreviousSlide|FirstSlide|LastSlide|And(Stop|Play))|e(nre|t(R(GB|o(otNode|wCount)|e(sizable|mote))|X(AxisTitle)?|M(i(n(imum(Size)?|utes)|lliseconds)|onth(Names)?|ultilineMode|e(ssage|nu(ItemAt|EnabledAt|At))|aximum(Size)?)|B(ytes(Total|Loaded)|ounds|utton(s|Width)|eginIndex|a(ndwidthLimit|ckground))|S(howAsDisabled|croll(ing|Speed|Content|Position|barState|Location)|t(yle(Names)?|opOnFocus|ate)|ize|o(urce|rtState)|p(litterBarPosition|acing)|e(conds|lect(Multiple|ion(Required|Type)|Style|ed(Node(s)?|Cell|Text|I(nd(ices|ex)|tem(s)?))?)|rvice)|moothness|WFVersion)|H(ighlight(s|Color)|ours|e(ight|ader(Height|Text|Property|Format|Width|Location)?)|as(Shader|CloseBox))|Y(ear|AxisTitle)?|N(o(tices|de(DisplayedAt|At))|um(Children|berAvailable)|e(wTextFormat|xtHighestDepth))|C(h(ild(S(creen|lide)|Nodes|Form|At)|artTitle)|o(n(tent|figInfo)|okie|de|unt|lumn(Names|Count|Index|At))|uePoint|ellIndex|loseHandler|a(ll|retIndex))|T(ypedValue|i(tle(barHeight)?|p(Target|Offset)?|me(stamp|zoneOffset|out(State|Handler)|r)?)|oggle|ext(Extent|Format)?|r(ee(NodeAt|Length)|ans(form|actionId)))|I(s(Branch|Open)|n(stanceAtDepth|d(icesByKey|exByKey))|con(SymbolName)?|te(rator|m(sByKey|By(Name|Key)|id|ID|At))|d)|O(utput(Parameter(s|ByName)?|Value(s)?)|peration|ri(entation|ginalCellData))|D(i(s(play(Range|Mode|Clip|Index|edMonth)|kUsage)|rection)|uration|e(pth|faultNodeIconSymbolName|l(taPacket|ay)|bug(Config|ID)?)|a(y(OfWeekNames)?|t(e|a(Mapping(s)?|Item(Text|Property|Format)|Label|All(Height|Property|Format|Width))?))|rawConnectors)|U(se(Shadow|HandCursor|rInput|Fade)|RL|TC(M(i(nutes|lliseconds)|onth)|Seconds|Hours|Da(y|te)|FullYear))|P(o(sition|ds)|ercentComplete|a(n(e(M(inimums|aximums)|Height|Title|Width))?|rentNode)|r(operty(Name|Data)?|efer(ences|red(Height|Width))))|E(n(dIndex|abled)|ditingData|x(panderSymbolName|andNodeTrigger))|V(iewed(Pods|Applications)|olume|ersion|alue(Source)?)|F(i(eld|rst(DayOfWeek|VisibleNode))|o(ntList|cus)|ullYear|ade(InLength|OutLength)|rame(Color|Width))|Width|L(ine(Color|Weight)|o(cal|adTarget)|ength|a(stTabIndex|bel(Source)?))|A(s(cii|Boolean|String|Number)|n(yTypedValue|imation)|ctiv(eState(Handler)?|ateHandler)|utoH(ideScrollBar|eight)|llItems|gent))?)?|lobal(StyleFormat|ToLocal)?|ain|roupName)|x(updatePackety|mlDecl)?|m(y(MethodName|Call)|in(imum)?|o(nthNames|tion(TimeOut|Level)|de(lChanged)?|use(Move|O(ut|ver)|Down(Somewhere|Outside)?|Up(Somewhere)?|WheelEnabled)|ve(To)?)|u(ted|lti(pleS(imultaneousAllowed|elections)|line))|e(ssage|nu(Show|Hide)?|th(od)?|diaType)|a(nufacturer|tch|x(scroll|hscroll|imum|HPosition|Chars|VPosition)?)|b(substring|chr|ord|length))|b(ytes(Total|Loaded)|indFormat(Strings|Function)|o(ttom(Scroll)?|ld|rder(Color)?)|u(tton(Height|Width)|iltInItems|ffer(Time|Length)|llet)|e(foreApplyUpdates|gin(GradientFill|Fill))|lockIndent|a(ndwidth|ckground(Style|Color|Disabled)?)|roadcastMessage)|onHTTPStatus)\b
+ name
+ support.function.actionscript.2
+
+
+ match
+ \b(__proto__|__resolve|_accProps|_alpha|_changed|_currentframe|_droptarget|_flash|_focusrect|_framesloaded|_global|_height|_highquality|_level|_listeners|_lockroot|_name|_parent|_quality|_root|_rotation|_soundbuftime|_target|_totalframes|_url|_visible|_width|_x|_xmouse|_xscale|_y|_ymouse|_yscale)\b
+ name
+ support.constant.actionscript.2
+
+
+ match
+ \b(dynamic|extends|import|implements|interface|public|private|new|static|super|var|for|in|break|continue|while|do|return|if|else|case|switch)\b
+ name
+ keyword.control.actionscript.2
+
+
+ match
+ \b(Boolean|Number|String|Void)\b
+ name
+ storage.type.actionscript.2
+
+
+ match
+ \b(null|undefined|true|false)\b
+ name
+ constant.language.actionscript.2
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\b
+ name
+ constant.numeric.actionscript.2
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.actionscript.2
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.actionscript.2
+
+
+ name
+ string.quoted.double.actionscript.2
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.actionscript.2
+
+
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.actionscript.2
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.actionscript.2
+
+
+ name
+ string.quoted.single.actionscript.2
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.actionscript.2
+
+
+
+
+ match
+ \b(BACKSPACE|CAPSLOCK|CONTROL|DELETEKEY|DOWN|END|ENTER|HOME|INSERT|LEFT|LN10|LN2|LOG10E|LOG2E|MAX_VALUE|MIN_VALUE|NEGATIVE_INFINITY|NaN|PGDN|PGUP|PI|POSITIVE_INFINITY|RIGHT|SPACE|SQRT1_2|SQRT2|UP)\b
+ name
+ support.constant.actionscript.2
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.actionscript.2
+
+
+ end
+ \*/
+ name
+ comment.block.actionscript.2
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.actionscript.2
+
+
+ match
+ (//).*$\n?
+ name
+ comment.line.double-slash.actionscript.2
+
+
+ match
+ \b(instanceof)\b
+ name
+ keyword.operator.actionscript.2
+
+
+ match
+ [-!%&*+=/?:]
+ name
+ keyword.operator.symbolic.actionscript.2
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.preprocessor.actionscript.2
+
+
+ match
+ ^[ \t]*(#)[a-zA-Z]+
+ name
+ meta.preprocessor.actionscript.2
+
+
+ begin
+ \b(function)\s+([a-zA-Z_]\w*)\s*(\()
+ captures
+
+ 1
+
+ name
+ storage.type.function.actionscript.2
+
+ 2
+
+ name
+ entity.name.function.actionscript.2
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.actionscript.2
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.end.actionscript.2
+
+
+ name
+ meta.function.actionscript.2
+ patterns
+
+
+ match
+ [^,)\n]+
+ name
+ variable.parameter.function.actionscript.2
+
+
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.class.actionscript.2
+
+ 2
+
+ name
+ entity.name.type.class.actionscript.2
+
+ 3
+
+ name
+ storage.modifier.extends.actionscript.2
+
+ 4
+
+ name
+ entity.other.inherited-class.actionscript.2
+
+
+ match
+ \b(class)\s+([a-zA-Z_](?:\w|\.)*)(?:\s+(extends)\s+([a-zA-Z_](?:\w|\.)*))?
+ name
+ meta.class.actionscript.2
+
+
+ scopeName
+ source.actionscript.2
+ uuid
+ E5A6EC91-6EE4-11D9-BAB4-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/AppleScript.tmLanguage b/app/rcc/edbee/syntaxfiles/AppleScript.tmLanguage
new file mode 100644
index 00000000..cc8123d4
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/AppleScript.tmLanguage
@@ -0,0 +1,2142 @@
+
+
+
+
+ fileTypes
+
+ applescript
+ script editor
+
+ firstLineMatch
+ ^#!.*(osascript)
+ foldingStartMarker
+ (?x)
+ ^\s*
+ (
+ tell \s+ (?! .* \b(to)\b) .*
+ |tell\b.*?\bto\ tell \s+ (?! .* \b(to)\b) .*
+ |using \s+ terms \s+ from \s+ .*
+ |if\b .* \bthen\b
+ |repeat\b .*
+ |( on | to )\b (?!\s+ error) .*
+ |try\b
+ |with \s+ timeout\b .*
+ |script\b .*
+ |( considering | ignoring )\b .*
+ )\s*(--.*?)?$
+
+ foldingStopMarker
+ ^\s*end\b.*$
+ keyEquivalent
+ ^~A
+ name
+ AppleScript
+ patterns
+
+
+ include
+ #blocks
+
+
+ include
+ #inline
+
+
+ repository
+
+ attributes.considering-ignoring
+
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.array.attributes.applescript
+
+
+ match
+ \b(and)\b
+ name
+ keyword.control.attributes.and.applescript
+
+
+ match
+ \b(?i:case|diacriticals|hyphens|numeric\s+strings|punctuation|white\s+space)\b
+ name
+ constant.other.attributes.text.applescript
+
+
+ match
+ \b(?i:application\s+responses)\b
+ name
+ constant.other.attributes.application.applescript
+
+
+
+ blocks
+
+ patterns
+
+
+ begin
+ ^\s*(script)\s+(\w+)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.script.applescript
+
+ 2
+
+ name
+ entity.name.type.script-object.applescript
+
+
+ end
+ ^\s*(end(?:\s+script)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.script.applescript
+
+
+ name
+ meta.block.script.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^(?x)
+ \s*(to|on)\s+ # "on" or "to"
+ (\w+) # function name
+ (\() # opening paren
+ ((?:[\s,:\{\}]*(?:\w+)?)*) # parameters
+ (\)) # closing paren
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.function.applescript
+
+ 2
+
+ name
+ entity.name.function.handler.applescript
+
+ 3
+
+ name
+ punctuation.definition.parameters.applescript
+
+ 4
+
+ name
+ variable.parameter.handler.applescript
+
+ 5
+
+ name
+ punctuation.definition.parameters.applescript
+
+
+ comment
+
+ This is not a very well-designed rule. For now,
+ we can leave it like this though, as it sorta works.
+
+ end
+ ^\s*(end)(?:\s+(\2))?(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.function.applescript
+
+
+ name
+ meta.function.positional.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^(?x)
+ \s*(to|on)\s+ # "on" or "to"
+ (\w+) # function name
+ (?:\s+
+ (of|in)\s+ # "of" or "in"
+ (\w+) # direct parameter
+ )?
+ (?=\s+(above|against|apart\s+from|around|aside\s+from|at|below|beneath|beside|between|by|for|from|instead\s+of|into|on|onto|out\s+of|over|thru|under)\b)
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.function.applescript
+
+ 2
+
+ name
+ entity.name.function.handler.applescript
+
+ 3
+
+ name
+ keyword.control.function.applescript
+
+ 4
+
+ name
+ variable.parameter.handler.direct.applescript
+
+
+ comment
+ TODO: match `given` parameters
+ end
+ ^\s*(end)(?:\s+(\2))?(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.function.applescript
+
+
+ name
+ meta.function.prepositional.applescript
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.preposition.applescript
+
+ 2
+
+ name
+ variable.parameter.handler.applescript
+
+
+ match
+ \b(?i:above|against|apart\s+from|around|aside\s+from|at|below|beneath|beside|between|by|for|from|instead\s+of|into|on|onto|out\s+of|over|thru|under)\s+(\w+)\b
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^(?x)
+ \s*(to|on)\s+ # "on" or "to"
+ (\w+) # function name
+ (?=\s*(--.*?)?$) # nothing else
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.function.applescript
+
+ 2
+
+ name
+ entity.name.function.handler.applescript
+
+
+ end
+ ^\s*(end)(?:\s+(\2))?(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.function.applescript
+
+
+ name
+ meta.function.parameterless.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ include
+ #blocks.tell
+
+
+ include
+ #blocks.repeat
+
+
+ include
+ #blocks.statement
+
+
+ include
+ #blocks.other
+
+
+
+ blocks.other
+
+ patterns
+
+
+ begin
+ ^\s*(considering)\b
+ end
+ ^\s*(end(?:\s+considering)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.considering.applescript
+ patterns
+
+
+ begin
+ (?<=considering)
+ end
+ (?<!¬)$
+ name
+ meta.array.attributes.considering.applescript
+ patterns
+
+
+ include
+ #attributes.considering-ignoring
+
+
+
+
+ begin
+ (?<=ignoring)
+ end
+ (?<!¬)$
+ name
+ meta.array.attributes.ignoring.applescript
+ patterns
+
+
+ include
+ #attributes.considering-ignoring
+
+
+
+
+ match
+ \b(but)\b
+ name
+ keyword.control.but.applescript
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(ignoring)\b
+ end
+ ^\s*(end(?:\s+ignoring)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.ignoring.applescript
+ patterns
+
+
+ begin
+ (?<=considering)
+ end
+ (?<!¬)$
+ name
+ meta.array.attributes.considering.applescript
+ patterns
+
+
+ include
+ #attributes.considering-ignoring
+
+
+
+
+ begin
+ (?<=ignoring)
+ end
+ (?<!¬)$
+ name
+ meta.array.attributes.ignoring.applescript
+ patterns
+
+
+ include
+ #attributes.considering-ignoring
+
+
+
+
+ match
+ \b(but)\b
+ name
+ keyword.control.but.applescript
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(if)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.if.applescript
+
+
+ end
+ ^\s*(end(?:\s+if)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.if.applescript
+ patterns
+
+
+ match
+ \b(then)\b
+ name
+ keyword.control.then.applescript
+
+
+ match
+ \b(else\s+if)\b
+ name
+ keyword.control.else-if.applescript
+
+
+ match
+ \b(else)\b
+ name
+ keyword.control.else.applescript
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(try)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.try.applescript
+
+
+ end
+ ^\s*(end(?:\s+(try|error))?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.try.applescript
+ patterns
+
+
+ begin
+ ^\s*(on\s+error)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.exception.on-error.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.property.error.applescript
+ patterns
+
+
+ match
+ \b(?i:number|partial|from|to)\b
+ name
+ keyword.control.exception.modifier.applescript
+
+
+ include
+ #inline
+
+
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(using\s+terms\s+from)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.terms.applescript
+
+
+ end
+ ^\s*(end(?:\s+using\s+terms\s+from)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.terms.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(with\s+timeout(\s+of)?)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.timeout.applescript
+
+
+ end
+ ^\s*(end(?:\s+timeout)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.timeout.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(with\s+transaction(\s+of)?)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.transaction.applescript
+
+
+ end
+ ^\s*(end(?:\s+transaction)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.transaction.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+ blocks.repeat
+
+ patterns
+
+
+ begin
+ ^\s*(repeat)\s+(until)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.repeat.applescript
+
+ 2
+
+ name
+ keyword.control.until.applescript
+
+
+ end
+ ^\s*(end(?:\s+repeat)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.repeat.until.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(repeat)\s+(while)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.repeat.applescript
+
+ 2
+
+ name
+ keyword.control.while.applescript
+
+
+ end
+ ^\s*(end(?:\s+repeat)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.repeat.while.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(repeat)\s+(with)\s+(\w+)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.repeat.applescript
+
+ 2
+
+ name
+ keyword.control.until.applescript
+
+ 3
+
+ name
+ variable.parameter.loop.applescript
+
+
+ end
+ ^\s*(end(?:\s+repeat)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.repeat.with.applescript
+ patterns
+
+
+ match
+ \b(from|to|by)\b
+ name
+ keyword.control.modifier.range.applescript
+
+
+ match
+ \b(in)\b
+ name
+ keyword.control.modifier.list.applescript
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(repeat)\b(?=\s*(--.*?)?$)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.repeat.applescript
+
+
+ end
+ ^\s*(end(?:\s+repeat)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.repeat.forever.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(repeat)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.repeat.applescript
+
+
+ end
+ ^\s*(end(?:\s+repeat)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.repeat.times.applescript
+ patterns
+
+
+ match
+ \b(times)\b
+ name
+ keyword.control.times.applescript
+
+
+ include
+ $self
+
+
+
+
+
+ blocks.statement
+
+ patterns
+
+
+ begin
+ \b(prop(?:erty)?)\s+(\w+)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.def.property.applescript
+
+ 2
+
+ name
+ variable.other.property.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.statement.property.applescript
+ patterns
+
+
+ match
+ :
+ name
+ punctuation.separator.key-value.property.applescript
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \b(set)\s+(\w+)\s+(to)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.def.set.applescript
+
+ 2
+
+ name
+ variable.other.readwrite.set.applescript
+
+ 3
+
+ name
+ keyword.control.def.set.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.statement.set.applescript
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \b(local)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.def.local.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.statement.local.applescript
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.variables.local.applescript
+
+
+ match
+ \b\w+
+ name
+ variable.other.readwrite.local.applescript
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \b(global)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.def.global.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.statement.global.applescript
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.variables.global.applescript
+
+
+ match
+ \b\w+
+ name
+ variable.other.readwrite.global.applescript
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \b(error)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.exception.error.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.statement.error.applescript
+ patterns
+
+
+ match
+ \b(number|partial|from|to)\b
+ name
+ keyword.control.exception.modifier.applescript
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \b(if)\b(?=.*\bthen\b(?!\s*(--.*?)?$))
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.if.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.statement.if-then.applescript
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+
+ blocks.tell
+
+ patterns
+
+
+ begin
+ ^\s*(tell)\s+(?=app(lication)?\s+"(?i:textmate)")(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell Textmate
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.application.textmate.applescript
+ patterns
+
+
+ include
+ #textmate
+
+
+ include
+ #standard-suite
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?=app(lication)?\s+"(?i:finder)")(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell Finder
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.application.finder.applescript
+ patterns
+
+
+ include
+ #finder
+
+
+ include
+ #standard-suite
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?=app(lication)?\s+"(?i:system events)")(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell System Events
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.application.system-events.applescript
+ patterns
+
+
+ include
+ #system-events
+
+
+ include
+ #standard-suite
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?=app(lication)?\s+"(?i:itunes)")(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell iTunes
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.application.itunes.applescript
+ patterns
+
+
+ include
+ #itunes
+
+
+ include
+ #standard-suite
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?=app(lication)?\s+process\b)(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell generic application process
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.application-process.generic.applescript
+ patterns
+
+
+ include
+ #standard-suite
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?=app(lication)?\b)(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell generic application
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.application.generic.applescript
+ patterns
+
+
+ include
+ #standard-suite
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ generic tell block
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.generic.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?=.*\bto\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell … to statement
+ end
+ (?<!¬)$
+ name
+ meta.block.tell.generic.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+ built-in
+
+ patterns
+
+
+ include
+ #built-in.constant
+
+
+ include
+ #built-in.keyword
+
+
+ include
+ #built-in.support
+
+
+ include
+ #built-in.punctuation
+
+
+
+ built-in.constant
+
+ patterns
+
+
+ comment
+ yes/no can’t always be used as booleans, e.g. in an if() expression. But they work e.g. for boolean arguments.
+ match
+ \b(?i:true|false|yes|no)\b
+ name
+ constant.language.boolean.applescript
+
+
+ match
+ \b(?i:null|missing\s+value)\b
+ name
+ constant.language.null.applescript
+
+
+ match
+ -?\b\d+((\.(\d+\b)?)?(?i:e\+?\d*\b)?|\b)
+ name
+ constant.numeric.applescript
+
+
+ match
+ \b(?i:space|tab|return|linefeed|quote)\b
+ name
+ constant.other.text.applescript
+
+
+ match
+ \b(?i:all\s+(caps|lowercase)|bold|condensed|expanded|hidden|italic|outline|plain|shadow|small\s+caps|strikethrough|(sub|super)script|underline)\b
+ name
+ constant.other.styles.applescript
+
+
+ match
+ \b(?i:Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)\b
+ name
+ constant.other.time.month.applescript
+
+
+ match
+ \b(?i:Mon(day)?|Tue(sday)?|Wed(nesday)?|Thu(rsday)?|Fri(day)?|Sat(urday)?|Sun(day)?)\b
+ name
+ constant.other.time.weekday.applescript
+
+
+ match
+ \b(?i:AppleScript|pi|result|version|current\s+application|its?|m[ey])\b
+ name
+ constant.other.miscellaneous.applescript
+
+
+ match
+ \b(?i:text\s+item\s+delimiters|print\s+(length|depth))\b
+ name
+ variable.language.applescript
+
+
+
+ built-in.keyword
+
+ patterns
+
+
+ match
+ (&|\*|\+|-|/|÷|\^)
+ name
+ keyword.operator.arithmetic.applescript
+
+
+ match
+ (=|≠|>|<|≥|>=|≤|<=)
+ name
+ keyword.operator.comparison.applescript
+
+
+ match
+ (?ix)\b
+ (and|or|div|mod|as|not
+ |(a\s+)?(ref(\s+to)?|reference\s+to)
+ |equal(s|\s+to)|contains?|comes\s+(after|before)|(start|begin|end)s?\s+with
+ )
+ \b
+ name
+ keyword.operator.word.applescript
+
+
+ comment
+ In double quotes so we can use a single quote in the keywords.
+ match
+ (?ix)\b
+ (is(n't|\s+not)?(\s+(equal(\s+to)?|(less|greater)\s+than(\s+or\s+equal(\s+to)?)?|in|contained\s+by))?
+ |does(n't|\s+not)\s+(equal|come\s+(before|after)|contain)
+ )
+ \b
+ name
+ keyword.operator.word.applescript
+
+
+ match
+ \b(?i:some|every|whose|where|that|id|index|\d+(st|nd|rd|th)|first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth|last|front|back|middle|named|beginning|end|from|to|thr(u|ough)|before|(front|back|beginning|end)\s+of|after|behind|in\s+(front|back|beginning|end)\s+of)\b
+ name
+ keyword.operator.reference.applescript
+
+
+ match
+ \b(?i:continue|return|exit(\s+repeat)?)\b
+ name
+ keyword.control.loop.applescript
+
+
+ match
+ \b(?i:about|above|after|against|and|apart\s+from|around|as|aside\s+from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|contain|contains|contains|copy|div|does|eighth|else|end|equal|equals|error|every|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead\s+of|into|is|it|its|last|local|me|middle|mod|my|ninth|not|of|on|onto|or|out\s+of|over|prop|property|put|ref|reference|repeat|returning|script|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\b
+ name
+ keyword.other.applescript
+
+
+
+ built-in.punctuation
+
+ patterns
+
+
+ match
+ ¬
+ name
+ punctuation.separator.continuation.line.applescript
+
+
+ comment
+ the : in property assignments
+ match
+ :
+ name
+ punctuation.separator.key-value.property.applescript
+
+
+ comment
+ the parentheses in groups
+ match
+ [()]
+ name
+ punctuation.section.group.applescript
+
+
+
+ built-in.support
+
+ patterns
+
+
+ match
+ \b(?i:POSIX\s+path|frontmost|id|name|running|version|days?|weekdays?|months?|years?|time|date\s+string|time\s+string|length|rest|reverse|items?|contents|quoted\s+form|characters?|paragraphs?|words?)\b
+ name
+ support.function.built-in.property.applescript
+
+
+ match
+ \b(?i:activate|log|clipboard\s+info|set\s+the\s+clipboard\s+to|the\s+clipboard|info\s+for|list\s+(disks|folder)|mount\s+volume|path\s+to(\s+resource)?|close\s+access|get\s+eof|open\s+for\s+access|read|set\s+eof|write|open\s+location|current\s+date|do\s+shell\s+script|get\s+volume\s+settings|random\s+number|round|set\s+volume|system\s+(attribute|info)|time\s+to\s+GMT|load\s+script|run\s+script|scripting\s+components|store\s+script|copy|count|get|launch|run|set|ASCII\s+(character|number)|localized\s+string|offset|summarize|beep|choose\s+(application|color|file(\s+name)?|folder|from\s+list|remote\s+application|URL)|delay|display\s+(alert|dialog)|say)\b
+ name
+ support.function.built-in.command.applescript
+
+
+ match
+ \b(?i:get|run)\b
+ name
+ support.function.built-in.applescript
+
+
+ match
+ \b(?i:anything|data|text|upper\s+case|propert(y|ies))\b
+ name
+ support.class.built-in.applescript
+
+
+ match
+ \b(?i:alias|class)(es)?\b
+ name
+ support.class.built-in.applescript
+
+
+ match
+ \b(?i:app(lication)?|boolean|character|constant|date|event|file(\s+specification)?|handler|integer|item|keystroke|linked\s+list|list|machine|number|picture|preposition|POSIX\s+file|real|record|reference(\s+form)?|RGB\s+color|script|sound|text\s+item|type\s+class|vector|writing\s+code(\s+info)?|zone|((international|styled(\s+(Clipboard|Unicode))?|Unicode)\s+)?text|((C|encoded|Pascal)\s+)?string)s?\b
+ name
+ support.class.built-in.applescript
+
+
+ match
+ (?ix)\b
+ ( (cubic\s+(centi)?|square\s+(kilo)?|centi|kilo)met(er|re)s
+ | square\s+(yards|feet|miles)|cubic\s+(yards|feet|inches)|miles|inches
+ | lit(re|er)s|gallons|quarts
+ | (kilo)?grams|ounces|pounds
+ | degrees\s+(Celsius|Fahrenheit|Kelvin)
+ )
+ \b
+ name
+ support.class.built-in.unit.applescript
+
+
+ match
+ \b(?i:seconds|minutes|hours|days)\b
+ name
+ support.class.built-in.time.applescript
+
+
+
+ comments
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.applescript
+
+
+ match
+ ^\s*(#!).*$\n?
+ name
+ comment.line.number-sign.applescript
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.applescript
+
+
+ match
+ (--).*$\n?
+ name
+ comment.line.double-dash.applescript
+
+
+ begin
+ \(\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.applescript
+
+
+ end
+ \*\)
+ name
+ comment.block.applescript
+ patterns
+
+
+ include
+ #comments.nested
+
+
+
+
+
+ comments.nested
+
+ patterns
+
+
+ begin
+ \(\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.applescript
+
+
+ end
+ \*\)
+ name
+ comment.block.applescript
+ patterns
+
+
+ include
+ #comments.nested
+
+
+
+
+
+ data-structures
+
+ patterns
+
+
+ begin
+ (\{)
+ captures
+
+ 1
+
+ name
+ punctuation.section.array.applescript
+
+
+ comment
+ We cannot necessarily distinguish "records" from "arrays", and so this could be either.
+ end
+ (\})
+ name
+ meta.array.applescript
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ constant.other.key.applescript
+
+ 2
+
+ name
+ meta.identifier.applescript
+
+ 3
+
+ name
+ punctuation.definition.identifier.applescript
+
+ 4
+
+ name
+ punctuation.definition.identifier.applescript
+
+ 5
+
+ name
+ punctuation.separator.key-value.applescript
+
+
+ match
+ (\w+|((\|)[^|\n]*(\|)))\s*(:)
+
+
+ match
+ :
+ name
+ punctuation.separator.key-value.applescript
+
+
+ match
+ ,
+ name
+ punctuation.separator.array.applescript
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ (?:(?<=application )|(?<=app ))(")
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.applescript
+
+
+ end
+ (")
+ name
+ string.quoted.double.application-name.applescript
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.applescript
+
+
+
+
+ begin
+ (")
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.applescript
+
+
+ end
+ (")
+ name
+ string.quoted.double.applescript
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.applescript
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.identifier.applescript
+
+ 2
+
+ name
+ punctuation.definition.identifier.applescript
+
+
+ match
+ (\|)[^|\n]*(\|)
+ name
+ meta.identifier.applescript
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.data.applescript
+
+ 2
+
+ name
+ support.class.built-in.applescript
+
+ 3
+
+ name
+ storage.type.utxt.applescript
+
+ 4
+
+ name
+ string.unquoted.data.applescript
+
+ 5
+
+ name
+ punctuation.definition.data.applescript
+
+ 6
+
+ name
+ keyword.operator.applescript
+
+ 7
+
+ name
+ support.class.built-in.applescript
+
+
+ match
+ («)(data) (utxt|utf8)([[:xdigit:]]*)(»)(?:\s+(as)\s+(?i:Unicode\s+text))?
+ name
+ constant.other.data.utxt.applescript
+
+
+ begin
+ («)(\w+)\b(?=\s)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.data.applescript
+
+ 2
+
+ name
+ support.class.built-in.applescript
+
+
+ end
+ (»)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.data.applescript
+
+
+ name
+ constant.other.data.raw.applescript
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.data.applescript
+
+ 2
+
+ name
+ punctuation.definition.data.applescript
+
+
+ match
+ («)[^»]*(»)
+ name
+ invalid.illegal.data.applescript
+
+
+
+ finder
+
+ patterns
+
+
+ match
+ \b(item|container|(computer|disk|trash)-object|disk|folder|((alias|application|document|internet location) )?file|clipping|package)s?\b
+ name
+ support.class.finder.items.applescript
+
+
+ match
+ \b((Finder|desktop|information|preferences|clipping) )windows?\b
+ name
+ support.class.finder.window-classes.applescript
+
+
+ match
+ \b(preferences|(icon|column|list) view options|(label|column|alias list)s?)\b
+ name
+ support.class.finder.type-definitions.applescript
+
+
+ match
+ \b(copy|find|sort|clean up|eject|empty( trash)|erase|reveal|update)\b
+ name
+ support.function.finder.items.applescript
+
+
+ match
+ \b(insertion location|product version|startup disk|desktop|trash|home|computer container|finder preferences)\b
+ name
+ support.constant.finder.applescript
+
+
+ match
+ \b(visible)\b
+ name
+ support.variable.finder.applescript
+
+
+
+ inline
+
+ patterns
+
+
+ include
+ #comments
+
+
+ include
+ #data-structures
+
+
+ include
+ #built-in
+
+
+ include
+ #standardadditions
+
+
+
+ itunes
+
+ patterns
+
+
+ match
+ \b(artwork|application|encoder|EQ preset|item|source|visual|(EQ |browser )?window|((audio CD|device|shared|URL|file) )?track|playlist window|((audio CD|device|radio tuner|library|folder|user) )?playlist)s?\b
+ name
+ support.class.itunes.applescript
+
+
+ match
+ \b(add|back track|convert|fast forward|(next|previous) track|pause|play(pause)?|refresh|resume|rewind|search|stop|update|eject|subscribe|update(Podcast|AllPodcasts)|download)\b
+ name
+ support.function.itunes.applescript
+
+
+ match
+ \b(current (playlist|stream (title|URL)|track)|player state)\b
+ name
+ support.constant.itunes.applescript
+
+
+ match
+ \b(current (encoder|EQ preset|visual)|EQ enabled|fixed indexing|full screen|mute|player position|sound volume|visuals enabled|visual size)\b
+ name
+ support.variable.itunes.applescript
+
+
+
+ standard-suite
+
+ patterns
+
+
+ match
+ \b(colors?|documents?|items?|windows?)\b
+ name
+ support.class.standard-suite.applescript
+
+
+ match
+ \b(close|count|delete|duplicate|exists|make|move|open|print|quit|save|activate|select|data size)\b
+ name
+ support.function.standard-suite.applescript
+
+
+ match
+ \b(name|frontmost|version)\b
+ name
+ support.constant.standard-suite.applescript
+
+
+ match
+ \b(selection)\b
+ name
+ support.variable.standard-suite.applescript
+
+
+ match
+ \b(attachments?|attribute runs?|characters?|paragraphs?|texts?|words?)\b
+ name
+ support.class.text-suite.applescript
+
+
+
+ standardadditions
+
+ patterns
+
+
+ match
+ \b((alert|dialog) reply)\b
+ name
+ support.class.standardadditions.user-interaction.applescript
+
+
+ match
+ \b(file information)\b
+ name
+ support.class.standardadditions.file.applescript
+
+
+ match
+ \b(POSIX files?|system information|volume settings)\b
+ name
+ support.class.standardadditions.miscellaneous.applescript
+
+
+ match
+ \b(URLs?|internet address(es)?|web pages?|FTP items?)\b
+ name
+ support.class.standardadditions.internet.applescript
+
+
+ match
+ \b(info for|list (disks|folder)|mount volume|path to( resource)?)\b
+ name
+ support.function.standardadditions.file.applescript
+
+
+ match
+ \b(beep|choose (application|color|file( name)?|folder|from list|remote application|URL)|delay|display (alert|dialog)|say)\b
+ name
+ support.function.standardadditions.user-interaction.applescript
+
+
+ match
+ \b(ASCII (character|number)|localized string|offset|summarize)\b
+ name
+ support.function.standardadditions.string.applescript
+
+
+ match
+ \b(set the clipboard to|the clipboard|clipboard info)\b
+ name
+ support.function.standardadditions.clipboard.applescript
+
+
+ match
+ \b(open for access|close access|read|write|get eof|set eof)\b
+ name
+ support.function.standardadditions.file-i-o.applescript
+
+
+ match
+ \b((load|store|run) script|scripting components)\b
+ name
+ support.function.standardadditions.scripting.applescript
+
+
+ match
+ \b(current date|do shell script|get volume settings|random number|round|set volume|system attribute|system info|time to GMT)\b
+ name
+ support.function.standardadditions.miscellaneous.applescript
+
+
+ match
+ \b(opening folder|(closing|moving) folder window for|adding folder items to|removing folder items from)\b
+ name
+ support.function.standardadditions.folder-actions.applescript
+
+
+ match
+ \b(open location|handle CGI request)\b
+ name
+ support.function.standardadditions.internet.applescript
+
+
+
+ system-events
+
+ patterns
+
+
+ match
+ \b(audio (data|file))\b
+ name
+ support.class.system-events.audio-file.applescript
+
+
+ match
+ \b(alias(es)?|(Classic|local|network|system|user) domain objects?|disk( item)?s?|domains?|file( package)?s?|folders?|items?)\b
+ name
+ support.class.system-events.disk-folder-file.applescript
+
+
+ match
+ \b(delete|open|move)\b
+ name
+ support.function.system-events.disk-folder-file.applescript
+
+
+ match
+ \b(folder actions?|scripts?)\b
+ name
+ support.class.system-events.folder-actions.applescript
+
+
+ match
+ \b(attach action to|attached scripts|edit action of|remove action from)\b
+ name
+ support.function.system-events.folder-actions.applescript
+
+
+ match
+ \b(movie data|movie file)\b
+ name
+ support.class.system-events.movie-file.applescript
+
+
+ match
+ \b(log out|restart|shut down|sleep)\b
+ name
+ support.function.system-events.power.applescript
+
+
+ match
+ \b(((application |desk accessory )?process|(check|combo )?box)(es)?|(action|attribute|browser|(busy|progress|relevance) indicator|color well|column|drawer|group|grow area|image|incrementor|list|menu( bar)?( item)?|(menu |pop up |radio )?button|outline|(radio|tab|splitter) group|row|scroll (area|bar)|sheet|slider|splitter|static text|table|text (area|field)|tool bar|UI element|window)s?)\b
+ name
+ support.class.system-events.processes.applescript
+
+
+ match
+ \b(click|key code|keystroke|perform|select)\b
+ name
+ support.function.system-events.processes.applescript
+
+
+ match
+ \b(property list (file|item))\b
+ name
+ support.class.system-events.property-list.applescript
+
+
+ match
+ \b(annotation|QuickTime (data|file)|track)s?\b
+ name
+ support.class.system-events.quicktime-file.applescript
+
+
+ match
+ \b((abort|begin|end) transaction)\b
+ name
+ support.function.system-events.system-events.applescript
+
+
+ match
+ \b(XML (attribute|data|element|file)s?)\b
+ name
+ support.class.system-events.xml.applescript
+
+
+ match
+ \b(print settings|users?|login items?)\b
+ name
+ support.class.sytem-events.other.applescript
+
+
+
+ textmate
+
+ patterns
+
+
+ match
+ \b(print settings)\b
+ name
+ support.class.textmate.applescript
+
+
+ match
+ \b(get url|insert|reload bundles)\b
+ name
+ support.function.textmate.applescript
+
+
+
+
+ scopeName
+ source.applescript
+ uuid
+ 777CF925-14B9-428E-B07B-17FAAB8FA27E
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Batch File.tmLanguage b/app/rcc/edbee/syntaxfiles/Batch File.tmLanguage
new file mode 100644
index 00000000..2a7752e5
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Batch File.tmLanguage
@@ -0,0 +1,111 @@
+
+
+
+
+ uuid
+ E07EC438-7B75-4437-8AA1-DA94C1E6EACC
+ patterns
+
+
+ name
+ keyword.command.dosbatch
+ match
+ \b(?i)(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|rem|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\b
+
+
+ name
+ keyword.control.statement.dosbatch
+ match
+ \b(?i)(?:goto|call|exit)\b
+
+
+ name
+ keyword.control.conditional.if.dosbatch
+ match
+ \b(?i)if\s+((not)\s+)(exist|defined|errorlevel|cmdextversion)\b
+
+
+ name
+ keyword.control.conditional.dosbatch
+ match
+ \b(?i)(?:if|else)\b
+
+
+ name
+ keyword.control.repeat.dosbatch
+ match
+ \b(?i)for\b
+
+
+ name
+ keyword.operator.dosbatch
+ match
+ \b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\b
+
+
+ captures
+
+ 1
+
+ name
+ keyword.command.rem.dosbatch
+
+
+ name
+ comment.line.rem.dosbatch
+ match
+ (?:^|\s)((?i)rem)(?:$|\s.*$)
+
+
+ name
+ comment.line.colons.dosbatch
+ match
+ \s*:\s*:.*$
+
+
+ begin
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.shell
+
+
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.shell
+
+
+ name
+ string.quoted.double.dosbatch
+ end
+ "
+
+
+ name
+ keyword.operator.pipe.dosbatch
+ match
+ [|]
+
+
+ name
+ keyword.operator.redirect.shell
+ match
+ &>|\d*>&\d*|\d*(>>|>|<)|\d*<&|\d*<>
+
+
+ name
+ Batch File
+ scopeName
+ source.dosbatch
+ fileTypes
+
+ bat
+
+
+
\ No newline at end of file
diff --git a/app/rcc/edbee/syntaxfiles/Bibtex.tmLanguage b/app/rcc/edbee/syntaxfiles/Bibtex.tmLanguage
new file mode 100644
index 00000000..211aedda
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Bibtex.tmLanguage
@@ -0,0 +1,406 @@
+
+
+
+
+ comment
+ Grammar based on description from http://artis.imag.fr/~Xavier.Decoret/resources/xdkbibtex/bibtex_summary.html#comment
+
+ TODO: Does not support @preamble
+
+ fileTypes
+
+ bib
+
+ foldingStartMarker
+ \@[a-zA-Z]+\s*[{(].+,
+ foldingStopMarker
+ ^\s*[)}]\s*$
+ name
+ BibTeX
+ patterns
+
+
+ begin
+ @Comment
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.comment.bibtex
+
+
+ end
+ $\n?
+ name
+ comment.line.at-sign.bibtex
+
+
+ begin
+ ((@)String)\s*(\{)\s*([a-zA-Z]*)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.string-constant.bibtex
+
+ 2
+
+ name
+ punctuation.definition.keyword.bibtex
+
+ 3
+
+ name
+ punctuation.section.string-constant.begin.bibtex
+
+ 4
+
+ name
+ variable.other.bibtex
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.string-constant.end.bibtex
+
+
+ name
+ meta.string-constant.braces.bibtex
+ patterns
+
+
+ include
+ #string_content
+
+
+
+
+ begin
+ ((@)String)\s*(\()\s*([a-zA-Z]*)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.string-constant.bibtex
+
+ 2
+
+ name
+ punctuation.definition.keyword.bibtex
+
+ 3
+
+ name
+ punctuation.section.string-constant.begin.bibtex
+
+ 4
+
+ name
+ variable.other.bibtex
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.string-constant.end.bibtex
+
+
+ name
+ meta.string-constant.parenthesis.bibtex
+ patterns
+
+
+ include
+ #string_content
+
+
+
+
+ begin
+ ((@)[a-zA-Z]+)\s*(\{)\s*([^\s,]*)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.entry-type.bibtex
+
+ 2
+
+ name
+ punctuation.definition.keyword.bibtex
+
+ 3
+
+ name
+ punctuation.section.entry.begin.bibtex
+
+ 4
+
+ name
+ entity.name.type.entry-key.bibtex
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.entry.end.bibtex
+
+
+ name
+ meta.entry.braces.bibtex
+ patterns
+
+
+ begin
+ ([a-zA-Z]+)\s*(\=)
+ beginCaptures
+
+ 1
+
+ name
+ string.unquoted.key.bibtex
+
+ 2
+
+ name
+ punctuation.separator.key-value.bibtex
+
+
+ end
+ (?=[,}])
+ name
+ meta.key-assignment.bibtex
+ patterns
+
+
+ include
+ #string_content
+
+
+ include
+ #integer
+
+
+
+
+
+
+ begin
+ ((@)[a-zA-Z]+)\s*(\()\s*([^\s,]*)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.entry-type.bibtex
+
+ 2
+
+ name
+ punctuation.definition.keyword.bibtex
+
+ 3
+
+ name
+ punctuation.section.entry.begin.bibtex
+
+ 4
+
+ name
+ entity.name.type.entry-key.bibtex
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.entry.end.bibtex
+
+
+ name
+ meta.entry.parenthesis.bibtex
+ patterns
+
+
+ begin
+ ([a-zA-Z]+)\s*(\=)
+ beginCaptures
+
+ 1
+
+ name
+ string.unquoted.key.bibtex
+
+ 2
+
+ name
+ punctuation.separator.key-value.bibtex
+
+
+ end
+ (?=[,)])
+ name
+ meta.key-assignment.bibtex
+ patterns
+
+
+ include
+ #string_content
+
+
+ include
+ #integer
+
+
+
+
+
+
+ begin
+ [^@\n]
+ end
+ (?=@)
+ name
+ comment.block.bibtex
+
+
+ repository
+
+ integer
+
+ match
+ \d+
+ name
+ constant.numeric.bibtex
+
+ nested_braces
+
+ begin
+ \{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.group.begin.bibtex
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.group.end.bibtex
+
+
+ patterns
+
+
+ include
+ #nested_braces
+
+
+
+ string_content
+
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.bibtex
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.bibtex
+
+
+ name
+ string.quoted.double.bibtex
+ patterns
+
+
+ include
+ #nested_braces
+
+
+
+
+ begin
+ \{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.bibtex
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.bibtex
+
+
+ name
+ string.quoted.other.braces.bibtex
+ patterns
+
+
+ match
+ @
+ name
+ invalid.illegal.at-sign.bibtex
+
+
+ include
+ #nested_braces
+
+
+
+
+
+
+ scopeName
+ text.bibtex
+ uuid
+ 47F30BA1-6B1D-11D9-9A60-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Build.tmLanguage b/app/rcc/edbee/syntaxfiles/Build.tmLanguage
new file mode 100644
index 00000000..55191b47
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Build.tmLanguage
@@ -0,0 +1,142 @@
+
+
+
+
+ fileTypes
+
+ build
+
+ foldingStartMarker
+ <[^!?/>]+|<!--
+ foldingStopMarker
+ />|</[^?>]+|-->
+ name
+ NAnt Build File
+ patterns
+
+
+ begin
+ <!--
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.nant
+
+
+ end
+ -->
+ name
+ comment.block.nant
+
+
+ begin
+ (</?)([-_a-zA-Z0-9:]+)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tag.nant
+
+ 2
+
+ name
+ entity.name.tag.nant
+
+
+ end
+ (/?>)
+ name
+ meta.tag.nant
+ patterns
+
+
+ match
+ ([a-zA-Z-]+)
+ name
+ entity.other.attribute-name.nant
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.nant
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.nant
+
+
+ name
+ string.quoted.double.nant
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.nant
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.nant
+
+
+ name
+ string.quoted.single.nant
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.nant
+
+ 3
+
+ name
+ punctuation.definition.constant.nant
+
+
+ match
+ (&)([a-zA-Z]+|#[0-9]+|#x[0-9a-fA-F]+)(;)
+ name
+ constant.character.entity.nant
+
+
+ match
+ &
+ name
+ invalid.illegal.bad-ampersand.nant
+
+
+ scopeName
+ source.nant-build
+ uuid
+ 1BA72668-707C-11D9-A928-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/C#.tmLanguage b/app/rcc/edbee/syntaxfiles/C#.tmLanguage
new file mode 100644
index 00000000..4d6bd9b9
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/C#.tmLanguage
@@ -0,0 +1,530 @@
+
+
+
+
+ fileTypes
+
+ cs
+
+ foldingStartMarker
+ ^\s*/\*|^(?![^{]*?//|[^{]*?/\*(?!.*?\*/.*?\{)).*?\{\s*($|//|/\*(?!.*?\*/.*\S))
+ foldingStopMarker
+ ^\s*\*/|^\s*\}
+ keyEquivalent
+ ^~C
+ name
+ C#
+ patterns
+
+
+ begin
+ ///
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.source.cs
+
+
+ end
+ $\n?
+ name
+ comment.block.documentation.source.cs
+ patterns
+
+
+ begin
+ (</?)(?:([-_a-zA-Z0-9]+)((:)))?([-_a-zA-Z0-9:]+)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tag.source.cs
+
+ 2
+
+ name
+ entity.name.tag.namespace.source.cs
+
+ 3
+
+ name
+ entity.name.tag.source.cs
+
+ 4
+
+ name
+ punctuation.separator.namespace.source.cs
+
+ 5
+
+ name
+ entity.name.tag.localname.source.cs
+
+
+ end
+ (/?>)
+ name
+ keyword.other.documentation.source.cs
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ entity.other.attribute-name.namespace.source.cs
+
+ 2
+
+ name
+ entity.other.attribute-name.source.cs
+
+ 3
+
+ name
+ punctuation.separator.namespace.source.cs
+
+ 4
+
+ name
+ entity.other.attribute-name.localname.source.cs
+
+
+ match
+ (?:([-_a-zA-Z0-9]+)((:)))?([_a-zA-Z-]+)=
+
+
+ include
+ #doubleQuotedString
+
+
+ include
+ #singleQuotedString
+
+
+
+
+
+
+ include
+ #comments
+
+
+ begin
+ (?x)^\s*
+((?:\b(?:new|public|protected|internal|private|abstract|sealed|static)\b\s)*)
+(class)\s+
+([A-Za-z_]\w+)\b
+ captures
+
+ 1
+
+ name
+ storage.modifier.source.cs
+
+ 2
+
+ name
+ storage.type.source.cs
+
+ 3
+
+ name
+ entity.name.type.class.source.cs
+
+
+ end
+ {
+ name
+ meta.definition.class.source.cs
+ patterns
+
+
+ include
+ #classInheritance
+
+
+
+
+
+
+ match
+ \b(true|false|null|this|base)\b
+ name
+ constant.language.source.cs
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b
+ name
+ constant.numeric.source.cs
+
+
+ match
+ \b(if|else|while|for|foreach|do|return|continue|break|switch|case|default|goto|throw|try|catch|finally|lock|yield)\b
+ name
+ keyword.control.source.cs
+
+
+ match
+ \b(new|is|checked|unchecked|typeof|sizeof|override|in|out|ref|readonly|params|stackalloc|as)\b
+ name
+ keyword.operator.source.cs
+
+
+ match
+ \b(event|delegate|explicit|implicit|in|set|get)\b
+ name
+ keyword.other.source.cs
+
+
+ match
+ \b(internal|public|protected|private|static|const|new|sealed|abstract|override|extern|unsafe|readonly|volatile|operator)\b
+ name
+ storage.modifier.source.cs
+
+
+ include
+ #doubleQuotedStringLiteral
+
+
+ include
+ #doubleQuotedString
+
+
+ include
+ #singleQuotedString
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.using.source.cs
+
+ 2
+
+ name
+ entity.name.type.package.source.cs
+
+
+ match
+ ^\s*(using)\s+([^ ;]*);
+ name
+ meta.keyword.using.source.cs
+
+
+ include
+ #builtinTypes
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.namespace.source.cs
+
+ 2
+
+ name
+ entity.name.type.namespace.source.cs
+
+
+ match
+ ^\s*(namespace)\s+([^ ]+)(?:\s*{)?$
+ name
+ meta.keyword.namespace.source.cs
+
+
+ captures
+
+ 2
+
+ name
+ keyword.control.import.source.cs
+
+
+ match
+ ^(#)\s*(if|else|elif|endif|define|undef|warning|error|line|region|endregion)\b
+ name
+ meta.preprocessor.source.cs
+
+
+ repository
+
+ builtinTypes
+
+ patterns
+
+
+ match
+ \b(bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|class|struct|enum|interface)\b
+ name
+ storage.type.source.cs
+
+
+
+ classInheritance
+
+ patterns
+
+
+ begin
+ :
+ end
+ (?={)
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.source.cs
+
+
+ match
+ \s*,?([A-Za-z_]\w*)\b
+
+
+
+
+
+ comments
+
+ patterns
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.source.cs
+
+
+ end
+ \*/\n?
+ name
+ comment.block.source.cs
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.source.cs
+
+
+ match
+ (//).*$\n?
+ name
+ comment.line.double-slash.source.cs
+
+
+
+ doubleQuotedString
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.source.cs
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.source.cs
+
+
+ name
+ string.quoted.double.source.cs
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.source.cs
+
+
+
+ doubleQuotedStringLiteral
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.source.cs
+
+
+ match
+ @"([^"]|"")*"
+ name
+ string.quoted.double.literal.source.cs
+
+ singleQuotedString
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.source.cs
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.source.cs
+
+
+ name
+ string.quoted.single.xml
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.source.cs
+
+
+
+ statementRemainder
+
+ patterns
+
+
+ begin
+ \(
+ end
+ (?=\))
+ name
+ meta.definition.param-list.source.cs
+ patterns
+
+
+ include
+ #builtinTypes
+
+
+
+
+
+
+ scopeName
+ source.cs
+ uuid
+ 1BA75B32-707C-11D9-A928-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/C++.tmLanguage b/app/rcc/edbee/syntaxfiles/C++.tmLanguage
new file mode 100644
index 00000000..e6647c1a
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/C++.tmLanguage
@@ -0,0 +1,491 @@
+
+
+
+
+ comment
+ I don't think anyone uses .hp. .cp tends to be paired with .h. (I could be wrong. :) -- chris
+ fileTypes
+
+ cpp
+ cc
+ cp
+ cxx
+ c++
+ C
+ h
+ hh
+ hpp
+ hxx
+ h++
+ inl
+ ipp
+
+ firstLineMatch
+ -\*- C\+\+ -\*-
+ foldingStartMarker
+ (?x)
+ /\*\*(?!\*)
+ |^(?![^{]*?//|[^{]*?/\*(?!.*?\*/.*?\{)).*?\{\s*($|//|/\*(?!.*?\*/.*\S))
+
+ foldingStopMarker
+ (?<!\*)\*\*/|^\s*\}
+ keyEquivalent
+ ^~C
+ name
+ C++
+ patterns
+
+
+ include
+ #special_block
+
+
+ include
+ source.c
+
+
+ match
+ \b(friend|explicit|virtual)\b
+ name
+ storage.modifier.c++
+
+
+ match
+ \b(private:|protected:|public:)
+ name
+ storage.modifier.c++
+
+
+ match
+ \b(catch|operator|try|throw|using)\b
+ name
+ keyword.control.c++
+
+
+ match
+ \bdelete\b(\s*\[\])?|\bnew\b(?!])
+ name
+ keyword.control.c++
+
+
+ comment
+ common C++ instance var naming idiom -- fMemberName
+ match
+ \b(f|m)[A-Z]\w*\b
+ name
+ variable.other.readwrite.member.c++
+
+
+ match
+ \b(this)\b
+ name
+ variable.language.c++
+
+
+ match
+ \btemplate\b\s*
+ name
+ storage.type.template.c++
+
+
+ match
+ \b(const_cast|dynamic_cast|reinterpret_cast|static_cast)\b\s*
+ name
+ keyword.operator.cast.c++
+
+
+ match
+ \b(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq)\b
+ name
+ keyword.operator.c++
+
+
+ match
+ \b(class|wchar_t)\b
+ name
+ storage.type.c++
+
+
+ match
+ \b(export|mutable|typename)\b
+ name
+ storage.modifier.c++
+
+
+ begin
+ (?x)
+ (?: ^ # begin-of-line
+ | (?: (?<!else|new|=) ) # or word + space before name
+ )
+ ((?:[A-Za-z_][A-Za-z0-9_]*::)*+~[A-Za-z_][A-Za-z0-9_]*) # actual name
+ \s*(\() # start bracket or end-of-line
+
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.c++
+
+ 2
+
+ name
+ punctuation.definition.parameters.c
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.c
+
+
+ name
+ meta.function.destructor.c++
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ (?x)
+ (?: ^ # begin-of-line
+ | (?: (?<!else|new|=) ) # or word + space before name
+ )
+ ((?:[A-Za-z_][A-Za-z0-9_]*::)*+~[A-Za-z_][A-Za-z0-9_]*) # actual name
+ \s*(\() # terminating semi-colon
+
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.c++
+
+ 2
+
+ name
+ punctuation.definition.parameters.c
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.c
+
+
+ name
+ meta.function.destructor.prototype.c++
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ repository
+
+ angle_brackets
+
+ begin
+ <
+ end
+ >
+ name
+ meta.angle-brackets.c++
+ patterns
+
+
+ include
+ #angle_brackets
+
+
+ include
+ $base
+
+
+
+ block
+
+ begin
+ \{
+ end
+ \}
+ name
+ meta.block.c++
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ support.function.any-method.c
+
+ 2
+
+ name
+ punctuation.definition.parameters.c
+
+
+ match
+ (?x)
+ (
+ (?!while|for|do|if|else|switch|catch|enumerate|return|r?iterate)(?: \b[A-Za-z_][A-Za-z0-9_]*+\b | :: )*+ # actual name
+ )
+ \s*(\()
+ name
+ meta.function-call.c
+
+
+ include
+ $base
+
+
+
+ constructor
+
+ patterns
+
+
+ begin
+ (?x)
+ (?: ^\s*) # begin-of-line
+ ((?!while|for|do|if|else|switch|catch|enumerate|r?iterate)[A-Za-z_][A-Za-z0-9_:]*) # actual name
+ \s*(\() # start bracket or end-of-line
+
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.c++
+
+ 2
+
+ name
+ punctuation.definition.parameters.c
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.c
+
+
+ name
+ meta.function.constructor.c++
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ (?x)
+ (:) # begin-of-line
+ ((?=\s*[A-Za-z_][A-Za-z0-9_:]* # actual name
+ \s*(\())) # start bracket or end-of-line
+
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.c
+
+
+ end
+ (?=\{)
+ name
+ meta.function.constructor.initializer-list.c++
+ patterns
+
+
+ include
+ $base
+
+
+
+
+
+ special_block
+
+ patterns
+
+
+ begin
+ \b(namespace)\s+([A-Za-z_][_A-Za-z0-9:]*\b)?+(?!\s*?(;|=|,))
+ end
+ (?<=\})
+ name
+ meta.namespace-block.c++
+ patterns
+
+
+ begin
+ \{
+ end
+ \}
+ patterns
+
+
+ include
+ #special_block
+
+
+ include
+ #constructor
+
+
+ include
+ $base
+
+
+
+
+
+
+ begin
+ \b(class|struct)\s+([_A-Za-z][_A-Za-z0-9]*\b)
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.c++
+
+ 2
+
+ name
+ entity.name.type.c++
+
+
+ end
+ (?<=\})|(?=(;|,|\(|\)|>|\[|\]))
+ name
+ meta.class-struct-block.c++
+ patterns
+
+
+ include
+ #angle_brackets
+
+
+ begin
+ (\{)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.scope.c++
+
+
+ end
+ (\})(\s*\n)?
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.invalid.c++
+
+ 2
+
+ name
+ invalid.illegal.you-forgot-semicolon.c++
+
+
+ patterns
+
+
+ include
+ #special_block
+
+
+ include
+ #constructor
+
+
+ include
+ $base
+
+
+
+
+ include
+ $base
+
+
+
+
+ begin
+ \b(extern)(?=\s*")
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.c++
+
+
+ end
+ (?<=\})|(?=\w)
+ name
+ meta.extern-block.c++
+ patterns
+
+
+ begin
+ \{
+ end
+ \}
+ patterns
+
+
+ include
+ #special_block
+
+
+ include
+ $base
+
+
+
+
+ include
+ $base
+
+
+
+
+
+
+ scopeName
+ source.c++
+ uuid
+ 26251B18-6B1D-11D9-AFDB-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/C.tmLanguage b/app/rcc/edbee/syntaxfiles/C.tmLanguage
new file mode 100644
index 00000000..925a8641
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/C.tmLanguage
@@ -0,0 +1,1126 @@
+
+
+
+
+ fileTypes
+
+ c
+ h
+
+ firstLineMatch
+ -[*]-( Mode:)? C -[*]-
+ foldingStartMarker
+ (?x)
+ /\*\*(?!\*)
+ |^(?![^{]*?//|[^{]*?/\*(?!.*?\*/.*?\{)).*?\{\s*($|//|/\*(?!.*?\*/.*\S))
+
+ foldingStopMarker
+ (?<!\*)\*\*/|^\s*\}
+ keyEquivalent
+ ^~C
+ name
+ C
+ patterns
+
+
+ include
+ #preprocessor-rule-enabled
+
+
+ include
+ #preprocessor-rule-disabled
+
+
+ include
+ #preprocessor-rule-other
+
+
+ include
+ #comments
+
+
+ match
+ \b(break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while)\b
+ name
+ keyword.control.c
+
+
+ match
+ \b(asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void)\b
+ name
+ storage.type.c
+
+
+ match
+ \b(const|extern|register|restrict|static|volatile|inline)\b
+ name
+ storage.modifier.c
+
+
+ comment
+ common C constant naming idiom -- kConstantVariable
+ match
+ \bk[A-Z]\w*\b
+ name
+ constant.other.variable.mac-classic.c
+
+
+ match
+ \bg[A-Z]\w*\b
+ name
+ variable.other.readwrite.global.mac-classic.c
+
+
+ match
+ \bs[A-Z]\w*\b
+ name
+ variable.other.readwrite.static.mac-classic.c
+
+
+ match
+ \b(NULL|true|false|TRUE|FALSE)\b
+ name
+ constant.language.c
+
+
+ include
+ #sizeof
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b
+ name
+ constant.numeric.c
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.c
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.c
+
+
+ name
+ string.quoted.double.c
+ patterns
+
+
+ include
+ #string_escaped_char
+
+
+ include
+ #string_placeholder
+
+
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.c
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.c
+
+
+ name
+ string.quoted.single.c
+ patterns
+
+
+ include
+ #string_escaped_char
+
+
+
+
+ begin
+ (?x)
+ ^\s*\#\s*(define)\s+ # define
+ ((?<id>[a-zA-Z_][a-zA-Z0-9_]*)) # macro name
+ (?: # and optionally:
+ (\() # an open parenthesis
+ (
+ \s* \g<id> \s* # first argument
+ ((,) \s* \g<id> \s*)* # additional arguments
+ (?:\.\.\.)? # varargs ellipsis?
+ )
+ (\)) # a close parenthesis
+ )?
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.import.define.c
+
+ 2
+
+ name
+ entity.name.function.preprocessor.c
+
+ 4
+
+ name
+ punctuation.definition.parameters.c
+
+ 5
+
+ name
+ variable.parameter.preprocessor.c
+
+ 7
+
+ name
+ punctuation.separator.parameters.c
+
+ 8
+
+ name
+ punctuation.definition.parameters.c
+
+
+ end
+ (?=(?://|/\*))|$
+ name
+ meta.preprocessor.macro.c
+ patterns
+
+
+ match
+ (?>\\\s*\n)
+ name
+ punctuation.separator.continuation.c
+
+
+ include
+ $base
+
+
+
+
+ begin
+ ^\s*#\s*(error|warning)\b
+ captures
+
+ 1
+
+ name
+ keyword.control.import.error.c
+
+
+ end
+ $
+ name
+ meta.preprocessor.diagnostic.c
+ patterns
+
+
+ match
+ (?>\\\s*\n)
+ name
+ punctuation.separator.continuation.c
+
+
+
+
+ begin
+ ^\s*#\s*(include|import)\b\s+
+ captures
+
+ 1
+
+ name
+ keyword.control.import.include.c
+
+
+ end
+ (?=(?://|/\*))|$
+ name
+ meta.preprocessor.c.include
+ patterns
+
+
+ match
+ (?>\\\s*\n)
+ name
+ punctuation.separator.continuation.c
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.c
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.c
+
+
+ name
+ string.quoted.double.include.c
+
+
+ begin
+ <
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.c
+
+
+ end
+ >
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.c
+
+
+ name
+ string.quoted.other.lt-gt.include.c
+
+
+
+
+ include
+ #pragma-mark
+
+
+ begin
+ ^\s*#\s*(define|defined|elif|else|if|ifdef|ifndef|line|pragma|undef)\b
+ captures
+
+ 1
+
+ name
+ keyword.control.import.c
+
+
+ end
+ (?=(?://|/\*))|$
+ name
+ meta.preprocessor.c
+ patterns
+
+
+ match
+ (?>\\\s*\n)
+ name
+ punctuation.separator.continuation.c
+
+
+
+
+ match
+ \b(u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t)\b
+ name
+ support.type.sys-types.c
+
+
+ match
+ \b(pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t)\b
+ name
+ support.type.pthread.c
+
+
+ match
+ \b(int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t)\b
+ name
+ support.type.stdint.c
+
+
+ match
+ \b(noErr|kNilOptions|kInvalidID|kVariableLengthArray)\b
+ name
+ support.constant.mac-classic.c
+
+
+ match
+ \b(AbsoluteTime|Boolean|Byte|ByteCount|ByteOffset|BytePtr|CompTimeValue|ConstLogicalAddress|ConstStrFileNameParam|ConstStringPtr|Duration|Fixed|FixedPtr|Float32|Float32Point|Float64|Float80|Float96|FourCharCode|Fract|FractPtr|Handle|ItemCount|LogicalAddress|OptionBits|OSErr|OSStatus|OSType|OSTypePtr|PhysicalAddress|ProcessSerialNumber|ProcessSerialNumberPtr|ProcHandle|Ptr|ResType|ResTypePtr|ShortFixed|ShortFixedPtr|SignedByte|SInt16|SInt32|SInt64|SInt8|Size|StrFileName|StringHandle|StringPtr|TimeBase|TimeRecord|TimeScale|TimeValue|TimeValue64|UInt16|UInt32|UInt64|UInt8|UniChar|UniCharCount|UniCharCountPtr|UniCharPtr|UnicodeScalarValue|UniversalProcHandle|UniversalProcPtr|UnsignedFixed|UnsignedFixedPtr|UnsignedWide|UTF16Char|UTF32Char|UTF8Char)\b
+ name
+ support.type.mac-classic.c
+
+
+ include
+ #block
+
+
+ begin
+ (?x)
+ (?: ^ # begin-of-line
+ |
+ (?: (?= \s ) (?<!else|new|return) (?<=\w) # or word + space before name
+ | (?= \s*[A-Za-z_] ) (?<!&&) (?<=[*&>]) # or type modifier before name
+ )
+ )
+ (\s*) (?!(while|for|do|if|else|switch|catch|enumerate|return|r?iterate)\s*\()
+ (
+ (?: [A-Za-z_][A-Za-z0-9_]*+ | :: )++ | # actual name
+ (?: (?<=operator) (?: [-*&<>=+!]+ | \(\) | \[\] ) ) # if it is a C++ operator
+ )
+ \s*(?=\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.whitespace.function.leading.c
+
+ 3
+
+ name
+ entity.name.function.c
+
+ 4
+
+ name
+ punctuation.definition.parameters.c
+
+
+ end
+ (?<=\})|(?=#)|(;)
+ name
+ meta.function.c
+ patterns
+
+
+ include
+ #comments
+
+
+ include
+ #parens
+
+
+ match
+ \bconst\b
+ name
+ storage.modifier.c
+
+
+ include
+ #block
+
+
+
+
+ repository
+
+ access
+
+ match
+ \.[a-zA-Z_][a-zA-Z_0-9]*\b(?!\s*\()
+ name
+ variable.other.dot-access.c
+
+ block
+
+ begin
+ \{
+ end
+ \}
+ name
+ meta.block.c
+ patterns
+
+
+ include
+ #block_innards
+
+
+
+ block_innards
+
+ patterns
+
+
+ include
+ #preprocessor-rule-enabled-block
+
+
+ include
+ #preprocessor-rule-disabled-block
+
+
+ include
+ #preprocessor-rule-other-block
+
+
+ include
+ #sizeof
+
+
+ include
+ #access
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.whitespace.support.function.leading.c
+
+ 2
+
+ name
+ support.function.C99.c
+
+
+ match
+ (\s*)\b(hypot(f|l)?|s(scanf|ystem|nprintf|ca(nf|lb(n(f|l)?|ln(f|l)?))|i(n(h(f|l)?|f|l)?|gn(al|bit))|tr(s(tr|pn)|nc(py|at|mp)|c(spn|hr|oll|py|at|mp)|to(imax|d|u(l(l)?|max)|k|f|l(d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(jmp|vbuf|locale|buf)|qrt(f|l)?|w(scanf|printf)|rand)|n(e(arbyint(f|l)?|xt(toward(f|l)?|after(f|l)?))|an(f|l)?)|c(s(in(h(f|l)?|f|l)?|qrt(f|l)?)|cos(h(f)?|f|l)?|imag(f|l)?|t(ime|an(h(f|l)?|f|l)?)|o(s(h(f|l)?|f|l)?|nj(f|l)?|pysign(f|l)?)|p(ow(f|l)?|roj(f|l)?)|e(il(f|l)?|xp(f|l)?)|l(o(ck|g(f|l)?)|earerr)|a(sin(h(f|l)?|f|l)?|cos(h(f|l)?|f|l)?|tan(h(f|l)?|f|l)?|lloc|rg(f|l)?|bs(f|l)?)|real(f|l)?|brt(f|l)?)|t(ime|o(upper|lower)|an(h(f|l)?|f|l)?|runc(f|l)?|gamma(f|l)?|mp(nam|file))|i(s(space|n(ormal|an)|cntrl|inf|digit|u(nordered|pper)|p(unct|rint)|finite|w(space|c(ntrl|type)|digit|upper|p(unct|rint)|lower|al(num|pha)|graph|xdigit|blank)|l(ower|ess(equal|greater)?)|al(num|pha)|gr(eater(equal)?|aph)|xdigit|blank)|logb(f|l)?|max(div|abs))|di(v|fftime)|_Exit|unget(c|wc)|p(ow(f|l)?|ut(s|c(har)?|wc(har)?)|error|rintf)|e(rf(c(f|l)?|f|l)?|x(it|p(2(f|l)?|f|l|m1(f|l)?)?))|v(s(scanf|nprintf|canf|printf|w(scanf|printf))|printf|f(scanf|printf|w(scanf|printf))|w(scanf|printf)|a_(start|copy|end|arg))|qsort|f(s(canf|e(tpos|ek))|close|tell|open|dim(f|l)?|p(classify|ut(s|c|w(s|c))|rintf)|e(holdexcept|set(e(nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(aiseexcept|ror)|get(e(nv|xceptflag)|round))|flush|w(scanf|ide|printf|rite)|loor(f|l)?|abs(f|l)?|get(s|c|pos|w(s|c))|re(open|e|ad|xp(f|l)?)|m(in(f|l)?|od(f|l)?|a(f|l|x(f|l)?)?))|l(d(iv|exp(f|l)?)|o(ngjmp|cal(time|econv)|g(1(p(f|l)?|0(f|l)?)|2(f|l)?|f|l|b(f|l)?)?)|abs|l(div|abs|r(int(f|l)?|ound(f|l)?))|r(int(f|l)?|ound(f|l)?)|gamma(f|l)?)|w(scanf|c(s(s(tr|pn)|nc(py|at|mp)|c(spn|hr|oll|py|at|mp)|to(imax|d|u(l(l)?|max)|k|f|l(d|l)?|mbs)|pbrk|ftime|len|r(chr|tombs)|xfrm)|to(b|mb)|rtomb)|printf|mem(set|c(hr|py|mp)|move))|a(s(sert|ctime|in(h(f|l)?|f|l)?)|cos(h(f|l)?|f|l)?|t(o(i|f|l(l)?)|exit|an(h(f|l)?|2(f|l)?|f|l)?)|b(s|ort))|g(et(s|c(har)?|env|wc(har)?)|mtime)|r(int(f|l)?|ound(f|l)?|e(name|alloc|wind|m(ove|quo(f|l)?|ainder(f|l)?))|a(nd|ise))|b(search|towc)|m(odf(f|l)?|em(set|c(hr|py|mp)|move)|ktime|alloc|b(s(init|towcs|rtowcs)|towc|len|r(towc|len))))\b
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.whitespace.function-call.leading.c
+
+ 2
+
+ name
+ support.function.any-method.c
+
+ 3
+
+ name
+ punctuation.definition.parameters.c
+
+
+ match
+ (?x) (?: (?= \s ) (?:(?<=else|new|return) | (?<!\w)) (\s+))?
+ (\b
+ (?!(while|for|do|if|else|switch|catch|enumerate|return|r?iterate)\s*\()(?:(?!NS)[A-Za-z_][A-Za-z0-9_]*+\b | :: )++ # actual name
+ )
+ \s*(\()
+ name
+ meta.function-call.c
+
+
+ captures
+
+ 1
+
+ name
+ variable.other.c
+
+ 2
+
+ name
+ punctuation.definition.parameters.c
+
+
+ match
+ (?x)
+ (?x)
+ (?:
+ (?: (?= \s ) (?<!else|new|return) (?<=\w)\s+ # or word + space before name
+ )
+ )
+ (
+ (?: [A-Za-z_][A-Za-z0-9_]*+ | :: )++ | # actual name
+ (?: (?<=operator) (?: [-*&<>=+!]+ | \(\) | \[\] ) )? # if it is a C++ operator
+ )
+ \s*(\()
+ name
+ meta.initialization.c
+
+
+ include
+ #block
+
+
+ include
+ $base
+
+
+
+ comments
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ meta.toc-list.banner.block.c
+
+
+ match
+ ^/\* =(\s*.*?)\s*= \*/$\n?
+ name
+ comment.block.c
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.c
+
+
+ end
+ \*/
+ name
+ comment.block.c
+
+
+ match
+ \*/.*\n
+ name
+ invalid.illegal.stray-comment-end.c
+
+
+ captures
+
+ 1
+
+ name
+ meta.toc-list.banner.line.c
+
+
+ match
+ ^// =(\s*.*?)\s*=\s*$\n?
+ name
+ comment.line.banner.c++
+
+
+ begin
+ //
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.comment.c
+
+
+ end
+ $\n?
+ name
+ comment.line.double-slash.c++
+ patterns
+
+
+ match
+ (?>\\\s*\n)
+ name
+ punctuation.separator.continuation.c++
+
+
+
+
+
+ disabled
+
+ begin
+ ^\s*#\s*if(n?def)?\b.*$
+ comment
+ eat nested preprocessor if(def)s
+ end
+ ^\s*#\s*endif\b.*$
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+ parens
+
+ begin
+ \(
+ end
+ \)
+ name
+ meta.parens.c
+ patterns
+
+
+ include
+ $base
+
+
+
+ pragma-mark
+
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.pragma.c
+
+ 3
+
+ name
+ meta.toc-list.pragma-mark.c
+
+
+ match
+ ^\s*(#\s*(pragma\s+mark)\s+(.*))
+ name
+ meta.section
+
+ preprocessor-rule-disabled
+
+ begin
+ ^\s*(#(if)\s+(0)\b).*
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.if.c
+
+ 3
+
+ name
+ constant.numeric.preprocessor.c
+
+
+ end
+ ^\s*(#\s*(endif)\b)
+ patterns
+
+
+ begin
+ ^\s*(#\s*(else)\b)
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.else.c
+
+
+ end
+ (?=^\s*#\s*endif\b.*$)
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+
+ end
+ (?=^\s*#\s*(else|endif)\b.*$)
+ name
+ comment.block.preprocessor.if-branch
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+
+
+ preprocessor-rule-disabled-block
+
+ begin
+ ^\s*(#(if)\s+(0)\b).*
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.if.c
+
+ 3
+
+ name
+ constant.numeric.preprocessor.c
+
+
+ end
+ ^\s*(#\s*(endif)\b)
+ patterns
+
+
+ begin
+ ^\s*(#\s*(else)\b)
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.else.c
+
+
+ end
+ (?=^\s*#\s*endif\b.*$)
+ patterns
+
+
+ include
+ #block_innards
+
+
+
+
+ begin
+
+ end
+ (?=^\s*#\s*(else|endif)\b.*$)
+ name
+ comment.block.preprocessor.if-branch.in-block
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+
+
+ preprocessor-rule-enabled
+
+ begin
+ ^\s*(#(if)\s+(0*1)\b)
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.if.c
+
+ 3
+
+ name
+ constant.numeric.preprocessor.c
+
+
+ end
+ ^\s*(#\s*(endif)\b)
+ patterns
+
+
+ begin
+ ^\s*(#\s*(else)\b).*
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.else.c
+
+
+ contentName
+ comment.block.preprocessor.else-branch
+ end
+ (?=^\s*#\s*endif\b.*$)
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+
+ begin
+
+ end
+ (?=^\s*#\s*(else|endif)\b.*$)
+ patterns
+
+
+ include
+ $base
+
+
+
+
+
+ preprocessor-rule-enabled-block
+
+ begin
+ ^\s*(#(if)\s+(0*1)\b)
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.if.c
+
+ 3
+
+ name
+ constant.numeric.preprocessor.c
+
+
+ end
+ ^\s*(#\s*(endif)\b)
+ patterns
+
+
+ begin
+ ^\s*(#\s*(else)\b).*
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.else.c
+
+
+ contentName
+ comment.block.preprocessor.else-branch.in-block
+ end
+ (?=^\s*#\s*endif\b.*$)
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+
+ begin
+
+ end
+ (?=^\s*#\s*(else|endif)\b.*$)
+ patterns
+
+
+ include
+ #block_innards
+
+
+
+
+
+ preprocessor-rule-other
+
+ begin
+ ^\s*(#\s*(if(n?def)?)\b.*?(?:(?=(?://|/\*))|$))
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.c
+
+
+ end
+ ^\s*(#\s*(endif)\b).*$
+ patterns
+
+
+ include
+ $base
+
+
+
+ preprocessor-rule-other-block
+
+ begin
+ ^\s*(#\s*(if(n?def)?)\b.*?(?:(?=(?://|/\*))|$))
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.c
+
+
+ end
+ ^\s*(#\s*(endif)\b).*$
+ patterns
+
+
+ include
+ #block_innards
+
+
+
+ sizeof
+
+ match
+ \b(sizeof)\b
+ name
+ keyword.operator.sizeof.c
+
+ string_escaped_char
+
+ patterns
+
+
+ match
+ \\(\\|[abefnprtv'"?]|[0-3]\d{,2}|[4-7]\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8})
+ name
+ constant.character.escape.c
+
+
+ match
+ \\.
+ name
+ invalid.illegal.unknown-escape.c
+
+
+
+ string_placeholder
+
+ patterns
+
+
+ match
+ (?x)%
+ (\d+\$)? # field (argument #)
+ [#0\- +']* # flags
+ [,;:_]? # separator character (AltiVec)
+ ((-?\d+)|\*(-?\d+\$)?)? # minimum field width
+ (\.((-?\d+)|\*(-?\d+\$)?)?)? # precision
+ (hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier
+ [diouxXDOUeEfFgGaACcSspn%] # conversion type
+
+ name
+ constant.other.placeholder.c
+
+
+ match
+ %
+ name
+ invalid.illegal.placeholder.c
+
+
+
+
+ scopeName
+ source.c
+ uuid
+ 25066DC2-6B1D-11D9-9D5B-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/CSS.tmLanguage b/app/rcc/edbee/syntaxfiles/CSS.tmLanguage
new file mode 100644
index 00000000..926773cd
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/CSS.tmLanguage
@@ -0,0 +1,1010 @@
+
+
+
+
+ comment
+
+ fileTypes
+
+ css
+ css.erb
+
+ foldingStartMarker
+ /\*\*(?!\*)|\{\s*($|/\*(?!.*?\*/.*\S))
+ foldingStopMarker
+ (?<!\*)\*\*/|^\s*\}
+ keyEquivalent
+ ^~C
+ name
+ CSS
+ patterns
+
+
+ include
+ #comment-block
+
+
+ include
+ #selector
+
+
+ begin
+ \s*((@)charset\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.charset.css
+
+ 2
+
+ name
+ punctuation.definition.keyword.css
+
+
+ end
+ \s*((?=;|$))
+ name
+ meta.at-rule.charset.css
+ patterns
+
+
+ include
+ #string-double
+
+
+ include
+ #string-single
+
+
+
+
+ begin
+ \s*((@)import\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.import.css
+
+ 2
+
+ name
+ punctuation.definition.keyword.css
+
+
+ end
+ \s*((?=;|\}))
+ name
+ meta.at-rule.import.css
+ patterns
+
+
+ include
+ #string-double
+
+
+ include
+ #string-single
+
+
+ begin
+ \s*(url)\s*(\()\s*
+ beginCaptures
+
+ 1
+
+ name
+ support.function.url.css
+
+ 2
+
+ name
+ punctuation.section.function.css
+
+
+ end
+ \s*(\))\s*
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.function.css
+
+
+ patterns
+
+
+ match
+ [^'") \t]+
+ name
+ variable.parameter.url.css
+
+
+ include
+ #string-single
+
+
+ include
+ #string-double
+
+
+
+
+ include
+ #media-query-list
+
+
+
+
+ begin
+ ^\s*((@)font-face)\s*(?=\{)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.at-rule.font-face.css
+
+ 2
+
+ name
+ punctuation.definition.keyword.css
+
+
+ end
+ \s*(\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.property-list.css
+
+
+ name
+ meta.at-rule.font-face.css
+ patterns
+
+
+ include
+ #rule-list
+
+
+
+
+ begin
+ (?=^\s*@media\s*.*?\{)
+ end
+ \s*(\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.property-list.css
+
+
+ patterns
+
+
+ begin
+ ^\s*((@)media)(?=.*?\{)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.at-rule.media.css
+
+ 2
+
+ name
+ punctuation.definition.keyword.css
+
+ 3
+
+ name
+ support.constant.media.css
+
+
+ end
+ \s*(?=\{)
+ name
+ meta.at-rule.media.css
+ patterns
+
+
+ include
+ #media-query-list
+
+
+
+
+ begin
+ \s*(\{)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.property-list.css
+
+
+ end
+ (?=\})
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+
+ begin
+ (?=\{)
+ end
+ \}
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.property-list.css
+
+
+ patterns
+
+
+ include
+ #rule-list
+
+
+
+
+ repository
+
+ color-values
+
+ patterns
+
+
+ comment
+ http://www.w3.org/TR/CSS21/syndata.html#value-def-color
+ match
+ \b(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)\b
+ name
+ support.constant.color.w3c-standard-color-name.css
+
+
+ comment
+ These colours are mostly recognised but will not validate. ref: http://www.w3schools.com/css/css_colornames.asp
+ match
+ \b(aliceblue|antiquewhite|aquamarine|azure|beige|bisque|blanchedalmond|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|gainsboro|ghostwhite|gold|goldenrod|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|limegreen|linen|magenta|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|oldlace|olivedrab|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|thistle|tomato|turquoise|violet|wheat|whitesmoke|yellowgreen)\b
+ name
+ invalid.deprecated.color.w3c-non-standard-color-name.css
+
+
+ begin
+ (hsla?|rgba?)\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ support.function.misc.css
+
+ 2
+
+ name
+ punctuation.section.function.css
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.function.css
+
+
+ patterns
+
+
+ match
+ (?x)\b
+ (0*((1?[0-9]{1,2})|(2([0-4][0-9]|5[0-5])))\s*,\s*){2}
+ (0*((1?[0-9]{1,2})|(2([0-4][0-9]|5[0-5])))\b)
+ (\s*,\s*((0?\.[0-9]+)|[0-1]))?
+
+ name
+ constant.other.color.rgb-value.css
+
+
+ match
+ \b([0-9]{1,2}|100)\s*%,\s*([0-9]{1,2}|100)\s*%,\s*([0-9]{1,2}|100)\s*%
+ name
+ constant.other.color.rgb-percentage.css
+
+
+ include
+ #numeric-values
+
+
+
+
+
+ comment-block
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.css
+
+
+ end
+ \*/
+ name
+ comment.block.css
+
+ media-query
+
+ begin
+ (?i)\s*(only|not)?\s*(all|aural|braille|embossed|handheld|print|projection|screen|tty|tv)?
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.logic.media.css
+
+ 2
+
+ name
+ support.constant.media.css
+
+
+ end
+ \s*(?:(,)|(?=[{;]))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.arbitrary-repitition.css
+
+
+ patterns
+
+
+ begin
+ \s*(and)?\s*(\()\s*
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.logic.media.css
+
+
+ end
+ \)
+ patterns
+
+
+ begin
+ (?x)
+ (
+ ((min|max)-)?
+ (
+ ((device-)?(height|width|aspect-ratio))|
+ (color(-index)?)|monochrome|resolution
+ )
+ )|grid|scan|orientation
+ \s*(?=[:)])
+ beginCaptures
+
+ 0
+
+ name
+ support.type.property-name.media.css
+
+
+ end
+ (:)|(?=\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.key-value.css
+
+
+
+
+ match
+ \b(portrait|landscape|progressive|interlace)
+ name
+ support.constant.property-value.css
+
+
+ captures
+
+ 1
+
+ name
+ constant.numeric.css
+
+ 2
+
+ name
+ keyword.operator.arithmetic.css
+
+ 3
+
+ name
+ constant.numeric.css
+
+
+ match
+ \s*(\d+)(/)(\d+)
+
+
+ include
+ #numeric-values
+
+
+
+
+
+ media-query-list
+
+ begin
+ \s*(?=[^{;])
+ end
+ \s*(?=[{;])
+ patterns
+
+
+ include
+ #media-query
+
+
+
+ numeric-values
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.css
+
+
+ match
+ (#)([0-9a-fA-F]{3}|[0-9a-fA-F]{6})\b
+ name
+ constant.other.color.rgb-value.css
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.unit.css
+
+
+ match
+ (?x)
+ (?:-|\+)?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+))
+ ((?:px|pt|ch|cm|mm|in|r?em|ex|pc|deg|g?rad|dpi|dpcm|s)\b|%)?
+
+ name
+ constant.numeric.css
+
+
+
+ property-values
+
+ patterns
+
+
+ match
+ \b(absolute|all(-scroll)?|always|armenian|auto|avoid|baseline|below|bidi-override|block|bold|bolder|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|geometricPrecision|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|optimize(Legibility|Quality|Speed)|outset|outside|overline|pointer|pre(-(wrap|line))?|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|sub|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical(-(ideographic|text))?|visible(Painted|Fill|Stroke)?|w-resize|wait|whitespace|zero|smaller|larger|((xx?-)?(small|large))|painted|fill|stroke)\b
+ name
+ support.constant.property-value.css
+
+
+ match
+ (\b(?i:arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace)\b)
+ name
+ support.constant.font-name.css
+
+
+ include
+ #numeric-values
+
+
+ include
+ #color-values
+
+
+ include
+ #string-double
+
+
+ include
+ #string-single
+
+
+ begin
+ (rect)\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ support.function.misc.css
+
+ 2
+
+ name
+ punctuation.section.function.css
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.function.css
+
+
+ patterns
+
+
+ include
+ #numeric-values
+
+
+
+
+ begin
+ (format|local|url|attr|counter|counters)\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ support.function.misc.css
+
+ 2
+
+ name
+ punctuation.section.function.css
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.function.css
+
+
+ patterns
+
+
+ include
+ #string-single
+
+
+ include
+ #string-double
+
+
+ match
+ [^'") \t]+
+ name
+ variable.parameter.misc.css
+
+
+
+
+ match
+ \!\s*important
+ name
+ keyword.other.important.css
+
+
+
+ rule-list
+
+ begin
+ \{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.property-list.css
+
+
+ end
+ (?=\s*\})
+ name
+ meta.property-list.css
+ patterns
+
+
+ include
+ #comment-block
+
+
+ begin
+ (?<![-a-z])(?=[-a-z])
+ end
+ $|(?![-a-z])
+ name
+ meta.property-name.css
+ patterns
+
+
+ match
+ \b(azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|box-shadow|border-radius|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|image-rendering|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|-moz-border-radius|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow(-[xy])?|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|pointer-events|position|quotes|resize|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|src|stress|table-layout|text-(align|decoration|indent|rendering|shadow|transform)|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-(spacing|wrap)|zoom|z-index)\b
+ name
+ support.type.property-name.css
+
+
+
+
+ begin
+ (:)\s*
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.separator.key-value.css
+
+
+ end
+ \s*(;|(?=\}))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.terminator.rule.css
+
+
+ name
+ meta.property-value.css
+ patterns
+
+
+ include
+ #property-values
+
+
+
+
+
+ selector
+
+ begin
+ \s*(?=[:.*#a-zA-Z])
+ end
+ (?=[/@{)])
+ name
+ meta.selector.css
+ patterns
+
+
+ match
+ \b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\b
+ name
+ entity.name.tag.css
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (\.)[a-zA-Z0-9_-]+
+ name
+ entity.other.attribute-name.class.css
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (#)[a-zA-Z][a-zA-Z0-9_-]*
+ name
+ entity.other.attribute-name.id.css
+
+
+ match
+ \*
+ name
+ entity.name.tag.wildcard.css
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (:+)(after|before|first-letter|first-line|selection)\b
+ name
+ entity.other.attribute-name.pseudo-element.css
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (:)((first|last)-child|(first|last|only)-of-type|empty|root|target|first|left|right)\b
+ name
+ entity.other.attribute-name.pseudo-class.css
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (:)(checked|enabled|default|disabled|indeterminate|invalid|optional|required|valid)\b
+ name
+ entity.other.attribute-name.pseudo-class.ui-state.css
+
+
+ begin
+ ((:)not)(\()
+ beginCaptures
+
+ 1
+
+ name
+ entity.other.attribute-name.pseudo-class.css
+
+ 2
+
+ name
+ punctuation.definition.entity.css
+
+ 3
+
+ name
+ punctuation.section.function.css
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.function.css
+
+
+ patterns
+
+
+ include
+ #selector
+
+
+
+
+ captures
+
+ 1
+
+ name
+ entity.other.attribute-name.pseudo-class.css
+
+ 2
+
+ name
+ punctuation.definition.entity.css
+
+ 3
+
+ name
+ punctuation.section.function.css
+
+ 4
+
+ name
+ constant.numeric.css
+
+ 5
+
+ name
+ punctuation.section.function.css
+
+
+ match
+ ((:)nth-(?:(?:last-)?child|(?:last-)?of-type))(\()(\-?(?:\d+n?|n)(?:\+\d+)?|even|odd)(\))
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (:)(active|hover|link|visited|focus)\b
+ name
+ entity.other.attribute-name.pseudo-class.css
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+ 2
+
+ name
+ entity.other.attribute-name.attribute.css
+
+ 3
+
+ name
+ punctuation.separator.operator.css
+
+ 4
+
+ name
+ string.unquoted.attribute-value.css
+
+ 5
+
+ name
+ string.quoted.double.attribute-value.css
+
+ 6
+
+ name
+ punctuation.definition.string.begin.css
+
+ 7
+
+ name
+ punctuation.definition.string.end.css
+
+
+ match
+ (?i)(\[)\s*(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)(?:\s*([~|^$*]?=)\s*(?:(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)|((?>(['"])(?:[^\\]|\\.)*?(\6)))))?\s*(\])
+ name
+ meta.attribute-selector.css
+
+
+
+ string-double
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.css
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.css
+
+
+ name
+ string.quoted.double.css
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.css
+
+
+
+ string-single
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.css
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.css
+
+
+ name
+ string.quoted.single.css
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.css
+
+
+
+
+ scopeName
+ source.css
+ uuid
+ 69AA0917-B7BB-11D9-A7E2-000D93C8BE28
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Clojure.tmLanguage b/app/rcc/edbee/syntaxfiles/Clojure.tmLanguage
new file mode 100644
index 00000000..8cb89e76
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Clojure.tmLanguage
@@ -0,0 +1,3415 @@
+
+
+
+
+ comment
+ Symbol pattern : [a-zA-Z+!\-_?0-9*~#@'`/.$=]
+ fileTypes
+
+ clj
+
+ foldingStartMarker
+ (?x)^ [ \t]* \(
+ (?<par>
+ ( [^()\n]++ | \( \g<par> \)? )*+
+ )
+ $
+ foldingStopMarker
+ ^\s*$
+ keyEquivalent
+ ^~C
+ name
+ Clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #function
+
+
+ include
+ #function_multi_method
+
+
+ include
+ #macro
+
+
+ include
+ #namespace
+
+
+ include
+ #sexpr
+
+
+ repository
+
+ all
+
+ patterns
+
+
+ include
+ #function
+
+
+ include
+ #function_multi_method
+
+
+ include
+ #lambda
+
+
+ include
+ #macro
+
+
+ include
+ #comment
+
+
+ include
+ #expr
+
+
+ include
+ #sexpr
+
+
+
+ binding
+
+ comment
+ consume bindings to the end, dual recursive with binding_exp
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ begin
+ \[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.begin.clojure
+
+
+ end
+ (?=\])
+ name
+ meta.structure.binding.vector.clojure
+ patterns
+
+
+ begin
+ (?<=\[)
+ comment
+ TODO: merge with parameters ??
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.end.clojure
+
+
+ name
+ meta.parameters.vector.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ include
+ #parameters_variable
+
+
+ match
+ \&
+ name
+ keyword.operator.varargs.clojure
+
+
+ match
+ (:as)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ keyword.operator.symbolargs.clojure
+
+
+ include
+ #parameters
+
+
+ include
+ #parameters_map
+
+
+ include
+ #all
+
+
+
+
+ include
+ #binding_exp
+
+
+
+
+ begin
+ \{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.begin.clojure
+
+
+ end
+ (?=\])
+ name
+ meta.structure.binding.map.clojure
+ patterns
+
+
+ begin
+ (?<=\{)
+ comment
+ TODO: merge with map ??
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.end.clojure
+
+
+ name
+ meta.function.parameters.map.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ include
+ #parameters_variable
+
+
+ match
+ (:as|:or|:keys|:strs|:syms)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ keyword.operator.symbolargs.clojure
+
+
+ include
+ #parameters
+
+
+ include
+ #parameters_map
+
+
+ include
+ #all
+
+
+
+
+ include
+ #binding_exp
+
+
+
+
+ begin
+ (:let|:when|:while)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.symbolargs.clojure
+
+
+ end
+ (?=\])
+ name
+ meta.structure.binding.symbolargs.clojure
+ patterns
+
+
+ include
+ #binding_exp
+
+
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ comment
+ symbol matching
+ end
+ (?=\])
+ name
+ meta.structure.binding.symbole.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?<=[a-zA-Z+!\-_?0-9*~#@'`/.$=])(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ variable.parameter.clojure
+ patterns
+
+
+ include
+ #keyword
+
+
+ include
+ #operator
+
+
+ include
+ #number
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\])
+ patterns
+
+
+ include
+ #binding_exp
+
+
+
+
+
+
+ begin
+ [^\s]
+ end
+ [^\]]
+ name
+ invalid.illegal.bindings.clojure
+
+
+
+ binding_exp
+
+ comment
+ consume bindings to the end, dual recursive with binding
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ include
+ #operator_special
+
+
+ begin
+ (\(\)|{}|\[\]|#{})
+ beginCaptures
+
+ 1
+
+ name
+ constant.language.clojure
+
+
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.constant.language.clojure
+ patterns
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (?=#?\()
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.sexp.clojure
+ patterns
+
+
+ begin
+ (?=#?\()
+ end
+ (?<=\))
+ patterns
+
+
+ include
+ #function
+
+
+ include
+ #function_multi_method
+
+
+ include
+ #lambda
+
+
+ include
+ #macro
+
+
+ include
+ #sexpr
+
+
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (\[)
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.vector.clojure
+ patterns
+
+
+ begin
+ (?<=\[)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.begin.clojure
+
+
+ comment
+ TODO: merge with vector
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.end.clojure
+
+
+ name
+ meta.expression.vector.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (\{)
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.map.clojure
+ patterns
+
+
+ begin
+ (?<=\{)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.begin.clojure
+
+
+ comment
+ TODO: merge with map
+ end
+ }
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.end.clojure
+
+
+ name
+ meta.expression.map.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (?=#\{)
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.set.clojure
+ patterns
+
+
+ include
+ #set
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (?=")|(?=\\)|(?=\:)|(?=\#")
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.string.clojure
+ patterns
+
+
+ include
+ #string
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ comment
+ symbol matching
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.symbole.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?<=[a-zA-Z+!\-_?0-9*~#@'`/.$=])(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ patterns
+
+
+ include
+ #keyword
+
+
+ include
+ #operator
+
+
+ include
+ #number
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\])
+ patterns
+
+
+ include
+ #binding
+
+
+
+
+
+
+ begin
+ [^\s]
+ end
+ [^\]]
+ name
+ invalid.illegal.bindings.clojure
+
+
+
+ bindings_form
+
+ begin
+ \[
+ comment
+ bindings followed by all
+ end
+ (?=\))
+ name
+ meta.structure.bindings.clojure
+ patterns
+
+
+ begin
+ (?<=\[)
+ end
+ \]
+ patterns
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (?<=\])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+
+ comment
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.clojure
+
+
+ match
+ (;;).*(;;)$\n?
+ name
+ comment.line.semicolon.double.banner.clojure
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.clojure
+
+
+ match
+ (;;).*$\n?
+ name
+ comment.line.semicolon.double.clojure
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.clojure
+
+
+ match
+ ^(;).*$\n?
+ name
+ comment.line.semicolon.start.clojure
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.clojure
+
+
+ match
+ (;).*$\n?
+ name
+ comment.line.semicolon.clojure
+
+
+
+ expr
+
+ name
+ meta.expr.clojure
+ patterns
+
+
+ include
+ #keyword
+
+
+ include
+ #operator
+
+
+ include
+ #string
+
+
+ include
+ #vector
+
+
+ include
+ #map
+
+
+ include
+ #set
+
+
+ include
+ #metadata
+
+
+ include
+ #number
+
+
+ include
+ #symbol
+
+
+
+ function
+
+ begin
+ \(\s*(defn\-?)\s
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.type.clojure
+
+
+ end
+ \)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.terminator.function.clojure
+
+
+ name
+ meta.function.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ match
+ \s*
+
+
+ include
+ #function_name
+
+
+ include
+ #function_body_comment
+
+
+
+ function_body
+
+ patterns
+
+
+ begin
+ \(\s*(?=\[)
+ end
+ \)
+ name
+ meta.function.body.code.clojure
+ patterns
+
+
+ include
+ #parameters_body
+
+
+
+
+ begin
+ (?=\[)
+ end
+ (?=\))
+ name
+ meta.function.body.clojure
+ patterns
+
+
+ include
+ #parameters_body
+
+
+
+
+
+ function_body_comment
+
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ string.quoted.double.begin.clojure
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ string.quoted.double.end.clojure
+
+
+ name
+ string.docstring.clojure
+ patterns
+
+
+ include
+ #string_escape
+
+
+
+
+ begin
+ \{
+ beginCaptures
+
+ 0
+
+ name
+ comment.punctuation.definition.metadata.begin.clojure
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ comment.punctuation.definition.metadata.end.clojure
+
+
+ name
+ meta.metadata.map.clojure
+ patterns
+
+
+ include
+ #metadata_patterns
+
+
+
+
+ include
+ #function_body
+
+
+
+ function_multi_method
+
+ begin
+ \(\s*(defmethod\-?)\s+
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.type.clojure
+
+
+ end
+ \)
+ name
+ meta.function.multi_method.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?<=[a-zA-Z+!\-_?0-9*~#@'`/.$=])(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ meta.function.multi_method.name.clojure
+ patterns
+
+
+ include
+ #function_name
+
+
+
+
+ begin
+ (?<=[a-zA-Z+!\-_?0-9*~#@'`/.$=])(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ include
+ #operator_special
+
+
+ begin
+ (\(\)|{}|\[\]|#{})
+ beginCaptures
+
+ 1
+
+ name
+ constant.language.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.constant.language.clojure
+ patterns
+
+
+ include
+ #parameters_body
+
+
+
+
+ begin
+ (?=#?\()
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.sexp.clojure
+ patterns
+
+
+ begin
+ (?=#?\()
+ end
+ (?<=\))
+ patterns
+
+
+ include
+ #function
+
+
+ include
+ #function_multi_method
+
+
+ include
+ #lambda
+
+
+ include
+ #macro
+
+
+ include
+ #sexpr
+
+
+
+
+ include
+ #parameters_body
+
+
+
+
+ begin
+ (\[)
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.vector.clojure
+ patterns
+
+
+ begin
+ (?<=\[)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.begin.clojure
+
+
+ comment
+ TODO: merge with vector
+ end
+ (\])
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.vector.end.clojure
+
+
+ name
+ meta.expression.vector.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?<=\])\s*
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #parameters_body
+
+
+
+
+
+
+ begin
+ (\{)
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.map.clojure
+ patterns
+
+
+ begin
+ (?<=\{)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.begin.clojure
+
+
+ comment
+ TODO: merge with map
+ end
+ }
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.end.clojure
+
+
+ name
+ meta.expression.map.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #parameters_body
+
+
+
+
+ begin
+ (?=#\{)
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.set.clojure
+ patterns
+
+
+ include
+ #set
+
+
+ include
+ #parameters_body
+
+
+
+
+ begin
+ (?=")|(?=\\)|(?=\:)|(?=\#")
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.string.clojure
+ patterns
+
+
+ include
+ #string
+
+
+ include
+ #parameters_body
+
+
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ comment
+ symbol matching
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.symbole.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?<=[a-zA-Z+!\-_?0-9*~#@'`/.$=])(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ patterns
+
+
+ include
+ #symbol_java_inherited_class
+
+
+ include
+ #keyword
+
+
+ include
+ #operator
+
+
+ include
+ #number
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #parameters_body
+
+
+
+
+
+
+
+
+
+
+ comment
+ Need to match a single expression like binding-exp
+
+
+
+ function_name
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ comment
+ symbol matching
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ entity.name.function.clojure
+ patterns
+
+
+ include
+ #keyword
+
+
+ include
+ #operator
+
+
+ begin
+ -(?=[a-zA-Z+!\-_?*~#@'`/.$=])
+ beginCaptures
+
+ 0
+
+ name
+ keyword.operator.prefix.genclass.clojure
+
+
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ include
+ #symbol
+
+
+
+ genclass_parameters
+
+ patterns
+
+
+ include
+ #gencommon_parameters
+
+
+ begin
+ (:extends)\s+
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ meta.other.genclass.extends.clojure
+ patterns
+
+
+ include
+ #symbol_java_inherited_class
+
+
+
+
+ begin
+ (:implements)\s+(\[)
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ \]
+ name
+ meta.other.genclass.implements.clojure
+ patterns
+
+
+ include
+ #symbol_java_inherited_class
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (:constructors)\s+(\{)
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ \}
+ name
+ meta.other.genclass.constructors.clojure
+ patterns
+
+
+ begin
+ \[
+ end
+ \]
+ name
+ meta.other.genclass.constructor.signature.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ comment
+ TODO: make a rule java Class (storage)
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ storage.type.java.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (:exposes)\s+(\{)
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ \}
+ name
+ meta.other.genclass.exposes.clojure
+ patterns
+
+
+ begin
+ \{
+ end
+ \}
+ name
+ meta.other.genclass.exposes.get_set.clojure
+ patterns
+
+
+ match
+ :(get|set)
+ name
+ support.other.keyword.genclass.clojure
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+ captures
+
+ 0
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ match
+ :(init|main|factory|state|prefix|load-impl-ns|implements|constructors|exposes|impl-ns|exposes-methods|methods)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+
+
+ include
+ #all
+
+
+
+ gencommon_parameters
+
+ patterns
+
+
+ include
+ #comment
+
+
+ begin
+ (:name)\s+(?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ meta.other.genclass.name.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ entity.name.namespace.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+
+
+ begin
+ (:methods)\s+(\[)
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ \]
+ name
+ meta.other.genclass.methods.clojure
+ patterns
+
+
+ begin
+ \[
+ end
+ \]
+ name
+ meta.other.genclass.method.signature.clojure
+ patterns
+
+
+ begin
+ \[
+ end
+ \]
+ name
+ meta.other.genclass.method.args.signature.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ comment
+ TODO: make a rule java Class (storage)
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ storage.type.java.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=]+\s*])
+ end
+ .|$
+ name
+ storage.type.java.genclass.return_type.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+
+ geninterface_parameters
+
+ patterns
+
+
+ include
+ #gencommon_parameters
+
+
+ begin
+ (:extends)\s+(\[)
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ \]
+ name
+ meta.other.genclass.implements.clojure
+ patterns
+
+
+ include
+ #symbol_java_inherited_class
+
+
+ include
+ #all
+
+
+
+
+
+ keyword
+
+ patterns
+
+
+ match
+ (?<![*+!_?\-])\b((if-not|if|cond|do|let|loop|recur|throw|try|catch|finally|new|trampoline)\b|(set!|swap!|compare-and-set!))(?![*+!_?\-])
+ name
+ keyword.control.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(monitor-enter|monitor-exit|assoc|touch|drop|take|concat|prn|into|cons|first|flatten|rest|frest|rrest|second|lazy-cat|lazy-cons|conj|await|range|iterate)\b(?![*+!_?\-])
+ name
+ keyword.other.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(str|print(ln)?|eval|def|defmacro|defn|quote|var|fn|defmulti|defmethod|map|list|hash-map|vector|agent|declare|intern|macroexpand|macroexpand-1)\b(?![*+!_?\-])
+ name
+ storage.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(->|\.\.|amap|and|areduce|assert|binding|comment|cond|definline|(def[a-z\-]*)|defmatch|defmethod|defmulti|defn|defn-|defonce|defstruct|delay|doc|doseq|dosync|dotimes|doto|fn|for|if-let|lazy-cons|let|locking|loop|memfn|ns|or|prefer-method|proxy-super|proxy|refer-clojure|remove-method|sync|time|when-first|when-let|when-not|when|while|with-in-str|with-local-vars|with-open|with-out-str|with-precision|memoize)\b(?![*+!_?\-])
+ name
+ support.function.match.clojure
+
+
+ captures
+
+ 2
+
+ name
+ keyword.other.mark.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(rational|associative|branch|class|coll|contains|decimal|delay|distinct|empty|end|even|every|false|float|fn|identical|instance|integer|isa|keyword|list|map|neg|nil|not-any|not-every|number|odd|pos|ratio|reversible|seq|sequential|set|sorted|special-symbol|string|symbol|true|var|zero|vector|ifn)(\?)(?![*+!_?\-])
+ name
+ support.function.tester.clojure
+
+
+ captures
+
+ 2
+
+ name
+ keyword.other.mark.clojure
+
+ 3
+
+ name
+ keyword.other.mark.clojure
+
+ 4
+
+ name
+ keyword.other.mark.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(not(=)|list(\*)|io(!))(?![*+!_?\-])
+ name
+ support.function.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(zipper|zipmap|xml-zip|xml-seq|with-meta|vector-zip|vector|vec|var-set|var-get|vals|val|use|update-proxy|update-in|up|union|underive|unchecked-subtract|unchecked-negate|unchecked-multiply|unchecked-inc|unchecked-divide|unchecked-dec|unchecked-add|tree-seq|to-array-2d|to-array|test|take-while|take-nth|symbol|supers|subvec|subseq|subs|struct-map|struct|str|split-with|split-at|sorted-set|sorted-map-by|sorted-map|sort-by|sort|some|slurp|shutdown-agents|short|set-validator|set|seque|seq-zip|seq|send-off|send|select-keys|select|rsubseq|rseq|root|rights|right|rfirst|reverse|resultset-seq|resolve|require|replicate|replace|repeatedly|repeat|rename-keys|rename|remove-ns|remove|rem|refer|ref-set|ref|reduce|read-string|read-line|read|re-seq|re-pattern|re-matches|re-matcher|re-groups|re-find|rationalize|rand-int|rand|quot|pvec|psummary|psort|proxy-mappings|project|prn-str|println-str|println|printf|print-str|print|preduce|pr-str|pr|pop|pmin|pmax|pmap|pfilter-nils|pfilter-dupes|peek|pdistinct|path|partition|partial|parse|parents|par|pany|num|nthrest|nth|ns-unmap|ns-unalias|ns-resolve|ns-refers|ns-publics|ns-name|ns-map|ns-interns|ns-imports|ns-aliases|not=|not-empty|not|node|next|newline|namespace|name|min-key|min|meta|merge-with|merge|max-key|max|matchexpand-1|matchexpand|mapcat|map-invert|map|make-node|make-hierarchy|make-array|long-array|long|loaded-libs|load-string|load-reader|load-file|load|list*|list|line-seq|lefts|left|last|keyword|keys|key|join|iterator-seq|into-array|intersection|interpose|interleave|int-array|int|inspect-tree|inspect-table|insert-right|insert-left|insert-child|index|inc|in-ns|import|identity|hash-set|hash-map|hash|get-validator|get-proxy-class|get-in|get|gensym|gen-class|gen-interface|gen-and-save-class|gen-and-load-class|format|force|fnseq|flush|float-array|float|find-var|find-ns|find-doc|find|filter|file-seq|ffirst|eval|enumeration-seq|ensure|empty|edit|drop-while|drop-last|down|double-array|double|dorun|doall|distinct|dissoc|disj|difference|descendants|derive|deref|dec|cycle|create-struct|create-ns|count|construct-proxy|constantly|conj|complement|compare|comparator|comp|commute|clojure.set|clojure.parallel|clojure.inspector|clear-agent-errors|class|children|char|cast|cache-seq|byte|butlast|boolean|bit-xor|bit-test|bit-shift-right|bit-shift-left|bit-set|bit-or|bit-not|bit-flip|bit-clear|bit-and-not|bit-and|bigint|bigdec|bean|bases|await-for|assoc-in|aset-short|aset-long|aset-int|aset-float|aset-double|aset-char|aset-byte|aset-boolean|aset|array-map|apply|append-child|ancestors|alter-var-root|alter|all-ns|alias|alength|aget|agent-errors|agent|add-classpath|aclone|accessor|compile|longs|doubles|ints|floats|atom)\b(?![*+!_?\-])
+ name
+ support.function.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(true|false|nil)\b(?![*+!_?\-])
+ name
+ constant.language.clojure
+
+
+ match
+ (\(\)|{}|\[\]|#{})
+ name
+ constant.language.clojure
+
+
+ comment
+ TODO : clean this ?
+ match
+ (?<![*+!_?\-])\b:(private|doc|test|tag)\b(?![*+!_?\-])
+ name
+ storage.modifier.clojure
+
+
+ comment
+ TODO : clean this ?
+ match
+ (?<![*+!_?\-])\b:(file|line|name|ns|match|argslist)\b(?![*+!_?\-])
+ name
+ support.variable.clojure
+
+
+ match
+ (?<![*+!_?\-])\*(agent|allow-unresolved-vars|command-line-args|compile-files|compile-path|err|file|flush-on-newline|in|macro-meta|math-context|ns|out|print-dup|print-length|print-level|print-meta|print-readably|proxy-classes|use-context-classloader|warn-on-reflection)\*(?![*+!_?\-])
+ name
+ support.variable.global.clojure
+
+
+
+ lambda
+
+ patterns
+
+
+ begin
+ \(\s*(fn)\s+
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.type.clojure
+
+
+ end
+ \)
+ name
+ meta.function.lambda.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #function_name
+
+
+ include
+ #function_body
+
+
+
+
+ begin
+ (#)\(
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.type.clojure
+
+
+ end
+ \)
+ name
+ meta.function.lambda.clojure
+ patterns
+
+
+ include
+ #sexpr_special
+
+
+ include
+ #all
+
+
+
+
+
+ macro
+
+ begin
+ \(\s*(\b(defmacro\-?))\s+
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.type.clojure
+
+
+ end
+ \)
+ name
+ meta.function.macro.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ match
+ \s*
+
+
+ include
+ #function_name
+
+
+ include
+ #function_body_comment
+
+
+
+ map
+
+ begin
+ {(?!})
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.begin.clojure
+
+
+ end
+ (?<!{)}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.end.clojure
+
+
+ name
+ meta.expression.map.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+ metadata
+
+ patterns
+
+
+ begin
+ #?\^{
+ beginCaptures
+
+ 0
+
+ name
+ comment.punctuation.definition.metadata.begin.clojure
+
+
+ end
+ }
+ endCaptures
+
+ 0
+
+ name
+ comment.punctuation.definition.metadata.end.clojure
+
+
+ name
+ punctuation.metadata.map.clojure
+ patterns
+
+
+ include
+ #metadata_patterns
+
+
+
+
+ begin
+ #?\^"
+ beginCaptures
+
+ 0
+
+ name
+ comment.punctuation.definition.metadata.begin.clojure
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ comment.punctuation.definition.metadata.end.clojure
+
+
+ name
+ string.metadata.clojure
+
+
+ captures
+
+ 1
+
+ name
+ comment.punctuation.definition.metadata.begin.clojure
+
+ 2
+
+ name
+ storage.type.java.clojure
+
+
+ match
+ (#?\^)([a-zA-Z+!\-_?0-9*/.$=]+)
+ name
+ punctuation.metadata.class.clojure
+
+
+
+ metadata_patterns
+
+ patterns
+
+
+ match
+ (:tag|:doc|:arglists|:private|:macro|:name|:ns|:inline-arities|:inline|:line|:file)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ support.other.keyword.namespace.clojure
+
+
+ match
+ (?<=:tag)\s+([a-zA-Z+!\-_?0-9*/.$=]+)
+ name
+ storage.type.java.clojure
+
+
+ begin
+ (?<=:doc)\s+"
+ beginCaptures
+
+ 0
+
+ name
+ string.quoted.double.begin.clojure
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ string.quoted.double.end.clojure
+
+
+ name
+ string.docstring.clojure
+ patterns
+
+
+ include
+ #string_escape
+
+
+
+
+ include
+ #all
+
+
+
+ namespace
+
+ begin
+ \(\s*(ns)\b
+ beginCaptures
+
+ 1
+
+ name
+ support.function.namespace.clojure
+
+
+ end
+ \)
+ name
+ meta.function.namespace.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ entity.name.namespace.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ include
+ #namespace_body
+
+
+
+ namespace_body
+
+ patterns
+
+
+ match
+ (:refer-clojure|:require|:use|:import|:load|:exclude|:as|:only)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ support.other.keyword.namespace.clojure
+
+
+ begin
+ \(\s*(:gen-class)
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ \)
+ name
+ meta.function.genclass_form.clojure
+ patterns
+
+
+ include
+ #genclass_parameters
+
+
+
+
+ include
+ #symbol
+
+
+ include
+ #string
+
+
+ begin
+ \(
+ end
+ \)
+ patterns
+
+
+ include
+ #namespace_body
+
+
+
+
+ begin
+ \[
+ end
+ \]
+ patterns
+
+
+ include
+ #namespace_body
+
+
+
+
+
+ number
+
+ patterns
+
+
+ captures
+
+ 2
+
+ name
+ keyword.operator.arithmetic.ratio.clojure
+
+
+ match
+ (-|\+)?\b[0-9]+(/)[0-9]+\b
+ name
+ constant.numeric.float.ratio.clojure
+
+
+ match
+ [-+]?\b[0-9]+((\.[0-9]+([eE][-+]?[0-9]+)?)|((\.[0-9]+)?[eE][-+]?[0-9]+))?\b
+ name
+ constant.numeric.float.clojure
+
+
+ match
+ [-+]?\b[0-9]+(((\.[0-9])?+([eE][-+]?[0-9]+)?)|((\.[0-9]+)?[eE][-+]?[0-9]+))[M]?\b
+ name
+ constant.numeric.big_decimal.clojure
+
+
+ captures
+
+ 2
+
+ name
+ keyword.operator.arithmetic.octal.clojure
+
+ 4
+
+ name
+ invalid.illegal.integer.octal.clojure
+
+ 5
+
+ name
+ invalid.illegal.integer.octal.clojure
+
+
+ match
+ (-|\+)?\b(0)([0-7]+|([89]))([0-9]*)\b
+ name
+ constant.numeric.integer.octal.clojure
+
+
+ match
+ (-|\+)?\b[0-9]+\b
+ name
+ constant.numeric.integer.clojure
+
+
+ captures
+
+ 2
+
+ name
+ keyword.operator.arithmetic.hexa.clojure
+
+
+ match
+ (-|\+)?\b(0[xX])[0-9A-Fa-f]+\b
+ name
+ constant.numeric.integer.hexa.clojure
+
+
+
+ operator
+
+ patterns
+
+
+ match
+ (?<![a-zA-Z0-9*+!_?\-])(\*|/|\<|\<=|=|==|\>|\>=|-\>)(?![a-zA-Z0-9*+!_?\-])
+ name
+ keyword.operator.clojure
+
+
+ match
+ (?<![a-zA-Z0-9*+!_?\-])(-|\+)(?![a-zA-Z0-9*+!_?\-])
+ name
+ keyword.operator.clojure
+
+
+ match
+ (?<![a-zA-Z0-9*+!_?\-])(\.|\.\.)(?![a-zA-Z0-9*+!_?\-])
+ name
+ keyword.operator.class.clojure
+
+
+ match
+ %(\d+|&)?
+ name
+ variable.parameter.literal.clojure
+
+
+ include
+ #operator_special
+
+
+
+ operator_special
+
+ patterns
+
+
+ match
+ `|~@|~
+ name
+ keyword.control.operator.clojure
+
+
+ match
+ #'|@
+ name
+ storage.type.function.type.clojure
+
+
+ match
+ '
+ name
+ constant.other.quote
+
+
+ match
+ \^
+ name
+ constant.other.metadata.read.clojure
+
+
+
+ parameters
+
+ begin
+ \[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.begin.clojure
+
+
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.end.clojure
+
+
+ name
+ meta.parameters.vector.clojure
+ patterns
+
+
+ match
+ \&
+ name
+ keyword.operator.varargs.clojure
+
+
+ match
+ (:as)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ keyword.operator.symbolargs.clojure
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ include
+ #parameters_variable
+
+
+ include
+ #parameters
+
+
+ include
+ #parameters_map
+
+
+
+ parameters_body
+
+ name
+ meta.function.body
+ patterns
+
+
+ include
+ #parameters_function
+
+
+ begin
+ (?<=\])
+ end
+ (?=\))
+ name
+ meta.function.body.code.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+
+
+ parameters_function
+
+ begin
+ \[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.begin.clojure
+
+
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.end.clojure
+
+
+ name
+ meta.function.parameters.vector.clojure
+ patterns
+
+
+ match
+ \&
+ name
+ keyword.operator.varargs.clojure
+
+
+ match
+ (:as)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ keyword.operator.symbolargs.clojure
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ include
+ #parameters_variable
+
+
+ include
+ #parameters
+
+
+ include
+ #parameters_map
+
+
+
+ parameters_map
+
+ begin
+ \{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.begin.clojure
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.end.clojure
+
+
+ name
+ meta.function.parameters.map.clojure
+ patterns
+
+
+ include
+ #parameters_variable
+
+
+ match
+ (:as|:or|:keys|:strs|:syms)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ keyword.operator.symbolargs.clojure
+
+
+ include
+ #parameters
+
+
+ include
+ #parameters_map
+
+
+ include
+ #all
+
+
+
+ parameters_variable
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~@'`/.$=])
+ comment
+ symbol matching TODO:operator number => error ?
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ variable.parameter.clojure
+ patterns
+
+
+ include
+ #keyword
+
+
+ include
+ #operator
+
+
+ include
+ #number
+
+
+ include
+ #symbol
+
+
+
+ set
+
+ begin
+ #{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.set.begin.clojure
+
+
+ end
+ }
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.set.end.clojure
+
+
+ name
+ meta.expression.set.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+ sexpr
+
+ begin
+ \((?!\))
+ end
+ (?<!\()\)
+ name
+ meta.sexpr.clojure
+ patterns
+
+
+ include
+ #sexpr_special
+
+
+ include
+ #all
+
+
+
+ sexpr_special
+
+ patterns
+
+
+ begin
+ (?<=\()\s*(let|loop|doseq|dotimes|binding|for|if-let|when-let|with-local-vars|with-open)\s+(?=\[)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.let_form.clojure
+ patterns
+
+
+ include
+ #bindings_form
+
+
+
+
+ begin
+ (?<=\()\s*(def|declare|defstruct|defonce|defmulti)\s+
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.variable.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.def_form.clojure
+ patterns
+
+
+ include
+ #metadata
+
+
+ match
+ \s*
+
+
+ include
+ #function_name
+
+
+ begin
+ (?<=$|.)
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+
+
+ begin
+ (?<=\()\s*(prefer-method)\s+
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.variable.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.def_form.clojure
+ patterns
+
+
+ include
+ #metadata
+
+
+ match
+ \s*
+
+
+ include
+ #function_name
+
+
+ begin
+ (?<=$|.)
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #symbol_java_inherited_class
+
+
+ include
+ #all
+
+
+
+
+
+
+ begin
+ (?<=\()\s*(instance(\?))\s+
+ beginCaptures
+
+ 1
+
+ name
+ support.function.tester.clojure
+
+ 2
+
+ name
+ keyword.other.mark.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.isInstance_form.clojure
+ patterns
+
+
+ include
+ #symbol_java_class_form_body
+
+
+
+
+ begin
+ (?<=\()\s*(cast)\s+
+ beginCaptures
+
+ 1
+
+ name
+ support.function.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.cast_form.clojure
+ patterns
+
+
+ include
+ #symbol_java_class_form_body
+
+
+
+
+ begin
+ (?<=\()\s*((new)\s+|(?=[a-zA-Z][a-zA-Z.]*\.(\s+|$|\))))
+ beginCaptures
+
+ 2
+
+ name
+ keyword.control.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.new_form.clojure
+ patterns
+
+
+ begin
+ (?=([a-z]+\.)*[A-Z][a-zA-Z]*(\$[A-Z][a-zA-Z]*)?)
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ storage.type.java.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?<=\()\s*((\.\.?)\s+(?=([a-z]+\.)*[A-Z][a-zA-Z]*(\$[A-Z][a-zA-Z]*)?))
+ beginCaptures
+
+ 2
+
+ name
+ keyword.control.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.member_access_form.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ storage.type.java.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?<=\()\s*(gen-class)\s+
+ beginCaptures
+
+ 1
+
+ name
+ support.function.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.genclass_form.clojure
+ patterns
+
+
+ include
+ #genclass_parameters
+
+
+
+
+ begin
+ (?<=\()\s*(gen-interface)\s+
+ beginCaptures
+
+ 1
+
+ name
+ support.function.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.geninterface_form.clojure
+ patterns
+
+
+ include
+ #geninterface_parameters
+
+
+
+
+ begin
+ (?<=\()\s*((catch)\s+)
+ beginCaptures
+
+ 2
+
+ name
+ keyword.control.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.catch_form.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ patterns
+
+
+ include
+ #symbol_java_class_form_body
+
+
+
+
+ begin
+ \s+(?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ variable.parameter.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?<=\()\s*(((set|swap|compare-and-set)(\!))\s+)
+ beginCaptures
+
+ 2
+
+ name
+ keyword.control.clojure
+
+ 3
+
+ name
+ keyword.other.mark.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.setvar_form.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ variable.parameter.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?<=\()\s*(proxy)\s+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.proxy_form.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ begin
+ (?=\[)
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #comment
+
+
+ begin
+ \[
+ end
+ \]
+ patterns
+
+
+ begin
+ (?=([a-z]+\.)*[A-Z][a-zA-Z]*)
+ end
+ (?![a-zA-Z.])
+ name
+ entity.other.inherited-class.java.proxy.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?<=\])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #comment
+
+
+ begin
+ (?=\[)
+ end
+ (?=\))
+ name
+ meta.function.body.proxy_form.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #parameters
+
+
+ begin
+ (?<=\])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #comment
+
+
+ begin
+ \(\s*
+ end
+ \)
+ name
+ meta.function.proxy.method.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #function_name
+
+
+ include
+ #function_body_comment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ string
+
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.clojure
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.clojure
+
+
+ name
+ string.quoted.double.clojure
+ patterns
+
+
+ include
+ #string_escape
+
+
+
+
+ match
+ \\(u[0-9a-fA-F]{4}|newline|tab|space|backspace|formfeed|return|[^\s])
+ name
+ constant.character.escape.clojure
+
+
+ begin
+ (\:{1,2})(?=[a-zA-Z+!\-_?0-9*/.$=])
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.symbole.clojure
+
+
+ comment
+ . is OK in symbol ?
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ constant.string.symbole.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ #"
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.clojure
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.clojure
+
+
+ name
+ string.regexp.clojure
+ patterns
+
+
+ include
+ source.regexp.oniguruma
+
+
+
+
+
+ string_escape
+
+ captures
+
+ 2
+
+ name
+ invalid.illegal.escape.string.clojure
+
+
+ match
+ \\(u[0-9a-fA-F]{4}|b|t|n|f|r|"|'|\\|[0-3]?[0-7]{1,2}|(.))
+ name
+ constant.character.escape.clojure
+
+ symbol
+
+ patterns
+
+
+ match
+ \b[A-Z_]{2,}\b
+ name
+ constant.other.java.clojure
+
+
+ match
+ (?<![a-zA-Z+!\-_?0-9*])\*[a-z\-]{2,}\*(?![a-zA-Z+!\-_?0-9*])
+ name
+ source.symbol.global.clojure
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*=])
+ end
+ (?![a-zA-Z+!\-_?0-9*=])
+ name
+ source.symbol.clojure
+ patterns
+
+
+ begin
+ [0-9]
+ end
+ (?![a-zA-Z+!\-_?0-9*=])
+ name
+ invalid.illegal.symbol.clojure
+
+
+ begin
+ [a-zA-Z]
+ end
+ ([+!\-_?*=#])?(?![a-zA-Z+!\-_?0-9*=])
+ endCaptures
+
+ 1
+
+ name
+ keyword.other.mark.clojure
+
+
+
+
+ begin
+ [+!\-_?*=]
+ end
+ (?![a-zA-Z+!\-_?0-9*=])
+
+
+
+
+ match
+ (?<=[a-zA-Z+!\-_?0-9*])\.(?=[a-zA-Z+!\-_?0-9*])
+ name
+ keyword.operator.classpath.clojure
+
+
+ match
+ (?<=[a-zA-Z+!\-_?0-9*])(/|\$)(?=[a-zA-Z+!\-_?0-9*])
+ name
+ keyword.operator.qualified.clojure
+
+
+
+ symbol_java_class
+
+ begin
+ (?=([a-z]+\.)*[A-Z][a-zA-Z]*(\$[A-Z][a-zA-Z]*)?)
+ comment
+ TODO : use it
+ end
+ (?![a-zA-Z.$])
+ name
+ storage.type.java.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+ symbol_java_class_form_body
+
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ patterns
+
+
+ include
+ #symbol_java_inherited_class
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+ symbol_java_inherited_class
+
+ begin
+ (?=([a-z]+\.)*[A-Z][a-zA-Z]*(\$[A-Z][a-zA-Z]*)?)
+ end
+ (?![a-zA-Z.$])
+ name
+ entity.other.inherited-class.java.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+ vector
+
+ begin
+ \[(?!\])
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.begin.clojure
+
+
+ end
+ (?<!\[)\]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.end.clojure
+
+
+ name
+ meta.expression.vector.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ scopeName
+ source.clojure
+ uuid
+ 6A87759F-F746-4E84-B788-965B46363202
+
+
diff --git a/app/rcc/edbee/syntaxfiles/CoffeeScript.tmLanguage b/app/rcc/edbee/syntaxfiles/CoffeeScript.tmLanguage
new file mode 100644
index 00000000..bd063484
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/CoffeeScript.tmLanguage
@@ -0,0 +1,746 @@
+
+
+
+
+ comment
+ CoffeeScript Syntax: version 1
+ fileTypes
+
+ coffee
+ Cakefile
+ coffee.erb
+ cson
+
+ firstLineMatch
+ ^#!.*\bcoffee
+ foldingStartMarker
+ ^\s*class\s+\S.*$|.*(->|=>)\s*$|.*[\[{]\s*$
+ foldingStopMarker
+ ^\s*$|^\s*[}\]]\s*$
+ keyEquivalent
+ ^~C
+ name
+ CoffeeScript
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ variable.parameter.function.coffee
+
+ 2
+
+ name
+ storage.type.function.coffee
+
+
+ comment
+ match stuff like: a -> …
+ match
+ (\([^()]*?\))\s*([=-]>)
+ name
+ meta.inline.function.coffee
+
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.new.coffee
+
+ 2
+
+ name
+ support.class.coffee
+
+
+ match
+ (new)\s+(\w+(?:\.\w*)*)
+ name
+ meta.class.instance.constructor
+
+
+ begin
+ '''
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.coffee
+
+
+ end
+ '''
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.coffee
+
+
+ name
+ string.quoted.heredoc.coffee
+
+
+ begin
+ """
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.coffee
+
+
+ end
+ """
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.coffee
+
+
+ name
+ string.quoted.double.heredoc.coffee
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.coffee
+
+
+ include
+ #interpolated_coffee
+
+
+
+
+ begin
+ `
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.coffee
+
+
+ end
+ `
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.coffee
+
+
+ name
+ string.quoted.script.coffee
+ patterns
+
+
+ match
+ \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)
+ name
+ constant.character.escape.coffee
+
+
+
+
+ begin
+ (?<!#)###(?!#)
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.coffee
+
+
+ end
+ ###(?:[ \t]*\n)
+ name
+ comment.block.coffee
+ patterns
+
+
+ match
+ @\w*
+ name
+ storage.type.annotation.coffeescript
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.coffee
+
+
+ match
+ (#)(?!\{).*$\n?
+ name
+ comment.line.number-sign.coffee
+
+
+ begin
+ /{3}
+ end
+ /{3}[imgy]{0,4}
+ name
+ string.regexp.coffee
+ patterns
+
+
+ include
+ #interpolated_coffee
+
+
+ include
+ #embedded_comment
+
+
+
+
+ match
+ /(?![\s=/*+{}?]).*?[^\\]/[igmy]{0,4}(?![a-zA-Z0-9])
+ name
+ string.regexp.coffee
+
+
+ match
+ (?x)
+ \b(?<![\.\$])(
+ break|by|catch|continue|else|finally|for|in|of|if|return|switch|
+ then|throw|try|unless|when|while|until|loop|do|(?<=for)\s+own
+ )(?!\s*:)\b
+
+ name
+ keyword.control.coffee
+
+
+ match
+ (?x)
+ and=|or=|!|%|&|\^|\*|\/|(\-)?\-(?!>)|\+\+|\+|~|==|=(?!>)|!=|<=|>=|<<=|>>=|
+ >>>=|<>|<|>|!|&&|\.\.(\.)?|\?|\||\|\||\:|\*=|(?<!\()/=|%=|\+=|\-=|&=|
+ \^=|\b(?<![\.\$])(instanceof|new|delete|typeof|and|or|is|isnt|not|super)\b
+
+ name
+ keyword.operator.coffee
+
+
+ captures
+
+ 1
+
+ name
+ variable.assignment.coffee
+
+ 4
+
+ name
+ punctuation.separator.key-value
+
+ 5
+
+ name
+ keyword.operator.coffee
+
+
+ match
+ ([a-zA-Z\$_](\w|\$|\.)*\s*(?!\::)((:)|(=[^=]))(?!(\s*\(.*\))?\s*((=|-)>)))
+ name
+ variable.assignment.coffee
+
+
+ begin
+ (?<=\s|^)([\[\{])(?=.*?[\]\}]\s+[:=])
+ beginCaptures
+
+ 0
+
+ name
+ keyword.operator.coffee
+
+
+ end
+ ([\]\}]\s*[:=])
+ endCaptures
+
+ 0
+
+ name
+ keyword.operator.coffee
+
+
+ name
+ meta.variable.assignment.destructured.coffee
+ patterns
+
+
+ include
+ #variable_name
+
+
+ include
+ #instance_variable
+
+
+ include
+ #single_quoted_string
+
+
+ include
+ #double_quoted_string
+
+
+ include
+ #numeric
+
+
+
+
+ captures
+
+ 2
+
+ name
+ entity.name.function.coffee
+
+ 3
+
+ name
+ entity.name.function.coffee
+
+ 4
+
+ name
+ variable.parameter.function.coffee
+
+ 5
+
+ name
+ storage.type.function.coffee
+
+
+ match
+ (?x)
+ (\s*)
+ (?=[a-zA-Z\$_])
+ (
+ [a-zA-Z\$_](\w|\$|:|\.)*\s*
+ (?=[:=](\s*\(.*\))?\s*([=-]>))
+ )
+
+ name
+ meta.function.coffee
+
+
+ comment
+ Show well-known functions from Express and Mocha in Go To Symbol view
+ name
+ meta.function.symbols.coffee
+ begin
+ ^\s*(describe|it|app\.(get|post|put|all|del|delete))
+ end
+ $
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ match
+ [=-]>
+ name
+ storage.type.function.coffee
+
+
+ match
+ \b(?<!\.)(true|on|yes)(?!\s*[:=])\b
+ name
+ constant.language.boolean.true.coffee
+
+
+ match
+ \b(?<!\.)(false|off|no)(?!\s*[:=])\b
+ name
+ constant.language.boolean.false.coffee
+
+
+ match
+ \b(?<!\.)null(?!\s*[:=])\b
+ name
+ constant.language.null.coffee
+
+
+ match
+ \b(?<!\.)(this|extends)(?!\s*[:=])\b
+ name
+ variable.language.coffee
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.class.coffee
+
+ 2
+
+ name
+ entity.name.type.class.coffee
+
+ 3
+
+ name
+ keyword.control.inheritance.coffee
+
+ 4
+
+ name
+ entity.other.inherited-class.coffee
+
+
+ match
+ (class\b)\s+(@?[a-zA-Z\$_][\w\.]*)?(?:\s+(extends)\s+(@?[a-zA-Z\$\._][\w\.]*))?
+ name
+ meta.class.coffee
+
+
+ match
+ \b(debugger|\\)\b
+ name
+ keyword.other.coffee
+
+
+ match
+ (?x)\b(
+ Array|ArrayBuffer|Blob|Boolean|Date|document|event|Function|
+ Int(8|16|32|64)Array|Math|Map|Number|
+ Object|Proxy|RegExp|Set|String|WeakMap|
+ window|Uint(8|16|32|64)Array|XMLHttpRequest
+ )\b
+ name
+ support.class.coffee
+
+
+ match
+ ((?<=console\.)(debug|warn|info|log|error|time|timeEnd|assert))\b
+ name
+ support.function.console.coffee
+
+
+ match
+ (?x)\b(
+ decodeURI(Component)?|encodeURI(Component)?|eval|parse(Float|Int)|require
+ )\b
+ name
+ support.function.coffee
+
+
+ match
+ (?x)((?<=\.)(
+ apply|call|concat|every|filter|forEach|from|hasOwnProperty|indexOf|
+ isPrototypeOf|join|lastIndexOf|map|of|pop|propertyIsEnumerable|push|
+ reduce(Right)?|reverse|shift|slice|some|sort|splice|to(Locale)?String|
+ unshift|valueOf
+ ))\b
+ name
+ support.function.method.array.coffee
+
+
+ match
+ (?x)((?<=Array\.)(
+ isArray
+ ))\b
+ name
+ support.function.static.array.coffee
+
+
+ match
+ (?x)((?<=Object\.)(
+ create|definePropert(ies|y)|freeze|getOwnProperty(Descriptors?|Names)|
+ getProperty(Descriptor|Names)|getPrototypeOf|is(Extensible|Frozen|Sealed)?|
+ isnt|keys|preventExtensions|seal
+ ))\b
+ name
+ support.function.static.object.coffee
+
+
+ match
+ (?x)((?<=Math\.)(
+ abs|acos|acosh|asin|asinh|atan|atan2|atanh|ceil|cos|cosh|exp|expm1|floor|
+ hypot|log|log10|log1p|log2|max|min|pow|random|round|sign|sin|sinh|sqrt|
+ tan|tanh|trunc
+ ))\b
+ name
+ support.function.static.math.coffee
+
+
+ match
+ (?x)((?<=Number\.)(
+ is(Finite|Integer|NaN)|toInteger
+ ))\b
+ name
+ support.function.static.number.coffee
+
+
+ match
+ \b(Infinity|NaN|undefined)\b
+ name
+ constant.language.coffee
+
+
+ match
+ \;
+ name
+ punctuation.terminator.statement.coffee
+
+
+ match
+ ,[ |\t]*
+ name
+ meta.delimiter.object.comma.coffee
+
+
+ match
+ \.
+ name
+ meta.delimiter.method.period.coffee
+
+
+ match
+ \{|\}
+ name
+ meta.brace.curly.coffee
+
+
+ match
+ \(|\)
+ name
+ meta.brace.round.coffee
+
+
+ match
+ \[|\]\s*
+ name
+ meta.brace.square.coffee
+
+
+ include
+ #instance_variable
+
+
+ include
+ #single_quoted_string
+
+
+ include
+ #double_quoted_string
+
+
+ include
+ #numeric
+
+
+ repository
+
+ double_quoted_string
+
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.coffee
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.coffee
+
+
+ name
+ string.quoted.double.coffee
+ patterns
+
+
+ match
+ \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)
+ name
+ constant.character.escape.coffee
+
+
+ include
+ #interpolated_coffee
+
+
+
+
+
+ embedded_comment
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.coffee
+
+
+ match
+ (?<!\\)(#).*$\n?
+ name
+ comment.line.number-sign.coffee
+
+
+
+ instance_variable
+
+ patterns
+
+
+ match
+ (@)([a-zA-Z_\$]\w*)?
+ name
+ variable.other.readwrite.instance.coffee
+
+
+
+ interpolated_coffee
+
+ patterns
+
+
+ begin
+ \#\{
+ captures
+
+ 0
+
+ name
+ punctuation.section.embedded.coffee
+
+
+ end
+ \}
+ name
+ source.coffee.embedded.source
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+ numeric
+
+ patterns
+
+
+ match
+ (?<!\$)\b((0([box])[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?(e[+\-]?[0-9]+)?))\b
+ name
+ constant.numeric.coffee
+
+
+
+ single_quoted_string
+
+ patterns
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.coffee
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.coffee
+
+
+ name
+ string.quoted.single.coffee
+ patterns
+
+
+ match
+ \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)
+ name
+ constant.character.escape.coffee
+
+
+
+
+
+ variable_name
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ variable.assignment.coffee
+
+
+ match
+ ([a-zA-Z\$_]\w*(\.\w+)*)
+ name
+ variable.assignment.coffee
+
+
+
+
+ scopeName
+ source.coffee
+
+
diff --git a/app/rcc/edbee/syntaxfiles/D.tmLanguage b/app/rcc/edbee/syntaxfiles/D.tmLanguage
new file mode 100644
index 00000000..c7233a28
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/D.tmLanguage
@@ -0,0 +1,908 @@
+
+
+
+
+ comment
+ D language
+ fileTypes
+
+ d
+ di
+
+ firstLineMatch
+ ^#!.*\bg?dmd\b.
+ foldingStartMarker
+ (?x)/\*\*(?!\*)|^(?![^{]*?//|[^{]*?/\*(?!.*?\*/.*?\{)).*?\{\s*($|//|/\*(?!.*?\*/.*\S))
+ foldingStopMarker
+ (?<!\*)\*\*/|^\s*\}
+ keyEquivalent
+ ^~D
+ name
+ D
+ patterns
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.d
+
+
+ match
+ /\*\*/
+ name
+ comment.block.empty.d
+
+
+ include
+ text.html.javadoc
+
+
+ begin
+ (?x)^\s*
+ ((?:\b(public|private|protected|static|final|native|synchronized|abstract|export)\b\s*)*) # modifier
+ (class|interface)\s+
+ (\w+)\s* # identifier
+ (?:\(\s*([^\)]+)\s*\)|)\s* # Template type
+ (?:
+ \s*(:)\s*
+ (\w+)
+ (?:\s*,\s*(\w+))?
+ (?:\s*,\s*(\w+))?
+ (?:\s*,\s*(\w+))?
+ (?:\s*,\s*(\w+))?
+ (?:\s*,\s*(\w+))?
+ (?:\s*,\s*(\w+))?
+ )? # super class
+
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.d
+
+ 10
+
+ name
+ entity.other.inherited-class.d
+
+ 11
+
+ name
+ entity.other.inherited-class.d
+
+ 12
+
+ name
+ entity.other.inherited-class.d
+
+ 13
+
+ name
+ entity.other.inherited-class.d
+
+ 3
+
+ name
+ storage.type.structure.d
+
+ 4
+
+ name
+ entity.name.type.class.d
+
+ 5
+
+ name
+ storage.type.template.d
+
+ 6
+
+ name
+ punctuation.separator.inheritance.d
+
+ 7
+
+ name
+ entity.other.inherited-class.d
+
+ 8
+
+ name
+ entity.other.inherited-class.d
+
+ 9
+
+ name
+ entity.other.inherited-class.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.class.d
+ patterns
+
+
+ begin
+ \b(_|:)\b
+ captures
+
+ 1
+
+ name
+ storage.modifier.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.class.extends.d
+ patterns
+
+
+ include
+ #all-types
+
+
+
+
+
+
+ begin
+ (?x)^\s*
+ ((?:\b(public|private|protected|static|final|native|synchronized|abstract|export)\b\s*)*) # modifier
+ (struct)\s+
+ (\w+)\s* # identifier
+ (?:\(\s*([^\)]+)\s*\)|)\s* # Template type
+
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.d
+
+ 3
+
+ name
+ storage.type.structure.d
+
+ 4
+
+ name
+ entity.name.type.struct.d
+
+ 5
+
+ name
+ storage.type.template.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.struct.d
+ patterns
+
+
+ begin
+ \b(_|:)\b
+ captures
+
+ 1
+
+ name
+ storage.modifier.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.class.extends.d
+ patterns
+
+
+ include
+ #all-types
+
+
+
+
+
+
+ begin
+ (?x)^\s*
+ ((?:\b(public|private|protected|static|final|native|synchronized|abstract|threadsafe|transient|export)\b\s*)*) # modifier
+ (\b(this))\s* # identifier
+ (?!.*;) # abort if line has a ;
+ (?=\()
+ captures
+
+ 1
+
+ name
+ storage.modifier.d
+
+ 3
+
+ name
+ entity.name.function.constructor.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.constructor.d
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ (?x)
+ (?: ^ # begin-of-line
+ | (?: (?<!else|new|=) ) # or word + space before name
+ )
+ ((?:\b(?:public|private|protected|static|final|native|synchronized|abstract|threadsafe|transient|export)\b\s*)*) # modifier
+ (~this) # actual name
+ \s*(\() # start bracket or end-of-line
+
+ captures
+
+ 1
+
+ name
+ storage.modifier.d
+
+ 2
+
+ name
+ entity.name.function.destructor.d
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.d
+
+
+ name
+ meta.definition.destructor.d
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ (?x)^\s*
+ ((?:\b(?:public|private|protected|static|final|native|lazy|synchronized|abstract|threadsafe|transient|export)\b\s*)*) # modifier
+ (\b(?:void|boolean|byte|char|short|int|float|long|double|[\w_]+[\w0-9_]*|(?:\w+\.)*[A-Z]\w+)\b(?:<(?:(?:(?:\w+\.)*[A-Z]\w+)(?:\s*,\s*)?)+>|(?:\[\s*\])*)?)\s* # type
+ (\w+)\s* # identifier
+ (?!.*;) # abort if line has a ;
+ (?=\()
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.d
+
+ 2
+
+ name
+ storage.type.structure.d
+
+ 3
+
+ name
+ entity.name.function.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.method.d
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ match
+ \b([A-Z][A-Z0-9_]+)\b
+ name
+ constant.other.d
+
+
+ include
+ #comments
+
+
+ include
+ #all-types
+
+
+ match
+ \b(private|protected|public|export)\b
+ name
+ storage.modifier.access-control.d
+
+
+ match
+ \b(auto|static|override|final|const|abstract|volatile|synchronized|lazy)\b
+ name
+ storage.modifier.d
+
+
+ match
+ \b(template|interface|class|enum|struct|union)\b
+ name
+ storage.type.structure.d
+
+
+ match
+ \b(ushort|int|uint|long|ulong|float|void|byte|ubyte|double|bit|char|wchar|ucent|cent|short|bool|dchar|real|ireal|ifloat|idouble|creal|cfloat|cdouble|lazy)\b
+ name
+ storage.type.d
+
+
+ match
+ \b(try|catch|finally|throw)\b
+ name
+ keyword.control.exception.d
+
+
+ match
+ \b(return|break|case|continue|default|do|while|for|switch|if|else)\b
+ name
+ keyword.control.d
+
+
+ match
+ \b(if|else|switch|iftype)\b
+ name
+ keyword.control.conditional.d
+
+
+ match
+ \b(goto|break|continue)\b
+ name
+ keyword.control.branch.d
+
+
+ match
+ \b(while|for|do|foreach(_reverse)?)\b
+ name
+ keyword.control.repeat.d
+
+
+ match
+ \b(version|return|with|invariant|body|scope|in|out|inout|asm|mixin|function|delegate)\b
+ name
+ keyword.control.statement.d
+
+
+ match
+ \b(pragma)\b
+ name
+ keyword.control.pragma.d
+
+
+ match
+ \b(alias|typedef)\b
+ name
+ keyword.control.alias.d
+
+
+ match
+ \b(import)\b
+ name
+ keyword.control.import.d
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.module.d
+
+ 2
+
+ name
+ entity.name.function.package.d
+
+
+ match
+ ^\s*(module)\s+([^ ;]+?);
+ name
+ meta.module.d
+
+
+ match
+ \b(true|false)\b
+ name
+ constant.language.boolean.d
+
+
+ match
+ \b(__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|null)\b
+ name
+ constant.language.d
+
+
+ match
+ \b(this|super)\b
+ name
+ variable.language.d
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\b
+ name
+ constant.numeric.d
+
+
+ include
+ #string_escaped_char
+
+
+ include
+ #strings
+
+
+ match
+ (==|!=|<=|>=|<>|<|>)
+ name
+ keyword.operator.comparison.d
+
+
+ match
+ (\-\-|\+\+)
+ name
+ keyword.operator.increment-decrement.d
+
+
+ match
+ (\-|\+|\*|\/|~|%)
+ name
+ keyword.operator.arithmetic.d
+
+
+ match
+ (!|&&|\|\|)
+ name
+ keyword.operator.logical.d
+
+
+ match
+ \b(opNeg|opCom|opPostInc|opPostDec|opCast|opAdd|opSub|opSub_r|opMul|opDiv|opDiv_r|opMod|opMod_r|opAnd|opOr|opXor|opShl|opShl_r|opShr|opShr_r|opUShr|opUShr_r|opCat|opCat_r|opEquals|opEquals|opCmp|opCmp|opCmp|opCmp|opAddAssign|opSubAssign|opMulAssign|opDivAssign|opModAssign|opAndAssign|opOrAssign|opXorAssign|opShlAssign|opShrAssign|opUShrAssign|opCatAssign|opIndex|opIndexAssign|opCall|opSlice|opSliceAssign|opPos|opAdd_r|opMul_r|opAnd_r|opOr_r|opXor_r)\b
+ name
+ keyword.operator.overload.d
+
+
+ match
+ \b(new|delete|typeof|typeid|cast|align|is)\b
+ name
+ keyword.operator.d
+
+
+ match
+ \b(new|throws)\b
+ name
+ keyword.other.class-fns.d
+
+
+ match
+ \b(package|extern)\b
+ name
+ keyword.other.external.d
+
+
+ match
+ \b(deprecated|unittest|debug)\b
+ name
+ keyword.other.debug.d
+
+
+ match
+ \b(u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t)\b
+ name
+ support.type.sys-types.c
+
+
+ match
+ \b(pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t)\b
+ name
+ support.type.pthread.c
+
+
+ match
+ \b(int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t)\b
+ name
+ support.type.stdint.c
+
+
+ repository
+
+ all-types
+
+ patterns
+
+
+ include
+ #support-type-built-ins-d
+
+
+ include
+ #support-type-d
+
+
+ include
+ #storage-type-d
+
+
+
+ comments
+
+ patterns
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.d
+
+
+ end
+ \*/
+ name
+ comment.block.d
+
+
+ begin
+ /\+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.d
+
+
+ end
+ \+/
+ name
+ comment.block.nested.d
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.d
+
+
+ match
+ (//).*$\n?
+ name
+ comment.line.double-slash.d
+
+
+
+ constant_placeholder
+
+ match
+ (?i:%(\([a-z_]+\))?#?0?\-?[ ]?\+?([0-9]*|\*)(\.([0-9]*|\*))?[hL]?[a-z%])
+ name
+ constant.other.placeholder.d
+
+ regular_expressions
+
+ comment
+ Change disabled to 1 to turn off syntax highlighting in “r” strings.
+ disabled
+ 1
+ patterns
+
+
+ include
+ source.regexp.python
+
+
+
+ statement-remainder
+
+ patterns
+
+
+ begin
+ \(
+ end
+ (?=\))
+ name
+ meta.definition.param-list.d
+ patterns
+
+
+ include
+ #all-types
+
+
+
+
+ begin
+ (throws)
+ captures
+
+ 1
+
+ name
+ keyword.other.class-fns.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.throws.d
+ patterns
+
+
+ include
+ #all-types
+
+
+
+
+
+ storage-type-d
+
+ match
+ \b(void|byte|short|char|int|long|float|double|boolean|([a-z]\w+\.)*[A-Z]\w+)\b
+ name
+ storage.type.d
+
+ string_escaped_char
+
+ patterns
+
+
+ match
+ \\(\\|[abefnprtv'"?]|[0-3]\d{,2}|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|&\w+;)
+ name
+ constant.character.escape.d
+
+
+ match
+ \\.
+ name
+ invalid.illegal.unknown-escape.d
+
+
+
+ strings
+
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.d
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.d
+
+
+ name
+ string.quoted.double.d
+ patterns
+
+
+ include
+ #string_escaped_char
+
+
+
+
+ begin
+ (r)(")
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.d
+
+ 2
+
+ name
+ punctuation.definition.string.begin.d
+
+
+ end
+ ((?<=")(")|")
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.d
+
+ 2
+
+ name
+ meta.empty-string.double.d
+
+
+ name
+ string.quoted.double.raw.d
+ patterns
+
+
+ include
+ #regular_expressions
+
+
+
+
+ begin
+ `
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.d
+
+
+ end
+ ((?<=`)(`)|`)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.d
+
+ 2
+
+ name
+ meta.empty-string.double.d
+
+
+ name
+ string.quoted.double.raw.backtick.d
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.d
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.d
+
+
+ name
+ string.quoted.single.d
+ patterns
+
+
+ include
+ #string_escaped_char
+
+
+
+
+
+ support-type-built-ins-classes-d
+
+ match
+ \b(AbstractServer|ArchiveMember|ArgParser|Barrier|BomSniffer|Buffer|BufferInput|BufferOutput|BufferSlice|BufferedFile|BufferedStream|BzipInput|BzipOutput|CFile|CacheInvalidatee|CacheInvalidator|CacheServer|CacheThread|Certificate|CertificateStore|CertificateStoreCtx|ChunkInput|ChunkOutput|ClassInfo|Cluster|ClusterCache|ClusterQueue|ClusterThread|CmdParser|ComObject|Compress|Condition|Conduit|Cookie|CookieParser|CookieStack|CounterInput|CounterOutput|DataFileInput|DataFileOutput|DataInput|DataOutput|Database|DatagramConduit|DeviceConduit|DigestInput|DigestOutput|DocPrinter|Document|DummyInputStream|DummyOutputStream|EndianInput|EndianOutput|EndianProtocol|EndianStream|EventSeekInputStream|EventSeekOutputStream|FTPConnection|Fiber|Field|File|FileConduit|FileFolder|FileGroup|FileInput|FileOutput|FilePath|FileScan|FilterStream|Foo|FormatOutput|GreedyInput|GreedyOutput|Gregorian|GrowBuffer|HeapCopy|HeapSlice|Hierarchy|HttpClient|HttpCookies|HttpCookiesView|HttpGet|HttpHeaders|HttpHeadersView|HttpParams|HttpPost|HttpStack|HttpTokens|HttpTriplet|IPv4Address|IUnknown|InputFilter|InternetAddress|InternetHost|Layout|LineInput|LineIterator|LinkedFolder|Log|MapInput|MapOutput|MappedBuffer|Md2|Md4|MemoryQueue|MemoryStream|MmFile|MmFileStream|ModuleInfo|MulticastConduit|Mutex|NativeProtocol|NetCall|NetHost|NetworkAlert|NetworkCache|NetworkCall|NetworkClient|NetworkCombo|NetworkMessage|NetworkQueue|NetworkRegistry|NetworkTask|NotImplemented|Object|Observer|OutBuffer|OutputFilter|PersistQueue|Pipe|PipeConduit|Print|PrivateKey|Process|Properties|Protocol|ProtocolReader|ProtocolWriter|PublicKey|PullParser|QueueFile|QueueServer|QueueThread|QueuedCache|QuoteIterator|Random|Range|ReadWriteMutex|Reader|Record|RegExp|RegExpT|RegexIterator|RollCall|SSLCtx|SSLServerSocket|SSLSocketConduit|SaxParser|SelectionKey|Semaphore|ServerSocket|ServerThread|Service|SimpleIterator|SliceInputStream|SliceSeekInputStream|SliceSeekOutputStream|SliceStream|SnoopInput|SnoopOutput|Socket|SocketConduit|SocketListener|SocketSet|SocketStream|Sprint|Stream|StreamIterator|TArrayStream|TaskServer|TaskThread|TcpSocket|Telnet|TempFile|Text|TextFileInput|TextFileOutput|TextView|Thread|ThreadGroup|ThreadLocal|ThreadPool|Token|TypeInfo|TypeInfo_AC|TypeInfo_Aa|TypeInfo_Ab|TypeInfo_Ac|TypeInfo_Ad|TypeInfo_Ae|TypeInfo_Af|TypeInfo_Ag|TypeInfo_Ah|TypeInfo_Ai|TypeInfo_Aj|TypeInfo_Ak|TypeInfo_Al|TypeInfo_Am|TypeInfo_Ao|TypeInfo_Ap|TypeInfo_Aq|TypeInfo_Ar|TypeInfo_Array|TypeInfo_As|TypeInfo_AssociativeArray|TypeInfo_At|TypeInfo_Au|TypeInfo_Av|TypeInfo_Aw|TypeInfo_C|TypeInfo_Class|TypeInfo_D|TypeInfo_Delegate|TypeInfo_Enum|TypeInfo_Function|TypeInfo_Interface|TypeInfo_P|TypeInfo_Pointer|TypeInfo_StaticArray|TypeInfo_Struct|TypeInfo_Tuple|TypeInfo_Typedef|TypeInfo_a|TypeInfo_b|TypeInfo_c|TypeInfo_d|TypeInfo_e|TypeInfo_f|TypeInfo_g|TypeInfo_h|TypeInfo_i|TypeInfo_j|TypeInfo_k|TypeInfo_l|TypeInfo_m|TypeInfo_o|TypeInfo_p|TypeInfo_q|TypeInfo_r|TypeInfo_s|TypeInfo_t|TypeInfo_u|TypeInfo_v|TypeInfo_w|TypedInput|TypedOutput|URIerror|UdpSocket|UnCompress|UniText|UnicodeBom|UnicodeFile|UnknownAddress|Uri|UtfInput|UtfOutput|VirtualFolder|WrapSeekInputStream|WrapSeekOutputStream|Writer|XmlPrinter|ZipArchive|ZipBlockReader|ZipBlockWriter|ZipEntry|ZipEntryVerifier|ZipFile|ZipFileGroup|ZipFolder|ZipSubFolder|ZipSubFolderEntry|ZipSubFolderGroup|ZlibInput|ZlibOutput)\b
+ name
+ support.type.built-ins.classes.d
+
+ support-type-built-ins-d
+
+ patterns
+
+
+ include
+ #support-type-built-ins-exceptions-d
+
+
+ include
+ #support-type-built-ins-classes-d
+
+
+ include
+ #support-type-built-ins-interfaces-d
+
+
+ include
+ #support-type-built-ins-structs-d
+
+
+
+ support-type-built-ins-exceptions-d
+
+ match
+ \b(AddressException|ArrayBoundsError|ArrayBoundsException|AssertError|AssertException|Base64CharException|Base64Exception|BzipClosedException|BzipException|ClusterEmptyException|ClusterFullException|ConvError|ConvOverflowError|ConversionException|CorruptedIteratorException|DatabaseException|DateParseError|Exception|FTPException|FiberException|FileException|FinalizeException|FormatError|HostException|IOException|IllegalArgumentException|IllegalElementException|InvalidKeyException|InvalidTypeException|LocaleException|ModuleCtorError|NoSuchElementException|OpenException|OpenRJException|OutOfMemoryException|PlatformException|ProcessCreateException|ProcessException|ProcessForkException|ProcessKillException|ProcessWaitException|ReadException|RegExpException|RegexException|RegistryException|SeekException|SharedLibException|SocketAcceptException|SocketException|StdioException|StreamException|StreamFileException|StringException|SwitchError|SwitchException|SyncException|TextException|ThreadError|ThreadException|UnboxException|UnicodeException|UtfException|VariantTypeMismatchException|Win32Exception|WriteException|XmlException|ZipChecksumException|ZipException|ZipExhaustedException|ZipNotSupportedException|ZlibClosedException|ZlibException|OurUnwindException|SysError)\b
+ name
+ support.type.built-ins.exceptions.d
+
+ support-type-built-ins-interfaces-d
+
+ match
+ \b(Buffered|HttpParamsView|ICache|IChannel|IClassFactory|ICluster|IConduit|IConsumer|IEvent|IHierarchy|ILevel|IListener|IMessage|IMessageLoader|IOStream|IReadable|ISelectable|ISelectionSet|ISelector|IServer|IUnknown|IWritable|IXmlPrinter|InputStream|OutputStream|PathView|VfsFile|VfsFiles|VfsFolder|VfsFolderEntry|VfsFolders|VfsHost|VfsSync|ZipReader|ZipWriter)\b
+ name
+ support.type.built-ins.interfaces.d
+
+ support-type-built-ins-structs-d
+
+ match
+ \b(ABC|ABCFLOAT|ACCEL|ACCESSTIMEOUT|ACCESS_ALLOWED_ACE|ACCESS_DENIED_ACE|ACE_HEADER|ACL|ACL_REVISION_INFORMATION|ACL_SIZE_INFORMATION|ACTION_HEADER|ADAPTER_STATUS|ADDJOB_INFO_1|ANIMATIONINFO|APPBARDATA|Argument|Atomic|Attribute|BITMAP|BITMAPCOREHEADER|BITMAPCOREINFO|BITMAPINFO|BITMAPINFOHEADER|BITMAPV4HEADER|BLOB|BROWSEINFO|BY_HANDLE_FILE_INFORMATION|Bar|Baz|BitArray|Box|BracketResult|ByteSwap|CANDIDATEFORM|CANDIDATELIST|CBTACTIVATESTRUCT|CBT_CREATEWND|CHARFORMAT|CHARRANGE|CHARSET|CHARSETINFO|CHAR_INFO|CIDA|CIEXYZ|CIEXYZTRIPLE|CLIENTCREATESTRUCT|CMINVOKECOMMANDINFO|COLORADJUSTMENT|COLORMAP|COMMCONFIG|COMMPROP|COMMTIMEOUTS|COMPAREITEMSTRUCT|COMPCOLOR|COMPOSITIONFORM|COMSTAT|CONNECTDLGSTRUCT|CONSOLE_CURSOR_INFO|CONTEXT|CONVCONTEXT|CONVINFO|COORD|COPYDATASTRUCT|CPINFO|CPLINFO|CREATESTRUCT|CREATE_PROCESS_DEBUG_INFO|CREATE_THREAD_DEBUG_INFO|CRITICAL_SECTION|CRITICAL_SECTION_DEBUG|CURRENCYFMT|CURSORSHAPE|CWPRETSTRUCT|CWPSTRUCT|CharClass|CharRange|Clock|CodePage|Console|DATATYPES_INFO_1|DCB|DDEACK|DDEADVISE|DDEDATA|DDELN|DDEML_MSG_HOOK_DATA|DDEPOKE|DDEUP|DEBUGHOOKINFO|DEBUG_EVENT|DELETEITEMSTRUCT|DEVMODE|DEVNAMES|DEV_BROADCAST_HDR|DEV_BROADCAST_OEM|DEV_BROADCAST_PORT|DEV_BROADCAST_VOLUME|DIBSECTION|DIR|DISCDLGSTRUCT|DISK_GEOMETRY|DISK_PERFORMANCE|DOCINFO|DOC_INFO_1|DOC_INFO_2|DRAGLISTINFO|DRAWITEMSTRUCT|DRAWTEXTPARAMS|DRIVER_INFO_1|DRIVER_INFO_2|DRIVER_INFO_3|DRIVE_LAYOUT_INFORMATION|Date|DateParse|DateTime|DirEntry|DynArg|EDITSTREAM|EMPTYRECORD|EMR|EMRABORTPATH|EMRANGLEARC|EMRARC|EMRBITBLT|EMRCREATEBRUSHINDIRECT|EMRCREATECOLORSPACE|EMRCREATEDIBPATTERNBRUSHPT|EMRCREATEMONOBRUSH|EMRCREATEPALETTE|EMRCREATEPEN|EMRELLIPSE|EMREOF|EMREXCLUDECLIPRECT|EMREXTCREATEFONTINDIRECTW|EMREXTCREATEPEN|EMREXTFLOODFILL|EMREXTSELECTCLIPRGN|EMREXTTEXTOUTA|EMRFILLPATH|EMRFILLRGN|EMRFORMAT|EMRFRAMERGN|EMRGDICOMMENT|EMRINVERTRGN|EMRLINETO|EMRMASKBLT|EMRMODIFYWORLDTRANSFORM|EMROFFSETCLIPRGN|EMRPLGBLT|EMRPOLYDRAW|EMRPOLYDRAW16|EMRPOLYLINE|EMRPOLYLINE16|EMRPOLYPOLYLINE|EMRPOLYPOLYLINE16|EMRPOLYTEXTOUTA|EMRRESIZEPALETTE|EMRRESTOREDC|EMRROUNDRECT|EMRSCALEVIEWPORTEXTEX|EMRSELECTCLIPPATH|EMRSELECTCOLORSPACE|EMRSELECTOBJECT|EMRSELECTPALETTE|EMRSETARCDIRECTION|EMRSETBKCOLOR|EMRSETCOLORADJUSTMENT|EMRSETDIBITSTODEVICE|EMRSETMAPPERFLAGS|EMRSETMITERLIMIT|EMRSETPALETTEENTRIES|EMRSETPIXELV|EMRSETVIEWPORTEXTEX|EMRSETVIEWPORTORGEX|EMRSETWORLDTRANSFORM|EMRSTRETCHBLT|EMRSTRETCHDIBITS|EMRTEXT|ENCORRECTTEXT|ENDROPFILES|ENHMETAHEADER|ENHMETARECORD|ENOLEOPFAILED|ENPROTECTED|ENSAVECLIPBOARD|ENUMLOGFONT|ENUMLOGFONTEX|ENUM_SERVICE_STATUS|EVENTLOGRECORD|EVENTMSG|EXCEPTION_DEBUG_INFO|EXCEPTION_POINTERS|EXCEPTION_RECORD|EXIT_PROCESS_DEBUG_INFO|EXIT_THREAD_DEBUG_INFO|EXTLOGFONT|EXTLOGPEN|EXT_BUTTON|EmptySlot|EndOfCDRecord|Environment|FILETIME|FILTERKEYS|FINDREPLACE|FINDTEXTEX|FIND_NAME_BUFFER|FIND_NAME_HEADER|FIXED|FLOATING_SAVE_AREA|FMS_GETDRIVEINFO|FMS_GETFILESEL|FMS_LOAD|FMS_TOOLBARLOAD|FOCUS_EVENT_RECORD|FONTSIGNATURE|FORMATRANGE|FORMAT_PARAMETERS|FORM_INFO_1|FileConst|FileHeader|FileRoots|FileSystem|FoldingCaseData|Foo|FtpConnectionDetail|FtpFeature|FtpFileInfo|FtpResponse|GC|GCP_RESULTS|GCStats|GENERIC_MAPPING|GLYPHMETRICS|GLYPHMETRICSFLOAT|GROUP_INFO_2|GUID|HANDLETABLE|HD_HITTESTINFO|HD_ITEM|HD_LAYOUT|HD_NOTIFY|HELPINFO|HELPWININFO|HIGHCONTRAST|HSZPAIR|HeaderElement|HttpConst|HttpHeader|HttpHeaderName|HttpResponses|HttpStatus|HttpToken|ICONINFO|ICONMETRICS|IMAGEINFO|IMAGE_DOS_HEADER|INPUT_RECORD|ITEMIDLIST|IeeeFlags|Interface|JOB_INFO_1|JOB_INFO_2|KERNINGPAIR|LANA_ENUM|LAYERPLANEDESCRIPTOR|LDT_ENTRY|LIST_ENTRY|LOAD_DLL_DEBUG_INFO|LOCALESIGNATURE|LOCALGROUP_INFO_0|LOCALGROUP_MEMBERS_INFO_0|LOCALGROUP_MEMBERS_INFO_3|LOGBRUSH|LOGCOLORSPACE|LOGFONT|LOGFONTA|LOGFONTW|LOGPALETTE|LOGPEN|LUID_AND_ATTRIBUTES|LV_COLUMN|LV_DISPINFO|LV_FINDINFO|LV_HITTESTINFO|LV_ITEM|LV_KEYDOWN|LocalFileHeader|MAT2|MD5_CTX|MDICREATESTRUCT|MEASUREITEMSTRUCT|MEMORYSTATUS|MEMORY_BASIC_INFORMATION|MENUEX_TEMPLATE_HEADER|MENUEX_TEMPLATE_ITEM|MENUITEMINFO|MENUITEMTEMPLATE|MENUITEMTEMPLATEHEADER|MENUTEMPLATE|MENU_EVENT_RECORD|METAFILEPICT|METARECORD|MINIMIZEDMETRICS|MINMAXINFO|MODEMDEVCAPS|MODEMSETTINGS|MONCBSTRUCT|MONCONVSTRUCT|MONERRSTRUCT|MONHSZSTRUCT|MONITOR_INFO_1|MONITOR_INFO_2|MONLINKSTRUCT|MONMSGSTRUCT|MOUSEHOOKSTRUCT|MOUSEKEYS|MOUSE_EVENT_RECORD|MSG|MSGBOXPARAMS|MSGFILTER|MULTIKEYHELP|NAME_BUFFER|NCB|NCCALCSIZE_PARAMS|NDDESHAREINFO|NETCONNECTINFOSTRUCT|NETINFOSTRUCT|NETRESOURCE|NEWCPLINFO|NEWTEXTMETRIC|NEWTEXTMETRICEX|NMHDR|NM_LISTVIEW|NM_TREEVIEW|NM_UPDOWNW|NONCLIENTMETRICS|NS_SERVICE_INFO|NUMBERFMT|OFNOTIFY|OFSTRUCT|OPENFILENAME|OPENFILENAMEA|OPENFILENAMEW|OSVERSIONINFO|OUTLINETEXTMETRIC|OUTPUT_DEBUG_STRING_INFO|OVERLAPPED|OffsetTypeInfo|PAINTSTRUCT|PALETTEENTRY|PANOSE|PARAFORMAT|PARTITION_INFORMATION|PERF_COUNTER_BLOCK|PERF_COUNTER_DEFINITION|PERF_DATA_BLOCK|PERF_INSTANCE_DEFINITION|PERF_OBJECT_TYPE|PIXELFORMATDESCRIPTOR|POINT|POINTFLOAT|POINTFX|POINTL|POINTS|POLYTEXT|PORT_INFO_1|PORT_INFO_2|PREVENT_MEDIA_REMOVAL|PRINTER_DEFAULTS|PRINTER_INFO_1|PRINTER_INFO_2|PRINTER_INFO_3|PRINTER_INFO_4|PRINTER_INFO_5|PRINTER_NOTIFY_INFO|PRINTER_NOTIFY_INFO_DATA|PRINTER_NOTIFY_OPTIONS|PRINTER_NOTIFY_OPTIONS_TYPE|PRINTPROCESSOR_INFO_1|PRIVILEGE_SET|PROCESS_HEAPENTRY|PROCESS_INFORMATION|PROPSHEETHEADER|PROPSHEETHEADER_U1|PROPSHEETHEADER_U2|PROPSHEETHEADER_U3|PROPSHEETPAGE|PROPSHEETPAGE_U1|PROPSHEETPAGE_U2|PROTOCOL_INFO|PROVIDOR_INFO_1|PSHNOTIFY|PUNCTUATION|PassByCopy|PassByRef|Phase1Info|PropertyConfigurator|QUERY_SERVICE_CONFIG|QUERY_SERVICE_LOCK_STATUS|RASAMB|RASCONN|RASCONNSTATUS|RASDIALEXTENSIONS|RASDIALPARAMS|RASENTRYNAME|RASPPPIP|RASPPPIPX|RASPPPNBF|RASTERIZER_STATUS|REASSIGN_BLOCKS|RECT|RECTL|REMOTE_NAME_INFO|REPASTESPECIAL|REQRESIZE|RGBQUAD|RGBTRIPLE|RGNDATA|RGNDATAHEADER|RIP_INFO|Runtime|SCROLLINFO|SECURITY_ATTRIBUTES|SECURITY_DESCRIPTOR|SECURITY_QUALITY_OF_SERVICE|SELCHANGE|SERIALKEYS|SERVICE_ADDRESS|SERVICE_ADDRESSES|SERVICE_INFO|SERVICE_STATUS|SERVICE_TABLE_ENTRY|SERVICE_TYPE_INFO_ABS|SERVICE_TYPE_VALUE_ABS|SESSION_BUFFER|SESSION_HEADER|SET_PARTITION_INFORMATION|SHFILEINFO|SHFILEOPSTRUCT|SHITEMID|SHNAMEMAPPING|SID|SID_AND_ATTRIBUTES|SID_IDENTIFIER_AUTHORITY|SINGLE_LIST_ENTRY|SIZE|SMALL_RECT|SOUNDSENTRY|STARTUPINFO|STICKYKEYS|STRRET|STYLEBUF|STYLESTRUCT|SYSTEMTIME|SYSTEM_AUDIT_ACE|SYSTEM_INFO|SYSTEM_INFO_U|SYSTEM_POWER_STATUS|Signal|SjLj_Function_Context|SpecialCaseData|TAPE_ERASE|TAPE_GET_DRIVE_PARAMETERS|TAPE_GET_MEDIA_PARAMETERS|TAPE_GET_POSITION|TAPE_PREPARE|TAPE_SET_DRIVE_PARAMETERS|TAPE_SET_MEDIA_PARAMETERS|TAPE_SET_POSITION|TAPE_WRITE_MARKS|TBADDBITMAP|TBBUTTON|TBNOTIFY|TBSAVEPARAMS|TCHOOSECOLOR|TCHOOSEFONT|TC_HITTESTINFO|TC_ITEM|TC_ITEMHEADER|TC_KEYDOWN|TEXTMETRIC|TEXTMETRICA|TEXTRANGE|TFINDTEXT|TIME_ZONE_INFORMATION|TOGGLEKEYS|TOKEN_CONTROL|TOKEN_DEFAULT_DACL|TOKEN_GROUPS|TOKEN_OWNER|TOKEN_PRIMARY_GROUP|TOKEN_PRIVILEGES|TOKEN_SOURCE|TOKEN_STATISTICS|TOKEN_USER|TOOLINFO|TOOLTIPTEXT|TPAGESETUPDLG|TPMPARAMS|TRANSMIT_FILE_BUFFERS|TREEITEM|TSMALLPOINT|TTHITTESTINFO|TTPOLYCURVE|TTPOLYGONHEADER|TVARIANT|TV_DISPINFO|TV_HITTESTINFO|TV_INSERTSTRUCT|TV_ITEM|TV_KEYDOWN|TV_SORTCB|Time|TimeOfDay|TimeSpan|Tuple|UDACCEL|ULARGE_INTEGER|UNIVERSAL_NAME_INFO|UNLOAD_DLL_DEBUG_INFO|USEROBJECTFLAGS|USER_INFO_0|USER_INFO_2|USER_INFO_3|UnicodeData|VALENT|VA_LIST|VERIFY_INFORMATION|VS_FIXEDFILEINFO|Variant|VfsFilterInfo|WIN32_FILE_ATTRIBUTE_DATA|WIN32_FIND_DATA|WIN32_FIND_DATAW|WIN32_STREAM_ID|WINDOWINFO|WINDOWPLACEMENT|WINDOWPOS|WINDOW_BUFFER_SIZE_RECORD|WNDCLASS|WNDCLASSA|WNDCLASSEX|WNDCLASSEXA|WSADATA|WallClock|XFORM|ZipEntryInfo)\b
+ name
+ support.type.built-ins.structs.d
+
+ support-type-d
+
+ match
+ \b((?:tango|std)\.[\w\.]+)\b
+ name
+ support.type.d
+
+
+ scopeName
+ source.d
+ uuid
+ D7C3A109-0466-4C28-9ECF-10753300FF46
+
+
diff --git a/app/rcc/edbee/syntaxfiles/DOT.tmLanguage b/app/rcc/edbee/syntaxfiles/DOT.tmLanguage
new file mode 100644
index 00000000..d9a9c663
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/DOT.tmLanguage
@@ -0,0 +1,127 @@
+
+
+
+
+ fileTypes
+
+ dot
+ DOT
+
+ foldingStartMarker
+ \{
+ foldingStopMarker
+ \}
+ keyEquivalent
+ ^~G
+ name
+ Graphviz (DOT)
+ patterns
+
+
+ match
+ \b(node|edge|graph|digraph|subgraph|strict)\b
+ name
+ storage.type.dot
+
+
+ match
+ \b(bottomlabel|color|comment|distortion|fillcolor|fixedsize|fontcolor|fontname|fontsize|group|height|label|layer|orientation|peripheries|regular|shape|shapefile|sides|skew|style|toplabel|URL|width|z)\b
+ name
+ support.constant.attribute.node.dot
+
+
+ match
+ \b(arrowhead|arrowsize|arrowtail|color|comment|constraint|decorate|dir|fontcolor|fontname|fontsize|headlabel|headport|headURL|label|labelangle|labeldistance|labelfloat|labelcolor|labelfontname|labelfontsize|layer|lhead|ltail|minlen|samehead|sametail|style|taillabel|tailport|tailURL|weight)\b
+ name
+ support.constant.attribute.edge.dot
+
+
+ match
+ \b(bgcolor|center|clusterrank|color|comment|compound|concentrate|fillcolor|fontname|fontpath|fontsize|label|labeljust|labelloc|layers|margin|mclimit|nodesep|nslimit|nslimit1|ordering|orientation|page|pagedir|quantum|rank|rankdir|ranksep|ratio|remincross|rotate|samplepoints|searchsize|size|style|URL)\b
+ name
+ support.constant.attribute.graph.dot
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.dot
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.dot
+
+
+ name
+ string.quoted.double.dot
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.dot
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.dot
+
+
+ match
+ (//).*$\n?
+ name
+ comment.line.double-slash.dot
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.dot
+
+
+ match
+ (#).*$\n?
+ name
+ comment.line.number-sign.dot
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.dot
+
+
+ end
+ \*/
+ name
+ comment.block.dot
+
+
+ scopeName
+ source.dot
+ uuid
+ 1A53D54E-6B1D-11D9-A006-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Diff.tmLanguage b/app/rcc/edbee/syntaxfiles/Diff.tmLanguage
new file mode 100644
index 00000000..601dde11
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Diff.tmLanguage
@@ -0,0 +1,229 @@
+
+
+
+
+ fileTypes
+
+ diff
+ patch
+
+ firstLineMatch
+ (?x)^
+ (===\ modified\ file
+ |==== \s* // .+ \s - \s .+ \s+ ====
+ |Index:[ ]
+ |---\ [^%]
+ |\*\*\*.*\d{4}\s*$
+ |\d+(,\d+)* (a|d|c) \d+(,\d+)* $
+ |diff\ --git[ ]
+ )
+
+ foldingStartMarker
+ ^\+\+\+
+ foldingStopMarker
+ ^---|^$
+ keyEquivalent
+ ^~D
+ name
+ Diff
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.separator.diff
+
+
+ match
+ ^((\*{15})|(={67})|(-{3}))$\n?
+ name
+ meta.separator.diff
+
+
+ match
+ ^\d+(,\d+)*(a|d|c)\d+(,\d+)*$\n?
+ name
+ meta.diff.range.normal
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.range.diff
+
+ 2
+
+ name
+ meta.toc-list.line-number.diff
+
+ 3
+
+ name
+ punctuation.definition.range.diff
+
+
+ match
+ ^(@@)\s*(.+?)\s*(@@)($\n?)?
+ name
+ meta.diff.range.unified
+
+
+ captures
+
+ 3
+
+ name
+ punctuation.definition.range.diff
+
+ 4
+
+ name
+ punctuation.definition.range.diff
+
+ 6
+
+ name
+ punctuation.definition.range.diff
+
+ 7
+
+ name
+ punctuation.definition.range.diff
+
+
+ match
+ ^(((\-{3}) .+ (\-{4}))|((\*{3}) .+ (\*{4})))$\n?
+ name
+ meta.diff.range.context
+
+
+ captures
+
+ 4
+
+ name
+ punctuation.definition.from-file.diff
+
+ 6
+
+ name
+ punctuation.definition.from-file.diff
+
+ 7
+
+ name
+ punctuation.definition.from-file.diff
+
+
+ match
+ (^(((-{3}) .+)|((\*{3}) .+))$\n?|^(={4}) .+(?= - ))
+ name
+ meta.diff.header.from-file
+
+
+ captures
+
+ 2
+
+ name
+ punctuation.definition.to-file.diff
+
+ 3
+
+ name
+ punctuation.definition.to-file.diff
+
+ 4
+
+ name
+ punctuation.definition.to-file.diff
+
+
+ match
+ (^(\+{3}) .+$\n?| (-) .* (={4})$\n?)
+ name
+ meta.diff.header.to-file
+
+
+ captures
+
+ 3
+
+ name
+ punctuation.definition.inserted.diff
+
+ 6
+
+ name
+ punctuation.definition.inserted.diff
+
+
+ match
+ ^(((>)( .*)?)|((\+).*))$\n?
+ name
+ markup.inserted.diff
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.inserted.diff
+
+
+ match
+ ^(!).*$\n?
+ name
+ markup.changed.diff
+
+
+ captures
+
+ 3
+
+ name
+ punctuation.definition.inserted.diff
+
+ 6
+
+ name
+ punctuation.definition.inserted.diff
+
+
+ match
+ ^(((<)( .*)?)|((-).*))$\n?
+ name
+ markup.deleted.diff
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.key-value.diff
+
+ 2
+
+ name
+ meta.toc-list.file-name.diff
+
+
+ match
+ ^Index(:) (.+)$\n?
+ name
+ meta.diff.index
+
+
+ scopeName
+ source.diff
+ uuid
+ 7E848FF4-708E-11D9-97B4-0011242E4184
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Doxyfile.tmLanguage b/app/rcc/edbee/syntaxfiles/Doxyfile.tmLanguage
new file mode 100755
index 00000000..cf0e7779
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Doxyfile.tmLanguage
@@ -0,0 +1,70 @@
+
+
+
+
+ fileTypes
+
+ Doxyfile
+
+ name
+ Doxygen configuration file
+ patterns
+
+
+ match
+ \b(ABBREVIATE_BRIEF|ALIASES|ALLEXTERNALS|ALLOW_UNICODE_NAMES|ALPHABETICAL_INDEX|ALWAYS_DETAILED_SEC|AUTOLINK_SUPPORT|BINARY_TOC|BRIEF_MEMBER_DESC|BUILTIN_STL_SUPPORT|CALLER_GRAPH|CALL_GRAPH|CASE_SENSE_NAMES|CHM_FILE|CHM_INDEX_ENCODING|CITE_BIB_FILES|CLANG_ASSISTED_PARSING|CLANG_OPTIONS|CLASS_DIAGRAMS|CLASS_GRAPH|COLLABORATION_GRAPH|COLS_IN_ALPHA_INDEX|COMPACT_LATEX|COMPACT_RTF|CPP_CLI_SUPPORT|CREATE_SUBDIRS|DIAFILE_DIRS|DIA_PATH|DIRECTORY_GRAPH|DISABLE_INDEX|DISTRIBUTE_GROUP_DOC|DOCBOOK_OUTPUT|DOCBOOK_PROGRAMLISTING|DOCSET_BUNDLE_ID|DOCSET_FEEDNAME|DOCSET_PUBLISHER_ID|DOCSET_PUBLISHER_NAME|DOTFILE_DIRS|DOT_CLEANUP|DOT_FONTNAME|DOT_FONTPATH|DOT_FONTSIZE|DOT_GRAPH_MAX_NODES|DOT_IMAGE_FORMAT|DOT_MULTI_TARGETS|DOT_NUM_THREADS|DOT_PATH|DOT_TRANSPARENT|DOXYFILE_ENCODING|ECLIPSE_DOC_ID|ENABLED_SECTIONS|ENABLE_PREPROCESSING|ENUM_VALUES_PER_LINE|EXAMPLE_PATH|EXAMPLE_PATTERNS|EXAMPLE_RECURSIVE|EXCLUDE|EXCLUDE_PATTERNS|EXCLUDE_SYMBOLS|EXCLUDE_SYMLINKS|EXPAND_AS_DEFINED|EXPAND_ONLY_PREDEF|EXTENSION_MAPPING|EXTERNAL_GROUPS|EXTERNAL_PAGES|EXTERNAL_SEARCH|EXTERNAL_SEARCH_ID|EXTRACT_ALL|EXTRACT_ANON_NSPACES|EXTRACT_LOCAL_CLASSES|EXTRACT_LOCAL_METHODS|EXTRACT_PACKAGE|EXTRACT_PRIVATE|EXTRACT_STATIC|EXTRA_PACKAGES|EXTRA_SEARCH_MAPPINGS|EXT_LINKS_IN_WINDOW|FILE_PATTERNS|FILE_VERSION_FILTER|FILTER_PATTERNS|FILTER_SOURCE_FILES|FILTER_SOURCE_PATTERNS|FORCE_LOCAL_INCLUDES|FORMULA_FONTSIZE|FORMULA_TRANSPARENT|FULL_PATH_NAMES|GENERATE_AUTOGEN_DEF|GENERATE_BUGLIST|GENERATE_CHI|GENERATE_DEPRECATEDLIST|GENERATE_DOCBOOK|GENERATE_DOCSET|GENERATE_ECLIPSEHELP|GENERATE_HTML|GENERATE_HTMLHELP|GENERATE_LATEX|GENERATE_LEGEND|GENERATE_MAN|GENERATE_PERLMOD|GENERATE_QHP|GENERATE_RTF|GENERATE_TAGFILE|GENERATE_TESTLIST|GENERATE_TODOLIST|GENERATE_TREEVIEW|GENERATE_XML|GRAPHICAL_HIERARCHY|GROUP_GRAPHS|GROUP_NESTED_COMPOUNDS|HAVE_DOT|HHC_LOCATION|HIDE_COMPOUND_REFERENCE|HIDE_FRIEND_COMPOUNDS|HIDE_IN_BODY_DOCS|HIDE_SCOPE_NAMES|HIDE_UNDOC_CLASSES|HIDE_UNDOC_MEMBERS|HIDE_UNDOC_RELATIONS|HTML_COLORSTYLE_GAMMA|HTML_COLORSTYLE_HUE|HTML_COLORSTYLE_SAT|HTML_DYNAMIC_SECTIONS|HTML_EXTRA_FILES|HTML_EXTRA_STYLESHEET|HTML_FILE_EXTENSION|HTML_FOOTER|HTML_HEADER|HTML_INDEX_NUM_ENTRIES|HTML_OUTPUT|HTML_STYLESHEET|HTML_TIMESTAMP|IDL_PROPERTY_SUPPORT|IGNORE_PREFIX|IMAGE_PATH|INCLUDED_BY_GRAPH|INCLUDE_FILE_PATTERNS|INCLUDE_GRAPH|INCLUDE_PATH|INHERIT_DOCS|INLINE_GROUPED_CLASSES|INLINE_INFO|INLINE_INHERITED_MEMB|INLINE_SIMPLE_STRUCTS|INLINE_SOURCES|INPUT|INPUT_ENCODING|INPUT_FILTER|INTERACTIVE_SVG|INTERNAL_DOCS|JAVADOC_AUTOBRIEF|LATEX_BATCHMODE|LATEX_BIB_STYLE|LATEX_CMD_NAME|LATEX_EXTRA_FILES|LATEX_EXTRA_STYLESHEET|LATEX_FOOTER|LATEX_HEADER|LATEX_HIDE_INDICES|LATEX_OUTPUT|LATEX_SOURCE_CODE|LATEX_TIMESTAMP|LAYOUT_FILE|LOOKUP_CACHE_SIZE|MACRO_EXPANSION|MAKEINDEX_CMD_NAME|MAN_EXTENSION|MAN_LINKS|MAN_OUTPUT|MAN_SUBDIR|MARKDOWN_SUPPORT|MATHJAX_CODEFILE|MATHJAX_EXTENSIONS|MATHJAX_FORMAT|MATHJAX_RELPATH|MAX_DOT_GRAPH_DEPTH|MAX_INITIALIZER_LINES|MSCFILE_DIRS|MSCGEN_PATH|MULTILINE_CPP_IS_BRIEF|OPTIMIZE_FOR_FORTRAN|OPTIMIZE_OUTPUT_FOR_C|OPTIMIZE_OUTPUT_JAVA|OPTIMIZE_OUTPUT_VHDL|OUTPUT_DIRECTORY|OUTPUT_LANGUAGE|PAPER_TYPE|PDF_HYPERLINKS|PERLMOD_LATEX|PERLMOD_MAKEVAR_PREFIX|PERLMOD_PRETTY|PERL_PATH|PLANTUML_INCLUDE_PATH|PLANTUML_JAR_PATH|PREDEFINED|PROJECT_BRIEF|PROJECT_LOGO|PROJECT_NAME|PROJECT_NUMBER|QCH_FILE|QHG_LOCATION|QHP_CUST_FILTER_ATTRS|QHP_CUST_FILTER_NAME|QHP_NAMESPACE|QHP_SECT_FILTER_ATTRS|QHP_VIRTUAL_FOLDER|QT_AUTOBRIEF|QUIET|RECURSIVE|REFERENCED_BY_RELATION|REFERENCES_LINK_SOURCE|REFERENCES_RELATION|REPEAT_BRIEF|RTF_EXTENSIONS_FILE|RTF_HYPERLINKS|RTF_OUTPUT|RTF_SOURCE_CODE|RTF_STYLESHEET_FILE|SEARCHDATA_FILE|SEARCHENGINE|SEARCHENGINE_URL|SEARCH_INCLUDES|SEPARATE_MEMBER_PAGES|SERVER_BASED_SEARCH|SHORT_NAMES|SHOW_FILES|SHOW_GROUPED_MEMB_INC|SHOW_INCLUDE_FILES|SHOW_NAMESPACES|SHOW_USED_FILES|SIP_SUPPORT|SKIP_FUNCTION_MACROS|SORT_BRIEF_DOCS|SORT_BY_SCOPE_NAME|SORT_GROUP_NAMES|SORT_MEMBERS_CTORS_1ST|SORT_MEMBER_DOCS|SOURCE_BROWSER|SOURCE_TOOLTIPS|STRICT_PROTO_MATCHING|STRIP_CODE_COMMENTS|STRIP_FROM_INC_PATH|STRIP_FROM_PATH|SUBGROUPING|TAB_SIZE|TAGFILES|TCL_SUBST|TEMPLATE_RELATIONS|TOC_EXPAND|TREEVIEW_WIDTH|TYPEDEF_HIDES_STRUCT|UML_LIMIT_NUM_FIELDS|UML_LOOK|USE_HTAGS|USE_MATHJAX|USE_MDFILE_AS_MAINPAGE|USE_PDFLATEX|VERBATIM_HEADERS|WARNINGS|WARN_AS_ERROR|WARN_FORMAT|WARN_IF_DOC_ERROR|WARN_IF_UNDOCUMENTED|WARN_LOGFILE|WARN_NO_PARAMDOC|XML_OUTPUT|XML_PROGRAMLISTING)\b
+ name
+ keyword.control.dox
+
+
+ match
+ \b(YES|NO)\b
+ name
+ storage.type.dox
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.dox
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.dox
+
+
+ name
+ string.quoted.double.dox
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.dox
+
+
+ match
+ (#).*$\n?
+ name
+ comment.line.sign.dox
+
+
+ scopeName
+ source.dox
+ uuid
+ 1A53D54E-6B1D-11D9-A006-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Erlang.tmLanguage b/app/rcc/edbee/syntaxfiles/Erlang.tmLanguage
new file mode 100644
index 00000000..ceb3b639
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Erlang.tmLanguage
@@ -0,0 +1,2562 @@
+
+
+
+
+ comment
+ The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace). Also, the function/module/record/macro names must be given unquoted. -- desp
+ fileTypes
+
+ erl
+ hrl
+ Emakefile
+ emakefile
+
+ keyEquivalent
+ ^~E
+ name
+ Erlang
+ patterns
+
+
+ include
+ #module-directive
+
+
+ include
+ #import-export-directive
+
+
+ include
+ #record-directive
+
+
+ include
+ #define-directive
+
+
+ include
+ #macro-directive
+
+
+ include
+ #directive
+
+
+ include
+ #function
+
+
+ include
+ #everything-else
+
+
+ repository
+
+ atom
+
+ patterns
+
+
+ begin
+ (')
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.symbol.begin.erlang
+
+
+ end
+ (')
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.symbol.end.erlang
+
+
+ name
+ constant.other.symbol.quoted.single.erlang
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.escape.erlang
+
+ 3
+
+ name
+ punctuation.definition.escape.erlang
+
+
+ match
+ (\\)([bdefnrstv\\'"]|(\^)[@-_]|[0-7]{1,3})
+ name
+ constant.other.symbol.escape.erlang
+
+
+ match
+ \\\^?.?
+ name
+ invalid.illegal.atom.erlang
+
+
+
+
+ match
+ [a-z][a-zA-Z\d@_]*+
+ name
+ constant.other.symbol.unquoted.erlang
+
+
+
+ binary
+
+ begin
+ (<<)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.binary.begin.erlang
+
+
+ end
+ (>>)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.binary.end.erlang
+
+
+ name
+ meta.structure.binary.erlang
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.binary.erlang
+
+ 2
+
+ name
+ punctuation.separator.value-size.erlang
+
+
+ match
+ (,)|(:)
+
+
+ include
+ #internal-type-specifiers
+
+
+ include
+ #everything-else
+
+
+
+ character
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.character.erlang
+
+ 2
+
+ name
+ constant.character.escape.erlang
+
+ 3
+
+ name
+ punctuation.definition.escape.erlang
+
+ 5
+
+ name
+ punctuation.definition.escape.erlang
+
+
+ match
+ (\$)((\\)([bdefnrstv\\'"]|(\^)[@-_]|[0-7]{1,3}))
+ name
+ constant.character.erlang
+
+
+ match
+ \$\\\^?.?
+ name
+ invalid.illegal.character.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.character.erlang
+
+
+ match
+ (\$)\S
+ name
+ constant.character.erlang
+
+
+ match
+ \$.?
+ name
+ invalid.illegal.character.erlang
+
+
+
+ comment
+
+ begin
+ (%)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.comment.erlang
+
+
+ end
+ $\n?
+ name
+ comment.line.erlang
+
+ define-directive
+
+ patterns
+
+
+ begin
+ ^\s*+(-)\s*+(define)\s*+(\()\s*+([a-zA-Z\d@_]++)\s*+(,)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.define.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.function.macro.definition.erlang
+
+ 5
+
+ name
+ punctuation.separator.parameters.erlang
+
+
+ end
+ (\))\s*+(\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 2
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ name
+ meta.directive.define.erlang
+ patterns
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ (?=^\s*+-\s*+define\s*+\(\s*+[a-zA-Z\d@_]++\s*+\()
+ end
+ (\))\s*+(\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 2
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ name
+ meta.directive.define.erlang
+ patterns
+
+
+ begin
+ ^\s*+(-)\s*+(define)\s*+(\()\s*+([a-zA-Z\d@_]++)\s*+(\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.define.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.function.macro.definition.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+
+ end
+ (\))\s*(,)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 2
+
+ name
+ punctuation.separator.parameters.erlang
+
+
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.parameters.erlang
+
+
+ include
+ #everything-else
+
+
+
+
+ match
+ \|\||\||:|;|,|\.|->
+ name
+ punctuation.separator.define.erlang
+
+
+ include
+ #everything-else
+
+
+
+
+
+ directive
+
+ patterns
+
+
+ begin
+ ^\s*+(-)\s*+([a-z][a-zA-Z\d@_]*+)\s*+(\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+
+ end
+ (\))\s*+(\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 2
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ name
+ meta.directive.erlang
+ patterns
+
+
+ include
+ #everything-else
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.erlang
+
+ 3
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ match
+ ^\s*+(-)\s*+([a-z][a-zA-Z\d@_]*+)\s*+(\.)
+ name
+ meta.directive.erlang
+
+
+
+ everything-else
+
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #record-usage
+
+
+ include
+ #macro-usage
+
+
+ include
+ #expression
+
+
+ include
+ #keyword
+
+
+ include
+ #textual-operator
+
+
+ include
+ #function-call
+
+
+ include
+ #tuple
+
+
+ include
+ #list
+
+
+ include
+ #binary
+
+
+ include
+ #parenthesized-expression
+
+
+ include
+ #character
+
+
+ include
+ #number
+
+
+ include
+ #atom
+
+
+ include
+ #string
+
+
+ include
+ #symbolic-operator
+
+
+ include
+ #variable
+
+
+
+ expression
+
+ patterns
+
+
+ begin
+ \b(if)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.if.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.if.erlang
+ patterns
+
+
+ include
+ #internal-expression-punctuation
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ \b(case)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.case.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.case.erlang
+ patterns
+
+
+ include
+ #internal-expression-punctuation
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ \b(receive)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.receive.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.receive.erlang
+ patterns
+
+
+ include
+ #internal-expression-punctuation
+
+
+ include
+ #everything-else
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.fun.erlang
+
+ 3
+
+ name
+ entity.name.type.class.module.erlang
+
+ 4
+
+ name
+ punctuation.separator.module-function.erlang
+
+ 5
+
+ name
+ entity.name.function.erlang
+
+ 6
+
+ name
+ punctuation.separator.function-arity.erlang
+
+
+ match
+ \b(fun)\s*+(([a-z][a-zA-Z\d@_]*+)\s*+(:)\s*+)?([a-z][a-zA-Z\d@_]*+)\s*(/)
+
+
+ begin
+ \b(fun)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.fun.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.fun.erlang
+ patterns
+
+
+ begin
+ (?=\()
+ end
+ (;)|(?=\bend\b)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.clauses.erlang
+
+
+ patterns
+
+
+ include
+ #internal-function-parts
+
+
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ \b(try)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.try.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.try.erlang
+ patterns
+
+
+ include
+ #internal-expression-punctuation
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ \b(begin)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.begin.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.begin.erlang
+ patterns
+
+
+ include
+ #internal-expression-punctuation
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ \b(query)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.query.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.query.erlang
+ patterns
+
+
+ include
+ #everything-else
+
+
+
+
+
+ function
+
+ begin
+ ^\s*+([a-z][a-zA-Z\d@_]*+)\s*+(?=\()
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.definition.erlang
+
+
+ end
+ (\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.terminator.function.erlang
+
+
+ name
+ meta.function.erlang
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ entity.name.function.erlang
+
+
+ match
+ ^\s*+([a-z][a-zA-Z\d@_]*+)\s*+(?=\()
+
+
+ begin
+ (?=\()
+ end
+ (;)|(?=\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.clauses.erlang
+
+
+ patterns
+
+
+ include
+ #parenthesized-expression
+
+
+ include
+ #internal-function-parts
+
+
+
+
+ include
+ #everything-else
+
+
+
+ function-call
+
+ begin
+ (?=[a-z][a-zA-Z\d@_]*+\s*+(\(|:\s*+[a-z][a-zA-Z\d@_]*+\s*+\())
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+
+ name
+ meta.function-call.erlang
+ patterns
+
+
+ begin
+ ((erlang)\s*+(:)\s*+)?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)\s*+(\()
+ beginCaptures
+
+ 2
+
+ name
+ entity.name.type.class.module.erlang
+
+ 3
+
+ name
+ punctuation.separator.module-function.erlang
+
+ 4
+
+ name
+ entity.name.function.guard.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+
+ end
+ (?=\))
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.parameters.erlang
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ (([a-z][a-zA-Z\d@_]*+)\s*+(:)\s*+)?([a-z][a-zA-Z\d@_]*+)\s*+(\()
+ beginCaptures
+
+ 2
+
+ name
+ entity.name.type.class.module.erlang
+
+ 3
+
+ name
+ punctuation.separator.module-function.erlang
+
+ 4
+
+ name
+ entity.name.function.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+
+ end
+ (?=\))
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.parameters.erlang
+
+
+ include
+ #everything-else
+
+
+
+
+
+ import-export-directive
+
+ patterns
+
+
+ begin
+ ^\s*+(-)\s*+(import)\s*+(\()\s*+([a-z][a-zA-Z\d@_]*+)\s*+(,)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.import.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.type.class.module.erlang
+
+ 5
+
+ name
+ punctuation.separator.parameters.erlang
+
+
+ end
+ (\))\s*+(\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 2
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ name
+ meta.directive.import.erlang
+ patterns
+
+
+ include
+ #internal-function-list
+
+
+
+
+ begin
+ ^\s*+(-)\s*+(export)\s*+(\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.export.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+
+ end
+ (\))\s*+(\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 2
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ name
+ meta.directive.export.erlang
+ patterns
+
+
+ include
+ #internal-function-list
+
+
+
+
+
+ internal-expression-punctuation
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.clause-head-body.erlang
+
+ 2
+
+ name
+ punctuation.separator.clauses.erlang
+
+ 3
+
+ name
+ punctuation.separator.expressions.erlang
+
+
+ match
+ (->)|(;)|(,)
+
+ internal-function-list
+
+ begin
+ (\[)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.list.begin.erlang
+
+
+ end
+ (\])
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.list.end.erlang
+
+
+ name
+ meta.structure.list.function.erlang
+ patterns
+
+
+ begin
+ ([a-z][a-zA-Z\d@_]*+)\s*+(/)
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.erlang
+
+ 2
+
+ name
+ punctuation.separator.function-arity.erlang
+
+
+ end
+ (,)|(?=\])
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.list.erlang
+
+
+ patterns
+
+
+ include
+ #everything-else
+
+
+
+
+ include
+ #everything-else
+
+
+
+ internal-function-parts
+
+ patterns
+
+
+ begin
+ (?=\()
+ end
+ (->)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.clause-head-body.erlang
+
+
+ patterns
+
+
+ begin
+ (\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.parameters.erlang
+
+
+ include
+ #everything-else
+
+
+
+
+ match
+ ,|;
+ name
+ punctuation.separator.guards.erlang
+
+
+ include
+ #everything-else
+
+
+
+
+ match
+ ,
+ name
+ punctuation.separator.expressions.erlang
+
+
+ include
+ #everything-else
+
+
+
+ internal-record-body
+
+ begin
+ (\{)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.class.record.begin.erlang
+
+
+ end
+ (?=\})
+ name
+ meta.structure.record.erlang
+ patterns
+
+
+ begin
+ (([a-z][a-zA-Z\d@_]*+)|(_))\s*+(=)
+ beginCaptures
+
+ 2
+
+ name
+ variable.other.field.erlang
+
+ 3
+
+ name
+ variable.language.omitted.field.erlang
+
+ 4
+
+ name
+ keyword.operator.assignment.erlang
+
+
+ end
+ (,)|(?=\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.class.record.erlang
+
+
+ patterns
+
+
+ include
+ #everything-else
+
+
+
+
+ captures
+
+ 1
+
+ name
+ variable.other.field.erlang
+
+ 2
+
+ name
+ punctuation.separator.class.record.erlang
+
+
+ match
+ ([a-z][a-zA-Z\d@_]*+)\s*+(,)?
+
+
+ include
+ #everything-else
+
+
+
+ internal-type-specifiers
+
+ begin
+ (/)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.separator.value-type.erlang
+
+
+ end
+ (?=,|:|>>)
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.erlang
+
+ 2
+
+ name
+ storage.modifier.signedness.erlang
+
+ 3
+
+ name
+ storage.modifier.endianness.erlang
+
+ 4
+
+ name
+ storage.modifier.unit.erlang
+
+ 5
+
+ name
+ punctuation.separator.type-specifiers.erlang
+
+
+ match
+ (integer|float|binary)|(signed|unsigned)|(big|little|native)|(unit)|(-)
+
+
+
+ keyword
+
+ match
+ \b(after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\b
+ name
+ keyword.control.erlang
+
+ list
+
+ begin
+ (\[)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.list.begin.erlang
+
+
+ end
+ (\])
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.list.end.erlang
+
+
+ name
+ meta.structure.list.erlang
+ patterns
+
+
+ match
+ \||\|\||,
+ name
+ punctuation.separator.list.erlang
+
+
+ include
+ #everything-else
+
+
+
+ macro-directive
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.ifdef.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.function.macro.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 6
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ match
+ ^\s*+(-)\s*+(ifdef)\s*+(\()\s*+([a-zA-z\d@_]++)\s*+(\))\s*+(\.)
+ name
+ meta.directive.ifdef.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.ifndef.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.function.macro.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 6
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ match
+ ^\s*+(-)\s*+(ifndef)\s*+(\()\s*+([a-zA-z\d@_]++)\s*+(\))\s*+(\.)
+ name
+ meta.directive.ifndef.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.undef.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.function.macro.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 6
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ match
+ ^\s*+(-)\s*+(undef)\s*+(\()\s*+([a-zA-z\d@_]++)\s*+(\))\s*+(\.)
+ name
+ meta.directive.undef.erlang
+
+
+
+ macro-usage
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.macro.erlang
+
+ 2
+
+ name
+ entity.name.function.macro.erlang
+
+
+ match
+ (\?\??)\s*+([a-zA-Z\d@_]++)
+ name
+ meta.macro-usage.erlang
+
+ module-directive
+
+ captures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.module.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.type.class.module.definition.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 6
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ match
+ ^\s*+(-)\s*+(module)\s*+(\()\s*+([a-z][a-zA-Z\d@_]*+)\s*+(\))\s*+(\.)
+ name
+ meta.directive.module.erlang
+
+ number
+
+ begin
+ (?=\d)
+ end
+ (?!\d)
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.integer-float.erlang
+
+ 3
+
+ name
+ punctuation.separator.float-exponent.erlang
+
+
+ match
+ \d++(\.)\d++(([eE][\+\-])?\d++)?
+ name
+ constant.numeric.float.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 2(#)[0-1]++
+ name
+ constant.numeric.integer.binary.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 3(#)[0-2]++
+ name
+ constant.numeric.integer.base-3.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 4(#)[0-3]++
+ name
+ constant.numeric.integer.base-4.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 5(#)[0-4]++
+ name
+ constant.numeric.integer.base-5.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 6(#)[0-5]++
+ name
+ constant.numeric.integer.base-6.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 7(#)[0-6]++
+ name
+ constant.numeric.integer.base-7.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 8(#)[0-7]++
+ name
+ constant.numeric.integer.octal.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 9(#)[0-8]++
+ name
+ constant.numeric.integer.base-9.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 10(#)\d++
+ name
+ constant.numeric.integer.decimal.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 11(#)[\daA]++
+ name
+ constant.numeric.integer.base-11.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 12(#)[\da-bA-B]++
+ name
+ constant.numeric.integer.base-12.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 13(#)[\da-cA-C]++
+ name
+ constant.numeric.integer.base-13.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 14(#)[\da-dA-D]++
+ name
+ constant.numeric.integer.base-14.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 15(#)[\da-eA-E]++
+ name
+ constant.numeric.integer.base-15.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 16(#)\h++
+ name
+ constant.numeric.integer.hexadecimal.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 17(#)[\da-gA-G]++
+ name
+ constant.numeric.integer.base-17.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 18(#)[\da-hA-H]++
+ name
+ constant.numeric.integer.base-18.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 19(#)[\da-iA-I]++
+ name
+ constant.numeric.integer.base-19.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 20(#)[\da-jA-J]++
+ name
+ constant.numeric.integer.base-20.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 21(#)[\da-kA-K]++
+ name
+ constant.numeric.integer.base-21.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 22(#)[\da-lA-L]++
+ name
+ constant.numeric.integer.base-22.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 23(#)[\da-mA-M]++
+ name
+ constant.numeric.integer.base-23.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 24(#)[\da-nA-N]++
+ name
+ constant.numeric.integer.base-24.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 25(#)[\da-oA-O]++
+ name
+ constant.numeric.integer.base-25.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 26(#)[\da-pA-P]++
+ name
+ constant.numeric.integer.base-26.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 27(#)[\da-qA-Q]++
+ name
+ constant.numeric.integer.base-27.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 28(#)[\da-rA-R]++
+ name
+ constant.numeric.integer.base-28.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 29(#)[\da-sA-S]++
+ name
+ constant.numeric.integer.base-29.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 30(#)[\da-tA-T]++
+ name
+ constant.numeric.integer.base-30.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 31(#)[\da-uA-U]++
+ name
+ constant.numeric.integer.base-31.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 32(#)[\da-vA-V]++
+ name
+ constant.numeric.integer.base-32.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 33(#)[\da-wA-W]++
+ name
+ constant.numeric.integer.base-33.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 34(#)[\da-xA-X]++
+ name
+ constant.numeric.integer.base-34.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 35(#)[\da-yA-Y]++
+ name
+ constant.numeric.integer.base-35.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 36(#)[\da-zA-Z]++
+ name
+ constant.numeric.integer.base-36.erlang
+
+
+ match
+ \d++#[\da-zA-Z]++
+ name
+ invalid.illegal.integer.erlang
+
+
+ match
+ \d++
+ name
+ constant.numeric.integer.decimal.erlang
+
+
+
+ parenthesized-expression
+
+ begin
+ (\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.expression.begin.erlang
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.expression.end.erlang
+
+
+ name
+ meta.expression.parenthesized
+ patterns
+
+
+ include
+ #everything-else
+
+
+
+ record-directive
+
+ begin
+ ^\s*+(-)\s*+(record)\s*+(\()\s*+([a-z][a-zA-Z\d@_]*+)\s*+(,)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.import.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.type.class.record.definition.erlang
+
+ 5
+
+ name
+ punctuation.separator.parameters.erlang
+
+
+ end
+ ((\}))\s*+(\))\s*+(\.)
+ endCaptures
+
+ 1
+
+ name
+ meta.structure.record.erlang
+
+ 2
+
+ name
+ punctuation.definition.class.record.end.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 4
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ name
+ meta.directive.record.erlang
+ patterns
+
+
+ include
+ #internal-record-body
+
+
+
+ record-usage
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.record.erlang
+
+ 2
+
+ name
+ entity.name.type.class.record.erlang
+
+ 3
+
+ name
+ punctuation.separator.record-field.erlang
+
+ 4
+
+ name
+ variable.other.field.erlang
+
+
+ match
+ (#)\s*+([a-z][a-zA-Z\d@_]*+)\s*+(\.)\s*+([a-z][a-zA-Z\d@_]*+)
+ name
+ meta.record-usage.erlang
+
+
+ begin
+ (#)\s*+([a-z][a-zA-Z\d@_]*+)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.record.erlang
+
+ 2
+
+ name
+ entity.name.type.class.record.erlang
+
+
+ end
+ ((\}))
+ endCaptures
+
+ 1
+
+ name
+ meta.structure.record.erlang
+
+ 2
+
+ name
+ punctuation.definition.class.record.end.erlang
+
+
+ name
+ meta.record-usage.erlang
+ patterns
+
+
+ include
+ #internal-record-body
+
+
+
+
+
+ string
+
+ begin
+ (")
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.erlang
+
+
+ end
+ (")
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.erlang
+
+
+ name
+ string.quoted.double.erlang
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.escape.erlang
+
+ 3
+
+ name
+ punctuation.definition.escape.erlang
+
+
+ match
+ (\\)([bdefnrstv\\'"]|(\^)[@-_]|[0-7]{1,3})
+ name
+ constant.character.escape.erlang
+
+
+ match
+ \\\^?.?
+ name
+ invalid.illegal.string.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.placeholder.erlang
+
+ 10
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+ 12
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+ 3
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+ 4
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+ 6
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+ 8
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+
+ match
+ (~)((\-)?\d++|(\*))?((\.)(\d++|(\*)))?((\.)((\*)|.))?[~cfegswpWPBX#bx\+ni]
+ name
+ constant.other.placeholder.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.placeholder.erlang
+
+ 2
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+
+ match
+ (~)(\*)?(\d++)?[~du\-#fsacl]
+ name
+ constant.other.placeholder.erlang
+
+
+ match
+ ~.?
+ name
+ invalid.illegal.string.erlang
+
+
+
+ symbolic-operator
+
+ match
+ \+\+|\+|--|-|\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!
+ name
+ keyword.operator.symbolic.erlang
+
+ textual-operator
+
+ match
+ \b(andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\b
+ name
+ keyword.operator.textual.erlang
+
+ tuple
+
+ begin
+ (\{)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.tuple.begin.erlang
+
+
+ end
+ (\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.tuple.end.erlang
+
+
+ name
+ meta.structure.tuple.erlang
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.tuple.erlang
+
+
+ include
+ #everything-else
+
+
+
+ variable
+
+ captures
+
+ 1
+
+ name
+ variable.other.erlang
+
+ 2
+
+ name
+ variable.language.omitted.erlang
+
+
+ match
+ (_[a-zA-Z\d@_]++|[A-Z][a-zA-Z\d@_]*+)|(_)
+
+
+ scopeName
+ source.erlang
+ uuid
+ 58EA597D-5158-4BF7-9FB2-B05135D1E166
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Go.tmLanguage b/app/rcc/edbee/syntaxfiles/Go.tmLanguage
new file mode 100644
index 00000000..07fec9ad
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Go.tmLanguage
@@ -0,0 +1,764 @@
+
+
+
+
+ comment
+ Go allows any Unicode character to be used in identifiers, so our identifier regex is: \b([[:alpha:]_]+[[:alnum:]_]*)\b
+ fileTypes
+
+ go
+
+ firstLineMatch
+ -[*]-( Mode:)? Go -[*]-
+ foldingStartMarker
+ (?x)
+ /\*\*(?!\*) # opening C-style comment with 2 asterisks but no third later on
+ | # OR
+ ^ # start of line...
+ (?! # ...which does NOT contain...
+ [^{(]*?// # ...a possible bunch of non-opening-braces, followed by a C++ comment
+ | # OR
+ [^{(]*?/\*(?!.*?\*/.*?[{(]) # ...a possible bunch of non-opening-braces, followed by a C comment with no ending
+ )
+ .*? # ...any characters (or none)...
+ [{(]\s* # ...followed by an open brace and zero or more whitespace...
+ ( # ...followed by...
+ $ # ...a dollar...
+ | # OR
+ // # ...a C++ comment...
+ | # OR
+ /\*(?!.*?\*/.*\S) # ...a C comment, so long as no non-whitespace chars follow it..
+ )
+
+ foldingStopMarker
+ (?<!\*)\*\*/|^\s*[})]
+ keyEquivalent
+ ^~G
+ name
+ Go
+ patterns
+
+
+ include
+ #receiver_function_declaration
+
+
+ include
+ #plain_function_declaration
+
+
+ include
+ #basic_things
+
+
+ include
+ #exported_variables
+
+
+ begin
+ ^[[:blank:]]*(import)\b\s+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.import.go
+
+
+ end
+ (?=(?://|/\*))|$
+ name
+ meta.preprocessor.go.import
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.go
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.go
+
+
+ name
+ string.quoted.double.import.go
+
+
+
+
+ include
+ #block
+
+
+ include
+ #root_parens
+
+
+ include
+ #function_calls
+
+
+ repository
+
+ access
+
+ match
+ (?<=\.)[[:alpha:]_][[:alnum:]_]*\b(?!\s*\()
+ name
+ variable.other.dot-access.go
+
+ basic_things
+
+ patterns
+
+
+ include
+ #comments
+
+
+ include
+ #initializers
+
+
+ include
+ #access
+
+
+ include
+ #strings
+
+
+ include
+ #keywords
+
+
+
+ block
+
+ begin
+ \{
+ end
+ \}
+ name
+ meta.block.go
+ patterns
+
+
+ include
+ #block_innards
+
+
+
+ block_innards
+
+ patterns
+
+
+ include
+ #function_block_innards
+
+
+ include
+ #exported_variables
+
+
+
+ comments
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ meta.toc-list.banner.block.go
+
+
+ match
+ ^/\* =(\s*.*?)\s*= \*/$\n?
+ name
+ comment.block.go
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.go
+
+
+ end
+ \*/
+ name
+ comment.block.go
+
+
+ match
+ \*/.*\n
+ name
+ invalid.illegal.stray-commend-end.go
+
+
+ captures
+
+ 1
+
+ name
+ meta.toc-list.banner.line.go
+
+
+ match
+ ^// =(\s*.*?)\s*=\s*$\n?
+ name
+ comment.line.double-slash.banner.go
+
+
+ begin
+ //
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.comment.go
+
+
+ end
+ $\n?
+ name
+ comment.line.double-slash.go
+ patterns
+
+
+ match
+ (?>\\\s*\n)
+ name
+ punctuation.separator.continuation.go
+
+
+
+
+
+ exported_variables
+
+ comment
+ This is kinda hacky, in order to get the 'var' scoped the right way again.
+ match
+ (?<=\s|\[\])([[:upper:]][[:alnum:]_]*)(?=\W+)
+ name
+ variable.exported.go
+
+ fn_parens
+
+ begin
+ \(
+ end
+ \)
+ name
+ meta.parens.go
+ patterns
+
+
+ include
+ #basic_things
+
+
+ include
+ #function_calls
+
+
+
+ function_block
+
+ begin
+ \{
+ end
+ \}
+ name
+ meta.block.go
+ patterns
+
+
+ include
+ #function_block_innards
+
+
+
+ function_block_innards
+
+ patterns
+
+
+ include
+ #basic_things
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.whitespace.support.function.leading.go
+
+ 2
+
+ name
+ support.function.builtin.go
+
+
+ match
+ (\s*)\b(new|c(lose(d)?|ap)|p(anic(ln)?|rint(ln)?)|len|make)(?:\b|\()
+
+
+ include
+ #function_block
+
+
+ include
+ #function_calls
+
+
+ include
+ #fn_parens
+
+
+
+ function_calls
+
+ captures
+
+ 1
+
+ name
+ punctuation.whitespace.function-call.leading.go
+
+ 2
+
+ name
+ support.function.any-method.go
+
+ 3
+
+ name
+ punctuation.definition.parameters.go
+
+
+ match
+ (?x)
+ (?: (?= \s ) (?:(?<=else|new|return) | (?<!\w)) (\s+) )?
+ (\b
+ (?!(for|if|else|switch|return)\s*\()
+ (?:[[:alpha:]_][[:alnum:]_]*+\b) # method name
+ )
+ \s*(\()
+
+ name
+ meta.function-call.go
+
+ initializers
+
+ patterns
+
+
+ captures
+
+ 0
+
+ name
+ variable.other.go
+
+ 1
+
+ name
+ keyword.control.go
+
+
+ comment
+ This matches the 'var x int = 0' style of variable declaration.
+ match
+ ^[[:blank:]]*(var)\s+(?:[[:alpha:]_][[:alnum:]_]*)(?:,\s+[[:alpha:]_][[:alnum:]_]*)*
+ name
+ meta.initialization.explicit.go
+
+
+ captures
+
+ 0
+
+ name
+ variable.other.go
+
+ 1
+
+ name
+ keyword.operator.initialize.go
+
+
+ comment
+ This matches the 'x := 0' style of variable declaration.
+ match
+ (?:[[:alpha:]_][[:alnum:]_]*)(?:,\s+[[:alpha:]_][[:alnum:]_]*)*\s*(:=)
+ name
+ meta.initialization.short.go
+
+
+
+ keywords
+
+ patterns
+
+
+ match
+ \b(s(truct|elect|witch)|c(ontinue|ase)|type|i(nterface|f|mport)|def(er|ault)|package|else|var|f(or|unc|allthrough)|r(eturn|ange)|go(to)?|map|break)\b
+ name
+ keyword.control.go
+
+
+ match
+ (\b|(?<=\]))(int(16|8|32|64)?|uint(16|8|32|ptr|64)?|float(32|64)?|b(yte|ool)|string)\b
+ name
+ storage.type.go
+
+
+ match
+ \b(const|chan)\b
+ name
+ storage.modifier.go
+
+
+ match
+ \b(nil|true|false|iota)\b
+ name
+ constant.language.go
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)\b
+ name
+ constant.numeric.go
+
+
+ match
+ (\<\-)|(\-\>)
+ name
+ support.channel-operator.go
+
+
+
+ plain_function_declaration
+
+ begin
+ (?x)
+ ^[[:blank:]]*(func)\s*
+ (?: ([[:alpha:]_][[:alnum:]_]*)? ) # name of function is optional
+ (?: \( ((?:[\[\]\w\d\s\/,._*&<>-]|(?:interface\{\}))*)? \) ) # required braces for parameters (even if empty)
+ \s*
+ (?: \(? ((?:[\[\]\w\d\s,._*&<>-]|(?:interface\{\}))*) \)? )? # optional return types, optionally within braces
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.go
+
+ 2
+
+ name
+ entity.name.function.go
+
+ 3
+
+ name
+ variable.parameters.go
+
+ 4
+
+ name
+ variable.return-types.go
+
+
+ end
+ (?<=\})
+ name
+ meta.function.plain.go
+ patterns
+
+
+ include
+ #comments
+
+
+
+ include
+ #function_block
+
+
+
+ receiver_function_declaration
+
+ begin
+ (?x)
+ (func)\s*
+ (?: \( ((?:[\[\]\w\d\s,._*&<>-]|(?:interface\{\}))*) \)\s+ ) # receiver variable declarations, in brackets
+ (?: ([[:alpha:]_][[:alnum:]_]*)? ) # name of function is optional
+ (?: \( ((?:[\[\]\w\d\s,._*&<>-]|(?:interface\{\}))*)? \) ) # required braces for parameters (even if empty)
+ \s*
+ (?: \(? ((?:[\[\]\w\d\s,._*&<>-]|(?:interface\{\}))*) \)? )? # optional return types, optionally within braces
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.go
+
+ 2
+
+ name
+ variable.receiver.go
+
+ 3
+
+ name
+ entity.name.function.go
+
+ 4
+
+ name
+ variable.parameters.go
+
+ 5
+
+ name
+ variable.return-types.go
+
+
+ comment
+ Version of above with support for declaring a receiver variable.
+ end
+ (?<=\})
+ name
+ meta.function.receiver.go
+ patterns
+
+
+ include
+ #comments
+
+
+
+
+ include
+ #function_block
+
+
+
+ root_parens
+
+ begin
+ \(
+ end
+ (?<=\()(\))?|(?:\))
+ endCaptures
+
+ 1
+
+ name
+ meta.parens.empty.go
+
+
+ name
+ meta.parens.go
+ patterns
+
+
+ include
+ #basic_things
+
+
+ include
+ #exported_variables
+
+
+ include
+ #function_calls
+
+
+
+ string_escaped_char
+
+ patterns
+
+
+ match
+ \\(\\|[abfnrutv'"]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|[0-7]{3})
+ name
+ constant.character.escape.go
+
+
+ match
+ \\.
+ name
+ invalid.illegal.unknown-escape.go
+
+
+
+ string_placeholder
+
+ patterns
+
+
+ match
+ (?x)%
+ (\d+\$)? # field (argument #)
+ [#0\- +']* # flags
+ [,;:_]? # separator character (AltiVec)
+ ((-?\d+)|\*(-?\d+\$)?)? # minimum field width
+ (\.((-?\d+)|\*(-?\d+\$)?)?)? # precision
+ [diouxXDOUeEfFgGaAcCsSpnvtTbyYhHmMzZ%] # conversion type
+
+ name
+ constant.other.placeholder.go
+
+
+ match
+ %
+ name
+ invalid.illegal.placeholder.go
+
+
+
+ strings
+
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.go
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.go
+
+
+ name
+ string.quoted.double.go
+ patterns
+
+
+ include
+ #string_placeholder
+
+
+ include
+ #string_escaped_char
+
+
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.go
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.go
+
+
+ name
+ string.quoted.single.go
+ patterns
+
+
+ include
+ #string_escaped_char
+
+
+
+
+ begin
+ `
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.go
+
+
+ end
+ `
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.go
+
+
+ name
+ string.quoted.raw.go
+
+
+
+
+ scopeName
+ source.go
+ uuid
+ 33100200-8916-4F78-8522-4362628C6889
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Groovy.tmLanguage b/app/rcc/edbee/syntaxfiles/Groovy.tmLanguage
new file mode 100644
index 00000000..2bb658d9
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Groovy.tmLanguage
@@ -0,0 +1,1356 @@
+
+
+
+
+ fileTypes
+
+ groovy
+ gvy
+
+ foldingStartMarker
+ (\{\s*$|^\s*// \{\{\{)
+ foldingStopMarker
+ ^\s*(\}|// \}\}\}$)
+ keyEquivalent
+ ^~G
+ name
+ Groovy
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.groovy
+
+
+ match
+ ^(#!).+$\n
+ name
+ comment.line.hashbang.groovy
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.package.groovy
+
+ 2
+
+ name
+ storage.type.package.groovy
+
+
+ match
+ ^\s*(package)\s+([^ ;]+)
+ name
+ meta.package.groovy
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.import.groovy
+
+ 2
+
+ name
+ storage.type.import.groovy
+
+
+ match
+ ^\s*(import)\s+([^ ;$]+);?
+ name
+ meta.import.groovy
+
+
+ include
+ #groovy
+
+
+ repository
+
+ class-object
+
+ patterns
+
+
+ match
+ (?x)
+ \b(
+ (?:[a-z]\w*\.)* # Optional package specification
+ [A-Z]\w+\b # Class name
+ (?:<(?:[\w, ]*)>)? # Optional Generics
+ (?:\[\s*\])* # Optional brackets (array)
+ )\b
+
+ name
+ storage.type.class.groovy
+
+
+
+ classes
+
+ begin
+ (?x)^\s*
+ (?:(?:\b(?:(public|private|protected)|(static)|(final)|(native|synchronized|abstract|threadsafe|transient))\b\s*)*) # modifier
+ (class)\s+
+ (\w+)\s* # identifier
+ captures
+
+ 1
+
+ name
+ storage.modifier.access-control.groovy
+
+ 2
+
+ name
+ storage.modifier.static.groovy
+
+ 3
+
+ name
+ storage.modifier.final.groovy
+
+ 4
+
+ name
+ storage.modifier.other.groovy
+
+ 5
+
+ name
+ storage.type.class.groovy
+
+ 6
+
+ name
+ entity.name.type.class.groovy
+
+
+ end
+ $
+ name
+ meta.definition.class.groovy
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ storage.modifier.extends.groovy
+
+ 2
+
+ name
+ entity.other.inherited-class.groovy
+
+
+ match
+ (extends)\s+([a-zA-Z0-9_\.]+(?:<(?:[a-zA-Z0-9_, ])+>)?)\s*
+ name
+ meta.definition.class.inherited.classes.groovy
+
+
+ begin
+ (implements)\s
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.implements.groovy
+
+
+ end
+ (?=\s*extends|$|\{)
+ name
+ meta.definition.class.implemented.interfaces.groovy
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ entity.other.inherited-class.interface.groovy
+
+ 2
+
+ name
+ punctuation.definition.implemented.interfaces.separator.groovy
+
+
+ match
+ ((?:[a-z]\w*.)*[A-Z]\w*)\s*(?:(,)|$|\{)
+
+
+
+
+
+ comment-block
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.groovy
+
+
+ end
+ \*/
+ name
+ comment.block.groovy
+
+ comments
+
+ patterns
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.groovy
+
+
+ match
+ /\*\*/
+ name
+ comment.block.empty.groovy
+
+
+ include
+ text.html.javadoc
+
+
+ include
+ #comment-block
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.groovy
+
+
+ match
+ (//).*$\n?
+ name
+ comment.line.double-slash.groovy
+
+
+
+ constants
+
+ patterns
+
+
+ match
+ \b([A-Z][A-Z0-9_]+)\b
+ name
+ constant.other.groovy
+
+
+ match
+ \b(true|false|null)\b
+ name
+ constant.language.groovy
+
+
+
+ groovy
+
+ patterns
+
+
+ include
+ #classes
+
+
+ include
+ #methods
+
+
+ include
+ #groovy-code
+
+
+
+ groovy-code
+
+ patterns
+
+
+ include
+ #groovy-code-minus-map-keys
+
+
+ include
+ #map-keys
+
+
+
+ groovy-code-minus-map-keys
+
+ comment
+ In some situations, maps can't be declared without enclosing []'s,
+ therefore we create a collection of everything but that
+ patterns
+
+
+ include
+ #comments
+
+
+ include
+ #support-functions
+
+
+ include
+ #keyword-language
+
+
+ include
+ #values
+
+
+ include
+ #keyword-operator
+
+
+ include
+ #storage-types
+
+
+ include
+ #storage-modifiers
+
+
+
+ keyword
+
+ patterns
+
+
+ include
+ #keyword-operator
+
+
+ include
+ #keyword-language
+
+
+
+ keyword-language
+
+ patterns
+
+
+ match
+ \b(try|catch|finally|throw)\b
+ name
+ keyword.control.exception.groovy
+
+
+ match
+ \b(return|break|continue|default|do|while|for|switch|if|else)\b
+ name
+ keyword.control.groovy
+
+
+ begin
+ \bcase\b
+ beginCaptures
+
+ 0
+
+ name
+ keyword.control.groovy
+
+
+ end
+ :
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.case-terminator.groovy
+
+
+ name
+ meta.case.groovy
+ patterns
+
+
+ include
+ #groovy-code-minus-map-keys
+
+
+
+
+ match
+ \b(new)\b
+ name
+ keyword.other.new.groovy
+
+
+ begin
+ \b(assert)\s
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.assert.groovy
+
+
+ end
+ $
+ name
+ meta.declaration.assertion.groovy
+ patterns
+
+
+ match
+ :
+ name
+ keyword.operator.assert.expression-seperator.groovy
+
+
+ include
+ #groovy-code-minus-map-keys
+
+
+
+
+ match
+ \b(throws)\b
+ name
+ keyword.other.throws.groovy
+
+
+
+ keyword-operator
+
+ patterns
+
+
+ match
+ \b(as)\b
+ name
+ keyword.operator.as.groovy
+
+
+ match
+ \b(is)\b
+ name
+ keyword.operator.is.groovy
+
+
+ match
+ \?\:
+ name
+ keyword.operator.elvis.groovy
+
+
+ match
+ \.\.
+ name
+ keyword.operator.range.groovy
+
+
+ match
+ \->
+ name
+ keyword.operator.arrow.groovy
+
+
+ match
+ <<
+ name
+ keyword.operator.leftshift.groovy
+
+
+ match
+ (?<=\S)\.(?=\S)
+ name
+ keyword.operator.navigation.groovy
+
+
+ match
+ (?<=\S)\?\.(?=\S)
+ name
+ keyword.operator.safe-navigation.groovy
+
+
+ begin
+ \?
+ beginCaptures
+
+ 0
+
+ name
+ keyword.operator.ternary.groovy
+
+
+ end
+ $
+ name
+ meta.evaluation.ternary.groovy
+ patterns
+
+
+ match
+ :
+ name
+ keyword.operator.ternary.expression-seperator.groovy
+
+
+ include
+ #groovy-code-minus-map-keys
+
+
+
+
+ match
+ ==~
+ name
+ keyword.operator.match.groovy
+
+
+ match
+ =~
+ name
+ keyword.operator.find.groovy
+
+
+ match
+ \b(instanceof)\b
+ name
+ keyword.operator.instanceof.groovy
+
+
+ match
+ (===|==|!=|<=|>=|<=>|<>|<|>|<<)
+ name
+ keyword.operator.comparison.groovy
+
+
+ match
+ =
+ name
+ keyword.operator.assignment.groovy
+
+
+ match
+ (\-\-|\+\+)
+ name
+ keyword.operator.increment-decrement.groovy
+
+
+ match
+ (\-|\+|\*|\/|%)
+ name
+ keyword.operator.arithmetic.groovy
+
+
+ match
+ (!|&&|\|\|)
+ name
+ keyword.operator.logical.groovy
+
+
+
+ map-keys
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ constant.other.key.groovy
+
+ 2
+
+ name
+ punctuation.definition.seperator.key-value.groovy
+
+
+ match
+ (\w+)\s*(:)
+
+
+
+ method-call
+
+ begin
+ (\w+)(\()
+ beginCaptures
+
+ 1
+
+ name
+ meta.method.groovy
+
+ 2
+
+ name
+ punctuation.definition.method-parameters.begin.groovy
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.method-parameters.end.groovy
+
+
+ name
+ meta.method-call.groovy
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.definition.seperator.parameter.groovy
+
+
+ include
+ #groovy-code
+
+
+
+ method-declaration-remainder
+
+ patterns
+
+
+ begin
+ \(
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.begin.groovy
+
+
+ contentName
+ meta.definition.method.parameters.groovy
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.end.groovy
+
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.parameter.groovy
+
+ 2
+
+ name
+ variable.parameter.groovy
+
+
+ match
+ (?x)\s*
+ (
+ (?:boolean|byte|char|short|int|float|long|double|(?:\w+\.)*[A-Z]\w*\b(?:<(?:[\w, ]*)>)?(?:\[\s*\])*)
+ )?
+ \s*
+ ([a-z_][A-Za-z0-9_]*) # variable
+
+ name
+ meta.definition.method.parameter.groovy
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.parameter.groovy
+
+
+ match
+ (boolean|byte|char|short|int|float|long|double|(?:\w+\.)*[A-Z]\w*\b(?:<(?:[\w, ]*)>)?(?:\[\s*\])*)
+ name
+ meta.definition.method.parameter.groovy
+
+
+ match
+ ,
+ name
+ punctuation.definition.parameters.seperator.groovy
+
+
+ include
+ #comment-block
+
+
+
+
+ begin
+ (?<=\))\s*(throws)\s
+ captures
+
+ 1
+
+ name
+ storage.modifier.throws.groovy
+
+
+ end
+ (?=$|\{)
+ name
+ meta.definition.method.throwables.groovy
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.throwable.groovy
+
+ 2
+
+ name
+ punctuation.definition.throwables.seperator.groovy
+
+
+ match
+ ((?:[a-z]\w*.)*[A-Z]\w*)\s*(?:(,)|$|\{)
+
+
+
+
+
+ methods
+
+ patterns
+
+
+ begin
+ (?x)^\s*
+ (?: # zero or more modifiers
+ (?:
+ (public|private|protected)|(final)|(native|synchronized|abstract|threadsafe|transient)
+ )
+ \s+
+ )?
+ \s*
+ ([A-Z](?:[a-zA-Z0-9_])+) # constructor/class name
+ \s*
+ (?=\()
+
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.access-control.groovy
+
+ 2
+
+ name
+ storage.modifier.final.groovy
+
+ 3
+
+ name
+ storage.modifier.other.groovy
+
+ 4
+
+ name
+ entity.name.function.constructor.groovy
+
+ 5
+
+ name
+ punctuation.definition.parameters.begin.groovy
+
+
+ end
+ {|$\n?
+ name
+ meta.definition.constructor.groovy
+ patterns
+
+
+ include
+ #method-declaration-remainder
+
+
+
+
+ begin
+ (?x)^\s*
+ (?:
+ (?: # or modifier and optional type
+ (?:(?:\b(public|private|protected)|(static)|(final)|(native|synchronized|abstract|threadsafe|transient))\b\s+)+\s* # modifier
+ (?:\b
+ (void)
+ |
+ (boolean|byte|char|short|int|float|long|double) # primitive
+ |
+ ( # or class type
+ (?:\w+\.)*[A-Z]\w+\b # Class name
+ (?:<(?:[\w, ]*)>)? # optional Generic type
+ (?:\[\s*\])* # zero or more square brackets (array)
+ )
+ )?
+ )
+ |
+ (?:\b # or type by itself
+ (def)
+ |
+ (void)
+ |
+ (boolean|byte|char|short|int|float|long|double) # primitive
+ |
+ ( # or class type
+ (?:\w+\.)*[A-Z]\w+\b # Class name
+ (?:<(?:[\w, ]*)>)? # optional generics info
+ (?:\[\s*\])* # zero or more square brackets (array)
+ )
+ )
+ )
+ \s*
+ (\w+) # method name
+ \s*
+ (?=\() # opening parens
+
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.access-control.groovy
+
+ 10
+
+ name
+ storage.type.return-type.primitive.groovy
+
+ 11
+
+ name
+ storage.type.return-type.class.groovy
+
+ 12
+
+ name
+ entity.name.function.groovy
+
+ 2
+
+ name
+ storage.modifier.static.groovy
+
+ 3
+
+ name
+ storage.modifier.final.groovy
+
+ 4
+
+ name
+ storage.modifier.other.groovy
+
+ 5
+
+ name
+ storage.type.return-type.void.groovy
+
+ 6
+
+ name
+ storage.type.return-type.primitive.groovy
+
+ 7
+
+ name
+ storage.type.return-type.class.groovy
+
+ 8
+
+ name
+ storage.type.return-type.def.groovy
+
+ 9
+
+ name
+ storage.type.return-type.void.groovy
+
+
+ end
+ {|$\n?
+ name
+ meta.definition.method.groovy
+ patterns
+
+
+ include
+ #method-declaration-remainder
+
+
+
+
+
+ nest_curly
+
+ begin
+ \{
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.groovy
+
+
+ end
+ \}
+ patterns
+
+
+ include
+ #nest_curly
+
+
+
+ numbers
+
+ patterns
+
+
+ match
+ ((0(x|X)[0-9a-fA-F]*)|(\+|-)?\b(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\b
+ name
+ constant.numeric.groovy
+
+
+
+ regexp
+
+ patterns
+
+
+ begin
+ /(?=[^/]+/)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.regexp.begin.groovy
+
+
+ end
+ /
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.regexp.end.groovy
+
+
+ name
+ string.regexp.groovy
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.groovy
+
+
+
+
+
+ storage-modifiers
+
+ patterns
+
+
+ match
+ \b(private|protected|public)\b
+ name
+ storage.modifier.access-control.groovy
+
+
+ match
+ \b(static)\b
+ name
+ storage.modifier.static.groovy
+
+
+ match
+ \b(final)\b
+ name
+ storage.modifier.final.groovy
+
+
+ match
+ \b(native|synchronized|abstract|threadsafe|transient)\b
+ name
+ storage.modifier.other.groovy
+
+
+
+ storage-types
+
+ patterns
+
+
+ begin
+ (@[^ (]+)(\()
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.annotation.groovy
+
+ 2
+
+ name
+ punctuation.definition.annotation-arguments.begin.groovy
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.annotation-arguments.end.groovy
+
+
+ name
+ meta.declaration.annotation.groovy
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ constant.other.key.groovy
+
+ 2
+
+ name
+ keyword.operator.assignment.groovy
+
+
+ match
+ (\w*)\s*(=)
+
+
+ include
+ #values
+
+
+ match
+ ,
+ name
+ punctuation.definition.seperator.groovy
+
+
+
+
+ match
+ @\S+
+ name
+ storage.type.annotation.groovy
+
+
+ match
+ \b(def)\b
+ name
+ storage.type.def.groovy
+
+
+ match
+ \b(boolean|byte|char|short|int|float|long|double)(?:\[\s*\])*\b
+ name
+ storage.type.primitive.groovy
+
+
+
+ string-quoted-double
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.groovy
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.groovy
+
+
+ name
+ string.quoted.double.groovy
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.groovy
+
+
+ match
+ \$\w+
+ name
+ variable.other.interpolated.groovy
+
+
+ begin
+ \$\{
+ captures
+
+ 0
+
+ name
+ punctuation.section.embedded.groovy
+
+
+ end
+ \}
+ name
+ source.groovy.embedded.source
+ patterns
+
+
+ include
+ #nest_curly
+
+
+
+
+
+ string-quoted-single
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.groovy
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.groovy
+
+
+ name
+ string.quoted.single.groovy
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.groovy
+
+
+
+ strings
+
+ patterns
+
+
+ include
+ #string-quoted-double
+
+
+ include
+ #string-quoted-single
+
+
+ include
+ #regexp
+
+
+
+ structures
+
+ begin
+ \[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.structure.begin.groovy
+
+
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.structure.end.groovy
+
+
+ name
+ meta.structure.groovy
+ patterns
+
+
+ include
+ #groovy-code
+
+
+ match
+ ,
+ name
+ punctuation.definition.separator.groovy
+
+
+
+ support-functions
+
+ patterns
+
+
+ match
+ (?x)\b(?:sprintf|print(?:f|ln)?)\b
+ name
+ support.function.print.groovy
+
+
+ match
+ (?x)\b(?:shouldFail|fail(?:NotEquals)?|ass(?:ume|ert(?:S(?:cript|ame)|N(?:ot(?:Same|
+ Null)|ull)|Contains|T(?:hat|oString|rue)|Inspect|Equals|False|Length|
+ ArrayEquals)))\b
+ name
+ support.function.testing.groovy
+
+
+ match
+ (?x)\b(?:sleep|inspect|dump|use|with)\b
+ name
+ support.function.other.groovy
+
+
+
+ values
+
+ patterns
+
+
+ include
+ #variables
+
+
+ include
+ #strings
+
+
+ include
+ #numbers
+
+
+ include
+ #constants
+
+
+ include
+ #class-object
+
+
+ include
+ #structures
+
+
+ include
+ #method-call
+
+
+
+ variables
+
+ patterns
+
+
+ match
+ \b(this|super)\b
+ name
+ variable.language.groovy
+
+
+
+
+ scopeName
+ source.groovy
+ uuid
+ B3A64888-EBBB-4436-8D9E-F1169C5D7613
+
+
diff --git a/app/rcc/edbee/syntaxfiles/HTML-ASP.tmLanguage b/app/rcc/edbee/syntaxfiles/HTML-ASP.tmLanguage
new file mode 100644
index 00000000..b2b8aa88
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/HTML-ASP.tmLanguage
@@ -0,0 +1,74 @@
+
+
+
+
+ fileTypes
+
+ asp
+
+ foldingStartMarker
+ (<(?i:(head|table|div|style|script|ul|ol|form|dl))\b.*?>|\{)
+ foldingStopMarker
+ (</(?i:(head|table|div|style|script|ul|ol|form|dl))>|\})
+ keyEquivalent
+ ^~A
+ name
+ HTML (ASP)
+ patterns
+
+
+ begin
+ <%=?
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.begin.asp
+
+
+ end
+ %>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.end.asp
+
+
+ name
+ source.asp.embedded.html
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.asp
+
+
+ match
+ (').*?(?=%>)
+ name
+ comment.line.apostrophe.asp
+
+
+ include
+ source.asp
+
+
+
+
+ include
+ text.html.basic
+
+
+ scopeName
+ text.html.asp
+ uuid
+ 27798CC6-6B1D-11D9-B8FA-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/HTML.tmLanguage b/app/rcc/edbee/syntaxfiles/HTML.tmLanguage
new file mode 100644
index 00000000..b1b4b4bc
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/HTML.tmLanguage
@@ -0,0 +1,978 @@
+
+
+
+
+ fileTypes
+
+ html
+ htm
+ shtml
+ xhtml
+ phtml
+ inc
+ tmpl
+ tpl
+ ctp
+
+ firstLineMatch
+ <!(?i:DOCTYPE)|<(?i:html)|<\?(?i:php)
+ foldingStartMarker
+ (?x)
+ (<(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|li|form|dl)\b.*?>
+ |<!--(?!.*--\s*>)
+ |^<!--\ \#tminclude\ (?>.*?-->)$
+ |<\?(?:php)?.*\b(if|for(each)?|while)\b.+:
+ |\{\{?(if|foreach|capture|literal|foreach|php|section|strip)
+ |\{\s*($|\?>\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/)))
+ )
+ foldingStopMarker
+ (?x)
+ (</(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|li|form|dl)>
+ |^(?!.*?<!--).*?--\s*>
+ |^<!--\ end\ tminclude\ -->$
+ |<\?(?:php)?.*\bend(if|for(each)?|while)\b
+ |\{\{?/(if|foreach|capture|literal|foreach|php|section|strip)
+ |^[^{]*\}
+ )
+ keyEquivalent
+ ^~H
+ name
+ HTML
+ patterns
+
+
+ begin
+ (<)([a-zA-Z0-9:]++)(?=[^>]*></\2>)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.begin.html
+
+ 2
+
+ name
+ entity.name.tag.html
+
+
+ end
+ (>)(<)(/)(\2)(>)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.end.html
+
+ 2
+
+ name
+ punctuation.definition.tag.begin.html meta.scope.between-tag-pair.html
+
+ 3
+
+ name
+ punctuation.definition.tag.begin.html
+
+ 4
+
+ name
+ entity.name.tag.html
+
+ 5
+
+ name
+ punctuation.definition.tag.end.html
+
+
+ name
+ meta.tag.any.html
+ patterns
+
+
+ include
+ #tag-stuff
+
+
+
+
+ begin
+ (<\?)(xml)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tag.html
+
+ 2
+
+ name
+ entity.name.tag.xml.html
+
+
+ end
+ (\?>)
+ name
+ meta.tag.preprocessor.xml.html
+ patterns
+
+
+ include
+ #tag-generic-attribute
+
+
+ include
+ #string-double-quoted
+
+
+ include
+ #string-single-quoted
+
+
+
+
+ begin
+ <!--
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.html
+
+
+ end
+ --\s*>
+ name
+ comment.block.html
+ patterns
+
+
+ match
+ --
+ name
+ invalid.illegal.bad-comments-or-CDATA.html
+
+
+ include
+ #embedded-code
+
+
+
+
+ begin
+ <!
+ captures
+
+ 0
+
+ name
+ punctuation.definition.tag.html
+
+
+ end
+ >
+ name
+ meta.tag.sgml.html
+ patterns
+
+
+ begin
+ (?i:DOCTYPE)
+ captures
+
+ 1
+
+ name
+ entity.name.tag.doctype.html
+
+
+ end
+ (?=>)
+ name
+ meta.tag.sgml.doctype.html
+ patterns
+
+
+ match
+ "[^">]*"
+ name
+ string.quoted.double.doctype.identifiers-and-DTDs.html
+
+
+
+
+ begin
+ \[CDATA\[
+ end
+ ]](?=>)
+ name
+ constant.other.inline-data.html
+
+
+ match
+ (\s*)(?!--|>)\S(\s*)
+ name
+ invalid.illegal.bad-comments-or-CDATA.html
+
+
+
+
+ include
+ #embedded-code
+
+
+ begin
+ (?:^\s+)?(<)((?i:style))\b(?![^>]*/>)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tag.html
+
+ 2
+
+ name
+ entity.name.tag.style.html
+
+ 3
+
+ name
+ punctuation.definition.tag.html
+
+
+ end
+ (</)((?i:style))(>)(?:\s*\n)?
+ name
+ source.css.embedded.html
+ patterns
+
+
+ include
+ #tag-stuff
+
+
+ begin
+ (>)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.html
+
+
+ end
+ (?=</(?i:style))
+ patterns
+
+
+ include
+ #embedded-code
+
+
+ include
+ source.css
+
+
+
+
+
+
+ begin
+ (?:^\s+)?(<)((?i:script))\b(?![^>]*/>)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.html
+
+ 2
+
+ name
+ entity.name.tag.script.html
+
+
+ end
+ (?<=</(script|SCRIPT))(>)(?:\s*\n)?
+ endCaptures
+
+ 2
+
+ name
+ punctuation.definition.tag.html
+
+
+ name
+ source.js.embedded.html
+ patterns
+
+
+ include
+ #tag-stuff
+
+
+ begin
+ (?<!</(?:script|SCRIPT))(>)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tag.html
+
+ 2
+
+ name
+ entity.name.tag.script.html
+
+
+ end
+ (</)((?i:script))
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.js
+
+
+ match
+ (//).*?((?=</script)|$\n?)
+ name
+ comment.line.double-slash.js
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.js
+
+
+ end
+ \*/|(?=</script)
+ name
+ comment.block.js
+
+
+ include
+ #php
+
+
+ include
+ source.js
+
+
+
+
+
+
+ begin
+ (</?)((?i:body|head|html)\b)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tag.begin.html
+
+ 2
+
+ name
+ entity.name.tag.structure.any.html
+
+
+ end
+ (>)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.end.html
+
+
+ name
+ meta.tag.structure.any.html
+ patterns
+
+
+ include
+ #tag-stuff
+
+
+
+
+ begin
+ (</?)((?i:address|blockquote|dd|div|dl|dt|fieldset|form|frame|frameset|h1|h2|h3|h4|h5|h6|iframe|noframes|object|ol|p|ul|applet|center|dir|hr|menu|pre)\b)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.begin.html
+
+ 2
+
+ name
+ entity.name.tag.block.any.html
+
+
+ end
+ (>)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.end.html
+
+
+ name
+ meta.tag.block.any.html
+ patterns
+
+
+ include
+ #tag-stuff
+
+
+
+
+ begin
+ (</?)((?i:a|abbr|acronym|area|b|base|basefont|bdo|big|br|button|caption|cite|code|col|colgroup|del|dfn|em|font|head|html|i|img|input|ins|isindex|kbd|label|legend|li|link|map|meta|noscript|optgroup|option|param|q|s|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|var)\b)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.begin.html
+
+ 2
+
+ name
+ entity.name.tag.inline.any.html
+
+
+ end
+ ((?: ?/)?>)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.end.html
+
+
+ name
+ meta.tag.inline.any.html
+ patterns
+
+
+ include
+ #tag-stuff
+
+
+
+
+ begin
+ (</?)([a-zA-Z0-9:]+)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.begin.html
+
+ 2
+
+ name
+ entity.name.tag.other.html
+
+
+ end
+ (>)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.end.html
+
+
+ name
+ meta.tag.other.html
+ patterns
+
+
+ include
+ #tag-stuff
+
+
+
+
+ include
+ #entities
+
+
+ match
+ <>
+ name
+ invalid.illegal.incomplete.html
+
+
+ match
+ <
+ name
+ invalid.illegal.bad-angle-bracket.html
+
+
+ repository
+
+ embedded-code
+
+ patterns
+
+
+ include
+ #ruby
+
+
+ include
+ #php
+
+
+
+ include
+ #python
+
+
+
+ entities
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.html
+
+ 3
+
+ name
+ punctuation.definition.entity.html
+
+
+ match
+ (&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)
+ name
+ constant.character.entity.html
+
+
+ match
+ &
+ name
+ invalid.illegal.bad-ampersand.html
+
+
+
+ php
+
+ begin
+ (?=(^\s*)?<\?)
+ end
+ (?!(^\s*)?<\?)
+ patterns
+
+
+ include
+ source.php
+
+
+
+ python
+
+ begin
+ (?:^\s*)<\?python(?!.*\?>)
+ end
+ \?>(?:\s*$\n)?
+ name
+ source.python.embedded.html
+ patterns
+
+
+ include
+ source.python
+
+
+
+ ruby
+
+ patterns
+
+
+ begin
+ <%+#
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.erb
+
+
+ end
+ %>
+ name
+ comment.block.erb
+
+
+ begin
+ <%+(?!>)=?
+ captures
+
+ 0
+
+ name
+ punctuation.section.embedded.ruby
+
+
+ end
+ -?%>
+ name
+ source.ruby.embedded.html
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.ruby
+
+
+ match
+ (#).*?(?=-?%>)
+ name
+ comment.line.number-sign.ruby
+
+
+ include
+ source.ruby
+
+
+
+
+ begin
+ <\?r(?!>)=?
+ captures
+
+ 0
+
+ name
+ punctuation.section.embedded.ruby.nitro
+
+
+ end
+ -?\?>
+ name
+ source.ruby.nitro.embedded.html
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.ruby.nitro
+
+
+ match
+ (#).*?(?=-?\?>)
+ name
+ comment.line.number-sign.ruby.nitro
+
+
+ include
+ source.ruby
+
+
+
+
+
+
+ string-double-quoted
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.html
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.html
+
+
+ name
+ string.quoted.double.html
+ patterns
+
+
+ include
+ #embedded-code
+
+
+ include
+ #entities
+
+
+
+ string-single-quoted
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.html
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.html
+
+
+ name
+ string.quoted.single.html
+ patterns
+
+
+ include
+ #embedded-code
+
+
+ include
+ #entities
+
+
+
+ tag-generic-attribute
+
+ match
+ \b([a-zA-Z\-:]+)
+ name
+ entity.other.attribute-name.html
+
+ tag-id-attribute
+
+ begin
+ \b(id)\b\s*(=)
+ captures
+
+ 1
+
+ name
+ entity.other.attribute-name.id.html
+
+ 2
+
+ name
+ punctuation.separator.key-value.html
+
+
+ end
+ (?<='|")
+ name
+ meta.attribute-with-value.id.html
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.html
+
+
+ contentName
+ meta.toc-list.id.html
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.html
+
+
+ name
+ string.quoted.double.html
+ patterns
+
+
+ include
+ #embedded-code
+
+
+ include
+ #entities
+
+
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.html
+
+
+ contentName
+ meta.toc-list.id.html
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.html
+
+
+ name
+ string.quoted.single.html
+ patterns
+
+
+ include
+ #embedded-code
+
+
+ include
+ #entities
+
+
+
+
+
+ tag-stuff
+
+ patterns
+
+
+ include
+ #tag-id-attribute
+
+
+ include
+ #tag-generic-attribute
+
+
+ include
+ #string-double-quoted
+
+
+ include
+ #string-single-quoted
+
+
+ include
+ #embedded-code
+
+
+
+
+ scopeName
+ text.html.basic
+ uuid
+ 17994EC8-6B1D-11D9-AC3A-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Haskell.tmLanguage b/app/rcc/edbee/syntaxfiles/Haskell.tmLanguage
new file mode 100644
index 00000000..b0bf1eac
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Haskell.tmLanguage
@@ -0,0 +1,646 @@
+
+
+
+
+ fileTypes
+
+ hs
+
+ keyEquivalent
+ ^~H
+ name
+ Haskell
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.haskell
+
+ 2
+
+ name
+ punctuation.definition.entity.haskell
+
+
+ comment
+ In case this regex seems unusual for an infix operator, note that Haskell allows any ordinary function application (elem 4 [1..10]) to be rewritten as an infix expression (4 `elem` [1..10]).
+ match
+ (`)[a-zA-Z_']*?(`)
+ name
+ keyword.operator.function.infix.haskell
+
+
+ match
+ \(\)
+ name
+ constant.language.unit.haskell
+
+
+ match
+ \[\]
+ name
+ constant.language.empty-list.haskell
+
+
+ begin
+ (module)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.haskell
+
+
+ end
+ (where)
+ endCaptures
+
+ 1
+
+ name
+ keyword.other.haskell
+
+
+ name
+ meta.declaration.module.haskell
+ patterns
+
+
+ include
+ #module_name
+
+
+ include
+ #module_exports
+
+
+ match
+ [a-z]+
+ name
+ invalid
+
+
+
+
+ begin
+ \b(class)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.haskell
+
+
+ end
+ \b(where)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.other.haskell
+
+
+ name
+ meta.declaration.class.haskell
+ patterns
+
+
+ match
+ \b(Monad|Functor|Eq|Ord|Read|Show|Num|(Frac|Ra)tional|Enum|Bounded|Real(Frac|Float)?|Integral|Floating)\b
+ name
+ support.class.prelude.haskell
+
+
+ match
+ [A-Z][A-Za-z_']*
+ name
+ entity.other.inherited-class.haskell
+
+
+ match
+ \b[a-z][a-zA-Z0-9_']*\b
+ name
+ variable.other.generic-type.haskell
+
+
+
+
+ begin
+ \b(instance)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.haskell
+
+
+ end
+ \b(where)\b|$
+ endCaptures
+
+ 1
+
+ name
+ keyword.other.haskell
+
+
+ name
+ meta.declaration.instance.haskell
+ patterns
+
+
+ include
+ #type_signature
+
+
+
+
+ begin
+ (import)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.haskell
+
+
+ end
+ ($|;)
+ name
+ meta.import.haskell
+ patterns
+
+
+ match
+ (qualified|as|hiding)
+ name
+ keyword.other.haskell
+
+
+ include
+ #module_name
+
+
+ include
+ #module_exports
+
+
+
+
+ begin
+ (deriving)\s*\(
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.haskell
+
+
+ end
+ \)
+ name
+ meta.deriving.haskell
+ patterns
+
+
+ match
+ \b[A-Z][a-zA-Z_']*
+ name
+ entity.other.inherited-class.haskell
+
+
+
+
+ match
+ \b(deriving|where|data|type|case|of|let|in|newtype|default)\b
+ name
+ keyword.other.haskell
+
+
+ match
+ \binfix[lr]?\b
+ name
+ keyword.operator.haskell
+
+
+ match
+ \b(do|if|then|else)\b
+ name
+ keyword.control.haskell
+
+
+ comment
+ Floats are always decimal
+ match
+ \b([0-9]+\.[0-9]+([eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\b
+ name
+ constant.numeric.float.haskell
+
+
+ match
+ \b([0-9]+|0([xX][0-9a-fA-F]+|[oO][0-7]+))\b
+ name
+ constant.numeric.haskell
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.preprocessor.c
+
+
+ comment
+ In addition to Haskell's "native" syntax, GHC permits the C preprocessor to be run on a source file.
+ match
+ ^\s*(#)\s*\w+
+ name
+ meta.preprocessor.c
+
+
+ include
+ #pragma
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.haskell
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.haskell
+
+
+ name
+ string.quoted.double.haskell
+ patterns
+
+
+ match
+ \\(NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\"'\&])
+ name
+ constant.character.escape.haskell
+
+
+ match
+ \\o[0-7]+|\\x[0-9A-Fa-f]+|\\[0-9]+
+ name
+ constant.character.escape.octal.haskell
+
+
+ match
+ \^[A-Z@\[\]\\\^_]
+ name
+ constant.character.escape.control.haskell
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.haskell
+
+ 2
+
+ name
+ constant.character.escape.haskell
+
+ 3
+
+ name
+ constant.character.escape.octal.haskell
+
+ 4
+
+ name
+ constant.character.escape.hexadecimal.haskell
+
+ 5
+
+ name
+ constant.character.escape.control.haskell
+
+ 6
+
+ name
+ punctuation.definition.string.end.haskell
+
+
+ match
+ (?x)
+ (')
+ (?:
+ [\ -\[\]-~] # Basic Char
+ | (\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE
+ |DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS
+ |US|SP|DEL|[abfnrtv\\\"'\&])) # Escapes
+ | (\\o[0-7]+) # Octal Escapes
+ | (\\x[0-9A-Fa-f]+) # Hexadecimal Escapes
+ | (\^[A-Z@\[\]\\\^_]) # Control Chars
+ )
+ (')
+
+ name
+ string.quoted.single.haskell
+
+
+ begin
+ ^\s*([a-z_][a-zA-Z0-9_']*|\([|!%$+\-.,=</>]+\))\s*(::)
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.haskell
+
+ 2
+
+ name
+ keyword.other.double-colon.haskell
+
+
+ end
+ $\n?
+ name
+ meta.function.type-declaration.haskell
+ patterns
+
+
+ include
+ #type_signature
+
+
+
+
+ match
+ \b(Just|Nothing|Left|Right|True|False|LT|EQ|GT|\(\)|\[\])\b
+ name
+ support.constant.haskell
+
+
+ match
+ \b[A-Z]\w*\b
+ name
+ constant.other.haskell
+
+
+ include
+ #comments
+
+
+ match
+ \b(abs|acos|acosh|all|and|any|appendFile|applyM|asTypeOf|asin|asinh|atan|atan2|atanh|break|catch|ceiling|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|div|divMod|drop|dropWhile|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromEnum|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|head|id|init|interact|ioError|isDenormalized|isIEEE|isInfinite|isNaN|isNegativeZero|iterate|last|lcm|length|lex|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|odd|or|otherwise|pi|pred|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|read|readFile|readIO|readList|readLn|readParen|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showList|showParen|showString|shows|showsPrec|significand|signum|sin|sinh|snd|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|toEnum|toInteger|toRational|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b
+ name
+ support.function.prelude.haskell
+
+
+ include
+ #infix_op
+
+
+ comment
+ In case this regex seems overly general, note that Haskell permits the definition of new operators which can be nearly any string of punctuation characters, such as $%^&*.
+ match
+ [|!%$?~+:\-.=</>\\]+
+ name
+ keyword.operator.haskell
+
+
+ match
+ ,
+ name
+ punctuation.separator.comma.haskell
+
+
+ repository
+
+ block_comment
+
+ applyEndPatternLast
+ 1
+ begin
+ \{-(?!#)
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.haskell
+
+
+ end
+ -\}
+ name
+ comment.block.haskell
+ patterns
+
+
+ include
+ #block_comment
+
+
+
+ comments
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.haskell
+
+
+ match
+ (--).*$\n?
+ name
+ comment.line.double-dash.haskell
+
+
+ include
+ #block_comment
+
+
+
+ infix_op
+
+ match
+ (\([|!%$+:\-.=</>]+\)|\(,+\))
+ name
+ entity.name.function.infix.haskell
+
+ module_exports
+
+ begin
+ \(
+ end
+ \)
+ name
+ meta.declaration.exports.haskell
+ patterns
+
+
+ match
+ \b[a-z][a-zA-Z_'0-9]*
+ name
+ entity.name.function.haskell
+
+
+ match
+ \b[A-Z][A-Za-z_'0-9]*
+ name
+ storage.type.haskell
+
+
+ match
+ ,
+ name
+ punctuation.separator.comma.haskell
+
+
+ include
+ #infix_op
+
+
+ comment
+ So named because I don't know what to call this.
+ match
+ \(.*?\)
+ name
+ meta.other.unknown.haskell
+
+
+
+ module_name
+
+ match
+ [A-Z][A-Za-z._']*
+ name
+ support.other.module.haskell
+
+ pragma
+
+ begin
+ \{-#
+ end
+ #-\}
+ name
+ meta.preprocessor.haskell
+ patterns
+
+
+ match
+ \b(LANGUAGE|UNPACK|INLINE)\b
+ name
+ keyword.other.preprocessor.haskell
+
+
+
+ type_signature
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ entity.other.inherited-class.haskell
+
+ 2
+
+ name
+ variable.other.generic-type.haskell
+
+ 3
+
+ name
+ keyword.other.big-arrow.haskell
+
+
+ match
+ \(\s*([A-Z][A-Za-z]*)\s+([a-z][A-Za-z_']*)\)\s*(=>)
+ name
+ meta.class-constraint.haskell
+
+
+ include
+ #pragma
+
+
+ match
+ ->
+ name
+ keyword.other.arrow.haskell
+
+
+ match
+ =>
+ name
+ keyword.other.big-arrow.haskell
+
+
+ match
+ \b(Int(eger)?|Maybe|Either|Bool|Float|Double|Char|String|Ordering|ShowS|ReadS|FilePath|IO(Error)?)\b
+ name
+ support.type.prelude.haskell
+
+
+ match
+ \b[a-z][a-zA-Z0-9_']*\b
+ name
+ variable.other.generic-type.haskell
+
+
+ match
+ \b[A-Z][a-zA-Z0-9_']*\b
+ name
+ storage.type.haskell
+
+
+ match
+ \(\)
+ name
+ support.constant.unit.haskell
+
+
+ include
+ #comments
+
+
+
+
+ scopeName
+ source.haskell
+ uuid
+ 5C034675-1F6D-497E-8073-369D37E2FD7D
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Java.tmLanguage b/app/rcc/edbee/syntaxfiles/Java.tmLanguage
new file mode 100644
index 00000000..dcdbbae7
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Java.tmLanguage
@@ -0,0 +1,1129 @@
+
+
+
+
+ fileTypes
+
+ java
+ bsh
+
+ foldingStartMarker
+ (\{\s*(//.*)?$|^\s*// \{\{\{)
+ foldingStopMarker
+ ^\s*(\}|// \}\}\}$)
+ keyEquivalent
+ ^~J
+ name
+ Java
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.package.java
+
+ 2
+
+ name
+ storage.modifier.package.java
+
+ 3
+
+ name
+ punctuation.terminator.java
+
+
+ match
+ ^\s*(package)\b(?:\s*([^ ;$]+)\s*(;)?)?
+ name
+ meta.package.java
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.import.java
+
+ 2
+
+ name
+ storage.modifier.import.java
+
+ 3
+
+ name
+ punctuation.terminator.java
+
+
+ match
+ ^\s*(import)\b(?:\s*([^ ;$]+)\s*(;)?)?
+ name
+ meta.import.java
+
+
+ include
+ #code
+
+
+ repository
+
+ all-types
+
+ patterns
+
+
+ include
+ #primitive-arrays
+
+
+ include
+ #primitive-types
+
+
+ include
+ #object-types
+
+
+
+ annotations
+
+ patterns
+
+
+ begin
+ (@[^ (]+)(\()
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.annotation.java
+
+ 2
+
+ name
+ punctuation.definition.annotation-arguments.begin.java
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.annotation-arguments.end.java
+
+
+ name
+ meta.declaration.annotation.java
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ constant.other.key.java
+
+ 2
+
+ name
+ keyword.operator.assignment.java
+
+
+ match
+ (\w*)\s*(=)
+
+
+ include
+ #code
+
+
+ match
+ ,
+ name
+ punctuation.seperator.property.java
+
+
+
+
+ match
+ @\w*
+ name
+ storage.type.annotation.java
+
+
+
+ anonymous-classes-and-new
+
+ begin
+ \bnew\b
+ beginCaptures
+
+ 0
+
+ name
+ keyword.control.new.java
+
+
+ end
+ (?<=\)|\])(?!\s*{)|(?<=})|(?=;)
+ patterns
+
+
+ begin
+ (\w+)\s*(?=\[)
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.java
+
+
+ end
+ }|(?=;|\))
+ patterns
+
+
+ begin
+ \[
+ end
+ \]
+ patterns
+
+
+ include
+ #code
+
+
+
+
+ begin
+ {
+ end
+ (?=})
+ patterns
+
+
+ include
+ #code
+
+
+
+
+
+
+ begin
+ (?=\w.*\()
+ end
+ (?<=\))
+ patterns
+
+
+ include
+ #object-types
+
+
+ begin
+ \(
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.java
+
+
+ end
+ \)
+ patterns
+
+
+ include
+ #code
+
+
+
+
+
+
+ begin
+ {
+ end
+ }
+ name
+ meta.inner-class.java
+ patterns
+
+
+ include
+ #class-body
+
+
+
+
+
+ assertions
+
+ patterns
+
+
+ begin
+ \b(assert)\s
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.assert.java
+
+
+ end
+ $
+ name
+ meta.declaration.assertion.java
+ patterns
+
+
+ match
+ :
+ name
+ keyword.operator.assert.expression-seperator.java
+
+
+ include
+ #code
+
+
+
+
+
+ class
+
+ begin
+ (?=\w?[\w\s]*(?:class|(?:@)?interface|enum)\s+\w+)
+ end
+ }
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.class.end.java
+
+
+ name
+ meta.class.java
+ patterns
+
+
+ include
+ #storage-modifiers
+
+
+ include
+ #comments
+
+
+ captures
+
+ 1
+
+ name
+ storage.modifier.java
+
+ 2
+
+ name
+ entity.name.type.class.java
+
+
+ match
+ (class|(?:@)?interface|enum)\s+(\w+)
+ name
+ meta.class.identifier.java
+
+
+ begin
+ extends
+ beginCaptures
+
+ 0
+
+ name
+ storage.modifier.extends.java
+
+
+ end
+ (?={|implements)
+ name
+ meta.definition.class.inherited.classes.java
+ patterns
+
+
+ include
+ #object-types-inherited
+
+
+ include
+ #comments
+
+
+
+
+ begin
+ (implements)\s
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.implements.java
+
+
+ end
+ (?=\s*extends|\{)
+ name
+ meta.definition.class.implemented.interfaces.java
+ patterns
+
+
+ include
+ #object-types-inherited
+
+
+ include
+ #comments
+
+
+
+
+ begin
+ {
+ end
+ (?=})
+ name
+ meta.class.body.java
+ patterns
+
+
+ include
+ #class-body
+
+
+
+
+
+ class-body
+
+ patterns
+
+
+ include
+ #comments
+
+
+ include
+ #class
+
+
+ include
+ #enums
+
+
+ include
+ #methods
+
+
+ include
+ #annotations
+
+
+ include
+ #storage-modifiers
+
+
+ include
+ #code
+
+
+
+ code
+
+ patterns
+
+
+ include
+ #comments
+
+
+ include
+ #class
+
+
+ begin
+ {
+ end
+ }
+ patterns
+
+
+ include
+ #code
+
+
+
+
+ include
+ #assertions
+
+
+ include
+ #parens
+
+
+ include
+ #constants-and-special-vars
+
+
+ include
+ #anonymous-classes-and-new
+
+
+ include
+ #keywords
+
+
+ include
+ #storage-modifiers
+
+
+ include
+ #strings
+
+
+ include
+ #all-types
+
+
+
+ comments
+
+ patterns
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.java
+
+
+ match
+ /\*\*/
+ name
+ comment.block.empty.java
+
+
+ include
+ text.html.javadoc
+
+
+ include
+ #comments-inline
+
+
+
+ comments-inline
+
+ patterns
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.java
+
+
+ end
+ \*/
+ name
+ comment.block.java
+
+
+ captures
+
+ 1
+
+ name
+ comment.line.double-slash.java
+
+ 2
+
+ name
+ punctuation.definition.comment.java
+
+
+ match
+ \s*((//).*$\n?)
+
+
+
+ constants-and-special-vars
+
+ patterns
+
+
+ match
+ \b(true|false|null)\b
+ name
+ constant.language.java
+
+
+ match
+ \b(this|super)\b
+ name
+ variable.language.java
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\b
+ name
+ constant.numeric.java
+
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.dereference.java
+
+
+ match
+ (\.)?\b([A-Z][A-Z0-9_]+)(?!<|\.class|\s*\w+\s*=)\b
+ name
+ constant.other.java
+
+
+
+ enums
+
+ begin
+ ^(?=\s*[A-Z0-9_]+\s*({|\(|,))
+ end
+ (?=;|})
+ patterns
+
+
+ begin
+ \w+
+ beginCaptures
+
+ 0
+
+ name
+ constant.other.enum.java
+
+
+ end
+ (?=,|;|})
+ name
+ meta.enum.java
+ patterns
+
+
+ include
+ #parens
+
+
+ begin
+ {
+ end
+ }
+ patterns
+
+
+ include
+ #class-body
+
+
+
+
+
+
+
+ keywords
+
+ patterns
+
+
+ match
+ \b(try|catch|finally|throw)\b
+ name
+ keyword.control.catch-exception.java
+
+
+ match
+ \?|:
+ name
+ keyword.control.java
+
+
+ match
+ \b(return|break|case|continue|default|do|while|for|switch|if|else)\b
+ name
+ keyword.control.java
+
+
+ match
+ \b(instanceof)\b
+ name
+ keyword.operator.java
+
+
+ match
+ (==|!=|<=|>=|<>|<|>)
+ name
+ keyword.operator.comparison.java
+
+
+ match
+ (=)
+ name
+ keyword.operator.assignment.java
+
+
+ match
+ (\-\-|\+\+)
+ name
+ keyword.operator.increment-decrement.java
+
+
+ match
+ (\-|\+|\*|\/|%)
+ name
+ keyword.operator.arithmetic.java
+
+
+ match
+ (!|&&|\|\|)
+ name
+ keyword.operator.logical.java
+
+
+ match
+ (?<=\S)\.(?=\S)
+ name
+ keyword.operator.dereference.java
+
+
+ match
+ ;
+ name
+ punctuation.terminator.java
+
+
+
+ methods
+
+ begin
+ (?!new)(?=\w.*\s+)(?=[^=]+\()
+ end
+ }|(?=;)
+ name
+ meta.method.java
+ patterns
+
+
+ include
+ #storage-modifiers
+
+
+ begin
+ (\w+)\s*\(
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.java
+
+
+ end
+ \)
+ name
+ meta.method.identifier.java
+ patterns
+
+
+ include
+ #parameters
+
+
+
+
+ begin
+ (?=\w.*\s+\w+\s*\()
+ end
+ (?=\w+\s*\()
+ name
+ meta.method.return-type.java
+ patterns
+
+
+ include
+ #all-types
+
+
+
+
+ include
+ #throws
+
+
+ begin
+ {
+ end
+ (?=})
+ name
+ meta.method.body.java
+ patterns
+
+
+ include
+ #code
+
+
+
+
+
+ object-types
+
+ patterns
+
+
+ begin
+ \b((?:[a-z]\w*\.)*[A-Z]+\w*)<
+ end
+ >|[^\w\s,\?<\[\]]
+ name
+ storage.type.generic.java
+ patterns
+
+
+ include
+ #object-types
+
+
+ begin
+ <
+ comment
+ This is just to support <>'s with no actual type prefix
+ end
+ >|[^\w\s,\[\]<]
+ name
+ storage.type.generic.java
+
+
+
+
+ begin
+ \b((?:[a-z]\w*\.)*[A-Z]+\w*)(?=\[)
+ end
+ (?=[^\]\s])
+ name
+ storage.type.object.array.java
+ patterns
+
+
+ begin
+ \[
+ end
+ \]
+ patterns
+
+
+ include
+ #code
+
+
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.dereference.java
+
+
+ match
+ \b(?:[a-z]\w*(\.))*[A-Z]+\w*\b
+ name
+ storage.type.java
+
+
+
+ object-types-inherited
+
+ patterns
+
+
+ begin
+ \b((?:[a-z]\w*\.)*[A-Z]+\w*)<
+ end
+ >|[^\w\s,<]
+ name
+ entity.other.inherited-class.java
+ patterns
+
+
+ include
+ #object-types
+
+
+ begin
+ <
+ comment
+ This is just to support <>'s with no actual type prefix
+ end
+ >|[^\w\s,<]
+ name
+ storage.type.generic.java
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.dereference.java
+
+
+ match
+ \b(?:[a-z]\w*(\.))*[A-Z]+\w*
+ name
+ entity.other.inherited-class.java
+
+
+
+ parameters
+
+ patterns
+
+
+ match
+ final
+ name
+ storage.modifier.java
+
+
+ include
+ #primitive-arrays
+
+
+ include
+ #primitive-types
+
+
+ include
+ #object-types
+
+
+ match
+ \w+
+ name
+ variable.parameter.java
+
+
+
+ parens
+
+ begin
+ \(
+ end
+ \)
+ patterns
+
+
+ include
+ #code
+
+
+
+ primitive-arrays
+
+ patterns
+
+
+ match
+ \b(?:void|boolean|byte|char|short|int|float|long|double)(\[\])*\b
+ name
+ storage.type.primitive.array.java
+
+
+
+ primitive-types
+
+ patterns
+
+
+ match
+ \b(?:void|boolean|byte|char|short|int|float|long|double)\b
+ name
+ storage.type.primitive.java
+
+
+
+ storage-modifiers
+
+ captures
+
+ 1
+
+ name
+ storage.modifier.java
+
+
+ match
+ \b(public|private|protected|static|final|native|synchronized|abstract|threadsafe|transient)\b
+
+ strings
+
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.java
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.java
+
+
+ name
+ string.quoted.double.java
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.java
+
+
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.java
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.java
+
+
+ name
+ string.quoted.single.java
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.java
+
+
+
+
+
+ throws
+
+ begin
+ throws
+ beginCaptures
+
+ 0
+
+ name
+ storage.modifier.java
+
+
+ end
+ (?={|;)
+ name
+ meta.throwables.java
+ patterns
+
+
+ include
+ #object-types
+
+
+
+ values
+
+ patterns
+
+
+ include
+ #strings
+
+
+ include
+ #object-types
+
+
+ include
+ #constants-and-special-vars
+
+
+
+
+ scopeName
+ source.java
+ uuid
+ 2B449DF6-6B1D-11D9-94EC-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/JavaDoc.tmLanguage b/app/rcc/edbee/syntaxfiles/JavaDoc.tmLanguage
new file mode 100644
index 00000000..dc572e57
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/JavaDoc.tmLanguage
@@ -0,0 +1,737 @@
+
+
+
+
+ fileTypes
+
+ foldingStartMarker
+ /\*\*
+ foldingStopMarker
+ \*\*/
+ name
+ JavaDoc
+ patterns
+
+
+ begin
+ (/\*\*)\s*$
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.comment.begin.javadoc
+
+
+ end
+ \*/
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.comment.javadoc
+
+
+ name
+ comment.block.documentation.javadoc
+ patterns
+
+
+ include
+ #invalid
+
+
+ begin
+ \*\s*(?=\w)
+ contentName
+ text.html
+ end
+ (?=\s*\*\s*@)|(?=\s*\*\s*/)
+ name
+ meta.documentation.comment.javadoc
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \*\s*((\@)param)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.documentation.param.javadoc
+
+ 2
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ text.html
+ end
+ (?=\s*\*\s*@)|(?=\s*\*\s*/)
+ name
+ meta.documentation.tag.param.javadoc
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \*\s*((\@)return)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.documentation.return.javadoc
+
+ 2
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ text.html
+ end
+ (?=\s*\*\s*@)|(?=\s*\*\s*/)
+ name
+ meta.documentation.tag.return.javadoc
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \*\s*((\@)throws)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.documentation.throws.javadoc
+
+ 2
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ text.html
+ end
+ (?=\s*\*\s*@)|(?=\s*\*\s*/)
+ name
+ meta.documentation.tag.throws.javadoc
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \*\s*((\@)exception)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.documentation.exception.javadoc
+
+ 2
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ text.html
+ end
+ (?=\s*\*\s*@)|(?=\s*\*\s*/)
+ name
+ meta.documentation.tag.exception.javadoc
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \*\s*((\@)author)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.documentation.author.javadoc
+
+ 2
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ text.html
+ end
+ (?=\s*\*\s*@)|(?=\s*\*\s*/)
+ name
+ meta.documentation.tag.author.javadoc
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \*\s*((\@)version)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.documentation.version.javadoc
+
+ 2
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ text.html
+ end
+ (?=\s*\*\s*@)|(?=\s*\*\s*/)
+ name
+ meta.documentation.tag.version.javadoc
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \*\s*((\@)see)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.documentation.see.javadoc
+
+ 2
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ text.html
+ end
+ (?=\s*\*\s*@)|(?=\s*\*\s*/)
+ name
+ meta.documentation.tag.see.javadoc
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \*\s*((\@)since)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.documentation.since.javadoc
+
+ 2
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ text.html
+ end
+ (?=\s*\*\s*@)|(?=\s*\*\s*/)
+ name
+ meta.documentation.tag.since.javadoc
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \*\s*((\@)serial)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.documentation.serial.javadoc
+
+ 2
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ text.html
+ end
+ (?=\s*\*\s*@)|(?=\s*\*\s*/)
+ name
+ meta.documentation.tag.serial.javadoc
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \*\s*((\@)serialField)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.documentation.serialField.javadoc
+
+ 2
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ text.html
+ end
+ (?=\s*\*\s*@)|(?=\s*\*\s*/)
+ name
+ meta.documentation.tag.serialField.javadoc
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \*\s*((\@)serialData)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.documentation.serialData.javadoc
+
+ 2
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ text.html
+ end
+ (?=\s*\*\s*@)|(?=\s*\*\s*/)
+ name
+ meta.documentation.tag.serialData.javadoc
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \*\s*((\@)deprecated)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.documentation.deprecated.javadoc
+
+ 2
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ text.html
+ end
+ (?=\s*\*\s*@)|(?=\s*\*\s*/)
+ name
+ meta.documentation.tag.deprecated.javadoc
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.documentation.custom.javadoc
+
+ 2
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ match
+ \*\s*((\@)\S+)\s
+
+
+
+
+ repository
+
+ inline
+
+ patterns
+
+
+ include
+ #invalid
+
+
+ include
+ #inline-formatting
+
+
+ include
+ text.html.basic
+
+
+ match
+ ((https?|s?ftp|ftps|file|smb|afp|nfs|(x-)?man|gopher|txmt)://|mailto:)[-:@a-zA-Z0-9_.~%+/?=&#]+(?<![.?:])
+ name
+ markup.underline.link
+
+
+
+ inline-formatting
+
+ patterns
+
+
+ begin
+ (\{)((\@)code)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.directive.begin.javadoc
+
+ 2
+
+ name
+ keyword.other.documentation.directive.code.javadoc
+
+ 3
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ markup.raw.code.javadoc
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.directive.end.javadoc
+
+
+ name
+ meta.directive.code.javadoc
+ patterns
+
+
+
+ begin
+ (\{)((\@)literal)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.directive.begin.javadoc
+
+ 2
+
+ name
+ keyword.other.documentation.directive.literal.javadoc
+
+ 3
+
+ name
+ punctuation.definition.keyword.javadoc
+
+
+ contentName
+ markup.raw.literal.javadoc
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.directive.end.javadoc
+
+
+ name
+ meta.directive.literal.javadoc
+ patterns
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.directive.begin.javadoc
+
+ 2
+
+ name
+ keyword.other.documentation.directive.docRoot.javadoc
+
+ 3
+
+ name
+ punctuation.definition.keyword.javadoc
+
+ 4
+
+ name
+ punctuation.definition.directive.end.javadoc
+
+
+ match
+ (\{)((\@)docRoot)(\})
+ name
+ meta.directive.docRoot.javadoc
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.directive.begin.javadoc
+
+ 2
+
+ name
+ keyword.other.documentation.directive.inheritDoc.javadoc
+
+ 3
+
+ name
+ punctuation.definition.keyword.javadoc
+
+ 4
+
+ name
+ punctuation.definition.directive.end.javadoc
+
+
+ match
+ (\{)((\@)inheritDoc)(\})
+ name
+ meta.directive.inheritDoc.javadoc
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.directive.begin.javadoc
+
+ 2
+
+ name
+ keyword.other.documentation.directive.link.javadoc
+
+ 3
+
+ name
+ punctuation.definition.keyword.javadoc
+
+ 4
+
+ name
+ markup.underline.link.javadoc
+
+ 5
+
+ name
+ string.other.link.title.javadoc
+
+ 6
+
+ name
+ punctuation.definition.directive.end.javadoc
+
+
+ match
+ (\{)((\@)link)(?:\s+(\S+?))?(?:\s+(.+?))?\s*(\})
+ name
+ meta.directive.link.javadoc
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.directive.begin.javadoc
+
+ 2
+
+ name
+ keyword.other.documentation.directive.linkplain.javadoc
+
+ 3
+
+ name
+ punctuation.definition.keyword.javadoc
+
+ 4
+
+ name
+ markup.underline.linkplain.javadoc
+
+ 5
+
+ name
+ string.other.link.title.javadoc
+
+ 6
+
+ name
+ punctuation.definition.directive.end.javadoc
+
+
+ match
+ (\{)((\@)linkplain)(?:\s+(\S+?))?(?:\s+(.+?))?\s*(\})
+ name
+ meta.directive.linkplain.javadoc
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.directive.begin.javadoc
+
+ 2
+
+ name
+ keyword.other.documentation.directive.value.javadoc
+
+ 3
+
+ name
+ punctuation.definition.keyword.javadoc
+
+ 4
+
+ name
+ variable.other.javadoc
+
+ 5
+
+ name
+ punctuation.definition.directive.end.javadoc
+
+
+ match
+ (\{)((\@)value)\s*(\S+?)?\s*(\})
+ name
+ meta.directive.value.javadoc
+
+
+
+ invalid
+
+ patterns
+
+
+ match
+ ^(?!\s*\*).*$\n?
+ name
+ invalid.illegal.missing-asterisk.javadoc
+
+
+
+
+ scopeName
+ text.html.javadoc
+ uuid
+ 64BB98A4-59D4-474E-9091-C1E1D04BDD03
+
+
diff --git a/app/rcc/edbee/syntaxfiles/JavaScript.tmLanguage b/app/rcc/edbee/syntaxfiles/JavaScript.tmLanguage
new file mode 100644
index 00000000..e4bb3bc9
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/JavaScript.tmLanguage
@@ -0,0 +1,723 @@
+
+
+
+
+ comment
+ JavaScript Syntax: version 2.0
+ fileTypes
+
+ js
+ htc
+ jsx
+
+ firstLineMatch
+ ^#!/usr/bin/env node
+ foldingStartMarker
+ ^.*\bfunction\s*(\w+\s*)?\([^\)]*\)(\s*\{[^\}]*)?\s*$
+ foldingStopMarker
+ ^\s*\}
+ keyEquivalent
+ ^~J
+ name
+ JavaScript
+ patterns
+
+
+ comment
+ node.js shebang
+ match
+ ^#!/usr/bin/env node
+ name
+ comment.line.js
+
+
+ captures
+
+ 1
+
+ name
+ support.class.js
+
+ 2
+
+ name
+ support.constant.js
+
+ 3
+
+ name
+ keyword.operator.js
+
+
+ comment
+ match stuff like: Sound.prototype = { … } when extending an object
+ match
+ ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*(=)\s*
+ name
+ meta.class.js
+
+
+ captures
+
+ 1
+
+ name
+ support.class.js
+
+ 2
+
+ name
+ support.constant.js
+
+ 3
+
+ name
+ entity.name.function.js
+
+ 4
+
+ name
+ keyword.operator.js
+
+ 5
+
+ name
+ storage.type.function.js
+
+ 6
+
+ name
+ punctuation.definition.parameters.begin.js
+
+ 7
+
+ name
+ variable.parameter.function.js
+
+ 8
+
+ name
+ punctuation.definition.parameters.end.js
+
+
+ comment
+ match stuff like: Sound.prototype.play = function() { … }
+ match
+ ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*(=)\s*(function)?\s*(\()(.*?)(\))
+ name
+ meta.function.prototype.js
+
+
+ captures
+
+ 1
+
+ name
+ support.class.js
+
+ 2
+
+ name
+ support.constant.js
+
+ 3
+
+ name
+ entity.name.function.js
+
+ 4
+
+ name
+ keyword.operator.js
+
+
+ comment
+ match stuff like: Sound.prototype.play = myfunc
+ match
+ ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*(=)\s*
+ name
+ meta.function.js
+
+
+ captures
+
+ 1
+
+ name
+ support.class.js
+
+ 2
+
+ name
+ entity.name.function.js
+
+ 3
+
+ name
+ keyword.operator.js
+
+ 4
+
+ name
+ storage.type.function.js
+
+ 5
+
+ name
+ punctuation.definition.parameters.begin.js
+
+ 6
+
+ name
+ variable.parameter.function.js
+
+ 7
+
+ name
+ punctuation.definition.parameters.end.js
+
+
+ comment
+ match stuff like: Sound.play = function() { … }
+ match
+ ([a-zA-Z_?.$][\w?.$]*)\.([a-zA-Z_?.$][\w?.$]*)\s*(=)\s*(function)\s*(\()(.*?)(\))
+ name
+ meta.function.js
+
+
+ captures
+
+ 1
+
+ name
+ entity.name.function.js
+
+ 2
+
+ name
+ keyword.operator.js
+
+ 3
+
+ name
+ storage.type.function.js
+
+ 4
+
+ name
+ punctuation.definition.parameters.begin.js
+
+ 5
+
+ name
+ variable.parameter.function.js
+
+ 6
+
+ name
+ punctuation.definition.parameters.end.js
+
+
+ comment
+ match stuff like: play = function() { … }
+ match
+ ([a-zA-Z_?$][\w?$]*)\s*(=)\s*(function)\s*(\()(.*?)(\))
+ name
+ meta.function.js
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.function.js
+
+ 2
+
+ name
+ entity.name.function.js
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.js
+
+ 4
+
+ name
+ variable.parameter.function.js
+
+ 5
+
+ name
+ punctuation.definition.parameters.end.js
+
+
+ comment
+ match regular function like: function myFunc(arg) { … }
+ match
+ \b(function)\s+([a-zA-Z_$]\w*)?\s*(\()(.*?)(\))
+ name
+ meta.function.js
+
+
+ captures
+
+ 1
+
+ name
+ entity.name.function.js
+
+ 2
+
+ name
+ storage.type.function.js
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.js
+
+ 4
+
+ name
+ variable.parameter.function.js
+
+ 5
+
+ name
+ punctuation.definition.parameters.end.js
+
+
+ comment
+ match stuff like: foobar: function() { … }
+ match
+ \b([a-zA-Z_?.$][\w?.$]*)\s*:\s*\b(function)?\s*(\()(.*?)(\))
+ name
+ meta.function.json.js
+
+
+ captures
+
+ 1
+
+ name
+ string.quoted.single.js
+
+ 10
+
+ name
+ punctuation.definition.parameters.begin.js
+
+ 11
+
+ name
+ variable.parameter.function.js
+
+ 12
+
+ name
+ punctuation.definition.parameters.end.js
+
+ 2
+
+ name
+ punctuation.definition.string.begin.js
+
+ 3
+
+ name
+ entity.name.function.js
+
+ 4
+
+ name
+ punctuation.definition.string.end.js
+
+ 5
+
+ name
+ string.quoted.double.js
+
+ 6
+
+ name
+ punctuation.definition.string.begin.js
+
+ 7
+
+ name
+ entity.name.function.js
+
+ 8
+
+ name
+ punctuation.definition.string.end.js
+
+ 9
+
+ name
+ entity.name.function.js
+
+
+ comment
+ Attempt to match "foo": function
+ match
+ (?:((')([^']*)('))|((")([^"]*)(")))\s*:\s*\b(function)?\s*(\()([^)]*)(\))
+
+ name
+ meta.function.json.js
+
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.new.js
+
+ 2
+
+ name
+ entity.name.type.instance.js
+
+
+ match
+ (new)\s+(\w+(?:\.\w*)?)
+ name
+ meta.class.instance.constructor
+
+
+ match
+ \b(console)\b
+ name
+ entity.name.type.object.js.firebug
+
+
+ match
+ \.(warn|info|log|error|time|timeEnd|assert)\b
+ name
+ support.function.js.firebug
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?))\b
+ name
+ constant.numeric.js
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.js
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.js
+
+
+ name
+ string.quoted.single.js
+ patterns
+
+
+ match
+ \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)
+ name
+ constant.character.escape.js
+
+
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.js
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.js
+
+
+ name
+ string.quoted.double.js
+ patterns
+
+
+ match
+ \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)
+ name
+ constant.character.escape.js
+
+
+
+
+ begin
+ /\*\*(?!/)
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.js
+
+
+ end
+ \*/
+ name
+ comment.block.documentation.js
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.js
+
+
+ end
+ \*/
+ name
+ comment.block.js
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.js
+
+
+ match
+ (//).*$\n?
+ name
+ comment.line.double-slash.js
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.html.js
+
+ 2
+
+ name
+ punctuation.definition.comment.html.js
+
+
+ match
+ (<!--|-->)
+ name
+ comment.block.html.js
+
+
+ match
+ \b(boolean|byte|char|class|double|enum|float|function|int|interface|long|short|var|void)\b
+ name
+ storage.type.js
+
+
+ match
+ \b(const|export|extends|final|implements|native|private|protected|public|static|synchronized|throws|transient|volatile)\b
+ name
+ storage.modifier.js
+
+
+ match
+ \b(break|case|catch|continue|default|do|else|finally|for|goto|if|import|package|return|switch|throw|try|while)\b
+ name
+ keyword.control.js
+
+
+ match
+ \b(delete|in|instanceof|new|typeof|with)\b
+ name
+ keyword.operator.js
+
+
+ match
+ \btrue\b
+ name
+ constant.language.boolean.true.js
+
+
+ match
+ \bfalse\b
+ name
+ constant.language.boolean.false.js
+
+
+ match
+ \bnull\b
+ name
+ constant.language.null.js
+
+
+ match
+ \b(super|this)\b
+ name
+ variable.language.js
+
+
+ match
+ \b(debugger)\b
+ name
+ keyword.other.js
+
+
+ match
+ \b(Anchor|Applet|Area|Array|Boolean|Button|Checkbox|Date|document|event|FileUpload|Form|Frame|Function|Hidden|History|Image|JavaArray|JavaClass|JavaObject|JavaPackage|java|Layer|Link|Location|Math|MimeType|Number|navigator|netscape|Object|Option|Packages|Password|Plugin|Radio|RegExp|Reset|Select|String|Style|Submit|screen|sun|Text|Textarea|window|XMLHttpRequest)\b
+ name
+ support.class.js
+
+
+ match
+ \b(s(h(ift|ow(Mod(elessDialog|alDialog)|Help))|croll(X|By(Pages|Lines)?|Y|To)?|t(op|rike)|i(n|zeToContent|debar|gnText)|ort|u(p|b(str(ing)?)?)|pli(ce|t)|e(nd|t(Re(sizable|questHeader)|M(i(nutes|lliseconds)|onth)|Seconds|Ho(tKeys|urs)|Year|Cursor|Time(out)?|Interval|ZOptions|Date|UTC(M(i(nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(ome|andleEvent)|navigate|c(har(CodeAt|At)|o(s|n(cat|textual|firm)|mpile)|eil|lear(Timeout|Interval)?|a(ptureEvents|ll)|reate(StyleSheet|Popup|EventObject))|t(o(GMTString|S(tring|ource)|U(TCString|pperCase)|Lo(caleString|werCase))|est|a(n|int(Enabled)?))|i(s(NaN|Finite)|ndexOf|talics)|d(isableExternalCapture|ump|etachEvent)|u(n(shift|taint|escape|watch)|pdateCommands)|j(oin|avaEnabled)|p(o(p|w)|ush|lugins.refresh|a(ddings|rse(Int|Float)?)|r(int|ompt|eference))|e(scape|nableExternalCapture|val|lementFromPoint|x(p|ec(Script|Command)?))|valueOf|UTC|queryCommand(State|Indeterm|Enabled|Value)|f(i(nd|le(ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(nt(size|color)|rward)|loor|romCharCode)|watch|l(ink|o(ad|g)|astIndexOf)|a(sin|nchor|cos|t(tachEvent|ob|an(2)?)|pply|lert|b(s|ort))|r(ou(nd|teEvents)|e(size(By|To)|calc|turnValue|place|verse|l(oad|ease(Capture|Events)))|andom)|g(o|et(ResponseHeader|M(i(nutes|lliseconds)|onth)|Se(conds|lection)|Hours|Year|Time(zoneOffset)?|Da(y|te)|UTC(M(i(nutes|lliseconds)|onth)|Seconds|Hours|Da(y|te)|FullYear)|FullYear|A(ttention|llResponseHeaders)))|m(in|ove(B(y|elow)|To(Absolute)?|Above)|ergeAttributes|a(tch|rgins|x))|b(toa|ig|o(ld|rderWidths)|link|ack))\b(?=\()
+ name
+ support.function.js
+
+
+ match
+ \b(s(ub(stringData|mit)|plitText|e(t(NamedItem|Attribute(Node)?)|lect))|has(ChildNodes|Feature)|namedItem|c(l(ick|o(se|neNode))|reate(C(omment|DATASection|aption)|T(Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(ntityReference|lement)|Attribute))|tabIndex|i(nsert(Row|Before|Cell|Data)|tem)|open|delete(Row|C(ell|aption)|T(Head|Foot)|Data)|focus|write(ln)?|a(dd|ppend(Child|Data))|re(set|place(Child|Data)|move(NamedItem|Child|Attribute(Node)?)?)|get(NamedItem|Element(sBy(Name|TagName)|ById)|Attribute(Node)?)|blur)\b(?=\()
+ name
+ support.function.dom.js
+
+
+ match
+ (?<=\.)(s(ystemLanguage|cr(ipts|ollbars|een(X|Y|Top|Left))|t(yle(Sheets)?|atus(Text|bar)?)|ibling(Below|Above)|ource|uffixes|e(curity(Policy)?|l(ection|f)))|h(istory|ost(name)?|as(h|Focus))|y|X(MLDocument|SLDocument)|n(ext|ame(space(s|URI)|Prop))|M(IN_VALUE|AX_VALUE)|c(haracterSet|o(n(structor|trollers)|okieEnabled|lorDepth|mp(onents|lete))|urrent|puClass|l(i(p(boardData)?|entInformation)|osed|asses)|alle(e|r)|rypto)|t(o(olbar|p)|ext(Transform|Indent|Decoration|Align)|ags)|SQRT(1_2|2)|i(n(ner(Height|Width)|put)|ds|gnoreCase)|zIndex|o(scpu|n(readystatechange|Line)|uter(Height|Width)|p(sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(i(splay|alog(Height|Top|Width|Left|Arguments)|rectories)|e(scription|fault(Status|Ch(ecked|arset)|View)))|u(ser(Profile|Language|Agent)|n(iqueID|defined)|pdateInterval)|_content|p(ixelDepth|ort|ersonalbar|kcs11|l(ugins|atform)|a(thname|dding(Right|Bottom|Top|Left)|rent(Window|Layer)?|ge(X(Offset)?|Y(Offset)?))|r(o(to(col|type)|duct(Sub)?|mpter)|e(vious|fix)))|e(n(coding|abledPlugin)|x(ternal|pando)|mbeds)|v(isibility|endor(Sub)?|Linkcolor)|URLUnencoded|P(I|OSITIVE_INFINITY)|f(ilename|o(nt(Size|Family|Weight)|rmName)|rame(s|Element)|gColor)|E|whiteSpace|l(i(stStyleType|n(eHeight|kColor))|o(ca(tion(bar)?|lName)|wsrc)|e(ngth|ft(Context)?)|a(st(M(odified|atch)|Index|Paren)|yer(s|X)|nguage))|a(pp(MinorVersion|Name|Co(deName|re)|Version)|vail(Height|Top|Width|Left)|ll|r(ity|guments)|Linkcolor|bove)|r(ight(Context)?|e(sponse(XML|Text)|adyState))|global|x|m(imeTypes|ultiline|enubar|argin(Right|Bottom|Top|Left))|L(N(10|2)|OG(10E|2E))|b(o(ttom|rder(Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(Color|Image)))\b
+ name
+ support.constant.js
+
+
+ match
+ (?<=\.)(s(hape|ystemId|c(heme|ope|rolling)|ta(ndby|rt)|ize|ummary|pecified|e(ctionRowIndex|lected(Index)?)|rc)|h(space|t(tpEquiv|mlFor)|e(ight|aders)|ref(lang)?)|n(o(Resize|tation(s|Name)|Shade|Href|de(Name|Type|Value)|Wrap)|extSibling|ame)|c(h(ildNodes|Off|ecked|arset)?|ite|o(ntent|o(kie|rds)|de(Base|Type)?|l(s|Span|or)|mpact)|ell(s|Spacing|Padding)|l(ear|assName)|aption)|t(ype|Bodies|itle|Head|ext|a(rget|gName)|Foot)|i(sMap|ndex|d|m(plementation|ages))|o(ptions|wnerDocument|bject)|d(i(sabled|r)|o(c(type|umentElement)|main)|e(clare|f(er|ault(Selected|Checked|Value)))|at(eTime|a))|useMap|p(ublicId|arentNode|r(o(file|mpt)|eviousSibling))|e(n(ctype|tities)|vent|lements)|v(space|ersion|alue(Type)?|Link|Align)|URL|f(irstChild|orm(s)?|ace|rame(Border)?)|width|l(ink(s)?|o(ngDesc|wSrc)|a(stChild|ng|bel))|a(nchors|c(ce(ssKey|pt(Charset)?)|tion)|ttributes|pplets|l(t|ign)|r(chive|eas)|xis|Link|bbr)|r(ow(s|Span|Index)|ules|e(v|ferrer|l|adOnly))|m(ultiple|e(thod|dia)|a(rgin(Height|Width)|xLength))|b(o(dy|rder)|ackground|gColor))\b
+ name
+ support.constant.dom.js
+
+
+ match
+ \b(ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR|WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR)\b
+ name
+ support.constant.dom.js
+
+
+ match
+ \bon(R(ow(s(inserted|delete)|e(nter|xit))|e(s(ize(start|end)?|et)|adystatechange))|Mouse(o(ut|ver)|down|up|move)|B(efore(cut|deactivate|u(nload|pdate)|p(aste|rint)|editfocus|activate)|lur)|S(croll|top|ubmit|elect(start|ionchange)?)|H(over|elp)|C(hange|ont(extmenu|rolselect)|ut|ellchange|l(ick|ose))|D(eactivate|ata(setc(hanged|omplete)|available)|r(op|ag(start|over|drop|en(ter|d)|leave)?)|blclick)|Unload|P(aste|ropertychange)|Error(update)?|Key(down|up|press)|Focus|Load|A(ctivate|fter(update|print)|bort))\b
+ name
+ support.function.event-handler.js
+
+
+ match
+ !|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|(?<!\()/=|%=|\+=|\-=|&=|\^=|\b(in|instanceof|new|delete|typeof|void)\b
+ name
+ keyword.operator.js
+
+
+ match
+ \b(Infinity|NaN|undefined)\b
+ name
+ constant.language.js
+
+
+ begin
+ (?<=[=(:]|^|return|&&|\|\||!)\s*(/)(?![/*+{}?])
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.js
+
+
+ end
+ (/)[igm]*
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.js
+
+
+ name
+ string.regexp.js
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.js
+
+
+
+
+ match
+ \;
+ name
+ punctuation.terminator.statement.js
+
+
+ match
+ ,[ |\t]*
+ name
+ meta.delimiter.object.comma.js
+
+
+ match
+ \.
+ name
+ meta.delimiter.method.period.js
+
+
+ match
+ \{|\}
+ name
+ meta.brace.curly.js
+
+
+ match
+ \(|\)
+ name
+ meta.brace.round.js
+
+
+ match
+ \[|\]
+ name
+ meta.brace.square.js
+
+
+ scopeName
+ source.js
+ uuid
+ 93E017CC-6F27-11D9-90EB-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/LaTeX Beamer.tmLanguage b/app/rcc/edbee/syntaxfiles/LaTeX Beamer.tmLanguage
new file mode 100644
index 00000000..33176c98
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/LaTeX Beamer.tmLanguage
@@ -0,0 +1,106 @@
+
+
+
+
+ fileTypes
+
+ firstLineMatch
+ ^\\documentclass(\[.*\])?\{beamer\}
+ foldingStartMarker
+ \\begin\{.*\}|%.*\(fold\)\s*$
+ foldingStopMarker
+ \\end\{.*\}|%.*\(end\)\s*$
+ keyEquivalent
+ ^~B
+ name
+ LaTeX Beamer
+ patterns
+
+
+ begin
+ (?:\s*)((\\)begin)(\{)(frame)(\})
+ captures
+
+ 1
+
+ name
+ support.function.be.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+ 4
+
+ name
+ variable.parameter.function.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.end.latex
+
+
+ end
+ ((\\)end)(\{)(frame)(\})
+ name
+ meta.function.environment.frame.latex
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ captures
+
+ 1
+
+ name
+ support.function.frametitle.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+ 4
+
+ name
+ entity.name.function.frame.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.end.latex
+
+
+ match
+ ((\\)frametitle)(\{)(.*)(\})
+ name
+ meta.function.frametitle.latex
+
+
+ include
+ text.tex.latex
+
+
+ scopeName
+ text.tex.latex.beamer
+ uuid
+ 2ACA20AA-B008-469B-A04A-6DE232973ED8
+
+
diff --git a/app/rcc/edbee/syntaxfiles/LaTeX.tmLanguage b/app/rcc/edbee/syntaxfiles/LaTeX.tmLanguage
new file mode 100644
index 00000000..8055dcb9
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/LaTeX.tmLanguage
@@ -0,0 +1,1554 @@
+
+
+
+
+ fileTypes
+
+ tex
+
+ firstLineMatch
+ ^\\documentclass(?!.*\{beamer\})
+ foldingStartMarker
+ \\begin\{.*\}|%.*\(fold\)\s*$
+ foldingStopMarker
+ \\end\{.*\}|%.*\(end\)\s*$
+ keyEquivalent
+ ^~L
+ name
+ LaTeX
+ patterns
+
+
+ match
+ (?=\s)(?<=\\[\w@]|\\[\w@]{2}|\\[\w@]{3}|\\[\w@]{4}|\\[\w@]{5}|\\[\w@]{6})\s
+ name
+ meta.space-after-command.latex
+
+
+ begin
+ ((\\)(?:usepackage|documentclass))(?:(\[)([^\]]*)(\]))?(\{)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.preamble.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+ 4
+
+ name
+ variable.parameter.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.end.latex
+
+ 6
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+
+ contentName
+ support.class.latex
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.arguments.end.latex
+
+
+ name
+ meta.preamble.latex
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ((\\)(?:include|input))(\{)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.include.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+
+ contentName
+ support.class.latex
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.arguments.end.latex
+
+
+ name
+ meta.include.latex
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (?x)
+ ( # Capture 1
+ (\\) # Marker
+ (?:
+ (?:sub){0,2}section # Functions
+ | (?:sub)?paragraph
+ | chapter|part|addpart
+ | addchap|addsec|minisec
+ )
+ (?:\*)? # Optional Unnumbered
+ )
+ (?:
+ (\[)([^\[]*?)(\]) # Optional Title
+ )??
+ (\{) # Opening Bracket
+
+ beginCaptures
+
+ 1
+
+ name
+ support.function.section.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.optional.begin.latex
+
+ 4
+
+ name
+ entity.name.section.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.optional.end.latex
+
+ 6
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+
+ comment
+ this works OK with all kinds of crazy stuff as long as section is one line
+ contentName
+ entity.name.section.latex
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.arguments.end.latex
+
+
+ name
+ meta.function.section.latex
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (?:\s*)((\\)begin)(\{)(lstlisting)(\})(?:(\[).*(\]))?(\s*%\s*(?i:Java)\n?)
+ captures
+
+ 1
+
+ name
+ support.function.be.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+ 4
+
+ name
+ variable.parameter.function.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.end.latex
+
+ 6
+
+ name
+ punctuation.definition.arguments.optional.begin.latex
+
+ 7
+
+ name
+ punctuation.definition.arguments.optional.end.latex
+
+ 8
+
+ name
+ comment.line.percentage.latex
+
+
+ contentName
+ source.java.embedded
+ end
+ ((\\)end)(\{)(lstlisting)(\})
+ name
+ meta.function.embedded.java.latex
+ patterns
+
+
+ include
+ source.java
+
+
+
+
+ begin
+ (?:\s*)((\\)begin)(\{)(lstlisting)(\})(?:(\[).*(\]))?(\s*%\s*(?i:Python)\n?)
+ captures
+
+ 1
+
+ name
+ support.function.be.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+ 4
+
+ name
+ variable.parameter.function.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.end.latex
+
+ 6
+
+ name
+ punctuation.definition.arguments.optional.begin.latex
+
+ 7
+
+ name
+ punctuation.definition.arguments.optional.end.latex
+
+ 8
+
+ name
+ comment.line.percentage.latex
+
+
+ comment
+ Put the lstlisting match before the more general environment listing. Someday it would be nice to make this rule general enough to figure out which language is inside the lstlisting environment rather than my own personal use for python. --Brad
+ contentName
+ source.python.embedded
+ end
+ ((\\)end)(\{)(lstlisting)(\})
+ name
+ meta.function.embedded.python.latex
+ patterns
+
+
+ include
+ source.python
+
+
+
+
+ begin
+ (?:\s*)((\\)begin)(\{)(lstlisting)(\})(?:(\[).*(\]))?(\s*%.*\n?)?
+ captures
+
+ 1
+
+ name
+ support.function.be.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+ 4
+
+ name
+ variable.parameter.function.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.end.latex
+
+ 6
+
+ name
+ punctuation.definition.arguments.optional.begin.latex
+
+ 7
+
+ name
+ punctuation.definition.arguments.optional.end.latex
+
+ 8
+
+ name
+ comment.line.percentage.latex
+
+
+ comment
+ Put the lstlisting match before the more general environment listing. Someday it would be nice to make this rule general enough to figure out which language is inside the lstlisting environment rather than my own personal use for python. --Brad
+ contentName
+ source.generic.embedded
+ end
+ ((\\)end)(\{)(lstlisting)(\})
+ name
+ meta.function.embedded.generic.latex
+
+
+ begin
+ (?:\s*)((\\)begin)(\{)((?:V|v)erbatim|alltt)(\})
+ captures
+
+ 1
+
+ name
+ support.function.be.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+ 4
+
+ name
+ variable.parameter.function.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.end.latex
+
+
+ contentName
+ markup.raw.verbatim.latex
+ end
+ ((\\)end)(\{)(\4)(\})
+ name
+ meta.function.verbatim.latex
+
+
+ captures
+
+ 1
+
+ name
+ support.function.url.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+ 4
+
+ name
+ markup.underline.link.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.end.latex
+
+
+ match
+ (?:\s*)((\\)(?:url|href))(\{)([^}]*)(\})
+ name
+ meta.function.link.url.latex
+
+
+ captures
+
+ 1
+
+ name
+ support.function.be.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+ 4
+
+ name
+ variable.parameter.function.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.end.latex
+
+
+ comment
+ These two patterns match the \begin{document} and \end{document} commands, so that the environment matching pattern following them will ignore those commands.
+ match
+ (?:\s*)((\\)begin)(\{)(document)(\})
+ name
+ meta.function.begin-document.latex
+
+
+ captures
+
+ 1
+
+ name
+ support.function.be.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+ 4
+
+ name
+ variable.parameter.function.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.end.latex
+
+
+ match
+ (?:\s*)((\\)end)(\{)(document)(\})
+ name
+ meta.function.end-document.latex
+
+
+ begin
+ (?x)
+ (?:\s*) # Optional whitespace
+ ((\\)begin) # Marker - Function
+ (\{) # Open Bracket
+ (
+ (?:
+ align|equation|eqnarray # Argument
+ | multline|aligned|alignat
+ | split|gather|gathered
+ )
+ (?:\*)? # Optional Unnumbered
+ )
+ (\}) # Close Bracket
+ (\s*\n)? # Match to end of line absent of content
+
+ captures
+
+ 1
+
+ name
+ support.function.be.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+ 4
+
+ name
+ variable.parameter.function.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.end.latex
+
+
+ contentName
+ string.other.math.block.environment.latex
+ end
+ (?x)
+ (?:\s*) # Optional whitespace
+ ((\\)end) # Marker - Function
+ (\{) # Open Bracket
+ (\4) # Previous capture from begin
+ (\}) # Close Bracket
+ (?:\s*\n)? # Match to end of line absent of content
+
+ name
+ meta.function.environment.math.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ (?x)
+ (?:\s*) # Optional whitespace
+ ((\\)begin) # Marker - Function
+ (\{) # Open Bracket
+ (array|tabular[xy*]?)
+ (\}) # Close Bracket
+ (\s*\n)? # Match to end of line absent of content
+
+ captures
+
+ 1
+
+ name
+ support.function.be.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+ 4
+
+ name
+ variable.parameter.function.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.end.latex
+
+
+ contentName
+ meta.data.environment.tabular.latex
+ end
+ (?x)
+ (?:\s*) # Optional whitespace
+ ((\\)end) # Marker - Function
+ (\{) # Open Bracket
+ (\4) # Previous capture from begin
+ (\}) # Close Bracket
+ (?:\s*\n)? # Match to end of line absent of content
+
+ name
+ meta.function.environment.tabular.latex
+ patterns
+
+
+ match
+ \\
+ name
+ punctuation.definition.table.row.latex
+
+
+ begin
+ (?:^|(?<=\\\\))(?!\\\\|\s*\\end\{(?:tabular|array))
+ end
+ (?=\\\\|\s*\\end\{(?:tabular|array))
+ name
+ meta.row.environment.tabular.latex
+ patterns
+
+
+ match
+ &
+ name
+ punctuation.definition.table.cell.latex
+
+
+ begin
+ (?:^|(?<=&))((?!&|\\\\|$))
+ end
+ (?=&|\\\\|\s*\\end\{(?:tabular|array))
+ name
+ meta.cell.environment.tabular.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ include
+ $base
+
+
+
+
+ include
+ $base
+
+
+
+
+ begin
+ (?:\s*)((\\)begin)(\{)(itemize|enumerate|description|list)(\})
+ captures
+
+ 1
+
+ name
+ support.function.be.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.latex
+
+ 4
+
+ name
+ variable.parameter.function.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.latex
+
+
+ end
+ ((\\)end)(\{)(\4)(\})(?:\s*\n)?
+ name
+ meta.function.environment.list.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ (?:\s*)((\\)begin)(\{)(\w+[*]?)(\})
+ captures
+
+ 1
+
+ name
+ support.function.be.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.latex
+
+ 4
+
+ name
+ variable.parameter.function.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.latex
+
+
+ end
+ ((\\)end)(\{)(\4)(\})(?:\s*\n)?
+ name
+ meta.function.environment.general.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.function.latex
+
+
+ match
+ (\\)(newcommand|renewcommand)\b
+ name
+ storage.type.function.latex
+
+
+ begin
+ ((\\)marginpar)(\{)
+ beginCaptures
+
+ 1
+
+ name
+ support.function.marginpar.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.marginpar.begin.latex
+
+
+ contentName
+ meta.paragraph.margin.latex
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.marginpar.end.latex
+
+
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ ((\\)footnote)(\{)
+ beginCaptures
+
+ 1
+
+ name
+ support.function.footnote.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.footnote.begin.latex
+
+
+ contentName
+ meta.footnote.latex
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.footnote.end.latex
+
+
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ ((\\)emph)(\{)
+ beginCaptures
+
+ 1
+
+ name
+ support.function.emph.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.emph.begin.latex
+
+
+ contentName
+ markup.italic.emph.latex
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.emph.end.latex
+
+
+ name
+ meta.function.emph.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ ((\\)textit)(\{)
+ captures
+
+ 1
+
+ name
+ support.function.textit.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.textit.begin.latex
+
+
+ comment
+ We put the keyword in a capture and name this capture, so that disabling spell checking for “keyword” won't be inherited by the argument to \textit{...}.
+
+Put specific matches for particular LaTeX keyword.functions before the last two more general functions
+ contentName
+ markup.italic.textit.latex
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.textit.end.latex
+
+
+ name
+ meta.function.textit.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ ((\\)textbf)(\{)
+ captures
+
+ 1
+
+ name
+ support.function.textbf.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.textbf.begin.latex
+
+
+ contentName
+ markup.bold.textbf.latex
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.textbf.end.latex
+
+
+ name
+ meta.function.textbf.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ ((\\)texttt)(\{)
+ captures
+
+ 1
+
+ name
+ support.function.texttt.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.texttt.begin.latex
+
+
+ contentName
+ markup.raw.texttt.latex
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.texttt.end.latex
+
+
+ name
+ meta.function.texttt.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ captures
+
+ 0
+
+ name
+ keyword.other.item.latex
+
+ 1
+
+ name
+ punctuation.definition.keyword.latex
+
+
+ match
+ (\\)item\b
+ name
+ meta.scope.item.latex
+
+
+ begin
+ (?x)
+ (
+ (\\) # Marker
+ (?:foot)?(?:full)?(?:no)?(?:short)? # Function Name
+ [cC]ite
+ (?:al)?(?:t|p|author|year(?:par)?|title)?[ANP]*
+ \*? # Optional Unabreviated
+ )
+ (?:(\[)[^\]]*(\]))? # Optional
+ (?:(\[)[^\]]*(\]))? # Arguments
+ (\{) # Opening Bracket
+
+ captures
+
+ 1
+
+ name
+ keyword.control.cite.latex
+
+ 2
+
+ name
+ punctuation.definition.keyword.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.optional.begin.latex
+
+ 4
+
+ name
+ punctuation.definition.arguments.optional.end.latex
+
+ 5
+
+ name
+ punctuation.definition.arguments.optional.begin.latex
+
+ 6
+
+ name
+ punctuation.definition.arguments.optional.end.latex
+
+ 7
+
+ name
+ punctuation.definition.arguments.latex
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.arguments.latex
+
+
+ name
+ meta.citation.latex
+ patterns
+
+
+ match
+ [\w:.]+
+ name
+ constant.other.reference.citation.latex
+
+
+
+
+ begin
+ ((\\)(?:\w*[r|R]ef\*?))(\{)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.ref.latex
+
+ 2
+
+ name
+ punctuation.definition.keyword.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+
+ name
+ meta.reference.label.latex
+ patterns
+
+
+ match
+ [a-zA-Z0-9\.,:/*!^_-]
+ name
+ constant.other.reference.label.latex
+
+
+
+
+ begin
+ ((\\)label)(\{)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.label.latex
+
+ 2
+
+ name
+ punctuation.definition.keyword.latex
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.latex
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.arguments.end.latex
+
+
+ name
+ meta.definition.label.latex
+ patterns
+
+
+ match
+ [a-zA-Z0-9\.,:/*!^_-]
+ name
+ variable.parameter.definition.label.latex
+
+
+
+
+ begin
+ ((\\)verb[\*]?)\s*((\\)scantokens)(\{)
+ beginCaptures
+
+ 1
+
+ name
+ support.function.verb.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ support.function.verb.latex
+
+ 4
+
+ name
+ punctuation.definition.verb.latex
+
+ 5
+
+ name
+ punctuation.definition.begin.latex
+
+
+ contentName
+ markup.raw.verb.latex
+ end
+ (\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.end.latex
+
+
+ name
+ meta.function.verb.latex
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ captures
+
+ 1
+
+ name
+ support.function.verb.latex
+
+ 2
+
+ name
+ punctuation.definition.function.latex
+
+ 3
+
+ name
+ punctuation.definition.verb.latex
+
+ 4
+
+ name
+ markup.raw.verb.latex
+
+ 5
+
+ name
+ punctuation.definition.verb.latex
+
+
+ match
+ ((\\)verb[\*]?)\s*((?<=\s)\S|[^a-zA-Z])(.*?)(\3|$)
+ name
+ meta.function.verb.latex
+
+
+ begin
+ "`
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.latex
+
+
+ end
+ "'
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.latex
+
+
+ name
+ string.quoted.double.european.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ ``
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.latex
+
+
+ end
+ ''|"
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.latex
+
+
+ name
+ string.quoted.double.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ ">
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.latex
+
+
+ end
+ "<
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.latex
+
+
+ name
+ string.quoted.double.guillemot.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ "<
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.latex
+
+
+ end
+ ">
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.latex
+
+
+ name
+ string.quoted.double.guillemot.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ \\\(
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.latex
+
+
+ end
+ \\\)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.latex
+
+
+ name
+ string.other.math.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ \\\[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.latex
+
+
+ end
+ \\\]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.latex
+
+
+ name
+ string.other.math.latex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ match
+ (?<!\S)'.*?'
+ name
+ invalid.illegal.string.quoted.single.latex
+
+
+ match
+ (?<!\S)".*?"
+ name
+ invalid.illegal.string.quoted.double.latex
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.latex
+
+
+ match
+ (\\)(text(s(terling|ixoldstyle|urd|e(ction|venoldstyle|rvicemark))|yen|n(ineoldstyle|umero|aira)|c(ircledP|o(py(left|right)|lonmonetary)|urrency|e(nt(oldstyle)?|lsius))|t(hree(superior|oldstyle|quarters(emdash)?)|i(ldelow|mes)|w(o(superior|oldstyle)|elveudash)|rademark)|interrobang(down)?|zerooldstyle|o(hm|ne(superior|half|oldstyle|quarter)|penbullet|rd(feminine|masculine))|d(i(scount|ed|v(orced)?)|o(ng|wnarrow|llar(oldstyle)?)|egree|agger(dbl)?|blhyphen(char)?)|uparrow|p(ilcrow|e(so|r(t(housand|enthousand)|iodcentered))|aragraph|m)|e(stimated|ightoldstyle|uro)|quotes(traight(dblbase|base)|ingle)|f(iveoldstyle|ouroldstyle|lorin|ractionsolidus)|won|l(not|ira|e(ftarrow|af)|quill|angle|brackdbl)|a(s(cii(caron|dieresis|acute|grave|macron|breve)|teriskcentered)|cutedbl)|r(ightarrow|e(cipe|ferencemark|gistered)|quill|angle|brackdbl)|g(uarani|ravedbl)|m(ho|inus|u(sicalnote)?|arried)|b(igcircle|orn|ullet|lank|a(ht|rdbl)|rokenbar)))\b
+ name
+ constant.character.latex
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.column-specials.begin.latex
+
+ 2
+
+ name
+ punctuation.definition.column-specials.end.latex
+
+
+ match
+ (?:<|>)(\{)\$(\})
+ name
+ meta.column-specials.latex
+
+
+ include
+ text.tex
+
+
+ scopeName
+ text.tex.latex
+ uuid
+ 3BEEA00C-6B1D-11D9-B8AD-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Lisp.tmLanguage b/app/rcc/edbee/syntaxfiles/Lisp.tmLanguage
new file mode 100644
index 00000000..e567402b
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Lisp.tmLanguage
@@ -0,0 +1,160 @@
+
+
+
+
+ comment
+
+ fileTypes
+
+ lisp
+ cl
+ l
+ mud
+ el
+
+ foldingStartMarker
+ \(
+ foldingStopMarker
+ \)
+ keyEquivalent
+ ^~L
+ name
+ Lisp
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.lisp
+
+
+ match
+ (;).*$\n?
+ name
+ comment.line.semicolon.lisp
+
+
+ captures
+
+ 2
+
+ name
+ storage.type.function-type.lisp
+
+ 4
+
+ name
+ entity.name.function.lisp
+
+
+ match
+ (\b(?i:(defun|defmethod|defmacro))\b)(\s+)((\w|\-|\!|\?)*)
+ name
+ meta.function.lisp
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.lisp
+
+
+ match
+ (#)(\w|[\\+-=<>'"&#])+
+ name
+ constant.character.lisp
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.lisp
+
+ 3
+
+ name
+ punctuation.definition.variable.lisp
+
+
+ match
+ (\*)(\S*)(\*)
+ name
+ variable.other.global.lisp
+
+
+ match
+ \b(?i:case|do|let|loop|if|else|when)\b
+ name
+ keyword.control.lisp
+
+
+ match
+ \b(?i:eq|neq|and|or)\b
+ name
+ keyword.operator.lisp
+
+
+ match
+ \b(?i:null|nil)\b
+ name
+ constant.language.lisp
+
+
+ match
+ \b(?i:cons|car|cdr|cond|lambda|format|setq|setf|quote|eval|append|list|listp|memberp|t|load|progn)\b
+ name
+ support.function.lisp
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b
+ name
+ constant.numeric.lisp
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.lisp
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.lisp
+
+
+ name
+ string.quoted.double.lisp
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.lisp
+
+
+
+
+ scopeName
+ source.lisp
+ uuid
+ 00D451C9-6B1D-11D9-8DFA-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Lua.tmLanguage b/app/rcc/edbee/syntaxfiles/Lua.tmLanguage
new file mode 100644
index 00000000..09973d31
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Lua.tmLanguage
@@ -0,0 +1,234 @@
+
+
+
+
+ comment
+ Lua Syntax: version 0.8
+ fileTypes
+
+ lua
+
+ foldingStartMarker
+ ^\s*\b(function|local\s+function|if|for)\b|{[ \t]*$|\[\[
+ foldingStopMarker
+ \bend\b|^\s*}|\]\]
+ keyEquivalent
+ ^~L
+ name
+ Lua
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.lua
+
+ 2
+
+ name
+ entity.name.function.scope.lua
+
+ 3
+
+ name
+ entity.name.function.lua
+
+ 4
+
+ name
+ punctuation.definition.parameters.begin.lua
+
+ 5
+
+ name
+ variable.parameter.function.lua
+
+ 6
+
+ name
+ punctuation.definition.parameters.end.lua
+
+
+ match
+ \b(function)\s+([a-zA-Z_.:]+[.:])?([a-zA-Z_]\w*)\s*(\()([^)]*)(\))
+ name
+ meta.function.lua
+
+
+ match
+ (?<![\d.])\s0x[a-fA-F\d]+|\b\d+(\.\d+)?([eE]-?\d+)?|\.\d+([eE]-?\d+)?
+ name
+ constant.numeric.lua
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.lua
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.lua
+
+
+ name
+ string.quoted.single.lua
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.lua
+
+
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.lua
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.lua
+
+
+ name
+ string.quoted.double.lua
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.lua
+
+
+
+
+ begin
+ (?<!--)\[(=*)\[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.lua
+
+
+ end
+ \]\1\]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.lua
+
+
+ name
+ string.quoted.other.multiline.lua
+
+
+ begin
+ --\[(=*)\[
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.lua
+
+
+ end
+ \]\1\]
+ name
+ comment.block.lua
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.lua
+
+
+ match
+ (--)(?!\[\[).*$\n?
+ name
+ comment.line.double-dash.lua
+
+
+ match
+ \b(break|do|else|for|if|elseif|return|then|repeat|while|until|end|function|local|in)\b
+ name
+ keyword.control.lua
+
+
+ match
+ (?<![^.]\.|:)\b(false|nil|true|_G|_VERSION|math\.(pi|huge))\b|(?<![.])\.{3}(?!\.)
+ name
+ constant.language.lua
+
+
+ match
+ (?<![^.]\.|:)\b(self)\b
+ name
+ variable.language.self.lua
+
+
+ match
+ (?<![^.]\.|:)\b(assert|collectgarbage|dofile|error|getfenv|getmetatable|ipairs|loadfile|loadstring|module|next|pairs|pcall|print|rawequal|rawget|rawset|require|select|setfenv|setmetatable|tonumber|tostring|type|unpack|xpcall)\b(?=[( {])
+ name
+ support.function.lua
+
+
+ match
+ (?<![^.]\.|:)\b(coroutine\.(create|resume|running|status|wrap|yield)|string\.(byte|char|dump|find|format|gmatch|gsub|len|lower|match|rep|reverse|sub|upper)|table\.(concat|insert|maxn|remove|sort)|math\.(abs|acos|asin|atan2?|ceil|cosh?|deg|exp|floor|fmod|frexp|ldexp|log|log10|max|min|modf|pow|rad|random|randomseed|sinh?|sqrt|tanh?)|io\.(close|flush|input|lines|open|output|popen|read|tmpfile|type|write)|os\.(clock|date|difftime|execute|exit|getenv|remove|rename|setlocale|time|tmpname)|package\.(cpath|loaded|loadlib|path|preload|seeall)|debug\.(debug|[gs]etfenv|[gs]ethook|getinfo|[gs]etlocal|[gs]etmetatable|getregistry|[gs]etupvalue|traceback))\b(?=[( {])
+ name
+ support.function.library.lua
+
+
+ match
+ \b(and|or|not)\b
+ name
+ keyword.operator.lua
+
+
+ match
+ \+|-|%|#|\*|\/|\^|==?|~=|<=?|>=?|(?<!\.)\.{2}(?!\.)
+ name
+ keyword.operator.lua
+
+
+ scopeName
+ source.lua
+ uuid
+ 93E017CC-6F27-11D9-90EB-000D93589AF7
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Makefile.tmLanguage b/app/rcc/edbee/syntaxfiles/Makefile.tmLanguage
new file mode 100644
index 00000000..41cfff86
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Makefile.tmLanguage
@@ -0,0 +1,98 @@
+
+
+
+
+ fileTypes
+
+ GNUmakefile
+ makefile
+ Makefile
+ OCamlMakefile
+ make
+
+ name
+ Makefile
+ patterns
+
+
+ begin
+ ^(\w|[-_])+\s*\??=
+ end
+ $
+ name
+ variable.other.makefile
+ patterns
+
+
+ match
+ \\\n
+
+
+
+
+ begin
+ `
+ end
+ `
+ name
+ string.interpolated.backtick.makefile
+ patterns
+
+
+ include
+ source.shell
+
+
+
+
+ begin
+ #
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.comment.makefile
+
+
+ end
+ $\n?
+ name
+ comment.line.number-sign.makefile
+ patterns
+
+
+ match
+ (?<!\\)\\$\n
+ name
+ punctuation.separator.continuation.makefile
+
+
+
+
+ match
+ ^(\s*)\b(\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)\b
+ name
+ keyword.control.makefile
+
+
+ captures
+
+ 1
+
+ name
+ entity.name.function.makefile
+
+
+ match
+ ^([^\t ]+(\s[^\t ]+)*:(?!\=))\s*.*
+ name
+ meta.function.makefile
+
+
+ scopeName
+ source.makefile
+ uuid
+ FF1825E8-6B1C-11D9-B883-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Markdown.tmLanguage b/app/rcc/edbee/syntaxfiles/Markdown.tmLanguage
new file mode 100644
index 00000000..d393d06e
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Markdown.tmLanguage
@@ -0,0 +1,1178 @@
+
+
+
+
+ fileTypes
+
+ mdown
+ markdown
+ markdn
+ md
+
+ foldingStartMarker
+ (?x)
+ (<(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)\b.*?>
+ |<!--(?!.*-->)
+ |\{\s*($|\?>\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/)))
+ )
+ foldingStopMarker
+ (?x)
+ (</(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)>
+ |^\s*-->
+ |(^|\s)\}
+ )
+ keyEquivalent
+ ^~M
+ name
+ Markdown
+ patterns
+
+
+ begin
+ (?x)^
+ (?= [ ]{,3}>.
+ | ([ ]{4}|\t)(?!$)
+ | [#]{1,6}\s*+
+ | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$
+ )
+ comment
+
+ We could also use an empty end match and set
+ applyEndPatternLast, but then we must be sure that the begin
+ pattern will only match stuff matched by the sub-patterns.
+
+ end
+ (?x)^
+ (?! [ ]{,3}>.
+ | ([ ]{4}|\t)
+ | [#]{1,6}\s*+
+ | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$
+ )
+ name
+ meta.block-level.markdown
+ patterns
+
+
+ include
+ #block_quote
+
+
+ include
+ #block_raw
+
+
+ include
+ #heading
+
+
+ include
+ #separator
+
+
+
+
+ begin
+ ^[ ]{0,3}([*+-])(?=\s)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.list_item.markdown
+
+
+ end
+ ^(?=\S)
+ name
+ markup.list.unnumbered.markdown
+ patterns
+
+
+ include
+ #list-paragraph
+
+
+
+
+ begin
+ ^[ ]{0,3}[0-9]+(\.)(?=\s)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.list_item.markdown
+
+
+ end
+ ^(?=\S)
+ name
+ markup.list.numbered.markdown
+ patterns
+
+
+ include
+ #list-paragraph
+
+
+
+
+ begin
+ ^(?=<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b)(?!.*?</\1>)
+ comment
+
+ Markdown formatting is disabled inside block-level tags.
+
+ end
+ (?<=^</\1>$\n)
+ name
+ meta.disable-markdown
+ patterns
+
+
+ include
+ text.html.basic
+
+
+
+
+ begin
+ ^(?=<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b)
+ comment
+ Same rule but for one line disables.
+ end
+ $\n?
+ name
+ meta.disable-markdown
+ patterns
+
+
+ include
+ text.html.basic
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.markdown
+
+ 10
+
+ name
+ punctuation.definition.string.end.markdown
+
+ 11
+
+ name
+ string.other.link.description.title.markdown
+
+ 12
+
+ name
+ punctuation.definition.string.begin.markdown
+
+ 13
+
+ name
+ punctuation.definition.string.end.markdown
+
+ 2
+
+ name
+ constant.other.reference.link.markdown
+
+ 3
+
+ name
+ punctuation.definition.constant.markdown
+
+ 4
+
+ name
+ punctuation.separator.key-value.markdown
+
+ 5
+
+ name
+ punctuation.definition.link.markdown
+
+ 6
+
+ name
+ markup.underline.link.markdown
+
+ 7
+
+ name
+ punctuation.definition.link.markdown
+
+ 8
+
+ name
+ string.other.link.description.title.markdown
+
+ 9
+
+ name
+ punctuation.definition.string.begin.markdown
+
+
+ match
+ (?x:
+ \s* # Leading whitespace
+ (\[)(.+?)(\])(:) # Reference name
+ [ \t]* # Optional whitespace
+ (<?)(\S+?)(>?) # The url
+ [ \t]* # Optional whitespace
+ (?:
+ ((\().+?(\))) # Match title in quotes…
+ | ((").+?(")) # or in parens.
+ )? # Title is optional
+ \s* # Optional whitespace
+ $
+ )
+ name
+ meta.link.reference.def.markdown
+
+
+ begin
+ ^(?=\S)(?![=-]{3,}(?=$))
+ end
+ ^(?:\s*$|(?=[ ]{,3}>.))|(?=[ \t]*\n)(?<=^===|^====|=====|^---|^----|-----)[ \t]*\n|(?=^#)
+ name
+ meta.paragraph.markdown
+ patterns
+
+
+ include
+ #inline
+
+
+ include
+ text.html.basic
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.heading.markdown
+
+
+ match
+ ^(={3,})(?=[ \t]*$)
+ name
+ markup.heading.1.markdown
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.heading.markdown
+
+
+ match
+ ^(-{3,})(?=[ \t]*$)
+ name
+ markup.heading.2.markdown
+
+
+
+
+ repository
+
+ ampersand
+
+ comment
+
+ Markdown will convert this for us. We match it so that the
+ HTML grammar will not mark it up as invalid.
+
+ match
+ &(?!([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+);)
+ name
+ meta.other.valid-ampersand.markdown
+
+ block_quote
+
+ begin
+ \G[ ]{,3}(>)(?!$)[ ]?
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.blockquote.markdown
+
+
+ comment
+
+ We terminate the block quote when seeing an empty line, a
+ separator or a line with leading > characters. The latter is
+ to “reset” the quote level for quoted lines.
+
+ end
+ (?x)^
+ (?= \s*$
+ | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$
+ | [ ]{,3}>.
+ )
+ name
+ markup.quote.markdown
+ patterns
+
+
+ begin
+ (?x)\G
+ (?= [ ]{,3}>.
+ )
+ end
+ ^
+ patterns
+
+
+ include
+ #block_quote
+
+
+
+
+ applyEndPatternLast
+ 1
+ begin
+ (?x)\G
+ (?= ([ ]{4}|\t)
+ | [#]{1,6}\s*+
+ | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$
+ )
+ end
+ ^
+ patterns
+
+
+ include
+ #block_raw
+
+
+ include
+ #heading
+
+
+ include
+ #separator
+
+
+
+
+ begin
+ (?x)\G
+ (?! $
+ | [ ]{,3}>.
+ | ([ ]{4}|\t)
+ | [#]{1,6}\s*+
+ | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$
+ )
+ end
+ $|(?<=\n)
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+
+ block_raw
+
+ match
+ \G([ ]{4}|\t).*$\n?
+ name
+ markup.raw.block.markdown
+
+ bold
+
+ begin
+ (?x)
+ (\*\*|__)(?=\S) # Open
+ (?=
+ (
+ <[^>]*+> # HTML tags
+ | (?<raw>`+)([^`]|(?!(?<!`)\k<raw>(?!`))`)*+\k<raw>
+ # Raw
+ | \\[\\`*_{}\[\]()#.!+\->]?+ # Escapes
+ | \[
+ (
+ (?<square> # Named group
+ [^\[\]\\] # Match most chars
+ | \\. # Escaped chars
+ | \[ \g<square>*+ \] # Nested brackets
+ )*+
+ \]
+ (
+ ( # Reference Link
+ [ ]? # Optional space
+ \[[^\]]*+\] # Ref name
+ )
+ | ( # Inline Link
+ \( # Opening paren
+ [ \t]*+ # Optional whtiespace
+ <?(.*?)>? # URL
+ [ \t]*+ # Optional whtiespace
+ ( # Optional Title
+ (?<title>['"])
+ (.*?)
+ \k<title>
+ )?
+ \)
+ )
+ )
+ )
+ | (?!(?<=\S)\1). # Everything besides
+ # style closer
+ )++
+ (?<=\S)\1 # Close
+ )
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.bold.markdown
+
+
+ end
+ (?<=\S)(\1)
+ name
+ markup.bold.markdown
+ patterns
+
+
+ applyEndPatternLast
+ 1
+ begin
+ (?=<[^>]*?>)
+ end
+ (?<=>)
+ patterns
+
+
+ include
+ text.html.basic
+
+
+
+
+ include
+ #escape
+
+
+ include
+ #ampersand
+
+
+ include
+ #bracket
+
+
+ include
+ #raw
+
+
+ include
+ #italic
+
+
+ include
+ #image-inline
+
+
+ include
+ #link-inline
+
+
+ include
+ #link-inet
+
+
+ include
+ #link-email
+
+
+ include
+ #image-ref
+
+
+ include
+ #link-ref-literal
+
+
+ include
+ #link-ref
+
+
+
+ bracket
+
+ comment
+
+ Markdown will convert this for us. We match it so that the
+ HTML grammar will not mark it up as invalid.
+
+ match
+ <(?![a-z/?\$!])
+ name
+ meta.other.valid-bracket.markdown
+
+ escape
+
+ match
+ \\[-`*_#+.!(){}\[\]\\>]
+ name
+ constant.character.escape.markdown
+
+ heading
+
+ begin
+ \G(#{1,6})(?!#)\s*(?=\S)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.heading.markdown
+
+
+ contentName
+ entity.name.section.markdown
+ end
+ \s*(#*)$\n?
+ name
+ markup.heading.markdown
+ patterns
+
+
+ include
+ #inline
+
+
+
+ image-inline
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.markdown
+
+ 10
+
+ name
+ string.other.link.description.title.markdown
+
+ 11
+
+ name
+ punctuation.definition.string.markdown
+
+ 12
+
+ name
+ punctuation.definition.string.markdown
+
+ 13
+
+ name
+ string.other.link.description.title.markdown
+
+ 14
+
+ name
+ punctuation.definition.string.markdown
+
+ 15
+
+ name
+ punctuation.definition.string.markdown
+
+ 16
+
+ name
+ punctuation.definition.metadata.markdown
+
+ 2
+
+ name
+ string.other.link.description.markdown
+
+ 3
+
+ name
+ punctuation.definition.string.end.markdown
+
+ 5
+
+ name
+ invalid.illegal.whitespace.markdown
+
+ 6
+
+ name
+ punctuation.definition.metadata.markdown
+
+ 7
+
+ name
+ punctuation.definition.link.markdown
+
+ 8
+
+ name
+ markup.underline.link.image.markdown
+
+ 9
+
+ name
+ punctuation.definition.link.markdown
+
+
+ match
+ (?x:
+ \! # Images start with !
+ (\[)((?<square>[^\[\]\\]|\\.|\[\g<square>*+\])*+)(\])
+ # Match the link text.
+ ([ ])? # Space not allowed
+ (\() # Opening paren for url
+ (<?)(\S+?)(>?) # The url
+ [ \t]* # Optional whitespace
+ (?:
+ ((\().+?(\))) # Match title in parens…
+ | ((").+?(")) # or in quotes.
+ )? # Title is optional
+ \s* # Optional whitespace
+ (\))
+ )
+ name
+ meta.image.inline.markdown
+
+ image-ref
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.markdown
+
+ 2
+
+ name
+ string.other.link.description.markdown
+
+ 4
+
+ name
+ punctuation.definition.string.begin.markdown
+
+ 5
+
+ name
+ punctuation.definition.constant.markdown
+
+ 6
+
+ name
+ constant.other.reference.link.markdown
+
+ 7
+
+ name
+ punctuation.definition.constant.markdown
+
+
+ match
+ \!(\[)((?<square>[^\[\]\\]|\\.|\[\g<square>*+\])*+)(\])[ ]?(\[)(.*?)(\])
+ name
+ meta.image.reference.markdown
+
+ inline
+
+ patterns
+
+
+ include
+ #escape
+
+
+ include
+ #ampersand
+
+
+ include
+ #bracket
+
+
+ include
+ #raw
+
+
+ include
+ #bold
+
+
+ include
+ #italic
+
+
+ include
+ #line-break
+
+
+ include
+ #image-inline
+
+
+ include
+ #link-inline
+
+
+ include
+ #link-inet
+
+
+ include
+ #link-email
+
+
+ include
+ #image-ref
+
+
+ include
+ #link-ref-literal
+
+
+ include
+ #link-ref
+
+
+
+ italic
+
+ begin
+ (?x)
+ (\*|_)(?=\S) # Open
+ (?=
+ (
+ <[^>]*+> # HTML tags
+ | (?<raw>`+)([^`]|(?!(?<!`)\k<raw>(?!`))`)*+\k<raw>
+ # Raw
+ | \\[\\`*_{}\[\]()#.!+\->]?+ # Escapes
+ | \[
+ (
+ (?<square> # Named group
+ [^\[\]\\] # Match most chars
+ | \\. # Escaped chars
+ | \[ \g<square>*+ \] # Nested brackets
+ )*+
+ \]
+ (
+ ( # Reference Link
+ [ ]? # Optional space
+ \[[^\]]*+\] # Ref name
+ )
+ | ( # Inline Link
+ \( # Opening paren
+ [ \t]*+ # Optional whtiespace
+ <?(.*?)>? # URL
+ [ \t]*+ # Optional whtiespace
+ ( # Optional Title
+ (?<title>['"])
+ (.*?)
+ \k<title>
+ )?
+ \)
+ )
+ )
+ )
+ | \1\1 # Must be bold closer
+ | (?!(?<=\S)\1). # Everything besides
+ # style closer
+ )++
+ (?<=\S)\1 # Close
+ )
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.italic.markdown
+
+
+ end
+ (?<=\S)(\1)((?!\1)|(?=\1\1))
+ name
+ markup.italic.markdown
+ patterns
+
+
+ applyEndPatternLast
+ 1
+ begin
+ (?=<[^>]*?>)
+ end
+ (?<=>)
+ patterns
+
+
+ include
+ text.html.basic
+
+
+
+
+ include
+ #escape
+
+
+ include
+ #ampersand
+
+
+ include
+ #bracket
+
+
+ include
+ #raw
+
+
+ include
+ #bold
+
+
+ include
+ #image-inline
+
+
+ include
+ #link-inline
+
+
+ include
+ #link-inet
+
+
+ include
+ #link-email
+
+
+ include
+ #image-ref
+
+
+ include
+ #link-ref-literal
+
+
+ include
+ #link-ref
+
+
+
+ line-break
+
+ match
+ {2,}$
+ name
+ meta.dummy.line-break
+
+ link-email
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.link.markdown
+
+ 2
+
+ name
+ markup.underline.link.markdown
+
+ 4
+
+ name
+ punctuation.definition.link.markdown
+
+
+ match
+ (<)((?:mailto:)?[-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(>)
+ name
+ meta.link.email.lt-gt.markdown
+
+ link-inet
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.link.markdown
+
+ 2
+
+ name
+ markup.underline.link.markdown
+
+ 3
+
+ name
+ punctuation.definition.link.markdown
+
+
+ match
+ (<)((?:https?|ftp)://.*?)(>)
+ name
+ meta.link.inet.markdown
+
+ link-inline
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.markdown
+
+ 10
+
+ name
+ string.other.link.description.title.markdown
+
+ 11
+
+ name
+ punctuation.definition.string.begin.markdown
+
+ 12
+
+ name
+ punctuation.definition.string.end.markdown
+
+ 13
+
+ name
+ string.other.link.description.title.markdown
+
+ 14
+
+ name
+ punctuation.definition.string.begin.markdown
+
+ 15
+
+ name
+ punctuation.definition.string.end.markdown
+
+ 16
+
+ name
+ punctuation.definition.metadata.markdown
+
+ 2
+
+ name
+ string.other.link.title.markdown
+
+ 4
+
+ name
+ punctuation.definition.string.end.markdown
+
+ 5
+
+ name
+ invalid.illegal.whitespace.markdown
+
+ 6
+
+ name
+ punctuation.definition.metadata.markdown
+
+ 7
+
+ name
+ punctuation.definition.link.markdown
+
+ 8
+
+ name
+ markup.underline.link.markdown
+
+ 9
+
+ name
+ punctuation.definition.link.markdown
+
+
+ match
+ (?x:
+ (\[)((?<square>[^\[\]\\]|\\.|\[\g<square>*+\])*+)(\])
+ # Match the link text.
+ ([ ])? # Space not allowed
+ (\() # Opening paren for url
+ (<?)(.*?)(>?) # The url
+ [ \t]* # Optional whitespace
+ (?:
+ ((\().+?(\))) # Match title in parens…
+ | ((").+?(")) # or in quotes.
+ )? # Title is optional
+ \s* # Optional whitespace
+ (\))
+ )
+ name
+ meta.link.inline.markdown
+
+ link-ref
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.markdown
+
+ 2
+
+ name
+ string.other.link.title.markdown
+
+ 4
+
+ name
+ punctuation.definition.string.end.markdown
+
+ 5
+
+ name
+ punctuation.definition.constant.begin.markdown
+
+ 6
+
+ name
+ constant.other.reference.link.markdown
+
+ 7
+
+ name
+ punctuation.definition.constant.end.markdown
+
+
+ match
+ (\[)((?<square>[^\[\]\\]|\\.|\[\g<square>*+\])*+)(\])[ ]?(\[)([^\]]*+)(\])
+ name
+ meta.link.reference.markdown
+
+ link-ref-literal
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.markdown
+
+ 2
+
+ name
+ string.other.link.title.markdown
+
+ 4
+
+ name
+ punctuation.definition.string.end.markdown
+
+ 5
+
+ name
+ punctuation.definition.constant.begin.markdown
+
+ 6
+
+ name
+ punctuation.definition.constant.end.markdown
+
+
+ match
+ (\[)((?<square>[^\[\]\\]|\\.|\[\g<square>*+\])*+)(\])[ ]?(\[)(\])
+ name
+ meta.link.reference.literal.markdown
+
+ list-paragraph
+
+ patterns
+
+
+ begin
+ \G\s+(?=\S)
+ end
+ ^\s*$
+ name
+ meta.paragraph.list.markdown
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+
+ raw
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.raw.markdown
+
+ 3
+
+ name
+ punctuation.definition.raw.markdown
+
+
+ match
+ (`+)([^`]|(?!(?<!`)\1(?!`))`)*+(\1)
+ name
+ markup.raw.inline.markdown
+
+ separator
+
+ match
+ \G[ ]{,3}([-*_])([ ]{,2}\1){2,}[ \t]*$\n?
+ name
+ meta.separator.markdown
+
+
+ scopeName
+ text.html.markdown
+ uuid
+ 0A1D9874-B448-11D9-BD50-000D93B6E43C
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Matlab.tmLanguage b/app/rcc/edbee/syntaxfiles/Matlab.tmLanguage
new file mode 100644
index 00000000..a3b265b7
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Matlab.tmLanguage
@@ -0,0 +1,1205 @@
+
+
+
+
+ fileTypes
+
+
+ matlab
+
+ foldingStartMarker
+ ^\s*(function|if|switch|while|for|try)\b(?!.*\bend\b).*$
+ foldingStopMarker
+ ^\s*(end|return)\b.*$
+ keyEquivalent
+ ^~M
+ name
+ MATLAB
+ patterns
+
+
+ begin
+ (?x)
+(?=function\b) # borrowed from ruby bundle
+(?<=^|\s)(function)\s+ # the function keyword
+(?>\[(.*)\])?\t# match various different combination of output arguments
+((?>[a-zA-Z_]\w*))?
+(?>\s*=\s*)?
+((?>[a-zA-Z_]\w*(?>[?!]|=(?!>))? )) # the function name
+(?=[ \t]*[^\s%|#]) # make sure arguments and not a comment follow
+\s*(\() # the opening parenthesis for arguments
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.matlab
+
+ 2
+
+ name
+ variable.parameter.output.function.matlab
+
+ 3
+
+ name
+ variable.parameter.output.function.matlab
+
+ 4
+
+ name
+ entity.name.function.matlab
+
+
+ contentName
+ variable.parameter.input.function.matlab
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.matlab
+
+
+ name
+ meta.function.with-arguments.matlab
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.matlab
+
+ 2
+
+ name
+ variable.parameter.output.function.matlab
+
+ 3
+
+ name
+ variable.parameter.output.function.matlab
+
+ 4
+
+ name
+ entity.name.function.matlab
+
+
+ match
+ (?x)
+(?=function\b) # borrowed from ruby bundle
+(?<=^|\s)(function)\s+ # the function keyword
+(?>\[(.*)\])? # match various different combination of output arguments
+((?>[a-zA-Z_]\w*))?
+(?>\s*=\s*)?
+((?>[a-zA-Z_]\w*(?>[?!]|=(?!>))? )) # the function name
+ name
+ meta.function.without-arguments.matlab
+
+
+ include
+ #constants_override
+
+
+ include
+ #brackets
+
+
+ include
+ #curlybrackets
+
+
+ include
+ #parens
+
+
+ include
+ #string
+
+
+ include
+ #transpose
+
+
+ include
+ #double_quote
+
+
+ include
+ #operators
+
+
+ include
+ #all_matlab_keywords
+
+
+ include
+ #all_matlab_comments
+
+
+ include
+ #number
+
+
+ include
+ #variable
+
+
+ include
+ #variable_invalid
+
+
+ include
+ #not_equal_invalid
+
+
+ include
+ #variable_assignment
+
+
+ repository
+
+ all_matlab_comments
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.matlab
+
+
+ match
+ (%%).*$\n?
+ name
+ comment.double.percentage.matlab
+
+
+ begin
+ %\{
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.matlab
+
+
+ end
+ %\}\s*\n
+ name
+ comment.block.percentage.matlab
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.matlab
+
+
+ match
+ (%).*$\n?
+ name
+ comment.line.percentage.matlab
+
+
+
+ all_matlab_keywords
+
+ patterns
+
+
+ include
+ #matlab_keyword_control
+
+
+ include
+ #matlab_keyword_operator
+
+
+ include
+ #matlab_keyword_other
+
+
+ include
+ #matlab_storage_type
+
+
+ include
+ #matlab_storage_modifier
+
+
+ include
+ #matlab_constant_language
+
+
+ include
+ #matlab_variable_function
+
+
+ include
+ #matlab_keyword_desktop
+
+
+ include
+ #matlab_keyword_mathematics
+
+
+ include
+ #matlab_keyword_analysis
+
+
+ include
+ #matlab_storage_control
+
+
+ include
+ #matlab_support_graphics
+
+
+ include
+ #matlab_support_function
+
+
+ include
+ #matlab_support_external
+
+
+ include
+ #matlab_support_toolbox_aerospace
+
+
+ include
+ #matlab_support_toolbox_bioinformatics
+
+
+ include
+ #matlab_support_toolbox_communications
+
+
+ include
+ #matlab_support_toolbox_control_systems
+
+
+ include
+ #matlab_support_toolbox_curve_fitting
+
+
+ include
+ #matlab_support_toolbox_data_acquisition
+
+
+ include
+ #matlab_support_toolbox_database
+
+
+ include
+ #matlab_support_toolbox_datafeed
+
+
+ include
+ #matlab_support_toolbox_design
+
+
+ include
+ #matlab_support_toolbox_excel_link
+
+
+ include
+ #matlab_support_toolbox_filder_design_hdl_coder
+
+
+ include
+ #matlab_support_toolbox_financial_derivatives
+
+
+ include
+ #matlab_support_toolbox_financial
+
+
+ include
+ #matlab_support_toolbox_fixed_income
+
+
+ include
+ #matlab_support_toolbox_fixed_point
+
+
+ include
+ #matlab_support_toolbox_fuzzy_logic
+
+
+ include
+ #matlab_support_toolbox_garch
+
+
+ include
+ #matlab_support_toolbox_genetic_algorithms
+
+
+ include
+ #matlab_support_toolbox_image_acquisition
+
+
+ include
+ #matlab_support_toolbox_image_processing
+
+
+ include
+ #matlab_support_toolbox_instrument_control
+
+
+ include
+ #matlab_support_toolbox_mapping
+
+
+ include
+ #matlab_support_toolbox_model_predictive_control
+
+
+ include
+ #matlab_support_toolbox_model_based_calibration
+
+
+ include
+ #matlab_support_toolbox_neural_network
+
+
+ include
+ #matlab_support_toolbox_opc
+
+
+ include
+ #matlab_support_toolbox_optimization
+
+
+ include
+ #matlab_support_toolbox_rf
+
+
+ include
+ #matlab_support_toolbox_robust_control
+
+
+ include
+ #matlab_support_toolbox_signal_processing
+
+
+ include
+ #matlab_support_toolbox_spline
+
+
+ include
+ #matlab_support_toolbox_statistics
+
+
+ include
+ #matlab_support_toolbox_symbolic_math
+
+
+ include
+ #matlab_support_toolbox_system_identification
+
+
+ include
+ #matlab_support_toolbox_virtual_reality
+
+
+ include
+ #matlab_support_toolbox_wavelet
+
+
+
+ allofem
+
+ patterns
+
+
+ include
+ #parens
+
+
+ include
+ #curlybrackets
+
+
+ include
+ #end_in_parens
+
+
+ include
+ #brackets
+
+
+ include
+ #string
+
+
+ include
+ #transpose
+
+
+ include
+ #double_quote
+
+
+ include
+ #all_matlab_keywords
+
+
+ include
+ #all_matlab_comments
+
+
+ include
+ #variable
+
+
+ include
+ #variable_invalid
+
+
+ include
+ #number
+
+
+ include
+ #operators
+
+
+
+ brackets
+
+ begin
+ \[
+ beginCaptures
+
+ 0
+
+ name
+ meta.brackets.matlab
+
+
+ contentName
+ meta.brackets.matlab
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ meta.brackets.matlab
+
+
+ patterns
+
+
+ include
+ #allofem
+
+
+
+ constants_override
+
+ comment
+ The user is trying to override MATLAB constants and functions.
+ match
+ (^|\;)\s*(i|j|inf|Inf|nan|NaN|eps|end)\s*=[^=]
+ name
+ meta.inappropriate.matlab
+
+ curlybrackets
+
+ begin
+ \{
+ beginCaptures
+
+ 0
+
+ name
+ meta.brackets.curly.matlab
+
+
+ contentName
+ meta.brackets.curly.matlab
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ meta.brackets.curly.matlab
+
+
+ patterns
+
+
+ include
+ #allofem
+
+
+ include
+ #end_in_parens
+
+
+
+ double_quote
+
+ patterns
+
+
+ match
+ "
+ name
+ invalid.illegal.invalid-quote.matlab
+
+
+
+ end_in_parens
+
+ comment
+ end as operator symbol
+ match
+ \bend\b
+ name
+ keyword.operator.symbols.matlab
+
+ escaped_quote
+
+ patterns
+
+
+ match
+ ''
+ name
+ constant.character.escape.matlab
+
+
+
+ matlab_constant_language
+
+ comment
+ MATLAB constants
+ match
+ (?<!\.)\b(eps|false|Inf|inf|intmax|intmin|namelengthmax|NaN|nan|on|off|realmax|realmin|true)\b
+ name
+ constant.language.matlab
+
+ matlab_keyword_analysis
+
+ comment
+ Data Analysis
+ match
+ (?<!\.)\b(abs|addevent|addsample|addsampletocollection|addts|angle|conv|conv2|convn|corrcoef|cov|cplxpair|ctranspose|cumtrapz|deconv|del2|delevent|delsample|delsamplefromcollection|detrend|diff|fft|fft2|fftn|fftshift|fftw|filter|filter2|getabstime|getdatasamplesize|getinterpmethod|getqualitydesc|getsampleusingtime|gettimeseriesnames|gettsafteratevent|gettsafterevent|gettsatevent|gettsbeforeatevent|gettsbeforeevent|gettsbetweenevents|gradient|idealfilter|ifft|ifft2|ifftn|ifftshift|iqr|max|mean|median|min|mldivide|mode|mrdivide|removets|resample|setabstime|setinterpmethod|settimeseriesnames|std|synchronize|timeseries|trapz|tscollection|tsdata.event|tsprops|tstool|var)\b
+ name
+ keyword.analysis.matlab
+
+ matlab_keyword_control
+
+ comment
+ Control keywords
+ match
+ (?<!\.)\b(break|case|catch|continue|else|elseif|end|for|if|otherwise|pause|rethrow|return|start|startat|stop|switch|try|wait|while)\b
+ name
+ keyword.control.matlab
+
+ matlab_keyword_desktop
+
+ comment
+ Desktop Tools and Development
+ match
+ (?<!\.)\b(addpath|assignin|builddocsearchdb|cd|checkin|checkout|clc|clear|clipboard|cmopts|commandhistory|commandwindow|computer|copyfile|customverctrl|dbclear|dbcont|dbdown|dbquit|dbstack|dbstatus|dbstep|dbstop|dbtype|dbup|debug|demo|diary|dir|doc|docopt|docsearch|dos|echodemo|edit|exit|fileattrib|filebrowser|finish|format|genpath|getenv|grabcode|help|helpbrowser|helpwin|home|hostid|info|keyboard|license|lookfor|ls|matlab|matlabrc|matlabroot|memory|mkdir|mlint|mlintrpt|more|movefile|notebook|openvar|pack|partialpath|path|path2rc|pathdef|pathsep|pathtool|perl|playshow|prefdir|preferences|profile|profsave|publish|pwd|quit|recycle|rehash|restoredefaultpath|rmdir|rmpath|savepath|setenv|startup|support|system|toolboxdir|type|undocheckout|unix|ver|verctrl|verLessThan|version|web|what|whatsnew|which|winqueryreg|workspace)\b|(^\s*!.*$)
+ name
+ keyword.desktop.matlab
+
+ matlab_keyword_mathematics
+
+ comment
+ Mathematics
+ match
+ (?<!\.)\b(accumarray|acos|acosd|acosh|acot|acotd|acoth|acsc|acscd|acsch|airy|amd|asec|asecd|asech|asin|asind|asinh|atan|atan2|atand|atanh|balance|besselh|besseli|besselj|besselk|bessely|beta|betainc|betaln|bicg|bicgstab|blkdiag|bsxfun|bvp4c|bvpget|bvpinit|bvpset|bvpxtend|cart2pol|cart2sph|cat|cdf2rdf|ceil|cgs|chol|cholinc|cholupdate|circshift|colamd|colperm|compan|complex|cond|condeig|condest|conj|convhull|convhulln|cos|cosd|cosh|cot|cotd|coth|cross|csc|cscd|csch|cumprod|cumsum|dblquad|dde23|ddeget|ddesd|ddeset|decic|det|deval|diag|disp|display|dmperm|dot|eig|eigs|ellipj|ellipke|erf|erfc|erfcinv|erfcx|erfinv|etree|etreeplot|exp|expint|expm|expm1|eye|factor|factorial|find|fix|flipdim|fliplr|flipud|floor|fminbnd|fminsearch|freqspace|full|funm|fzero|gallery|gamma|gammainc|gammaln|gcd|gmres|gplot|griddata|griddata3|griddatan|gsvd|hadamard|hankel|hess|hilb|horzcat|hypot|i|idivide|ilu|imag|ind2sub|Inf|inline|interp1|interp1q|interp2|interp3|interpft|interpn|inv|invhilb|ipermute|j|kron|lcm|ldl|legendre|length|linsolve|linspace|log|log10|log1p|log2|logm|logspace|lscov|lsqnonneg|lsqr|lu|luinc|magic|meshgrid|minres|mkpp|mod|NaN|nchoosek|ndgrid|ndims|nextpow2|nnz|nonzeros|norm|normest|nthroot|null|numel|nzmax|ode113|ode15i|ode15s|ode23|ode23s|ode23t|ode23tb|ode45|odefile|odeget|odeset|odextend|ones|optimget|optimset|ordeig|ordqz|ordschur|orth|pascal|pcg|pchip|pdepe|pdeval|perms|permute|pi|pinv|planerot|pol2cart|poly|polyder|polyeig|polyfit|polyint|polyval|polyvalm|pow2|ppval|primes|prod|psi|qmr|qr|qrdelete|qrinsert|qrupdate|quad|quadl|quadv|qz|rand|randn|randperm|rank|rat|rats|rcond|real|reallog|realpow|realsqrt|rem|repmat|reshape|residue|roots|rosser|rot90|round|rref|rsf2csf|schur|sec|secd|sech|shiftdim|sign|sin|sind|sinh|size|sort|sortrows|spalloc|sparse|spaugment|spconvert|spdiags|speye|spfun|sph2cart|spline|spones|spparms|sprand|sprandn|sprandsym|sprank|spy|sqrt|sqrtm|squeeze|ss2tf|sub2ind|subspace|sum|svd|svds|symamd|symbfact|symmlq|symrcm|tan|tand|tanh|toeplitz|trace|treelayout|treeplot|tril|triplequad|triu|unmkpp|unwrap|vander|vectorize|vertcat|wilkinson|zeros)\b
+ name
+ keyword.mathematics.matlab
+
+ matlab_keyword_operator
+
+ comment
+ Operator keywords
+ match
+ (?<!\.)\b(all|and|any|bitand|bitcmp|bitget|bitmax|bitor|bitset|bitshift|bitxor|eq|ge|gt|isa|isappdata|iscell|iscellstr|ischar|iscom|isdir|isempty|isequal|isequalwithequalnans|isevent|isfield|isfinite|isfloat|isglobal|ishandle|ishold|isinf|isinteger|isinterface|isjava|iskeyword|isletter|islogical|ismac|ismember|ismethod|isnan|isnumeric|isobject|ispc|ispref|isprime|isprop|isreal|isscalar|issorted|isspace|issparse|isstrprop|isstruct|isstudent|isunix|isvarname|isvector|le|lt|mislocked|or|ne|not|setxor|union|unique|xor)\b
+ name
+ keyword.operator.matlab
+
+ matlab_keyword_other
+
+ comment
+ Other keywords
+ match
+ (?<!\.)\b(addOptional|addParamValue|addRequired|addtodate|ans|arrayfun|assert|blanks|builtin|calendar|cell|celldisp|cellfun|cellplot|clock|cputime|createCopy|datatipinfo|date|datenum|datestr|datevec|dbmex|deal|deblank|depdir|depfun|echo|eomday|error|etime|eval|evalc|evalin|exist|feval|fieldnames|findstr|func2str|genvarname|getfield|global|inferiorto|inmem|intersect|intwarning|lasterr|lasterror|lastwarn|loadobj|lower|methods|methodsview|mex|mexext|mfilename|mlock|munlock|nargchk|nargoutchk|now|orderfields|parse|pcode|regexp|regexpi|regexprep|regexptranslate|rmfield|run|saveobj|setdiff|setfield|sprintf|sscanf|strcat|strcmp|strcmpi|strfind|strings|strjust|strmatch|strncmp|strncmpi|strread|strrep|strtok|strtrim|structfun|strvcat|subsasgn|subsindex|subsref|substruct|superiorto|swapbytes|symvar|tic|timer|timerfind|timerfindall|toc|typecast|upper|warning|weekday|who|whos)\b
+ name
+ keyword.other.matlab
+
+ matlab_storage_control
+
+ comment
+ File I/O
+ match
+ (?<!\.)\b(addframe|ascii|audioplayer|audiorecorder|aufinfo|auread|auwrite|avifile|aviinfo|aviread|beep|binary|cdfepoch|cdfinfo|cdfread|cdfwrite|csvread|csvwrite|daqread|dlmread|dlmwrite|exifread|fclose|feof|ferror|fgetl|fgets|filehandle|filemarker|fileparts|filesep|fitsinfo|fitsread|fopen|fprintf|fread|frewind|fscanf|fseek|ftell|ftp|fullfile|fwrite|gunzip|gzip|hdf|hdf5|hdf5info|hdf5read|hdf5write|hdfinfo|hdfread|hdftool|imfinfo|importdata|imread|imwrite|lin2mu|load|memmapfile|mget|mmfileinfo|movie2avi|mput|mu2lin|multibandread|multibandwrite|open|rename|save|sendmail|sound|soundsc|tar|tempdir|tempname|textread|textscan|todatenum|uiimport|untar|unzip|urlread|urlwrite|wavfinfo|wavplay|wavread|wavrecord|wavwrite|winopen|wk1finfo|wk1read|wk1write|xlsfinfo|xlsread|xlswrite|xmlread|xmlwrite|xslt|zip)\b
+ name
+ storage.control.matlab
+
+ matlab_storage_modifier
+
+ comment
+ Storage modifiers
+ match
+ (?<!\.)\b(base2dec|bin2dec|cast|cell2mat|cell2struct|cellstr|char|dec2base|dec2bin|dec2hex|hex2dec|hex2num|int2str|mat2cell|mat2str|num2cell|native2unicode|num2hex|num2str|persistent|str2double|str2func|str2mat|str2num|struct2cell|unicode2native)\b
+ name
+ storage.modifier.matlab
+
+ matlab_storage_type
+
+ comment
+ Storage types
+ match
+ (?<!\.)\b(class|double|function|functions|input|inputname|inputParser|int16|int32|int64|int8|logical|single|struct|uint16|uint32|uint64|uint8)\b
+ name
+ storage.type.matlab
+
+ matlab_support_external
+
+ comment
+ External Interfaces
+ match
+ (?<!\.)\b(actxcontrol|actxcontrollist|actxcontrolselect|actxGetRunningServer|actxserver|addproperty|calllib|callSoapService|createClassFromWsdl|createSoapMessage|ddeadv|ddeexec|ddeinit|ddepoke|ddereq|ddeterm|ddeunadv|deleteproperty|enableservice|eventlisteners|events|Execute|GetCharArray|GetFullMatrix|GetVariable|GetWorkspaceData|import|instrcallback|instrfind|instrfindall|interfaces|invoke|javaaddpath|javaArray|javachk|javaclasspath|javaMethod|javaObject|javarmpath|libfunctions|libfunctionsview|libisloaded|libpointer|libstruct|loadlibrary|MaximizeCommandWindow|MinimizeCommandWindow|move|parseSoapResponse|PutCharArray|PutFullMatrix|PutWorkspaceData|readasync|record|registerevent|release|send|serial|serialbreak|stopasync|unloadlibrary|unregisterallevents|unregisterevent|usejava)\b
+ name
+ support.external.matlab
+
+ matlab_support_function
+
+ comment
+ Creating Graphical User Interfaces
+ match
+ (?<!\.)\b(addpref|align|dialog|errordlg|export2wsdlg|getappdata|getpixelposition|getpref|ginput|guidata|guide|guihandles|helpdlg|inputdlg|inspect|listdlg|listfonts|menu|movegui|msgbox|openfig|printdlg|printpreview|questdlg|rmappdata|rmpref|selectmoveresize|setappdata|setpixelposition|setpref|textwrap|uibuttongroup|uicontextmenu|uicontrol|uigetdir|uigetfile|uigetpref|uimenu|uiopen|uipanel|uipushtool|uiputfile|uiresume|uisave|uisetcolor|uisetfont|uisetpref|uistack|uitoggletool|uitoolbar|uiwait|waitbar|waitfor|waitforbuttonpress|warndlg)\b
+ name
+ support.function.matlab
+
+ matlab_support_graphics
+
+ comment
+ Graphics
+ match
+ (?<!\.)\b(alim|allchild|alpha|alphamap|ancestor|annotation|area|axes|axis|bar|bar3|bar3h|barh|box|brighten|camdolly|cameratoolbar|camlight|camlookat|camorbit|campan|campos|camproj|camroll|camtarget|camup|camva|camzoom|caxis|cla|clabel|clf|close|closereq|colorbar|colordef|colormap|colormapeditor|ColorSpec|comet|comet3|compass|coneplot|contour|contour3|contourc|contourf|contourslice|contrast|copyobj|curl|cylinder|daspect|datacursormode|datetick|delaunay|delaunay3|delaunayn|delete|diffuse|divergence|dragrect|drawnow|dsearch|dsearchn|ellipsoid|errorbar|ezcontour|ezcontourf|ezmesh|ezmeshc|ezplot|ezplot3|ezpolar|ezsurf|ezsurfc|feather|figure|figurepalette|fill|fill3|findall|findfigs|findobj|flow|fplot|frame2im|frameedit|gca|gcbf|gcbo|gcf|gco|get|getframe|graymon|grid|gtext|hgexport|hggroup|hgload|hgsave|hgtransform|hidden|hist|histc|hold|hsv2rgb|im2frame|im2java|image|imagesc|imformats|ind2rgb|inpolygon|interpstreamspeed|isocaps|isocolors|isonormals|isosurface|legend|light|lightangle|lighting|line|LineSpec|linkaxes|linkprop|loglog|makehgtform|material|mesh|meshc|meshz|movie|newplot|noanimate|opengl|orient|pan|pareto|patch|pbaspect|pcolor|peaks|pie|pie3|plot|plot3|plotbrowser|plotedit|plotmatrix|plottools|plotyy|polar|polyarea|print|printopt|propedit|propertyeditor|quiver|quiver3|rbbox|rectangle|rectint|reducepatch|reducevolume|refresh|refreshdata|reset|rgb2hsv|rgbplot|ribbon|rose|rotate|rotate3d|saveas|scatter|scatter3|semilogx|semilogy|set|shading|showplottool|shrinkfaces|slice|smooth3|specular|sphere|spinmap|stairs|stem|stem3|stream2|stream3|streamline|streamparticles|streamribbon|streamslice|streamtube|subplot|subvolume|surf|surf2patch|surface|surfc|surfl|surfnorm|tetramesh|texlabel|text|title|trimesh|triplot|trisurf|tsearch|tsearchn|view|viewmtx|volumebounds|voronoi|voronoin|waterfall|whitebg|xlabel|xlim|ylabel|ylim|zlabel|zlim|zoom)\b
+ name
+ support.graphics.matlab
+
+ matlab_support_toolbox_aerospace
+
+ comment
+ Matlab aerospace toolbox
+ match
+ (?<!\.)\b(wrldmagm|updateNodes|updateCamera|updateBodies|update|show|saveas|rrtheta|rrsigma|rrdelta|removeViewpoint|removeNode|removeBody|read|quatrotate|quatnormalize|quatnorm|quatmultiply|quatmod|quatinv|quatdivide|quatconj|quat2dcm|quat2angle|play|nodeInfo|moveBody|move|mjuliandate|machnumber|load|lla2ecef|leapyear|juliandate|initialize|initIfNeeded|hide|gravitywgs84|geoidegm96|geod2geoc|geocradius|geoc2geod|generatePatches|findstartstoptimes|fganimation|ecef2lla|dpressure|delete|decyear|dcmecef2ned|dcmbody2wind|dcm2quat|dcm2latlon|dcm2angle|dcm2alphabeta|datcomimport|createBody|correctairspeed|convvel|convtemp|convpres|convmass|convlength|convforce|convdensity|convangvel|convangacc|convang|convacc|atmospalt|atmosnrlmsise00|atmosnonstd|atmoslapse|atmosisa|atmoscoesa|atmoscira|angle2quat|angle2dcm|alphabeta|airspeed|addViewpoint|addRoute|addNode|addBody|VirtualRealityAnimation|Viewpoint|Node|Geometry|GenerateRunScript|Camera|Body|Animation)\b
+ name
+ support.toolbox.aerospace.matlab
+
+ matlab_support_toolbox_bioinformatics
+
+ comment
+ Matlab bioinformatics toolbox
+ match
+ (?<!\.)\b(zonebackadj|weights|view|traverse|traceplot|topoorder|swalign|svmtrain|svmsmoset|svmclassify|subtree|sptread|showhmmprof|showalignment|shortestpath|seqwordcount|seqtool|seqshowwords|seqshoworfs|seqreverse|seqrcomplement|seqprofile|seqpdist|seqneighjoin|seqmatch|seqlogo|seqlinkage|seqinsertgaps|seqdotplot|seqdisp|seqconsensus|seqcomplement|seq2regexp|select|scfread|samplealign|rnaplot|rnafold|rnaconvert|rna2dna|rmasummary|rmabackadj|revgeneticcode|restrict|reroot|reorder|redgreencmap|rebasecuts|rankfeatures|randseq|randfeatures|ramachandran|quantilenorm|prune|proteinpropplot|proteinplot|profalign|probesetvalues|probesetplot|probesetlookup|probesetlink|probelibraryinfo|plot|phytreewrite|phytreetool|phytreeread|phytree|pfamhmmread|pdist|pdbwrite|pdbread|pdbdistplot|pam|palindromes|optimalleaforder|oligoprop|nwalign|num2goid|nuc44|ntdensity|nt2int|nt2aa|nmercount|mzxmlread|mzxml2peaks|multialignviewer|multialignread|multialign|msviewer|mssgolay|msresample|msppresample|mspeaks|mspalign|msnorm|mslowess|msheatmap|msdotplot|msbackadj|msalign|molweight|molviewer|minspantree|maxflow|mavolcanoplot|mattest|mapcaplot|manorm|malowess|maloglog|mairplot|mainvarsetnorm|maimage|magetfield|mafdr|maboxplot|knnimpute|knnclassify|joinseq|jcampread|isspantree|isomorphism|isoelectric|isdag|int2nt|int2aa|imageneread|hmmprofstruct|hmmprofmerge|hmmprofgenerate|hmmprofestimate|hmmprofalign|graphtraverse|graphtopoorder|graphshortestpath|graphpred2path|graphminspantree|graphmaxflow|graphisspantree|graphisomorphism|graphisdag|graphconncomp|graphcluster|graphallshortestpaths|gprread|gonnet|goannotread|getrelatives|getpdb|getnodesbyid|getnewickstr|getmatrix|gethmmtree|gethmmprof|gethmmalignment|getgeodata|getgenpept|getgenbank|getembl|getedgesbynodeid|getdescendants|getcanonical|getbyname|getblast|getancestors|get|geosoftread|genpeptread|genevarfilter|geneticcode|generangefilter|geneont|genelowvalfilter|geneentropyfilter|genbankread|gcrmabackadj|gcrma|galread|featuresparse|featuresmap|fastawrite|fastaread|exprprofvar|exprprofrange|evalrasmolscript|emblread|dolayout|dndsml|dnds|dna2rna|dimercount|dayhoff|cytobandread|crossvalind|cpgisland|conncomp|codoncount|codonbias|clustergram|cleave|classperf|chromosomeplot|cghcbs|celintensityread|blosum|blastreadlocal|blastread|blastncbi|blastlocal|blastformat|biograph|baselookup|basecount|atomiccomp|aminolookup|allshortestpaths|agferead|affyread|affyprobeseqread|affyprobeaffinities|affyinvarsetnorm|aacount|aa2nt|aa2int)\b
+ name
+ support.toolbox.bioinformatics.matlab
+
+ matlab_support_toolbox_communications
+
+ comment
+ Matlab communications toolbox
+ match
+ (?<!\.)\b(wgn|vitdec|vec2mat|varlms|syndtable|symerr|stdchan|ssbmod|ssbdemod|signlms|shift2mask|seqgen\.pn|seqgen|semianalytic|scatterplot|rsgenpoly|rsencof|rsenc|rsdecof|rsdec|rls|ricianchan|reset|rectpulse|rcosine|rcosiir|rcosflt|rcosfir|rayleighchan|randsrc|randintrlv|randint|randerr|randdeintrlv|quantiz|qfuncinv|qfunc|qammod|qamdemod|pskmod|pskdemod|primpoly|poly2trellis|pmmod|pmdemod|plot|pammod|pamdemod|oqpskmod|oqpskdemod|oct2dec|normlms|noisebw|muxintrlv|muxdeintrlv|mskmod|mskdemod|modnorm|modem\.qammod|modem\.qamdemod|modem\.pskmod|modem\.pskdemod|modem\.pammod|modem\.pamdemod|modem\.oqpskmod|modem\.oqpskdemod|modem\.mskmod|modem\.mskdemod|modem\.genqammod|modem\.genqamdemod|modem\.dpskmod|modem\.dpskdemod|modem|mlseeq|mldivide|minpol|matintrlv|matdeintrlv|mask2shift|marcumq|log|lms|lloyds|lineareq|istrellis|isprimitive|iscatastrophic|intrlv|intdump|ifft|huffmanenco|huffmandict|huffmandeco|hilbiir|helscanintrlv|helscandeintrlv|helintrlv|heldeintrlv|hank2sys|hammgen|gray2bin|gfweight|gftuple|gftrunc|gftable|gfsub|gfroots|gfrepcov|gfrank|gfprimfd|gfprimdf|gfprimck|gfpretty|gfmul|gfminpol|gflineq|gffilter|gfdiv|gfdeconv|gfcosets|gfconv|gfadd|gf|genqammod|genqamdemod|gen2par|fskmod|fskdemod|fmmod|fmdemod|finddelay|filter|fft|fec\.ldpcenc|fec\.ldpcdec|eyediagram|equalize|encode|dvbs2ldpc|dpskmod|dpskdemod|dpcmopt|dpcmenco|dpcmdeco|doppler\.rounded|doppler\.rjakes|doppler\.jakes|doppler\.gaussian|doppler\.flat|doppler\.bigaussian|doppler\.ajakes|doppler|distspec|dftmtx|dfe|deintrlv|decode|de2bi|cyclpoly|cyclgen|cosets|convmtx|convintrlv|convenc|convdeintrlv|compand|commscope\.eyediagram|commscope|cma|bsc|biterr|bin2gray|bi2de|bertool|bersync|berfit|berfading|berconfint|bercoding|berawgn|bchnumerr|bchgenpoly|bchenc|bchdec|awgn|arithenco|arithdeco|ammod|amdemod|alignsignals|algintrlv|algdeintrlv)\b
+ name
+ support.toolbox.communications.matlab
+
+ matlab_support_toolbox_control_systems
+
+ comment
+ Matlab control systems toolbox
+ match
+ (?<!\.)\b(zpkdata|zpk|zgrid|zero|totaldelay|tfdata|tf|stepplot|stepinfo|step|stack|stabsep|ssdata|ssbal|ss2ss|ss|sminreal|size|sisotool|sisoinit|sigmaplot|sigma|sgrid|setoptions|setdelaymodel|set|series|rss|rlocusplot|rlocus|reshape|reg|real|pzplot|pzmap|pole|place|parallel|pade|ord2|obsvf|obsv|nyquistplot|nyquist|norm|nicholsplot|nichols|ngrid|ndims|modsep|modred|minreal|margin|lyapchol|lyap|ltiview|ltiprops|ltimodels|lsimplot|lsiminfo|lsim|lqry|lqrd|lqr|lqgreg|lqg|lft|kalmd|kalman|issiso|isproper|isempty|isdt|isct|iopzplot|iopzmap|inv|interp|initialplot|initial|impulseplot|impulse|imag|hsvplot|hsvd|hasdelay|gram|getoptions|getdelaymodel|get|gensig|gdare|gcare|fselect|freqresp|frdata|frd|fnorm|filt|feedback|fcat|evalfr|estim|esort|dssdata|dss|dsort|drss|dlyapchol|dlyap|dlqr|delayss|delay2z|dcgain|dare|damp|d2d|d2c|ctrlpref|ctrbf|ctrb|covar|connect|conj|chgunits|care|canon|c2d|bodeplot|bodemag|bode|bandwidth|balred|balreal|augstate|append|allmargin|acker|abs)\b
+ name
+ support.toolbox.control-systems.matlab
+
+ matlab_support_toolbox_curve_fitting
+
+ comment
+ Matlab curve fitting toolbox
+ match
+ (?<!\.)\b(type|smooth|set|probvalues|probnames|predint|plot|numcoeffs|numargs|islinear|integrate|indepnames|get|formula|fittype|fitoptions|fit|feval|excludedata|differentiate|dependnames|datastats|confint|coeffvalues|coeffnames|cftool|cflibhelp|cfit|category|argnames)\b
+ name
+ support.toolbox.curve-fitting.matlab
+
+ matlab_support_toolbox_data_acquisition
+
+ comment
+ Matlab data acquisition toolbox
+ match
+ (?<!\.)\b(wait|trigger|stop|start|softscope|size|showdaqevents|setverify|set|save|putvalue|putsample|putdata|propinfo|peekdata|obj2mfile|muxchanidx|makenames|load|length|isvalid|issending|isrunning|islogging|isdioline|ischannel|inspect|getvalue|getsample|getdata|get|flushdata|disp|digitalio|delete|dec2binvec|daqreset|daqregister|daqread|daqmem|daqhwinfo|daqhelp|daqfind|daqcallback|clear|binvec2dec|analogoutput|analoginput|addmuxchannel|addline|addchannel)\b
+ name
+ support.toolbox.data-acquisition.matlab
+
+ matlab_support_toolbox_database
+
+ comment
+ Matlab database toolbox
+ match
+ (?<!\.)\b(width|versioncolumns|update|unregister|tables|tableprivileges|supports|sql2native|setdbprefs|set|runstoredprocedure|rsmd|rows|rollback|resultset|register|querytimeout|querybuilder|procedures|procedurecolumns|primarykeys|ping|namecolumn|logintimeout|isurl|isreadonly|isnullcolumn|isjdbc|isdriver|isconnection|insert|indexinfo|importedkeys|getdatasources|get|fetchmulti|fetch|fastinsert|exportedkeys|exec|drivermanager|driver|dmd|database\.fetch|database|cursor\.fetch|crossreference|confds|commit|columns|columnprivileges|columnnames|cols|close|clearwarnings|bestrowid|attr)\b
+ name
+ support.toolbox.database.matlab
+
+ matlab_support_toolbox_datafeed
+
+ comment
+ Matlab datafeed toolbox
+ match
+ (?<!\.)\b(yahoo|tables|stop|stockticker|showtrades|reuters|pricevol|nextinfo|kx|isconnection|insert|info|idc|hyperfeed|havertool|haver|get|fred|fetch|factset|exec|datastream|close|bloomberg)\b
+ name
+ support.toolbox.datafeed.matlab
+
+ matlab_support_toolbox_design
+
+ comment
+ Matlab design toolbox
+ match
+ (?<!\.)\b(zplane|zpkshiftc|zpkshift|zpkrateup|zpklp2xn|zpklp2xc|zpklp2mbc|zpklp2mb|zpklp2lp|zpklp2hp|zpklp2bsc|zpklp2bs|zpklp2bpc|zpklp2bp|zpkftransf|zpkbpc2bpc|zerophase|window|validstructures|tf2cl|tf2ca|stepz|specifyall|sos|setspecs|set2int|scaleopts|scalecheck|scale|reset|reorder|reffilter|realizemdl|qreport|polyphase|phasez|phasedelay|parallel|order|nstates|normalizefreq|normalize|norm|noisepsdopts|noisepsd|multistage|msesim|msepred|mfilt\.linearinterp|mfilt\.iirwdfinterp|mfilt\.iirwdfdecim|mfilt\.iirinterp|mfilt\.iirdecim|mfilt\.holdinterp|mfilt\.firtdecim|mfilt\.firsrc|mfilt\.firinterp|mfilt\.firfracinterp|mfilt\.firfracdecim|mfilt\.firdecim|mfilt\.fftfirinterp|mfilt\.farrowsrc|mfilt\.cicinterp|mfilt\.cicdecim|mfilt\.cascade|mfilt|measure|maxstep|limitcycle|lagrange|kaiserwin|isstable|issos|isreal|isminphase|ismaxphase|islinphase|isfir|isallpass|int|info|impz|iirshiftc|iirshift|iirrateup|iirpowcomp|iirpeak|iirnotch|iirls|iirlpnormc|iirlpnorm|iirlp2xn|iirlp2xc|iirlp2mbc|iirlp2mb|iirlp2lp|iirlp2hp|iirlp2bsc|iirlp2bs|iirlp2bpc|iirlp2bp|iirlinphase|iirgrpdelay|iirftransf|iircomb|iirbpc2bpc|ifir|help|grpdelay|gain|freqz|freqsamp|freqrespopts|freqrespest|firtype|firpr2chfb|firnyquist|firminphase|firls|firlpnorm|firlp2lp|firlp2hp|firhalfband|firgr|fireqint|firceqrip|fircband|filtstates\.cic|filterbuilder|filter|fftcoeffs|fdesign\.rsrc|fdesign\.peak|fdesign\.parameq|fdesign\.octave|fdesign\.nyquist|fdesign\.notch|fdesign\.lowpass|fdesign\.isinclp|fdesign\.interpolator|fdesign\.hilbert|fdesign\.highpass|fdesign\.halfband|fdesign\.fracdelay|fdesign\.differentiator|fdesign\.decimator|fdesign\.ciccomp|fdesign\.bandstop|fdesign\.bandpass|fdesign\.arbmagnphase|fdesign\.arbmag|fdesign|fdatool|fcfwrite|farrow|euclidfactors|equiripple|ellip|double|disp|dfilt\.wdfallpass|dfilt\.scalar|dfilt\.parallel|dfilt\.latticemamin|dfilt\.latticemamax|dfilt\.latticearma|dfilt\.latticear|dfilt\.latticeallpass|dfilt\.dfsymfir|dfilt\.dffirt|dfilt\.dffir|dfilt\.dfasymfir|dfilt\.df2tsos|dfilt\.df2t|dfilt\.df2sos|dfilt\.df2|dfilt\.df1tsos|dfilt\.df1t|dfilt\.df1sos|dfilt\.df1|dfilt\.cascadewdfallpass|dfilt\.cascadeallpass|dfilt\.cascade|dfilt\.calatticepc|dfilt\.calattice|dfilt\.allpass|dfilt|designopts|designmethods|design|denormalize|cumsec|cost|convert|coewrite|coeread|coeffs|cl2tf|cheby2|cheby1|ca2tf|butter|block|autoscale|allpassshiftc|allpassshift|allpassrateup|allpasslp2xn|allpasslp2xc|allpasslp2mbc|allpasslp2mb|allpasslp2lp|allpasslp2hp|allpasslp2bsc|allpasslp2bs|allpasslp2bpc|allpasslp2bp|allpassbpc2bpc|adaptfilt\.ufdaf|adaptfilt\.tdafdft|adaptfilt\.tdafdct|adaptfilt\.swrls|adaptfilt\.swftf|adaptfilt\.ss|adaptfilt\.se|adaptfilt\.sd|adaptfilt\.rls|adaptfilt\.qrdrls|adaptfilt\.qrdlsl|adaptfilt\.pbufdaf|adaptfilt\.pbfdaf|adaptfilt\.nlms|adaptfilt\.lsl|adaptfilt\.lms|adaptfilt\.hswrls|adaptfilt\.hrls|adaptfilt\.gal|adaptfilt\.ftf|adaptfilt\.filtxlms|adaptfilt\.fdaf|adaptfilt\.dlms|adaptfilt\.blmsfft|adaptfilt\.blms|adaptfilt\.bap|adaptfilt\.apru|adaptfilt\.ap|adaptfilt\.adjlms|adaptfilt)\b
+ name
+ support.toolbox.design.matlab
+
+ matlab_support_toolbox_excel_link
+
+ comment
+ Matlab excel link toolbox
+ match
+ (?<!\.)\b(matlabsub|matlabinit|matlabfcn|MLUseFullDesktop|MLUseCellArray|MLStartDir|MLShowMatlabErrors|MLPutVar|MLPutMatrix|MLOpen|MLMissingDataAsNaN|MLGetVar|MLGetMatrix|MLGetFigure|MLEvalString|MLDeleteMatrix|MLClose|MLAutoStart|MLAppendMatrix)\b
+ name
+ support.toolbox.excel-link.matlab
+
+ matlab_support_toolbox_filder_design_hdl_coder
+
+ comment
+ Matlab filder design hdl coder toolbox
+ match
+ (?<!\.)\b(generatetbstimulus|generatetb|generatehdl|fdhdltool)\b
+ name
+ support.toolbox.filder-design-hdl-coder.matlab
+
+ matlab_support_toolbox_financial
+
+ comment
+ Matlab financial toolbox
+ match
+ (?<!\.)\b(zero2pyld|zero2fwd|zero2disc|zbtyield|zbtprice|yldtbill|yldmat|ylddisc|yearfrac|yeardays|year|xirr|x2mdate|wrkdydif|willpctr|willad|weights2holdings|weekday|wclose|volroc|vertcat|uplus|uminus|uicalendar|ugarchsim|ugarchpred|ugarchllf|ugarch|typprice|tsmovavg|tsmom|tsaccel|tr2bonds|toweekly|totalreturnprice|tosemi|toquoted|toquarterly|tomonthly|todecimal|today|todaily|toannual|times|time2date|tick2ret|thirtytwo2dec|thirdwednesday|tbl2bond|taxedrr|targetreturn|subsref|subsasgn|stochosc|std|spctkd|sortfts|smoothts|size|sharpe|setfield|selectreturn|second|rsindex|rmfield|ret2tick|resamplets|rdivide|pyld2zero|pvvar|pvtrend|pvfix|prtbill|prmat|prdisc|prcroc|prbyzero|power|posvolidx|portvrisk|portstats|portsim|portrand|portopt|portcons|portalpha|portalloc|pointfig|plus|plot|periodicreturns|peravg|pcpval|pcglims|pcgcomp|pcalims|payuni|payper|payodd|payadv|opprofit|onbalvol|nweekdate|now|nomrr|negvolidx|mvnrstd|mvnrobj|mvnrmle|mvnrfish|mtimes|mrdivide|movavg|months|month|mirr|minute|minus|min|merge|medprice|mean|maxdrawdown|max|macd|m2xdate|lweekdate|lpm|log2|log10|log|llow|length|leadts|lbusdate|lagts|issorted|isfield|isequal|iscompatible|isbusday|irr|inforatio|hour|horzcat|holidays|holdings2weights|hist|highlow|hhigh|getnameidx|getfield|geom2arith|fwd2zero|fvvar|fvfix|fvdisc|ftsuniq|ftstool|ftsinfo|ftsgui|ftsbound|fts2mat|fts2ascii|frontier|frontcon|freqstr|freqnum|frac2cur|fpctkd|fints|filter|fillts|fieldnames|fetch|fbusdate|extfield|exp|ewstats|eomday|eomdate|end|emaxdrawdown|elpm|effrr|ecmnstd|ecmnobj|ecmnmle|ecmninit|ecmnhess|ecmnfish|ecmmvnrstd|ecmmvnrobj|ecmmvnrmle|ecmmvnrfish|ecmlsrobj|ecmlsrmle|discrate|disc2zero|diff|depstln|depsoyd|deprdv|depgendb|depfixdb|dec2thirtytwo|daysdif|daysadd|daysact|days365|days360psa|days360isda|days360e|days360|day|datewrkdy|datevec|datestr|datenum|datemnth|datefind|datedisp|dateaxis|date2time|cur2str|cur2frac|cumsum|createholidays|cpnpersz|cpndaysp|cpndaysn|cpndatepq|cpndatep|cpndatenq|cpndaten|cpncount|cov2corr|corr2cov|convertto|convert2sur|chfield|chartfts|chaikvolat|chaikosc|cftimes|cfport|cfdur|cfdates|cfconv|cfamounts|candle|busdays|busdate|boxcox|bollinger|bolling|bndyield|bndspread|bndprice|bnddury|bnddurp|bndconvy|bndconvp|blsvega|blstheta|blsrho|blsprice|blslambda|blsimpv|blsgamma|blsdelta|blkprice|blkimpv|binprice|beytbill|barh|bar3h|bar3|bar|ascii2fts|arith2geom|annuterm|annurate|amortize|adosc|adline|active2abs|acrudisc|acrubond|accrfrac|abs2active)\b
+ name
+ support.toolbox.financial.matlab
+
+ matlab_support_toolbox_financial_derivatives
+
+ comment
+ Matlab financial derivatives toolbox
+ match
+ (?<!\.)\b(trintreeshape|trintreepath|treeviewer|treeshape|treepath|time2date|swaptionbyhw|swaptionbyhjm|swaptionbybk|swaptionbybdt|swapbyzero|swapbyhw|swapbyhjm|swapbybk|swapbybdt|stockspec|stockoptspec|ratetimes|rate2disc|optstockbyitt|optstockbyeqp|optstockbycrr|optbndbyhw|optbndbyhjm|optbndbybk|optbndbybdt|mmktbyhjm|mmktbybdt|mktrintree|mktree|mkbush|lookbackbyitt|lookbackbyeqp|lookbackbycrr|itttree|itttimespec|ittsens|ittprice|isafin|intenvset|intenvsens|intenvprice|intenvget|insttypes|instswaption|instswap|instsetfield|instselect|instoptstock|instoptbnd|instlookback|instlength|instgetcell|instget|instfloor|instfloat|instfixed|instfind|instfields|instdisp|instdelete|instcompound|instcf|instcap|instbond|instbarrier|instasian|instaddfield|instadd|hwvolspec|hwtree|hwtimespec|hwsens|hwprice|hjmvolspec|hjmtree|hjmtimespec|hjmsens|hjmprice|hedgeslf|hedgeopt|floorbyhw|floorbyhjm|floorbybk|floorbybdt|floatbyzero|floatbyhw|floatbyhjm|floatbybk|floatbybdt|fixedbyzero|fixedbyhw|fixedbyhjm|fixedbybk|fixedbybdt|eqptree|eqptimespec|eqpsens|eqpprice|disc2rate|derivset|derivget|datedisp|date2time|cvtree|crrtree|crrtimespec|crrsens|crrprice|compoundbyitt|compoundbyeqp|compoundbycrr|classfin|cfbyzero|cfbyhw|cfbyhjm|cfbybk|cfbybdt|capbyhw|capbyhjm|capbybk|capbybdt|bushshape|bushpath|bondbyzero|bondbyhw|bondbyhjm|bondbybk|bondbybdt|bkvolspec|bktree|bktimespec|bksens|bkprice|bdtvolspec|bdttree|bdttimespec|bdtsens|bdtprice|barrierbyitt|barrierbyeqp|barrierbycrr|asianbyitt|asianbyeqp|asianbycrr)\b
+ name
+ support.toolbox.financial-derivatives.matlab
+
+ matlab_support_toolbox_fixed_income
+
+ comment
+ Matlab fixed income toolbox
+ match
+ (?<!\.)\b(zeroyield|zeroprice|tfutyieldbyrepo|tfutpricebyrepo|tfutimprepo|tfutbyyield|tfutbyprice|tbillyield2disc|tbillyield|tbillval01|tbillrepo|tbillprice|tbilldisc2yield|stepcpnyield|stepcpnprice|stepcpncfamounts|psaspeed2rate|psaspeed2default|mbsyield2speed|mbsyield2oas|mbsyield|mbswal|mbsprice2speed|mbsprice2oas|mbsprice|mbspassthrough|mbsoas2yield|mbsoas2price|mbsnoprepay|mbsdury|mbsdurp|mbsconvy|mbsconvp|mbscfamounts|liborprice|liborfloat2fixed|liborduration|convfactor|cfamounts|cdyield|cdprice|cdai|cbprice|bkput|bkfloorlet|bkcaplet|bkcall)\b
+ name
+ support.toolbox.fixed-income.matlab
+
+ matlab_support_toolbox_fixed_point
+
+ comment
+ Matlab fixed-point toolbox
+ match
+ (?<!\.)\b(zlim|ylim|xlim|wordlength|waterfall|voronoin|voronoi|vertcat|upperbound|uplus|uminus|uint8|uint32|uint16|triu|trisurf|triplot|trimesh|tril|treeplot|transpose|tostring|toeplitz|times|text|surfnorm|surfl|surfc|surf|sum|subsref|subsasgn|sub|stripscaling|streamtube|streamslice|streamribbon|stem3|stem|stairs|squeeze|sqrt|spy|slice|size|single|sign|shiftdim|set|semilogy|semilogx|sdec|scatter3|scatter|savefipref|round|rose|ribbon|rgbplot|reshape|resetlog|reset|rescale|repmat|realmin|realmax|real|range|randquant|quiver3|quiver|quantizer|quantize|pow2|polar|plus|plotyy|plotmatrix|plot3|plot|permute|pcolor|patch|or|oct|nunderflows|numerictype|numberofelements|num2int|num2hex|num2bin|noverflows|not|noperations|ne|ndims|mtimes|mpy|minus|minlog|min|meshz|meshc|mesh|maxlog|max|lt|lsb|lowerbound|loglog|logical|line|length|le|isvector|issigned|isscalar|isrow|isreal|ispropequal|isobject|isnumerictype|isnumeric|isnan|isinf|isfinite|isfimath|isfi|isequal|isempty|iscolumn|ipermute|intmin|intmax|int8|int32|int16|int|innerprodintbits|imag|horzcat|histc|hist|hex2num|hex|hankel|gt|gplot|getmsb|getlsb|get|ge|fractionlength|fplot|flipud|fliplr|flipdim|fipref|fimath|fi|feather|ezsurfc|ezsurf|ezpolar|ezplot3|ezplot|ezmesh|ezcontourf|ezcontour|exponentmin|exponentmax|exponentlength|exponentbias|etreeplot|errorbar|eq|eps|end|double|divide|disp|diag|denormalmin|denormalmax|dec|ctranspose|copyobj|convergent|contourf|contourc|contour3|contour|conj|coneplot|complex|compass|comet3|comet|clabel|buffer|bitxorreduce|bitxor|bitsrl|bitsra|bitsll|bitsliceget|bitshift|bitset|bitror|bitrol|bitorreduce|bitor|bitget|bitconcat|bitcmp|bitandreduce|bitand|bin2num|bin|barh|bar|area|any|and|all|add|abs)\b
+ name
+ support.toolbox.fixed-point.matlab
+
+ matlab_support_toolbox_fuzzy_logic
+
+ comment
+ Matlab fuzzy logic toolbox
+ match
+ (?<!\.)\b(zmf|writefis|trimf|trapmf|surfview|subclust|smf|sigmf|showrule|showfis|sffis|setfis|ruleview|ruleedit|rmvar|rmmf|readfis|psigmf|probor|plotmf|plotfis|pimf|parsrule|newfis|mfedit|mf2mf|mam2sug|getfis|gensurf|genfis3|genfis2|genfis1|gbellmf|gaussmf|gauss2mf|fuzzy|fuzblock|fuzarith|findcluster|fcm|evalmf|evalfis|dsigmf|defuzz|convertfis|anfisedit|anfis|addvar|addrule|addmf)\b
+ name
+ support.toolbox.fuzzy-logic.matlab
+
+ matlab_support_toolbox_garch
+
+ comment
+ Matlab GARCH toolbox
+ match
+ (?<!\.)\b(ret2price|price2ret|ppTSTest|ppARTest|ppARDTest|parcorr|lratiotest|lbqtest|lagmatrix|hpfilter|garchsim|garchset|garchpred|garchplot|garchma|garchinfer|garchget|garchfit|garchdisp|garchcount|garchar|dfTSTest|dfARTest|dfARDTest|crosscorr|autocorr|archtest|aicbic)\b
+ name
+ support.toolbox.garch.matlab
+
+ matlab_support_toolbox_genetic_algorithms
+
+ comment
+ Matlab genetic algorithms toolbox
+ match
+ (?<!\.)\b(threshacceptbnd|simulannealbnd|saoptimset|saoptimget|psoptimset|psoptimget|psearchtool|patternsearch|gatool|gaoptimset|gaoptimget|gamultiobj|ga)\b
+ name
+ support.toolbox.genetic-algorithms.matlab
+
+ matlab_support_toolbox_image_acquisition
+
+ comment
+ Matlab image acquisition toolbox
+ match
+ (?<!\.)\b(wait|videoinput|triggerinfo|triggerconfig|trigger|stoppreview|stop|start|set|save|propinfo|preview|peekdata|obj2mfile|load|isvalid|isrunning|islogging|imaqtool|imaqreset|imaqmontage|imaqmem|imaqhwinfo|imaqhelp|imaqfind|getsnapshot|getselectedsource|getdata|get|flushdata|disp|delete|closepreview|clear)\b
+ name
+ support.toolbox.image-acquisition.matlab
+
+ matlab_support_toolbox_image_processing
+
+ comment
+ Matlab image processing toolbox
+ match
+ (?<!\.)\b(zoom|ycbcr2rgb|xyz2uint16|xyz2double|wiener2|whitepoint|watershed|warp|uintlut|uint8|uint16|truesize|translate|tonemap|tforminv|tformfwd|tformarray|subimage|stretchlim|strel|stdfilt|std2|roipoly|roifilt2|roifill|roicolor|rgbplot|rgb2ycbcr|rgb2ntsc|rgb2ind|rgb2hsv|rgb2gray|regionprops|reflect|rangefilt|radon|qtsetblk|qtgetblk|qtdecomp|psf2otf|poly2mask|pixval|phantom|para2fan|padarray|otf2psf|ordfilt2|ntsc2rgb|normxcorr2|nlfilter|nitfread|nitfinfo|montage|medfilt2|mean2|mat2gray|maketform|makeresampler|makelut|makecform|makeConstrainToRectFcn|label2rgb|lab2uint8|lab2uint16|lab2double|isrgb|isnitf|isind|isicc|isgray|isflat|isbw|iradon|iptwindowalign|iptsetpref|iptremovecallback|iptnum2ordinal|ipticondir|iptgetpref|iptgetapi|iptdemos|iptcheckstrs|iptchecknargin|iptcheckmap|iptcheckinput|iptcheckhandle|iptcheckconn|iptaddcallback|iptSetPointerBehavior|iptPointerManager|iptGetPointerBehavior|ippl|intlut|interfileread|interfileinfo|ind2rgb|ind2gray|imwrite|imview|imtransform|imtophat|imtool|imsubtract|imshow|imscrollpanel|imsave|imrotate|imresize|imregionalmin|imregionalmax|imrect|imreconstruct|imread|impyramid|imputfile|improfile|impositionrect|impoly|impoint|implay|impixelregionpanel|impixelregion|impixelinfoval|impixelinfo|impixel|imoverviewpanel|imoverview|imopen|imnoise|immultiply|immovie|immagbox|imline|imlincomb|imimposemin|imhmin|imhmax|imhist|imhandles|imgetfile|imgcf|imgca|imfreehand|imfinfo|imfilter|imfill|imextendedmin|imextendedmax|imerode|imellipse|imdivide|imdistline|imdisplayrange|imdilate|imcrop|imcontrast|imcontour|imcomplement|imclose|imclearborder|imbothat|imattributes|imapprox|imagemodel|imageinfo|imadjust|imadd|imabsdiff|im2uint8|im2uint16|im2single|im2java2d|im2java|im2int16|im2double|im2col|im2bw|ifftn|ifft2|ifanbeam|idct2|iccwrite|iccroot|iccread|iccfind|hsv2rgb|houghpeaks|houghlines|hough|histeq|hdrread|graythresh|grayslice|graycoprops|graycomatrix|gray2ind|getsequence|getrect|getrangefromclass|getpts|getnhood|getneighbors|getline|getimagemodel|getimage|getheight|fwind2|fwind1|ftrans2|fspecial|fsamp2|freqz2|freqspace|fliptform|findbounds|filter2|fftshift|fftn|fft2|fanbeam|fan2para|entropyfilt|entropy|edgetaper|edge|double|dither|dicomwrite|dicomuid|dicomread|dicomlookup|dicominfo|dicomdict|dicomanon|demosaic|decorrstretch|deconvwnr|deconvreg|deconvlucy|deconvblind|dctmtx|dct2|cpstruct2pairs|cpselect|cpcorr|cp2tform|corr2|convn|convmtx2|conv2|conndef|colorbar|colfilt|col2im|cmunique|cmpermute|checkerboard|bwunpack|bwulterode|bwtraceboundary|bwselect|bwperim|bwpack|bwmorph|bwlabeln|bwlabel|bwhitmiss|bweuler|bwdist|bwboundaries|bwareaopen|bwarea|brighten|blkproc|bestblk|axes2pix|applylut|applycform|analyze75read|analyze75info|adapthisteq)\b
+ name
+ support.toolbox.image-processing.matlab
+
+ matlab_support_toolbox_instrument_control
+
+ comment
+ Matlab instrument control toolbox
+ match
+ (?<!\.)\b(visa|update|udp|trigger|tmtool|tcpip|stopasync|spoll|size|set|serialbreak|serial|selftest|scanstr|save|resolvehost|remove|record|readasync|query|propinfo|obj2mfile|midtest|midedit|methods|memwrite|memunmap|memread|mempoke|mempeek|memmap|makemid|load|length|iviconfigurationstore|isvalid|invoke|instrreset|instrnotify|instrid|instrhwinfo|instrhelp|instrfindall|instrfind|instrcallback|inspect|icdevice|gpib|geterror|get|fwrite|fscanf|fread|fprintf|fopen|flushoutput|flushinput|fgets|fgetl|fclose|echoudp|echotcpip|disp|disconnect|devicereset|delete|connect|commit|clrdevice|clear|binblockwrite|binblockread|add)\b
+ name
+ support.toolbox.instrument-control.matlab
+
+ matlab_support_toolbox_mapping
+
+ comment
+ Matlab mapping toolbox
+ match
+ (?<!\.)\b(zerom|zero22pi|zdatam-ui|zdatam|wrapToPi|wrapTo360|wrapTo2Pi|wrapTo180|worldmap|worldfilewrite|worldfileread|westof|vmap0ui|vmap0rhead|vmap0read|vmap0data|vinvtran|viewshed|vfwdtran|vec2mtx|utmzoneui|utmzone|utmgeoid|usgsdems|usgsdem|usgs24kdem|usamap|updategeostruct|unwrapMultipart|unitstr|unitsratio|undotrim|undoclip|uimaptbx|trimdata|trimcart|trackui|trackg|track2|track1|track|toRadians|toDegrees|tissot|timezone|timedim|time2str|tightmap|tigerp|tigermif|tgrline|textm|tbase|tagm-ui|tagm|symbolm|surfm|surflsrm|surflm|surfdist|surfacem|str2angle|stem3m|stdm|stdist|spzerom|spcread|smoothlong|sm2rad|sm2nm|sm2km|sm2deg|sizem|showm-ui|showm|showaxes|shapewrite|shaperead|shapeinfo|shaderel|setpostn|setm|setltln|seedm|sectorg|sec2hr|sec2hms|sec2hm|sdtsinfo|sdtsdemread|scxsc|scirclui|scircleg|scircle2|scircle1|scatterm|scaleruler|satbath|rsphere|roundn|rotatetext|rotatem|rootlayr|rhxrh|restack|resizem|removeExtraNanSeparators|refvec2mat|refmat2vec|reducem|reckon|readmtx|readfk5|readfields|rcurve|rad2sm|rad2nm|rad2km|rad2dms|rad2dm|rad2deg|quiverm|quiver3m|qrydata|putpole|projlist|projinv|projfwd|project|previewmap|polyxpoly|polysplit|polymerge|polyjoin|polycut|polybool|poly2fv|poly2cw|poly2ccw|polcmap|plotm|plot3m|plabel|pixcenters|pix2map|pix2latlon|pcolorm|patchm|patchesm|parallelui|paperscale|panzoom|originui|org2pol|onem|npi2pi|northarrow|nm2sm|nm2rad|nm2km|nm2deg|newpole|neworig|navfix|nanm|nanclip|namem|n2ecc|mobjects|mlayers|mlabelzero22pi|mlabel|minvtran|minaxis|mfwdtran|meshm|meshlsrm|meshgrat|meridianfwd|meridianarc|meanm|mdistort|mat2hms|mat2dms|mapview|maptrims|maptrimp|maptriml|maptrim|maptool|mapshow|maps|mapprofile|mapoutline|maplist|mapbbox|map2pix|makesymbolspec|makerefmat|makemapped|makedbfspec|makeattribspec|majaxis|lv2ecef|ltln2val|los2|linem|linecirc|limitm|lightmui|lightm|legs|lcolorbar|latlon2pix|kmlwrite|km2sm|km2rad|km2nm|km2deg|ispolycw|ismapped|ismap|isShapeMultipart|intrplon|intrplat|interpm|inputm|ind2rgb8|imbedm|hr2sec|hr2hms|hr2hm|hms2sec|hms2mat|hms2hr|hms2hm|histr|hista|hidem-ui|hidem|handlem-ui|handlem|gtopo30s|gtopo30|gtextm|gshhs|grn2eqa|gridm|grid2image|grepfields|gradientm|globedems|globedem|getworldfilename|getseeds|getm|geotiffread|geotiffinfo|geotiff2mstruct|geoshow|geoloc2grid|geodetic2geocentricLat|geodetic2ecef|geocentric2geodeticLat|gcxsc|gcxgc|gcwaypts|gcpmap|gcm|gc2sc|fromRadians|fromDegrees|framem|flatearthpoly|flat2ecc|fipsname|findm|filterm|fillm|fill3m|extractm|extractfield|etopo5|etopo|eqa2grn|epsm|encodem|ellipse1|elevation|egm96geoid|ecef2lv|ecef2geodetic|ecc2n|ecc2flat|eastof|dteds|dted|driftvel|driftcorr|dreckon|dms2rad|dms2mat|dms2dm|dms2degrees|dms2deg|dm2degrees|distortcalc|distdim|distance|dist2str|displaym|departure|demdataui|demcmap|degrees2dms|degrees2dm|deg2sm|deg2rad|deg2nm|deg2km|deg2dms|deg2dm|defaultm|dcwrhead|dcwread|dcwgaz|dcwdata|daspectm|crossfix|convertlat|contourm|contourfm|contourcmap|contour3m|cometm|comet3m|combntns|colorui|colorm|cmapui|clrmenu|closePolygonParts|clmo-ui|clmo|clma|clipdata|clegendm|clabelm|circcirc|changem|cart2grn|camupm|camtargm|camposm|bufferm|azimuth|axesscale|axesmui|axesm|axes2ecc|avhrrlambert|avhrrgoode|areaquad|areamat|areaint|arcgridread|antipode|angledim|angl2str|almanac)\b
+ name
+ support.toolbox.mapping.matlab
+
+ matlab_support_toolbox_model_based_calibration
+
+ comment
+ Matlab model-based calibration toolbox
+ match
+ (?<!\.)\b(modelinput|getAlternativeTypes|getAlternativeNames|YData|XDataNames|XData|Widths|Values|Value|UserVariables|UpdateResponseFeatures|UpdateResponse|Units|Type|TestPlans|TestFilters|SummaryStatisticsForTest|SummaryStatistics|StepwiseStatus|StepwiseSelection|StepwiseRegression|Status|StatisticsDialog|SizeOfParameterSet|SingleVIF|SignalUnits|SignalNames|SetupDialog|SetTermStatus|SaveAs|Save|RollbackEdit|RestoreDataForTest|RestoreData|Responses|ResponseSignalName|Response|RemoveVariable|RemoveTestFilter|RemoveOutliersForTest|RemoveOutliers|RemoveFilter|RemoveData|Remove|RecordsPerTest|Properties|PredictedValueForTest|PredictedValue|PartialVIF|Parameters|ParameterStatistics|PEVForTest|PEV|Owner|OutputData|OutlierIndicesForTest|OutlierIndices|NumberOfTests|NumberOfRecords|NumberOfParameters|NumberOfInputs|New|Names|Name|MultipleVIF|ModifyVariable|ModifyTestFilter|ModifyFilter|Modified|ModelSetup|ModelForTest|Model|MakeHierarchicalResponse|LocalResponses|LoadProject|Load|Levels|Level|Jacobian|IsEditable|IsBeingEdited|IsAlternative|InputsPerLevel|Inputs|InputSignalNames|InputSetupDialog|InputData|ImportFromMBCDataStructure|ImportFromFile|GetTermStatus|GetTermLabel|GetIncludedTerms|GetDesignMatrix|GetAllTerms|FitAlgorithm|Fit|Filters|Filename|ExportToMBCDataStructure|Export|Evaluate|DoubleResponseData|DoubleInputData|DiagnosticStatistics|DetachData|DefineTestGroups|DefineNumberOfRecordsPerTest|DefaultModels|DataFileTypes|Data|CreateTestplan|CreateResponseFeature|CreateResponse|CreateProject|CreateModel|CreateData|CreateAlternativeModels|CreateAlgorithm|Covariance|Correlation|CopyData|CommitEdit|ChooseAsBest|Centers|BoxCoxSSE|BeginEdit|AttachData|Append|AlternativeResponses|AlternativeModelStatistics|AliasMatrix|AddVariable|AddTestFilter|AddFilter)\b
+ name
+ support.toolbox.model-based-calibration.matlab
+
+ matlab_support_toolbox_model_predictive_control
+
+ comment
+ Matlab model predictive control toolbox
+ match
+ (?<!\.)\b(zpk|trim|tf|ss|size|sim|setoutdist|setname|setmpcsignals|setmpcdata|setindist|setestim|set|qpdantz|plot|pack|mpcverbosity|mpcstate|mpcsimopt|mpcprops|mpcmove|mpchelp|mpc|getoutdist|getname|getmpcdata|getindist|getestim|get|d2d|compare|cloffset)\b
+ name
+ support.toolbox.model-predictive-control.matlab
+
+ matlab_support_toolbox_neural_network
+
+ comment
+ Matlab neural network toolbox
+ match
+ (?<!\.)\b(vec2ind|tribas|trainscg|trains|trainrp|trainr|trainoss|trainlm|traingdx|traingdm|traingda|traingd|traincgp|traincgf|traincgb|trainc|trainbr|trainbfgc|trainbfg|trainb|train|tansig|sse|srchhyb|srchgol|srchcha|srchbre|srchbac|sp2narx|softmax|sim|setx|seq2con|scalprod|satlins|satlin|revert|removerows|removeconstantrows|randtop|rands|randnr|randnc|radbas|quant|purelin|processpca|postreg|poslin|pnormc|plotvec|plotv|plotsom|plotpv|plotperf|plotpc|plotes|plotep|plotbr|normr|normprod|normc|nntool|nnt2som|nnt2rb|nnt2p|nnt2lvq|nnt2lin|nnt2hop|nnt2ff|nnt2elm|nnt2c|nftool|newsom|newrbe|newrb|newpnn|newp|newnarxsp|newnarx|newlvq|newlrn|newlind|newlin|newhop|newgrnn|newfftd|newff|newelm|newdtdnn|newcf|newc|network|netsum|netprod|netinv|negdist|mseregec|msereg|mse|minmax|midpoint|maxlinlr|mapstd|mapminmax|mandist|mae|logsig|linkdist|learnwh|learnsom|learnpn|learnp|learnos|learnlv2|learnlv1|learnk|learnis|learnhd|learnh|learngdm|learngd|learncon|initzero|initwb|initnw|initlay|initcon|init|ind2vec|hintonwb|hintonw|hextop|hardlims|hardlim|gridtop|getx|gensim|fixunknowns|errsurf|dotprod|dividerand|divideint|divideind|divideblock|dist|display|disp|convwf|concur|con2seq|compet|combvec|calcperf|calcpd|calcjx|calcjejj|calcgx|boxdist|adapt)\b
+ name
+ support.toolbox.neural-network.matlab
+
+ matlab_support_toolbox_opc
+
+ comment
+ Matlab OPC toolbox
+ match
+ (?<!\.)\b(writeasync|write|wait|trend|stop|start|showopcevents|set|serveritems|serveritemprops|save|removepublicgroup|refresh|readasync|read|propinfo|peekdata|openosf|opctool|opcsupport|opcstruct2timeseries|opcstruct2array|opcserverinfo|opcreset|opcregister|opcread|opcqstr|opcqparts|opcqid|opchelp|opcfind|opcda|opccallback|obj2mfile|makepublic|load|isvalid|getnamespace|getdata|get|genslwrite|genslread|flushdata|flatnamespace|disp|disconnect|delete|copyobj|connect|clonegroup|cleareventlog|cancelasync|additem|addgroup)\b
+ name
+ support.toolbox.opc.matlab
+
+ matlab_support_toolbox_optimization
+
+ comment
+ Matlab optimization toolbox
+ match
+ (?<!\.)\b(quadprog|optimtool|optimset|optimget|lsqnonneg|lsqnonlin|lsqlin|lsqcurvefit|linprog|gangstr|fzmult|fzero|fsolve|fseminf|fminunc|fminsearch|fminimax|fmincon|fminbnd|fgoalattain|color|bintprog)\b
+ name
+ support.toolbox.optimization.matlab
+
+ matlab_support_toolbox_rf
+
+ comment
+ Matlab RF toolbox
+ match
+ (?<!\.)\b(writeva|write|timeresp|smith|setop|semilogy|semilogx|rfmodel\.rational|rfdata\.power|rfdata\.noise|rfdata\.nf|rfdata\.network|rfdata\.mixerspur|rfdata\.ip3|rfdata\.data|rfckt\.txline|rfckt\.twowire|rfckt\.shuntrlc|rfckt\.seriesrlc|rfckt\.series|rfckt\.rlcgline|rfckt\.passive|rfckt\.parallelplate|rfckt\.parallel|rfckt\.mixer|rfckt\.microstrip|rfckt\.lclowpasstee|rfckt\.lclowpasspi|rfckt\.lchighpasstee|rfckt\.lchighpasspi|rfckt\.lcbandstoptee|rfckt\.lcbandstoppi|rfckt\.lcbandpasstee|rfckt\.lcbandpasspi|rfckt\.hybridg|rfckt\.hybrid|rfckt\.delay|rfckt\.datafile|rfckt\.cpw|rfckt\.coaxial|rfckt\.cascade|rfckt\.amplifier|restore|read|polar|plotyy|plot|loglog|listparam|listformat|impulse|getz0|getop|freqresp|extract|circle|calculate|analyze)\b
+ name
+ support.toolbox.rf.matlab
+
+ matlab_support_toolbox_robust_control
+
+ comment
+ Matlab robust control toolbox
+ match
+ (?<!\.)\b(wcsens|wcnorm|wcmargin|wcgopt|wcgain|usubs|uss|usimsamp|usiminfo|usimfill|usample|ureal|uplot|umat|ultidyn|ufrd|udyn|ucomplexm|ucomplex|sysic|symdec|stack|stabproj|squeeze|slowfast|skewdec|simplify|showlmi|setmvar|setlmis|sectf|sdlsim|sdhinfsyn|sdhinfnorm|schurmr|robuststab|robustperf|robopt|repmat|reduce|randuss|randumat|randatom|quadstab|quadperf|pvinfo|pvec|psys|psinfo|popov|polydec|pdsimul|pdlstab|normalized2actual|newlmi|ncfsyn|ncfmr|ncfmargin|mussvextract|mussv|msfsyn|modreal|mktito|mkfilter|mixsyn|mincx|matnbr|mat2dec|ltrsyn|ltiarray2uss|loopsyn|loopsens|loopmargin|lmivar|lmiterm|lmireg|lminbr|lmiinfo|lmiedit|lftdata|isuncertain|ispsys|imp2ss|imp2exp|icsignal|iconnect|icomplexify|hinfsyn|hinfgs|hankelsv|hankelmr|h2syn|h2hinfsyn|gridureal|gevp|getlmis|genphase|gapmetric|fitmagfrd|fitfrd|feasp|evallmi|drawmag|dmplot|dksyn|dkitopt|diag|delmvar|dellmi|defcx|decnbr|decinfo|decay|dec2mat|dcgainmr|cpmargin|complexify|cmsclsyn|bstmr|bilin|balancmr|augw|aff2pol|actual2normalized)\b
+ name
+ support.toolbox.robust-control.matlab
+
+ matlab_support_toolbox_signal_processing
+
+ comment
+ Matlab signal processing toolbox
+ match
+ (?<!\.)\b(zplane|zp2tf|zp2ss|zp2sos|zerophase|yulewalk|xcov|xcorr2|xcorr|wvtool|wintool|window|vco|upsample|upfirdn|unwrap|uencode|udecode|tukeywin|tripuls|triang|tfestimate|tf2zpk|tf2zp|tf2ss|tf2sos|tf2latc|taylorwin|strips|stmcb|stepz|ss2zp|ss2tf|ss2sos|square|sptool|spectrum\.yulear|spectrum\.welch|spectrum\.periodogram|spectrum\.music|spectrum\.mtm|spectrum\.mcov|spectrum\.eigenvector|spectrum\.cov|spectrum\.burg|spectrum|spectrogram|sosfilt|sos2zp|sos2tf|sos2ss|sos2cell|sinc|sigwin|sgolayfilt|sgolay|seqperiod|schurrc|sawtooth|rootmusic|rooteig|rlevinson|residuez|resample|rectwin|rectpuls|rceps|rc2poly|rc2lar|rc2is|rc2ac|pyulear|pwelch|pulstran|prony|pow2db|polystab|polyscale|poly2rc|poly2lsf|poly2ac|pmusic|pmtm|pmcov|phasez|phasedelay|periodogram|peig|pcov|pburg|parzenwin|nuttallwin|mscohere|modulate|medfilt1|maxflat|lsf2poly|lpc|lp2lp|lp2hp|lp2bs|lp2bp|levinson|latcfilt|latc2tf|lar2rc|kaiserord|kaiser|is2rc|invfreqz|invfreqs|intfilt|interp|impz|impinvar|ifft2|ifft|idct|icceps|hilbert|hann|hamming|grpdelay|goertzel|gmonopuls|gausswin|gaussfir|gauspuls|fvtool|freqz|freqspace|freqs|flattopwin|firrcos|firpmord|firpm|firls|fircls1|fircls|fir2|fir1|findpeaks|filtstates\.dfiir|filtstates|filtic|filtfilt|filternorm|filter2|filter|fftshift|fftfilt|fft2|fft|fdatool|eqtflength|ellipord|ellipap|ellip|dspfwiz|dspdata\.pseudospectrum|dspdata\.psd|dspdata\.msspectrum|dspdata|dpsssave|dpssload|dpssdir|dpssclear|dpss|downsample|diric|digitrevorder|dftmtx|dfilt\.statespace|dfilt\.scalar|dfilt\.parallel|dfilt\.latticemamin|dfilt\.latticemamax|dfilt\.latticearma|dfilt\.latticear|dfilt\.latticeallpass|dfilt\.fftfir|dfilt\.dfsymfir|dfilt\.dffirt|dfilt\.dffir|dfilt\.dfasymfir|dfilt\.df2tsos|dfilt\.df2t|dfilt\.df2sos|dfilt\.df2|dfilt\.df1tsos|dfilt\.df1t|dfilt\.df1sos|dfilt\.df1|dfilt\.delay|dfilt\.cascade|dfilt|demod|deconv|decimate|dct|db2pow|czt|cpsd|cplxpair|cov|corrmtx|corrcoef|convmtx|conv2|conv|chirp|cheby2|cheby1|chebwin|cheb2ord|cheb2ap|cheb1ord|cheb1ap|cfirpm|cell2sos|cconv|cceps|buttord|butter|buttap|buffer|bohmanwin|blackmanharris|blackman|bitrevorder|bilinear|besself|besselap|bartlett|barthannwin|aryule|armcov|arcov|arburg|angle|ac2rc|ac2poly|abs)\b
+ name
+ support.toolbox.signal-processing.matlab
+
+ matlab_support_toolbox_spline
+
+ comment
+ Matlab spline toolbox
+ match
+ (?<!\.)\b(tpaps|titanium|subplus|stmak|stcol|spterms|sprpp|spmak|splpp|splinetool|spcrv|spcol|spaps|spapi|spap2|sorted|slvblk|rsmak|rscvn|rpmak|ppmak|optknt|newknt|knt2mlt|knt2brk|getcurve|franke|fnzeros|fnxtr|fnval|fntlr|fnrfn|fnplt|fnmin|fnjmp|fnint|fndir|fnder|fncmb|fnchg|fnbrk|fn2fm|cscvn|csaps|csapi|csape|chbpnt|bspline|bspligui|brk2knt|bkbrk|aveknt|augknt|aptknt)\b
+ name
+ support.toolbox.spline.matlab
+
+ matlab_support_toolbox_statistics
+
+ comment
+ Matlab statistics toolbox
+ match
+ (?<!\.)\b(ztest|zscore|x2fx|wishrnd|wblstat|wblrnd|wblplot|wblpdf|wbllike|wblinv|wblfit|wblcdf|view|vartestn|vartest2|vartest|var|upperparams|unifstat|unifrnd|unifpdf|unifit|unifinv|unifcdf|unidstat|unidrnd|unidpdf|unidinv|unidcdf|type|ttest2|ttest|tstat|trnd|trimmean|treeval|treetest|treeprune|treefit|treedisp|tpdf|tinv|tiedrank|test|tdfread|tcdf|tblwrite|tblread|tabulate|surfht|summary|stepwisefit|stepwise|std|statset|statget|squareform|sortrows|sort|slicesample|skewness|silhouette|signtest|signrank|setlabels|set|segment|scatterhist|sampsizepwr|runstest|rstool|rsmdemo|rowexch|rotatefactors|robustfit|robustdemo|risk|ridge|replacedata|reorderlevels|regstats|regress|refline|refcurve|rcoplot|raylstat|raylrnd|raylpdf|raylinv|raylfit|raylcdf|ranksum|range|randtool|randsample|random|randg|quantile|qqplot|prune|procrustes|probplot|princomp|prctile|posterior|polyval|polytool|polyfit|polyconf|poisstat|poissrnd|poisspdf|poissinv|poissfit|poisscdf|perms|pearsrnd|pdist|pdf|pcares|pcacov|partialcorr|paretotails|pareto|parent|parallelcoords|ordinal|numnodes|nsegments|normstat|normspec|normrnd|normplot|normpdf|normlike|norminv|normfit|normcdf|nominal|nodesize|nodeprob|nodeerr|nlpredci|nlparci|nlintool|nlinfit|ncx2stat|ncx2rnd|ncx2pdf|ncx2inv|ncx2cdf|nctstat|nctrnd|nctpdf|nctinv|nctcdf|ncfstat|ncfrnd|ncfpdf|ncfinv|ncfcdf|nbinstat|nbinrnd|nbinpdf|nbininv|nbinfit|nbincdf|nanvar|nansum|nanstd|nanmin|nanmedian|nanmean|nanmax|nancov|mvtrnd|mvtpdf|mvtcdf|mvregresslike|mvregress|mvnrnd|mvnpdf|mvncdf|multivarichart|multcompare|moment|mode|mnrval|mnrnd|mnrfit|mnpdf|mlecov|mle|mhsample|mergelevels|median|mean|mdscale|manovacluster|manova1|maineffectsplot|mahal|mad|lsqnonneg|lsline|lscov|lowerparams|lognstat|lognrnd|lognpdf|lognlike|logninv|lognfit|logncdf|linkage|linhyptest|lillietest|lhsnorm|lhsdesign|leverage|levelcounts|kurtosis|kstest2|kstest|ksdensity|kruskalwallis|kmeans|join|johnsrnd|jbtest|jackknife|iwishrnd|isundefined|ismember|islevel|isbranch|iqr|invpred|interactionplot|inconsistent|icdf|hygestat|hygernd|hygepdf|hygeinv|hygecdf|hougen|hmmviterbi|hmmtrain|hmmgenerate|hmmestimate|hmmdecode|histfit|hist3|hist|harmmean|hadamard|gscatter|grpstats|grp2idx|gpstat|gprnd|gppdf|gplotmatrix|gplike|gpinv|gpfit|gpcdf|gname|gmdistribution|glyphplot|glmval|glmfit|gline|gevstat|gevrnd|gevpdf|gevlike|gevinv|gevfit|gevcdf|getlabels|get|geostat|geornd|geopdf|geomean|geoinv|geocdf|gamstat|gamrnd|gampdf|gamlike|gaminv|gamfit|gamcdf|gagerr|fullfact|fsurfht|fstat|frnd|friedman|fracfactgen|fracfact|fpdf|fit|finv|ff2n|fcdf|factoran|expstat|exprnd|exppdf|explike|expinv|expfit|expcdf|evstat|evrnd|evpdf|evlike|evinv|evfit|evcdf|eval|errorbar|ecdfhist|ecdf|dwtest|dummyvar|droplevels|disttool|dfittool|dendrogram|dcovary|daugment|datasetfun|dataset|cutvar|cuttype|cutpoint|cutcategories|crosstab|coxphfit|cov|corrcov|corrcoef|corr|cordexch|copulastat|copularnd|copulapdf|copulaparam|copulafit|copulacdf|cophenet|controlrules|controlchart|combnk|cmdscale|clusterdata|cluster|classregtree|classprob|classify|classcount|cholcov|children|chi2stat|chi2rnd|chi2pdf|chi2inv|chi2gof|chi2cdf|cdfplot|cdf|ccdesign|casewrite|caseread|capaplot|capability|canoncorr|candgen|candexch|boxplot|boundary|bootstrp|bootci|biplot|binostat|binornd|binopdf|binoinv|binofit|binocdf|betastat|betarnd|betapdf|betalike|betainv|betafit|betacdf|bbdesign|barttest|aoctool|ansaribradley|anovan|anova2|anova1|andrewsplot|addlevels|addedvarplot)\b
+ name
+ support.toolbox.statistics.matlab
+
+ matlab_support_toolbox_symbolic_math
+
+ comment
+ Matlab symbolic math toolbox
+ match
+ (?<!\.)\b(ztrans|zeta|vpa|uint8|uint64|uint32|uint16|triu|tril|taylortool|taylor|symsum|syms|sym2poly|sym|svd|subs|subexpr|sort|solve|size|sinint|single|simplify|simple|rsums|rref|round|real|rank|quorem|procread|pretty|poly2sym|poly|numden|null|mod|mhelp|mfunlist|mfun|mapleinit|maple|log2|log10|limit|latex|laplace|lambertw|jordan|jacobian|iztrans|inv|int8|int64|int32|int16|int|imag|ilaplace|ifourier|hypergeom|horner|heaviside|funtool|frac|fourier|fortran|floor|fix|finverse|findsym|factor|ezsurfc|ezsurf|ezpolar|ezplot3|ezplot|ezmeshc|ezmesh|ezcontourf|ezcontour|expm|expand|eq|eig|dsolve|double|dirac|digits|diff|diag|det|cosint|conj|compose|colspace|collect|coeffs|ceil|ccode)\b
+ name
+ support.toolbox.symbolic-math.matlab
+
+ matlab_support_toolbox_system_identification
+
+ comment
+ Matlab system identification toolbox
+ match
+ (?<!\.)\b(zpkdata|zpk|wavenet|view|unitgain|treepartition|timestamp|tfdata|tf|struc|step|ssdata|ss|spafdr|spa|size|simsd|sim|sigmoidnet|setstruc|setpname|setpar|setinit|set|selstruc|segment|saturation|rplr|rpem|roe|resid|resample|realdata|rbj|rarx|rarmax|pzmap|pwlinear|present|predict|polyreg|polydata|poly1d|plot|pexcit|pem|pe|oe|nyquist|nuderst|noisecnv|nlhw|nlarx|nkshift|neuralnet|n4sid|misdata|midprefs|merge|lintan|linear|linapp|ivx|ivstruc|ivar|iv4|isreal|init|impulse|ifft|idss|idresamp|idproc|idpoly|idnlmodel|idnlhw|idnlgrey|idnlarx|idmodel|idmdlsim|idinput|idgrey|idfrd|idfilt|ident|iddata|idarx|getreg|getpar|getinit|getexp|get|fselect|freqresp|frd|fpe|fft|ffplot|feedback|fcat|evaluate|etfe|diff|detrend|delayest|deadzone|d2c|customreg|customnet|cra|covf|compare|c2d|bode|bj|balred|arxstruc|arxdata|arx|armax|ar|aic|advice|addreg|EstimationInfo)\b
+ name
+ support.toolbox.system-identification.matlab
+
+ matlab_support_toolbox_virtual_reality
+
+ comment
+ Matlab virtual reality toolbox
+ match
+ (?<!\.)\b(vrworld|vrwhos|vrwho|vrview|vrspacemouse|vrsetpref|vrrotvec2mat|vrrotvec|vrrotmat2vec|vrplay|vrori2dir|vrnode|vrlib|vrjoystick|vrinstall|vrgetpref|vrfigure|vrdrawnow|vrdir2ori|vrclose|vrclear)\b
+ name
+ support.toolbox.virtual-reality.matlab
+
+ matlab_support_toolbox_wavelet
+
+ comment
+ Matlab wavelet toolbox
+ match
+ (?<!\.)\b(wvarchg|wtreemgr|wthrmngr|wthresh|wthcoef2|wthcoef|wtbxmngr|wtbo|wscalogram|write|wrev|wrcoef2|wrcoef|wpviewcf|wptree|wpthcoef|wpsplt|wprec2|wprec|wprcoef|wpjoin|wpfun|wpdencmp|wpdec2|wpdec|wpcutree|wpcoef|wpbmpen|wp2wtree|wnoisest|wnoise|wmulden|wmspca|wmaxlev|wkeep|wfusmat|wfusimg|wfilters|wfbmesti|wfbm|wextend|wentropy|wenergy2|wenergy|wdencmp|wden|wdcenergy|wdcbm2|wdcbm|wcodemat|wbmpen|waverec2|waverec|wavenames|wavemngr|wavemenu|waveinfo|wavefun2|wavefun|wavedemo|wavedec2|wavedec|wave2lp|upwlev2|upwlev|upcoef2|upcoef|treeord|treedpth|tnodes|thselect|symwavf|symaux|swt2|swt|shanwavf|set|scal2frq|readtree|read|rbiowavf|qmf|plot|pat2cwav|orthfilt|ntree|ntnode|noleaves|nodesplt|nodepar|nodejoin|nodedesc|nodeasc|mswthresh|mswden|mswcmptp|mswcmpscr|mswcmp|morlet|meyeraux|meyer|mexihat|mdwtrec|mdwtdec|mdwtcluster|lwtcoef2|lwtcoef|lwt2|lwt|lsinfo|ls2filt|liftwave|liftfilt|leaves|laurpoly|laurmat|iswt2|iswt|istnode|isnode|intwave|ind2depo|ilwt2|ilwt|idwt2|idwt|get|gauswavf|filt2ls|fbspwavf|entrupd|dyadup|dyaddown|dwtmode|dwt2|dwt|dtree|drawtree|displs|disp|detcoef2|detcoef|depo2ind|ddencmp|dbwavf|dbaux|cwt|coifwavf|cmorwavf|chgwdeccfs|cgauwavf|cfs2wpt|centfrq|bswfun|biorwavf|biorfilt|besttree|bestlevt|appcoef2|appcoef|allnodes|addlift)\b
+ name
+ support.toolbox.wavelet.matlab
+
+ matlab_variable_function
+
+ comment
+ MATLAB variables
+ match
+ (?<!\.)\b(nargin|nargout|varargin|varargout)\b
+ name
+ variable.other.function.matlab
+
+ not_equal_invalid
+
+ comment
+ Not equal is written ~= not !=.
+ match
+ \s*!=\s*
+ name
+ invalid.illegal.invalid-inequality.matlab
+
+ number
+
+ comment
+ Valid numbers: 1, .1, 1.1, .1e1, 1.1e1, 1e1, 1i, 1j, 1e2j
+ match
+ (?<=[\s\-\+\*\/\\=:\[\(\{,]|^)\d*\.?\d+([eE][+-]?\d)?([0-9&&[^\.]])*(i|j)?\b
+ name
+ constant.numeric.matlab
+
+ operators
+
+ comment
+ Operator symbols
+ match
+ \s*(==|~=|>|>=|<|<=|&|&&|:|\||\|\||\+|-|\*|\.\*|/|\./|\\|\.\\|\^|\.\^)\s*
+ name
+ keyword.operator.symbols.matlab
+
+ parens
+
+ begin
+ \(
+ beginCaptures
+
+ 0
+
+ name
+ meta.parens.matlab
+
+
+ contentName
+ meta.parens.matlab
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ meta.parens.matlab
+
+
+ patterns
+
+
+ include
+ #allofem
+
+
+ include
+ #end_in_parens
+
+
+
+ special_characters
+
+ comment
+ Operator symbols
+ match
+ ((\%([\+\-0]?\d{0,3}(\.\d{1,3})?)(c|d|e|E|f|g|G|s|((b|t)?(o|u|x|X))))|\%\%|\\(b|f|n|r|t|\\))
+ name
+ constant.character.escape.matlab
+
+ string
+
+ begin
+ ((?<=(\[|\(|\{|=|\s|;|:|,))|^)'
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.matlab
+
+
+ end
+ '(?=(\]|\)|\}|=|~|<|>|&|\||-|\+|\*|\.|\^|\||\s|;|:|,))
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.matlab
+
+
+ name
+ string.quoted.single.matlab
+ patterns
+
+
+ include
+ #escaped_quote
+
+
+ include
+ #unescaped_quote
+
+
+ include
+ #special_characters
+
+
+
+ transpose
+
+ match
+ ((\w+)|(?<=\])|(?<=\)))\.?'
+ name
+ keyword.operator.transpose.matlab
+
+ unescaped_quote
+
+ patterns
+
+
+ match
+ '(?=.)
+ name
+ invalid.illegal.unescaped-quote.matlab
+
+
+
+ variable
+
+ comment
+ Valid variable. Added meta to disable hilightinh
+ match
+ \b[a-zA-Z]\w*\b
+ name
+ meta.variable.other.valid.matlab
+
+ variable_assignment
+
+ comment
+ Incomplete variable assignment.
+ match
+ =\s*\.{0,2}\s*;?\s*$\n?
+ name
+ invalid.illegal.incomplete-variable-assignment.matlab
+
+ variable_invalid
+
+ comment
+ No variables or function names can start with a number or an underscore.
+ match
+ \b(_\w|\d+[_a-df-zA-DF-Z])\w*\b
+ name
+ invalid.illegal.invalid-variable-name.matlab
+
+
+ scopeName
+ source.matlab
+ uuid
+ 48F8858B-72FF-11D9-BFEE-000D93589AF6
+
+
\ No newline at end of file
diff --git a/app/rcc/edbee/syntaxfiles/MultiMarkdown.tmLanguage b/app/rcc/edbee/syntaxfiles/MultiMarkdown.tmLanguage
new file mode 100644
index 00000000..76e9c93b
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/MultiMarkdown.tmLanguage
@@ -0,0 +1,80 @@
+
+
+
+
+ firstLineMatch
+ ^Format:\s*(?i:complete)\s*$
+ foldingStartMarker
+ (?x)
+ (<(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)\b.*?>
+ |<!--(?!.*-->)
+ |\{\s*($|\?>\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/)))
+ )
+ foldingStopMarker
+ (?x)
+ (</(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)>
+ |^\s*-->
+ |(^|\s)\}
+ )
+ keyEquivalent
+ ^~M
+ name
+ MultiMarkdown
+ patterns
+
+
+ begin
+ ^([A-Za-z0-9]+)(:)\s*
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.multimarkdown
+
+ 2
+
+ name
+ punctuation.separator.key-value.multimarkdown
+
+
+ end
+ ^$|^(?=[A-Za-z0-9]+:)
+ name
+ meta.header.multimarkdown
+ patterns
+
+
+ comment
+ The reason for not setting scopeName = "string.unquoted"
+ (for the parent rule) is that we do not want
+ newlines to be marked as string.unquoted
+ match
+ .+
+ name
+ string.unquoted.multimarkdown
+
+
+
+
+ begin
+ ^(?!=[A-Za-z0-9]+:)
+ end
+ ^(?=not)possible$
+ name
+ meta.content.multimarkdown
+ patterns
+
+
+ include
+ text.html.markdown
+
+
+
+
+ scopeName
+ text.html.markdown.multimarkdown
+ uuid
+ F5E04BF4-69A9-45AE-9205-B3F3C2B00130
+
+
diff --git a/app/rcc/edbee/syntaxfiles/OCamlyacc.tmLanguage b/app/rcc/edbee/syntaxfiles/OCamlyacc.tmLanguage
new file mode 100644
index 00000000..95dc8585
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/OCamlyacc.tmLanguage
@@ -0,0 +1,532 @@
+
+
+
+
+ fileTypes
+
+ mly
+
+ foldingStartMarker
+ %{|%%
+ foldingStopMarker
+ %}|%%
+ keyEquivalent
+ ^~O
+ name
+ OCamlyacc
+ patterns
+
+
+ begin
+ (%{)\s*$
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.header.begin.ocamlyacc
+
+
+ end
+ ^\s*(%})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.header.end.ocamlyacc
+
+
+ name
+ meta.header.ocamlyacc
+ patterns
+
+
+ include
+ source.ocaml
+
+
+
+
+ begin
+ (?<=%})\s*$
+ end
+ (?:^)(?=%%)
+ name
+ meta.declarations.ocamlyacc
+ patterns
+
+
+ include
+ #comments
+
+
+ include
+ #declaration-matches
+
+
+
+
+ begin
+ (%%)\s*$
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.rules.begin.ocamlyacc
+
+
+ end
+ ^\s*(%%)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.rules.end.ocamlyacc
+
+
+ name
+ meta.rules.ocamlyacc
+ patterns
+
+
+ include
+ #comments
+
+
+ include
+ #rules
+
+
+
+
+ include
+ source.ocaml
+
+
+ include
+ #comments
+
+
+ match
+ (’|‘|“|”)
+ name
+ invalid.illegal.unrecognized-character.ocaml
+
+
+ repository
+
+ comments
+
+ patterns
+
+
+ begin
+ /\*
+ end
+ \*/
+ name
+ comment.block.ocamlyacc
+ patterns
+
+
+ include
+ #comments
+
+
+
+
+ begin
+ (?=[^\\])(")
+ end
+ "
+ name
+ comment.block.string.quoted.double.ocamlyacc
+ patterns
+
+
+ match
+ \\(x[a-fA-F0-9][a-fA-F0-9]|[0-2]\d\d|[bnrt'"\\])
+ name
+ comment.block.string.constant.character.escape.ocamlyacc
+
+
+
+
+
+ declaration-matches
+
+ patterns
+
+
+ begin
+ (%)(token)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.decorator.token.ocamlyacc
+
+ 2
+
+ name
+ keyword.other.token.ocamlyacc
+
+
+ end
+ ^\s*($|(^\s*(?=%)))
+ name
+ meta.token.declaration.ocamlyacc
+ patterns
+
+
+ include
+ #symbol-types
+
+
+ match
+ [A-Z][A-Za-z0-9_]*
+ name
+ entity.name.type.token.ocamlyacc
+
+
+ include
+ #comments
+
+
+
+
+ begin
+ (%)(left|right|nonassoc)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.decorator.token.associativity.ocamlyacc
+
+ 2
+
+ name
+ keyword.other.token.associativity.ocamlyacc
+
+
+ end
+ (^\s*$)|(^\s*(?=%))
+ name
+ meta.token.associativity.ocamlyacc
+ patterns
+
+
+ match
+ [A-Z][A-Za-z0-9_]*
+ name
+ entity.name.type.token.ocamlyacc
+
+
+ match
+ [a-z][A-Za-z0-9_]*
+ name
+ entity.name.function.non-terminal.reference.ocamlyacc
+
+
+ include
+ #comments
+
+
+
+
+ begin
+ (%)(start)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.decorator.start-symbol.ocamlyacc
+
+ 2
+
+ name
+ keyword.other.start-symbol.ocamlyacc
+
+
+ end
+ (^\s*$)|(^\s*(?=%))
+ name
+ meta.start-symbol.ocamlyacc
+ patterns
+
+
+ match
+ [a-z][A-Za-z0-9_]*
+ name
+ entity.name.function.non-terminal.reference.ocamlyacc
+
+
+ include
+ #comments
+
+
+
+
+ begin
+ (%)(type)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.decorator.symbol-type.ocamlyacc
+
+ 2
+
+ name
+ keyword.other.symbol-type.ocamlyacc
+
+
+ end
+ $\s*(?!%)
+ name
+ meta.symbol-type.ocamlyacc
+ patterns
+
+
+ include
+ #symbol-types
+
+
+ match
+ [A-Z][A-Za-z0-9_]*
+ name
+ entity.name.type.token.reference.ocamlyacc
+
+
+ match
+ [a-z][A-Za-z0-9_]*
+ name
+ entity.name.function.non-terminal.reference.ocamlyacc
+
+
+ include
+ #comments
+
+
+
+
+
+ precs
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.decorator.precedence.ocamlyacc
+
+ 2
+
+ name
+ keyword.other.precedence.ocamlyacc
+
+ 4
+
+ name
+ entity.name.function.non-terminal.reference.ocamlyacc
+
+ 5
+
+ name
+ entity.name.type.token.reference.ocamlyacc
+
+
+ match
+ (%)(prec)\s+(([a-z][a-zA-Z0-9_]*)|(([A-Z][a-zA-Z0-9_]*)))
+ name
+ meta.precidence.declaration
+
+
+
+ references
+
+ patterns
+
+
+ match
+ [a-z][a-zA-Z0-9_]*
+ name
+ entity.name.function.non-terminal.reference.ocamlyacc
+
+
+ match
+ [A-Z][a-zA-Z0-9_]*
+ name
+ entity.name.type.token.reference.ocamlyacc
+
+
+
+ rule-patterns
+
+ patterns
+
+
+ begin
+ ((?<!\||:)(\||:)(?!\||:))
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.separator.rule.ocamlyacc
+
+
+ end
+ \s*(?=\||;)
+ name
+ meta.rule-match.ocaml
+ patterns
+
+
+ include
+ #precs
+
+
+ include
+ #semantic-actions
+
+
+ include
+ #references
+
+
+ include
+ #comments
+
+
+
+
+
+ rules
+
+ patterns
+
+
+ begin
+ [a-z][a-zA-Z_]*
+ beginCaptures
+
+ 0
+
+ name
+ entity.name.function.non-terminal.ocamlyacc
+
+
+ end
+ ;
+ endCaptures
+
+ 0
+
+ name
+ punctuation.separator.rule.ocamlyacc
+
+
+ name
+ meta.non-terminal.ocamlyacc
+ patterns
+
+
+ include
+ #rule-patterns
+
+
+
+
+
+ semantic-actions
+
+ patterns
+
+
+ begin
+ [^\']({)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.action.semantic.ocamlyacc
+
+
+ end
+ (})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.action.semantic.ocamlyacc
+
+
+ name
+ meta.action.semantic.ocamlyacc
+ patterns
+
+
+ include
+ source.ocaml
+
+
+
+
+
+ symbol-types
+
+ patterns
+
+
+ begin
+ <
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.type-declaration.begin.ocamlyacc
+
+
+ end
+ >
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.type-declaration.end.ocamlyacc
+
+
+ name
+ meta.token.type-declaration.ocamlyacc
+ patterns
+
+
+ include
+ source.ocaml
+
+
+
+
+
+
+ scopeName
+ source.ocamlyacc
+ uuid
+ 1B59327E-9B82-4B78-9411-BC02067DBDF9
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Objective-C++.tmLanguage b/app/rcc/edbee/syntaxfiles/Objective-C++.tmLanguage
new file mode 100644
index 00000000..71409303
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Objective-C++.tmLanguage
@@ -0,0 +1,39 @@
+
+
+
+
+ fileTypes
+
+ mm
+ M
+ h
+
+ foldingStartMarker
+ (?x)
+ /\*\*(?!\*)
+ |^(?![^{]*?//|[^{]*?/\*(?!.*?\*/.*?\{)).*?\{\s*($|//|/\*(?!.*?\*/.*\S))
+ |^@(interface|protocol|implementation)\b
+
+ foldingStopMarker
+ (?<!\*)\*\*/|^\s*\}|^@end\b
+ keyEquivalent
+ ^~O
+ name
+ Objective-C++
+ patterns
+
+
+ include
+ source.c++
+
+
+ include
+ source.objc
+
+
+ scopeName
+ source.objc++
+ uuid
+ FDAB1813-6B1C-11D9-BCAC-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Objective-C.tmLanguage b/app/rcc/edbee/syntaxfiles/Objective-C.tmLanguage
new file mode 100644
index 00000000..cb6a86cb
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Objective-C.tmLanguage
@@ -0,0 +1,1511 @@
+
+
+
+
+ fileTypes
+
+ m
+ h
+
+ foldingStartMarker
+ (?x)
+ /\*\*(?!\*)
+ |^(?![^{]*?//|[^{]*?/\*(?!.*?\*/.*?\{)).*?\{\s*($|//|/\*(?!.*?\*/.*\S))
+ |^@(interface|protocol|implementation)\b
+
+ foldingStopMarker
+ (?<!\*)\*\*/|^\s*\}|^@end\b
+ keyEquivalent
+ ^~O
+ name
+ Objective-C
+ patterns
+
+
+ begin
+ ((@)(interface|protocol))(?!.+;)\s+([A-Za-z_][A-Za-z0-9_]*)\s*((:)(?:\s*)([A-Za-z][A-Za-z0-9]*))?(\s|\n)?
+ captures
+
+ 1
+
+ name
+ storage.type.objc
+
+ 2
+
+ name
+ punctuation.definition.storage.type.objc
+
+ 4
+
+ name
+ entity.name.type.objc
+
+ 6
+
+ name
+ punctuation.definition.entity.other.inherited-class.objc
+
+ 7
+
+ name
+ entity.other.inherited-class.objc
+
+ 8
+
+ name
+ meta.divider.objc
+
+ 9
+
+ name
+ meta.inherited-class.objc
+
+
+ contentName
+ meta.scope.interface.objc
+ end
+ ((@)end)\b
+ name
+ meta.interface-or-protocol.objc
+ patterns
+
+
+ include
+ #interface_innards
+
+
+
+
+ begin
+ ((@)(implementation))\s+([A-Za-z_][A-Za-z0-9_]*)\s*(?::\s*([A-Za-z][A-Za-z0-9]*))?
+ captures
+
+ 1
+
+ name
+ storage.type.objc
+
+ 2
+
+ name
+ punctuation.definition.storage.type.objc
+
+ 4
+
+ name
+ entity.name.type.objc
+
+ 5
+
+ name
+ entity.other.inherited-class.objc
+
+
+ contentName
+ meta.scope.implementation.objc
+ end
+ ((@)end)\b
+ name
+ meta.implementation.objc
+ patterns
+
+
+ include
+ #implementation_innards
+
+
+
+
+ begin
+ @"
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.objc
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.objc
+
+
+ name
+ string.quoted.double.objc
+ patterns
+
+
+ match
+ \\(\\|[abefnrtv'"?]|[0-3]\d{,2}|[4-7]\d?|x[a-zA-Z0-9]+)
+ name
+ constant.character.escape.objc
+
+
+ match
+ \\.
+ name
+ invalid.illegal.unknown-escape.objc
+
+
+
+
+ begin
+ \b(id)\s*(?=<)
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.objc
+
+
+ end
+ (?<=>)
+ name
+ meta.id-with-protocol.objc
+ patterns
+
+
+ include
+ #protocol_list
+
+
+
+
+ match
+ \b(NS_DURING|NS_HANDLER|NS_ENDHANDLER)\b
+ name
+ keyword.control.macro.objc
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.keyword.objc
+
+
+ match
+ (@)(try|catch|finally|throw)\b
+ name
+ keyword.control.exception.objc
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.keyword.objc
+
+
+ match
+ (@)(synchronized)\b
+ name
+ keyword.control.synchronize.objc
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.keyword.objc
+
+
+ match
+ (@)(defs|encode)\b
+ name
+ keyword.other.objc
+
+
+ match
+ \bid\b(\s|\n)?
+ name
+ storage.type.id.objc
+
+
+ match
+ \b(IBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class)\b
+ name
+ storage.type.objc
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.storage.type.objc
+
+
+ match
+ (@)(class|protocol)\b
+ name
+ storage.type.objc
+
+
+ begin
+ ((@)selector)\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.objc
+
+ 2
+
+ name
+ punctuation.definition.storage.type.objc
+
+ 3
+
+ name
+ punctuation.definition.storage.type.objc
+
+
+ contentName
+ meta.selector.method-name.objc
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.storage.type.objc
+
+
+ name
+ meta.selector.objc
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.arguments.objc
+
+
+ match
+ \b(?:[a-zA-Z_:][\w]*)+
+ name
+ support.function.any-method.name-of-parameter.objc
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.storage.modifier.objc
+
+
+ match
+ (@)(synchronized|public|private|protected)\b
+ name
+ storage.modifier.objc
+
+
+ match
+ \b(YES|NO|Nil|nil)\b
+ name
+ constant.language.objc
+
+
+ match
+ \bNSApp\b
+ name
+ support.variable.foundation
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.whitespace.support.function.cocoa.leopard
+
+ 2
+
+ name
+ support.function.cocoa.leopard
+
+
+ match
+ (\s*)\b(NS(Rect(ToCGRect|FromCGRect)|MakeCollectable|S(tringFromProtocol|ize(ToCGSize|FromCGSize))|Draw(NinePartImage|ThreePartImage)|P(oint(ToCGPoint|FromCGPoint)|rotocolFromString)|EventMaskFromType|Value))\b
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.whitespace.support.function.leading.cocoa
+
+ 2
+
+ name
+ support.function.cocoa
+
+
+ match
+ (\s*)\b(NS(R(ound(DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(CriticalAlertPanel(RelativeToWindow)?|InformationalAlertPanel(RelativeToWindow)?|AlertPanel(RelativeToWindow)?)|e(set(MapTable|HashTable)|c(ycleZone|t(Clip(List)?|F(ill(UsingOperation|List(UsingOperation|With(Grays|Colors(UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(dPixel|l(MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(s)?|WindowServerMemory|AlertPanel)|M(i(n(X|Y)|d(X|Y))|ouseInRect|a(p(Remove|Get|Member|Insert(IfAbsent|KnownAbsent)?)|ke(R(ect|ange)|Size|Point)|x(Range|X|Y)))|B(itsPer(SampleFromDepth|PixelFromDepth)|e(stDepth|ep|gin(CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(ho(uldRetainWithZone|w(sServicesMenuItem|AnimationEffect))|tringFrom(R(ect|ange)|MapTable|S(ize|elector)|HashTable|Class|Point)|izeFromString|e(t(ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(Big(ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(ToHost|LongToHost))|Short|Host(ShortTo(Big|Little)|IntTo(Big|Little)|DoubleTo(Big|Little)|FloatTo(Big|Little)|Long(To(Big|Little)|LongTo(Big|Little)))|Int|Double|Float|L(ittle(ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(ToHost|LongToHost))|ong(Long)?)))|H(ighlightRect|o(stByteOrder|meDirectory(ForUser)?)|eight|ash(Remove|Get|Insert(IfAbsent|KnownAbsent)?)|FSType(CodeFromFileType|OfFile))|N(umberOfColorComponents|ext(MapEnumeratorPair|HashEnumeratorItem))|C(o(n(tainsRect|vert(GlyphsToPackedGlyphs|Swapped(DoubleToHost|FloatToHost)|Host(DoubleToSwapped|FloatToSwapped)))|unt(MapTable|HashTable|Frames|Windows(ForContext)?)|py(M(emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(MapTables|HashTables))|lassFromString|reate(MapTable(WithZone)?|HashTable(WithZone)?|Zone|File(namePboardType|ContentsPboardType)))|TemporaryDirectory|I(s(ControllerMarker|EmptyRect|FreedObject)|n(setRect|crementExtraRefCount|te(r(sect(sRect|ionR(ect|ange))|faceStyleForKey)|gralRect)))|Zone(Realloc|Malloc|Name|Calloc|Fr(omPointer|ee))|O(penStepRootDirectory|ffsetRect)|D(i(sableScreenUpdates|videRect)|ottedFrameRect|e(c(imal(Round|Multiply|S(tring|ubtract)|Normalize|Co(py|mpa(ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(MemoryPages|Object))|raw(Gr(oove|ayBezel)|B(itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(hiteBezel|indowBackground)|LightBezel))|U(serName|n(ionR(ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(Bundle(Setup|Cleanup)|Setup(VirtualMachine)?|Needs(ToLoadClasses|VirtualMachine)|ClassesF(orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(oint(InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(n(d(MapTableEnumeration|HashTableEnumeration)|umerate(MapTable|HashTable)|ableScreenUpdates)|qual(R(ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(ileTypeForHFSTypeCode|ullUserName|r(ee(MapTable|HashTable)|ame(Rect(WithWidth(UsingOperation)?)?|Address)))|Wi(ndowList(ForContext)?|dth)|Lo(cationInRange|g(v|PageSize)?)|A(ccessibility(R(oleDescription(ForUIElement)?|aiseBadArgumentException)|Unignored(Children(ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(Main|Load)|vailableWindowDepths|ll(MapTable(Values|Keys)|HashTableObjects|ocate(MemoryPages|Collectable|Object)))))\b
+
+
+ match
+ \bNS(RuleEditor|G(arbageCollector|radient)|MapTable|HashTable|Co(ndition|llectionView(Item)?)|T(oolbarItemGroup|extInputClient|r(eeNode|ackingArea))|InvocationOperation|Operation(Queue)?|D(ictionaryController|ockTile)|P(ointer(Functions|Array)|athC(o(ntrol(Delegate)?|mponentCell)|ell(Delegate)?)|r(intPanelAccessorizing|edicateEditor(RowTemplate)?))|ViewController|FastEnumeration|Animat(ionContext|ablePropertyContainer))\b
+ name
+ support.class.cocoa.leopard
+
+
+ match
+ \bNS(R(u(nLoop|ler(Marker|View))|e(sponder|cursiveLock|lativeSpecifier)|an(domSpecifier|geSpecifier))|G(etCommand|lyph(Generator|Storage|Info)|raphicsContext)|XML(Node|D(ocument|TD(Node)?)|Parser|Element)|M(iddleSpecifier|ov(ie(View)?|eCommand)|utable(S(tring|et)|C(haracterSet|opying)|IndexSet|D(ictionary|ata)|URLRequest|ParagraphStyle|A(ttributedString|rray))|e(ssagePort(NameServer)?|nu(Item(Cell)?|View)?|t(hodSignature|adata(Item|Query(ResultGroup|AttributeValueTuple)?)))|a(ch(BootstrapServer|Port)|trix))|B(itmapImageRep|ox|u(ndle|tton(Cell)?)|ezierPath|rowser(Cell)?)|S(hadow|c(anner|r(ipt(SuiteRegistry|C(o(ercionHandler|mmand(Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(er|View)|een))|t(epper(Cell)?|atus(Bar|Item)|r(ing|eam))|imple(HorizontalTypesetter|CString)|o(cketPort(NameServer)?|und|rtDescriptor)|p(e(cifierTest|ech(Recognizer|Synthesizer)|ll(Server|Checker))|litView)|e(cureTextField(Cell)?|t(Command)?|archField(Cell)?|rializer|gmentedC(ontrol|ell))|lider(Cell)?|avePanel)|H(ost|TTP(Cookie(Storage)?|URLResponse)|elpManager)|N(ib(Con(nector|trolConnector)|OutletConnector)?|otification(Center|Queue)?|u(ll|mber(Formatter)?)|etService(Browser)?|ameSpecifier)|C(ha(ngeSpelling|racterSet)|o(n(stantString|nection|trol(ler)?|ditionLock)|d(ing|er)|unt(Command|edSet)|pying|lor(Space|P(ick(ing(Custom|Default)|er)|anel)|Well|List)?|m(p(oundPredicate|arisonPredicate)|boBox(Cell)?))|u(stomImageRep|rsor)|IImageRep|ell|l(ipView|o(seCommand|neCommand)|assDescription)|a(ched(ImageRep|URLResponse)|lendar(Date)?)|reateCommand)|T(hread|ypesetter|ime(Zone|r)|o(olbar(Item(Validations)?)?|kenField(Cell)?)|ext(Block|Storage|Container|Tab(le(Block)?)?|Input|View|Field(Cell)?|List|Attachment(Cell)?)?|a(sk|b(le(Header(Cell|View)|Column|View)|View(Item)?))|reeController)|I(n(dex(S(pecifier|et)|Path)|put(Manager|S(tream|erv(iceProvider|er(MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(Rep|Cell|View)?)|O(ut(putStream|lineView)|pen(GL(Context|Pixel(Buffer|Format)|View)|Panel)|bj(CTypeSerializationCallBack|ect(Controller)?))|D(i(st(antObject(Request)?|ributed(NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(Controller)?|e(serializer|cimalNumber(Behaviors|Handler)?|leteCommand)|at(e(Components|Picker(Cell)?|Formatter)?|a)|ra(wer|ggingInfo))|U(ser(InterfaceValidations|Defaults(Controller)?)|RL(Re(sponse|quest)|Handle(Client)?|C(onnection|ache|redential(Storage)?)|Download(Delegate)?|Prot(ocol(Client)?|ectionSpace)|AuthenticationChallenge(Sender)?)?|n(iqueIDSpecifier|doManager|archiver))|P(ipe|o(sitionalSpecifier|pUpButton(Cell)?|rt(Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(steboard|nel|ragraphStyle|geLayout)|r(int(Info|er|Operation|Panel)|o(cessInfo|tocolChecker|perty(Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(numerator|vent|PSImageRep|rror|x(ception|istsCommand|pression))|V(iew(Animation)?|al(idated(ToobarItem|UserInterfaceItem)|ue(Transformer)?))|Keyed(Unarchiver|Archiver)|Qui(ckDrawView|tCommand)|F(ile(Manager|Handle|Wrapper)|o(nt(Manager|Descriptor|Panel)?|rm(Cell|atter)))|W(hoseSpecifier|indow(Controller)?|orkspace)|L(o(c(k(ing)?|ale)|gicalTest)|evelIndicator(Cell)?|ayoutManager)|A(ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(ication|e(Script|Event(Manager|Descriptor)))|ffineTransform|lert|r(chiver|ray(Controller)?)))\b
+ name
+ support.class.cocoa
+
+
+ match
+ \bNS(R(oundingMode|ule(Editor(RowType|NestingMode)|rOrientation)|e(questUserAttentionType|lativePosition))|G(lyphInscription|radientDrawingOptions)|XML(NodeKind|D(ocumentContentKind|TDNodeKind)|ParserError)|M(ultibyteGlyphPacking|apTableOptions)|B(itmapFormat|oxType|ezierPathElement|ackgroundStyle|rowserDropOperation)|S(tr(ing(CompareOptions|DrawingOptions|EncodingConversionOptions)|eam(Status|Event))|p(eechBoundary|litViewDividerStyle)|e(archPathD(irectory|omainMask)|gmentS(tyle|witchTracking))|liderType|aveOptions)|H(TTPCookieAcceptPolicy|ashTableOptions)|N(otification(SuspensionBehavior|Coalescing)|umberFormatter(RoundingMode|Behavior|Style|PadPosition)|etService(sError|Options))|C(haracterCollection|o(lor(RenderingIntent|SpaceModel|PanelMode)|mp(oundPredicateType|arisonPredicateModifier))|ellStateValue|al(culationError|endarUnit))|T(ypesetterControlCharacterAction|imeZoneNameStyle|e(stComparisonOperation|xt(Block(Dimension|V(erticalAlignment|alueType)|Layer)|TableLayoutAlgorithm|FieldBezelStyle))|ableView(SelectionHighlightStyle|ColumnAutoresizingStyle)|rackingAreaOptions)|I(n(sertionPosition|te(rfaceStyle|ger))|mage(RepLoadStatus|Scaling|CacheMode|FrameStyle|LoadStatus|Alignment))|Ope(nGLPixelFormatAttribute|rationQueuePriority)|Date(Picker(Mode|Style)|Formatter(Behavior|Style))|U(RL(RequestCachePolicy|HandleStatus|C(acheStoragePolicy|redentialPersistence))|Integer)|P(o(stingStyle|int(ingDeviceType|erFunctionsOptions)|pUpArrowPosition)|athStyle|r(int(ing(Orientation|PaginationMode)|erTableStatus|PanelOptions)|opertyList(MutabilityOptions|Format)|edicateOperatorType))|ExpressionType|KeyValue(SetMutationKind|Change)|QTMovieLoopMode|F(indPanel(SubstringMatchType|Action)|o(nt(RenderingMode|FamilyClass)|cusRingPlacement))|W(hoseSubelementIdentifier|ind(ingRule|ow(B(utton|ackingLocation)|SharingType|CollectionBehavior)))|L(ine(MovementDirection|SweepDirection|CapStyle|JoinStyle)|evelIndicatorStyle)|Animation(BlockingMode|Curve))\b
+ name
+ support.type.cocoa.leopard
+
+
+ match
+ \bC(I(Sampler|Co(ntext|lor)|Image(Accumulator)?|PlugIn(Registration)?|Vector|Kernel|Filter(Generator|Shape)?)|A(Renderer|MediaTiming(Function)?|BasicAnimation|ScrollLayer|Constraint(LayoutManager)?|T(iledLayer|extLayer|rans(ition|action))|OpenGLLayer|PropertyAnimation|KeyframeAnimation|Layer|A(nimation(Group)?|ction)))\b
+ name
+ support.class.quartz
+
+
+ match
+ \bC(G(Float|Point|Size|Rect)|IFormat|AConstraintAttribute)\b
+ name
+ support.type.quartz
+
+
+ match
+ \bNS(R(ect(Edge)?|ange)|G(lyph(Relation|LayoutMode)?|radientType)|M(odalSession|a(trixMode|p(Table|Enumerator)))|B(itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(cr(oll(er(Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(Granularity|Direction|Affinity)|wapped(Double|Float)|aveOperationType)|Ha(sh(Table|Enumerator)|ndler(2)?)|C(o(ntrol(Size|Tint)|mp(ositingOperation|arisonResult))|ell(State|Type|ImagePosition|Attribute))|T(hreadPrivate|ypesetterGlyphInfo|i(ckMarkPosition|tlePosition|meInterval)|o(ol(TipTag|bar(SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(TabType|Alignment)|ab(State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(ContextAuxiliary|PixelFormatAuxiliary)|D(ocumentChangeType|atePickerElementFlags|ra(werState|gOperation))|UsableScrollerParts|P(oint|r(intingPageOrder|ogressIndicator(Style|Th(ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(nt(SymbolicTraits|TraitMask|Action)|cusRingType)|W(indow(OrderingMode|Depth)|orkspace(IconCreationOptions|LaunchOptions)|ritingDirection)|L(ineBreakMode|ayout(Status|Direction))|A(nimation(Progress|Effect)|ppl(ication(TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle))\b
+ name
+ support.type.cocoa
+
+
+ match
+ \bNS(NotFound|Ordered(Ascending|Descending|Same))\b
+ name
+ support.constant.cocoa
+
+
+ match
+ \bNS(MenuDidBeginTracking|ViewDidUpdateTrackingAreas)?Notification\b
+ name
+ support.constant.notification.cocoa.leopard
+
+
+ match
+ \bNS(Menu(Did(RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(ystemColorsDidChange|plitView(DidResizeSubviews|WillResizeSubviews))|C(o(nt(extHelpModeDid(Deactivate|Activate)|rolT(intDidChange|extDid(BeginEditing|Change|EndEditing)))|lor(PanelColorDidChange|ListDidChange)|mboBox(Selection(IsChanging|DidChange)|Will(Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(oolbar(DidRemoveItem|WillAddItem)|ext(Storage(DidProcessEditing|WillProcessEditing)|Did(BeginEditing|Change|EndEditing)|View(DidChange(Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(Selection(IsChanging|DidChange)|ColumnDid(Resize|Move)))|ImageRepRegistryDidChange|OutlineView(Selection(IsChanging|DidChange)|ColumnDid(Resize|Move)|Item(Did(Collapse|Expand)|Will(Collapse|Expand)))|Drawer(Did(Close|Open)|Will(Close|Open))|PopUpButton(CellWillPopUp|WillPopUp)|View(GlobalFrameDidChange|BoundsDidChange|F(ocusDidChange|rameDidChange))|FontSetChanged|W(indow(Did(Resi(ze|gn(Main|Key))|M(iniaturize|ove)|Become(Main|Key)|ChangeScreen(|Profile)|Deminiaturize|Update|E(ndSheet|xpose))|Will(M(iniaturize|ove)|BeginSheet|Close))|orkspace(SessionDid(ResignActive|BecomeActive)|Did(Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(Sleep|Unmount|PowerOff|LaunchApplication)))|A(ntialiasThresholdChanged|ppl(ication(Did(ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(nhide|pdate)|FinishLaunching)|Will(ResignActive|BecomeActive|Hide|Terminate|U(nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification\b
+ name
+ support.constant.notification.cocoa
+
+
+ match
+ \bNS(RuleEditor(RowType(Simple|Compound)|NestingMode(Si(ngle|mple)|Compound|List))|GradientDraws(BeforeStartingLocation|AfterEndingLocation)|M(inusSetExpressionType|a(chPortDeallocate(ReceiveRight|SendRight|None)|pTable(StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality)))|B(oxCustom|undleExecutableArchitecture(X86|I386|PPC(64)?)|etweenPredicateOperatorType|ackgroundStyle(Raised|Dark|L(ight|owered)))|S(tring(DrawingTruncatesLastVisibleLine|EncodingConversion(ExternalRepresentation|AllowLossy))|ubqueryExpressionType|p(e(ech(SentenceBoundary|ImmediateBoundary|WordBoundary)|llingState(GrammarFlag|SpellingFlag))|litViewDividerStyleThi(n|ck))|e(rvice(RequestTimedOutError|M(iscellaneousError|alformedServiceDictionaryError)|InvalidPasteboardDataError|ErrorM(inimum|aximum)|Application(NotFoundError|LaunchFailedError))|gmentStyle(Round(Rect|ed)|SmallSquare|Capsule|Textured(Rounded|Square)|Automatic)))|H(UDWindowMask|ashTable(StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality))|N(oModeColorPanel|etServiceNoAutoRename)|C(hangeRedone|o(ntainsPredicateOperatorType|l(orRenderingIntent(RelativeColorimetric|Saturation|Default|Perceptual|AbsoluteColorimetric)|lectorDisabledOption))|ellHit(None|ContentArea|TrackableArea|EditableTextArea))|T(imeZoneNameStyle(S(hort(Standard|DaylightSaving)|tandard)|DaylightSaving)|extFieldDatePickerStyle|ableViewSelectionHighlightStyle(Regular|SourceList)|racking(Mouse(Moved|EnteredAndExited)|CursorUpdate|InVisibleRect|EnabledDuringMouseDrag|A(ssumeInside|ctive(In(KeyWindow|ActiveApp)|WhenFirstResponder|Always))))|I(n(tersectSetExpressionType|dexedColorSpaceModel)|mageScale(None|Proportionally(Down|UpOrDown)|AxesIndependently))|Ope(nGLPFAAllowOfflineRenderers|rationQueue(DefaultMaxConcurrentOperationCount|Priority(High|Normal|Very(High|Low)|Low)))|D(iacriticInsensitiveSearch|ownloadsDirectory)|U(nionSetExpressionType|TF(16(BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)|32(BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)))|P(ointerFunctions(Ma(chVirtualMemory|llocMemory)|Str(ongMemory|uctPersonality)|C(StringPersonality|opyIn)|IntegerPersonality|ZeroingWeakMemory|O(paque(Memory|Personality)|bjectP(ointerPersonality|ersonality)))|at(hStyle(Standard|NavigationBar|PopUp)|ternColorSpaceModel)|rintPanelShows(Scaling|Copies|Orientation|P(a(perSize|ge(Range|SetupAccessory))|review)))|Executable(RuntimeMismatchError|NotLoadableError|ErrorM(inimum|aximum)|L(inkError|oadError)|ArchitectureMismatchError)|KeyValueObservingOption(Initial|Prior)|F(i(ndPanelSubstringMatchType(StartsWith|Contains|EndsWith|FullWord)|leRead(TooLargeError|UnknownStringEncodingError))|orcedOrderingSearch)|Wi(ndow(BackingLocation(MainMemory|Default|VideoMemory)|Sharing(Read(Only|Write)|None)|CollectionBehavior(MoveToActiveSpace|CanJoinAllSpaces|Default))|dthInsensitiveSearch)|AggregateExpressionType)\b
+ name
+ support.constant.cocoa.leopard
+
+
+ match
+ \bNS(R(GB(ModeColorPanel|ColorSpaceModel)|ight(Mouse(D(own(Mask)?|ragged(Mask)?)|Up(Mask)?)|T(ext(Movement|Alignment)|ab(sBezelBorder|StopType))|ArrowFunctionKey)|ound(RectBezelStyle|Bankers|ed(BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(CapStyle|JoinStyle))|un(StoppedResponse|ContinuesResponse|AbortedResponse)|e(s(izableWindowMask|et(CursorRectsRunLoopOrdering|FunctionKey))|ce(ssedBezelStyle|iver(sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(evancyLevelIndicatorStyle|ative(Before|After))|gular(SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(n(domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(ModeMatrix|Button)))|G(IFFileType|lyph(Below|Inscribe(B(elow|ase)|Over(strike|Below)|Above)|Layout(WithPrevious|A(tAPoint|gainstAPoint))|A(ttribute(BidiLevel|Soft|Inscribe|Elastic)|bove))|r(ooveBorder|eaterThan(Comparison|OrEqualTo(Comparison|PredicateOperatorType)|PredicateOperatorType)|a(y(ModeColorPanel|ColorSpaceModel)|dient(None|Con(cave(Strong|Weak)|vex(Strong|Weak)))|phiteControlTint)))|XML(N(o(tationDeclarationKind|de(CompactEmptyElement|IsCDATA|OptionsNone|Use(SingleQuotes|DoubleQuotes)|Pre(serve(NamespaceOrder|C(haracterReferences|DATA)|DTD|Prefixes|E(ntities|mptyElements)|Quotes|Whitespace|A(ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(ocument(X(MLKind|HTMLKind|Include)|HTMLKind|T(idy(XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(arser(GTRequiredError|XMLDeclNot(StartedError|FinishedError)|Mi(splaced(XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(StartedError|FinishedError))|S(t(andaloneValueError|ringNot(StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(MTOKENRequiredError|o(t(ationNot(StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(haracterRef(In(DTDError|PrologError|EpilogError)|AtEOFError)|o(nditionalSectionNot(StartedError|FinishedError)|mment(NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(ternalError|valid(HexCharacterRefError|C(haracter(RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(NameError|Error)))|OutOfMemoryError|D(ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(RI(RequiredError|FragmentError)|n(declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(MissingSemiError|NoNameError|In(Internal(SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(ocessingInstructionNot(StartedError|FinishedError)|ematureDocumentEndError))|E(n(codingNotSupportedError|tity(Ref(In(DTDError|PrologError|EpilogError)|erence(MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(StartedError|FinishedError)|Is(ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(StartedError|FinishedError)|xt(ernalS(tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(iteralNot(StartedError|FinishedError)|T(RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(RedefinedError|HasNoValueError|Not(StartedError|FinishedError)|ListNot(StartedError|FinishedError)))|rocessingInstructionKind)|E(ntity(GeneralKind|DeclarationKind|UnparsedKind|P(ar(sedKind|ameterKind)|redefined))|lement(Declaration(MixedKind|UndefinedKind|E(lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(N(MToken(sKind|Kind)|otationKind)|CDATAKind|ID(Ref(sKind|Kind)|Kind)|DeclarationKind|En(tit(yKind|iesKind)|umerationKind)|Kind))|M(i(n(XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(nthCalendarUnit|deSwitchFunctionKey|use(Moved(Mask)?|E(ntered(Mask)?|ventSubtype|xited(Mask)?))|veToBezierPathElement|mentary(ChangeButton|Push(Button|InButton)|Light(Button)?))|enuFunctionKey|a(c(intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(XEdge|YEdge))|ACHOperatingSystem)|B(MPFileType|o(ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(Se(condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(zelBorder|velLineJoinStyle|low(Bottom|Top)|gin(sWith(Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(spaceCharacter|tabTextMovement|ingStore(Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(owser(NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(h(ift(JISStringEncoding|KeyMask)|ow(ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(s(ReqFunctionKey|tem(D(omainMask|efined(Mask)?)|FunctionKey))|mbolStringEncoding)|c(a(nnedOption|le(None|ToFit|Proportionally))|r(oll(er(NoPart|Increment(Page|Line|Arrow)|Decrement(Page|Line|Arrow)|Knob(Slot)?|Arrows(M(inEnd|axEnd)|None|DefaultSetting))|Wheel(Mask)?|LockFunctionKey)|eenChangedEventType))|t(opFunctionKey|r(ingDrawing(OneShot|DisableScreenFontSubstitution|Uses(DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(Status(Reading|NotOpen|Closed|Open(ing)?|Error|Writing|AtEnd)|Event(Has(BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(ndEncountered|rrorOccurred)))))|i(ngle(DateMode|UnderlineStyle)|ze(DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(condCalendarUnit|lect(By(Character|Paragraph|Word)|i(ng(Next|Previous)|onAffinity(Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(Momentary|Select(One|Any)))|quareLineCapStyle|witchButton|ave(ToOperation|Op(tions(Yes|No|Ask)|eration)|AsOperation)|mall(SquareBezelStyle|C(ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(ighlightModeMatrix|SBModeColorPanel|o(ur(Minute(SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(Never|OnlyFromMainDocumentDomain|Always)|e(lp(ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(MonthDa(yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(o(n(StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(ification(SuspensionBehavior(Hold|Coalesce|D(eliverImmediately|rop))|NoCoalescing|CoalescingOn(Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(cr(iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(itle|opLevelContainersSpecifierError|abs(BezelBorder|NoBorder|LineBorder))|I(nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(ll(Glyph|CellType)|m(eric(Search|PadKeyMask)|berFormatter(Round(Half(Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(10|Default)|S(cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(ercentStyle|ad(Before(Suffix|Prefix)|After(Suffix|Prefix))))))|e(t(Services(BadArgumentError|NotFoundError|C(ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(t(iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(hange(ReadOtherContents|GrayCell(Mask)?|BackgroundCell(Mask)?|Cleared|Done|Undone|Autosaved)|MYK(ModeColorPanel|ColorSpaceModel)|ircular(BezelStyle|Slider)|o(n(stantValueExpressionType|t(inuousCapacityLevelIndicatorStyle|entsCellMask|ain(sComparison|erSpecifierError)|rol(Glyph|KeyMask))|densedFontMask)|lor(Panel(RGBModeMask|GrayModeMask|HSBModeMask|C(MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(p(osite(XOR|Source(In|O(ut|ver)|Atop)|Highlight|C(opy|lear)|Destination(In|O(ut|ver)|Atop)|Plus(Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(stom(SelectorPredicateOperatorType|PaletteModeColorPanel)|r(sor(Update(Mask)?|PointingDevice)|veToBezierPathElement))|e(nterT(extAlignment|abStopType)|ll(State|H(ighlighted|as(Image(Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(Bordered|InsetButton)|Disabled|Editable|LightsBy(Gray|Background|Contents)|AllowsMixedState))|l(ipPagination|o(s(ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(ControlTint|DisplayFunctionKey|LineFunctionKey))|a(seInsensitive(Search|PredicateOption)|n(notCreateScriptCommandError|cel(Button|TextMovement))|chesDirectory|lculation(NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(itical(Request|AlertStyle)|ayonModeColorPanel))|T(hick(SquareBezelStyle|erSquareBezelStyle)|ypesetter(Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(ineBreakAction|atestBehavior))|i(ckMark(Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(olbarItemVisibilityPriority(Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(Compression(N(one|EXT)|CCITTFAX(3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(rminate(Now|Cancel|Later)|xt(Read(InapplicableDocumentTypeError|WriteErrorM(inimum|aximum))|Block(M(i(nimum(Height|Width)|ddleAlignment)|a(rgin|ximum(Height|Width)))|B(o(ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(Characters|Attributes)|CellType|ured(RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(Character|TextMovement|le(tP(oint(Mask|EventSubtype)?|roximity(Mask|EventSubtype)?)|Column(NoResizing|UserResizingMask|AutoresizingMask)|View(ReverseSequentialColumnAutoresizingStyle|GridNone|S(olid(HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(n(sert(CharFunctionKey|FunctionKey|LineFunctionKey)|t(Type|ernalS(criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(2022JPStringEncoding|Latin(1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(R(ight|ep(MatchesDevice|LoadStatus(ReadingHeader|Completed|InvalidData|Un(expectedEOF|knownType)|WillNeedAllData)))|Below|C(ellType|ache(BySize|Never|Default|Always))|Interpolation(High|None|Default|Low)|O(nly|verlaps)|Frame(Gr(oove|ayBezel)|Button|None|Photo)|L(oadStatus(ReadError|C(ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(lign(Right|Bottom(Right|Left)?|Center|Top(Right|Left)?|Left)|bove)))|O(n(State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(Mouse(D(own(Mask)?|ragged(Mask)?)|Up(Mask)?)|TextMovement)|SF1OperatingSystem|pe(n(GL(GO(Re(setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(R(obust|endererID)|M(inimumPolicy|ulti(sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(creenMask|te(ncilSize|reo)|ingleRenderer|upersample|ample(s|Buffers|Alpha))|NoRecovery|C(o(lor(Size|Float)|mpliant)|losestPolicy)|OffScreen|D(oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(cc(umSize|elerated)|ux(Buffers|DepthStencil)|l(phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(B(itfield|oolType)|S(hortType|tr(ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(Type|longType)|ArrayType))|D(i(s(c(losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(Selection|PredicateModifier))|o(c(ModalWindowMask|ument(Directory|ationDirectory))|ubleType|wn(TextMovement|ArrowFunctionKey))|e(s(cendingPageOrder|ktopDirectory)|cimalTabStopType|v(ice(NColorSpaceModel|IndependentModifierFlagsMask)|eloper(Directory|ApplicationDirectory))|fault(ControlTint|TokenStyle)|lete(Char(acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(yCalendarUnit|teFormatter(MediumStyle|Behavior(10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(wer(Clos(ingState|edState)|Open(ingState|State))|gOperation(Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(ser(CancelledError|D(irectory|omainMask)|FunctionKey)|RL(Handle(NotLoaded|Load(Succeeded|InProgress|Failed))|CredentialPersistence(None|Permanent|ForSession))|n(scaledWindowMask|cachedRead|i(codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(o(CloseGroupingRunLoopOrdering|FunctionKey)|e(finedDateComponent|rline(Style(Single|None|Thick|Double)|Pattern(Solid|D(ot|ash(Dot(Dot)?)?)))))|known(ColorSpaceModel|P(ointingDevice|ageOrder)|KeyS(criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(ustifiedTextAlignment|PEG(2000FileType|FileType)|apaneseEUC(GlyphPacking|StringEncoding))|P(o(s(t(Now|erFontMask|WhenIdle|ASAP)|iti(on(Replace|Be(fore|ginning)|End|After)|ve(IntType|DoubleType|FloatType)))|pUp(NoArrow|ArrowAt(Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(InCell(Mask)?|OnPushOffButton)|e(n(TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(Mask)?)|P(S(caleField|tatus(Title|Field)|aveButton)|N(ote(Title|Field)|ame(Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(a(perFeedButton|ge(Range(To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(useFunctionKey|ragraphSeparatorCharacter|ge(DownFunctionKey|UpFunctionKey))|r(int(ing(ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(NotFound|OK|Error)|FunctionKey)|o(p(ertyList(XMLFormat|MutableContainers(AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(BarStyle|SpinningStyle|Preferred(SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(ssedTab|vFunctionKey))|L(HeightForm|CancelButton|TitleField|ImageButton|O(KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(n(terCharacter|d(sWith(Comparison|PredicateOperatorType)|FunctionKey))|v(e(nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(Comparison|PredicateOperatorType)|ra(serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(clude(10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(i(ew(M(in(XMargin|YMargin)|ax(XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(lidationErrorM(inimum|aximum)|riableExpressionType))|Key(SpecifierEvaluationScriptError|Down(Mask)?|Up(Mask)?|PathExpressionType|Value(MinusSetMutation|SetSetMutation|Change(Re(placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(New|Old)|UnionSetMutation|ValidationError))|QTMovie(NormalPlayback|Looping(BackAndForthPlayback|Playback))|F(1(1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(nd(PanelAction(Replace(A(ndFind|ll(InSelection)?))?|S(howFindPanel|e(tFindString|lectAll(InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(Read(No(SuchFileError|PermissionError)|CorruptFileError|In(validFileNameError|applicableStringEncodingError)|Un(supportedSchemeError|knownError))|HandlingPanel(CancelButton|OKButton)|NoSuchFileError|ErrorM(inimum|aximum)|Write(NoPermissionError|In(validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(nt(Mo(noSpaceTrait|dernSerifsClass)|BoldTrait|S(ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(o(ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(ntegerAdvancementsRenderingMode|talicTrait)|O(ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(nknownClass|IOptimizedTrait)|Panel(S(hadowEffectModeMask|t(andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(amilyClassMask|reeformSerifsClass)|Antialiased(RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(Below|Type(None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(attingError(M(inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(ExpressionType|KeyMask)|3(1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(RevertButton|S(ize(Title|Field)|etButton)|CurrentField|Preview(Button|Field))|l(oat(ingPointSamplesBitmapFormat|Type)|agsChanged(Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(heelModeColorPanel|indow(s(NTOperatingSystem|CP125(1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(InterfaceStyle|OperatingSystem))|M(iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(ctivation|ddingToRecents)|A(sync|nd(Hide(Others)?|Print)|llowingClassicStartup))|eek(day(CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(ntsBidiLevels|rningAlertStyle)|r(itingDirection(RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(i(stModeMatrix|ne(Moves(Right|Down|Up|Left)|B(order|reakBy(C(harWrapping|lipping)|Truncating(Middle|Head|Tail)|WordWrapping))|S(eparatorCharacter|weep(Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(ssThan(Comparison|OrEqualTo(Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(Mouse(D(own(Mask)?|ragged(Mask)?)|Up(Mask)?)|T(ext(Movement|Alignment)|ab(sBezelBorder|StopType))|ArrowFunctionKey))|a(yout(RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(sc(iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(y(Type|PredicateModifier|EventMask)|choredSearch|imation(Blocking|Nonblocking(Threaded)?|E(ffect(DisappearingItemDefault|Poof)|ase(In(Out)?|Out))|Linear)|dPredicateType)|t(Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(obe(GB1CharacterCollection|CNS1CharacterCollection|Japan(1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(saveOperation|Pagination)|pp(lication(SupportDirectory|D(irectory|e(fined(Mask)?|legateReply(Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(Mask)?)|l(ternateKeyMask|pha(ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(sWrongScriptError|EvaluationScriptError)|bove(Bottom|Top)|WTEventType))\b
+ name
+ support.constant.cocoa
+
+
+ include
+ source.c
+
+
+ include
+ #bracketed_content
+
+
+ repository
+
+ bracketed_content
+
+ begin
+ \[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.scope.begin.objc
+
+
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.scope.end.objc
+
+
+ name
+ meta.bracketed.objc
+ patterns
+
+
+ begin
+ (?=predicateWithFormat:)(?<=NSPredicate )(predicateWithFormat:)
+ beginCaptures
+
+ 1
+
+ name
+ support.function.any-method.objc
+
+ 2
+
+ name
+ punctuation.separator.arguments.objc
+
+
+ end
+ (?=\])
+ name
+ meta.function-call.predicate.objc
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.arguments.objc
+
+
+ match
+ \bargument(Array|s)(:)
+ name
+ support.function.any-method.name-of-parameter.objc
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.arguments.objc
+
+
+ match
+ \b\w+(:)
+ name
+ invalid.illegal.unknown-method.objc
+
+
+ begin
+ @"
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.objc
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.objc
+
+
+ name
+ string.quoted.double.objc
+ patterns
+
+
+ match
+ \b(AND|OR|NOT|IN)\b
+ name
+ keyword.operator.logical.predicate.cocoa
+
+
+ match
+ \b(ALL|ANY|SOME|NONE)\b
+ name
+ constant.language.predicate.cocoa
+
+
+ match
+ \b(NULL|NIL|SELF|TRUE|YES|FALSE|NO|FIRST|LAST|SIZE)\b
+ name
+ constant.language.predicate.cocoa
+
+
+ match
+ \b(MATCHES|CONTAINS|BEGINSWITH|ENDSWITH|BETWEEN)\b
+ name
+ keyword.operator.comparison.predicate.cocoa
+
+
+ match
+ \bC(ASEINSENSITIVE|I)\b
+ name
+ keyword.other.modifier.predicate.cocoa
+
+
+ match
+ \b(ANYKEY|SUBQUERY|CAST|TRUEPREDICATE|FALSEPREDICATE)\b
+ name
+ keyword.other.predicate.cocoa
+
+
+ match
+ \\(\\|[abefnrtv'"?]|[0-3]\d{,2}|[4-7]\d?|x[a-zA-Z0-9]+)
+ name
+ constant.character.escape.objc
+
+
+ match
+ \\.
+ name
+ invalid.illegal.unknown-escape.objc
+
+
+
+
+ include
+ #special_variables
+
+
+ include
+ #c_functions
+
+
+ include
+ $base
+
+
+
+
+ begin
+ (?=\w)(?<=[\w\])"] )(\w+(?:(:)|(?=\])))
+ beginCaptures
+
+ 1
+
+ name
+ support.function.any-method.objc
+
+ 2
+
+ name
+ punctuation.separator.arguments.objc
+
+
+ end
+ (?=\])
+ name
+ meta.function-call.objc
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.arguments.objc
+
+
+ match
+ \b\w+(:)
+ name
+ support.function.any-method.name-of-parameter.objc
+
+
+ include
+ #special_variables
+
+
+ include
+ #c_functions
+
+
+ include
+ $base
+
+
+
+
+ include
+ #special_variables
+
+
+ include
+ #c_functions
+
+
+ include
+ $self
+
+
+
+ c_functions
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.whitespace.support.function.leading.c
+
+ 2
+
+ name
+ support.function.C99.c
+
+
+ match
+ (\s*)\b(hypot(f|l)?|s(scanf|ystem|nprintf|ca(nf|lb(n(f|l)?|ln(f|l)?))|i(n(h(f|l)?|f|l)?|gn(al|bit))|tr(s(tr|pn)|nc(py|at|mp)|c(spn|hr|oll|py|at|mp)|to(imax|d|u(l(l)?|max)|k|f|l(d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(jmp|vbuf|locale|buf)|qrt(f|l)?|w(scanf|printf)|rand)|n(e(arbyint(f|l)?|xt(toward(f|l)?|after(f|l)?))|an(f|l)?)|c(s(in(h(f|l)?|f|l)?|qrt(f|l)?)|cos(h(f)?|f|l)?|imag(f|l)?|t(ime|an(h(f|l)?|f|l)?)|o(s(h(f|l)?|f|l)?|nj(f|l)?|pysign(f|l)?)|p(ow(f|l)?|roj(f|l)?)|e(il(f|l)?|xp(f|l)?)|l(o(ck|g(f|l)?)|earerr)|a(sin(h(f|l)?|f|l)?|cos(h(f|l)?|f|l)?|tan(h(f|l)?|f|l)?|lloc|rg(f|l)?|bs(f|l)?)|real(f|l)?|brt(f|l)?)|t(ime|o(upper|lower)|an(h(f|l)?|f|l)?|runc(f|l)?|gamma(f|l)?|mp(nam|file))|i(s(space|n(ormal|an)|cntrl|inf|digit|u(nordered|pper)|p(unct|rint)|finite|w(space|c(ntrl|type)|digit|upper|p(unct|rint)|lower|al(num|pha)|graph|xdigit|blank)|l(ower|ess(equal|greater)?)|al(num|pha)|gr(eater(equal)?|aph)|xdigit|blank)|logb(f|l)?|max(div|abs))|di(v|fftime)|_Exit|unget(c|wc)|p(ow(f|l)?|ut(s|c(har)?|wc(har)?)|error|rintf)|e(rf(c(f|l)?|f|l)?|x(it|p(2(f|l)?|f|l|m1(f|l)?)?))|v(s(scanf|nprintf|canf|printf|w(scanf|printf))|printf|f(scanf|printf|w(scanf|printf))|w(scanf|printf)|a_(start|copy|end|arg))|qsort|f(s(canf|e(tpos|ek))|close|tell|open|dim(f|l)?|p(classify|ut(s|c|w(s|c))|rintf)|e(holdexcept|set(e(nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(aiseexcept|ror)|get(e(nv|xceptflag)|round))|flush|w(scanf|ide|printf|rite)|loor(f|l)?|abs(f|l)?|get(s|c|pos|w(s|c))|re(open|e|ad|xp(f|l)?)|m(in(f|l)?|od(f|l)?|a(f|l|x(f|l)?)?))|l(d(iv|exp(f|l)?)|o(ngjmp|cal(time|econv)|g(1(p(f|l)?|0(f|l)?)|2(f|l)?|f|l|b(f|l)?)?)|abs|l(div|abs|r(int(f|l)?|ound(f|l)?))|r(int(f|l)?|ound(f|l)?)|gamma(f|l)?)|w(scanf|c(s(s(tr|pn)|nc(py|at|mp)|c(spn|hr|oll|py|at|mp)|to(imax|d|u(l(l)?|max)|k|f|l(d|l)?|mbs)|pbrk|ftime|len|r(chr|tombs)|xfrm)|to(b|mb)|rtomb)|printf|mem(set|c(hr|py|mp)|move))|a(s(sert|ctime|in(h(f|l)?|f|l)?)|cos(h(f|l)?|f|l)?|t(o(i|f|l(l)?)|exit|an(h(f|l)?|2(f|l)?|f|l)?)|b(s|ort))|g(et(s|c(har)?|env|wc(har)?)|mtime)|r(int(f|l)?|ound(f|l)?|e(name|alloc|wind|m(ove|quo(f|l)?|ainder(f|l)?))|a(nd|ise))|b(search|towc)|m(odf(f|l)?|em(set|c(hr|py|mp)|move)|ktime|alloc|b(s(init|towcs|rtowcs)|towc|len|r(towc|len))))\b
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.whitespace.function-call.leading.c
+
+ 2
+
+ name
+ support.function.any-method.c
+
+ 3
+
+ name
+ punctuation.definition.parameters.c
+
+
+ match
+ (?x) (?: (?= \s ) (?:(?<=else|new|return) | (?<!\w)) (\s+))?
+ (\b
+ (?!(while|for|do|if|else|switch|catch|enumerate|return|r?iterate)\s*\()(?:(?!NS)[A-Za-z_][A-Za-z0-9_]*+\b | :: )++ # actual name
+ )
+ \s*(\()
+ name
+ meta.function-call.c
+
+
+
+ comment
+
+ patterns
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.objc
+
+
+ end
+ \*/
+ name
+ comment.block.objc
+
+
+ begin
+ //
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.comment.objc
+
+
+ end
+ $\n?
+ name
+ comment.line.double-slash.c++
+ patterns
+
+
+ match
+ (?>\\\s*\n)
+ name
+ punctuation.separator.continuation.c++
+
+
+
+
+
+ disabled
+
+ begin
+ ^\s*#\s*if(n?def)?\b.*$
+ comment
+ eat nested preprocessor if(def)s
+ end
+ ^\s*#\s*endif\b.*$
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+ implementation_innards
+
+ patterns
+
+
+ include
+ #preprocessor-rule-enabled-implementation
+
+
+ include
+ #preprocessor-rule-disabled-implementation
+
+
+ include
+ #preprocessor-rule-other-implementation
+
+
+ include
+ #property_directive
+
+
+ include
+ #special_variables
+
+
+ include
+ #method_super
+
+
+ include
+ $base
+
+
+
+ interface_innards
+
+ patterns
+
+
+ include
+ #preprocessor-rule-enabled-interface
+
+
+ include
+ #preprocessor-rule-disabled-interface
+
+
+ include
+ #preprocessor-rule-other-interface
+
+
+ include
+ #properties
+
+
+ include
+ #protocol_list
+
+
+ include
+ #method
+
+
+ include
+ $base
+
+
+
+ method
+
+ begin
+ ^(-|\+)\s*
+ end
+ (?=\{|#)|;
+ name
+ meta.function.objc
+ patterns
+
+
+ begin
+ (\()
+ captures
+
+ 1
+
+ name
+ punctuation.definition.type.objc
+
+ 2
+
+ name
+ entity.name.function.objc
+
+
+ end
+ (\))\s*(\w+\b)
+ name
+ meta.return-type.objc
+ patterns
+
+
+ include
+ #protocol_list
+
+
+ include
+ #protocol_type_qualifier
+
+
+ include
+ $base
+
+
+
+
+ match
+ \b\w+(?=:)
+ name
+ entity.name.function.name-of-parameter.objc
+
+
+ begin
+ ((:))\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.name-of-parameter.objc
+
+ 2
+
+ name
+ punctuation.separator.arguments.objc
+
+ 3
+
+ name
+ punctuation.definition.type.objc
+
+
+ end
+ (\))\s*(\w+\b)?
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.type.objc
+
+ 2
+
+ name
+ variable.parameter.function.objc
+
+
+ name
+ meta.argument-type.objc
+ patterns
+
+
+ include
+ #protocol_list
+
+
+ include
+ #protocol_type_qualifier
+
+
+ include
+ $base
+
+
+
+
+ include
+ #comment
+
+
+
+ method_super
+
+ begin
+ ^(?=-|\+)
+ end
+ (?<=\})|(?=#)
+ name
+ meta.function-with-body.objc
+ patterns
+
+
+ include
+ #method
+
+
+ include
+ $base
+
+
+
+ pragma-mark
+
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.pragma.c
+
+ 3
+
+ name
+ meta.toc-list.pragma-mark.c
+
+
+ match
+ ^\s*(#\s*(pragma\s+mark)\s+(.*))
+ name
+ meta.section
+
+ preprocessor-rule-disabled-implementation
+
+ begin
+ ^\s*(#(if)\s+(0)\b).*
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.if.c
+
+ 3
+
+ name
+ constant.numeric.preprocessor.c
+
+
+ end
+ ^\s*(#\s*(endif)\b.*?(?:(?=(?://|/\*))|$))
+ patterns
+
+
+ begin
+ ^\s*(#\s*(else)\b)
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.else.c
+
+
+ end
+ (?=^\s*#\s*endif\b.*?(?:(?=(?://|/\*))|$))
+ patterns
+
+
+ include
+ #interface_innards
+
+
+
+
+ begin
+
+ end
+ (?=^\s*#\s*(else|endif)\b.*?(?:(?=(?://|/\*))|$))
+ name
+ comment.block.preprocessor.if-branch.c
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+
+
+ preprocessor-rule-disabled-interface
+
+ begin
+ ^\s*(#(if)\s+(0)\b).*
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.if.c
+
+ 3
+
+ name
+ constant.numeric.preprocessor.c
+
+
+ end
+ ^\s*(#\s*(endif)\b.*?(?:(?=(?://|/\*))|$))
+ patterns
+
+
+ begin
+ ^\s*(#\s*(else)\b)
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.else.c
+
+
+ end
+ (?=^\s*#\s*endif\b.*?(?:(?=(?://|/\*))|$))
+ patterns
+
+
+ include
+ #interface_innards
+
+
+
+
+ begin
+
+ end
+ (?=^\s*#\s*(else|endif)\b.*?(?:(?=(?://|/\*))|$))
+ name
+ comment.block.preprocessor.if-branch.c
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+
+
+ preprocessor-rule-enabled-implementation
+
+ begin
+ ^\s*(#(if)\s+(0*1)\b)
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.if.c
+
+ 3
+
+ name
+ constant.numeric.preprocessor.c
+
+
+ end
+ ^\s*(#\s*(endif)\b.*?(?:(?=(?://|/\*))|$))
+ patterns
+
+
+ begin
+ ^\s*(#\s*(else)\b).*
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.else.c
+
+
+ contentName
+ comment.block.preprocessor.else-branch.c
+ end
+ (?=^\s*#\s*endif\b.*?(?:(?=(?://|/\*))|$))
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+
+ begin
+
+ end
+ (?=^\s*#\s*(else|endif)\b.*?(?:(?=(?://|/\*))|$))
+ patterns
+
+
+ include
+ #implementation_innards
+
+
+
+
+
+ preprocessor-rule-enabled-interface
+
+ begin
+ ^\s*(#(if)\s+(0*1)\b)
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.if.c
+
+ 3
+
+ name
+ constant.numeric.preprocessor.c
+
+
+ end
+ ^\s*(#\s*(endif)\b.*?(?:(?=(?://|/\*))|$))
+ patterns
+
+
+ begin
+ ^\s*(#\s*(else)\b).*
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.else.c
+
+
+ contentName
+ comment.block.preprocessor.else-branch.c
+ end
+ (?=^\s*#\s*endif\b.*?(?:(?=(?://|/\*))|$))
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+
+ begin
+
+ end
+ (?=^\s*#\s*(else|endif)\b.*?(?:(?=(?://|/\*))|$))
+ patterns
+
+
+ include
+ #interface_innards
+
+
+
+
+
+ preprocessor-rule-other-implementation
+
+ begin
+ ^\s*(#\s*(if(n?def)?)\b.*?(?:(?=(?://|/\*))|$))
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.c
+
+
+ end
+ ^\s*(#\s*(endif)\b).*?(?:(?=(?://|/\*))|$)
+ patterns
+
+
+ include
+ #implementation_innards
+
+
+
+ preprocessor-rule-other-interface
+
+ begin
+ ^\s*(#\s*(if(n?def)?)\b.*?(?:(?=(?://|/\*))|$))
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.c
+
+
+ end
+ ^\s*(#\s*(endif)\b).*?(?:(?=(?://|/\*))|$)
+ patterns
+
+
+ include
+ #interface_innards
+
+
+
+ properties
+
+ patterns
+
+
+ begin
+ ((@)property)\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.property.objc
+
+ 2
+
+ name
+ punctuation.definition.keyword.objc
+
+ 3
+
+ name
+ punctuation.section.scope.begin.objc
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.scope.end.objc
+
+
+ name
+ meta.property-with-attributes.objc
+ patterns
+
+
+ match
+ \b(getter|setter|readonly|readwrite|assign|retain|copy|nonatomic)\b
+ name
+ keyword.other.property.attribute
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.property.objc
+
+ 2
+
+ name
+ punctuation.definition.keyword.objc
+
+
+ match
+ ((@)property)\b
+ name
+ meta.property.objc
+
+
+
+ property_directive
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.keyword.objc
+
+
+ match
+ (@)(dynamic|synthesize)\b
+ name
+ keyword.other.property.directive.objc
+
+ protocol_list
+
+ begin
+ (<)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.scope.begin.objc
+
+
+ end
+ (>)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.scope.end.objc
+
+
+ name
+ meta.protocol-list.objc
+ patterns
+
+
+ match
+ \bNS(GlyphStorage|M(utableCopying|enuItem)|C(hangeSpelling|o(ding|pying|lorPicking(Custom|Default)))|T(oolbarItemValidations|ext(Input|AttachmentCell))|I(nputServ(iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(CTypeSerializationCallBack|ect)|D(ecimalNumberBehaviors|raggingInfo)|U(serInterfaceValidations|RL(HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(ToobarItem|UserInterfaceItem)|Locking)\b
+ name
+ support.other.protocol.objc
+
+
+
+ protocol_type_qualifier
+
+ match
+ \b(in|out|inout|oneway|bycopy|byref)\b
+ name
+ storage.modifier.protocol.objc
+
+ special_variables
+
+ patterns
+
+
+ match
+ \b_cmd\b
+ name
+ variable.other.selector.objc
+
+
+ match
+ \b(self|super)\b
+ name
+ variable.language.objc
+
+
+
+
+ scopeName
+ source.objc
+ uuid
+ F85CC716-6B1C-11D9-9A20-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/PHP.tmLanguage b/app/rcc/edbee/syntaxfiles/PHP.tmLanguage
new file mode 100644
index 00000000..d8f504d8
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/PHP.tmLanguage
@@ -0,0 +1,3429 @@
+
+
+
+
+ comment
+ TODO:
+• Try to improve parameters list syntax – scope numbers, ‘=’, ‘,’ and possibly be intelligent about entity ordering
+• Is meta.function-call the correct scope? I've added it to my theme but by default it's not highlighted
+ fileTypes
+
+
+ php
+
+ firstLineMatch
+ ^#!.*(?<!-)php[0-9]{0,1}\b
+ foldingStartMarker
+ (/\*|\{\s*$|<<<HTML)
+ foldingStopMarker
+ (\*/|^\s*\}|^HTML;)
+ name
+ PHP
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.whitespace.embedded.leading.php
+
+ 2
+
+ name
+ source.php.embedded.line.empty.html
+
+ 3
+
+ name
+ punctuation.section.embedded.begin.php
+
+ 4
+
+ name
+ meta.consecutive-tags.php
+
+ 5
+
+ name
+ source.php
+
+ 6
+
+ name
+ punctuation.section.embedded.end.php
+
+ 7
+
+ name
+ source.php
+
+ 8
+
+ name
+ punctuation.whitespace.embedded.trailing.php
+
+
+ comment
+ Matches empty tags.
+ match
+ (?x)
+ (^\s*)? # 1 - Leading whitespace
+ ( # 2 - meta.embedded.line.empty.php
+ ( # 3 - Open Tag
+ (?:
+ ((?<=\?>)<) # 4 - Consecutive tags
+ | <
+ )
+ \?(?i:php|=)?
+ )
+ (\s*) # 5 - Loneliness
+ ((\?)>) # 6 - Close Tag
+ # 7 - Scope ? as scope.php
+ )
+ (
+ \1 # Match nothing if there was no
+ # leading whitespace...
+ | (\s*$\n)? # or match trailing whitespace.
+ )
+
+
+
+ begin
+ ^\s*(?=<\?)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.whitespace.embedded.leading.php
+
+
+ comment
+ Catches tags with preceeding whitespace.
+ end
+ (?<=\?>)(\s*$\n)?
+ endCaptures
+
+ 0
+
+ name
+ punctuation.whitespace.embedded.trailing.php
+
+
+ patterns
+
+
+ begin
+ <\?(?i:php|=)?
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.begin.php
+
+
+ end
+ (\?)>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.end.php
+
+ 1
+
+ name
+ source.php
+
+
+ name
+ source.php.embedded.block.html
+ patterns
+
+
+ include
+ #language
+
+
+
+
+
+
+ begin
+ (((?<=\?>)<)|<)\?(?i:php|=)?
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.begin.php
+
+ 2
+
+ name
+ meta.consecutive-tags.php
+
+
+ comment
+ Catches the remainder.
+ end
+ (\?)>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.end.php
+
+ 1
+
+ name
+ source.php
+
+
+ name
+ source.php.embedded.line.html
+ patterns
+
+
+ include
+ #language
+
+
+
+
+ repository
+
+ constants
+
+ patterns
+
+
+ match
+ (?i)\b(TRUE|FALSE|NULL|__(FILE|FUNCTION|CLASS|METHOD|LINE)__|ON|OFF|YES|NO|NL|BR|TAB)\b
+ name
+ constant.language.php
+
+
+ match
+ \b(DEFAULT_INCLUDE_PATH|E_(ALL|COMPILE_(ERROR|WARNING)|CORE_(ERROR|WARNING)|(RECOVERABLE_)?ERROR|NOTICE|PARSE|STRICT|USER_(ERROR|NOTICE|WARNING)|WARNING)|PEAR_(EXTENSION_DIR|INSTALL_DIR)|PHP_(BINDIR|CONFIG_FILE_PATH|DATADIR|E(OL|XTENSION_DIR)|L(IBDIR|OCALSTATEDIR)|O(S|UTPUT_HANDLER_CONT|UTPUT_HANDLER_END|UTPUT_HANDLER_START)|SYSCONFDIR|VERSION))\b
+ name
+ support.constant.core.php
+
+
+ match
+ \b(A(B(DAY_([1-7])|MON_([0-9]{1,2}))|LT_DIGITS|M_STR|SSERT_(ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(ASE_(LOWER|UPPER)|HAR_MAX|O(DESET|NNECTION_(ABORTED|NORMAL|TIMEOUT)|UNT_(NORMAL|RECURSIVE))|REDITS_(ALL|DOCS|FULLPAGE|GENERAL|GROUP|MODULES|QA|SAPI)|RNCYSTR|RYPT_(BLOWFISH|EXT_DES|MD5|SALT_LENGTH|STD_DES)|URRENCY_SYMBOL)|D(AY_([1-7])|ECIMAL_POINT|IRECTORY_SEPARATOR|_(FMT|T_FMT))|E(NT_(COMPAT|NOQUOTES|QUOTES)|RA(|_D_FMT|_D_T_FMT|_T_FMT|_YEAR)|XTR_(IF_EXISTS|OVERWRITE|PREFIX_(ALL|IF_EXISTS|INVALID|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(ENTITIES|SPECIALCHARS)|IN(FO_(ALL|CONFIGURATION|CREDITS|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(ALL|PERDIR|SYSTEM|USER)|T_(CURR_SYMBOL|FRAC_DIGITS))|L(C_(ALL|COLLATE|CTYPE|MESSAGES|MONETARY|NUMERIC|TIME)|O(CK_(EX|NB|SH|UN)|G_(ALERT|AUTH(|PRIV)|CONS|CRIT|CRON|DAEMON|DEBUG|EMERG|ERR|INFO|KERN|LOCAL([0-7])|LPR|MAIL|NDELAY|NEWS|NOTICE|NOWAIT|ODELAY|PERROR|PID|SYSLOG|USER|UUCP|WARNING)))|M(ON_([0-9]{1,2}|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|YSQL_(ASSOC|BOTH|NUM)|_(1_PI|2_(PI|SQRTPI)|E|L(N10|N2|OG(10E|2E))|PI(|_2|_4)|SQRT1_2|SQRT2))|N(EGATIVE_SIGN|O(EXPR|STR)|_(CS_PRECEDES|SEP_BY_SPACE|SIGN_POSN))|P(ATH(INFO_(BASENAME|DIRNAME|EXTENSION|FILENAME)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(CS_PRECEDES|SEP_BY_SPACE|SIGN_POSN))|RADIXCHAR|S(EEK_(CUR|END|SET)|ORT_(ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(BOTH|LEFT|RIGHT))|T(HOUS(ANDS_SEP|EP)|_(FMT(|_AMPM)))|YES(EXPR|STR))\b
+ name
+ support.constant.std.php
+
+
+ comment
+ In PHP, any identifier which is not a variable is taken to be a constant.
+ However, if there is no constant defined with the given name then a notice
+ is generated and the constant is assumed to have the value of its name.
+ match
+ [a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*
+ name
+ constant.other.php
+
+
+
+ function-call
+
+ match
+ [A-Za-z_][A-Za-z_0-9]*(?=\s*\()
+ name
+ meta.function-call.php
+
+ instantiation
+
+ captures
+
+ 1
+
+ name
+ keyword.other.new.php
+
+ 2
+
+ name
+ variable.other.php
+
+ 3
+
+ name
+ support.class.php
+
+ 4
+
+ name
+ support.class.php
+
+
+ match
+ (?i)\b(new)\s+(?:(\$[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)|(\w+))|(\w+)(?=::)
+
+ interpolation
+
+ comment
+ http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing
+ patterns
+
+
+ match
+ \\[0-7]{1,3}
+ name
+ constant.numeric.octal.php
+
+
+ match
+ \\x[0-9A-Fa-f]{1,2}
+ name
+ constant.numeric.hex.php
+
+
+ match
+ \\[nrt\\\$\"]
+ name
+ constant.character.escape.php
+
+
+ captures
+
+ 1
+
+ name
+ variable.other.php
+
+ 2
+
+ name
+ punctuation.definition.variable.php
+
+ 4
+
+ name
+ punctuation.definition.variable.php
+
+
+ comment
+ Simple syntax with braces: "foo${bar}baz"
+ match
+ (?x)
+ ((\$\{)(?<name>[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(\}))
+
+
+
+ captures
+
+ 1
+
+ name
+ variable.other.php
+
+ 10
+
+ name
+ punctuation.definition.variable.php
+
+ 11
+
+ name
+ string.unquoted.index.php
+
+ 12
+
+ name
+ invalid.illegal.invalid-simple-array-index.php
+
+ 13
+
+ name
+ keyword.operator.index-end.php
+
+ 2
+
+ name
+ punctuation.definition.variable.php
+
+ 4
+
+ name
+ keyword.operator.class.php
+
+ 5
+
+ name
+ variable.other.property.php
+
+ 6
+
+ name
+ invalid.illegal.php
+
+ 7
+
+ name
+ keyword.operator.index-start.php
+
+ 8
+
+ name
+ constant.numeric.index.php
+
+ 9
+
+ name
+ variable.other.index.php
+
+
+ comment
+ Simple syntax: $foo, $foo[0], $foo[$bar], $foo->bar
+ match
+ (?x)
+ ((\$)(?<name>[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*))
+ (?:
+ (->)
+ (?:
+ (\g<name>)
+ |
+ (\$\g<name>)
+ )
+ |
+ (\[)
+ (?:(\d+)|((\$)\g<name>)|(\w+)|(.*?))
+ (\])
+ )?
+
+
+
+ begin
+ (?=(?<regex>(?#simple syntax)\$(?<name>[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(?:\[(?<index>[a-zA-Z0-9_\x{7f}-\x{ff}]+|\$\g<name>)\]|->\g<name>(\(.*?\))?)?|(?#simple syntax with braces)\$\{(?:\g<name>(?<indices>\[(?:\g<index>|'(?:\\.|[^'\\])*'|"(?:\g<regex>|\\.|[^"\\])*")\])?|\g<complex>|\$\{\g<complex>\})\}|(?#complex syntax)\{(?<complex>\$(?<segment>\g<name>(\g<indices>*|\(.*?\))?)(?:->\g<segment>)*|\$\g<complex>|\$\{\g<complex>\})\}))\{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.variable.php
+
+
+ comment
+ Complex syntax. It seems this now supports complex method calls, as of PHP5.
+ I've put wildcards into the function call parameter lists to handle this, but this may break the pattern.
+ It also might be better to disable it as I shouldn't imagine it's used often (hopefully) and it may confuse PHP4 users.
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.variable.php
+
+
+ patterns
+
+
+ include
+ #function-call
+
+
+ include
+ #var_basic
+
+
+ include
+ #object
+
+
+ include
+ #numbers
+
+
+ match
+ \[
+ name
+ keyword.operator.index-start.php
+
+
+ match
+ \]
+ name
+ keyword.operator.index-end.php
+
+
+
+
+
+ language
+
+ patterns
+
+
+ begin
+ (?=<<<\s*(HTML|XML|SQL|JAVASCRIPT)\s*$)
+ end
+ (?!<?<<\s*(HTML|XML|SQL|JAVASCRIPT)\s*$)
+ name
+ string.unquoted.heredoc.php
+ patterns
+
+
+ begin
+ (<<<)\s*(HTML)\s*$\n?
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.begin.php
+
+ 1
+
+ name
+ punctuation.definition.string.php
+
+ 2
+
+ name
+ keyword.operator.heredoc.php
+
+
+ contentName
+ text.html
+ end
+ ^(HTML)(;?)$\n?
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.end.php
+
+ 1
+
+ name
+ keyword.operator.heredoc.php
+
+ 2
+
+ name
+ punctuation.definition.string.php
+
+
+ name
+ meta.embedded.html
+ patterns
+
+
+ include
+ text.html.basic
+
+
+ include
+ #interpolation
+
+
+
+
+ begin
+ (<<<)\s*(XML)\s*$\n?
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.begin.php
+
+ 1
+
+ name
+ punctuation.definition.string.php
+
+ 2
+
+ name
+ keyword.operator.heredoc.php
+
+
+ contentName
+ text.xml
+ end
+ ^(XML)(;?)$\n?
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.end.php
+
+ 1
+
+ name
+ keyword.operator.heredoc.php
+
+ 2
+
+ name
+ punctuation.definition.string.php
+
+
+ name
+ meta.embedded.xml
+ patterns
+
+
+ include
+ text.xml
+
+
+ include
+ #interpolation
+
+
+
+
+ begin
+ (<<<)\s*(SQL)\s*$\n?
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.begin.php
+
+ 1
+
+ name
+ punctuation.definition.string.php
+
+ 2
+
+ name
+ keyword.operator.heredoc.php
+
+
+ contentName
+ source.sql
+ end
+ ^(SQL)(;?)$\n?
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.end.php
+
+ 1
+
+ name
+ keyword.operator.heredoc.php
+
+ 2
+
+ name
+ punctuation.definition.string.php
+
+
+ name
+ meta.embedded.sql
+ patterns
+
+
+ include
+ source.sql
+
+
+ include
+ #interpolation
+
+
+
+
+ begin
+ (<<<)\s*(JAVASCRIPT)\s*$\n?
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.begin.php
+
+ 1
+
+ name
+ punctuation.definition.string.php
+
+ 2
+
+ name
+ keyword.operator.heredoc.php
+
+
+ contentName
+ source.js
+ end
+ ^(JAVASCRIPT)(;?)$\n?
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.end.php
+
+ 1
+
+ name
+ keyword.operator.heredoc.php
+
+ 2
+
+ name
+ punctuation.definition.string.php
+
+
+ name
+ meta.embedded.js
+ patterns
+
+
+ include
+ source.js
+
+
+ include
+ #interpolation
+
+
+
+
+
+
+ begin
+ /\*\*(?:#@\+)?\s*$
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.php
+
+
+ comment
+ This now only highlights a docblock if the first line contains only /**
+ - this is to stop highlighting everything as invalid when people do comment banners with /******** ...
+ - Now matches /**#@+ too - used for docblock templates: http://manual.phpdoc.org/HTMLframesConverter/default/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html#basics.docblocktemplate
+ end
+ \*/
+ name
+ comment.block.documentation.phpdoc.php
+ patterns
+
+
+ include
+ #php_doc
+
+
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.php
+
+
+ end
+ \*/
+ name
+ comment.block.php
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.php
+
+
+ match
+ (//).*?($\n?|(?=\?>))
+ name
+ comment.line.double-slash.php
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.php
+
+
+ match
+ (#).*?($\n?|(?=\?>))
+ name
+ comment.line.number-sign.php
+
+
+ begin
+ ^(?i)\s*(interface)\s+([a-z0-9_]+)\s*(extends)?\s*
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.interface.php
+
+ 2
+
+ name
+ entity.name.type.interface.php
+
+ 3
+
+ name
+ storage.modifier.extends.php
+
+
+ end
+ $
+ name
+ meta.interface.php
+ patterns
+
+
+ match
+ [a-zA-Z0-9_]+
+ name
+ entity.other.inherited-class.php
+
+
+
+
+ begin
+ (?i)^\s*(abstract|final)?\s*(class)\s+([a-z0-9_]+)\s*
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.abstract.php
+
+ 2
+
+ name
+ storage.type.class.php
+
+ 3
+
+ name
+ entity.name.type.class.php
+
+
+ end
+ $
+ name
+ meta.class.php
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ storage.modifier.extends.php
+
+ 2
+
+ name
+ entity.other.inherited-class.php
+
+
+ match
+ (?i:(extends))\s+([a-zA-Z0-9_]+)\s*
+
+
+ begin
+ (?i:(implements))\s+([a-zA-Z0-9_]+)\s*
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.implements.php
+
+ 2
+
+ name
+ support.class.implements.php
+
+
+ end
+ (?=\s*\b(?i:(extends)))|$
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ support.class.implements.php
+
+
+ match
+ ,\s*([a-zA-Z0-9_]+)\s*
+
+
+
+
+
+
+ match
+ \b(break|c(ase|ontinue)|d(e(clare|fault)|ie|o)|e(lse(if)?|nd(declare|for(each)?|if|switch|while)|xit)|for(each)?|if|return|switch|use|while)\b
+ name
+ keyword.control.php
+
+
+ begin
+ (?i)\b((?:require|include)(?:_once)?)\b\s*
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.import.include.php
+
+
+ end
+ (?=\s|;|$)
+ name
+ meta.include.php
+ patterns
+
+
+ include
+ #language
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.exception.php
+
+ 2
+
+ name
+ support.class.php
+
+ 3
+
+ name
+ variable.other.php
+
+ 4
+
+ name
+ punctuation.definition.variable.php
+
+
+ match
+ \b(catch)\b\s*\(\s*([A-Za-z_][A-Za-z_0-9]*)\s*((\$+)[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)\s*\)
+ name
+ meta.catch.php
+
+
+ match
+ \b(catch|try|throw|exception)\b
+ name
+ keyword.control.exception.php
+
+
+ begin
+ (?:^\s*)((?:(?:final|abstract|public|private|protected|static)\s+)*)(function)(?:\s+|(\s*&\s*))(?:(__(?:call|(?:con|de)struct|get|(?:is|un)?set|tostring|clone|set_state|sleep|wakeup|autoload))|([a-zA-Z0-9_]+))\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.php
+
+ 2
+
+ name
+ storage.type.function.php
+
+ 3
+
+ name
+ storage.modifier.reference.php
+
+ 4
+
+ name
+ support.function.magic.php
+
+ 5
+
+ name
+ entity.name.function.php
+
+ 6
+
+ name
+ punctuation.definition.parameters.begin.php
+
+
+ contentName
+ meta.function.arguments.php
+ end
+ \)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.php
+
+
+ name
+ meta.function.php
+ patterns
+
+
+ begin
+ (?x)
+ \s*(array) # Typehint
+ \s*(&)? # Reference
+ \s*((\$+)[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*) # The variable name
+ \s*(=) # A default value
+ \s*(array)\s*(\()
+
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.php
+
+ 2
+
+ name
+ storage.modifier.php
+
+ 3
+
+ name
+ variable.other.php
+
+ 4
+
+ name
+ punctuation.definition.variable.php
+
+ 5
+
+ name
+ keyword.operator.assignment.php
+
+ 6
+
+ name
+ support.function.construct.php
+
+ 7
+
+ name
+ punctuation.definition.array.begin.php
+
+
+ contentName
+ meta.array.php
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.array.end.php
+
+
+ name
+ meta.function.argument.array.php
+ patterns
+
+
+ include
+ #strings
+
+
+ include
+ #numbers
+
+
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.php
+
+ 2
+
+ name
+ storage.modifier.php
+
+ 3
+
+ name
+ variable.other.php
+
+ 4
+
+ name
+ punctuation.definition.variable.php
+
+ 5
+
+ name
+ keyword.operator.assignment.php
+
+ 6
+
+ name
+ constant.language.php
+
+ 7
+
+ name
+ invalid.illegal.non-null-typehinted.php
+
+
+ match
+ (?x)
+ \s*(array) # Typehint
+ \s*(&)? # Reference
+ \s*((\$+)[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*) # The variable name
+ (?:
+ \s*(=) # A default value
+ \s*(?i:
+ (NULL)
+ |
+ (\S.*?)
+ )?
+ )?
+ \s*(?=,|\)) # A closing parentheses (end of argument list) or a comma
+
+ name
+ meta.function.argument.array.php
+
+
+ captures
+
+ 1
+
+ name
+ support.class.php
+
+ 2
+
+ name
+ storage.modifier.php
+
+ 3
+
+ name
+ variable.other.php
+
+ 4
+
+ name
+ punctuation.definition.variable.php
+
+ 5
+
+ name
+ keyword.operator.assignment.php
+
+ 6
+
+ name
+ constant.language.php
+
+ 7
+
+ name
+ invalid.illegal.non-null-typehinted.php
+
+
+ match
+ (?x)
+ \s*([A-Za-z_][A-Za-z_0-9]*) # Typehinted class name
+ \s*(&)? # Reference
+ \s*((\$+)[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*) # The variable name
+ (?:
+ \s*(=) # A default value
+ \s*(?i:
+ (NULL)
+ |
+ (\S.*?)
+ )?
+ )?
+ \s*(?=,|\)) # A closing parentheses (end of argument list) or a comma
+
+ name
+ meta.function.argument.typehinted.php
+
+
+ captures
+
+ 1
+
+ name
+ storage.modifier.php
+
+ 2
+
+ name
+ variable.other.php
+
+ 3
+
+ name
+ punctuation.definition.variable.php
+
+
+ match
+ (\s*&)?\s*((\$+)[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)\s*(?=,|\))
+ name
+ meta.function.argument.no-default.php
+
+
+ begin
+ (\s*&)?\s*((\$+)[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(?:\s*(=)\s*)\s*
+ captures
+
+ 1
+
+ name
+ storage.modifier.php
+
+ 2
+
+ name
+ variable.other.php
+
+ 3
+
+ name
+ punctuation.definition.variable.php
+
+ 4
+
+ name
+ keyword.operator.assignment.php
+
+
+ end
+ (?=,|\))
+ name
+ meta.function.argument.default.php
+ patterns
+
+
+ include
+ #parameter-default-types
+
+
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.php
+
+
+ end
+ \*/
+ name
+ comment.block.php
+
+
+
+
+ match
+ (?i)\b(real|double|float|int(eger)?|bool(ean)?|string|class|clone|var|function|interface|parent|self|object)\b
+ name
+ storage.type.php
+
+
+ match
+ (?i)\b(global|abstract|const|extends|implements|final|p(r(ivate|otected)|ublic)|static)\b
+ name
+ storage.modifier.php
+
+
+ include
+ #object
+
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.class.php
+
+ 2
+
+ name
+ meta.function-call.static.php
+
+ 3
+
+ name
+ variable.other.class.php
+
+ 4
+
+ name
+ punctuation.definition.variable.php
+
+ 5
+
+ name
+ constant.other.class.php
+
+
+ match
+ (?x)(::)
+ (?:
+ ([A-Za-z_][A-Za-z_0-9]*)\s*\(
+ |
+ ((\$+)[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)
+ |
+ ([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)
+ )?
+
+
+ include
+ #support
+
+
+ begin
+ (<<<)\s*([a-zA-Z_]+[a-zA-Z0-9_]*)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.php
+
+ 2
+
+ name
+ keyword.operator.heredoc.php
+
+
+ end
+ ^(\2)(;?)$
+ endCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.php
+
+ 2
+
+ name
+ punctuation.definition.string.php
+
+
+ name
+ string.unquoted.heredoc.php
+ patterns
+
+
+ include
+ #interpolation
+
+
+
+
+ match
+ =>
+ name
+ keyword.operator.key.php
+
+
+ match
+ &(?=\s*(\$|new|[A-Za-z_][A-Za-z_0-9]+(?=\s*\()))
+ name
+ storage.modifier.reference.php
+
+
+ match
+ ;
+ name
+ punctuation.terminator.expression.php
+
+
+ match
+ (@)
+ name
+ keyword.operator.error-control.php
+
+
+ match
+ (\-\-|\+\+)
+ name
+ keyword.operator.increment-decrement.php
+
+
+ match
+ (\-|\+|\*|/|%)
+ name
+ keyword.operator.arithmetic.php
+
+
+ match
+ (?i)(!|&&|\|\|)|\b(and|or|xor|as)\b
+ name
+ keyword.operator.logical.php
+
+
+ match
+ <<|>>|~|\^|&|\|
+ name
+ keyword.operator.bitwise.php
+
+
+ match
+ (===|==|!==|!=|<=|>=|<>|<|>)
+ name
+ keyword.operator.comparison.php
+
+
+ match
+ (\.=|\.)
+ name
+ keyword.operator.string.php
+
+
+ match
+ =
+ name
+ keyword.operator.assignment.php
+
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.type.php
+
+ 2
+
+ name
+ support.class.php
+
+
+ match
+ (?i)\b(instanceof)\b(?:\s+(\w+))?
+
+
+ include
+ #numbers
+
+
+ include
+ #strings
+
+
+ include
+ #string-backtick
+
+
+ include
+ #function-call
+
+
+ include
+ #variables
+
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.php
+
+ 2
+
+ name
+ variable.other.property.php
+
+
+ match
+ (?<=[a-zA-Z0-9_\x{7f}-\x{ff}])(->)([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*?)\b
+
+
+ include
+ #instantiation
+
+
+ include
+ #constants
+
+
+
+ numbers
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)\b
+ name
+ constant.numeric.php
+
+ object
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.class.php
+
+ 2
+
+ name
+ meta.function-call.object.php
+
+ 3
+
+ name
+ variable.other.property.php
+
+ 4
+
+ name
+ punctuation.definition.variable.php
+
+
+ match
+ (?x)(->)
+ (?:
+ ([A-Za-z_][A-Za-z_0-9]*)\s*\(
+ |
+ ((\$+)?[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)
+ )?
+
+ parameter-default-types
+
+ patterns
+
+
+ include
+ #strings
+
+
+ include
+ #numbers
+
+
+ include
+ #string-backtick
+
+
+ include
+ #variables
+
+
+ match
+ =>
+ name
+ keyword.operator.key.php
+
+
+ match
+ =
+ name
+ keyword.operator.assignment.php
+
+
+ match
+ &(?=\s*\$)
+ name
+ storage.modifier.reference.php
+
+
+ begin
+ (array)\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ support.function.construct.php
+
+ 2
+
+ name
+ punctuation.definition.array.begin.php
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.array.end.php
+
+
+ name
+ meta.array.php
+ patterns
+
+
+ include
+ #parameter-default-types
+
+
+
+
+ include
+ #instantiation
+
+
+ include
+ #constants
+
+
+
+ php_doc
+
+ patterns
+
+
+ comment
+ PHPDocumentor only recognises lines with an asterisk as the first non-whitespaces character
+ match
+ ^(?!\s*\*).*$\n?
+ name
+ invalid.illegal.missing-asterisk.phpdoc.php
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.phpdoc.php
+
+ 3
+
+ name
+ storage.modifier.php
+
+ 4
+
+ name
+ invalid.illegal.wrong-access-type.phpdoc.php
+
+
+ match
+ ^\s*\*\s*(@access)\s+((public|private|protected)|(.+))\s*$
+
+
+ match
+ ((https?|s?ftp|ftps|file|smb|afp|nfs|(x-)?man|gopher|txmt)://|mailto:)[-:@a-zA-Z0-9_.~%+/?=&#]+(?<![.?:])
+ name
+ markup.underline.link.php
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.phpdoc.php
+
+ 2
+
+ name
+ markup.underline.link.php
+
+
+ match
+ (@xlink)\s+(.+)\s*$
+
+
+ match
+ \@(a(bstract|uthor)|c(ategory|opyright)|example|global|internal|li(cense|nk)|pa(ckage|ram)|return|s(ee|ince|tatic|ubpackage)|t(hrows|odo)|v(ar|ersion)|uses|deprecated|final)\b
+ name
+ keyword.other.phpdoc.php
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.phpdoc.php
+
+
+ match
+ \{(@(link)).+?\}
+ name
+ meta.tag.inline.phpdoc.php
+
+
+
+ regex-double-quoted
+
+ begin
+ (?x)"/ (?= (\\.|[^"/])++/[imsxeADSUXu]*" )
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.php
+
+
+ end
+ (/)([imsxeADSUXu]*)(")
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.php
+
+
+ name
+ string.regexp.double-quoted.php
+ patterns
+
+
+ comment
+ Escaped from the regexp – there can also be 2 backslashes (since 1 will escape the first)
+ match
+ (\\){1,2}[.$^\[\]{}]
+ name
+ constant.character.escape.regex.php
+
+
+ include
+ #interpolation
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.arbitrary-repitition.php
+
+ 3
+
+ name
+ punctuation.definition.arbitrary-repitition.php
+
+
+ match
+ (\{)\d+(,\d+)?(\})
+ name
+ string.regexp.arbitrary-repitition.php
+
+
+ begin
+ \[(?:\^?\])?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.character-class.php
+
+
+ end
+ \]
+ name
+ string.regexp.character-class.php
+ patterns
+
+
+ include
+ #interpolation
+
+
+
+
+ match
+ [$^+*]
+ name
+ keyword.operator.regexp.php
+
+
+
+ regex-single-quoted
+
+ begin
+ (?x)'/ (?= (\\.|[^'/])++/[imsxeADSUXu]*' )
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.php
+
+
+ end
+ (/)([imsxeADSUXu]*)(')
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.php
+
+
+ name
+ string.regexp.single-quoted.php
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.arbitrary-repitition.php
+
+ 3
+
+ name
+ punctuation.definition.arbitrary-repitition.php
+
+
+ match
+ (\{)\d+(,\d+)?(\})
+ name
+ string.regexp.arbitrary-repitition.php
+
+
+ comment
+ Escaped from the regexp – there can also be 2 backslashes (since 1 will escape the first)
+ match
+ (\\){1,2}[.$^\[\]{}]
+ name
+ constant.character.escape.regex.php
+
+
+ comment
+ Escaped from the PHP string – there can also be 2 backslashes (since 1 will escape the first)
+ match
+ \\{1,2}[\\']
+ name
+ constant.character.escape.php
+
+
+ begin
+ \[(?:\^?\])?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.character-class.php
+
+
+ end
+ \]
+ name
+ string.regexp.character-class.php
+ patterns
+
+
+ match
+ \\[\\'\[\]]
+ name
+ constant.character.escape.php
+
+
+
+
+ match
+ [$^+*]
+ name
+ keyword.operator.regexp.php
+
+
+
+ sql-string-double-quoted
+
+ begin
+ "\s*(?=(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER)\b)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.php
+
+
+ contentName
+ source.sql.embedded.php
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.php
+
+
+ name
+ string.quoted.double.sql.php
+ patterns
+
+
+ match
+ #(\\"|[^"])*(?="|$\n?)
+ name
+ comment.line.number-sign.sql
+
+
+ match
+ --(\\"|[^"])*(?="|$\n?)
+ name
+ comment.line.double-dash.sql
+
+
+ begin
+ '(?=[^']*?")
+ comment
+ Unclosed strings must be captured to avoid them eating the remainder of the PHP script
+ Sample case: $sql = "SELECT * FROM bar WHERE foo = '" . $variable . "'"
+ end
+ (?=")
+ name
+ string.quoted.single.unclosed.sql
+ patterns
+
+
+ match
+ \\[\\']
+ name
+ constant.character.escape.php
+
+
+
+
+ begin
+ `(?=[^`]*?")
+ comment
+ Unclosed strings must be captured to avoid them eating the remainder of the PHP script
+ Sample case: $sql = "SELECT * FROM bar WHERE foo = '" . $variable . "'"
+ end
+ (?=")
+ name
+ string.quoted.other.backtick.unclosed.sql
+ patterns
+
+
+ match
+ \\[\\']
+ name
+ constant.character.escape.php
+
+
+
+
+ begin
+ \\"(?!([^\\"]|\\[^"])*\\")(?=(\\[^"]|.)*?")
+ comment
+ Unclosed strings must be captured to avoid them eating the remainder of the PHP script
+ Sample case: $sql = "SELECT * FROM bar WHERE foo = '" . $variable . "'"
+ end
+ (?=")
+ name
+ string.quoted.double.unclosed.sql
+ patterns
+
+
+ match
+ \\[\\']
+ name
+ constant.character.escape.php
+
+
+
+
+ begin
+ \\"
+ captures
+
+ 0
+
+ name
+ constant.character.escape.php
+
+
+ end
+ \\"
+ name
+ string.quoted.double.sql
+ patterns
+
+
+ include
+ #interpolation
+
+
+
+
+ begin
+ `
+ end
+ `
+ name
+ string.quoted.other.backtick.sql
+ patterns
+
+
+ include
+ #interpolation
+
+
+
+
+ begin
+ '
+ end
+ '
+ name
+ string.quoted.single.sql
+ patterns
+
+
+ include
+ #interpolation
+
+
+
+
+ match
+ \\.
+ name
+ constant.character.escape.php
+
+
+ include
+ #interpolation
+
+
+ include
+ source.sql
+
+
+
+ sql-string-single-quoted
+
+ begin
+ '\s*(?=(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER)\b)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.php
+
+
+ contentName
+ source.sql.embedded.php
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.php
+
+
+ name
+ string.quoted.single.sql.php
+ patterns
+
+
+ match
+ #(\\'|[^'])*(?='|$\n?)
+ name
+ comment.line.number-sign.sql
+
+
+ match
+ --(\\'|[^'])*(?='|$\n?)
+ name
+ comment.line.double-dash.sql
+
+
+ begin
+ \\'(?!([^\\']|\\[^'])*\\')(?=(\\[^']|.)*?')
+ comment
+ Unclosed strings must be captured to avoid them eating the remainder of the PHP script
+ Sample case: $sql = "SELECT * FROM bar WHERE foo = '" . $variable . "'"
+ end
+ (?=')
+ name
+ string.quoted.single.unclosed.sql
+ patterns
+
+
+ match
+ \\[\\']
+ name
+ constant.character.escape.php
+
+
+
+
+ begin
+ `(?=[^`]*?')
+ comment
+ Unclosed strings must be captured to avoid them eating the remainder of the PHP script
+ Sample case: $sql = "SELECT * FROM bar WHERE foo = '" . $variable . "'"
+ end
+ (?=')
+ name
+ string.quoted.other.backtick.unclosed.sql
+ patterns
+
+
+ match
+ \\[\\']
+ name
+ constant.character.escape.php
+
+
+
+
+ begin
+ "(?=[^"]*?')
+ comment
+ Unclosed strings must be captured to avoid them eating the remainder of the PHP script
+ Sample case: $sql = "SELECT * FROM bar WHERE foo = '" . $variable . "'"
+ end
+ (?=')
+ name
+ string.quoted.double.unclosed.sql
+ patterns
+
+
+ match
+ \\[\\']
+ name
+ constant.character.escape.php
+
+
+
+
+ begin
+ \\'
+ captures
+
+ 0
+
+ name
+ constant.character.escape.php
+
+
+ end
+ \\'
+ name
+ string.quoted.single.sql
+
+
+ match
+ \\[\\']
+ name
+ constant.character.escape.php
+
+
+ include
+ source.sql
+
+
+
+ string-backtick
+
+ begin
+ `
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.php
+
+
+ end
+ `
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.php
+
+
+ name
+ string.interpolated.php
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.php
+
+
+ include
+ #interpolation
+
+
+
+ string-double-quoted
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.php
+
+
+ comment
+ This contentName is just to allow the usage of “select scope” to select the string contents first, then the string with quotes
+ contentName
+ meta.string-contents.quoted.double.php
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.php
+
+
+ name
+ string.quoted.double.php
+ patterns
+
+
+ include
+ #interpolation
+
+
+
+ string-single-quoted
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.php
+
+
+ contentName
+ meta.string-contents.quoted.single.php
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.php
+
+
+ name
+ string.quoted.single.php
+ patterns
+
+
+ match
+ \\[\\']
+ name
+ constant.character.escape.php
+
+
+
+ strings
+
+ patterns
+
+
+ include
+ #regex-double-quoted
+
+
+ include
+ #sql-string-double-quoted
+
+
+ include
+ #string-double-quoted
+
+
+ include
+ #regex-single-quoted
+
+
+ include
+ #sql-string-single-quoted
+
+
+ include
+ #string-single-quoted
+
+
+
+ support
+
+ patterns
+
+
+ begin
+ (array)(\()
+ beginCaptures
+
+ 1
+
+ name
+ support.function.construct.php
+
+ 2
+
+ name
+ punctuation.definition.array.begin.php
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.array.end.php
+
+
+ name
+ meta.array.php
+ patterns
+
+
+ include
+ #language
+
+
+
+
+ match
+ (?i)\b(s(huffle|ort)|n(ext|at(sort|casesort))|c(o(unt|mpact)|urrent)|in_array|u(sort|ksort|asort)|prev|e(nd|xtract)|k(sort|ey|rsort)|a(sort|r(sort|ray_(s(hift|um|plice|earch|lice)|c(h(unk|ange_key_case)|o(unt_values|mbine))|intersect(_(u(key|assoc)|key|assoc))?|diff(_(u(key|assoc)|key|assoc))?|u(n(shift|ique)|intersect(_(uassoc|assoc))?|diff(_(uassoc|assoc))?)|p(op|ush|ad|roduct)|values|key(s|_exists)|f(il(ter|l(_keys)?)|lip)|walk(_recursive)?|r(e(duce|verse)|and)|m(ultisort|erge(_recursive)?|ap))))|r(sort|eset|ange)|m(in|ax))(?=\s*\()
+ name
+ support.function.array.php
+
+
+ match
+ (?i)\bassert(_options)?(?=\s*\()
+ name
+ support.function.assert.php
+
+
+ match
+ (?i)\bdom_attr_is_id(?=\s*\()
+ name
+ support.function.attr.php
+
+
+ match
+ (?i)\bbase64_(decode|encode)(?=\s*\()
+ name
+ support.function.base64.php
+
+
+ match
+ (?i)\b(highlight_(string|file)|s(ys_getloadavg|et_(include_path|magic_quotes_runtime)|leep)|c(on(stant|nection_(status|aborted))|all_user_(func(_array)?|method(_array)?))|time_(sleep_until|nanosleep)|i(s_uploaded_file|n(i_(set|restore|get(_all)?)|et_(ntop|pton))|p2long|gnore_user_abort|mport_request_variables)|u(sleep|nregister_tick_function)|error_(log|get_last)|p(hp_strip_whitespace|utenv|arse_ini_file|rint_r)|flush|long2ip|re(store_include_path|gister_(shutdown_function|tick_function))|get(servby(name|port)|opt|_(c(urrent_user|fg_var)|include_path|magic_quotes_(gpc|runtime))|protobyn(umber|ame)|env)|move_uploaded_file)(?=\s*\()
+ name
+ support.function.basic_functions.php
+
+
+ match
+ (?i)\bbc(s(cale|ub|qrt)|comp|div|pow(mod)?|add|m(od|ul))(?=\s*\()
+ name
+ support.function.bcmath.php
+
+
+ match
+ (?i)\bbirdstep_(c(o(nnect|mmit)|lose)|off_autocommit|exec|f(ieldn(um|ame)|etch|reeresult)|autocommit|r(ollback|esult))(?=\s*\()
+ name
+ support.function.birdstep.php
+
+
+ match
+ (?i)\bget_browser(?=\s*\()
+ name
+ support.function.browscap.php
+
+
+ match
+ (?i)\b(s(tr(nc(asecmp|mp)|c(asecmp|mp)|len)|et_e(rror_handler|xception_handler))|c(lass_exists|reate_function)|trigger_error|i(s_(subclass_of|a)|nterface_exists)|de(fine(d)?|bug_(print_backtrace|backtrace))|zend_version|property_exists|e(ach|rror_reporting|xtension_loaded)|func(tion_exists|_(num_args|get_arg(s)?))|leak|restore_e(rror_handler|xception_handler)|get_(class(_(vars|methods))?|included_files|de(clared_(classes|interfaces)|fined_(constants|vars|functions))|object_vars|extension_funcs|parent_class|loaded_extensions|resource_type)|method_exists)(?=\s*\()
+ name
+ support.function.builtin_functions.php
+
+
+ match
+ (?i)\bbz(compress|decompress|open|err(str|no|or)|read)(?=\s*\()
+ name
+ support.function.bz2.php
+
+
+ match
+ (?i)\b(jdtounix|unixtojd)(?=\s*\()
+ name
+ support.function.cal_unix.php
+
+
+ match
+ (?i)\b(cal_(to_jd|info|days_in_month|from_jd)|j(d(to(j(ulian|ewish)|french|gregorian)|dayofweek|monthname)|uliantojd|ewishtojd)|frenchtojd|gregoriantojd)(?=\s*\()
+ name
+ support.function.calendar.php
+
+
+ match
+ (?i)\bdom_characterdata_(substring_data|insert_data|delete_data|append_data|replace_data)(?=\s*\()
+ name
+ support.function.characterdata.php
+
+
+ match
+ (?i)\bcom_(create_guid|print_typeinfo|event_sink|load_typelib|get_active_object|message_pump)(?=\s*\()
+ name
+ support.function.com_com.php
+
+
+ match
+ (?i)\bvariant_(s(ub|et(_type)?)|n(ot|eg)|c(a(st|t)|mp)|i(nt|div|mp)|or|d(iv|ate_(to_timestamp|from_timestamp))|pow|eqv|fix|a(nd|dd|bs)|get_type|round|xor|m(od|ul))(?=\s*\()
+ name
+ support.function.com_variant.php
+
+
+ match
+ (?i)\bcrc32(?=\s*\()
+ name
+ support.function.crc32.php
+
+
+ match
+ (?i)\bcrypt(?=\s*\()
+ name
+ support.function.crypt.php
+
+
+ match
+ (?i)\bctype_(space|cntrl|digit|upper|p(unct|rint)|lower|al(num|pha)|graph|xdigit)(?=\s*\()
+ name
+ support.function.ctype.php
+
+
+ match
+ (?i)\bconvert_cyr_string(?=\s*\()
+ name
+ support.function.cyr_convert.php
+
+
+ match
+ (?i)\bstrptime(?=\s*\()
+ name
+ support.function.datetime.php
+
+
+ match
+ (?i)\bdba_(handlers|sync|nextkey|close|insert|delete|op(timize|en)|exists|popen|key_split|f(irstkey|etch)|list|replace)(?=\s*\()
+ name
+ support.function.dba.php
+
+
+ match
+ (?i)\bdbase_(num(fields|records)|c(lose|reate)|delete_record|open|pack|add_record|get_(header_info|record(_with_names)?)|replace_record)(?=\s*\()
+ name
+ support.function.dbase.php
+
+
+ match
+ (?i)\b(scandir|c(h(dir|root)|losedir)|dir|opendir|re(addir|winddir)|g(etcwd|lob))(?=\s*\()
+ name
+ support.function.dir.php
+
+
+ match
+ (?i)\bdl(?=\s*\()
+ name
+ support.function.dl.php
+
+
+ match
+ (?i)\b(dns_(check_record|get_(record|mx))|gethostby(name(l)?|addr))(?=\s*\()
+ name
+ support.function.dns.php
+
+
+ match
+ (?i)\bdom_document_(s(chema_validate(_file)?|ave(_html(_file)?|xml)?)|normalize_document|create_(c(datasection|omment)|text_node|document_fragment|processing_instruction|e(ntity_reference|lement(_ns)?)|attribute(_ns)?)|import_node|validate|load(_html(_file)?|xml)?|adopt_node|re(name_node|laxNG_validate_(file|xml))|get_element(s_by_tag_name(_ns)?|_by_id)|xinclude)(?=\s*\()
+ name
+ support.function.document.php
+
+
+ match
+ (?i)\bdom_domconfiguration_(set_parameter|can_set_parameter|get_parameter)(?=\s*\()
+ name
+ support.function.domconfiguration.php
+
+
+ match
+ (?i)\bdom_domerrorhandler_handle_error(?=\s*\()
+ name
+ support.function.domerrorhandler.php
+
+
+ match
+ (?i)\bdom_domimplementation_(has_feature|create_document(_type)?|get_feature)(?=\s*\()
+ name
+ support.function.domimplementation.php
+
+
+ match
+ (?i)\bdom_domimplementationlist_item(?=\s*\()
+ name
+ support.function.domimplementationlist.php
+
+
+ match
+ (?i)\bdom_domimplementationsource_get_domimplementation(s)?(?=\s*\()
+ name
+ support.function.domimplementationsource.php
+
+
+ match
+ (?i)\bdom_domstringlist_item(?=\s*\()
+ name
+ support.function.domstringlist.php
+
+
+ match
+ (?i)\beaster_da(ys|te)(?=\s*\()
+ name
+ support.function.easter.php
+
+
+ match
+ (?i)\bdom_element_(has_attribute(_ns)?|set_(id_attribute(_n(s|ode))?|attribute(_n(s|ode(_ns)?))?)|remove_attribute(_n(s|ode))?|get_(elements_by_tag_name(_ns)?|attribute(_n(s|ode(_ns)?))?))(?=\s*\()
+ name
+ support.function.element.php
+
+
+ match
+ (?i)\b(s(hell_exec|ystem)|p(assthru|roc_nice)|e(scapeshell(cmd|arg)|xec))(?=\s*\()
+ name
+ support.function.exec.php
+
+
+ match
+ (?i)\bexif_(imagetype|t(humbnail|agname)|read_data)(?=\s*\()
+ name
+ support.function.exif.php
+
+
+ match
+ (?i)\bfdf_(header|s(et_(s(tatus|ubmit_form_action)|target_frame|o(n_import_javascript|pt)|javascript_action|encoding|v(ersion|alue)|f(ile|lags)|ap)|ave(_string)?)|next_field_name|c(lose|reate)|open(_string)?|e(num_values|rr(no|or))|add_(template|doc_javascript)|remove_item|get_(status|opt|encoding|v(ersion|alue)|f(ile|lags)|a(ttachment|p)))(?=\s*\()
+ name
+ support.function.fdf.php
+
+
+ match
+ (?i)\b(sys_get_temp_dir|copy|t(empnam|mpfile)|u(nlink|mask)|p(close|open)|f(s(canf|tat|eek)|nmatch|close|t(ell|runcate)|ile(_(put_contents|get_contents))?|open|p(utcsv|assthru)|eof|flush|write|lock|read|get(s(s)?|c(sv)?))|r(e(name|a(dfile|lpath)|wind)|mdir)|get_meta_tags|mkdir)(?=\s*\()
+ name
+ support.function.file.php
+
+
+ match
+ (?i)\b(stat|c(h(own|grp|mod)|learstatcache)|is_(dir|executable|file|link|writable|readable)|touch|disk_(total_space|free_space)|file(size|ctime|type|inode|owner|_exists|perms|atime|group|mtime)|l(stat|chgrp))(?=\s*\()
+ name
+ support.function.filestat.php
+
+
+ match
+ (?i)\bfilter_(has_var|input(_array)?|var(_array)?)(?=\s*\()
+ name
+ support.function.filter.php
+
+
+ match
+ (?i)\b(sprintf|printf|v(sprintf|printf|fprintf)|fprintf)(?=\s*\()
+ name
+ support.function.formatted_print.php
+
+
+ match
+ (?i)\b(pfsockopen|fsockopen)(?=\s*\()
+ name
+ support.function.fsock.php
+
+
+ match
+ (?i)\bftok(?=\s*\()
+ name
+ support.function.ftok.php
+
+
+ match
+ (?i)\b(image(s(y|tring(up)?|et(style|t(hickness|ile)|pixel|brush)|avealpha|x)|c(har(up)?|o(nvolution|py(res(ized|ampled)|merge(gray)?)?|lor(s(total|et|forindex)|closest(hwb|alpha)?|transparent|deallocate|exact(alpha)?|a(t|llocate(alpha)?)|resolve(alpha)?|match))|reate(truecolor|from(string|jpeg|png|wbmp|g(if|d(2(part)?)?)|x(pm|bm)))?)|2wbmp|t(ypes|tf(text|bbox)|ruecolortopalette)|i(struecolor|nterlace)|d(estroy|ashedline)|jpeg|ellipse|p(s(slantfont|copyfont|text|e(ncodefont|xtendfont)|freefont|loadfont|bbox)|ng|olygon|alettecopy)|f(t(text|bbox)|il(ter|l(toborder|ed(polygon|ellipse|arc|rectangle))?)|ont(height|width))|wbmp|a(ntialias|lphablending|rc)|l(ine|oadfont|ayereffect)|r(otate|ectangle)|g(if|d(2)?|ammacorrect|rab(screen|window))|xbm)|jpeg2wbmp|png2wbmp|gd_info)(?=\s*\()
+ name
+ support.function.gd.php
+
+
+ match
+ (?i)\b(ngettext|textdomain|d(ngettext|c(ngettext|gettext)|gettext)|gettext|bind(textdomain|_textdomain_codeset))(?=\s*\()
+ name
+ support.function.gettext.php
+
+
+ match
+ (?i)\bgmp_(hamdist|s(can(1|0)|ign|trval|ub|etbit|qrt(rem)?)|c(om|lrbit|mp)|ne(g|xtprime)|in(tval|it|vert)|or|div(_(q(r)?|r)|exact)|jacobi|p(o(pcount|w(m)?)|erfect_square|rob_prime)|fact|legendre|a(nd|dd|bs)|random|gcd(ext)?|xor|m(od|ul))(?=\s*\()
+ name
+ support.function.gmp.php
+
+
+ match
+ (?i)\bhash(_(hmac(_file)?|init|update(_(stream|file))?|fi(nal|le)|algos))?(?=\s*\()
+ name
+ support.function.hash.php
+
+
+ match
+ (?i)\bmd5(_file)?(?=\s*\()
+ name
+ support.function.hash_md.php
+
+
+ match
+ (?i)\bsha1(_file)?(?=\s*\()
+ name
+ support.function.hash_sha.php
+
+
+ match
+ (?i)\b(set(cookie|rawcookie)|header(s_(sent|list))?)(?=\s*\()
+ name
+ support.function.head.php
+
+
+ match
+ (?i)\b(html(specialchars(_decode)?|_entity_decode|entities)|get_html_translation_table)(?=\s*\()
+ name
+ support.function.html.php
+
+
+ match
+ (?i)\bhttp_build_query(?=\s*\()
+ name
+ support.function.http.php
+
+
+ match
+ (?i)\bibase_blob_(c(ancel|lose|reate)|i(nfo|mport)|open|echo|add|get)(?=\s*\()
+ name
+ support.function.ibase_blobs.php
+
+
+ match
+ (?i)\bibase_(set_event_handler|free_event_handler|wait_event)(?=\s*\()
+ name
+ support.function.ibase_events.php
+
+
+ match
+ (?i)\bibase_(n(um_(params|fields|rows)|ame_result)|execute|p(aram_info|repare)|f(ield_info|etch_(object|assoc|row)|ree_(query|result))|query|affected_rows)(?=\s*\()
+ name
+ support.function.ibase_query.php
+
+
+ match
+ (?i)\bibase_(serv(ice_(detach|attach)|er_info)|d(elete_user|b_info)|add_user|restore|backup|m(odify_user|aintain_db))(?=\s*\()
+ name
+ support.function.ibase_service.php
+
+
+ match
+ (?i)\b(iconv(_(s(tr(pos|len|rpos)|ubstr|et_encoding)|get_encoding|mime_(decode(_headers)?|encode)))?|ob_iconv_handler)(?=\s*\()
+ name
+ support.function.iconv.php
+
+
+ match
+ (?i)\b(image_type_to_(extension|mime_type)|getimagesize)(?=\s*\()
+ name
+ support.function.image.php
+
+
+ match
+ (?i)\b(zend_logo_guid|php(credits|info|_(sapi_name|ini_scanned_files|uname|egg_logo_guid|logo_guid|real_logo_guid)|version))(?=\s*\()
+ name
+ support.function.info.php
+
+
+ match
+ (?i)\bibase_(c(o(nnect|mmit(_ret)?)|lose)|trans|drop_db|pconnect|err(code|msg)|gen_id|rollback(_ret)?)(?=\s*\()
+ name
+ support.function.interbase.php
+
+
+ match
+ (?i)\bcurl_(setopt(_array)?|c(opy_handle|lose)|init|e(rr(no|or)|xec)|version|getinfo)(?=\s*\()
+ name
+ support.function.interface.php
+
+
+ match
+ (?i)\biptc(parse|embed)(?=\s*\()
+ name
+ support.function.iptc.php
+
+
+ match
+ (?i)\bjson_(decode|encode)(?=\s*\()
+ name
+ support.function.json.php
+
+
+ match
+ (?i)\blcg_value(?=\s*\()
+ name
+ support.function.lcg.php
+
+
+ match
+ (?i)\bldap_(s(tart_tls|ort|e(t_(option|rebind_proc)|arch)|asl_bind)|next_(entry|attribute|reference)|co(nnect|unt_entries|mpare)|t61_to_8859|8859_to_t61|d(n2ufn|elete)|unbind|parse_re(sult|ference)|e(rr(no|2str|or)|xplode_dn)|f(irst_(entry|attribute|reference)|ree_result)|add|list|get_(option|dn|entries|values_len|attributes)|re(name|ad)|mod_(del|add|replace)|bind)(?=\s*\()
+ name
+ support.function.ldap.php
+
+
+ match
+ (?i)\blevenshtein(?=\s*\()
+ name
+ support.function.levenshtein.php
+
+
+ match
+ (?i)\blibxml_(set_streams_context|clear_errors|use_internal_errors|get_(errors|last_error))(?=\s*\()
+ name
+ support.function.libxml.php
+
+
+ match
+ (?i)\b(symlink|link(info)?|readlink)(?=\s*\()
+ name
+ support.function.link.php
+
+
+ match
+ (?i)\b(ezmlm_hash|mail)(?=\s*\()
+ name
+ support.function.mail.php
+
+
+ match
+ (?i)\bset_time_limit(?=\s*\()
+ name
+ support.function.main.php
+
+
+ match
+ (?i)\b(h(ypot|exdec)|s(in(h)?|qrt)|number_format|c(os(h)?|eil)|is_(nan|infinite|finite)|tan(h)?|octdec|de(c(hex|oct|bin)|g2rad)|exp(m1)?|p(i|ow)|f(loor|mod)|log(1(p|0))?|a(sin(h)?|cos(h)?|tan(h|2)?|bs)|r(ound|ad2deg)|b(indec|ase_convert))(?=\s*\()
+ name
+ support.function.math.php
+
+
+ match
+ (?i)\bmb_(s(tr(str|cut|to(upper|lower)|i(str|pos|mwidth)|pos|width|len|r(chr|i(chr|pos)|pos))|ubst(itute_character|r(_count)?)|end_mail)|http_(input|output)|c(heck_encoding|onvert_(case|encoding|variables|kana))|internal_encoding|output_handler|de(code_(numericentity|mimeheader)|tect_(order|encoding))|encode_(numericentity|mimeheader)|p(arse_str|referred_mime_name)|l(ist_(encodings(_alias_names)?|mime_names)|anguage)|get_info)(?=\s*\()
+ name
+ support.function.mbstring.php
+
+
+ match
+ (?i)\bm(crypt_(c(fb|reate_iv|bc)|ofb|decrypt|e(cb|nc(_(self_test|is_block_(algorithm(_mode)?|mode)|get_(supported_key_sizes|iv_size|key_size|algorithms_name|modes_name|block_size))|rypt))|list_(algorithms|modes)|ge(neric(_(init|deinit))?|t_(cipher_name|iv_size|key_size|block_size))|module_(self_test|close|is_block_(algorithm(_mode)?|mode)|open|get_(supported_key_sizes|algo_(key_size|block_size))))|decrypt_generic)(?=\s*\()
+ name
+ support.function.mcrypt.php
+
+
+ match
+ (?i)\bmd5(_file)?(?=\s*\()
+ name
+ support.function.md5.php
+
+
+ match
+ (?i)\bmetaphone(?=\s*\()
+ name
+ support.function.metaphone.php
+
+
+ match
+ (?i)\bmhash(_(count|keygen_s2k|get_(hash_name|block_size)))?(?=\s*\()
+ name
+ support.function.mhash.php
+
+
+ match
+ (?i)\b(get(timeofday|rusage)|microtime)(?=\s*\()
+ name
+ support.function.microtime.php
+
+
+ match
+ (?i)\bmime_content_type(?=\s*\()
+ name
+ support.function.mime_magic.php
+
+
+ match
+ (?i)\b(swf(prebuiltclip_init|videostream_init)|ming_(set(scale|cubicthreshold)|use(swfversion|constants)|keypress))(?=\s*\()
+ name
+ support.function.ming.php
+
+
+ match
+ (?i)\bcurl_multi_(select|close|in(it|fo_read)|exec|add_handle|getcontent|remove_handle)(?=\s*\()
+ name
+ support.function.multi.php
+
+
+ match
+ (?i)\bmysqli_(s(sl_set|t(ore_result|at|mt_(s(tore_result|end_long_data|qlstate)|num_rows|close|in(sert_id|it)|data_seek|p(aram_count|repare)|e(rr(no|or)|xecute)|f(ield_count|etch|ree_result)|a(ttr_(set|get)|ffected_rows)|res(ult_metadata|et)|bind_(param|result)))|e(t_local_infile_(handler|default)|lect_db)|qlstate)|n(um_(fields|rows)|ext_result)|c(ha(nge_user|racter_set_name)|ommit|lose)|thread_(safe|id)|in(sert_id|it|fo)|options|d(ump_debug_info|ebug|ata_seek)|use_result|p(ing|repare)|err(no|or)|kill|f(ield_(seek|count|tell)|etch_(field(s|_direct)?|lengths|row)|ree_result)|warning_count|a(utocommit|ffected_rows)|r(ollback|eal_(connect|escape_string|query))|get_(server_(info|version)|host_info|client_(info|version)|proto_info)|more_results)(?=\s*\()
+ name
+ support.function.mysqli_api.php
+
+
+ match
+ (?i)\bmysqli_embedded_server_(start|end)(?=\s*\()
+ name
+ support.function.mysqli_embedded.php
+
+
+ match
+ (?i)\bmysqli_(s(tmt_get_warnings|et_charset)|connect(_err(no|or))?|query|fetch_(object|a(ssoc|rray))|get_(charset|warnings)|multi_query)(?=\s*\()
+ name
+ support.function.mysqli_nonapi.php
+
+
+ match
+ (?i)\bmysqli_(s(end_query|lave_query)|disable_r(pl_parse|eads_from_master)|enable_r(pl_parse|eads_from_master)|rpl_(p(arse_enabled|robe)|query_type)|master_query)(?=\s*\()
+ name
+ support.function.mysqli_repl.php
+
+
+ match
+ (?i)\bmysqli_report(?=\s*\()
+ name
+ support.function.mysqli_report.php
+
+
+ match
+ (?i)\bdom_namednodemap_(set_named_item(_ns)?|item|remove_named_item(_ns)?|get_named_item(_ns)?)(?=\s*\()
+ name
+ support.function.namednodemap.php
+
+
+ match
+ (?i)\bdom_namelist_get_name(space_uri)?(?=\s*\()
+ name
+ support.function.namelist.php
+
+
+ match
+ (?i)\bncurses_(s(how_panel|cr(_(set|init|dump|restore)|l)|ta(nd(out|end)|rt_color)|lk_(set|noutrefresh|c(olor|lear)|init|touch|attr(set|o(n|ff))?|re(store|fresh))|avetty)|h(ide_panel|line|a(s_(colors|i(c|l)|key)|lfdelay))|n(o(nl|cbreak|echo|qiflush|raw)|ew(_panel|pad|win)|apms|l)|c(olor_(set|content)|urs_set|l(ear|rto(eol|bot))|an_change_color|break)|t(ypeahead|imeout|op_panel|erm(name|attrs))|i(sendwin|n(s(str|ch|tr|delln|ertln)|ch|it(_(color|pair))?))|d(oupdate|e(f(ine_key|_(shell_mode|prog_mode))|l(ch|_panel|eteln|ay_output|win)))|u(se_(default_colors|e(nv|xtended_names))|nget(ch|mouse)|pdate_panels)|p(noutrefresh|utp|a(nel_(window|above|below)|ir_content)|refresh)|e(cho(char)?|nd|rase(char)?)|v(idattr|line)|k(illchar|ey(ok|pad))|qiflush|f(ilter|l(ushinp|ash))|longname|w(stand(out|end)|hline|noutrefresh|c(olor_set|lear)|erase|vline|a(ttr(set|o(n|ff))|dd(str|ch))|getch|refresh|mo(use_trafo|ve)|border)|a(ssume_default_colors|ttr(set|o(n|ff))|dd(str|nstr|ch(str|nstr)?))|r(e(set(ty|_(shell_mode|prog_mode))|place_panel|fresh)|aw)|get(yx|ch|m(ouse|axyx))|b(o(ttom_panel|rder)|eep|kgd(set)?|audrate)|m(o(use(interval|_trafo|mask)|ve(_panel)?)|eta|v(hline|cur|inch|delch|vline|waddstr|add(str|nstr|ch(str|nstr)?)|getch)))(?=\s*\()
+ name
+ support.function.ncurses_functions.php
+
+
+ match
+ (?i)\bdom_node_(set_user_data|has_(child_nodes|attributes)|normalize|c(ompare_document_position|lone_node)|i(s_(s(upported|ame_node)|default_namespace|equal_node)|nsert_before)|lookup_(namespace_uri|prefix)|append_child|get_(user_data|feature)|re(place_child|move_child))(?=\s*\()
+ name
+ support.function.node.php
+
+
+ match
+ (?i)\bdom_nodelist_item(?=\s*\()
+ name
+ support.function.nodelist.php
+
+
+ match
+ (?i)\bnsapi_(virtual|re(sponse_headers|quest_headers))(?=\s*\()
+ name
+ support.function.nsapi.php
+
+
+ match
+ (?i)\boci(setbufferinglob|_(s(tatement_type|e(t_prefetch|rver_version))|c(o(nnect|llection_(size|trim|element_(assign|get)|a(ssign|ppend)|max)|mmit)|lose|ancel)|n(um_(fields|rows)|ew_(c(o(nnect|llection)|ursor)|descriptor))|internal_debug|define_by_name|p(connect|a(ssword_change|rse))|e(rror|xecute)|f(ield_(s(cale|ize)|name|is_null|type(_raw)?|precision)|etch(_(object|a(ssoc|ll|rray)|row))?|ree_(statement|collection|descriptor))|lob_(s(ize|eek|ave)|c(opy|lose)|t(ell|runcate)|i(s_equal|mport)|e(of|rase|xport)|flush|append|write(_temporary)?|load|re(wind|ad))|r(ollback|esult)|bind_(array_by_name|by_name))|fetchinto|getbufferinglob)(?=\s*\()
+ name
+ support.function.oci8_interface.php
+
+
+ match
+ (?i)\bopenssl_(s(ign|eal)|csr_(sign|new|export(_to_file)?|get_(subject|public_key))|open|error_string|p(ublic_(decrypt|encrypt)|k(cs(12_(export(_to_file)?|read)|7_(sign|decrypt|encrypt|verify))|ey_(new|export(_to_file)?|free|get_(details|p(ublic|rivate))))|rivate_(decrypt|encrypt))|verify|x509_(check(_private_key|purpose)|parse|export(_to_file)?|free|read))(?=\s*\()
+ name
+ support.function.openssl.php
+
+
+ match
+ (?i)\bo(utput_(add_rewrite_var|reset_rewrite_vars)|b_(start|clean|implicit_flush|end_(clean|flush)|flush|list_handlers|get_(status|c(ontents|lean)|flush|le(ngth|vel))))(?=\s*\()
+ name
+ support.function.output.php
+
+
+ match
+ (?i)\b(unpack|pack)(?=\s*\()
+ name
+ support.function.pack.php
+
+
+ match
+ (?i)\bget(lastmod|my(inode|uid|pid|gid))(?=\s*\()
+ name
+ support.function.pageinfo.php
+
+
+ match
+ (?i)\bpcntl_(s(ignal|etpriority)|exec|fork|w(stopsig|termsig|if(s(ignaled|topped)|exited)|exitstatus|ait(pid)?)|alarm|getpriority)(?=\s*\()
+ name
+ support.function.pcntl.php
+
+
+ match
+ (?i)\bpdo_drivers(?=\s*\()
+ name
+ support.function.pdo.php
+
+
+ match
+ (?i)\bpdo_drivers(?=\s*\()
+ name
+ support.function.pdo_dbh.php
+
+
+ match
+ (?i)\bpg_(se(nd_(execute|prepare|query(_params)?)|t_(client_encoding|error_verbosity)|lect)|host|num_(fields|rows)|c(o(n(nect(ion_(status|reset|busy))?|vert)|py_(to|from))|ancel_query|l(ient_encoding|ose))|insert|t(ty|ra(nsaction_status|ce))|options|d(elete|bname)|u(n(trace|escape_bytea)|pdate)|e(scape_(string|bytea)|nd_copy|xecute)|p(connect|ing|ort|ut_line|arameter_status|repare)|version|f(ield_(size|n(um|ame)|is_null|t(ype(_oid)?|able)|prtlen)|etch_(object|a(ssoc|ll(_columns)?|rray)|r(ow|esult))|ree_result)|query(_params)?|affected_rows|l(o_(seek|c(lose|reate)|tell|import|open|unlink|export|write|read(_all)?)|ast_(notice|oid|error))|get_(notify|pid|result)|result_(s(tatus|eek)|error(_field)?)|meta_data)(?=\s*\()
+ name
+ support.function.pgsql.php
+
+
+ match
+ (?i)\b(virtual|apache_(setenv|note|child_terminate|lookup_uri|get_(version|modules)|re(s(et_timeout|ponse_headers)|quest_(s(ome_auth_required|ub_req_(lookup_(uri|file)|method_uri)|e(t_(etag|last_modified)|rver_port)|atisfies)|headers(_(in|out))?|is_initial_req|discard_request_body|update_mtime|err_headers_out|log_error|auth_(name|type)|r(un|emote_host)|meets_conditions)))|getallheaders)(?=\s*\()
+ name
+ support.function.php_apache.php
+
+
+ match
+ (?i)\b(str(totime|ftime)|checkdate|time(zone_(name_(from_abbr|get)|identifiers_list|transitions_get|o(pen|ffset_get)|abbreviations_list))?|idate|date(_(sun(set|_info|rise)|create|isodate_set|time(zone_(set|get)|_set)|d(efault_timezone_(set|get)|ate_set)|offset_get|parse|format|modify))?|localtime|g(etdate|m(strftime|date|mktime))|mktime)(?=\s*\()
+ name
+ support.function.php_date.php
+
+
+ match
+ (?i)\bdom_import_simplexml(?=\s*\()
+ name
+ support.function.php_dom.php
+
+
+ match
+ (?i)\bfbsql_(hostname|s(t(op_db|art_db)|e(t_(characterset|transaction|password|lob_mode)|lect_db))|n(um_(fields|rows)|ext_result)|c(hange_user|o(nnect|mmit)|lo(se|b_size)|reate_(clob|db|blob))|table_name|insert_id|d(ata(_seek|base(_password)?)|rop_db|b_(status|query))|username|err(no|or)|p(connect|assword)|f(ield_(seek|name|t(ype|able)|flags|len)|etch_(object|field|lengths|a(ssoc|rray)|row)|ree_result)|query|warnings|list_(tables|dbs|fields)|a(utocommit|ffected_rows)|get_autostart_info|r(o(ws_fetched|llback)|e(sult|ad_(clob|blob)))|blob_size)(?=\s*\()
+ name
+ support.function.php_fbsql.php
+
+
+ match
+ (?i)\bftp_(s(sl_connect|ystype|i(te|ze)|et_option)|n(list|b_(continue|put|f(put|get)|get))|c(h(dir|mod)|dup|onnect|lose)|delete|exec|p(ut|asv|wd)|f(put|get)|alloc|login|get(_option)?|r(ename|aw(list)?|mdir)|m(dtm|kdir))(?=\s*\()
+ name
+ support.function.php_ftp.php
+
+
+ match
+ (?i)\b(virtual|apache_(setenv|note|get(_(version|modules)|env)|response_headers)|getallheaders)(?=\s*\()
+ name
+ support.function.php_functions.php
+
+
+ match
+ (?i)\bimap_(header(s|info)|s(can|tatus|ort|ubscribe|e(t(_quota|flag_full|acl)|arch)|avebody)|c(heck|l(ose|earflag_full)|reatemailbox)|num_(recent|msg)|t(hread|imeout)|8bit|delete(mailbox)?|open|u(n(subscribe|delete)|id|tf(7_(decode|encode)|8))|e(rrors|xpunge)|ping|qprint|fetch(header|structure|_overview|body)|l(sub|ist|ast_error)|a(ppend|lerts)|get(subscribed|_quota(root)?|acl|mailboxes)|r(e(namemailbox|open)|fc822_(parse_(headers|adrlist)|write_address))|m(sgno|ime_header_decode|ail(_(co(py|mpose)|move)|boxmsginfo)?)|b(inary|ody(struct)?|ase64))(?=\s*\()
+ name
+ support.function.php_imap.php
+
+
+ match
+ (?i)\bmb_(split|ereg(i(_replace)?|_(search(_(setpos|init|pos|get(pos|regs)|regs))?|replace|match))?|regex_(set_options|encoding))(?=\s*\()
+ name
+ support.function.php_mbregex.php
+
+
+ match
+ (?i)\bsmfi_(set(timeout|flags|reply)|chgheader|delrcpt|add(header|rcpt)|replacebody|getsymval)(?=\s*\()
+ name
+ support.function.php_milter.php
+
+
+ match
+ (?i)\bmsql_(select_db|num_(fields|rows)|c(onnect|lose|reate_db)|d(ata_seek|rop_db|b_query)|error|pconnect|f(ield_(seek|name|t(ype|able)|flags|len)|etch_(object|field|array|row)|ree_result)|query|affected_rows|list_(tables|dbs|fields)|result)(?=\s*\()
+ name
+ support.function.php_msql.php
+
+
+ match
+ (?i)\bmssql_(select_db|n(um_(fields|rows)|ext_result)|c(onnect|lose)|init|data_seek|execute|pconnect|query|f(ield_(seek|name|type|length)|etch_(object|field|a(ssoc|rray)|row|batch)|ree_(statement|result))|g(uid_string|et_last_message)|r(ows_affected|esult)|bind|min_(error_severity|message_severity))(?=\s*\()
+ name
+ support.function.php_mssql.php
+
+
+ match
+ (?i)\bmysql_(s(tat|e(t_charset|lect_db))|num_(fields|rows)|c(onnect|l(ient_encoding|ose)|reate_db)|thread_id|in(sert_id|fo)|d(ata_seek|rop_db|b_query)|unbuffered_query|e(scape_string|rr(no|or))|p(connect|ing)|f(ield_(seek|name|t(ype|able)|flags|len)|etch_(object|field|lengths|a(ssoc|rray)|row)|ree_result)|query|affected_rows|list_(tables|dbs|processes|fields)|re(sult|al_escape_string)|get_(server_info|host_info|client_info|proto_info))(?=\s*\()
+ name
+ support.function.php_mysql.php
+
+
+ match
+ (?i)\b(solid_fetch_prev|odbc_(s(tatistics|pecialcolumns|etoption)|n(um_(fields|rows)|ext_result)|c(o(nnect|lumn(s|privileges)|mmit)|ursor|lose(_all)?)|table(s|privileges)|data_source|e(rror(msg)?|xec(ute)?)|p(connect|r(imarykeys|ocedure(s|columns)|epare))|f(ield_(scale|n(um|ame)|type|len)|oreignkeys|etch_(into|object|array|row)|ree_result)|autocommit|longreadlen|gettypeinfo|r(ollback|esult(_all)?)|binmode))(?=\s*\()
+ name
+ support.function.php_odbc.php
+
+
+ match
+ (?i)\bpreg_(split|quote|last_error|grep|replace(_callback)?|match(_all)?)(?=\s*\()
+ name
+ support.function.php_pcre.php
+
+
+ match
+ (?i)\b(spl_(classes|object_hash|autoload(_(call|unregister|extensions|functions|register))?)|class_(implements|parents))(?=\s*\()
+ name
+ support.function.php_spl.php
+
+
+ match
+ (?i)\bsybase_(se(t_message_handler|lect_db)|num_(fields|rows)|c(onnect|lose)|d(eadlock_retry_count|ata_seek)|unbuffered_query|pconnect|f(ield_seek|etch_(object|field|a(ssoc|rray)|row)|ree_result)|query|affected_rows|result|get_last_message|min_(server_severity|client_severity))(?=\s*\()
+ name
+ support.function.php_sybase_ct.php
+
+
+ match
+ (?i)\bsybase_(select_db|num_(fields|rows)|c(onnect|lose)|data_seek|pconnect|f(ield_seek|etch_(object|field|array|row)|ree_result)|query|affected_rows|result|get_last_message|min_(error_severity|message_severity))(?=\s*\()
+ name
+ support.function.php_sybase_db.php
+
+
+ match
+ (?i)\bxmlwriter_(s(tart_(c(omment|data)|d(td(_(e(ntity|lement)|attlist))?|ocument)|pi|element(_ns)?|attribute(_ns)?)|et_indent(_string)?)|text|o(utput_memory|pen_(uri|memory))|end_(c(omment|data)|d(td(_(e(ntity|lement)|attlist))?|ocument)|pi|element|attribute)|f(ull_end_element|lush)|write_(c(omment|data)|dtd(_(e(ntity|lement)|attlist))?|pi|element(_ns)?|attribute(_ns)?|raw))(?=\s*\()
+ name
+ support.function.php_xmlwriter.php
+
+
+ match
+ (?i)\b(s(tat(Name|Index)|et(Comment(Name|Index)|ArchiveComment))|c(lose|reateEmptyDir)|delete(Name|Index)|open|zip_(close|open|entry_(name|c(ompress(ionmethod|edsize)|lose)|open|filesize|read)|read)|unchange(Name|Index|All)|locateName|addF(ile|romString)|rename(Name|Index)|get(Stream|Comment(Name|Index)|NameIndex|From(Name|Index)|ArchiveComment))(?=\s*\()
+ name
+ support.function.php_zip.php
+
+
+ match
+ (?i)\bposix_(s(trerror|et(sid|uid|pgid|e(uid|gid)|gid))|ctermid|i(satty|nitgroups)|t(tyname|imes)|uname|kill|access|get(sid|cwd|_last_error|uid|e(uid|gid)|p(id|pid|w(nam|uid)|g(id|rp))|login|rlimit|g(id|r(nam|oups|gid)))|mk(nod|fifo))(?=\s*\()
+ name
+ support.function.posix.php
+
+
+ match
+ (?i)\bproc_(close|terminate|open|get_status)(?=\s*\()
+ name
+ support.function.proc_open.php
+
+
+ match
+ (?i)\bpspell_(s(tore_replacement|uggest|ave_wordlist)|c(heck|onfig_(save_repl|create|ignore|d(ict_dir|ata_dir)|personal|r(untogether|epl)|mode)|lear_session)|new(_(config|personal))?|add_to_(session|personal))(?=\s*\()
+ name
+ support.function.pspell.php
+
+
+ match
+ (?i)\bquoted_printable_decode(?=\s*\()
+ name
+ support.function.quot_print.php
+
+
+ match
+ (?i)\b(srand|getrandmax|rand|mt_(srand|getrandmax|rand))(?=\s*\()
+ name
+ support.function.rand.php
+
+
+ match
+ (?i)\breadline(_(c(ompletion_function|allback_(handler_(install|remove)|read_char)|lear_history)|info|on_new_line|write_history|list_history|add_history|re(display|ad_history)))?(?=\s*\()
+ name
+ support.function.readline.php
+
+
+ match
+ (?i)\brecode_(string|file)(?=\s*\()
+ name
+ support.function.recode.php
+
+
+ match
+ (?i)\b(s(plit(i)?|ql_regcase)|ereg(i(_replace)?|_replace)?)(?=\s*\()
+ name
+ support.function.reg.php
+
+
+ match
+ (?i)\bsession_(s(tart|et_(save_handler|cookie_params)|ave_path)|cache_(expire|limiter)|name|i(s_registered|d)|de(stroy|code)|un(set|register)|encode|write_close|reg(ister|enerate_id)|get_cookie_params|module_name)(?=\s*\()
+ name
+ support.function.session.php
+
+
+ match
+ (?i)\bsha1(_file)?(?=\s*\()
+ name
+ support.function.sha1.php
+
+
+ match
+ (?i)\bshmop_(size|close|delete|open|write|read)(?=\s*\()
+ name
+ support.function.shmop.php
+
+
+ match
+ (?i)\bsimplexml_(import_dom|load_(string|file))(?=\s*\()
+ name
+ support.function.simplexml.php
+
+
+ match
+ (?i)\bconfirm_extname_compiled(?=\s*\()
+ name
+ support.function.skeleton.php
+
+
+ match
+ (?i)\b(snmp(set|2_(set|walk|real_walk|get(next)?)|3_(set|walk|real_walk|get(next)?)|_(set_(oid_output_format|enum_print|valueretrieval|quick_print)|read_mib|get_(valueretrieval|quick_print))|walk|realwalk|get(next)?)|php_snmpv3)(?=\s*\()
+ name
+ support.function.snmp.php
+
+
+ match
+ (?i)\bsocket_(s(hutdown|trerror|e(nd(to)?|t_(nonblock|option|block)|lect))|c(onnect|l(ose|ear_error)|reate(_(pair|listen))?)|write|l(isten|ast_error)|accept|get(sockname|_option|peername)|re(cv(from)?|ad)|bind)(?=\s*\()
+ name
+ support.function.sockets.php
+
+
+ match
+ (?i)\bsoundex(?=\s*\()
+ name
+ support.function.soundex.php
+
+
+ match
+ (?i)\biterator_(count|to_array|apply)(?=\s*\()
+ name
+ support.function.spl_iterators.php
+
+
+ match
+ (?i)\bsqlite_(has_prev|s(ingle_query|eek)|n(um_(fields|rows)|ext)|c(hanges|olumn|urrent|lose|reate_(function|aggregate))|open|u(nbuffered_query|df_(decode_binary|encode_binary))|e(scape_string|rror_string|xec)|p(open|rev)|key|valid|query|f(ield_name|etch_(single|column_types|object|a(ll|rray))|actory)|l(ib(encoding|version)|ast_(insert_rowid|error))|array_query|rewind|busy_timeout)(?=\s*\()
+ name
+ support.function.sqlite.php
+
+
+ match
+ (?i)\bstream_(s(ocket_(s(hutdown|e(ndto|rver))|client|enable_crypto|pair|accept|recvfrom|get_name)|e(t_(timeout|write_buffer|blocking)|lect))|co(ntext_(set_(option|params)|create|get_(default|options))|py_to_stream)|filter_(prepend|append|remove)|get_(contents|transports|line|wrappers|meta_data))(?=\s*\()
+ name
+ support.function.streamsfuncs.php
+
+
+ match
+ (?i)\b(hebrev(c)?|s(scanf|imilar_text|tr(s(tr|pn)|natc(asecmp|mp)|c(hr|spn|oll)|i(str|p(slashes|cslashes|os|_tags))|t(o(upper|k|lower)|r)|_(s(huffle|plit)|ireplace|pad|word_count|r(ot13|ep(eat|lace)))|p(os|brk)|r(chr|ipos|ev|pos))|ubstr(_(co(unt|mpare)|replace))?|etlocale)|c(h(unk_split|r)|ount_chars)|nl(2br|_langinfo)|implode|trim|ord|dirname|uc(first|words)|join|pa(thinfo|rse_str)|explode|quotemeta|add(slashes|cslashes)|wordwrap|l(trim|ocaleconv)|rtrim|money_format|b(in2hex|asename))(?=\s*\()
+ name
+ support.function.string.php
+
+
+ match
+ (?i)\bdom_string_extend_find_offset(16|32)(?=\s*\()
+ name
+ support.function.string_extend.php
+
+
+ match
+ (?i)\b(syslog|closelog|openlog|define_syslog_variables)(?=\s*\()
+ name
+ support.function.syslog.php
+
+
+ match
+ (?i)\bmsg_(s(tat_queue|e(nd|t_queue))|re(ceive|move_queue)|get_queue)(?=\s*\()
+ name
+ support.function.sysvmsg.php
+
+
+ match
+ (?i)\bsem_(acquire|re(lease|move)|get)(?=\s*\()
+ name
+ support.function.sysvsem.php
+
+
+ match
+ (?i)\bshm_(detach|put_var|attach|get_var|remove(_var)?)(?=\s*\()
+ name
+ support.function.sysvshm.php
+
+
+ match
+ (?i)\bdom_text_(split_text|is_whitespace_in_element_content|replace_whole_text)(?=\s*\()
+ name
+ support.function.text.php
+
+
+ match
+ (?i)\btidy_(c(onfig_count|lean_repair)|is_x(html|ml)|diagnose|error_count|parse_(string|file)|access_count|warning_count|repair_(string|file)|get(opt|_(h(tml(_ver)?|ead)|status|config|o(utput|pt_doc)|error_buffer|r(oot|elease)|body)))(?=\s*\()
+ name
+ support.function.tidy.php
+
+
+ match
+ (?i)\btoken_(name|get_all)(?=\s*\()
+ name
+ support.function.tokenizer.php
+
+
+ match
+ (?i)\b(s(trval|ettype)|i(s_(s(calar|tring)|callable|nu(ll|meric)|object|float|array|long|resource|bool)|ntval)|floatval|gettype)(?=\s*\()
+ name
+ support.function.type.php
+
+
+ match
+ (?i)\buniqid(?=\s*\()
+ name
+ support.function.uniqid.php
+
+
+ match
+ (?i)\b(url(decode|encode)|parse_url|get_headers|rawurl(decode|encode))(?=\s*\()
+ name
+ support.function.url.php
+
+
+ match
+ (?i)\bstream_(filter_register|get_filters|bucket_(new|prepend|append|make_writeable))(?=\s*\()
+ name
+ support.function.user_filters.php
+
+
+ match
+ (?i)\bdom_userdatahandler_handle(?=\s*\()
+ name
+ support.function.userdatahandler.php
+
+
+ match
+ (?i)\bstream_wrapper_(unregister|re(store|gister))(?=\s*\()
+ name
+ support.function.userspace.php
+
+
+ match
+ (?i)\bconvert_uu(decode|encode)(?=\s*\()
+ name
+ support.function.uuencode.php
+
+
+ match
+ (?i)\b(serialize|debug_zval_dump|unserialize|var_(dump|export)|memory_get_(usage|peak_usage))(?=\s*\()
+ name
+ support.function.var.php
+
+
+ match
+ (?i)\bversion_compare(?=\s*\()
+ name
+ support.function.versioning.php
+
+
+ match
+ (?i)\bwddx_(serialize_va(lue|rs)|deserialize|packet_(start|end)|add_vars)(?=\s*\()
+ name
+ support.function.wddx.php
+
+
+ match
+ (?i)\b(utf8_(decode|encode)|xml_(set_(start_namespace_decl_handler|notation_decl_handler|character_data_handler|default_handler|object|unparsed_entity_decl_handler|processing_instruction_handler|e(nd_namespace_decl_handler|lement_handler|xternal_entity_ref_handler))|error_string|parse(_into_struct|r_(set_option|create(_ns)?|free|get_option))?|get_(current_(column_number|line_number|byte_index)|error_code)))(?=\s*\()
+ name
+ support.function.xml.php
+
+
+ match
+ (?i)\bxmlrpc_(se(t_type|rver_(c(all_method|reate)|destroy|add_introspection_data|register_(introspection_callback|method)))|is_fault|decode(_request)?|parse_method_descriptions|encode(_request)?|get_type)(?=\s*\()
+ name
+ support.function.xmlrpc-epi-php.php
+
+
+ match
+ (?i)\bdom_xpath_(evaluate|query|register_ns)(?=\s*\()
+ name
+ support.function.xpath.php
+
+
+ match
+ (?i)\bxsl_xsltprocessor_(has_exslt_support|set_parameter|transform_to_(doc|uri|xml)|import_stylesheet|re(gister_php_functions|move_parameter)|get_parameter)(?=\s*\()
+ name
+ support.function.xsltprocessor.php
+
+
+ match
+ (?i)\b(ob_gzhandler|zlib_get_coding_type|readgzfile|gz(compress|inflate|deflate|open|uncompress|encode|file))(?=\s*\()
+ name
+ support.function.zlib.php
+
+
+ match
+ (?i)\bis_int(eger)?(?=\s*\()
+ name
+ support.function.alias.php
+
+
+ match
+ (?i)\b(Re(cursive(RegexIterator|CachingIterator|IteratorIterator|DirectoryIterator|FilterIterator|ArrayIterator)|flection(Method|Class|Object|Extension|P(arameter|roperty)|Function)?|gexIterator)|s(tdClass|wf(s(hape|ound|prite)|text(field)?|displayitem|f(ill|ont(cha(r)?)?)|action|gradient|mo(vie|rph)|b(itmap|utton)))|XMLReader|tidyNode|S(impleXML(Iterator|Element)|oap(Server|Header|Client|Param|Var|Fault)|pl(TempFileObject|ObjectStorage|File(Info|Object)))|NoRewindIterator|C(OMPersistHelper|achingIterator)|I(nfiniteIterator|teratorIterator)|D(irectoryIterator|OM(XPath|Node|C(omment|dataSection)|Text|Document(Fragment)?|ProcessingInstruction|E(ntityReference|lement)|Attr))|P(DO(Statement)?|arentIterator)|E(rrorException|mptyIterator|xception)|FilterIterator|LimitIterator|A(p(pendIterator|acheRequest)|rray(Iterator|Object)))(?=\s*\()
+ name
+ support.class.builtin.php
+
+
+ match
+ (?i)\b((print|echo)\b|(isset|unset|e(val|mpty)|list)(?=\s*\())
+ name
+ support.function.construct.php
+
+
+
+ var_basic
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.php
+
+
+ match
+ (?x)
+ (\$+)[a-zA-Z_\x{7f}-\x{ff}]
+ [a-zA-Z0-9_\x{7f}-\x{ff}]*?\b
+ name
+ variable.other.php
+
+ var_global
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.php
+
+
+ match
+ (\$)(_(COOKIE|FILES|GET|POST|REQUEST))\b
+ name
+ variable.other.global.php
+
+ var_global_safer
+
+ captures
+
+ 2
+
+ name
+ punctuation.definition.variable.php
+
+
+ match
+ ((\$)(GLOBALS|_(ENV|SERVER|SESSION)))|\b(global)\b
+ name
+ variable.other.global.safer.php
+
+ variables
+
+ patterns
+
+
+ include
+ #var_global
+
+
+ include
+ #var_global_safer
+
+
+ include
+ #var_basic
+
+
+
+
+ scopeName
+ source.php
+ uuid
+ 22986475-8CA5-11D9-AEDD-000D93C8BE28
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Perl.tmLanguage b/app/rcc/edbee/syntaxfiles/Perl.tmLanguage
new file mode 100644
index 00000000..0acd3625
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Perl.tmLanguage
@@ -0,0 +1,3209 @@
+
+
+
+
+ comment
+
+ TODO: Include RegExp syntax
+
+ fileTypes
+
+ pl
+ pm
+ pod
+ t
+ PL
+
+ firstLineMatch
+ ^#!.*\bperl\b
+ foldingStartMarker
+ (/\*|(\{|\[|\()\s*$)
+ foldingStopMarker
+ (\*/|^\s*(\}|\]|\)))
+ keyEquivalent
+ ^~P
+ name
+ Perl
+ patterns
+
+
+ include
+ #line_comment
+
+
+ begin
+ ^=
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.perl
+
+
+ end
+ ^=cut
+ name
+ comment.block.documentation.perl
+
+
+ include
+ #variable
+
+
+ applyEndPatternLast
+ 1
+ begin
+ \b(?=qr\s*[^\s\w])
+ comment
+ string.regexp.compile.perl
+ end
+ ((([egimosx]*)))(?=(\s+\S|\s*[;\,\#\{\}\)]|$))
+ endCaptures
+
+ 1
+
+ name
+ string.regexp.compile.perl
+
+ 2
+
+ name
+ punctuation.definition.string.perl
+
+ 3
+
+ name
+ keyword.control.regexp-option.perl
+
+
+ patterns
+
+
+ begin
+ (qr)\s*\{
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ support.function.perl
+
+
+ end
+ \}
+ name
+ string.regexp.compile.nested_braces.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ #nested_braces_interpolated
+
+
+
+
+ begin
+ (qr)\s*\[
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ support.function.perl
+
+
+ end
+ \]
+ name
+ string.regexp.compile.nested_brackets.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ #nested_brackets_interpolated
+
+
+
+
+ begin
+ (qr)\s*<
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ support.function.perl
+
+
+ end
+ >
+ name
+ string.regexp.compile.nested_ltgt.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ #nested_ltgt_interpolated
+
+
+
+
+ begin
+ (qr)\s*\(
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ support.function.perl
+
+
+ end
+ \)
+ name
+ string.regexp.compile.nested_parens.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ #nested_parens_interpolated
+
+
+
+
+ begin
+ (qr)\s*\'
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ support.function.perl
+
+
+ end
+ \'
+ name
+ string.regexp.compile.single-quote.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (qr)\s*([^\s\w\'\{\[\(\<])
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ support.function.perl
+
+
+ end
+ \2
+ name
+ string.regexp.compile.simple-delimiter.perl
+ patterns
+
+
+ comment
+ This is to prevent thinks like qr/foo$/ to treat $/ as a variable
+ match
+ \$(?=[^\s\w\'\{\[\(\<])
+ name
+ keyword.control.anchor.perl
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ #nested_parens_interpolated
+
+
+
+
+
+
+ applyEndPatternLast
+ 1
+ begin
+ \b(?=(?<!\&)(s)(\s+\S|\s*[;\,\#\{\}\(\)\[<]|$))
+ comment
+ string.regexp.replace.perl
+ end
+ ((([egimosx]*)))(?=(\s+\S|\s*[;\,\#\{\}\)\]>]|$))
+ endCaptures
+
+ 1
+
+ name
+ string.regexp.replace.perl
+
+ 2
+
+ name
+ punctuation.definition.string.perl
+
+ 3
+
+ name
+ keyword.control.regexp-option.perl
+
+
+ patterns
+
+
+ begin
+ (s)\s*\{
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ support.function.perl
+
+
+ end
+ \}
+ name
+ string.regexp.nested_braces.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_braces
+
+
+
+
+ begin
+ (s)\s*\[
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ support.function.perl
+
+
+ end
+ \]
+ name
+ string.regexp.nested_brackets.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_brackets
+
+
+
+
+ begin
+ (s)\s*<
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ support.function.perl
+
+
+ end
+ >
+ name
+ string.regexp.nested_ltgt.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_ltgt
+
+
+
+
+ begin
+ (s)\s*\(
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ support.function.perl
+
+
+ end
+ \)
+ name
+ string.regexp.nested_parens.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_parens
+
+
+
+
+ begin
+ \{
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+
+ end
+ \}
+ name
+ string.regexp.format.nested_braces.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ #nested_braces_interpolated
+
+
+
+
+ begin
+ \[
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+
+ end
+ \]
+ name
+ string.regexp.format.nested_brackets.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ #nested_brackets_interpolated
+
+
+
+
+ begin
+ <
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+
+ end
+ >
+ name
+ string.regexp.format.nested_ltgt.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ #nested_ltgt_interpolated
+
+
+
+
+ begin
+ \(
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+
+ end
+ \)
+ name
+ string.regexp.format.nested_parens.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ #nested_parens_interpolated
+
+
+
+
+ begin
+ '
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+
+ end
+ '
+ name
+ string.regexp.format.single_quote.perl
+ patterns
+
+
+ match
+ \\['\\]
+ name
+ constant.character.escape.perl
+
+
+
+
+ begin
+ ([^\s\w\[({<;])
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+
+ end
+ \1
+ name
+ string.regexp.format.simple_delimiter.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+
+
+ match
+ \s+
+
+
+
+
+ begin
+ \b(?=s([^\s\w\[({<]).*\1([egimos]*)([\}\)\;\,]|\s+))
+ comment
+ string.regexp.replaceXXX
+ end
+ ((([egimos]*)))(?=([\}\)\;\,]|\s+|$))
+ endCaptures
+
+ 1
+
+ name
+ string.regexp.replace.perl
+
+ 2
+
+ name
+ punctuation.definition.string.perl
+
+ 3
+
+ name
+ keyword.control.regexp-option.perl
+
+
+ patterns
+
+
+ begin
+ (s\s*)([^\s\w\[({<])
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ support.function.perl
+
+
+ end
+ (?=\2)
+ name
+ string.regexp.replaceXXX.simple_delimiter.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ '
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+
+ end
+ '
+ name
+ string.regexp.replaceXXX.format.single_quote.perl
+ patterns
+
+
+ match
+ \\['\\]
+ name
+ constant.character.escape.perl.perl
+
+
+
+
+ begin
+ ([^\s\w\[({<])
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+
+ end
+ \1
+ name
+ string.regexp.replaceXXX.format.simple_delimiter.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+
+
+
+
+ begin
+ \b(?=(?<!\\)s\s*([^\s\w\[({<]))
+ comment
+ string.regexp.replace.extended
+ end
+ \2((([egimos]*x[egimos]*)))\b
+ endCaptures
+
+ 1
+
+ name
+ string.regexp.replace.perl
+
+ 2
+
+ name
+ punctuation.definition.string.perl
+
+ 3
+
+ name
+ keyword.control.regexp-option.perl
+
+
+ patterns
+
+
+ begin
+ (s)\s*(.)
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ support.function.perl
+
+
+ end
+ (?=\2)
+ name
+ string.regexp.replace.extended.simple_delimiter.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ '
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+
+ end
+ '(?=[egimos]*x[egimos]*)\b
+ name
+ string.regexp.replace.extended.simple_delimiter.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (.)
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+
+ end
+ \1(?=[egimos]*x[egimos]*)\b
+ name
+ string.regexp.replace.extended.simple_delimiter.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+
+
+
+
+ match
+ \b\w+\s*(?==>)
+ name
+ constant.other.key.perl
+
+
+ match
+ (?<={)\s*\w+\s*(?=})
+ name
+ constant.other.bareword.perl
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.perl
+
+ 5
+
+ name
+ punctuation.definition.string.perl
+
+
+ match
+ (?<!\\)((~\s*)?\/)(\S.*?)(?<!\\)(\\{2})*(\/)
+ name
+ string.regexp.find.perl
+
+
+ begin
+ (?<!\\)(\~\s*\/)
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+
+ end
+ \/([cgimos]*x[cgimos]*)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.regexp-option.perl
+
+
+ name
+ string.regexp.find.extended.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.perl
+
+ 2
+
+ name
+ entity.name.type.class.perl
+
+ 3
+
+ name
+ comment.line.number-sign.perl
+
+ 4
+
+ name
+ punctuation.definition.comment.perl
+
+
+ match
+ ^\s*(package)\s+(\S+)\s*((#).*)?$\n?
+ name
+ meta.class.perl
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.sub.perl
+
+ 2
+
+ name
+ entity.name.function.perl
+
+ 3
+
+ name
+ storage.type.method.perl
+
+
+ match
+ ^\s*(sub)\s+([-a-zA-Z0-9_]+)\s*(\([\$\@\*;]*\))?
+ name
+ meta.function.perl
+
+
+ captures
+
+ 1
+
+ name
+ entity.name.function.perl
+
+ 2
+
+ name
+ punctuation.definition.parameters.perl
+
+ 3
+
+ name
+ variable.parameter.function.perl
+
+
+ match
+ ^\s*(BEGIN|END|DESTROY)\b
+ name
+ meta.function.perl
+
+
+ begin
+ ^(?=(\t| {4}))
+ end
+ (?=[^\t\s])
+ name
+ meta.leading-tabs
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ meta.odd-tab
+
+ 2
+
+ name
+ meta.even-tab
+
+
+ match
+ (\t| {4})(\t| {4})?
+
+
+
+
+ captures
+
+ 1
+
+ name
+ support.function.perl
+
+ 2
+
+ name
+ punctuation.definition.string.perl
+
+ 5
+
+ name
+ punctuation.definition.string.perl
+
+
+ match
+ \b(m)\s*(?<!\\)([^\[\{\(A-Za-z0-9\s])(.*?)(?<!\\)(\\{2})*(\2)
+ name
+ string.regexp.find-m.perl
+
+
+ begin
+ \b(m)\s*(?<!\\)\(
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.regexp.find-m-paren.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_parens_interpolated
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \b(m)\s*(?<!\\)\{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.regexp.find-m-brace.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_braces_interpolated
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \b(m)\s*(?<!\\)\[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.regexp.find-m-bracket.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_brackets_interpolated
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \b(m)\s*(?<!\\)\<
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.regexp.find-m-ltgt.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_ltgt_interpolated
+
+
+ include
+ #variable
+
+
+
+
+ captures
+
+ 1
+
+ name
+ support.function.perl
+
+ 2
+
+ name
+ punctuation.definition.string.perl
+
+ 5
+
+ name
+ punctuation.definition.string.perl
+
+ 8
+
+ name
+ punctuation.definition.string.perl
+
+
+ match
+ \b(s|tr|y)\s*([^A-Za-z0-9\s])(.*?)(?<!\\)(\\{2})*(\2)(.*?)(?<!\\)(\\{2})*(\2)
+ name
+ string.regexp.replace.perl
+
+
+ match
+ \b(__FILE__|__LINE__|__PACKAGE__)\b
+ name
+ constant.language.perl
+
+
+ match
+ (?<!->)\b(continue|die|do|else|elsif|exit|for|foreach|goto|if|last|next|redo|return|select|unless|until|wait|while|switch|case|package|require|use|eval)\b
+ name
+ keyword.control.perl
+
+
+ match
+ \b(my|our|local)\b
+ name
+ storage.modifier.perl
+
+
+ match
+ (?<!\w)\-[rwx0RWXOezsfdlpSbctugkTBMAC]\b
+ name
+ keyword.operator.filetest.perl
+
+
+ match
+ \b(and|or|xor|as)\b
+ name
+ keyword.operator.logical.perl
+
+
+ match
+ (<=>| =>|->)
+ name
+ keyword.operator.comparison.perl
+
+
+ begin
+ ((<<) *"HTML").*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.doublequote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ text.html.embedded.perl
+ end
+ (^HTML$)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ text.html.basic
+
+
+
+
+ begin
+ ((<<) *"XML").*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.doublequote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ text.xml.embedded.perl
+ end
+ (^XML$)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ text.xml
+
+
+
+
+ begin
+ ((<<) *"CSS").*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.doublequote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ text.css.embedded.perl
+ end
+ (^CSS$)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ source.css
+
+
+
+
+ begin
+ ((<<) *"JAVASCRIPT").*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.doublequote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ text.js.embedded.perl
+ end
+ (^JAVASCRIPT$)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ source.js
+
+
+
+
+ begin
+ ((<<) *"SQL").*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.doublequote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ source.sql.embedded.perl
+ end
+ (^SQL$)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ source.sql
+
+
+
+
+ begin
+ ((<<) *"POSTSCRIPT").*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.doublequote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ text.postscript.embedded.perl
+ end
+ (^POSTSCRIPT$)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ source.postscript
+
+
+
+
+ begin
+ ((<<) *"([^"]*)").*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.doublequote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ string.unquoted.heredoc.doublequote.perl
+ end
+ (^\3$)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ ((<<) *'HTML').*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.quote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ text.html.embedded.perl
+ end
+ (^HTML$)
+ patterns
+
+
+ include
+ text.html.basic
+
+
+
+
+ begin
+ ((<<) *'XML').*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.quote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ text.xml.embedded.perl
+ end
+ (^XML$)
+ patterns
+
+
+ include
+ text.xml
+
+
+
+
+ begin
+ ((<<) *'CSS').*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.quote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ text.css.embedded.perl
+ end
+ (^CSS$)
+ patterns
+
+
+ include
+ source.css
+
+
+
+
+ begin
+ ((<<) *'JAVASCRIPT').*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.quote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ text.js.embedded.perl
+ end
+ (^JAVASCRIPT$)
+ patterns
+
+
+ include
+ source.js
+
+
+
+
+ begin
+ ((<<) *'SQL').*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.quote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ source.sql.embedded.perl
+ end
+ (^SQL$)
+ patterns
+
+
+ include
+ source.sql
+
+
+
+
+ begin
+ ((<<) *'POSTSCRIPT').*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.quote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ source.postscript.embedded.perl
+ end
+ (^POSTSCRIPT)
+ patterns
+
+
+ include
+ source.postscript
+
+
+
+
+ begin
+ ((<<) *'([^']*)').*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.quote.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ string.unquoted.heredoc.quote.perl
+ end
+ (^\3$)
+
+
+ begin
+ ((<<) *`([^`]*)`).*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.backtick.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ string.unquoted.heredoc.backtick.perl
+ end
+ (^\3$)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ ((<<) *HTML\b).*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ text.html.embedded.perl
+ end
+ (^HTML$)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ text.html.basic
+
+
+
+
+ begin
+ ((<<) *XML\b).*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ text.xml.embedded.perl
+ end
+ (^XML$)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ text.xml
+
+
+
+
+ begin
+ ((<<) *SQL\b).*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ source.sql.embedded.perl
+ end
+ (^SQL$)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ source.sql
+
+
+
+
+ begin
+ ((<<) *POSTSCRIPT\b).*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ source.postscript.embedded.perl
+ end
+ (^POSTSCRIPT)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ source.postscript
+
+
+
+
+ begin
+ ((<<) *((?![=\d\$ ])[^;,'"`\s)]*)).*\n?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.perl
+
+ 1
+
+ name
+ string.unquoted.heredoc.perl
+
+ 2
+
+ name
+ punctuation.definition.heredoc.perl
+
+
+ contentName
+ string.unquoted.heredoc.perl
+ end
+ (^\3$)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \bqq\s*([^\(\{\[\<\w\s])
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \1
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.quoted.other.qq.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \bqx\s*([^'\(\{\[\<\w\s])
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \1
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.interpolated.qx.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \bqx\s*'
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.interpolated.qx.single-quote.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.quoted.double.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \bqw?\s*([^\(\{\[\<\w\s])
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \1
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.quoted.other.q.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.quoted.single.perl
+ patterns
+
+
+ match
+ \\['\\]
+ name
+ constant.character.escape.perl
+
+
+
+
+ begin
+ `
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ `
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.interpolated.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \bqq\s*\(
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.quoted.other.qq-paren.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_parens_interpolated
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \bqq\s*\{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.quoted.other.qq-brace.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_braces_interpolated
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \bqq\s*\[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.quoted.other.qq-bracket.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_brackets_interpolated
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \bqq\s*\<
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.quoted.other.qq-ltgt.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_ltgt_interpolated
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \bqx\s*\(
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.interpolated.qx-paren.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_parens_interpolated
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \bqx\s*\{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.interpolated.qx-brace.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_braces_interpolated
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \bqx\s*\[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.interpolated.qx-bracket.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_brackets_interpolated
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \bqx\s*\<
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.interpolated.qx-ltgt.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_ltgt_interpolated
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ \bqw?\s*\(
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.quoted.other.q-paren.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_parens
+
+
+
+
+ begin
+ \bqw?\s*\{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.quoted.other.q-brace.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_braces
+
+
+
+
+ begin
+ \bqw?\s*\[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.quoted.other.q-bracket.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_brackets
+
+
+
+
+ begin
+ \bqw?\s*\<
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ \>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.quoted.other.q-ltgt.perl
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_ltgt
+
+
+
+
+ begin
+ ^__\w+__
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.perl
+
+
+ end
+ $
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.perl
+
+
+ name
+ string.unquoted.program-block.perl
+
+
+ begin
+ \b(format)\s+([A-Za-z]+)\s*=
+ beginCaptures
+
+ 1
+
+ name
+ support.function.perl
+
+ 2
+
+ name
+ entity.name.function.format.perl
+
+
+ end
+ ^\.\s*$
+ name
+ meta.format.perl
+ patterns
+
+
+ include
+ #line_comment
+
+
+ include
+ #variable
+
+
+
+
+ match
+ \b(ARGV|DATA|ENV|SIG|STDERR|STDIN|STDOUT|atan2|bind|binmode|bless|caller|chdir|chmod|chomp|chop|chown|chr|chroot|close|closedir|cmp|connect|cos|crypt|dbmclose|dbmopen|defined|delete|dump|each|endgrent|endhostent|endnetent|endprotoent|endpwent|endservent|eof|eq|eval|exec|exists|exp|fcntl|fileno|flock|fork|format|formline|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|glob|gmtime|grep|gt|hex|import|index|int|ioctl|join|keys|kill|lc|lcfirst|le|length|link|listen|local|localtime|log|lstat|lt|m|map|mkdir|msgctl|msgget|msgrcv|msgsnd|ne|no|oct|open|opendir|ord|pack|pipe|pop|pos|print|printf|push|q|qq|quotemeta|qw|qx|rand|read|readdir|readlink|recv|ref|rename|reset|reverse|rewinddir|rindex|rmdir|s|scalar|seek|seekdir|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|study|substr|symlink|syscall|sysopen|sysread|system|syswrite|tell|telldir|tie|tied|time|times|tr|truncate|uc|ucfirst|umask|undef|unlink|unpack|unshift|untie|utime|values|vec|waitpid|wantarray|warn|write|y|q|qw|qq|qx)\b
+ name
+ support.function.perl
+
+
+ repository
+
+ escaped_char
+
+ match
+ \\.
+ name
+ constant.character.escape.perl
+
+ line_comment
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ comment.line.number-sign.perl
+
+ 2
+
+ name
+ punctuation.definition.comment.perl
+
+
+ match
+ ^((#).*$\n?)
+ name
+ meta.comment.full-line.perl
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.perl
+
+
+ match
+ (#).*$\n?
+ name
+ comment.line.number-sign.perl
+
+
+
+ nested_braces
+
+ begin
+ \{
+ captures
+
+ 1
+
+ name
+ punctuation.section.scope.perl
+
+
+ end
+ \}
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_braces
+
+
+
+ nested_braces_interpolated
+
+ begin
+ \{
+ captures
+
+ 1
+
+ name
+ punctuation.section.scope.perl
+
+
+ end
+ \}
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ #nested_braces_interpolated
+
+
+
+ nested_brackets
+
+ begin
+ \[
+ captures
+
+ 1
+
+ name
+ punctuation.section.scope.perl
+
+
+ end
+ \]
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_brackets
+
+
+
+ nested_brackets_interpolated
+
+ begin
+ \[
+ captures
+
+ 1
+
+ name
+ punctuation.section.scope.perl
+
+
+ end
+ \]
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ #nested_brackets_interpolated
+
+
+
+ nested_ltgt
+
+ begin
+ <
+ captures
+
+ 1
+
+ name
+ punctuation.section.scope.perl
+
+
+ end
+ >
+ patterns
+
+
+ include
+ #nested_ltgt
+
+
+
+ nested_ltgt_interpolated
+
+ begin
+ <
+ captures
+
+ 1
+
+ name
+ punctuation.section.scope.perl
+
+
+ end
+ >
+ patterns
+
+
+ include
+ #variable
+
+
+ include
+ #nested_ltgt_interpolated
+
+
+
+ nested_parens
+
+ begin
+ \(
+ captures
+
+ 1
+
+ name
+ punctuation.section.scope.perl
+
+
+ end
+ \)
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nested_parens
+
+
+
+ nested_parens_interpolated
+
+ begin
+ \(
+ captures
+
+ 1
+
+ name
+ punctuation.section.scope.perl
+
+
+ end
+ \)
+ patterns
+
+
+ comment
+ This is to prevent thinks like qr/foo$/ to treat $/ as a variable
+ match
+ \$(?=[^\s\w\'\{\[\(\<])
+ name
+ keyword.control.anchor.perl
+
+
+ include
+ #escaped_char
+
+
+ include
+ #variable
+
+
+ include
+ #nested_parens_interpolated
+
+
+
+ variable
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.perl
+
+
+ match
+ (\$)&(?![A-Za-z0-9_])
+ name
+ variable.other.regexp.match.perl
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.perl
+
+
+ match
+ (\$)`(?![A-Za-z0-9_])
+ name
+ variable.other.regexp.pre-match.perl
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.perl
+
+
+ match
+ (\$)'(?![A-Za-z0-9_])
+ name
+ variable.other.regexp.post-match.perl
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.perl
+
+
+ match
+ (\$)\+(?![A-Za-z0-9_])
+ name
+ variable.other.regexp.last-paren-match.perl
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.perl
+
+
+ match
+ (\$)"(?![A-Za-z0-9_])
+ name
+ variable.other.readwrite.list-separator.perl
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.perl
+
+
+ match
+ (\$)0(?![A-Za-z0-9_])
+ name
+ variable.other.predefined.program-name.perl
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.perl
+
+
+ match
+ (\$)[_ab\*\.\/\|,\\;#%=\-~^:?!\$<>\(\)\[\]@](?![A-Za-z0-9_])
+ name
+ variable.other.predefined.perl
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.perl
+
+
+ match
+ (\$)[0-9]+(?![A-Za-z0-9_])
+ name
+ variable.other.subpattern.perl
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.perl
+
+
+ match
+ ([\$\@\%](#)?)([a-zA-Zx7f-xff\$]|::)([a-zA-Z0-9_x7f-xff\$]|::)*\b
+ name
+ variable.other.readwrite.global.perl
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.perl
+
+ 2
+
+ name
+ punctuation.definition.variable.perl
+
+
+ match
+ (\$\{)(?:[a-zA-Zx7f-xff\$]|::)(?:[a-zA-Z0-9_x7f-xff\$]|::)*(\})
+ name
+ variable.other.readwrite.global.perl
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.perl
+
+
+ match
+ ([\$\@\%](#)?)[0-9_]\b
+ name
+ variable.other.readwrite.global.special.perl
+
+
+
+
+ scopeName
+ source.perl
+ uuid
+ EDBFE125-6B1C-11D9-9189-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Plain text.tmLanguage b/app/rcc/edbee/syntaxfiles/Plain text.tmLanguage
new file mode 100644
index 00000000..58f61d33
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Plain text.tmLanguage
@@ -0,0 +1,83 @@
+
+
+
+
+ fileTypes
+
+ txt
+
+ keyEquivalent
+ ^~P
+ name
+ Plain Text
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.item.text
+
+
+ match
+ ^\s*(•).*$\n?
+ name
+ meta.bullet-point.strong.text
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.item.text
+
+
+ match
+ ^\s*(·).*$\n?
+ name
+ meta.bullet-point.light.text
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.item.text
+
+
+ match
+ ^\s*(\*).*$\n?
+ name
+ meta.bullet-point.star.text
+
+
+ begin
+ ^([ \t]*)(?=\S)
+ contentName
+ meta.paragraph.text
+ end
+ ^(?!\1(?=\S))
+ patterns
+
+
+ match
+ (?x)
+ ( (https?|s?ftp|ftps|file|smb|afp|nfs|(x-)?man|gopher|txmt)://|mailto:)
+ [-:@a-zA-Z0-9_.,~%+/?=&#]+(?<![.,?:])
+
+ name
+ markup.underline.link.text
+
+
+
+
+ scopeName
+ text.plain
+ uuid
+ 3130E4FA-B10E-11D9-9F75-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Python.tmLanguage b/app/rcc/edbee/syntaxfiles/Python.tmLanguage
new file mode 100644
index 00000000..88e1a635
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Python.tmLanguage
@@ -0,0 +1,3025 @@
+
+
+
+
+ bundleUUID
+ E3BADC20-6B0E-11D9-9DC9-000D93589AF6
+ comment
+
+ todo:
+ list comprehension / generator comprehension scope.
+
+
+ fileTypes
+
+ py
+ rpy
+ pyw
+ cpy
+ SConstruct
+ Sconstruct
+ sconstruct
+ SConscript
+
+ firstLineMatch
+ ^#!/.*\bpython[0-9.-]*\b
+ foldingStartMarker
+ ^\s*(def|class)\s+([.a-zA-Z0-9_ <]+)\s*(\((.*)\))?\s*:|\{\s*$|\(\s*$|\[\s*$|^\s*"""(?=.)(?!.*""")
+ foldingStopMarker
+ ^\s*$|^\s*\}|^\s*\]|^\s*\)|^\s*"""\s*$
+ keyEquivalent
+ ^~P
+ name
+ Python
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.python
+
+
+ match
+ (#).*$\n?
+ name
+ comment.line.number-sign.python
+
+
+ match
+ \b(?i:(0x\h*)L)
+ name
+ constant.numeric.integer.long.hexadecimal.python
+
+
+ match
+ \b(?i:(0x\h*))
+ name
+ constant.numeric.integer.hexadecimal.python
+
+
+ match
+ \b(?i:(0[0-7]+)L)
+ name
+ constant.numeric.integer.long.octal.python
+
+
+ match
+ \b(0[0-7]+)
+ name
+ constant.numeric.integer.octal.python
+
+
+ match
+ \b(?i:(((\d+(\.(?=[^a-zA-Z_])\d*)?|(?<=[^0-9a-zA-Z_])\.\d+)(e[\-\+]?\d+)?))J)
+ name
+ constant.numeric.complex.python
+
+
+ match
+ \b(?i:(\d+\.\d*(e[\-\+]?\d+)?))(?=[^a-zA-Z_])
+ name
+ constant.numeric.float.python
+
+
+ match
+ (?<=[^0-9a-zA-Z_])(?i:(\.\d+(e[\-\+]?\d+)?))
+ name
+ constant.numeric.float.python
+
+
+ match
+ \b(?i:(\d+e[\-\+]?\d+))
+ name
+ constant.numeric.float.python
+
+
+ match
+ \b(?i:([1-9]+[0-9]*|0)L)
+ name
+ constant.numeric.integer.long.decimal.python
+
+
+ match
+ \b([1-9]+[0-9]*|0)
+ name
+ constant.numeric.integer.decimal.python
+
+
+ captures
+
+ 1
+
+ name
+ storage.modifier.global.python
+
+
+ match
+ \b(global)\b
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.import.python
+
+ 2
+
+ name
+ keyword.control.import.from.python
+
+
+ match
+ \b(?:(import)|(from))\b
+
+
+ comment
+ keywords that delimit flow blocks or alter flow from within a block
+ match
+ \b(elif|else|except|finally|for|if|try|while|with|break|continue|pass|raise|return|yield)\b
+ name
+ keyword.control.flow.python
+
+
+ comment
+ keyword operators that evaluate to True or False
+ match
+ \b(and|in|is|not|or)\b
+ name
+ keyword.operator.logical.python
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.python
+
+
+ comment
+ keywords that haven't fit into other groups (yet).
+ match
+ \b(as|assert|del|exec|print)\b
+
+
+ match
+ <>
+ name
+ invalid.deprecated.operator.python
+
+
+ match
+ <\=|>\=|\=\=|<|>|\!\=
+ name
+ keyword.operator.comparison.python
+
+
+ match
+ \+\=|-\=|\*\=|/\=|//\=|%\=|&\=|\|\=|\^\=|>>\=|<<\=|\*\*\=
+ name
+ keyword.operator.assignment.augmented.python
+
+
+ match
+ \+|\-|\*|\*\*|/|//|%|<<|>>|&|\||\^|~
+ name
+ keyword.operator.arithmetic.python
+
+
+ match
+ \=
+ name
+ keyword.operator.assignment.python
+
+
+ begin
+ ^\s*(class)\s+(?=[a-zA-Z_][a-zA-Z_0-9]*\s*\:)
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.class.python
+
+
+ contentName
+ entity.name.type.class.python
+ end
+ \s*(:)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.class.begin.python
+
+
+ name
+ meta.class.old-style.python
+ patterns
+
+
+ include
+ #entity_name_class
+
+
+
+
+ begin
+ ^\s*(class)\s+(?=[a-zA-Z_][a-zA-Z_0-9]*\s*\()
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.class.python
+
+
+ end
+ (\))\s*(?:(\:)|(.*$\n?))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.inheritance.end.python
+
+ 2
+
+ name
+ punctuation.section.class.begin.python
+
+ 3
+
+ name
+ invalid.illegal.missing-section-begin.python
+
+
+ name
+ meta.class.python
+ patterns
+
+
+ begin
+ (?=[A-Za-z_][A-Za-z0-9_]*)
+ contentName
+ entity.name.type.class.python
+ end
+ (?![A-Za-z0-9_])
+ patterns
+
+
+ include
+ #entity_name_class
+
+
+
+
+ begin
+ (\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.inheritance.begin.python
+
+
+ contentName
+ meta.class.inheritance.python
+ end
+ (?=\)|:)
+ patterns
+
+
+ begin
+ (?<=\(|,)\s*
+ contentName
+ entity.other.inherited-class.python
+ end
+ \s*(?:(,)|(?=\)))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.inheritance.python
+
+
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+
+
+
+ begin
+ ^\s*(class)\s+(?=[a-zA-Z_][a-zA-Z_0-9])
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.class.python
+
+
+ end
+ (\()|\s*($\n?|#.*$\n?)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.inheritance.begin.python
+
+ 2
+
+ name
+ invalid.illegal.missing-inheritance.python
+
+
+ name
+ meta.class.python
+ patterns
+
+
+ begin
+ (?=[A-Za-z_][A-Za-z0-9_]*)
+ contentName
+ entity.name.type.class.python
+ end
+ (?![A-Za-z0-9_])
+ patterns
+
+
+ include
+ #entity_name_function
+
+
+
+
+
+
+ begin
+ ^\s*(def)\s+(?=[A-Za-z_][A-Za-z0-9_]*\s*\()
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.python
+
+
+ end
+ (\))\s*(?:(\:)|(.*$\n?))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.python
+
+ 2
+
+ name
+ punctuation.section.function.begin.python
+
+ 3
+
+ name
+ invalid.illegal.missing-section-begin.python
+
+
+ name
+ meta.function.python
+ patterns
+
+
+ begin
+ (?=[A-Za-z_][A-Za-z0-9_]*)
+ contentName
+ entity.name.function.python
+ end
+ (?![A-Za-z0-9_])
+ patterns
+
+
+ include
+ #entity_name_function
+
+
+
+
+ begin
+ (\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.begin.python
+
+
+ contentName
+ meta.function.parameters.python
+ end
+ (?=\)\s*\:)
+ patterns
+
+
+ include
+ #keyword_arguments
+
+
+ captures
+
+ 1
+
+ name
+ variable.parameter.function.python
+
+ 2
+
+ name
+ punctuation.separator.parameters.python
+
+
+ match
+ \b([a-zA-Z_][a-zA-Z_0-9]*)\s*(?:(,)|(?=[\n\)]))
+
+
+
+
+
+
+ begin
+ ^\s*(def)\s+(?=[A-Za-z_][A-Za-z0-9_]*)
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.python
+
+
+ end
+ (\()|\s*($\n?|#.*$\n?)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.begin.python
+
+ 2
+
+ name
+ invalid.illegal.missing-parameters.python
+
+
+ name
+ meta.function.python
+ patterns
+
+
+ begin
+ (?=[A-Za-z_][A-Za-z0-9_]*)
+ contentName
+ entity.name.function.python
+ end
+ (?![A-Za-z0-9_])
+ patterns
+
+
+ include
+ #entity_name_function
+
+
+
+
+
+
+ begin
+ (lambda)(?=\s+)
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.inline.python
+
+
+ end
+ (\:)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.python
+
+ 2
+
+ name
+ punctuation.section.function.begin.python
+
+ 3
+
+ name
+ invalid.illegal.missing-section-begin.python
+
+
+ name
+ meta.function.inline.python
+ patterns
+
+
+ begin
+ \s+
+ contentName
+ meta.function.inline.parameters.python
+ end
+ (?=\:)
+ patterns
+
+
+ include
+ #keyword_arguments
+
+
+ captures
+
+ 1
+
+ name
+ variable.parameter.function.python
+
+ 2
+
+ name
+ punctuation.separator.parameters.python
+
+
+ match
+ \b([a-zA-Z_][a-zA-Z_0-9]*)\s*(?:(,)|(?=[\n\)\:]))
+
+
+
+
+
+
+ begin
+ ^\s*(?=@\s*[A-Za-z_][A-Za-z0-9_]*(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*\s*\()
+ comment
+ a decorator may be a function call which returns a decorator.
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.end.python
+
+
+ name
+ meta.function.decorator.python
+ patterns
+
+
+ begin
+ (?=(@)\s*[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*\s*\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.decorator.python
+
+
+ contentName
+ entity.name.function.decorator.python
+ end
+ (?=\s*\()
+ patterns
+
+
+ include
+ #dotted_name
+
+
+
+
+ begin
+ (\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.begin.python
+
+
+ contentName
+ meta.function.decorator.arguments.python
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #keyword_arguments
+
+
+ include
+ $self
+
+
+
+
+
+
+ begin
+ ^\s*(?=@\s*[A-Za-z_][A-Za-z0-9_]*(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*)
+ contentName
+ entity.name.function.decorator.python
+ end
+ (?=\s|$\n?|#)
+ name
+ meta.function.decorator.python
+ patterns
+
+
+ begin
+ (?=(@)\s*[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.decorator.python
+
+
+ end
+ (?=\s|$\n?|#)
+ patterns
+
+
+ include
+ #dotted_name
+
+
+
+
+
+
+ begin
+ (?<=\)|\])\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.begin.python
+
+
+ contentName
+ meta.function-call.arguments.python
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.end.python
+
+
+ name
+ meta.function-call.python
+ patterns
+
+
+ include
+ #keyword_arguments
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (?=[A-Za-z_][A-Za-z0-9_]*(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*\s*\()
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.end.python
+
+
+ name
+ meta.function-call.python
+ patterns
+
+
+ begin
+ (?=[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*\s*\()
+ end
+ (?=\s*\()
+ patterns
+
+
+ include
+ #dotted_name
+
+
+
+
+ begin
+ (\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.begin.python
+
+
+ contentName
+ meta.function-call.arguments.python
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #keyword_arguments
+
+
+ include
+ $self
+
+
+
+
+
+
+ begin
+ (?=[A-Za-z_][A-Za-z0-9_]*(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*\s*\[)
+ end
+ (\])
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.end.python
+
+
+ name
+ meta.item-access.python
+ patterns
+
+
+ begin
+ (?=[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*\s*\[)
+ end
+ (?=\s*\[)
+ patterns
+
+
+ include
+ #dotted_name
+
+
+
+
+ begin
+ (\[)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.begin.python
+
+
+ contentName
+ meta.item-access.arguments.python
+ end
+ (?=\])
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+
+ begin
+ (?<=\)|\])\s*(\[)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.begin.python
+
+
+ contentName
+ meta.item-access.arguments.python
+ end
+ (\])
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.end.python
+
+
+ name
+ meta.item-access.python
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.function.python
+
+
+ match
+ \b(def|lambda)\b
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.class.python
+
+
+ match
+ \b(class)\b
+
+
+ include
+ #line_continuation
+
+
+ include
+ #language_variables
+
+
+ match
+ \b(None|True|False|Ellipsis|NotImplemented)\b
+ name
+ constant.language.python
+
+
+ include
+ #string_quoted_single
+
+
+ include
+ #string_quoted_double
+
+
+ include
+ #dotted_name
+
+
+ begin
+ (\()
+ end
+ (\))
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.list.begin.python
+
+ 2
+
+ name
+ meta.empty-list.python
+
+ 3
+
+ name
+ punctuation.definition.list.end.python
+
+
+ match
+ (\[)(\s*(\]))\b
+
+
+ begin
+ (\[)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.list.begin.python
+
+
+ end
+ (\])
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.list.end.python
+
+
+ name
+ meta.structure.list.python
+ patterns
+
+
+ begin
+ (?<=\[|\,)\s*(?![\],])
+ contentName
+ meta.structure.list.item.python
+ end
+ \s*(?:(,)|(?=\]))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.list.python
+
+
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tuple.begin.python
+
+ 2
+
+ name
+ meta.empty-tuple.python
+
+ 3
+
+ name
+ punctuation.definition.tuple.end.python
+
+
+ match
+ (\()(\s*(\)))
+ name
+ meta.structure.tuple.python
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.dictionary.begin.python
+
+ 2
+
+ name
+ meta.empty-dictionary.python
+
+ 3
+
+ name
+ punctuation.definition.dictionary.end.python
+
+
+ match
+ (\{)(\s*(\}))
+ name
+ meta.structure.dictionary.python
+
+
+ begin
+ (\{)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.dictionary.begin.python
+
+
+ end
+ (\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.dictionary.end.python
+
+
+ name
+ meta.structure.dictionary.python
+ patterns
+
+
+ begin
+ (?<=\{|\,|^)\s*(?![\},])
+ contentName
+ meta.structure.dictionary.key.python
+ end
+ \s*(?:(?=\})|(\:))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.valuepair.dictionary.python
+
+
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (?<=\:|^)\s*
+ contentName
+ meta.structure.dictionary.value.python
+ end
+ \s*(?:(?=\})|(,))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.dictionary.python
+
+
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+
+ repository
+
+ builtin_exceptions
+
+ match
+ (?x)\b(
+ (
+ Arithmetic|Assertion|Attribute|Buffer|EOF|Environment|FloatingPoint|IO|
+ Import|Indentation|Index|Key|Lookup|Memory|Name|NotImplemented|OS|Overflow|
+ Reference|Runtime|Standard|Syntax|System|Tab|Type|UnboundLocal|
+ Unicode(Encode|Decode|Translate)?|
+ Value|VMS|Windows|ZeroDivision
+ )Error|
+ ((Pending)?Deprecation|Runtime|Syntax|User|Future|Import|Unicode|Bytes)?Warning|
+ (Base)?Exception|
+ SystemExit|StopIteration|NotImplemented|KeyboardInterrupt|GeneratorExit
+ )\b
+ name
+ support.type.exception.python
+
+ builtin_functions
+
+ match
+ (?x)\b(
+ __import__|all|abs|any|apply|callable|chr|cmp|coerce|compile|delattr|dir|
+ divmod|eval|execfile|filter|getattr|globals|hasattr|hash|hex|id|
+ input|intern|isinstance|issubclass|iter|len|locals|map|max|min|oct|
+ ord|pow|range|raw_input|reduce|reload|repr|round|setattr|sorted|
+ sum|unichr|vars|zip
+ )\b
+ name
+ support.function.builtin.python
+
+ builtin_types
+
+ match
+ (?x)\b(
+ basestring|bool|buffer|classmethod|complex|dict|enumerate|file|
+ float|frozenset|int|list|long|object|open|property|reversed|set|
+ slice|staticmethod|str|super|tuple|type|unicode|xrange
+ )\b
+ name
+ support.type.python
+
+ constant_placeholder
+
+ match
+ (?i:%(\([a-z_]+\))?#?0?\-?[ ]?\+?([0-9]*|\*)(\.([0-9]*|\*))?[hL]?[a-z%])
+ name
+ constant.other.placeholder.python
+
+ docstrings
+
+ patterns
+
+
+ begin
+ ^\s*(?=[uU]?[rR]?""")
+ end
+ (?<=""")
+ name
+ comment.block.python
+ patterns
+
+
+ include
+ #string_quoted_double
+
+
+
+
+ begin
+ ^\s*(?=[uU]?[rR]?''')
+ end
+ (?<=''')
+ name
+ comment.block.python
+ patterns
+
+
+ include
+ #string_quoted_single
+
+
+
+
+
+ dotted_name
+
+ begin
+ (?=[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*)
+ end
+ (?![A-Za-z0-9_\.])
+ patterns
+
+
+ begin
+ (\.)(?=[A-Za-z_][A-Za-z0-9_]*)
+ end
+ (?![A-Za-z0-9_])
+ patterns
+
+
+ include
+ #magic_function_names
+
+
+ include
+ #magic_variable_names
+
+
+ include
+ #illegal_names
+
+
+ include
+ #generic_names
+
+
+
+
+ begin
+ (?<!\.)(?=[A-Za-z_][A-Za-z0-9_]*)
+ end
+ (?![A-Za-z0-9_])
+ patterns
+
+
+ include
+ #builtin_functions
+
+
+ include
+ #builtin_types
+
+
+ include
+ #builtin_exceptions
+
+
+ include
+ #illegal_names
+
+
+ include
+ #magic_function_names
+
+
+ include
+ #magic_variable_names
+
+
+ include
+ #language_variables
+
+
+ include
+ #generic_names
+
+
+
+
+
+ entity_name_class
+
+ patterns
+
+
+ include
+ #illegal_names
+
+
+ include
+ #generic_names
+
+
+
+ entity_name_function
+
+ patterns
+
+
+ include
+ #magic_function_names
+
+
+ include
+ #illegal_names
+
+
+ include
+ #generic_names
+
+
+
+ escaped_char
+
+ captures
+
+ 1
+
+ name
+ constant.character.escape.hex.python
+
+ 10
+
+ name
+ constant.character.escape.linefeed.python
+
+ 11
+
+ name
+ constant.character.escape.return.python
+
+ 12
+
+ name
+ constant.character.escape.tab.python
+
+ 13
+
+ name
+ constant.character.escape.vertical-tab.python
+
+ 2
+
+ name
+ constant.character.escape.octal.python
+
+ 3
+
+ name
+ constant.character.escape.newline.python
+
+ 4
+
+ name
+ constant.character.escape.backlash.python
+
+ 5
+
+ name
+ constant.character.escape.double-quote.python
+
+ 6
+
+ name
+ constant.character.escape.single-quote.python
+
+ 7
+
+ name
+ constant.character.escape.bell.python
+
+ 8
+
+ name
+ constant.character.escape.backspace.python
+
+ 9
+
+ name
+ constant.character.escape.formfeed.python
+
+
+ match
+ (\\x[0-9A-F]{2})|(\\[0-7]{3})|(\\\n)|(\\\\)|(\\\")|(\\')|(\\a)|(\\b)|(\\f)|(\\n)|(\\r)|(\\t)|(\\v)
+
+ escaped_unicode_char
+
+ captures
+
+ 1
+
+ name
+ constant.character.escape.unicode.16-bit-hex.python
+
+ 2
+
+ name
+ constant.character.escape.unicode.32-bit-hex.python
+
+ 3
+
+ name
+ constant.character.escape.unicode.name.python
+
+
+ match
+ (\\U[0-9A-Fa-f]{8})|(\\u[0-9A-Fa-f]{4})|(\\N\{[a-zA-Z ]+\})
+
+ function_name
+
+ patterns
+
+
+ include
+ #magic_function_names
+
+
+ include
+ #magic_variable_names
+
+
+ include
+ #builtin_exceptions
+
+
+ include
+ #builtin_functions
+
+
+ include
+ #builtin_types
+
+
+ include
+ #generic_names
+
+
+
+ generic_names
+
+ match
+ [A-Za-z_][A-Za-z0-9_]*
+
+ illegal_names
+
+ match
+ \b(and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield)\b
+ name
+ invalid.illegal.name.python
+
+ keyword_arguments
+
+ begin
+ \b([a-zA-Z_][a-zA-Z_0-9]*)\s*(=)(?!=)
+ beginCaptures
+
+ 1
+
+ name
+ variable.parameter.function.python
+
+ 2
+
+ name
+ keyword.operator.assignment.python
+
+
+ end
+ \s*(?:(,)|(?=$\n?|[\)\:]))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.parameters.python
+
+
+ patterns
+
+
+ include
+ $self
+
+
+
+ language_variables
+
+ match
+ \b(self|cls)\b
+ name
+ variable.language.python
+
+ line_continuation
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.continuation.line.python
+
+ 2
+
+ name
+ invalid.illegal.unexpected-text.python
+
+
+ match
+ (\\)(.*)$\n?
+
+ magic_function_names
+
+ comment
+ these methods have magic interpretation by python and are generally called indirectly through syntactic constructs
+ match
+ (?x)\b(__(?:
+ abs|add|and|call|cmp|coerce|complex|contains|del|delattr|
+ delete|delitem|delslice|div|divmod|enter|eq|exit|float|
+ floordiv|ge|get|getattr|getattribute|getitem|getslice|gt|
+ hash|hex|iadd|iand|idiv|ifloordiv|ilshift|imod|imul|init|
+ int|invert|ior|ipow|irshift|isub|iter|itruediv|ixor|le|len|
+ long|lshift|lt|mod|mul|ne|neg|new|nonzero|oct|or|pos|pow|
+ radd|rand|rdiv|rdivmod|repr|rfloordiv|rlshift|rmod|rmul|ror|
+ rpow|rrshift|rshift|rsub|rtruediv|rxor|set|setattr|setitem|
+ setslice|str|sub|truediv|unicode|xor
+ )__)\b
+ name
+ support.function.magic.python
+
+ magic_variable_names
+
+ comment
+ magic variables which a class/module may have.
+ match
+ \b__(all|bases|class|debug|dict|doc|file|members|metaclass|methods|name|slots|weakref)__\b
+ name
+ support.variable.magic.python
+
+ regular_expressions
+
+ comment
+ Changed disabled to 1 to turn off syntax highlighting in “r” strings.
+ disabled
+ 0
+ patterns
+
+
+ include
+ source.regexp.python
+
+
+
+ string_quoted_double
+
+ patterns
+
+
+ begin
+ ([uU]r)(""")
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted unicode-raw string
+ end
+ ((?<=""")(")""|""")
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+
+ name
+ string.quoted.double.block.unicode-raw-regex.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_unicode_char
+
+
+ include
+ #escaped_char
+
+
+ include
+ #regular_expressions
+
+
+
+
+ begin
+ ([uU]R)(""")
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted unicode-raw string without regular expression highlighting
+ end
+ ((?<=""")(")""|""")
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+
+ name
+ string.quoted.double.block.unicode-raw.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_unicode_char
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (r)(""")
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ double quoted raw string
+ end
+ ((?<=""")(")""|""")
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+
+ name
+ string.quoted.double.block.raw-regex.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+ include
+ #regular_expressions
+
+
+
+
+ begin
+ (R)(""")
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ double quoted raw string
+ end
+ ((?<=""")(")""|""")
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+
+ name
+ string.quoted.double.block.raw.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ ([uU])(""")
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ double quoted unicode string
+ end
+ ((?<=""")(")""|""")
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+
+ name
+ string.quoted.double.block.unicode.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_unicode_char
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ ([uU]r)(")
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ double-quoted raw string
+ end
+ ((?<=")(")|")|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+ 3
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.double.single-line.unicode-raw-regex.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_unicode_char
+
+
+ include
+ #escaped_char
+
+
+ include
+ #regular_expressions
+
+
+
+
+ begin
+ ([uU]R)(")
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ double-quoted raw string
+ end
+ ((?<=")(")|")|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+ 3
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.double.single-line.unicode-raw.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_unicode_char
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (r)(")
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ double-quoted raw string
+ end
+ ((?<=")(")|")|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+ 3
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.double.single-line.raw-regex.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+ include
+ #regular_expressions
+
+
+
+
+ begin
+ (R)(")
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ double-quoted raw string
+ end
+ ((?<=")(")|")|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+ 3
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.double.single-line.raw.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ ([uU])(")
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ double quoted unicode string
+ end
+ ((?<=")(")|")|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+ 3
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.double.single-line.unicode.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_unicode_char
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (""")(?=\s*(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER))
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ double quoted string
+ end
+ ((?<=""")(")""|""")
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+
+ name
+ string.quoted.double.block.sql.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+ include
+ source.sql
+
+
+
+
+ begin
+ (")(?=\s*(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER))
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ double quoted string
+ end
+ ((?<=")(")|")|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+ 3
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.double.single-line.sql.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+ include
+ source.sql
+
+
+
+
+ begin
+ (""")
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ double quoted string
+ end
+ ((?<=""")(")""|""")
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+
+ name
+ string.quoted.double.block.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (")
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ double quoted string
+ end
+ ((?<=")(")|")|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.double.python
+
+ 3
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.double.single-line.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+
+
+
+ string_quoted_single
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.python
+
+ 2
+
+ name
+ punctuation.definition.string.end.python
+
+ 3
+
+ name
+ meta.empty-string.single.python
+
+
+ match
+ (?<!')(')(('))(?!')
+ name
+ string.quoted.single.single-line.python
+
+
+ begin
+ ([uU]r)(''')
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted unicode-raw string
+ end
+ ((?<=''')(')''|''')
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.single.python
+
+
+ name
+ string.quoted.single.block.unicode-raw-regex.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_unicode_char
+
+
+ include
+ #escaped_char
+
+
+ include
+ #regular_expressions
+
+
+
+
+ begin
+ ([uU]R)(''')
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted unicode-raw string
+ end
+ ((?<=''')(')''|''')
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.single.python
+
+
+ name
+ string.quoted.single.block.unicode-raw.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_unicode_char
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (r)(''')
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted raw string
+ end
+ ((?<=''')(')''|''')
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.single.python
+
+
+ name
+ string.quoted.single.block.raw-regex.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+ include
+ #regular_expressions
+
+
+
+
+ begin
+ (R)(''')
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted raw string
+ end
+ ((?<=''')(')''|''')
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.single.python
+
+
+ name
+ string.quoted.single.block.raw.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ ([uU])(''')
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted unicode string
+ end
+ ((?<=''')(')''|''')
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.single.python
+
+
+ name
+ string.quoted.single.block.unicode.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_unicode_char
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ ([uU]r)(')
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted raw string
+ end
+ (')|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.single.single-line.unicode-raw-regex.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_unicode_char
+
+
+ include
+ #escaped_char
+
+
+ include
+ #regular_expressions
+
+
+
+
+ begin
+ ([uU]R)(')
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted raw string
+ end
+ (')|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.single.single-line.unicode-raw.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_unicode_char
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (r)(')
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted raw string
+ end
+ (')|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.single.single-line.raw-regex.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+ include
+ #regular_expressions
+
+
+
+
+ begin
+ (R)(')
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted raw string
+ end
+ (')|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.single.single-line.raw.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ ([uU])(')
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.python
+
+ 2
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted unicode string
+ end
+ (')|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.single.single-line.unicode.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_unicode_char
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (''')(?=\s*(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER))
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted string
+ end
+ ((?<=''')(')''|''')
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.single.python
+
+
+ name
+ string.quoted.single.block.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+ include
+ source.sql
+
+
+
+
+ begin
+ (')(?=\s*(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER))
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted string
+ end
+ (')|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.single.single-line.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+ include
+ source.sql
+
+
+
+
+ begin
+ (''')
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted string
+ end
+ ((?<=''')(')''|''')
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ meta.empty-string.single.python
+
+
+ name
+ string.quoted.single.block.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (')
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.python
+
+
+ comment
+ single quoted string
+ end
+ (')|(\n)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.python
+
+ 2
+
+ name
+ invalid.illegal.unclosed-string.python
+
+
+ name
+ string.quoted.single.single-line.python
+ patterns
+
+
+ include
+ #constant_placeholder
+
+
+ include
+ #escaped_char
+
+
+
+
+
+ strings
+
+ patterns
+
+
+ include
+ #string_quoted_double
+
+
+ include
+ #string_quoted_single
+
+
+
+
+ scopeName
+ source.python
+ uuid
+ F23DB5B2-7D08-11D9-A709-000D93B6E43C
+
+
diff --git a/app/rcc/edbee/syntaxfiles/R Console.tmLanguage b/app/rcc/edbee/syntaxfiles/R Console.tmLanguage
new file mode 100644
index 00000000..d47004ca
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/R Console.tmLanguage
@@ -0,0 +1,42 @@
+
+
+
+
+ fileTypes
+
+ keyEquivalent
+ ^~R
+ name
+ R Console
+ patterns
+
+
+ begin
+ ^>
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.r-console
+
+
+ end
+ \n|\z
+ name
+ source.r.embedded.r-console
+ patterns
+
+
+ include
+ source.r
+
+
+
+
+ scopeName
+ source.r-console
+ uuid
+ F629C7F3-823B-4A4C-8EEE-9971490C5710
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Rd (R Documentation).tmLanguage b/app/rcc/edbee/syntaxfiles/Rd (R Documentation).tmLanguage
new file mode 100644
index 00000000..80247106
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Rd (R Documentation).tmLanguage
@@ -0,0 +1,243 @@
+
+
+
+
+ fileTypes
+
+ rd
+
+ foldingStartMarker
+ /\w*\{\s*$
+ foldingStopMarker
+ ^\s*\}
+ keyEquivalent
+ ^~R
+ name
+ Rd (R Documentation)
+ patterns
+
+
+ begin
+ ((\\)(?:alias|docType|keyword|name|title))(\{)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.section.rd
+
+ 2
+
+ name
+ punctuation.definition.function.rd
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.rd
+
+
+ contentName
+ entity.name.tag.rd
+ end
+ (\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.end.rd
+
+
+ name
+ meta.section.rd
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ((\\)(?:details|format|references|source))(\{)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.section.rd
+
+ 2
+
+ name
+ punctuation.definition.function.rd
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.rd
+
+
+ end
+ (\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.end.rd
+
+
+ name
+ meta.section.rd
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ((\\)(?:usage))(\{)(?:\n)?
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.usage.rd
+
+ 2
+
+ name
+ punctuation.definition.function.rd
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.rd
+
+
+ contentName
+ source.r.embedded
+ end
+ (\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.end.rd
+
+
+ name
+ meta.usage.rd
+ patterns
+
+
+ include
+ source.r
+
+
+
+
+ begin
+ ((\\)(?:examples))(\{)(?:\n)?
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.examples.rd
+
+ 2
+
+ name
+ punctuation.definition.function.rd
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.rd
+
+
+ contentName
+ source.r.embedded
+ end
+ (\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.arguments.end.rd
+
+
+ name
+ meta.examples.rd
+ patterns
+
+
+ include
+ source.r
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.author.rd
+
+ 2
+
+ name
+ punctuation.definition.function.rd
+
+ 3
+
+ name
+ punctuation.definition.arguments.begin.rd
+
+ 4
+
+ name
+ entity.name.tag.author.rd
+
+ 5
+
+ name
+ punctuation.definition.link.rd
+
+ 6
+
+ name
+ markup.underline.link.rd
+
+ 7
+
+ name
+ punctuation.definition.link.rd
+
+
+ match
+ ((\\)(?:author))(\{)([\w\s]+?)\s+(<)([^>]*)(>)
+ name
+ meta.author.rd
+
+
+ include
+ text.tex.latex
+
+
+ scopeName
+ text.tex.latex.rd
+ uuid
+ 80A00288-FE7E-4E66-B5BF-4948A2828203
+
+
diff --git a/app/rcc/edbee/syntaxfiles/RegExp.tmLanguage b/app/rcc/edbee/syntaxfiles/RegExp.tmLanguage
new file mode 100644
index 00000000..e0b6971d
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/RegExp.tmLanguage
@@ -0,0 +1,142 @@
+
+
+
+
+ comment
+ Matches Oniguruma's Ruby regexp syntax (TextMate uses Oniguruma in Ruby mode).
+ fileTypes
+
+ re
+
+ foldingStartMarker
+ (/\*|\{|\()
+ foldingStopMarker
+ (\*/|\}|\))
+ keyEquivalent
+ ^~R
+ name
+ Regular Expression
+ patterns
+
+
+ match
+ \|
+ name
+ keyword.operator.regexp
+
+
+ match
+ \\[bBAZzG^$]
+ name
+ keyword.control.anchors.regexp
+
+
+ include
+ #character_class
+
+
+ include
+ #escaped_char
+
+
+ begin
+ \[(?:\^?\])?
+ end
+ \]
+ name
+ keyword.control.set.regexp
+ patterns
+
+
+ include
+ #character_class
+
+
+ include
+ #escaped_char
+
+
+ match
+ .-.
+ name
+ constant.other.range.regexp
+
+
+ match
+ .&&.
+ name
+ keyword.operator.intersection.regexp
+
+
+
+
+ begin
+ \(
+ end
+ \)
+ name
+ string.regexp.group
+ patterns
+
+
+ include
+ source.regexp
+
+
+ match
+ (?<=\()\?(<[=!]|>|=|:|!)
+ name
+ constant.other.assertion.regexp
+
+
+ match
+ (?<=\()\?#
+ name
+ comment.line.number-sign.regexp
+
+
+
+
+ match
+ \\(\n\d+|\k\w+|(?<!\|)\g\w+)
+ name
+ keyword.other.backref-and-recursion.regexp
+
+
+ match
+ \\([tvnrbfae]|[0-8]{3}|x\H\H\{7\H{7}\}|x\H\H|c\d+|C-\d+|M-\d+|M-\\C-\d+)
+ name
+ constant.character.escape.regexp
+
+
+ match
+ ((?<!\()[?*+][?+]?)|\{\d*,\d*\}
+ name
+ keyword.operator.quantifier.regexp
+
+
+ repository
+
+ character_class
+
+ match
+ \\[wWsSdDhH]
+ name
+ keyword.control.character-class.regexp
+
+ escaped_char
+
+ comment
+ escaped character
+ match
+ \\.
+ name
+ constant.character.escape.regexp
+
+
+ scopeName
+ source.regexp
+ uuid
+ BAFE4C4F-8D59-48CD-A3BC-52A2084531C9
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Ruby Haml.tmLanguage b/app/rcc/edbee/syntaxfiles/Ruby Haml.tmLanguage
new file mode 100644
index 00000000..88d43f26
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Ruby Haml.tmLanguage
@@ -0,0 +1,248 @@
+
+
+
+
+ fileTypes
+
+ haml
+ sass
+
+ foldingStartMarker
+ ^\s*([-%#\:\.\w\=].*)\s$
+ foldingStopMarker
+ ^\s*$
+ keyEquivalent
+ ^~H
+ name
+ Ruby Haml
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.prolog.haml
+
+
+ match
+ ^(!!!)($|\s.*)
+ name
+ meta.prolog.haml
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.section.comment.haml
+
+
+ match
+ ^ *(/)\s*\S.*$\n?
+ name
+ comment.line.slash.haml
+
+
+ begin
+ ^( *)(/)\s*$
+ beginCaptures
+
+ 2
+
+ name
+ punctuation.section.comment.haml
+
+
+ end
+ ^(?!\1 )
+ name
+ comment.block.haml
+ patterns
+
+
+ include
+ text.haml
+
+
+
+
+ begin
+ ^\s*(?:((%)([\w:]+))|(?=\.|#))
+ captures
+
+ 1
+
+ name
+ meta.tag.haml
+
+ 2
+
+ name
+ punctuation.definition.tag.haml
+
+ 3
+
+ name
+ entity.name.tag.haml
+
+
+ end
+ $|(?!\.|#|\{|\[|=|-|~|/)
+ patterns
+
+
+ match
+ \.[\w-]+
+ name
+ entity.name.tag.class.haml
+
+
+ match
+ #[\w-]+
+ name
+ entity.name.tag.id.haml
+
+
+ begin
+ \{(?=.*\}|.*\|\s*$)
+ end
+ \}|$|^(?!.*\|\s*$)
+ name
+ meta.section.attributes.haml
+ patterns
+
+
+ include
+ source.ruby.rails
+
+
+ include
+ #continuation
+
+
+
+
+ begin
+ \[(?=.*\]|.*\|\s*$)
+ end
+ \]|$|^(?!.*\|\s*$)
+ name
+ meta.section.object.haml
+ patterns
+
+
+ include
+ source.ruby.rails
+
+
+ include
+ #continuation
+
+
+
+
+ include
+ #rubyline
+
+
+ match
+ /
+ name
+ punctuation.terminator.tag.haml
+
+
+
+
+ captures
+
+ 1
+
+ name
+ meta.escape.haml
+
+
+ match
+ ^\s*(\\.)
+
+
+ begin
+ ^\s*(?==|-|~)
+ end
+ $
+ patterns
+
+
+ include
+ #rubyline
+
+
+
+
+ repository
+
+ continuation
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.continuation.haml
+
+
+ match
+ (\|)\s*\n
+
+ rubyline
+
+ begin
+ =|-|~
+ contentName
+ source.ruby.embedded.haml
+ end
+ ((do|\{)( \|[^|]+\|)?)$|$|^(?!.*\|\s*$)
+ endCaptures
+
+ 1
+
+ name
+ source.ruby.embedded.html
+
+ 2
+
+ name
+ keyword.control.ruby.start-block
+
+
+ name
+ meta.line.ruby.haml
+ patterns
+
+
+ comment
+ Hack to let ruby comments work in this context properly
+ match
+ #.*$
+ name
+ comment.line.number-sign.ruby
+
+
+ include
+ source.ruby.rails
+
+
+ include
+ #continuation
+
+
+
+
+ scopeName
+ text.haml
+ uuid
+ 3D727049-DD05-45DF-92A5-D50EA36FD035
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Ruby on Rails.tmLanguage b/app/rcc/edbee/syntaxfiles/Ruby on Rails.tmLanguage
new file mode 100644
index 00000000..f9901de8
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Ruby on Rails.tmLanguage
@@ -0,0 +1,287 @@
+
+
+
+
+ fileTypes
+
+ rxml
+ builder
+
+ foldingStartMarker
+ (?x)^
+ (\s*+
+ (module|class|def
+ |unless|if
+ |case
+ |begin
+ |for|while|until
+ |( "(\\.|[^"])*+" # eat a double quoted string
+ | '(\\.|[^'])*+' # eat a single quoted string
+ | [^#"'] # eat all but comments and strings
+ )*
+ ( \s (do|begin|case)
+ | [-+=&|*/~%^<>~] \s*+ (if|unless)
+ )
+ )\b
+ (?! [^;]*+ ; .*? \bend\b )
+ |( "(\\.|[^"])*+" # eat a double quoted string
+ | '(\\.|[^'])*+' # eat a single quoted string
+ | [^#"'] # eat all but comments and strings
+ )*
+ ( \{ (?! [^}]*+ \} )
+ | \[ (?! [^\]]*+ \] )
+ )
+ ).*$
+ | [#] .*? \(fold\) \s*+ $ # Sune’s special marker
+
+ foldingStopMarker
+ (?x)
+ ( (^|;) \s*+ end \s*+ ([#].*)? $
+ | ^ \s*+ [}\]] \s*+ ([#].*)? $
+ | [#] .*? \(end\) \s*+ $ # Sune’s special marker
+ )
+ keyEquivalent
+ ^~R
+ name
+ Ruby on Rails
+ patterns
+
+
+ begin
+ (^\s*)(?=class\s+(([.a-zA-Z0-9_:]+ControllerTest(\s*<\s*[.a-zA-Z0-9_:]+)?)))
+ comment
+ Uses lookahead to match classes with the ControllerTest suffix; includes 'source.ruby' to avoid infinite recursion
+ end
+ ^\1(?=end)\b
+ name
+ meta.rails.functional_test
+ patterns
+
+
+ include
+ source.ruby
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (^\s*)(?=class\s+(([.a-zA-Z0-9_:]+Controller\b(\s*<\s*[.a-zA-Z0-9_:]+)?)|(<<\s*[.a-zA-Z0-9_:]+)))(?!.+\bend\b)
+ comment
+ Uses lookahead to match classes with the Controller suffix; includes 'source.ruby' to avoid infinite recursion
+ end
+ ^\1(?=end)\b
+ name
+ meta.rails.controller
+ patterns
+
+
+ include
+ source.ruby
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (^\s*)(?=module\s+((([A-Z]\w*::)*)[A-Z]\w*)Helper)
+ comment
+ Uses lookahead to match modules with the Helper suffix; includes 'source.ruby' to avoid infinite recursion
+ end
+ ^\1(?=end)\b
+ name
+ meta.rails.helper
+ patterns
+
+
+ include
+ source.ruby
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (^\s*)(?=class\s+(([.a-zA-Z0-9_:]+(\s*<\s*ActionMailer::Base))))
+ comment
+ Uses lookahead to match classes that inherit from ActionMailer::Base; includes 'source.ruby' to avoid infinite recursion
+ end
+ ^\1(?=end)\b
+ name
+ meta.rails.mailer
+ patterns
+
+
+ include
+ source.ruby
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (^\s*)(?=class\s+.+ActiveRecord::Base)
+ comment
+ Uses lookahead to match classes that (may) inherit from ActiveRecord::Base; includes 'source.ruby' to avoid infinite recursion
+ end
+ ^\1(?=end)\b
+ name
+ meta.rails.model
+ patterns
+
+
+ include
+ source.ruby
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (^\s*)(?=class\s+.+ActiveRecord::Migration)
+ comment
+ Uses lookahead to match classes that (may) inherit from ActiveRecord::Migration; includes 'source.ruby' to avoid infinite recursion
+ end
+ ^\1(?=end)\b
+ name
+ meta.rails.migration
+ patterns
+
+
+ begin
+ (^\s*)(?=change_table)\b
+ comment
+ Uses lookahead to match methods change_table; includes 'source.ruby' to avoid infinite recursion
+ contentName
+ meta.rails.migration.change_table
+ end
+ ^\1(?=end)\b
+ patterns
+
+
+ include
+ source.ruby
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (^\s*)(?=create_table)\b
+ comment
+ Uses lookahead to match methods create_table; includes 'source.ruby' to avoid infinite recursion
+ contentName
+ meta.rails.migration.create_table
+ end
+ ^\1(?=end)\b
+ patterns
+
+
+ include
+ source.ruby
+
+
+ include
+ $self
+
+
+
+
+ include
+ source.ruby
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (^\s*)(?=class\s+(?![.a-zA-Z0-9_:]+ControllerTest)(([.a-zA-Z0-9_:]+Test(\s*<\s*[.a-zA-Z0-9_:]+)?)|(<<\s*[.a-zA-Z0-9_:]+)))
+ comment
+ Uses lookahead to match classes with the Test suffix; includes 'source.ruby' to avoid infinite recursion
+ end
+ ^\1(?=end)\b
+ name
+ meta.rails.unit_test
+ patterns
+
+
+ include
+ source.ruby
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (^\s*)ActionController::Routing::Routes
+ comment
+ Uses ActionController::Routing::Routes to determine it is a routes file; includes 'source.ruby' to avoid infinite recursion
+ end
+ ^\1(?=end)\b
+ name
+ meta.rails.routes
+ patterns
+
+
+ include
+ source.ruby
+
+
+ include
+ $self
+
+
+
+
+ match
+ \b(before_filter|skip_before_filter|skip_after_filter|after_filter|around_filter|filter|filter_parameter_logging|layout|require_dependency|render|render_action|render_text|render_file|render_template|render_nothing|render_component|render_without_layout|rescue_from|url_for|redirect_to|redirect_to_path|redirect_to_url|respond_to|helper|helper_method|model|service|observer|serialize|scaffold|verify|hide_action)\b
+ name
+ support.function.actionpack.rails
+
+
+ match
+ \b(named_scope|after_create|after_destroy|after_save|after_update|after_validation|after_validation_on_create|after_validation_on_update|before_create|before_destroy|before_save|before_update|before_validation|before_validation_on_create|before_validation_on_update|composed_of|belongs_to|has_one|has_many|has_and_belongs_to_many|validate|validate_on_create|validates_numericality_of|validate_on_update|validates_acceptance_of|validates_associated|validates_confirmation_of|validates_each|validates_format_of|validates_inclusion_of|validates_exclusion_of|validates_length_of|validates_presence_of|validates_size_of|validates_uniqueness_of|attr_protected|attr_accessible|attr_readonly)\b
+ name
+ support.function.activerecord.rails
+
+
+ match
+ \b(alias_method_chain|alias_attribute|delegate|cattr_accessor|mattr_accessor|returning)\b
+ name
+ support.function.activesupport.rails
+
+
+ include
+ source.ruby
+
+
+ scopeName
+ source.ruby.rails
+ uuid
+ 54D6E91E-8F31-11D9-90C5-0011242E4184
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Ruby.tmLanguage b/app/rcc/edbee/syntaxfiles/Ruby.tmLanguage
new file mode 100644
index 00000000..a1ea6df8
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Ruby.tmLanguage
@@ -0,0 +1,2854 @@
+
+
+
+
+ comment
+
+ TODO: unresolved issues
+
+ text:
+ "p << end
+ print me!
+ end"
+ symptoms:
+ not recognized as a heredoc
+ solution:
+ there is no way to distinguish perfectly between the << operator and the start
+ of a heredoc. Currently, we require assignment to recognize a heredoc. More
+ refinement is possible.
+ • Heredocs with indented terminators (<<-) are always distinguishable, however.
+ • Nested heredocs are not really supportable at present
+
+ text:
+ print <<-'THERE'
+ This is single quoted.
+ The above used #{Time.now}
+ THERE
+ symtoms:
+ From Programming Ruby p306; should be a non-interpolated heredoc.
+
+ text:
+ "a\332a"
+ symptoms:
+ '\332' is not recognized as slash3.. which should be octal 332.
+ solution:
+ plain regexp.. should be easy.
+
+ text:
+ val?(a):p(b)
+ val?'a':'b'
+ symptoms:
+ ':p' is recognized as a symbol.. its 2 things ':' and 'p'.
+ :'b' has same problem.
+ solution:
+ ternary operator rule, precedence stuff, symbol rule.
+ but also consider 'a.b?(:c)' ??
+
+ fileTypes
+
+ rb
+ rbx
+ rjs
+ Rakefile
+ rake
+ cgi
+ fcgi
+ gemspec
+ irbrc
+ capfile
+ Gemfile
+
+ firstLineMatch
+ ^#!/.*\bruby
+ foldingStartMarker
+ (?x)^
+ (\s*+
+ (module|class|def(?!.*\bend\s*$)
+ |unless|if
+ |case
+ |begin
+ |for|while|until
+ |^=begin
+ |( "(\\.|[^"])*+" # eat a double quoted string
+ | '(\\.|[^'])*+' # eat a single quoted string
+ | [^#"'] # eat all but comments and strings
+ )*
+ ( \s (do|begin|case)
+ | (?<!\$)[-+=&|*/~%^<>~] \s*+ (if|unless)
+ )
+ )\b
+ (?! [^;]*+ ; .*? \bend\b )
+ |( "(\\.|[^"])*+" # eat a double quoted string
+ | '(\\.|[^'])*+' # eat a single quoted string
+ | [^#"'] # eat all but comments and strings
+ )*
+ ( \{ (?! [^}]*+ \} )
+ | \[ (?! [^\]]*+ \] )
+ )
+ ).*$
+ | [#] .*? \(fold\) \s*+ $ # Sune’s special marker
+
+ foldingStopMarker
+ (?x)
+ ( (^|;) \s*+ end \s*+ ([#].*)? $
+ | (^|;) \s*+ end \. .* $
+ | ^ \s*+ [}\]] ,? \s*+ ([#].*)? $
+ | [#] .*? \(end\) \s*+ $ # Sune’s special marker
+ | ^=end
+ )
+ keyEquivalent
+ ^~R
+ name
+ Ruby
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.class.ruby
+
+ 2
+
+ name
+ entity.name.type.class.ruby
+
+ 4
+
+ name
+ entity.other.inherited-class.ruby
+
+ 5
+
+ name
+ punctuation.separator.inheritance.ruby
+
+ 6
+
+ name
+ variable.other.object.ruby
+
+ 7
+
+ name
+ punctuation.definition.variable.ruby
+
+
+ match
+ ^\s*(class)\s+(([.a-zA-Z0-9_:]+(\s*(<)\s*[.a-zA-Z0-9_:]+)?)|((<<)\s*[.a-zA-Z0-9_:]+))
+ name
+ meta.class.ruby
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.module.ruby
+
+ 2
+
+ name
+ entity.name.type.module.ruby
+
+ 3
+
+ name
+ entity.other.inherited-class.module.first.ruby
+
+ 4
+
+ name
+ punctuation.separator.inheritance.ruby
+
+ 5
+
+ name
+ entity.other.inherited-class.module.second.ruby
+
+ 6
+
+ name
+ punctuation.separator.inheritance.ruby
+
+ 7
+
+ name
+ entity.other.inherited-class.module.third.ruby
+
+ 8
+
+ name
+ punctuation.separator.inheritance.ruby
+
+
+ match
+ ^\s*(module)\s+(([A-Z]\w*(::))?([A-Z]\w*(::))?([A-Z]\w*(::))*[A-Z]\w*)
+ name
+ meta.module.ruby
+
+
+ comment
+ else if is a common mistake carried over from other languages. it works if you put in a second end, but it’s never what you want.
+ match
+ (?<!\.)\belse(\s)+if\b
+ name
+ invalid.deprecated.ruby
+
+
+ comment
+ everything being a reserved word, not a value and needing a 'end' is a..
+ match
+ (?<!\.)\b(BEGIN|begin|case|class|else|elsif|END|end|ensure|for|if|in|module|rescue|then|unless|until|when|while)\b(?![?!])
+ name
+ keyword.control.ruby
+
+
+ comment
+ contextual smart pair support for block parameters
+ match
+ (?<!\.)\bdo\b\s*
+ name
+ keyword.control.start-block.ruby
+
+
+ comment
+ contextual smart pair support
+ match
+ (?<=\{)(\s+)
+ name
+ meta.syntax.ruby.start-block
+
+
+ comment
+ as above, just doesn't need a 'end' and does a logic operation
+ match
+ (?<!\.)\b(and|not|or)\b
+ name
+ keyword.operator.logical.ruby
+
+
+ comment
+ just as above but being not a logical operation
+ match
+ (?<!\.)\b(alias|alias_method|break|next|redo|retry|return|super|undef|yield)\b(?![?!])|\bdefined\?|\bblock_given\?
+ name
+ keyword.control.pseudo-method.ruby
+
+
+ match
+ \b(nil|true|false)\b(?![?!])
+ name
+ constant.language.ruby
+
+
+ match
+ \b(__(FILE|LINE)__|self)\b(?![?!])
+ name
+ variable.language.ruby
+
+
+ comment
+ everything being a method but having a special function is a..
+ match
+ \b(initialize|new|loop|include|extend|raise|attr_reader|attr_writer|attr_accessor|attr|catch|throw|private|module_function|public|protected)\b(?![?!])
+ name
+ keyword.other.special-method.ruby
+
+
+ begin
+ \b(require|gem)\b
+ captures
+
+ 1
+
+ name
+ keyword.other.special-method.ruby
+
+
+ end
+ $|(?=#)
+ name
+ meta.require.ruby
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.ruby
+
+
+ match
+ (@)[a-zA-Z_]\w*
+ name
+ variable.other.readwrite.instance.ruby
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.ruby
+
+
+ match
+ (@@)[a-zA-Z_]\w*
+ name
+ variable.other.readwrite.class.ruby
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.ruby
+
+
+ match
+ (\$)[a-zA-Z_]\w*
+ name
+ variable.other.readwrite.global.ruby
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.ruby
+
+
+ match
+ (\$)(!|@|&|`|'|\+|\d+|~|=|/|\\|,|;|\.|<|>|_|\*|\$|\?|:|"|-[0adFiIlpv])
+ name
+ variable.other.readwrite.global.pre-defined.ruby
+
+
+ begin
+ \b(ENV)\[
+ beginCaptures
+
+ 1
+
+ name
+ variable.other.constant.ruby
+
+
+ end
+ \]
+ name
+ meta.environment-variable.ruby
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ match
+ \b[A-Z]\w*(?=((\.|::)[A-Za-z]|\[))
+ name
+ support.class.ruby
+
+
+ match
+ \b[A-Z]\w*\b
+ name
+ variable.other.constant.ruby
+
+
+ begin
+ (?x)
+ (?=def\b) # an optimization to help Oniguruma fail fast
+ (?<=^|\s)(def)\s+ # the def keyword
+ ( (?>[a-zA-Z_]\w*(?>\.|::))? # a method name prefix
+ (?>[a-zA-Z_]\w*(?>[?!]|=(?!>))? # the method name
+ |===?|>[>=]?|<=>|<[<=]?|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\]=?) ) # …or an operator method
+ \s*(\() # the openning parenthesis for arguments
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.def.ruby
+
+ 2
+
+ name
+ entity.name.function.ruby
+
+ 3
+
+ name
+ punctuation.definition.parameters.ruby
+
+
+ comment
+ the method pattern comes from the symbol pattern, see there for a explaination
+ contentName
+ variable.parameter.function.ruby
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.ruby
+
+
+ name
+ meta.function.method.with-arguments.ruby
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (?x)
+ (?=def\b) # an optimization to help Oniguruma fail fast
+ (?<=^|\s)(def)\s+ # the def keyword
+ ( (?>[a-zA-Z_]\w*(?>\.|::))? # a method name prefix
+ (?>[a-zA-Z_]\w*(?>[?!]|=(?!>))? # the method name
+ |===?|>[>=]?|<=>|<[<=]?|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\]=?) ) # …or an operator method
+ [ \t] # the space separating the arguments
+ (?=[ \t]*[^\s#;]) # make sure arguments and not a comment follow
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.def.ruby
+
+ 2
+
+ name
+ entity.name.function.ruby
+
+
+ comment
+ same as the previous rule, but without parentheses around the arguments
+ contentName
+ variable.parameter.function.ruby
+ end
+ $
+ name
+ meta.function.method.with-arguments.ruby
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.def.ruby
+
+ 3
+
+ name
+ entity.name.function.ruby
+
+
+ comment
+ the optional name is just to catch the def also without a method-name
+ match
+ (?x)
+ (?=def\b) # an optimization to help Oniguruma fail fast
+ (?<=^|\s)(def)\b # the def keyword
+ ( \s+ # an optional group of whitespace followed by…
+ ( (?>[a-zA-Z_]\w*(?>\.|::))? # a method name prefix
+ (?>[a-zA-Z_]\w*(?>[?!]|=(?!>))? # the method name
+ |===?|>[>=]?|<=>|<[<=]?|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\]=?) ) )? # …or an operator method
+
+ name
+ meta.function.method.without-arguments.ruby
+
+
+ match
+ \b(0[xX]\h(?>_?\h)*|\d(?>_?\d)*(\.(?![^[:space:][:digit:]])(?>_?\d)*)?([eE][-+]?\d(?>_?\d)*)?|0[bB][01]+)\b
+ name
+ constant.numeric.ruby
+
+
+ begin
+ :'
+ captures
+
+ 0
+
+ name
+ punctuation.definition.constant.ruby
+
+
+ end
+ '
+ name
+ constant.other.symbol.single-quoted.ruby
+ patterns
+
+
+ match
+ \\['\\]
+ name
+ constant.character.escape.ruby
+
+
+
+
+ begin
+ :"
+ captures
+
+ 0
+
+ name
+ punctuation.definition.constant.ruby
+
+
+ end
+ "
+ name
+ constant.other.symbol.double-quoted.ruby
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ comment
+ Needs higher precidence than regular expressions.
+ match
+ /=
+ name
+ keyword.operator.assignment.augmented.ruby
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ single quoted string (does not allow interpolation)
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.quoted.single.ruby
+ patterns
+
+
+ match
+ \\'|\\\\
+ name
+ constant.character.escape.ruby
+
+
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ double quoted string (allows for interpolation)
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.quoted.double.ruby
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ `
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ execute string (allows for interpolation)
+ end
+ `
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.interpolated.ruby
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ %x\{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ execute string (allow for interpolation)
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.interpolated.ruby
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nest_curly_i
+
+
+
+
+ begin
+ %x\[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ execute string (allow for interpolation)
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.interpolated.ruby
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nest_brackets_i
+
+
+
+
+ begin
+ %x\<
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ execute string (allow for interpolation)
+ end
+ \>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.interpolated.ruby
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nest_ltgt_i
+
+
+
+
+ begin
+ %x\(
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ execute string (allow for interpolation)
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.interpolated.ruby
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nest_parens_i
+
+
+
+
+ begin
+ %x([^\w])
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ execute string (allow for interpolation)
+ end
+ \1
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.interpolated.ruby
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (?x)
+ (?:
+ ^ # beginning of line
+ | (?<= # or look-behind on:
+ [=>~(?:\[,|&;]
+ | [\s;]if\s # keywords
+ | [\s;]elsif\s
+ | [\s;]while\s
+ | [\s;]unless\s
+ | [\s;]when\s
+ | [\s;]assert_match\s
+ | [\s;]or\s # boolean opperators
+ | [\s;]and\s
+ | [\s;]not\s
+ | [\s.]index\s # methods
+ | [\s.]scan\s
+ | [\s.]sub\s
+ | [\s.]sub!\s
+ | [\s.]gsub\s
+ | [\s.]gsub!\s
+ | [\s.]match\s
+ )
+ | (?<= # or a look-behind with line anchor:
+ ^when\s # duplication necessary due to limits of regex
+ | ^if\s
+ | ^elsif\s
+ | ^while\s
+ | ^unless\s
+ )
+ )
+ \s*((/))(?![*+{}?])
+
+ captures
+
+ 1
+
+ name
+ string.regexp.classic.ruby
+
+ 2
+
+ name
+ punctuation.definition.string.ruby
+
+
+ comment
+ regular expressions (normal)
+ we only start a regexp if the character before it (excluding whitespace)
+ is what we think is before a regexp
+
+ contentName
+ string.regexp.classic.ruby
+ end
+ ((/[eimnosux]*))
+ patterns
+
+
+ include
+ #regex_sub
+
+
+
+
+ begin
+ %r\{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ regular expressions (literal)
+ end
+ \}[eimnosux]*
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.regexp.mod-r.ruby
+ patterns
+
+
+ include
+ #regex_sub
+
+
+ include
+ #nest_curly_r
+
+
+
+
+ begin
+ %r\[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ regular expressions (literal)
+ end
+ \][eimnosux]*
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.regexp.mod-r.ruby
+ patterns
+
+
+ include
+ #regex_sub
+
+
+ include
+ #nest_brackets_r
+
+
+
+
+ begin
+ %r\(
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ regular expressions (literal)
+ end
+ \)[eimnosux]*
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.regexp.mod-r.ruby
+ patterns
+
+
+ include
+ #regex_sub
+
+
+ include
+ #nest_parens_r
+
+
+
+
+ begin
+ %r\<
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ regular expressions (literal)
+ end
+ \>[eimnosux]*
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.regexp.mod-r.ruby
+ patterns
+
+
+ include
+ #regex_sub
+
+
+ include
+ #nest_ltgt_r
+
+
+
+
+ begin
+ %r([^\w])
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ regular expressions (literal)
+ end
+ \1[eimnosux]*
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.regexp.mod-r.ruby
+ patterns
+
+
+ include
+ #regex_sub
+
+
+
+
+ begin
+ %[QWSR]?\(
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ literal capable of interpolation ()
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.quoted.other.literal.upper.ruby
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nest_parens_i
+
+
+
+
+ begin
+ %[QWSR]?\[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ literal capable of interpolation []
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.quoted.other.literal.upper.ruby
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nest_brackets_i
+
+
+
+
+ begin
+ %[QWSR]?\<
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ literal capable of interpolation <>
+ end
+ \>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.quoted.other.literal.upper.ruby
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nest_ltgt_i
+
+
+
+
+ begin
+ %[QWSR]?\{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ literal capable of interpolation -- {}
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.quoted.double.ruby.mod
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nest_curly_i
+
+
+
+
+ begin
+ %[QWSR]([^\w])
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ literal capable of interpolation -- wildcard
+ end
+ \1
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.quoted.other.literal.upper.ruby
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ %([^\w\s=])
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ literal capable of interpolation -- wildcard
+ end
+ \1
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.quoted.other.literal.other.ruby
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ %[qws]\(
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ literal incapable of interpolation -- ()
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.quoted.other.literal.lower.ruby
+ patterns
+
+
+ match
+ \\\)|\\\\
+ name
+ constant.character.escape.ruby
+
+
+ include
+ #nest_parens
+
+
+
+
+ begin
+ %[qws]\<
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ literal incapable of interpolation -- <>
+ end
+ \>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.quoted.other.literal.lower.ruby
+ patterns
+
+
+ match
+ \\\>|\\\\
+ name
+ constant.character.escape.ruby
+
+
+ include
+ #nest_ltgt
+
+
+
+
+ begin
+ %[qws]\[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ literal incapable of interpolation -- []
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.quoted.other.literal.lower.ruby
+ patterns
+
+
+ match
+ \\\]|\\\\
+ name
+ constant.character.escape.ruby
+
+
+ include
+ #nest_brackets
+
+
+
+
+ begin
+ %[qws]\{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ literal incapable of interpolation -- {}
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.quoted.other.literal.lower.ruby
+ patterns
+
+
+ match
+ \\\}|\\\\
+ name
+ constant.character.escape.ruby
+
+
+ include
+ #nest_curly
+
+
+
+
+ begin
+ %[qws]([^\w])
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ literal incapable of interpolation -- wildcard
+ end
+ \1
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.quoted.other.literal.lower.ruby
+ patterns
+
+
+ comment
+ Cant be named because its not neccesarily an escape.
+ match
+ \\.
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.ruby
+
+
+ comment
+ symbols
+ match
+ (?<!:)(:)(?>[a-zA-Z_]\w*(?>[?!]|=(?![>=]))?|===?|>[>=]?|<[<=]?|<=>|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\]=?|@@?[a-zA-Z_]\w*)
+ name
+ constant.other.symbol.ruby
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.ruby
+
+
+ comment
+ symbols
+ match
+ (?>[a-zA-Z_]\w*(?>[?!])?)(:)(?!:)
+ name
+ constant.other.symbol.ruby.19syntax
+
+
+ begin
+ ^=begin
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.ruby
+
+
+ comment
+ multiline comments
+ end
+ ^=end
+ name
+ comment.block.documentation.ruby
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.ruby
+
+
+ match
+ (?:^[ \t]+)?(#).*$\n?
+ name
+ comment.line.number-sign.ruby
+
+
+ comment
+
+ matches questionmark-letters.
+
+ examples (1st alternation = hex):
+ ?\x1 ?\x61
+
+ examples (2nd alternation = octal):
+ ?\0 ?\07 ?\017
+
+ examples (3rd alternation = escaped):
+ ?\n ?\b
+
+ examples (4th alternation = meta-ctrl):
+ ?\C-a ?\M-a ?\C-\M-\C-\M-a
+
+ examples (4th alternation = normal):
+ ?a ?A ?0
+ ?* ?" ?(
+ ?. ?#
+
+
+ the negative lookbehind prevents against matching
+ p(42.tainted?)
+
+ match
+ (?<!\w)\?(\\(x\h{1,2}(?!\h)\b|0[0-7]{0,2}(?![0-7])\b|[^x0MC])|(\\[MC]-)+\w|[^\s\\])
+ name
+ constant.numeric.ruby
+
+
+ begin
+ ^__END__\n
+ captures
+
+ 0
+
+ name
+ string.unquoted.program-block.ruby
+
+
+ comment
+ __END__ marker
+ contentName
+ text.plain
+ end
+ (?=not)impossible
+ patterns
+
+
+ begin
+ (?=<?xml|<(?i:html\b)|!DOCTYPE (?i:html\b))
+ end
+ (?=not)impossible
+ name
+ text.html.embedded.ruby
+ patterns
+
+
+ include
+ text.html.basic
+
+
+
+
+
+
+ begin
+ (?><<-("?)((?:[_\w]+_|)HTML)\b\1)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ heredoc with embedded HTML and indented terminator
+ contentName
+ text.html.embedded.ruby
+ end
+ \s*\2$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.unquoted.embedded.html.ruby
+ patterns
+
+
+ include
+ #heredoc
+
+
+ include
+ text.html.basic
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (?><<-("?)((?:[_\w]+_|)SQL)\b\1)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ heredoc with embedded SQL and indented terminator
+ contentName
+ text.sql.embedded.ruby
+ end
+ \s*\2$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.unquoted.embedded.sql.ruby
+ patterns
+
+
+ include
+ #heredoc
+
+
+ include
+ source.sql
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (?><<-("?)((?:[_\w]+_|)CSS)\b\1)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ heredoc with embedded css and intented terminator
+ contentName
+ text.css.embedded.ruby
+ end
+ \s*\2$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.unquoted.embedded.css.ruby
+ patterns
+
+
+ include
+ #heredoc
+
+
+ include
+ source.css
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (?><<-("?)((?:[_\w]+_|)CPP)\b\1)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ heredoc with embedded c++ and intented terminator
+ contentName
+ text.c++.embedded.ruby
+ end
+ \s*\2$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.unquoted.embedded.cplusplus.ruby
+ patterns
+
+
+ include
+ #heredoc
+
+
+ include
+ source.c++
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (?><<-("?)((?:[_\w]+_|)C)\b\1)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ heredoc with embedded c++ and intented terminator
+ contentName
+ text.c.embedded.ruby
+ end
+ \s*\2$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.unquoted.embedded.c.ruby
+ patterns
+
+
+ include
+ #heredoc
+
+
+ include
+ source.c
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (?><<-("?)((?:[_\w]+_|)(?:JS|JAVASCRIPT))\b\1)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ heredoc with embedded javascript and intented terminator
+ contentName
+ text.js.embedded.ruby
+ end
+ \s*\2$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.unquoted.embedded.js.ruby
+ patterns
+
+
+ include
+ #heredoc
+
+
+ include
+ source.js
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (?><<-("?)((?:[_\w]+_|)JQUERY)\b\1)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ heredoc with embedded javascript and intented terminator
+ contentName
+ text.js.jquery.embedded.ruby
+ end
+ \s*\2$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.unquoted.embedded.js.jquery.ruby
+ patterns
+
+
+ include
+ #heredoc
+
+
+ include
+ source.js.jquery
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (?><<-("?)((?:[_\w]+_|)(?:SH|SHELL))\b\1)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ heredoc with embedded shell and intented terminator
+ contentName
+ text.shell.embedded.ruby
+ end
+ \s*\2$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.unquoted.embedded.shell.ruby
+ patterns
+
+
+ include
+ #heredoc
+
+
+ include
+ source.shell
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (?><<-("?)((?:[_\w]+_|)RUBY)\b\1)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ heredoc with embedded ruby and intented terminator
+ contentName
+ text.ruby.embedded.ruby
+ end
+ \s*\2$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.unquoted.embedded.ruby.ruby
+ patterns
+
+
+ include
+ #heredoc
+
+
+ include
+ source.ruby
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (?>\=\s*<<(\w+))
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ end
+ ^\1$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.unquoted.heredoc.ruby
+ patterns
+
+
+ include
+ #heredoc
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (?><<-(\w+))
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.ruby
+
+
+ comment
+ heredoc with indented terminator
+ end
+ \s*\1$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.ruby
+
+
+ name
+ string.unquoted.heredoc.ruby
+ patterns
+
+
+ include
+ #heredoc
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ (?<=\{|do|\{\s|do\s)(\|)
+ captures
+
+ 1
+
+ name
+ punctuation.separator.variable.ruby
+
+
+ end
+ (\|)
+ patterns
+
+
+ match
+ [_a-zA-Z][_a-zA-Z0-9]*
+ name
+ variable.other.block.ruby
+
+
+ match
+ ,
+ name
+ punctuation.separator.variable.ruby
+
+
+
+
+ match
+ =>
+ name
+ punctuation.separator.key-value
+
+
+ match
+ <<=|%=|&=|\*=|\*\*=|\+=|\-=|\^=|\|{1,2}=|<<
+ name
+ keyword.operator.assignment.augmented.ruby
+
+
+ match
+ <=>|<(?!<|=)|>(?!<|=|>)|<=|>=|===|==|=~|!=|!~|(?<=[ \t])\?
+ name
+ keyword.operator.comparison.ruby
+
+
+ match
+ (?<=[ \t])!+|\bnot\b|&&|\band\b|\|\||\bor\b|\^
+ name
+ keyword.operator.logical.ruby
+
+
+ match
+ (%|&|\*\*|\*|\+|\-|/)
+ name
+ keyword.operator.arithmetic.ruby
+
+
+ match
+ =
+ name
+ keyword.operator.assignment.ruby
+
+
+ match
+ \||~|>>
+ name
+ keyword.operator.other.ruby
+
+
+ match
+ :
+ name
+ punctuation.separator.other.ruby
+
+
+ match
+ \;
+ name
+ punctuation.separator.statement.ruby
+
+
+ match
+ ,
+ name
+ punctuation.separator.object.ruby
+
+
+ match
+ \.|::
+ name
+ punctuation.separator.method.ruby
+
+
+ match
+ \{|\}
+ name
+ punctuation.section.scope.ruby
+
+
+ match
+ \[|\]
+ name
+ punctuation.section.array.ruby
+
+
+ match
+ \(|\)
+ name
+ punctuation.section.function.ruby
+
+
+ repository
+
+ escaped_char
+
+ match
+ \\(?:[0-7]{1,3}|x[\da-fA-F]{1,2}|.)
+ name
+ constant.character.escape.ruby
+
+ heredoc
+
+ begin
+ ^<<-?\w+
+ end
+ $
+ patterns
+
+
+ include
+ $self
+
+
+
+ interpolated_ruby
+
+ patterns
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.section.embedded.ruby
+
+ 1
+
+ name
+ source.ruby.embedded.source.empty
+
+
+ match
+ #\{(\})
+ name
+ source.ruby.embedded.source
+
+
+ begin
+ #\{
+ captures
+
+ 0
+
+ name
+ punctuation.section.embedded.ruby
+
+
+ end
+ \}
+ name
+ source.ruby.embedded.source
+ patterns
+
+
+ include
+ #nest_curly_and_self
+
+
+ include
+ $self
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.ruby
+
+
+ match
+ (#@)[a-zA-Z_]\w*
+ name
+ variable.other.readwrite.instance.ruby
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.ruby
+
+
+ match
+ (#@@)[a-zA-Z_]\w*
+ name
+ variable.other.readwrite.class.ruby
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.ruby
+
+
+ match
+ (#\$)[a-zA-Z_]\w*
+ name
+ variable.other.readwrite.global.ruby
+
+
+
+ nest_brackets
+
+ begin
+ \[
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.ruby
+
+
+ end
+ \]
+ patterns
+
+
+ include
+ #nest_brackets
+
+
+
+ nest_brackets_i
+
+ begin
+ \[
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.ruby
+
+
+ end
+ \]
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nest_brackets_i
+
+
+
+ nest_brackets_r
+
+ begin
+ \[
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.ruby
+
+
+ end
+ \]
+ patterns
+
+
+ include
+ #regex_sub
+
+
+ include
+ #nest_brackets_r
+
+
+
+ nest_curly
+
+ begin
+ \{
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.ruby
+
+
+ end
+ \}
+ patterns
+
+
+ include
+ #nest_curly
+
+
+
+ nest_curly_and_self
+
+ patterns
+
+
+ begin
+ \{
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.ruby
+
+
+ end
+ \}
+ patterns
+
+
+ include
+ #nest_curly_and_self
+
+
+
+
+ include
+ $self
+
+
+
+ nest_curly_i
+
+ begin
+ \{
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.ruby
+
+
+ end
+ \}
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nest_curly_i
+
+
+
+ nest_curly_r
+
+ begin
+ \{
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.ruby
+
+
+ end
+ \}
+ patterns
+
+
+ include
+ #regex_sub
+
+
+ include
+ #nest_curly_r
+
+
+
+ nest_ltgt
+
+ begin
+ \<
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.ruby
+
+
+ end
+ \>
+ patterns
+
+
+ include
+ #nest_ltgt
+
+
+
+ nest_ltgt_i
+
+ begin
+ \<
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.ruby
+
+
+ end
+ \>
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nest_ltgt_i
+
+
+
+ nest_ltgt_r
+
+ begin
+ \<
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.ruby
+
+
+ end
+ \>
+ patterns
+
+
+ include
+ #regex_sub
+
+
+ include
+ #nest_ltgt_r
+
+
+
+ nest_parens
+
+ begin
+ \(
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.ruby
+
+
+ end
+ \)
+ patterns
+
+
+ include
+ #nest_parens
+
+
+
+ nest_parens_i
+
+ begin
+ \(
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.ruby
+
+
+ end
+ \)
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+ include
+ #nest_parens_i
+
+
+
+ nest_parens_r
+
+ begin
+ \(
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.ruby
+
+
+ end
+ \)
+ patterns
+
+
+ include
+ #regex_sub
+
+
+ include
+ #nest_parens_r
+
+
+
+ regex_sub
+
+ patterns
+
+
+ include
+ #interpolated_ruby
+
+
+ include
+ #escaped_char
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.arbitrary-repitition.ruby
+
+ 3
+
+ name
+ punctuation.definition.arbitrary-repitition.ruby
+
+
+ match
+ (\{)\d+(,\d+)?(\})
+ name
+ string.regexp.arbitrary-repitition.ruby
+
+
+ begin
+ \[(?:\^?\])?
+ captures
+
+ 0
+
+ name
+ punctuation.definition.character-class.ruby
+
+
+ end
+ \]
+ name
+ string.regexp.character-class.ruby
+ patterns
+
+
+ include
+ #escaped_char
+
+
+
+
+ begin
+ \(
+ captures
+
+ 0
+
+ name
+ punctuation.definition.group.ruby
+
+
+ end
+ \)
+ name
+ string.regexp.group.ruby
+ patterns
+
+
+ include
+ #regex_sub
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.ruby
+
+
+ comment
+ We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.
+ match
+ (?<=^|\s)(#)\s[[a-zA-Z0-9,. \t?!-][^\x{00}-\x{7F}]]*$
+ name
+ comment.line.number-sign.ruby
+
+
+
+
+ scopeName
+ source.ruby
+ uuid
+ E00B62AC-6B1C-11D9-9B1F-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Rust.tmLanguage.json b/app/rcc/edbee/syntaxfiles/Rust.tmLanguage.json
new file mode 100644
index 00000000..e979469b
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Rust.tmLanguage.json
@@ -0,0 +1,981 @@
+{
+ "repository": {
+ "comment": {
+ "patterns": [
+ {
+ "name": "comment.block.documentation.rust",
+ "begin": "/\\*[\\*!](?![\\*/])",
+ "end": "\\*/",
+ "patterns": [
+ {
+ "begin": "(?x) (\\*\\b|\\b_)(?=\\S) # Open\n (?=\n (\n <[^>]*+> # HTML tags\n | (?`+)([^`]|(?!(?(?!`))`)*+\\k\n # Raw\n | \\\\[\\\\`*_{}\\[\\]()#.!+\\->]?+ # Escapes\n | \\[\n (\n (? # Named group\n [^\\[\\]\\\\] # Match most chars\n | \\\\. # Escaped chars\n | \\[ \\g*+ \\] # Nested brackets\n )*+\n \\]\n (\n ( # Reference Link\n [ ]? # Optional space\n \\[[^\\]]*+\\] # Ref name\n )\n | ( # Inline Link\n \\( # Opening paren\n [ \\t]*+ # Optional whtiespace\n (.*?)>? # URL\n [ \\t]*+ # Optional whtiespace\n ( # Optional Title\n (?['\"])\n (.*?)\n \\k\n )?\n \\)\n )\n )\n )\n | \\1\\1 # Must be bold closer\n | (?!(?<=\\S)\\1). # Everything besides\n # style closer\n )++\n (?<=\\S)(?=_\\b|\\*)\\1 # Close\n )\n",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.italic.markdown"
+ }
+ },
+ "end": "(?<=\\S)(\\1)((?!\\1)|(?=\\1\\1))",
+ "name": "markup.italic.markdown"
+ },
+ {
+ "begin": "(?x)\n ((?]*+> # HTML tags\n | (?`+)([^`]|(?!(?(?!`))`)*+\\k\n # Raw\n | \\\\[\\\\`*_{}\\[\\]()#.!+\\->]?+ # Escapes\n | \\[\n (\n (? # Named group\n [^\\[\\]\\\\] # Match most chars\n | \\\\. # Escaped chars\n | \\[ \\g*+ \\] # Nested brackets\n )*+\n \\]\n (\n ( # Reference Link\n [ ]? # Optional space\n \\[[^\\]]*+\\] # Ref name\n )\n | ( # Inline Link\n \\( # Opening paren\n [ \\t]*+ # Optional whitespace\n (.*?)>? # URL\n [ \\t]*+ # Optional whitespace\n ( # Optional Title\n (?['\"])\n (.*?)\n \\k\n )?\n \\)\n )\n )\n )\n | (?!(?<=\\S)\\1). # Everything besides\n # style closer\n )++\n (?<=\\S)(?=__\\b|\\*\\*)\\1 # Close\n )\n",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.bold.markdown"
+ }
+ },
+ "end": "(?<=\\S)(\\1)",
+ "name": "markup.bold.markdown"
+ },
+ {
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.raw.markdown"
+ },
+ "3": {
+ "name": "punctuation.definition.raw.markdown"
+ }
+ },
+ "match": "(`+)([^`]|(?!(?[^\\[\\]\\\\]|\\\\.|\\[\\g*+\\])*+)(\\])\n # Match the link text.\n (\\() # Opening paren for url\n ()(.*?)(>?) # The url\n [ \\t]* # Optional whitespace\n (?:\n ((\\().+?(\\))) # Match title in parens…\n | ((\").+?(\")) # or in quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n (\\))\n",
+ "name": "meta.link.inline.markdown"
+ }
+ ]
+ },
+ {
+ "name": "comment.block.rust",
+ "begin": "/\\*",
+ "end": "\\*/"
+ },
+ {
+ "name": "comment.line.documentation.rust",
+ "begin": "//[!/](?=[^/])",
+ "end": "$",
+ "patterns": [
+ {
+ "begin": "(?x) (\\*\\b|\\b_)(?=\\S) # Open\n (?=\n (\n <[^>]*+> # HTML tags\n | (?`+)([^`]|(?!(?(?!`))`)*+\\k\n # Raw\n | \\\\[\\\\`*_{}\\[\\]()#.!+\\->]?+ # Escapes\n | \\[\n (\n (? # Named group\n [^\\[\\]\\\\] # Match most chars\n | \\\\. # Escaped chars\n | \\[ \\g*+ \\] # Nested brackets\n )*+\n \\]\n (\n ( # Reference Link\n [ ]? # Optional space\n \\[[^\\]]*+\\] # Ref name\n )\n | ( # Inline Link\n \\( # Opening paren\n [ \\t]*+ # Optional whtiespace\n (.*?)>? # URL\n [ \\t]*+ # Optional whtiespace\n ( # Optional Title\n (?['\"])\n (.*?)\n \\k\n )?\n \\)\n )\n )\n )\n | \\1\\1 # Must be bold closer\n | (?!(?<=\\S)\\1). # Everything besides\n # style closer\n )++\n (?<=\\S)(?=_\\b|\\*)\\1 # Close\n )\n",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.italic.markdown"
+ }
+ },
+ "end": "(?<=\\S)(\\1)((?!\\1)|(?=\\1\\1))",
+ "name": "markup.italic.markdown"
+ },
+ {
+ "begin": "(?x)\n ((?]*+> # HTML tags\n | (?`+)([^`]|(?!(?(?!`))`)*+\\k\n # Raw\n | \\\\[\\\\`*_{}\\[\\]()#.!+\\->]?+ # Escapes\n | \\[\n (\n (? # Named group\n [^\\[\\]\\\\] # Match most chars\n | \\\\. # Escaped chars\n | \\[ \\g*+ \\] # Nested brackets\n )*+\n \\]\n (\n ( # Reference Link\n [ ]? # Optional space\n \\[[^\\]]*+\\] # Ref name\n )\n | ( # Inline Link\n \\( # Opening paren\n [ \\t]*+ # Optional whitespace\n (.*?)>? # URL\n [ \\t]*+ # Optional whitespace\n ( # Optional Title\n (?['\"])\n (.*?)\n \\k\n )?\n \\)\n )\n )\n )\n | (?!(?<=\\S)\\1). # Everything besides\n # style closer\n )++\n (?<=\\S)(?=__\\b|\\*\\*)\\1 # Close\n )\n",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.bold.markdown"
+ }
+ },
+ "end": "(?<=\\S)(\\1)",
+ "name": "markup.bold.markdown"
+ },
+ {
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.raw.markdown"
+ },
+ "3": {
+ "name": "punctuation.definition.raw.markdown"
+ }
+ },
+ "match": "(`+)([^`]|(?!(?[^\\[\\]\\\\]|\\\\.|\\[\\g*+\\])*+)(\\])\n # Match the link text.\n (\\() # Opening paren for url\n ()(.*?)(>?) # The url\n [ \\t]* # Optional whitespace\n (?:\n ((\\().+?(\\))) # Match title in parens…\n | ((\").+?(\")) # or in quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n (\\))\n",
+ "name": "meta.link.inline.markdown"
+ }
+ ]
+ },
+ {
+ "name": "comment.line.double-slash.rust",
+ "begin": "//",
+ "end": "$"
+ }
+ ]
+ },
+ "entity": {
+ "patterns": [
+ {
+ "match": "(?<=fn )([a-zA-Z][a-zA-Z0-9_]+)",
+ "name": "entity.name.function.rust"
+ },
+ {
+ "match": "(?!Err|Ok|Some)([a-zA-Z][a-zA-Z0-9_]+)(?=[(])",
+ "name": "entity.name.function.rust"
+ },
+ {
+ "match": "(?!Err|Ok|Some)([a-zA-Z]+)(?=[(])",
+ "name": "entity.name.function.rust"
+ },
+ {
+ "match": "([a-zA-Z][a-zA-Z0-9_]+)(\\<)(T)(\\>)(?=[(])",
+ "name": "entity.name.function.rust",
+ "captures": {
+ "1": {
+ "name": "entity.name.function.rust"
+ },
+ "2": {
+ "name": "punctuation.definition.type.rust"
+ },
+ "3": {
+ "name": "entity.name.type.generic.rust"
+ },
+ "4": {
+ "name": "punctuation.definition.type.rust"
+ }
+ }
+ },
+ {
+ "match": "(impl) ([a-zA-Z_][a-zA-Z0-9:_<>]+) (for) ([a-zA-Z_][a-zA-Z0-9_]+) \\{",
+ "captures": {
+ "1": {
+ "name": "storage.type.rust"
+ },
+ "2": {
+ "name": "entity.name.type.implementation.rust"
+ },
+ "3": {
+ "name": "storage.modifier.rust"
+ },
+ "4": {
+ "name": "entity.name.type.rust"
+ }
+ }
+ },
+ {
+ "match": "(impl) ([a-zA-Z_][a-zA-Z0-9:]+)(?!for) \\{",
+ "captures": {
+ "1": {
+ "name": "storage.type.rust"
+ },
+ "2": {
+ "name": "entity.name.type.rust"
+ }
+ }
+ },
+ {
+ "match": "(?<=\\=) (?!loop)([a-zA-Z][_a-zA-Z0-9:]+)\\s(?=\\{)",
+ "captures": {
+ "1": {
+ "name": "entity.name.type.rust"
+ }
+ }
+ },
+ {
+ "match": "(^\\s+|(Ok)\\()(?!loop)([a-zA-Z][_a-zA-Z0-9:]+)\\s(?=\\{)",
+ "captures": {
+ "2": {
+ "name": "support.constant.core.rust"
+ },
+ "3": {
+ "name": "entity.name.type.rust"
+ }
+ }
+ },
+ {
+ "match": "(Err|Ok|Some)(?=[(])",
+ "name": "support.constant.core.rust"
+ },
+ {
+ "name": "storage.type.rust",
+ "match": "impl(?=<)"
+ },
+ {
+ "match": "(mod)\\s([a-zA-Z_]+)",
+ "captures": {
+ "1": {
+ "name": "storage.type.module.rust"
+ },
+ "2": {
+ "name": "entity.name.type.module.rust"
+ }
+ }
+ },
+ {
+ "match": "\\b(enum|struct|trait|union)\\s+([a-zA-Z_][a-zA-Z0-9_]+)",
+ "captures": {
+ "1": {
+ "name": "storage.type.rust"
+ },
+ "2": {
+ "name": "entity.name.type.rust"
+ }
+ }
+ },
+ {
+ "begin": "\\b(type)\\s+([a-zA-Z_][a-zA-Z0-9_]*)",
+ "end": ";",
+ "beginCaptures": {
+ "1": {
+ "name": "storage.type.rust"
+ },
+ "2": {
+ "name": "entity.name.type.rust"
+ }
+ }
+ }
+ ]
+ },
+ "operator": {
+ "patterns": [
+ {
+ "name": "keyword.operator.member-access.rust",
+ "match": "(\\.)(?=parse)"
+ },
+ {
+ "name": "keyword.operator.member-access.rust",
+ "match": "\\s(\\.)\\b"
+ },
+ {
+ "name": "keyword.operator.member-access.rust",
+ "match": "\\b(\\.)\\b"
+ },
+ {
+ "name": "keyword.operator.member-access.rust",
+ "match": "\\B(\\.)\\b"
+ },
+ {
+ "name": "keyword.operator.member-access.rust",
+ "match": "(\\.)(?=to_string)"
+ },
+ {
+ "name": "keyword.operator.range.rust",
+ "match": "(\\.\\.)"
+ },
+ {
+ "name": "keyword.operator.path.rust",
+ "match": "(\\:\\:)"
+ },
+ {
+ "name": "keyword.operator.return-type.rust",
+ "match": "(->)"
+ },
+ {
+ "name": "keyword.operator.match.rust",
+ "match": "(=>)"
+ },
+ {
+ "name": "variable.language.ignored.rust",
+ "match": "\\b(_)\\b"
+ },
+ {
+ "name": "keyword.operator.error-propagation.rust",
+ "match": "(?<=\\))(\\?)"
+ },
+ {
+ "name": "keyword.operator.glob.rust",
+ "match": "(?<=::)(\\*)(?=;)"
+ },
+ {
+ "name": "keyword.operator.sigil.rust",
+ "match": "[&*](?=[a-zA-Z0-9_\\(\\[\\|\\\"']+)"
+ },
+ {
+ "name": "keyword.operator.assignment.rust",
+ "match": "(\\=)"
+ },
+ {
+ "name": "keyword.operator.assignment.rust",
+ "match": "\\b(\\+=|-=|/=|\\*=|%=|\\^=|&=|\\|=|<<=|>>=|=)\\b"
+ },
+ {
+ "name": "keyword.operator.arithmetic.rust",
+ "match": "(!|\\+|-|/|\\*|%|\\^|\\||<<|>>)"
+ },
+ {
+ "name": "keyword.operator.comparison.rust",
+ "match": "(&&|\\|\\||==|!=)"
+ },
+ {
+ "name": "keyword.operator.comparison.rust",
+ "match": "\\s(<|>)"
+ },
+ {
+ "name": "keyword.operator.comparison.rust",
+ "match": "\\B(<=|>=)\\B"
+ }
+ ]
+ },
+ "storage": {
+ "patterns": [
+ {
+ "name": "storage.modifier.external.rust",
+ "match": "\\b(extern)\\b"
+ },
+ {
+ "name": "storage.modifier.mutable.rust",
+ "match": "\\b(mut)\\b"
+ },
+ {
+ "name": "storage.modifier.box.rust",
+ "match": "\\b(box)\\b"
+ },
+ {
+ "name": "storage.modifier.const.rust",
+ "match": "\\b(const)\\b"
+ },
+ {
+ "name": "storage.modifier.visibility.rust",
+ "match": "\\b(pub)\\b"
+ },
+ {
+ "name": "storage.modifier.static.rust",
+ "match": "\\b(static)\\b"
+ },
+ {
+ "name": "storage.type.module.rust",
+ "match": "\\b(mod)\\b"
+ },
+ {
+ "name": "storage.type.function.rust",
+ "match": "\\b(fn)\\b"
+ },
+ {
+ "name": "storage.type.rust",
+ "match": "\\b(let)\\b"
+ },
+ {
+ "name": "storage.type.rust",
+ "match": "(impl)(?=<)"
+ },
+ {
+ "name": "storage.type.rust",
+ "match": "\\b(enum|impl|struct|trait|union)\\b"
+ },
+ {
+ "name": "entity.name.lifetime.rust",
+ "match": "(?<=&)('[a-zA-Z_]+)(?!')"
+ }
+ ]
+ },
+ "support": {
+ "patterns": [
+ {
+ "name": "support.function.builtin.rust",
+ "match": "\\b(macro_rules|compile_error|format_args|env|option_env|concat_idents|concat|line|column|file|stringify|include|include_str|include_bytes|module_path|cfg)!"
+ },
+ {
+ "name": "support.function.core.rust",
+ "match": "\\b(panic|assert|assert_eq|assert_ne|debug_assert|debug_assert_eq|debug_assert_ne|try|write|writeln|unreachable|unimplemented)!"
+ },
+ {
+ "name": "support.function.std.rust",
+ "match": "\\b(format|print|println|eprint|eprintln|select|vec)!"
+ },
+ {
+ "name": "support.function.log.rust",
+ "match": "\\b(log|error|warn|info|debug|trace|log_enabled)!"
+ },
+ {
+ "name": "support.constant.core.rust",
+ "match": "\\b(None|Ok|Err)\\b"
+ },
+ {
+ "name": "support.constant.core.rust",
+ "match": "\\b(Some)"
+ }
+ ]
+ },
+ "constant": {
+ "patterns": [
+ {
+ "comment": "Floating point literal (fraction)",
+ "name": "constant.numeric.float.rust",
+ "match": "\\b[0-9][0-9_]*\\.[0-9][0-9_]*([eE][+-]?[0-9_]+)?(f32|f64)?\\b"
+ },
+ {
+ "comment": "Floating point literal (exponent)",
+ "name": "constant.numeric.float.rust",
+ "match": "\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?[eE][+-]?[0-9_]+(f32|f64)?\\b"
+ },
+ {
+ "comment": "Floating point literal (typed)",
+ "name": "constant.numeric.float.rust",
+ "match": "\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?([eE][+-]?[0-9_]+)?(f32|f64)\\b"
+ },
+ {
+ "comment": "Integer literal (decimal)",
+ "name": "constant.numeric.integer.decimal.rust",
+ "match": "\\b[0-9][0-9_]*([ui](8|16|32|64|128|s|size))?\\b"
+ },
+ {
+ "comment": "Integer literal (hexadecimal)",
+ "name": "constant.numeric.integer.hexadecimal.rust",
+ "match": "\\b0x[a-fA-F0-9_]+([ui](8|16|32|64|128|s|size))?\\b"
+ },
+ {
+ "comment": "Integer literal (octal)",
+ "name": "constant.numeric.integer.octal.rust",
+ "match": "\\b0o[0-7_]+([ui](8|16|32|64|128|s|size))?\\b"
+ },
+ {
+ "comment": "Integer literal (binary)",
+ "name": "constant.numeric.integer.binary.rust",
+ "match": "\\b0b[01_]+([ui](8|16|32|64|128|s|size))?\\b"
+ },
+ {
+ "name": "constant.language.boolean.rust",
+ "match": "\\b(true|false)\\b"
+ }
+ ]
+ },
+ "keyword": {
+ "patterns": [
+ {
+ "name": "variable.language.self.rust",
+ "match": "\\b(self)\\b"
+ },
+ {
+ "name": "keyword.other.unsafe.rust",
+ "match": "\\b(unsafe)\\b"
+ },
+ {
+ "name": "keyword.control.rust",
+ "match": "\\b(break|continue|else|if|in|for|loop|match|return|while)\\b"
+ },
+ {
+ "name": "keyword.other.rust",
+ "match": "\\b(ref|use|super|move)\\b"
+ },
+ {
+ "name": "keyword.other.where.rust",
+ "match": "\\b(where)\\b"
+ },
+ {
+ "name": "keyword.other.as.rust",
+ "match": "(\\b(as)\\b)"
+ },
+ {
+ "comment": "Reserved keyword",
+ "name": "invalid.deprecated.rust",
+ "match": "\\b(abstract|alignof|become|do|final|macro|offsetof|override|priv|proc|pure|sizeof|typeof|virtual|yield)\\b"
+ }
+ ]
+ },
+ "meta": {
+ "patterns": [
+ {
+ "name": "meta.attribute.rust",
+ "begin": "#\\!?\\[",
+ "end": "\\]"
+ },
+ {
+ "name": "meta.statement.if-let.rust",
+ "match": "(if) (let)",
+ "captures": {
+ "1": {
+ "name": "keyword.control.rust"
+ },
+ "2": {
+ "name": "storage.type.rust"
+ }
+ }
+ }
+ ]
+ },
+ "punctuation": {
+ "patterns": [
+ {
+ "name": "punctuation.separator.type.rust",
+ "match": ":\\s+?(?=(&|bool|char|usize|isize|u8|u16|u32|u64|u128|i8|i16|i32|i64|i128|f32|f64|str|Self|Option|Result|String|Box|Vec|Path|PathBuf|HashMap))"
+ },
+ {
+ "name": "punctuation.terminator.rust",
+ "match": ";"
+ },
+ {
+ "name": "punctuation.other.comma.rust",
+ "match": ","
+ },
+ {
+ "name": "punctuation.other.paren.rust",
+ "match": "[)(]"
+ }
+ ]
+ },
+ "string": {
+ "patterns": [
+ {
+ "name": "constant.character.escape.rust",
+ "match": "\\\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)"
+ },
+ {
+ "name": "constant.character.rust",
+ "match": "b?'([^'\\\\]|\\\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.))'"
+ },
+ {
+ "name": "string.quoted.double.rust",
+ "begin": "b?\"",
+ "end": "\"",
+ "patterns": [
+ {
+ "name": "constant.character.escape.rust",
+ "match": "\\\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)"
+ },
+ {
+ "name": "constant.other.placeholder.rust",
+ "match": "(\\{)([a-zA-Z0-9_?:$.*<>]+)?(\\})"
+ }
+ ]
+ },
+ {
+ "name": "string.quoted.double.raw.rust",
+ "begin": "b?r(#*)\"",
+ "end": "\"\\1"
+ }
+ ]
+ },
+ "type": {
+ "patterns": [
+ {
+ "begin": "(\\:\\:{)",
+ "beginCaptures": {
+ "1": {
+ "name": "keyword.operator.path.rust"
+ }
+ },
+ "end": "}(;)",
+ "endCaptures": {
+ "1": {
+ "name": "keyword.operator.path.rust"
+ },
+ "2": {
+ "name": "punctuation.terminator.rust"
+ }
+ },
+ "patterns": [
+ {
+ "name": "punctuation.other.comma.rust",
+ "match": ","
+ },
+ {
+ "name": "entity.name.type.rust",
+ "match": "\\w+"
+ }
+ ]
+ },
+ {
+ "match": "^(extern) (crate) ([_A-Za-z0-9]+)",
+ "captures": {
+ "1": {
+ "name": "storage.modifier.external.rust"
+ },
+ "2": {
+ "name": "keyword.other.rust"
+ },
+ "3": {
+ "name": "entity.name.type.rust"
+ }
+ }
+ },
+ {
+ "match": "\\b([A-Za-z][_A-Za-z0-9]+)\\b(?=<[_a-zA-Z']+>)",
+ "name": "entity.name.type.rust"
+ },
+ {
+ "match": "([A-Za-z][_A-Za-z0-9]+)(?=::)",
+ "name": "entity.name.type.mod.rust",
+ "captures": {
+ "2": {
+ "name": "keyword.operator.path.rust"
+ }
+ }
+ },
+ {
+ "match": "((?<=::))([a-zA-Z_]+)",
+ "captures": {
+ "1": {
+ "name": "keyword.operator.path.rust"
+ },
+ "2": {
+ "name": "entity.name.type.rust"
+ }
+ }
+ },
+ {
+ "name": "storage.type.core.rust",
+ "match": "\\b(bool|char|usize|isize|u8|u16|u32|u64|u128|i8|i16|i32|i64|i128|f32|f64|str|Self|Option|Result)\\b"
+ },
+ {
+ "name": "entity.name.type.hashmap.rust",
+ "match": "HashMap"
+ },
+ {
+ "match": "(?<=->\\s)(\\w+)",
+ "captures": {
+ "1": {
+ "name": "entity.name.type.rust"
+ }
+ }
+ },
+ {
+ "match": "\\b(T|U)\\b",
+ "captures": {
+ "1": {
+ "name": "entity.name.type.generic.rust"
+ }
+ }
+ },
+ {
+ "name": "support.type.marker.rust",
+ "match": "\\b(Copy|Send|Sized|Sync)\\b"
+ },
+ {
+ "name": "support.type.core.rust",
+ "match": "\\b(Drop|Fn|FnMut|FnOnce|Clone|PartialEq|PartialOrd|Eq|Ord|AsRef|AsMut|Into|From|Default|Iterator|Extend|IntoIterator|DoubleEndedIterator|ExactSizeIterator)\\b"
+ },
+ {
+ "name": "storage.class.std.rust",
+ "match": "\\b(Box|String|Vec|Path|PathBuf)\\b"
+ },
+ {
+ "name": "support.type.std.rust",
+ "match": "\\b(ToOwned|ToString|FromStr)\\b"
+ },
+ {
+ "name": "entity.name.type.param.rust",
+ "begin": "<(?![=<])",
+ "end": "(?",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.definition.type.rust"
+ }
+ },
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.type.rust"
+ }
+ },
+ "patterns": [
+ {
+ "name": "entity.name.type.param.rust",
+ "begin": "<(?![=<])",
+ "end": "(?",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.definition.type.rust"
+ }
+ },
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.type.rust"
+ }
+ }
+ },
+ {
+ "name": "storage.modifier.lifetime.rust",
+ "match": "'([a-zA-Z_][a-zA-Z0-9_]*)\\b",
+ "captures": {
+ "1": {
+ "name": "entity.name.lifetime.rust"
+ }
+ }
+ },
+ {
+ "match": "&(')([a-zA-Z_][a-zA-Z0-9_]*)\\b",
+ "captures": {
+ "1": {
+ "name": "storage.modifier.lifetime.rust"
+ },
+ "2": {
+ "name": "entity.name.lifetime.rust"
+ }
+ }
+ },
+ {
+ "name": "storage.type.rust",
+ "match": "impl"
+ },
+ {
+ "name": "punctuation.other.comma.rust",
+ "match": ","
+ },
+ {
+ "name": "variable.language.ignored.rust",
+ "match": "\\b(_)\\b"
+ }
+ ]
+ }
+ ]
+ },
+ "variable": {
+ "patterns": [
+ {
+ "match": "(let) (mut) ([a-zA-Z_][a-zA-Z0-9_]+)",
+ "captures": {
+ "1": {
+ "name": "storage.type.rust"
+ },
+ "2": {
+ "name": "storage.modifier.mutable.rust"
+ },
+ "3": {
+ "name": "variable.other.mutable.rust"
+ }
+ }
+ },
+ {
+ "name": "variable.other.rust",
+ "match": "(?
+
+
+
+ comment
+ SCSS Version 2 Grammar by Mario "Kuroir" Ricalde (http://kuroir.com)
+ fileTypes
+
+ scss
+ css.scss
+
+ foldingStartMarker
+ \{\s*$
+ foldingStopMarker
+ ^\s*\}
+ keyEquivalent
+ ^~S
+ name
+ SCSS
+ patterns
+
+
+ include
+ #variable_setting
+
+
+ include
+ #at_rule_include
+
+
+ include
+ #at_rule_import
+
+
+ include
+ #general
+
+
+ include
+ #flow_control
+
+
+ include
+ #rules
+
+
+ include
+ #property_list
+
+
+ include
+ #at_rule_mixin
+
+
+ include
+ #at_rule_media
+
+
+ include
+ #at_rule_function
+
+
+ include
+ #at_rule_charset
+
+
+ include
+ #at_rule_option
+
+
+ include
+ #at_rule_namespace
+
+
+ include
+ #at_rule_fontface
+
+
+ include
+ #at_rule_page
+
+
+ include
+ #at_rule_keyframes
+
+
+ repository
+
+ at_rule__
+
+ comment
+ Note how all @rules are prefixed.
+
+ at_rule_charset
+
+ begin
+ \s*((@)charset\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.charset.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+
+ comment
+ Charset
+ end
+ \s*((?=;|$))
+ name
+ meta.at-rule.charset.scss
+ patterns
+
+
+ include
+ #variable
+
+
+ include
+ #string_single
+
+
+ include
+ #string_double
+
+
+
+ at_rule_content
+
+ begin
+ \s*((@)content\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.content.scss
+
+
+ end
+ \s*((?=;))
+ name
+ meta.content.scss
+ patterns
+
+
+ include
+ #variable
+
+
+ include
+ #selectors
+
+
+ include
+ #property_values
+
+
+
+ at_rule_each
+
+ begin
+ \s*((@)each\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.each.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+
+ end
+ \s*((?=\}))
+ name
+ meta.at-rule.each.scss
+ patterns
+
+
+ match
+ \b(in|\,)\b
+ name
+ keyword.control.operator
+
+
+ include
+ #variable
+
+
+ include
+ #property_values
+
+
+ include
+ $self
+
+
+
+ at_rule_else
+
+ begin
+ \s*((@)else(\s*(if)?))\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.else.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+
+ end
+ \s*(?=\{)
+ name
+ meta.at-rule.else.scss
+ patterns
+
+
+ include
+ #logical_operators
+
+
+ include
+ #variable
+
+
+ include
+ #property_values
+
+
+
+ at_rule_extend
+
+ begin
+ \s*((@)extend\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.import.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+
+ end
+ \s*(?=\;)
+ name
+ meta.at-rule.import.scss
+ patterns
+
+
+ include
+ #variable
+
+
+ include
+ #selectors
+
+
+ include
+ #property_values
+
+
+
+ at_rule_fontface
+
+ patterns
+
+
+ begin
+ ^\s*((@)font-face)\s*(?=\{)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.at-rule.fontface.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+
+ end
+ \s*(?=\{)
+ name
+ meta.at-rule.fontface.scss
+ patterns
+
+
+ include
+ #function_attributes
+
+
+
+
+
+ at_rule_for
+
+ begin
+ \s*((@)for\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.for.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+
+ end
+ \s*(?=\{)
+ name
+ meta.at-rule.for.scss
+ patterns
+
+
+ match
+ (\=\=|\!\=|\<\=|\>\=|\<|\>|from|through)
+ name
+ keyword.control.operator
+
+
+ include
+ #variable
+
+
+ include
+ #property_values
+
+
+ include
+ $self
+
+
+
+ at_rule_function
+
+ patterns
+
+
+ begin
+ \s*((@)function\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.function.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+ 3
+
+ name
+ entity.name.function.scss
+
+
+ comment
+ Function with Attributes
+ end
+ \s*(?=\{)
+ name
+ meta.at-rule.function.scss
+ patterns
+
+
+ include
+ #function_attributes
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.function.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+ 3
+
+ name
+ entity.name.function.scss
+
+
+ comment
+ Simple Function
+ match
+ \s*((@)function\b)\s*
+ name
+ meta.at-rule.function.scss
+
+
+
+ at_rule_if
+
+ begin
+ \s*((@)if\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.if.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+
+ end
+ \s*(?=\{)
+ name
+ meta.at-rule.if.scss
+ patterns
+
+
+ include
+ #logical_operators
+
+
+ include
+ #variable
+
+
+ include
+ #property_values
+
+
+
+ at_rule_import
+
+ begin
+ \s*((@)import\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.import.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+
+ end
+ \s*((?=;)|(?=\}))
+ name
+ meta.at-rule.import.scss
+ patterns
+
+
+ include
+ #variable
+
+
+ include
+ #string_single
+
+
+ include
+ #string_double
+
+
+ include
+ #functions
+
+
+
+ at_rule_include
+
+ patterns
+
+
+ begin
+ \s*((@)include\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.include.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+ 3
+
+ name
+ entity.name.function.scss
+
+ 4
+
+ name
+ entity.name.text.scss
+
+
+ end
+ \s*[\)|\s\;]
+ name
+ meta.at-rule.include.scss
+ patterns
+
+
+ include
+ #function_attributes
+
+
+ include
+ #functions
+
+
+
+
+
+ at_rule_keyframes
+
+ patterns
+
+
+ begin
+ ^\s*((@)(\-[\w\-]*\-)?keyframes\b)\s*([\w-]*)
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.keyframes.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+ 3
+
+ name
+ punctuation.definition.keyword.scss
+
+ 4
+
+ name
+ entity.name.function.scss
+
+
+ comment
+ Keyframes with Attributes
+ end
+ \s*(?=\{)
+ name
+ meta.at-rule.keyframes.scss
+ patterns
+
+
+ include
+ #function_attributes
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.keyframes.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+ 3
+
+ name
+ punctuation.definition.keyword.scss
+
+ 4
+
+ name
+ entity.name.function.scss
+
+
+ comment
+ Simple Keyframe
+ match
+ ^\s*((@)(\-[\w\-]*\-)?keyframes\b)\s*([\w-]*)
+ name
+ meta.at-rule.keyframes.scss
+
+
+
+ at_rule_media
+
+ patterns
+
+
+ begin
+ ^\s*((@)media)(?=.*?\{)
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.media.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+ 3
+
+ name
+ support.constant.media.scss
+
+
+ end
+ \s*(?=\{)
+ name
+ meta.at-rule.media.scss
+ patterns
+
+
+ include
+ #function_attributes
+
+
+ include
+ #functions
+
+
+ include
+ #logical_operators
+
+
+
+
+
+ at_rule_mixin
+
+ patterns
+
+
+ begin
+ \s*((@)mixin) ([\w-]*)\s*\(
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.mixin.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+ 3
+
+ name
+ entity.name.function.scss
+
+
+ comment
+ Mixin with Attributes
+ end
+ \)
+ name
+ meta.at-rule.mixin.scss
+ patterns
+
+
+ include
+ #function_attributes
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.mixin.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+ 3
+
+ name
+ entity.name.function.scss
+
+
+ comment
+ Simple Mixin
+ match
+ ^\s*((@)mixin) ([\w-]{1,})
+ name
+ meta.at-rule.mixin.scss
+
+
+
+ at_rule_namespace
+
+ begin
+ \s*((@)namespace) ([\w-]*)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.import.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+ 3
+
+ name
+ entity.name.function.scss
+
+
+ comment
+ Namespace
+ end
+ \s*((;)|(?=\}))$
+ name
+ meta.at-rule.namespace.scss
+ patterns
+
+
+ include
+ #variable
+
+
+ include
+ #string_single
+
+
+ include
+ #string_double
+
+
+
+ at_rule_option
+
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.charset.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+
+ comment
+ Option
+ match
+ ^\s*((@)option\b)\s*
+ name
+ meta.at-rule.option.scss
+
+ at_rule_page
+
+ patterns
+
+
+ begin
+ ^\s*((@)page) ([\w-]*)
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.fontface.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+ 3
+
+ name
+ entity.name.function.scss
+
+
+ comment
+ Page with Attributes
+ end
+
+ name
+ meta.at-rule.fontface.scss
+ patterns
+
+
+ include
+ #function_attributes
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.mixin.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+ 3
+
+ name
+ entity.name.function.scss
+
+
+ comment
+ Simple Page
+ match
+ ^\s*((@)page) ([\w-]{1,})
+ name
+ meta.at-rule.mixin.scss
+
+
+
+ at_rule_return
+
+ begin
+ \s*((@)(return)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.return.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+
+ end
+ \s*((?=;))
+ name
+ meta.at-rule.return.scss
+ patterns
+
+
+ include
+ #variable
+
+
+ include
+ #property_values
+
+
+
+ at_rule_warn
+
+ begin
+ \s*((@)(warn|debug)\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.warn.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+
+ end
+ \s*(?=\;)
+ name
+ meta.at-rule.warn.scss
+ patterns
+
+
+ include
+ #variable
+
+
+ include
+ #string_double
+
+
+ include
+ #string_single
+
+
+
+ at_rule_while
+
+ begin
+ \s*((@)while\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.while.scss
+
+ 2
+
+ name
+ punctuation.definition.keyword.scss
+
+
+ end
+ \s*(?=\})
+ name
+ meta.at-rule.while.scss
+ patterns
+
+
+ include
+ #logical_operators
+
+
+ include
+ #variable
+
+
+ include
+ #property_values
+
+
+ include
+ $self
+
+
+
+ comment_block
+
+ begin
+ \s*/\*\s*
+ captures
+
+ 0
+
+ name
+ punctuation.whitespace.comment.trailing.scss
+
+
+ comment
+ Revamped Comment block.
+ end
+ (\*/)\s*
+ name
+ comment.block.scss
+
+ comment_line
+
+ begin
+ (\s*)//
+ comment
+ Revamped
+ end
+ $(\s*)
+ name
+ comment.line.scss
+
+ constant_color
+
+ comment
+ http://www.w3.org/TR/CSS21/syndata.html#value-def-color
+ match
+ \b(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)\b
+ name
+ support.constant.color.w3c-standard-color-name.scss
+
+ constant_default
+
+ match
+ \!default
+ name
+ keyword.other.default.scss
+
+ constant_deprecated_color
+
+ comment
+ These colours are mostly recognised but will not validate. ref: http://www.w3schools.com/css/css_colornames.asp
+ match
+ \b(aliceblue|antiquewhite|aquamarine|azure|beige|bisque|blanchedalmond|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|gainsboro|ghostwhite|gold|goldenrod|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|limegreen|linen|magenta|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|oldlace|olivedrab|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|thistle|tomato|turquoise|violet|wheat|whitesmoke|yellowgreen)\b
+ name
+ invalid.deprecated.color.w3c-non-standard-color-name.scss
+
+ constant_font
+
+ match
+ (\b(?i:arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace)\b)
+ name
+ support.constant.font-name.scss
+
+ constant_functions
+
+ begin
+ ([\w-]+)\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ support.function.misc.scss
+
+ 2
+
+ name
+ punctuation.section.function.scss
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.function.scss
+
+
+ patterns
+
+
+ include
+ #parameters
+
+
+
+ constant_hex
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.scss
+
+
+ match
+ #([0-9a-fA-F]{3}|[0-9a-fA-F]{6})\b
+ name
+ constant.other.color.rgb-value.scss
+
+ constant_important
+
+ match
+ \!important
+ name
+ keyword.other.important.scss
+
+ constant_mathematical_symbols
+
+ match
+ (\b(\+|\-|\*|/)\b)
+ name
+ support.constant.mathematical-symbols.scss
+
+ constant_number
+
+ match
+ [\+|\-]?(\s*)?([0-9]+(\.[0-9]+)?|\.[0-9]+)
+ name
+ constant.numeric.scss
+
+ constant_optional
+
+ match
+ \!optional
+ name
+ keyword.other.optional.scss
+
+ constant_property_value
+
+ match
+ \b(absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero|true|false|vertical|horizontal)\b
+ name
+ support.constant.property-value.scss
+
+ constant_rgb
+
+ match
+ (\b0*((1?[0-9]{1,2})|(2([0-4][0-9]|5[0-5])))\s*,\s*)(0*((1?[0-9]{1,2})|(2([0-4][0-9]|5[0-5])))\s*,\s*)(0*((1?[0-9]{1,2})|(2([0-4][0-9]|5[0-5])))\b)
+ name
+ constant.other.color.rgb-value.scss
+
+ constant_rgb_percentage
+
+ match
+ \b([0-9]{1,2}|100)\s*%,\s*([0-9]{1,2}|100)\s*%,\s*([0-9]{1,2}|100)\s*%
+ name
+ constant.other.color.rgb-percentage.scss
+
+ constant_sass_functions
+
+ begin
+ (headings|stylesheet-url|rgba?|hsla?|ie-hex-str|red|green|blue|alpha|opacity|hue|saturation|lightness|prefixed|prefix|-moz|-svg|-css2|-pie|-webkit|-ms|-o|-khtml|font-(?:files|url)|grid-image|image-(?:width|height|url|color)|sprites?|sprite-(?:map|map-name|file|url|position)|inline-(?:font-files|image)|opposite-position|grad-point|grad-end-position|color-stops|color-stops-in-percentages|grad-color-stops|(?:radial|linear)-(?:gradient|svg-gradient)|opacify|fade-?in|transparentize|fade-?out|lighten|darken|saturate|desaturate|grayscale|adjust-(?:hue|lightness|saturation|color)|scale-(?:lightness|saturation|color)|change-color|spin|complement|invert|mix|-compass-(?:list|space-list|slice|nth|list-size)|blank|compact|nth|first-value-of|join|length|append|nest|append-selector|headers|enumerate|range|percentage|unitless|unit|if|type-of|comparable|elements-of-type|quote|unquote|escape|e|sin|cos|tan|abs|round|ceil|floor|pi|translate(?:X|Y))\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ support.function.misc.scss
+
+ 2
+
+ name
+ punctuation.section.function.scss
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.function.scss
+
+
+ patterns
+
+
+ include
+ #parameters
+
+
+
+ constant_unit
+
+ match
+ (?<=[\d])(ch|cm|deg|dpi|dpcm|dppx|em|ex|grad|in|mm|ms|pc|pt|px|rad|rem|turn|s|vh|vmin|vw)\b|%
+ name
+ keyword.other.unit.scss
+
+ flow_control
+
+ patterns
+
+
+ include
+ #at_rule_if
+
+
+ include
+ #at_rule_else
+
+
+ include
+ #at_rule_warn
+
+
+ include
+ #at_rule_for
+
+
+ include
+ #at_rule_while
+
+
+ include
+ #at_rule_each
+
+
+ include
+ #at_rule_return
+
+
+
+ function_attributes
+
+ patterns
+
+
+ match
+ :
+ name
+ punctuation.definition
+
+
+ include
+ #general
+
+
+ include
+ #property_values
+
+
+ comment
+ We even have error highlighting <3
+ match
+ [=\{\}\?\;\@]
+ name
+ invalid.illegal
+
+
+
+ functions
+
+ patterns
+
+
+ begin
+ ([\w-]{1,})(\()\s*
+ beginCaptures
+
+ 1
+
+ name
+ support.function.misc.scss
+
+ 2
+
+ name
+ punctuation.section.function.scss
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.function.scss
+
+
+ patterns
+
+
+ include
+ #parameters
+
+
+
+
+ match
+ ([\w-]{1,})
+ name
+ support.function.misc.scss
+
+
+
+ general
+
+ comment
+ Stuff that should be everywhere
+ patterns
+
+
+ include
+ #variable
+
+
+ include
+ #comment_block
+
+
+ include
+ #comment_line
+
+
+
+ interpolation
+
+ begin
+ #\{
+ end
+ \}([A-Za-z/-]*)?
+ name
+ variable.interpolation.scss
+ patterns
+
+
+ include
+ #property_values
+
+
+ include
+ #variable
+
+
+
+ logical_operators
+
+ match
+ \s(\=\=|\!\=|\<\=|\>\=|\<|\>|not|or|and)\s
+ name
+ keyword.control.operator
+
+ media_attributes
+
+ patterns
+
+
+ match
+ :
+ name
+ punctuation.definition
+
+
+ include
+ #general
+
+
+ include
+ #property_name
+
+
+ include
+ #property_values
+
+
+ comment
+ We even have error highlighting <3
+ match
+ [=\{\}\?\@]
+ name
+ invalid.illegal
+
+
+
+ parameters
+
+ patterns
+
+
+ include
+ #variable
+
+
+ include
+ #property_values
+
+
+ include
+ #comment_line
+
+
+ include
+ #comment_block
+
+
+ match
+ [^'",) \t]+
+ name
+ variable.parameter.url.scss
+
+
+ match
+ ,
+ name
+ punctuation.scss
+
+
+
+ properties
+
+ patterns
+
+
+ begin
+ (?<![-a-z])(?=[-a-z])
+ end
+ $|(?![-a-z])
+ name
+ meta.property-name.scss
+ patterns
+
+
+ include
+ #property_names
+
+
+ include
+ #at_rule_include
+
+
+
+
+ begin
+ (:)\s*(?!(\s*{))
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.separator.key-value.scss
+
+
+ comment
+ Kuroir: fixed nested elements for sass.
+ end
+ \s*(;|(?=\}))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.terminator.rule.scss
+
+
+ name
+ meta.property-value.scss
+ patterns
+
+
+ include
+ #general
+
+
+ include
+ #property_values
+
+
+
+
+
+ property_list
+
+ begin
+ \{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.property-list.begin.scss
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.section.property-list.scss
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.property-list.end.scss
+
+
+ name
+ meta.property-list.scss
+ patterns
+
+
+ include
+ #flow_control
+
+
+ include
+ #rules
+
+
+ include
+ #properties
+
+
+ include
+ $self
+
+
+
+ property_name
+
+ comment
+ Reversal order is important; KEEP IT. Also when adding new properties add them to the error checker below!
+ match
+ \b(-webkit-[A-Za-z]+|-moz-[A-Za-z]+|-o-[A-Za-z]+|-ms-[A-Za-z]+|-khtml-[A-Za-z]+|[0-9]{1,3}\%|zoom|z-index|y|x|wrap|word-wrap|word-spacing|word-break|word|width|widows|white-space-collapse|white-space|white|weight|volume|voice-volume|voice-stress|voice-rate|voice-pitch-range|voice-pitch|voice-family|voice-duration|voice-balance|voice|visibility|vertical-align|variant|user-select|up|unicode-bidi|unicode|trim|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform|top-width|top-style|top-right-radius|top-left-radius|top-color|top|timing-function|text-wrap|text-transform|text-shadow|text-replace|text-outline|text-justify|text-indent|text-height|text-emphasis|text-decoration|text-align-last|text-align|text|target-position|target-new|target-name|target|table-layout|tab-size|style-type|style-position|style-image|style|string-set|stretch|stress|stacking-strategy|stacking-shift|stacking-ruby|stacking|src|speed|speech-rate|speech|speak-punctuation|speak-numeral|speak-header|speak|span|spacing|space-collapse|space|sizing|size-adjust|size|shadow|respond-to|rule-width|rule-style|rule-color|rule|ruby-span|ruby-position|ruby-overhang|ruby-align|ruby|rows|rotation-point|rotation|role|right-width|right-style|right-color|right|richness|rest-before|rest-after|rest|resource|resolution|resize|reset|replace|repeat|rendering-intent|rate|radius|quotes|punctuation-trim|punctuation|property|profile|presentation-level|presentation|position|pointer-events|point|play-state|play-during|play-count|pitch-range|pitch|phonemes|pause-before|pause-after|pause|page-policy|page-break-inside|page-break-before|page-break-after|page|padding-top|padding-right|padding-left|padding-bottom|padding|pack|overhang|overflow-y|overflow-x|overflow-style|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|origin|orientation|orient|ordinal-group|opacity|offset|numeral|new|nav-up|nav-right|nav-left|nav-index|nav-down|nav|name|move-to|model|min-width|min-height|min|max-width|max-height|max|marquee-style|marquee-speed|marquee-play-count|marquee-direction|marquee|marks|mark-before|mark-after|mark|margin-top|margin-right|margin-left|margin-bottom|margin|mask-image|list-style-type|list-style-position|list-style-image|list-style|list|lines|line-stacking-strategy|line-stacking-shift|line-stacking-ruby|line-stacking|line-height|line|level|letter-spacing|length|left-width|left-style|left-color|left|label|justify|iteration-count|inline-box-align|initial-value|initial-size|initial-before-align|initial-before-adjust|initial-after-align|initial-after-adjust|index|indent|increment|image-resolution|image-orientation|image|icon|hyphens|hyphenate-resource|hyphenate-lines|hyphenate-character|hyphenate-before|hyphenate-after|hyphenate|height|header|hanging-punctuation|grid-rows|grid-columns|grid|gap|font-weight|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-family|font|float-offset|float|flex-group|flex|fit-position|fit|fill|filter|family|empty-cells|emphasis|elevation|duration|drop-initial-value|drop-initial-size|drop-initial-before-align|drop-initial-before-adjust|drop-initial-after-align|drop-initial-after-adjust|drop|down|dominant-baseline|display-role|display-model|display|direction|delay|decoration-break|decoration|cursor|cue-before|cue-after|cue|crop|counter-reset|counter-increment|counter|count|content|columns|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|column-break-before|column-break-after|column|color-profile|color|collapse|clip|clear|character|caption-side|break-inside|break-before|break-after|break|box-sizing|box-shadow|box-pack|box-orient|box-ordinal-group|box-lines|box-flex-group|box-flex|box-direction|box-decoration-break|box-align|box|bottom-width|bottom-style|bottom-right-radius|bottom-left-radius|bottom-color|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-length|border-left-width|border-left-style|border-left-color|border-left|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|bookmark-target|bookmark-level|bookmark-label|bookmark|binding|bidi|before|baseline-shift|baseline|balance|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-break|background-attachment|background|azimuth|attachment|appearance|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-duration|animation-direction|animation-delay|animation|alignment-baseline|alignment-adjust|alignment|align-last|align|after|adjust)\b
+ name
+ support.type.property-name.scss
+
+ property_name_error
+
+ match
+ (?<![a-z-])(?!-(top|right|left|bottom|color|radius|last|inside|width|before|after|value|size|type|position|style|image|strategy|shift|align|adjust)\b|-webkit-[A-Za-z]+\b|-moz-[A-Za-z]+\b|-o-[A-Za-z]+\b|-ms-[A-Za-z]+\b|-khtml-[A-Za-z]+\b|z-index\b|[0-9]{1,3}\%\b|zoom\b|y\b|x\b|wrap\b|word-wrap\b|word-spacing\b|word-break\b|word\b|width\b|widows\b|white-space-collapse\b|white-space\b|white\b|weight\b|volume\b|voice-volume\b|voice-stress\b|voice-rate\b|voice-pitch-range\b|voice-pitch\b|voice-family\b|voice-duration\b|voice-balance\b|voice\b|visibility\b|vertical-align\b|variant\b|user-select\b|up\b|unicode-bidi\b|unicode\b|u\b|tt\b|trim\b|transition-timing-function\b|transition-property\b|transition-duration\b|transition-delay\b|transition\b|transform\b|top-width\b|top-style\b|top-right-radius\b|top-left-radius\b|top-color\b|top\b|timing-function\b|text-wrap\b|text-transform\b|text-shadow\b|text-replace\b|text-outline\b|text-justify\b|text-indent\b|text-height\b|text-emphasis\b|text-decoration\b|text-align-last\b|text-align\b|text\b|target-position\b|target-new\b|target-name\b|target\b|table-layout\b|tab-size\b|style-type\b|style-position\b|style-image\b|style\b|string-set\b|strike\b|stretch\b|stress\b|stacking-strategy\b|stacking-shift\b|stacking-ruby\b|stacking\b|src\b|speed\b|speech-rate\b|speech\b|speak-punctuation\b|speak-numeral\b|speak-header\b|speak\b|span\b|spacing\b|space-collapse\b|space\b|sizing\b|size-adjust\b|size\b|shadow\b|s\b|respond-to\b|rule-width\b|rule-style\b|rule-color\b|rule\b|ruby-span\b|ruby-position\b|ruby-overhang\b|ruby-align\b|ruby\b|rows\b|rotation-point\b|rotation\b|role\b|right-width\b|right-style\b|right-color\b|right\b|richness\b|rest-before\b|rest-after\b|rest\b|resource\b|resolution\b|resize\b|reset\b|replace\b|repeat\b|rendering-intent\b|rate\b|radius\b|quotes\b|punctuation-trim\b|punctuation\b|property\b|profile\b|presentation-level\b|presentation\b|position\b|pointer-events\b|point\b|play-state\b|play-during\b|play-count\b|pitch-range\b|pitch\b|phonemes\b|pause-before\b|pause-after\b|pause\b|page-policy\b|page-break-inside\b|page-break-before\b|page-break-after\b|page\b|padding-top\b|padding-right\b|padding-left\b|padding-bottom\b|padding\b|pack\b|overhang\b|overflow-y\b|overflow-x\b|overflow-style\b|overflow\b|outline-width\b|outline-style\b|outline-offset\b|outline-color\b|outline\b|orphans\b|origin\b|orientation\b|orient\b|ordinal-group\b|opacity\b|offset\b|numeral\b|new\b|nav-up\b|nav-right\b|nav-left\b|nav-index\b|nav-down\b|nav\b|name\b|move-to\b|model\b|min-width\b|min-height\b|min\b|max-width\b|max-height\b|max\b|marquee-style\b|marquee-speed\b|marquee-play-count\b|marquee-direction\b|marquee\b|marks\b|mark-before\b|mark-after\b|mark\b|margin-top\b|margin-right\b|margin-left\b|margin-bottom\b|margin\b|mask-image\b|list-style-type\b|list-style-position\b|list-style-image\b|list-style\b|list\b|lines\b|line-stacking-strategy\b|line-stacking-shift\b|line-stacking-ruby\b|line-stacking\b|line-height\b|line\b|level\b|letter-spacing\b|length\b|left-width\b|left-style\b|left-color\b|left\b|label\b|justify\b|iteration-count\b|inline-box-align\b|initial-value\b|initial-size\b|initial-before-align\b|initial-before-adjust\b|initial-after-align\b|initial-after-adjust\b|index\b|indent\b|increment\b|image-resolution\b|image-orientation\b|image\b|icon\b|hyphens\b|hyphenate-resource\b|hyphenate-lines\b|hyphenate-character\b|hyphenate-before\b|hyphenate-after\b|hyphenate\b|height\b|header\b|hanging-punctuation\b|grid-rows\b|grid-columns\b|grid\b|gap\b|font-weight\b|font-variant\b|font-style\b|font-stretch\b|font-size-adjust\b|font-size\b|font-family\b|font\b|float-offset\b|float\b|flex-group\b|flex\b|fit-position\b|fit\b|fill\b|filter\b|family\b|empty-cells\b|emphasis\b|elevation\b|duration\b|drop-initial-value\b|drop-initial-size\b|drop-initial-before-align\b|drop-initial-before-adjust\b|drop-initial-after-align\b|drop-initial-after-adjust\b|drop\b|down\b|dominant-baseline\b|display-role\b|display-model\b|display\b|direction\b|delay\b|decoration-break\b|decoration\b|cursor\b|cue-before\b|cue-after\b|cue\b|crop\b|counter-reset\b|counter-increment\b|counter\b|count\b|content\b|columns\b|column-width\b|column-span\b|column-rule-width\b|column-rule-style\b|column-rule-color\b|column-rule\b|column-gap\b|column-fill\b|column-count\b|column-break-before\b|column-break-after\b|column\b|color-profile\b|color\b|collapse\b|clip\b|clear\b|character\b|center\b|caption-side\b|break-inside\b|break-before\b|break-after\b|break\b|box-sizing\b|box-shadow\b|box-pack\b|box-orient\b|box-ordinal-group\b|box-lines\b|box-flex-group\b|box-flex\b|box-direction\b|box-decoration-break\b|box-align\b|box\b|bottom-width\b|bottom-style\b|bottom-right-radius\b|bottom-left-radius\b|bottom-color\b|bottom\b|border-width\b|border-top-width\b|border-top-style\b|border-top-right-radius\b|border-top-left-radius\b|border-top-color\b|border-top\b|border-style\b|border-spacing\b|border-right-width\b|border-right-style\b|border-right-color\b|border-right\b|border-radius\b|border-length\b|border-left-width\b|border-left-style\b|border-left-color\b|border-left\b|border-image\b|border-color\b|border-collapse\b|border-bottom-width\b|border-bottom-style\b|border-bottom-right-radius\b|border-bottom-left-radius\b|border-bottom-color\b|border-bottom\b|border\b|bookmark-target\b|bookmark-level\b|bookmark-label\b|bookmark\b|binding\b|bidi\b|big\b|before\b|baseline-shift\b|baseline\b|balance\b|background-size\b|background-repeat\b|background-position\b|background-origin\b|background-image\b|background-color\b|background-clip\b|background-break\b|background-attachment\b|background\b|azimuth\b|attachment\b|applet\b|appearance\b|animation-timing-function\b|animation-play-state\b|animation-name\b|animation-iteration-count\b|animation-duration\b|animation-direction\b|animation-delay\b|animation\b|alignment-baseline\b|alignment-adjust\b|alignment\b|align-last\b|align\b|after\b|adjust\b|acronym\b)[a-z\-\_]+
+ name
+ invalid.illegal
+
+ property_names
+
+ patterns
+
+
+ include
+ #property_name
+
+
+ include
+ #property_name_error
+
+
+
+ property_values
+
+ comment
+ Stuff that should only be available on values.
+ patterns
+
+
+ include
+ #string_single
+
+
+ include
+ #string_double
+
+
+ include
+ #constant_functions
+
+
+ include
+ #constant_sass_functions
+
+
+ include
+ #constant_hex
+
+
+ include
+ #constant_rgb
+
+
+ include
+ #constant_rgb_percentage
+
+
+ include
+ #constant_important
+
+
+ include
+ #constant_default
+
+
+ include
+ #constant_optional
+
+
+ include
+ #constant_unit
+
+
+ include
+ #constant_property_value
+
+
+ include
+ #constant_number
+
+
+ include
+ #constant_font
+
+
+ include
+ #constant_color
+
+
+ include
+ #constant_deprecated_color
+
+
+ include
+ #constant_mathematical_symbols
+
+
+
+ rules
+
+ patterns
+
+
+ include
+ #general
+
+
+ include
+ #at_rule_extend
+
+
+ include
+ #at_rule_content
+
+
+ include
+ #at_rule_include
+
+
+ include
+ #at_rule_media
+
+
+ include
+ #selectors
+
+
+
+ selector_attribute
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.scss
+
+ 2
+
+ name
+ entity.other.attribute-name.attribute.scss
+
+ 3
+
+ name
+ punctuation.separator.operator.scss
+
+ 4
+
+ name
+ string.unquoted.attribute-value.scss
+
+ 5
+
+ name
+ string.quoted.double.attribute-value.scss
+
+ 6
+
+ name
+ punctuation.definition.string.begin.scss
+
+ 7
+
+ name
+ punctuation.definition.string.end.scss
+
+
+ match
+ (?i)(\[)\s*(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)(?:\s*([~|^$*]?=)\s*(?:(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)|((?>(['"])(?:[^\\]|\\.)*?(\6)))))?\s*(\])
+ name
+ meta.attribute-selector.scss
+
+ selector_class
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (\.)[a-zA-Z0-9_-]+
+ name
+ entity.other.attribute-name.class.css
+
+ selector_entities
+
+ match
+ \b(a|abbr|acronym|address|area|article|aside|applet|audio|b|base|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|main|map|mark|menu|meta|meter|nav|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|svg|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video)\b
+ name
+ entity.name.tag.scss
+
+ selector_id
+
+ captures
+
+ 1
+
+ name
+ punctuationctuation.definition.entity.css
+
+
+ match
+ (#)[a-zA-Z][a-zA-Z0-9_-]*
+ name
+ entity.other.attribute-name.id.css
+
+ selector_placeholder
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.scss
+
+
+ match
+ (\%)[a-zA-Z0-9_-]+
+ name
+ entity.other.attribute-name.placeholder.scss
+
+ selector_pseudo_class
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (:)\b(link|visited|hover|active|focus|target|lang|disabled|enabled|checked|indeterminate|root|nth-child()|nth-last-child()|nth-of-type()|nth-last-of-type()|first-child|last-child|first-of-type|last-of-type|only-child|only-of-type|empty|not|valid|invalid)(\([0-9A-Za-z]*\))?
+ name
+ entity.other.attribute-name.pseudo-class.css
+
+ selector_pseudo_element
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (:+)\b(after|before|first-letter|first-line|selection)\b
+ name
+ entity.other.attribute-name.pseudo-element.css
+
+ selectors
+
+ comment
+ Stuff for Selectors.
+ patterns
+
+
+ include
+ #selector_entities
+
+
+ include
+ #selector_class
+
+
+ include
+ #selector_id
+
+
+ include
+ #selector_pseudo_class
+
+
+ include
+ #tag_wildcard
+
+
+ include
+ #tag_parent_reference
+
+
+ include
+ #selector_pseudo_element
+
+
+ include
+ #selector_attribute
+
+
+ include
+ #selector_placeholder
+
+
+
+ string_double
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.scss
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.scss
+
+
+ name
+ string.quoted.double.scss
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.scss
+
+
+ include
+ #interpolation
+
+
+
+ string_single
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.scss
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.scss
+
+
+ name
+ string.quoted.single.scss
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.scss
+
+
+
+ tag_parent_reference
+
+ match
+ \&
+ name
+ entity.name.tag.reference.scss
+
+ tag_wildcard
+
+ match
+ \*
+ name
+ entity.name.tag.wildcard.scss
+
+ variable
+
+ patterns
+
+
+ include
+ #variables
+
+
+ include
+ #interpolation
+
+
+
+ variable_setting
+
+ begin
+ \s*(\$[A-Za-z0-9_-]+\b)\s*(\:)\s*
+ captures
+
+ 1
+
+ name
+ variable
+
+ 2
+
+ name
+ punctuation
+
+
+ end
+ \s*(?=\;)
+ name
+ meta.set.variable
+ patterns
+
+
+ include
+ #property_values
+
+
+ include
+ #variable
+
+
+
+ variables
+
+ captures
+
+ 1
+
+ name
+ variable.scss
+
+
+ match
+ \s*(\$[A-Za-z0-9_-]+\b)\s*
+ name
+ variable.scss
+
+
+ scopeName
+ source.css, source.scss
+ uuid
+ 3D9ADE5E-ADC5-460F-97B3-B61EF5A18273
+
+
diff --git a/app/rcc/edbee/syntaxfiles/SQL.tmLanguage b/app/rcc/edbee/syntaxfiles/SQL.tmLanguage
new file mode 100644
index 00000000..3c3af426
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/SQL.tmLanguage
@@ -0,0 +1,706 @@
+
+
+
+
+ fileTypes
+
+ sql
+ ddl
+ dml
+
+ foldingStartMarker
+ \s*\(\s*$
+ foldingStopMarker
+ ^\s*\)
+ keyEquivalent
+ ^~S
+ name
+ SQL
+ patterns
+
+
+ include
+ #comments
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.create.sql
+
+ 2
+
+ name
+ keyword.other.sql
+
+ 5
+
+ name
+ entity.name.function.sql
+
+
+ match
+ (?i:^\s*(create)\s+(aggregate|conversion|database|domain|function|group|(unique\s+)?index|language|operator class|operator|rule|schema|sequence|table|tablespace|trigger|type|user|view)\s+)(['"`]?)(\w+)\4
+ name
+ meta.create.sql
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.create.sql
+
+ 2
+
+ name
+ keyword.other.sql
+
+
+ match
+ (?i:^\s*(drop)\s+(aggregate|conversion|database|domain|function|group|index|language|operator class|operator|rule|schema|sequence|table|tablespace|trigger|type|user|view))
+ name
+ meta.drop.sql
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.create.sql
+
+ 2
+
+ name
+ keyword.other.table.sql
+
+ 3
+
+ name
+ entity.name.function.sql
+
+ 4
+
+ name
+ keyword.other.cascade.sql
+
+
+ match
+ (?i:\s*(drop)\s+(table)\s+(\w+)(\s+cascade)?\b)
+ name
+ meta.drop.sql
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.create.sql
+
+ 2
+
+ name
+ keyword.other.table.sql
+
+
+ match
+ (?i:^\s*(alter)\s+(aggregate|conversion|database|domain|function|group|index|language|operator class|operator|rule|schema|sequence|table|tablespace|trigger|type|user|view)\s+)
+ name
+ meta.alter.sql
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.sql
+
+ 10
+
+ name
+ constant.numeric.sql
+
+ 11
+
+ name
+ storage.type.sql
+
+ 12
+
+ name
+ storage.type.sql
+
+ 13
+
+ name
+ storage.type.sql
+
+ 14
+
+ name
+ constant.numeric.sql
+
+ 15
+
+ name
+ storage.type.sql
+
+ 2
+
+ name
+ storage.type.sql
+
+ 3
+
+ name
+ constant.numeric.sql
+
+ 4
+
+ name
+ storage.type.sql
+
+ 5
+
+ name
+ constant.numeric.sql
+
+ 6
+
+ name
+ storage.type.sql
+
+ 7
+
+ name
+ constant.numeric.sql
+
+ 8
+
+ name
+ constant.numeric.sql
+
+ 9
+
+ name
+ storage.type.sql
+
+
+ match
+ (?xi)
+
+ # normal stuff, capture 1
+ \b(bigint|bigserial|bit|boolean|box|bytea|cidr|circle|date|double\sprecision|inet|int|integer|line|lseg|macaddr|money|oid|path|point|polygon|real|serial|smallint|sysdate|text)\b
+
+ # numeric suffix, capture 2 + 3i
+ |\b(bit\svarying|character\s(?:varying)?|tinyint|var\schar|float|interval)\((\d+)\)
+
+ # optional numeric suffix, capture 4 + 5i
+ |\b(char|number|varchar\d?)\b(?:\((\d+)\))?
+
+ # special case, capture 6 + 7i + 8i
+ |\b(numeric)\b(?:\((\d+),(\d+)\))?
+
+ # special case, captures 9, 10i, 11
+ |\b(times)(?:\((\d+)\))(\swithoutstimeszone\b)?
+
+ # special case, captures 12, 13, 14i, 15
+ |\b(timestamp)(?:(s)\((\d+)\)(\swithoutstimeszone\b)?)?
+
+
+
+
+ match
+ (?i:\b((?:primary|foreign)\s+key|references|on\sdelete(\s+cascade)?|check|constraint)\b)
+ name
+ storage.modifier.sql
+
+
+ match
+ \b\d+\b
+ name
+ constant.numeric.sql
+
+
+ match
+ (?i:\b(select(\s+distinct)?|insert\s+(ignore\s+)?into|update|delete|from|set|where|group\sby|or|like|and|union(\s+all)?|having|order\sby|limit|(inner|cross)\s+join|straight_join|(left|right)(\s+outer)?\s+join|natural(\s+(left|right)(\s+outer)?)?\s+join)\b)
+ name
+ keyword.other.DML.sql
+
+
+ match
+ (?i:\b(on|((is\s+)?not\s+)?null)\b)
+ name
+ keyword.other.DDL.create.II.sql
+
+
+ match
+ (?i:\bvalues\b)
+ name
+ keyword.other.DML.II.sql
+
+
+ match
+ (?i:\b(begin(\s+work)?|start\s+transaction|commit(\s+work)?|rollback(\s+work)?)\b)
+ name
+ keyword.other.LUW.sql
+
+
+ match
+ (?i:\b(grant(\swith\sgrant\soption)?|revoke)\b)
+ name
+ keyword.other.authorization.sql
+
+
+ match
+ (?i:\bin\b)
+ name
+ keyword.other.data-integrity.sql
+
+
+ match
+ (?i:^\s*(comment\s+on\s+(table|column|aggregate|constraint|database|domain|function|index|operator|rule|schema|sequence|trigger|type|view))\s+.*?\s+(is)\s+)
+ name
+ keyword.other.object-comments.sql
+
+
+ match
+ (?i)\bAS\b
+ name
+ keyword.other.alias.sql
+
+
+ match
+ (?i)\b(DESC|ASC)\b
+ name
+ keyword.other.order.sql
+
+
+ match
+ \*
+ name
+ keyword.operator.star.sql
+
+
+ match
+ [!<>]?=|<>|<|>
+ name
+ keyword.operator.comparison.sql
+
+
+ match
+ -|\+|/
+ name
+ keyword.operator.math.sql
+
+
+ match
+ \|\|
+ name
+ keyword.operator.concatenator.sql
+
+
+ comment
+ List of SQL99 built-in functions from http://www.oreilly.com/catalog/sqlnut/chapter/ch04.html
+ match
+ (?i)\b(CURRENT_(DATE|TIME(STAMP)?|USER)|(SESSION|SYSTEM)_USER)\b
+ name
+ support.function.scalar.sql
+
+
+ comment
+ List of SQL99 built-in functions from http://www.oreilly.com/catalog/sqlnut/chapter/ch04.html
+ match
+ (?i)\b(AVG|COUNT|MIN|MAX|SUM)(?=\s*\()
+ name
+ support.function.aggregate.sql
+
+
+ match
+ (?i)\b(CONCATENATE|CONVERT|LOWER|SUBSTRING|TRANSLATE|TRIM|UPPER)\b
+ name
+ support.function.string.sql
+
+
+ captures
+
+ 1
+
+ name
+ constant.other.database-name.sql
+
+ 2
+
+ name
+ constant.other.table-name.sql
+
+
+ match
+ \b(\w+?)\.(\w+)\b
+
+
+
+ include
+ #strings
+
+
+ include
+ #regexps
+
+
+ repository
+
+ comments
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.sql
+
+
+ match
+ (--).*$\n?
+ name
+ comment.line.double-dash.sql
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.sql
+
+
+ match
+ (#).*$\n?
+ name
+ comment.line.number-sign.sql
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.sql
+
+
+ end
+ \*/
+ name
+ comment.block.c
+
+
+
+ regexps
+
+ patterns
+
+
+ begin
+ /(?=\S.*/)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.sql
+
+
+ end
+ /
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.sql
+
+
+ name
+ string.regexp.sql
+ patterns
+
+
+ include
+ #string_interpolation
+
+
+ match
+ \\/
+ name
+ constant.character.escape.slash.sql
+
+
+
+
+ begin
+ %r\{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.sql
+
+
+ comment
+ We should probably handle nested bracket pairs!?! -- Allan
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.sql
+
+
+ name
+ string.regexp.modr.sql
+ patterns
+
+
+ include
+ #string_interpolation
+
+
+
+
+
+ string_escape
+
+ match
+ \\.
+ name
+ constant.character.escape.sql
+
+ string_interpolation
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.end.sql
+
+
+ match
+ (#\{)([^\}]*)(\})
+ name
+ string.interpolated.sql
+
+ strings
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.sql
+
+ 3
+
+ name
+ punctuation.definition.string.end.sql
+
+
+ comment
+ this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines.
+ match
+ (')[^'\\]*(')
+ name
+ string.quoted.single.sql
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.sql
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.sql
+
+
+ name
+ string.quoted.single.sql
+ patterns
+
+
+ include
+ #string_escape
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.sql
+
+ 3
+
+ name
+ punctuation.definition.string.end.sql
+
+
+ comment
+ this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines.
+ match
+ (`)[^`\\]*(`)
+ name
+ string.quoted.other.backtick.sql
+
+
+ begin
+ `
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.sql
+
+
+ end
+ `
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.sql
+
+
+ name
+ string.quoted.other.backtick.sql
+ patterns
+
+
+ include
+ #string_escape
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.sql
+
+ 3
+
+ name
+ punctuation.definition.string.end.sql
+
+
+ comment
+ this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines.
+ match
+ (")[^"#]*(")
+ name
+ string.quoted.double.sql
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.sql
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.sql
+
+
+ name
+ string.quoted.double.sql
+ patterns
+
+
+ include
+ #string_interpolation
+
+
+
+
+ begin
+ %\{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.sql
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.sql
+
+
+ name
+ string.other.quoted.brackets.sql
+ patterns
+
+
+ include
+ #string_interpolation
+
+
+
+
+
+
+ scopeName
+ source.sql
+ uuid
+ C49120AC-6ECC-11D9-ACC8-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Scala.tmLanguage b/app/rcc/edbee/syntaxfiles/Scala.tmLanguage
new file mode 100644
index 00000000..396c653e
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Scala.tmLanguage
@@ -0,0 +1,652 @@
+
+
+
+
+ bundleUUID
+ 452017E8-0065-49EF-AB9D-7849B27D9367
+ fileTypes
+
+ scala
+
+ foldingStartMarker
+ /\*\*|\{\s*$
+ foldingStopMarker
+ \*\*/|^\s*\}
+ keyEquivalent
+ ^~S
+ name
+ Scala
+ patterns
+
+
+ include
+ #storage-modifiers
+
+
+ include
+ #keywords
+
+
+ include
+ #declarations
+
+
+ include
+ #inheritance
+
+
+ include
+ #imports
+
+
+ include
+ #comments
+
+
+ include
+ #block-comments
+
+
+ include
+ #strings
+
+
+ include
+ #initialization
+
+
+ include
+ #constants
+
+
+ include
+ #char-literal
+
+
+ include
+ #scala-symbol
+
+
+ include
+ #empty-parentheses
+
+
+ include
+ #parameter-list
+
+
+ include
+ #qualifiedClassName
+
+
+ include
+ #xml-literal
+
+
+ repository
+
+ block-comments
+
+ begin
+ /\*
+ end
+ \*/
+ name
+ comment.block.scala
+ patterns
+
+
+ include
+ #block-comments
+
+
+ match
+ (?x)
+ (?! /\*)
+ (?! \*/)
+
+
+
+
+ char-literal
+
+ match
+ '\\?.'
+ name
+ constant.character.literal.scala
+
+ comments
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.scala
+
+
+ match
+ (//).*$\n?
+ name
+ comment.line.double-slash.scala
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.scala
+
+
+ match
+ /\*\*/
+ name
+ comment.block.empty.scala
+
+
+ begin
+ (^\s*)?/\*\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.scala
+
+
+ end
+ \*/(\s*\n)?
+ name
+ comment.block.documentation.scala
+ patterns
+
+
+ match
+ (@\w+\s)
+ name
+ keyword.other.documentation.scaladoc.scala
+
+
+ match
+ \{@link\s+[^\}]*\}
+ name
+ keyword.other.documentation.scaladoc.link.scala
+
+
+
+
+
+ constants
+
+ patterns
+
+
+ match
+ \b(false|null|true|Nil|None)\b
+ name
+ constant.language.scala
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\b
+ name
+ constant.numeric.scala
+
+
+ match
+ \b(this|super|self)\b
+ name
+ variable.language.scala
+
+
+ match
+ \b(Unit|Boolean|Byte|Char|Short|Int|Float|Long|Double)\b
+ name
+ storage.type.primitive.scala
+
+
+
+ declarations
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ keyword.declaration.scala
+
+ 2
+
+ name
+ entity.name.function.declaration
+
+
+ match
+ (?x)
+ \b(def)\s+
+ (([a-zA-Z$_][a-zA-Z0-9$_]*(_[^a-zA-Z0-9\s]+)?)|`.*`|[^\w\[\(\:\_\s]+)
+
+
+ captures
+
+ 1
+
+ name
+ keyword.declaration.scala
+
+ 2
+
+ name
+ keyword.declaration.scala
+
+ 3
+
+ name
+ entity.name.class.declaration
+
+
+ match
+ (case)?\b(class|trait|object)\s+([^\s\{\(\[]+)
+
+
+ captures
+
+ 1
+
+ name
+ keyword.declaration.scala
+
+ 2
+
+ name
+ entity.name.type.declaration
+
+
+ match
+ \b(type)\s+(([a-zA-Z$_][a-zA-Z0-9$_]*(_[^a-zA-Z0-9\s]+)?)|`.*`)
+
+
+ captures
+
+ 1
+
+ name
+ keyword.declaration.stable.scala
+
+ 2
+
+ name
+ keyword.declaration.volatile.scala
+
+ 3
+
+ name
+ entity.name.val.declaration
+
+
+ match
+ \b(?:(val)|(var))\s+(([a-zA-Z$_][a-zA-Z0-9$_]*(_[^a-zA-Z0-9\s]+)?)|`.*`)?
+
+
+ captures
+
+ 1
+
+ name
+ keyword.declaration.scala
+
+ 2
+
+ name
+ entity.name.class.declaration
+
+
+ match
+ \b(package object)\s+([^\s\{\(\[]+)
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.scoping.scala
+
+ 2
+
+ name
+ entity.name.package.scala
+
+
+ match
+ \b(package)\s+([\w\.]+)
+ name
+ meta.package.scala
+
+
+
+ empty-parentheses
+
+ match
+ \(\)
+ name
+ meta.parentheses.scala
+
+ imports
+
+ begin
+ \b(import)\s+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.import.scala
+
+
+ end
+ (?<=[\n;])
+ name
+ meta.import.scala
+ patterns
+
+
+ include
+ #comments
+
+
+ match
+ ([^\s{;.]+)\s*\.\s*
+ name
+ variable.package.scala
+
+
+ match
+ ([^\s{;.]+)\s*
+ name
+ variable.import.scala
+
+
+ begin
+ {
+ end
+ }
+ name
+ meta.import.selector.scala
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ variable.import.renamed-from.scala
+
+ 2
+
+ name
+ keyword.other.arrow.scala
+
+ 3
+
+ name
+ variable.import.renamed-to.scala
+
+
+ match
+ (?x) \s*
+ ([^\s.,}]+) \s*
+ (=>) \s*
+ ([^\s.,}]+) \s*
+
+
+
+ match
+ ([^\s.,}]+)
+ name
+ variable.import.scala
+
+
+
+
+
+ inheritance
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ keyword.declaration.scala
+
+ 2
+
+ name
+ entity.other.inherited-class.scala
+
+
+ match
+ (extends|with)\s+([^\s\{\(\[\]]+)
+
+
+
+ initialization
+
+ captures
+
+ 1
+
+ name
+ keyword
+
+ 2
+
+ name
+ entity.name.class
+
+
+ match
+ \b(new)\s+([^\s\{\(\[]+)
+
+ keywords
+
+ patterns
+
+
+ match
+ \b(return|throw)\b
+ name
+ keyword.control.flow.jump.scala
+
+
+ match
+ \b(else|if|do|while|for|yield|match|case)\b
+ name
+ keyword.control.flow.scala
+
+
+ match
+ \b(catch|finally|try)\b
+ name
+ keyword.control.exception.scala
+
+
+
+ parameter-list
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ variable.parameter
+
+ 2
+
+ name
+ entity.name.class
+
+
+ match
+ ([a-zA-Z$_][a-zA-Z0-9$_]*)\s*:\s*([A-Za-z0-9][\w|_|?|\.]*)?,?
+
+
+
+ qualifiedClassName
+
+ captures
+
+ 1
+
+ name
+ entity.name.class
+
+
+ match
+ (\b([A-Z][\w]*))
+
+ scala-symbol
+
+ captures
+
+ 1
+
+ name
+ entity.name.symbol
+
+
+ match
+ ('\w+)
+
+ storage-modifiers
+
+ patterns
+
+
+ match
+ \b(private\[\S+\]|protected\[\S+\]|private|protected)\b
+ name
+ storage.modifier.access
+
+
+ match
+ \b(synchronized|@volatile|abstract|final|lazy|sealed|implicit|override|@transient|@native)\b
+ name
+ storage.modifier.other
+
+
+
+ strings
+
+ patterns
+
+
+ begin
+ """
+ end
+ """
+ name
+ string.quoted.triple.scala
+
+
+ begin
+ (?<!\\)"
+ end
+ "
+ name
+ string.quoted.double.scala
+ patterns
+
+
+ match
+ \n
+ name
+ invalid.string.newline
+
+
+ match
+ \\.
+ name
+ constant.character.escape.scala
+
+
+
+
+
+ xml-attribute
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ entity.other.attribute-name
+
+ 2
+
+ name
+ string.quoted.double
+
+
+ match
+ (\w+)=("[^"]*")
+
+
+
+ xml-literal
+
+ patterns
+
+
+ begin
+ </?([a-zA-Z0-9]+)
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.tag
+
+
+ end
+ /?>
+ name
+ text.xml
+ patterns
+
+
+ include
+ #xml-literal
+
+
+ include
+ #xml-attribute
+
+
+
+
+
+
+ scopeName
+ source.scala
+ uuid
+ 158C0929-299A-40C8-8D89-316BE0C446E8
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Shell-Unix-Generic.tmLanguage b/app/rcc/edbee/syntaxfiles/Shell-Unix-Generic.tmLanguage
new file mode 100644
index 00000000..db039cdc
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Shell-Unix-Generic.tmLanguage
@@ -0,0 +1,1856 @@
+
+
+
+
+ fileTypes
+
+ sh
+ bash
+ zsh
+ .bashrc
+ .bash_profile
+ .bash_login
+ .profile
+ .bash_logout
+ .textmate_init
+
+ firstLineMatch
+ ^#!.*\b(bash|zsh|sh|tcsh)|^#\s*-\*-[^*]*mode:\s*shell-script[^*]*-\*-
+ foldingStartMarker
+ \b(if|case)\b|(\{|\b(do)\b)$
+ foldingStopMarker
+ ^\s*(\}|(done|fi|esac)\b)
+ keyEquivalent
+ ^~S
+ name
+ Shell Script (Bash)
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #pipeline
+
+
+ include
+ #list
+
+
+ include
+ #compound-command
+
+
+ include
+ #loop
+
+
+ include
+ #function-definition
+
+
+ include
+ #string
+
+
+ include
+ #variable
+
+
+ include
+ #interpolation
+
+
+ include
+ #heredoc
+
+
+ include
+ #herestring
+
+
+ include
+ #redirection
+
+
+ include
+ #pathname
+
+
+ include
+ #keyword
+
+
+ include
+ #support
+
+
+ repository
+
+ case-clause
+
+ patterns
+
+
+ begin
+ (?=\S)
+ end
+ ;;
+ endCaptures
+
+ 0
+
+ name
+ punctuation.terminator.case-clause.shell
+
+
+ name
+ meta.scope.case-clause.shell
+ patterns
+
+
+ begin
+ (\(|(?=\S))
+ captures
+
+ 0
+
+ name
+ punctuation.definition.case-pattern.shell
+
+
+ end
+ \)
+ name
+ meta.scope.case-pattern.shell
+ patterns
+
+
+ match
+ \|
+ name
+ punctuation.separator.pipe-sign.shell
+
+
+ include
+ #string
+
+
+ include
+ #variable
+
+
+ include
+ #interpolation
+
+
+ include
+ #pathname
+
+
+
+
+ begin
+ (?<=\))
+ end
+ (?=;;)
+ name
+ meta.scope.case-clause-body.shell
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+
+
+ comment
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.shell
+
+
+ match
+ (?<!\S)(#)(?!\{).*$\n?
+ name
+ comment.line.number-sign.shell
+
+
+
+ compound-command
+
+ patterns
+
+
+ begin
+ (\[{2})
+ captures
+
+ 1
+
+ name
+ punctuation.definition.logical-expression.shell
+
+
+ end
+ (\]{2})
+ name
+ meta.scope.logical-expression.shell
+ patterns
+
+
+ include
+ #logical-expression
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (\({2})
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.shell
+
+
+ end
+ (\){2})
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.shell
+
+
+ name
+ string.other.math.shell
+ patterns
+
+
+ include
+ #math
+
+
+
+
+ begin
+ (\()
+ captures
+
+ 1
+
+ name
+ punctuation.definition.subshell.shell
+
+
+ end
+ (\))
+ name
+ meta.scope.subshell.shell
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ (?<=\s|^)(\{)(?=\s|$)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.group.shell
+
+
+ end
+ (?<=^|;)\s*(\})
+ name
+ meta.scope.group.shell
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+ function-definition
+
+ patterns
+
+
+ begin
+ \b(function)\s+([^\s\\]+)(?:\s*(\(\)))?
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.shell
+
+ 2
+
+ name
+ entity.name.function.shell
+
+ 3
+
+ name
+ punctuation.definition.arguments.shell
+
+
+ end
+ ;|&|$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.function.shell
+
+
+ name
+ meta.function.shell
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ \b([^\s\\=]+)\s*(\(\))
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.shell
+
+ 2
+
+ name
+ punctuation.definition.arguments.shell
+
+
+ end
+ ;|&|$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.function.shell
+
+
+ name
+ meta.function.shell
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+ heredoc
+
+ patterns
+
+
+ begin
+ (<<)-("|'|)(RUBY)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ contentName
+ source.ruby.embedded.shell
+ end
+ ^\t*(RUBY)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.no-indent.ruby.shell
+ patterns
+
+
+ include
+ source.ruby
+
+
+
+
+ begin
+ (<<)("|'|)(RUBY)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ contentName
+ source.ruby.embedded.shell
+ end
+ ^(RUBY)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.ruby.shell
+ patterns
+
+
+ include
+ source.ruby
+
+
+
+
+ begin
+ (<<)-("|'|)(PYTHON)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ contentName
+ source.python.embedded.shell
+ end
+ ^\t*(PYTHON)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.no-indent.python.shell
+ patterns
+
+
+ include
+ source.python
+
+
+
+
+ begin
+ (<<)("|'|)(PYTHON)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ contentName
+ source.python.embedded.shell
+ end
+ ^(PYTHON)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.python.shell
+ patterns
+
+
+ include
+ source.python
+
+
+
+
+ begin
+ (<<)-("|'|)(APPLESCRIPT)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ contentName
+ source.applescript.embedded.shell
+ end
+ ^\t*(APPLESCRIPT)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.no-indent.applescript.shell
+ patterns
+
+
+ include
+ source.applescript
+
+
+
+
+ begin
+ (<<)("|'|)(APPLESCRIPT)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ contentName
+ source.applescript.embedded.shell
+ end
+ ^(APPLESCRIPT)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.applescript.shell
+ patterns
+
+
+ include
+ source.applescript
+
+
+
+
+ begin
+ (<<)-("|'|)(HTML)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ contentName
+ text.html.embedded.shell
+ end
+ ^\t*(HTML)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.no-indent.html.shell
+ patterns
+
+
+ include
+ text.html.basic
+
+
+
+
+ begin
+ (<<)("|'|)(HTML)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ contentName
+ text.html.embedded.shell
+ end
+ ^(HTML)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.html.shell
+ patterns
+
+
+ include
+ text.html.basic
+
+
+
+
+ begin
+ (<<)-("|'|)(MARKDOWN)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ contentName
+ text.html.markdown.embedded.shell
+ end
+ ^\t*(MARKDOWN)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.no-indent.markdown.shell
+ patterns
+
+
+ include
+ text.html.markdown
+
+
+
+
+ begin
+ (<<)("|'|)(MARKDOWN)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ contentName
+ text.html.markdown.embedded.shell
+ end
+ ^(MARKDOWN)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.markdown.shell
+ patterns
+
+
+ include
+ text.html.markdown
+
+
+
+
+ begin
+ (<<)-("|'|)(TEXTILE)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ contentName
+ text.html.textile.embedded.shell
+ end
+ ^\t*(TEXTILE)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.no-indent.textile.shell
+ patterns
+
+
+ include
+ text.html.textile
+
+
+
+
+ begin
+ (<<)("|'|)(TEXTILE)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ contentName
+ text.html.textile.embedded.shell
+ end
+ ^(TEXTILE)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.textile.shell
+ patterns
+
+
+ include
+ text.html.textile
+
+
+
+
+ begin
+ (<<)-("|'|)\\?(\w+)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ end
+ ^\t*(\3)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.no-indent.shell
+
+
+ begin
+ (<<)("|'|)\\?(\w+)\2
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.heredoc.shell
+
+ 3
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.shell
+
+
+ end
+ ^(\3)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.heredoc-token.shell
+
+
+ name
+ string.unquoted.heredoc.shell
+
+
+
+ herestring
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.herestring.shell
+
+ 2
+
+ name
+ string.quoted.single.herestring.shell
+
+ 3
+
+ name
+ punctuation.definition.string.begin.shell
+
+ 4
+
+ name
+ punctuation.definition.string.end.shell
+
+
+ match
+ (<<<)((')[^']*('))
+ name
+ meta.herestring.shell
+
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.herestring.shell
+
+ 2
+
+ name
+ string.quoted.double.herestring.shell
+
+ 3
+
+ name
+ punctuation.definition.string.begin.shell
+
+ 6
+
+ name
+ punctuation.definition.string.end.shell
+
+
+ match
+ (<<<)((")(\\("|\\)|[^"])*("))
+ name
+ meta.herestring.shell
+
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.herestring.shell
+
+ 2
+
+ name
+ string.unquoted.herestring.shell
+
+
+ match
+ (<<<)(([^\s\\]|\\.)+)
+ name
+ meta.herestring.shell
+
+
+
+ interpolation
+
+ patterns
+
+
+ begin
+ \$\({2}
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.shell
+
+
+ end
+ \){2}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.shell
+
+
+ name
+ string.other.math.shell
+ patterns
+
+
+ include
+ #math
+
+
+
+
+ begin
+ `
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.shell
+
+
+ end
+ `
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.shell
+
+
+ name
+ string.interpolated.backtick.shell
+ patterns
+
+
+ match
+ \\[`\\$]
+ name
+ constant.character.escape.shell
+
+
+ include
+ $self
+
+
+
+
+ begin
+ \$\(
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.shell
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.shell
+
+
+ name
+ string.interpolated.dollar.shell
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+ keyword
+
+ patterns
+
+
+ match
+ \b(?:if|then|else|elif|fi|for|in|do|done|select|case|continue|esac|while|until|return)\b
+ name
+ keyword.control.shell
+
+
+ match
+ (?<![-/])\b(?:export|declare|typeset|local|readonly)\b
+ name
+ storage.modifier.shell
+
+
+
+ list
+
+ patterns
+
+
+ match
+ ;|&&|&|\|\|
+ name
+ keyword.operator.list.shell
+
+
+
+ logical-expression
+
+ patterns
+
+
+ comment
+ do we want a special rule for ( expr )?
+ match
+ =[=~]?|!=?|<|>|&&|\|\|
+ name
+ keyword.operator.logical.shell
+
+
+ match
+ (?<!\S)-(nt|ot|ef|eq|ne|l[te]|g[te]|[a-hknoprstuwxzOGLSN])
+ name
+ keyword.operator.logical.shell
+
+
+
+ loop
+
+ patterns
+
+
+ begin
+ \b(for)\s+(?=\({2})
+ captures
+
+ 1
+
+ name
+ keyword.control.shell
+
+
+ end
+ \b(done)\b
+ name
+ meta.scope.for-loop.shell
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ \b(for)\s+((?:[^\s\\]|\\.)+)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.shell
+
+ 2
+
+ name
+ variable.other.loop.shell
+
+
+ end
+ \b(done)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.shell
+
+
+ name
+ meta.scope.for-in-loop.shell
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ \b(while|until)\b
+ captures
+
+ 1
+
+ name
+ keyword.control.shell
+
+
+ end
+ \b(done)\b
+ name
+ meta.scope.while-loop.shell
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ \b(select)\s+((?:[^\s\\]|\\.)+)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.shell
+
+ 2
+
+ name
+ variable.other.loop.shell
+
+
+ end
+ \b(done)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.shell
+
+
+ name
+ meta.scope.select-block.shell
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ \b(case)\b
+ captures
+
+ 1
+
+ name
+ keyword.control.shell
+
+
+ end
+ \b(esac)\b
+ name
+ meta.scope.case-block.shell
+ patterns
+
+
+ begin
+ \b(?:in)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.shell
+
+
+ end
+ (?=\b(?:esac)\b)
+ name
+ meta.scope.case-body.shell
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #case-clause
+
+
+ include
+ $self
+
+
+
+
+ include
+ $self
+
+
+
+
+ begin
+ \b(if)\b
+ captures
+
+ 1
+
+ name
+ keyword.control.shell
+
+
+ end
+ \b(fi)\b
+ name
+ meta.scope.if-block.shell
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+ math
+
+ patterns
+
+
+ include
+ #variable
+
+
+ match
+ \+{1,2}|-{1,2}|!|~|\*{1,2}|/|%|<[<=]?|>[>=]?|==|!=|^|\|{1,2}|&{1,2}|\?|\:|,|=|[*/%+\-&^|]=|<<=|>>=
+ name
+ keyword.operator.arithmetic.shell
+
+
+ match
+ 0[xX]\h+
+ name
+ constant.numeric.hex.shell
+
+
+ match
+ 0\d+
+ name
+ constant.numeric.octal.shell
+
+
+ match
+ \d{1,2}#[0-9a-zA-Z@_]+
+ name
+ constant.numeric.other.shell
+
+
+ match
+ \d+
+ name
+ constant.numeric.integer.shell
+
+
+
+ pathname
+
+ patterns
+
+
+ match
+ (?<=\s|:|=|^)~
+ name
+ keyword.operator.tilde.shell
+
+
+ match
+ \*|\?
+ name
+ keyword.operator.glob.shell
+
+
+ begin
+ ([?*+@!])(\()
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.extglob.shell
+
+ 2
+
+ name
+ punctuation.definition.extglob.shell
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.extglob.shell
+
+
+ name
+ meta.structure.extglob.shell
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+ pipeline
+
+ patterns
+
+
+ match
+ \b(time)\b
+ name
+ keyword.other.shell
+
+
+ match
+ [|!]
+ name
+ keyword.operator.pipe.shell
+
+
+
+ redirection
+
+ patterns
+
+
+ begin
+ [><]\(
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.shell
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.shell
+
+
+ name
+ string.interpolated.process-substitution.shell
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ comment
+ valid: &>word >&word >word [n]>&[n] [n]<word [n]>word [n]>>word [n]<&word (last one is duplicate)
+ match
+ &>|\d*>&\d*|\d*(>>|>|<)|\d*<&|\d*<>
+ name
+ keyword.operator.redirect.shell
+
+
+
+ string
+
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.shell
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.shell
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.shell
+
+
+ name
+ string.quoted.single.shell
+
+
+ begin
+ \$?"
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.shell
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.shell
+
+
+ name
+ string.quoted.double.shell
+ patterns
+
+
+ match
+ \\[\$`"\\\n]
+ name
+ constant.character.escape.shell
+
+
+ include
+ #variable
+
+
+ include
+ #interpolation
+
+
+
+
+ begin
+ \$'
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.shell
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.shell
+
+
+ name
+ string.quoted.single.dollar.shell
+ patterns
+
+
+ match
+ \\(a|b|e|f|n|r|t|v|\\|')
+ name
+ constant.character.escape.ansi-c.shell
+
+
+ match
+ \\[0-9]{3}
+ name
+ constant.character.escape.octal.shell
+
+
+ match
+ \\x[0-9a-fA-F]{2}
+ name
+ constant.character.escape.hex.shell
+
+
+ match
+ \\c.
+ name
+ constant.character.escape.control-char.shell
+
+
+
+
+
+ support
+
+ patterns
+
+
+ match
+ (?<=^|\s)(?::|\.)(?=\s|;|&|$)
+ name
+ support.function.builtin.shell
+
+
+ match
+ (?<![-/])\b(?:alias|bg|bind|break|builtin|caller|cd|command|compgen|complete|dirs|disown|echo|enable|eval|exec|exit|false|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|read|readonly|set|shift|shopt|source|suspend|test|times|trap|true|type|ulimit|umask|unalias|unset|wait)\b
+ name
+ support.function.builtin.shell
+
+
+
+ variable
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.shell
+
+
+ match
+ (\$)[-*@#?$!0_]
+ name
+ variable.other.special.shell
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.shell
+
+
+ match
+ (\$)[1-9]
+ name
+ variable.other.positional.shell
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.shell
+
+
+ match
+ (\$)[a-zA-Z_][a-zA-Z0-9_]*
+ name
+ variable.other.normal.shell
+
+
+ begin
+ \$\{
+ captures
+
+ 0
+
+ name
+ punctuation.definition.variable.shell
+
+
+ end
+ \}
+ name
+ variable.other.bracket.shell
+ patterns
+
+
+ match
+ !|:[-=?]?|\*|@|#{1,2}|%{1,2}|/
+ name
+ keyword.operator.expansion.shell
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.section.array.shell
+
+ 3
+
+ name
+ punctuation.section.array.shell
+
+
+ match
+ (\[)([^\]]+)(\])
+
+
+
+
+
+
+ scopeName
+ source.shell
+ uuid
+ DDEEA3ED-6B1C-11D9-8B10-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Tcl.tmLanguage b/app/rcc/edbee/syntaxfiles/Tcl.tmLanguage
new file mode 100644
index 00000000..e999ef83
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Tcl.tmLanguage
@@ -0,0 +1,432 @@
+
+
+
+
+ fileTypes
+
+ tcl
+
+ foldingStartMarker
+ \{\s*$
+ foldingStopMarker
+ ^\s*\}
+ keyEquivalent
+ ^~T
+ name
+ Tcl
+ patterns
+
+
+ begin
+ (?<=^|;)\s*((#))
+ beginCaptures
+
+ 1
+
+ name
+ comment.line.number-sign.tcl
+
+ 2
+
+ name
+ punctuation.definition.comment.tcl
+
+
+ contentName
+ comment.line.number-sign.tcl
+ end
+ \n
+ patterns
+
+
+ match
+ (\\\\|\\\n)
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.tcl
+
+
+ match
+ (?<=^|[\[{;])\s*(if|while|for|catch|return|break|continue|switch|exit|foreach)\b
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.tcl
+
+
+ match
+ (?<=^|})\s*(then|elseif|else)\b
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.tcl
+
+ 2
+
+ name
+ entity.name.function.tcl
+
+
+ match
+ ^\s*(proc)\s+([^\s]+)
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.tcl
+
+
+ match
+ (?<=^|[\[{;])\s*(after|append|array|auto_execok|auto_import|auto_load|auto_mkindex|auto_mkindex_old|auto_qualify|auto_reset|bgerror|binary|cd|clock|close|concat|dde|encoding|eof|error|eval|exec|expr|fblocked|fconfigure|fcopy|file|fileevent|filename|flush|format|gets|glob|global|history|http|incr|info|interp|join|lappend|library|lindex|linsert|list|llength|load|lrange|lreplace|lsearch|lset|lsort|memory|msgcat|namespace|open|package|parray|pid|pkg::create|pkg_mkIndex|proc|puts|pwd|re_syntax|read|registry|rename|resource|scan|seek|set|socket|SafeBase|source|split|string|subst|Tcl|tcl_endOfWord|tcl_findLibrary|tcl_startOfNextWord|tcl_startOfPreviousWord|tcl_wordBreakAfter|tcl_wordBreakBefore|tcltest|tclvars|tell|time|trace|unknown|unset|update|uplevel|upvar|variable|vwait)\b
+
+
+ begin
+ (?<=^|[\[{;])\s*(regexp|regsub)\b\s*
+ beginCaptures
+
+ 1
+
+ name
+ keyword.other.tcl
+
+
+ comment
+ special-case regexp/regsub keyword in order to handle the expression
+ end
+ [\n;\]]
+ patterns
+
+
+ match
+ \\(?:.|\n)
+ name
+ constant.character.escape.tcl
+
+
+ comment
+ switch for regexp
+ match
+ -\w+\s*
+
+
+ applyEndPatternLast
+ 1
+ begin
+ --\s*
+ comment
+ end of switches
+ end
+
+ patterns
+
+
+ include
+ #regexp
+
+
+
+
+ include
+ #regexp
+
+
+
+
+ include
+ #escape
+
+
+ include
+ #variable
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.tcl
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.tcl
+
+
+ name
+ string.quoted.double.tcl
+ patterns
+
+
+ include
+ #escape
+
+
+ include
+ #variable
+
+
+ include
+ #embedded
+
+
+
+
+ repository
+
+ bare-string
+
+ begin
+ (?:^|(?<=\s))"
+ comment
+ matches a single quote-enclosed word without scoping
+ end
+ "([^\s\]]*)
+ endCaptures
+
+ 1
+
+ name
+ invalid.illegal.tcl
+
+
+ patterns
+
+
+ include
+ #escape
+
+
+ include
+ #variable
+
+
+
+ braces
+
+ begin
+ (?:^|(?<=\s))\{
+ comment
+ matches a single brace-enclosed word
+ end
+ \}([^\s\]]*)
+ endCaptures
+
+ 1
+
+ name
+ invalid.illegal.tcl
+
+
+ patterns
+
+
+ match
+ \\[{}\n]
+ name
+ constant.character.escape.tcl
+
+
+ include
+ #inner-braces
+
+
+
+ embedded
+
+ begin
+ \[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.begin.tcl
+
+
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.end.tcl
+
+
+ name
+ source.tcl.embedded
+ patterns
+
+
+ include
+ source.tcl
+
+
+
+ escape
+
+ match
+ \\(\d{1,3}|x[a-fA-F0-9]+|u[a-fA-F0-9]{1,4}|.|\n)
+ name
+ constant.character.escape.tcl
+
+ inner-braces
+
+ begin
+ \{
+ comment
+ matches a nested brace in a brace-enclosed word
+ end
+ \}
+ patterns
+
+
+ match
+ \\[{}\n]
+ name
+ constant.character.escape.tcl
+
+
+ include
+ #inner-braces
+
+
+
+ regexp
+
+ begin
+ (?=\S)(?![\n;\]])
+ comment
+ matches a single word, named as a regexp, then swallows the rest of the command
+ end
+ (?=[\n;\]])
+ patterns
+
+
+ begin
+ (?=[^ \t\n;])
+ end
+ (?=[ \t\n;])
+ name
+ string.regexp.tcl
+ patterns
+
+
+ include
+ #braces
+
+
+ include
+ #bare-string
+
+
+ include
+ #escape
+
+
+ include
+ #variable
+
+
+
+
+ begin
+ [ \t]
+ comment
+ swallow the rest of the command
+ end
+ (?=[\n;\]])
+ patterns
+
+
+ include
+ #variable
+
+
+ include
+ #embedded
+
+
+ include
+ #escape
+
+
+ include
+ #braces
+
+
+ include
+ #string
+
+
+
+
+
+ string
+
+ applyEndPatternLast
+ 1
+ begin
+ (?:^|(?<=\s))(?=")
+ comment
+ matches a single quote-enclosed word with scoping
+ end
+
+ name
+ string.quoted.double.tcl
+ patterns
+
+
+ include
+ #bare-string
+
+
+
+ variable
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.tcl
+
+
+ match
+ (\$)((?:[a-zA-Z0-9_]|::)+(\([^\)]+\))?|\{[^\}]*\})
+ name
+ variable.other.tcl
+
+
+ scopeName
+ source.tcl
+ uuid
+ F01F22AC-7CBB-11D9-9B10-000A95E13C98
+
+
diff --git a/app/rcc/edbee/syntaxfiles/TeX Math.tmLanguage b/app/rcc/edbee/syntaxfiles/TeX Math.tmLanguage
new file mode 100644
index 00000000..811ad49e
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/TeX Math.tmLanguage
@@ -0,0 +1,132 @@
+
+
+
+
+ fileTypes
+
+ foldingStartMarker
+ /\*\*|\{\s*$
+ foldingStopMarker
+ \*\*/|^\s*\}
+ name
+ TeX Math
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.math.tex
+
+
+ match
+ (\\)(s(s(earrow|warrow|lash)|h(ort(downarrow|uparrow|parallel|leftarrow|rightarrow|mid)|arp)|tar|i(gma|m(eq)?)|u(cc(sim|n(sim|approx)|curlyeq|eq|approx)?|pset(neq(q)?|plus(eq)?|eq(q)?)?|rd|m|bset(neq(q)?|plus(eq)?|eq(q)?)?)|p(hericalangle|adesuit)|e(tminus|arrow)|q(su(pset(eq)?|bset(eq)?)|c(up|ap)|uare)|warrow|m(ile|all(s(etminus|mile)|frown)))|h(slash|ook(leftarrow|rightarrow)|eartsuit|bar)|R(sh|ightarrow|e|bag)|Gam(e|ma)|n(s(hort(parallel|mid)|im|u(cc(eq)?|pseteq(q)?|bseteq))|Rightarrow|n(earrow|warrow)|cong|triangle(left(eq(slant)?)?|right(eq(slant)?)?)|i(plus)?|u|p(lus|arallel|rec(eq)?)|e(q|arrow|g|xists)|v(dash|Dash)|warrow|le(ss|q(slant|q)?|ft(arrow|rightarrow))|a(tural|bla)|VDash|rightarrow|g(tr|eq(slant|q)?)|mid|Left(arrow|rightarrow))|c(hi|irc(eq|le(d(circ|S|dash|ast)|arrow(left|right)))?|o(ng|prod|lon|mplement)|dot(s|p)?|u(p|r(vearrow(left|right)|ly(eq(succ|prec)|vee(downarrow|uparrow)?|wedge(downarrow|uparrow)?)))|enterdot|lubsuit|ap)|Xi|Maps(to(char)?|from(char)?)|B(ox|umpeq|bbk)|t(h(ick(sim|approx)|e(ta|refore))|imes|op|wohead(leftarrow|rightarrow)|a(u|lloblong)|riangle(down|q|left(eq(slant)?)?|right(eq(slant)?)?)?)|i(n(t(er(cal|leave))?|plus|fty)?|ota|math)|S(igma|u(pset|bset))|zeta|o(slash|times|int|dot|plus|vee|wedge|lessthan|greaterthan|m(inus|ega)|b(slash|long|ar))|d(i(v(ideontimes)?|a(g(down|up)|mond(suit)?)|gamma)|o(t(plus|eq(dot)?)|ublebarwedge|wn(harpoon(left|right)|downarrows|arrow))|d(ots|agger)|elta|a(sh(v|leftarrow|rightarrow)|leth|gger))|Y(down|up|left|right)|C(up|ap)|u(n(lhd|rhd)|p(silon|harpoon(left|right)|downarrow|uparrows|lus|arrow)|lcorner|rcorner)|jmath|Theta|Im|p(si|hi|i(tchfork)?|erp|ar(tial|allel)|r(ime|o(d|pto)|ec(sim|n(sim|approx)|curlyeq|eq|approx)?)|m)|e(t(h|a)|psilon|q(slant(less|gtr)|circ|uiv)|ll|xists|mptyset)|Omega|D(iamond|ownarrow|elta)|v(d(ots|ash)|ee(bar)?|Dash|ar(s(igma|u(psetneq(q)?|bsetneq(q)?))|nothing|curly(vee|wedge)|t(heta|imes|riangle(left|right)?)|o(slash|circle|times|dot|plus|vee|wedge|lessthan|ast|greaterthan|minus|b(slash|ar))|p(hi|i|ropto)|epsilon|kappa|rho|bigcirc))|kappa|Up(silon|downarrow|arrow)|Join|f(orall|lat|a(t(s(emi|lash)|bslash)|llingdotseq)|rown)|P(si|hi|i)|w(p|edge|r)|l(hd|n(sim|eq(q)?|approx)|ceil|times|ightning|o(ng(left(arrow|rightarrow)|rightarrow|maps(to|from))|zenge|oparrow(left|right))|dot(s|p)|e(ss(sim|dot|eq(qgtr|gtr)|approx|gtr)|q(slant|q)?|ft(slice|harpoon(down|up)|threetimes|leftarrows|arrow(t(ail|riangle))?|right(squigarrow|harpoons|arrow(s|triangle|eq)?))|adsto)|vertneqq|floor|l(c(orner|eil)|floor|l|bracket)?|a(ngle|mbda)|rcorner|bag)|a(s(ymp|t)|ngle|pprox(eq)?|l(pha|eph)|rrownot|malg)|V(dash|vdash)|r(h(o|d)|ceil|times|i(singdotseq|ght(s(quigarrow|lice)|harpoon(down|up)|threetimes|left(harpoons|arrows)|arrow(t(ail|riangle))?|rightarrows))|floor|angle|r(ceil|parenthesis|floor|bracket)|bag)|g(n(sim|eq(q)?|approx)|tr(sim|dot|eq(qless|less)|less|approx)|imel|eq(slant|q)?|vertneqq|amma|g(g)?)|Finv|xi|m(ho|i(nuso|d)|o(o|dels)|u(ltimap)?|p|e(asuredangle|rge)|aps(to|from(char)?))|b(i(n(dnasrepma|ampersand)|g(s(tar|qc(up|ap))|nplus|c(irc|u(p|rly(vee|wedge))|ap)|triangle(down|up)|interleave|o(times|dot|plus)|uplus|parallel|vee|wedge|box))|o(t|wtie|x(slash|circle|times|dot|plus|empty|ast|minus|b(slash|ox|ar)))|u(llet|mpeq)|e(cause|t(h|ween|a))|lack(square|triangle(down|left|right)?|lozenge)|a(ck(s(im(eq)?|lash)|prime|epsilon)|r(o|wedge))|bslash)|L(sh|ong(left(arrow|rightarrow)|rightarrow|maps(to|from))|eft(arrow|rightarrow)|leftarrow|ambda|bag)|Arrownot)\b
+ name
+ constant.character.math.tex
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.math.tex
+
+
+ match
+ (\\)(sum|prod|coprod|int|oint|bigcap|bigcup|bigsqcup|bigvee|bigwedge|bigodot|bigotimes|bogoplus|biguplus)\b
+ name
+ constant.character.math.tex
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.math.tex
+
+
+ match
+ (\\)(arccos|arcsin|arctan|arg|cos|cosh|cot|coth|csc|deg|det|dim|exp|gcd|hom|inf|ker|lg|lim|liminf|limsup|ln|log|max|min|pr|sec|sin|sinh|sup|tan|tanh)\b
+ name
+ constant.other.math.tex
+
+
+ begin
+ ((\\)Sexpr)(\{)
+ beginCaptures
+
+ 1
+
+ name
+ support.function.sexpr.math.tex
+
+ 2
+
+ name
+ punctuation.definition.function.math.tex
+
+ 3
+
+ name
+ punctuation.section.embedded.begin.math.tex
+
+
+ contentName
+ source.r.embedded.math.tex
+ end
+ (\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.embedded.end.math.tex
+
+
+ name
+ meta.function.sexpr.math.tex
+ patterns
+
+
+ include
+ source.r
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.math.tex
+
+
+ match
+ (\\)([^a-zA-Z]|[A-Za-z]+)(?=\b|\}|\]|\^|\_)
+ name
+ constant.other.general.math.tex
+
+
+ match
+ (([0-9]*[\.][0-9]+)|[0-9]+)
+ name
+ constant.numeric.math.tex
+
+
+ match
+ «press a-z and space for greek letter»[a-zA-Z]*
+ name
+ meta.placeholder.greek.math.tex
+
+
+ scopeName
+ text.tex.math
+ uuid
+ 027D6AF4-E9D3-4250-82A1-8A42EEFE4F76
+
+
diff --git a/app/rcc/edbee/syntaxfiles/TeX.tmLanguage b/app/rcc/edbee/syntaxfiles/TeX.tmLanguage
new file mode 100644
index 00000000..d0b2c09f
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/TeX.tmLanguage
@@ -0,0 +1,246 @@
+
+
+
+
+ fileTypes
+
+ sty
+ cls
+
+ foldingStartMarker
+ /\*\*|\{\s*$
+ foldingStopMarker
+ \*\*/|^\s*\}
+ name
+ TeX
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.keyword.tex
+
+
+ match
+ (\\)(backmatter|else|fi|frontmatter|ftrue|mainmatter|if(case|cat|dim|eof|false|hbox|hmode|inner|mmode|num|odd|undefined|vbox|vmode|void|x)?)\b
+ name
+ keyword.control.tex
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.catcode.tex
+
+ 2
+
+ name
+ punctuation.definition.keyword.tex
+
+ 3
+
+ name
+ punctuation.separator.key-value.tex
+
+ 4
+
+ name
+ constant.numeric.category.tex
+
+
+ match
+ ((\\)catcode)`(?:\\)?.(=)(\d+)
+ name
+ meta.catcode.tex
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.tex
+
+
+ match
+ (%:).*$\n?
+ name
+ comment.line.percentage.semicolon.texshop.tex
+
+
+ match
+ ^%!TEX (\S*) =\s*(.*)\s*$
+ name
+ comment.line.percentage.directive.texshop.tex
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.tex
+
+
+ match
+ (%).*$\n?
+ name
+ comment.line.percentage.tex
+
+
+ begin
+ \{
+ captures
+
+ 0
+
+ name
+ punctuation.section.group.tex
+
+
+ end
+ \}
+ name
+ meta.group.braces.tex
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ match
+ [\[\]]
+ name
+ punctuation.definition.brackets.tex
+
+
+ begin
+ \$\$
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.tex
+
+
+ end
+ \$\$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.tex
+
+
+ name
+ string.other.math.block.tex
+ patterns
+
+
+ include
+ text.tex.math
+
+
+ include
+ $self
+
+
+
+
+ match
+ \\\\
+ name
+ constant.character.newline.tex
+
+
+ begin
+ \$
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.tex
+
+
+ end
+ \$
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.tex
+
+
+ name
+ string.other.math.tex
+ patterns
+
+
+ match
+ \\\$
+ name
+ constant.character.escape.tex
+
+
+ include
+ text.tex.math
+
+
+ include
+ $self
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.function.tex
+
+
+ match
+ (\\)[A-Za-z@]+
+ name
+ support.function.general.tex
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.keyword.tex
+
+
+ match
+ (\\)[^a-zA-Z@]
+ name
+ constant.character.escape.tex
+
+
+ match
+ «press a-z and space for greek letter»[a-zA-Z]*
+ name
+ meta.placeholder.greek.tex
+
+
+ scopeName
+ text.tex
+ uuid
+ 6BC8DE6F-9360-4C7E-AC3C-971385945346
+
+
diff --git a/app/rcc/edbee/syntaxfiles/Textile.tmLanguage b/app/rcc/edbee/syntaxfiles/Textile.tmLanguage
new file mode 100644
index 00000000..d751a10e
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/Textile.tmLanguage
@@ -0,0 +1,490 @@
+
+
+
+
+ fileTypes
+
+ textile
+
+ firstLineMatch
+ textile
+ keyEquivalent
+ ^~T
+ name
+ Textile
+ patterns
+
+
+ begin
+ (^h[1-6]([<>=()]+)?)(\([^)]*\)|{[^}]*})*(\.)
+ captures
+
+ 1
+
+ name
+ entity.name.tag.heading.textile
+
+ 3
+
+ name
+ entity.name.type.textile
+
+ 4
+
+ name
+ entity.name.tag.heading.textile
+
+
+ end
+ ^$
+ name
+ markup.heading.textile
+ patterns
+
+
+ include
+ #inline
+
+
+ include
+ text.html.basic
+
+
+
+
+ begin
+ (^bq([<>=()]+)?)(\([^)]*\)|{[^}]*})*(\.)
+ captures
+
+ 1
+
+ name
+ entity.name.tag.blockquote.textile
+
+ 3
+
+ name
+ entity.name.type.textile
+
+ 4
+
+ name
+ entity.name.tag.blockquote.textile
+
+
+ end
+ ^$
+ name
+ markup.quote.textile
+ patterns
+
+
+ include
+ #inline
+
+
+ include
+ text.html.basic
+
+
+
+
+ begin
+ (^fn[0-9]+([<>=()]+)?)(\([^)]*\)|{[^}]*})*(\.)
+ captures
+
+ 1
+
+ name
+ entity.name.tag.footnote.textile
+
+ 3
+
+ name
+ entity.name.type.textile
+
+ 4
+
+ name
+ entity.name.tag.footnote.textile
+
+
+ end
+ ^$
+ name
+ markup.other.footnote.textile
+ patterns
+
+
+ include
+ #inline
+
+
+ include
+ text.html.basic
+
+
+
+
+ begin
+ (^table([<>=()]+)?)(\([^)]*\)|{[^}]*})*(\.)
+ captures
+
+ 1
+
+ name
+ entity.name.tag.footnote.textile
+
+ 3
+
+ name
+ entity.name.type.textile
+
+ 4
+
+ name
+ entity.name.tag.footnote.textile
+
+
+ end
+ ^$
+ name
+ markup.other.table.textile
+ patterns
+
+
+ include
+ #inline
+
+
+ include
+ text.html.basic
+
+
+
+
+ begin
+ ^(?=\S)
+ end
+ ^$
+ name
+ meta.paragraph.textile
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ entity.name.tag.paragraph.textile
+
+ 3
+
+ name
+ entity.name.type.textile
+
+ 4
+
+ name
+ entity.name.tag.paragraph.textile
+
+
+ match
+ (^p([<>=()]+)?)(\([^)]*\)|{[^}]*})*(\.)
+ name
+ entity.name.section.paragraph.textile
+
+
+ include
+ #inline
+
+
+ include
+ text.html.basic
+
+
+
+
+ comment
+ Since html is valid in Textile include the html patterns
+ include
+ text.html.basic
+
+
+ repository
+
+ inline
+
+ patterns
+
+
+ comment
+ & is handled automagically by textile, so we match it to avoid text.html.basic from flagging it
+ match
+ &(?![A-Za-z0-9]+;)
+ name
+ text.html.textile
+
+
+ captures
+
+ 1
+
+ name
+ entity.name.type.textile
+
+
+ match
+ ^\*+(\([^)]*\)|{[^}]*})*(\s+|$)
+ name
+ markup.list.unnumbered.textile
+
+
+ captures
+
+ 1
+
+ name
+ entity.name.type.textile
+
+
+ match
+ ^#+(\([^)]*\)|{[^}]*})*\s+
+ name
+ markup.list.numbered.textile
+
+
+ captures
+
+ 1
+
+ name
+ string.other.link.title.textile
+
+ 2
+
+ name
+ string.other.link.description.title.textile
+
+ 3
+
+ name
+ constant.other.reference.link.textile
+
+
+ match
+ (?x)
+ " # Start name, etc
+ (?: # Attributes
+ # I swear, this is how the language is defined,
+ # couldnt make it up if I tried.
+ (?:\([^)]+\))?(?:\{[^}]+\})?(?:\[[^\]]+\])?
+ # Class, Style, Lang
+ | (?:\{[^}]+\})?(?:\[[^\]]+\])?(?:\([^)]+\))?
+ # Style, Lang, Class
+ | (?:\[[^\]]+\])?(?:\{[^}]+\})?(?:\([^)]+\))?
+ # Lang, Style, Class
+ )?
+ ([^"]+?) # Link name
+ \s? # Optional whitespace
+ (?:\(([^)]+?)\))?
+ ": # End name
+ (\w[-\w_]*) # Linkref
+ (?=[^\w\/;]*?(<|\s|$)) # Catch closing punctuation
+ # and end of meta.link
+
+ name
+ meta.link.reference.textile
+
+
+ captures
+
+ 1
+
+ name
+ string.other.link.title.textile
+
+ 2
+
+ name
+ string.other.link.description.title.textile
+
+ 3
+
+ name
+ markup.underline.link.textile
+
+
+ match
+ (?x)
+ " # Start name, etc
+ (?: # Attributes
+ # I swear, this is how the language is defined,
+ # couldnt make it up if I tried.
+ (?:\([^)]+\))?(?:\{[^}]+\})?(?:\[[^\]]+\])?
+ # Class, Style, Lang
+ | (?:\{[^}]+\})?(?:\[[^\]]+\])?(?:\([^)]+\))?
+ # Style, Lang, Class
+ | (?:\[[^\]]+\])?(?:\{[^}]+\})?(?:\([^)]+\))?
+ # Lang, Style, Class
+ )?
+ ([^"]+?) # Link name
+ \s? # Optional whitespace
+ (?:\(([^)]+?)\))?
+ ": # End Name
+ (\S*?(?:\w|\/|;)) # URL
+ (?=[^\w\/;]*?(<|\s|$)) # Catch closing punctuation
+ # and end of meta.link
+
+ name
+ meta.link.inline.textile
+
+
+ captures
+
+ 2
+
+ name
+ markup.underline.link.image.textile
+
+ 3
+
+ name
+ string.other.link.description.textile
+
+ 4
+
+ name
+ markup.underline.link.textile
+
+
+ match
+ (?x)
+ \! # Open image
+ (\<|\=|\>)? # Optional alignment
+ (?: # Attributes
+ # I swear, this is how the language is defined,
+ # couldnt make it up if I tried.
+ (?:\([^)]+\))?(?:\{[^}]+\})?(?:\[[^\]]+\])?
+ # Class, Style, Lang
+ | (?:\{[^}]+\})?(?:\[[^\]]+\])?(?:\([^)]+\))?
+ # Style, Lang, Class
+ | (?:\[[^\]]+\])?(?:\{[^}]+\})?(?:\([^)]+\))?
+ # Lang, Style, Class
+ )?
+ (?:\.[ ])? # Optional
+ ([^\s(!]+?) # Image URL
+ \s? # Optional space
+ (?:\(((?:[^\(\)]|\([^\)]+\))+?)\))? # Optional title
+ \! # Close image
+ (?:
+ :
+ (\S*?(?:\w|\/|;)) # URL
+ (?=[^\w\/;]*?(<|\s|$)) # Catch closing punctuation
+ )?
+
+ name
+ meta.image.inline.textile
+
+
+ captures
+
+ 1
+
+ name
+ entity.name.type.textile
+
+
+ match
+ \|(\([^)]*\)|{[^}]*})*(\\\||.)+\|
+ name
+ markup.other.table.cell.textile
+
+
+ captures
+
+ 3
+
+ name
+ entity.name.type.textile
+
+
+ match
+ \B(\*\*?)((\([^)]*\)|{[^}]*}|\[[^]]+\]){0,3})(\S.*?\S|\S)\1\B
+ name
+ markup.bold.textile
+
+
+ captures
+
+ 2
+
+ name
+ entity.name.type.textile
+
+
+ match
+ \B-((\([^)]*\)|{[^}]*}|\[[^]]+\]){0,3})(\S.*?\S|\S)-\B
+ name
+ markup.deleted.textile
+
+
+ captures
+
+ 2
+
+ name
+ entity.name.type.textile
+
+
+ match
+ \B\+((\([^)]*\)|{[^}]*}|\[[^]]+\]){0,3})(\S.*?\S|\S)\+\B
+ name
+ markup.inserted.textile
+
+
+ captures
+
+ 2
+
+ name
+ entity.name.type.textile
+
+
+ match
+ (?:\b|\s)_((\([^)]*\)|{[^}]*}|\[[^]]+\]){0,3})(\S.*?\S|\S)_(?:\b|\s)
+ name
+ markup.italic.textile
+
+
+ captures
+
+ 3
+
+ name
+ entity.name.type.textile
+
+
+ match
+ \B([@\^~%]|\?\?)((\([^)]*\)|{[^}]*}|\[[^]]+\]){0,3})(\S.*?\S|\S)\1
+ name
+ markup.italic.phrasemodifiers.textile
+
+
+ comment
+ Footnotes
+ match
+ (?<!w)\[[0-9+]\]
+ name
+ entity.name.tag.textile
+
+
+
+
+ scopeName
+ text.html.textile
+ uuid
+ 68F0B1A5-3274-4E85-8B3A-A481C5F5B194
+
+
diff --git a/app/rcc/edbee/syntaxfiles/XML.tmLanguage b/app/rcc/edbee/syntaxfiles/XML.tmLanguage
new file mode 100644
index 00000000..9438f600
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/XML.tmLanguage
@@ -0,0 +1,589 @@
+
+
+
+
+ fileTypes
+
+ xml
+ tld
+ jsp
+ pt
+ cpt
+ dtml
+ rss
+ opml
+
+ foldingStartMarker
+ ^\s*(<[^!?%/](?!.+?(/>|</.+?>))|<[!%]--(?!.+?--%?>)|<%[!]?(?!.+?%>))
+ foldingStopMarker
+ ^\s*(</[^>]+>|[/%]>|-->)\s*$
+ keyEquivalent
+ ^~X
+ name
+ XML
+ patterns
+
+
+ begin
+ (<\?)\s*([-_a-zA-Z0-9]+)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tag.begin.xml
+
+ 2
+
+ name
+ entity.name.tag.xml
+
+
+ end
+ (\?>)
+ name
+ meta.tag.preprocessor.xml
+ patterns
+
+
+ match
+ ([a-zA-Z-]+)
+ name
+ entity.other.attribute-name.xml
+
+
+ include
+ #doublequotedString
+
+
+ include
+ #singlequotedString
+
+
+
+
+ begin
+ (<!)(DOCTYPE)\s+([:a-zA-Z_][:a-zA-Z0-9_.-]*)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tag.begin.xml
+
+ 2
+
+ name
+ keyword.doctype.xml
+
+ 3
+
+ name
+ variable.documentroot.xml
+
+
+ end
+ \s*(>)
+ name
+ meta.tag.sgml.doctype.xml
+ patterns
+
+
+ include
+ #internalSubset
+
+
+
+
+ begin
+ <[!%]--
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.xml
+
+
+ end
+ --%?>
+ name
+ comment.block.xml
+
+
+ begin
+ (<)((?:([-_a-zA-Z0-9]+)((:)))?([-_a-zA-Z0-9:]+))(?=(\s[^>]*)?></\2>)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.begin.xml
+
+ 3
+
+ name
+ entity.name.tag.namespace.xml
+
+ 4
+
+ name
+ entity.name.tag.xml
+
+ 5
+
+ name
+ punctuation.separator.namespace.xml
+
+ 6
+
+ name
+ entity.name.tag.localname.xml
+
+
+ end
+ (>)(<)(/)(?:([-_a-zA-Z0-9]+)((:)))?([-_a-zA-Z0-9:]+)(>)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.end.xml
+
+ 2
+
+ name
+ punctuation.definition.tag.begin.xml meta.scope.between-tag-pair.xml
+
+ 3
+
+ name
+ punctuation.definition.tag.begin.xml
+
+ 4
+
+ name
+ entity.name.tag.namespace.xml
+
+ 5
+
+ name
+ entity.name.tag.xml
+
+ 6
+
+ name
+ punctuation.separator.namespace.xml
+
+ 7
+
+ name
+ entity.name.tag.localname.xml
+
+ 8
+
+ name
+ punctuation.definition.tag.end.xml
+
+
+ name
+ meta.tag.no-content.xml
+ patterns
+
+
+ include
+ #tagStuff
+
+
+
+
+ begin
+ (</?)(?:([-_a-zA-Z0-9]+)((:)))?([-_a-zA-Z0-9:]+)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tag.begin.xml
+
+ 2
+
+ name
+ entity.name.tag.namespace.xml
+
+ 3
+
+ name
+ entity.name.tag.xml
+
+ 4
+
+ name
+ punctuation.separator.namespace.xml
+
+ 5
+
+ name
+ entity.name.tag.localname.xml
+
+
+ end
+ (/?>)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.tag.end.xml
+
+
+ name
+ meta.tag.xml
+ patterns
+
+
+ include
+ #tagStuff
+
+
+
+
+ include
+ #entity
+
+
+ include
+ #bare-ampersand
+
+
+ begin
+ <%@
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.begin.xml
+
+
+ end
+ %>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.end.xml
+
+
+ name
+ source.java-props.embedded.xml
+ patterns
+
+
+ match
+ page|include|taglib
+ name
+ keyword.other.page-props.xml
+
+
+
+
+ begin
+ <%[!=]?(?!--)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.begin.xml
+
+
+ end
+ (?!--)%>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.end.xml
+
+
+ name
+ source.java.embedded.xml
+ patterns
+
+
+ include
+ source.java
+
+
+
+
+ begin
+ <!\[CDATA\[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.xml
+
+
+ end
+ ]]>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.xml
+
+
+ name
+ string.unquoted.cdata.xml
+
+
+ repository
+
+ EntityDecl
+
+ begin
+ (<!)(ENTITY)\s+(%\s+)?([:a-zA-Z_][:a-zA-Z0-9_.-]*)(\s+(?:SYSTEM|PUBLIC)\s+)?
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tag.begin.xml
+
+ 2
+
+ name
+ keyword.entity.xml
+
+ 3
+
+ name
+ punctuation.definition.entity.xml
+
+ 4
+
+ name
+ variable.entity.xml
+
+ 5
+
+ name
+ keyword.entitytype.xml
+
+
+ end
+ (>)
+ patterns
+
+
+ include
+ #doublequotedString
+
+
+ include
+ #singlequotedString
+
+
+
+ bare-ampersand
+
+ match
+ &
+ name
+ invalid.illegal.bad-ampersand.xml
+
+ doublequotedString
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.xml
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.xml
+
+
+ name
+ string.quoted.double.xml
+ patterns
+
+
+ include
+ #entity
+
+
+ include
+ #bare-ampersand
+
+
+
+ entity
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.xml
+
+ 3
+
+ name
+ punctuation.definition.constant.xml
+
+
+ match
+ (&)([:a-zA-Z_][:a-zA-Z0-9_.-]*|#[0-9]+|#x[0-9a-fA-F]+)(;)
+ name
+ constant.character.entity.xml
+
+ internalSubset
+
+ begin
+ (\[)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.xml
+
+
+ end
+ (\])
+ name
+ meta.internalsubset.xml
+ patterns
+
+
+ include
+ #EntityDecl
+
+
+ include
+ #parameterEntity
+
+
+
+ parameterEntity
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.xml
+
+ 3
+
+ name
+ punctuation.definition.constant.xml
+
+
+ match
+ (%)([:a-zA-Z_][:a-zA-Z0-9_.-]*)(;)
+ name
+ constant.character.parameter-entity.xml
+
+ singlequotedString
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.xml
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.xml
+
+
+ name
+ string.quoted.single.xml
+ patterns
+
+
+ include
+ #entity
+
+
+ include
+ #bare-ampersand
+
+
+
+ tagStuff
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ entity.other.attribute-name.namespace.xml
+
+ 2
+
+ name
+ entity.other.attribute-name.xml
+
+ 3
+
+ name
+ punctuation.separator.namespace.xml
+
+ 4
+
+ name
+ entity.other.attribute-name.localname.xml
+
+
+ match
+ (?:([-_a-zA-Z0-9]+)((:)))?([-_a-zA-Z0-9]+)=
+
+
+ include
+ #doublequotedString
+
+
+ include
+ #singlequotedString
+
+
+
+
+ scopeName
+ text.xml
+ uuid
+ D3C4E6DA-6B1C-11D9-8CC2-000D93589AF6
+
+
diff --git a/app/rcc/edbee/syntaxfiles/XSL.tmLanguage b/app/rcc/edbee/syntaxfiles/XSL.tmLanguage
new file mode 100644
index 00000000..7dc86c59
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/XSL.tmLanguage
@@ -0,0 +1,157 @@
+
+
+
+
+ fileTypes
+
+ xsl
+ xslt
+
+ foldingStartMarker
+ ^\s*(<[^!?%/](?!.+?(/>|</.+?>))|<[!%]--(?!.+?--%?>)|<%[!]?(?!.+?%>))
+ foldingStopMarker
+ ^\s*(</[^>]+>|[/%]>|-->)\s*$
+ keyEquivalent
+ ^~X
+ name
+ XSL
+ patterns
+
+
+ begin
+ (<)(xsl)((:))(template)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tag.xml
+
+ 2
+
+ name
+ entity.name.tag.namespace.xml
+
+ 3
+
+ name
+ entity.name.tag.xml
+
+ 4
+
+ name
+ punctuation.separator.namespace.xml
+
+ 5
+
+ name
+ entity.name.tag.localname.xml
+
+
+ end
+ (>)
+ name
+ meta.tag.xml.template
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ entity.other.attribute-name.namespace.xml
+
+ 2
+
+ name
+ entity.other.attribute-name.xml
+
+ 3
+
+ name
+ punctuation.separator.namespace.xml
+
+ 4
+
+ name
+ entity.other.attribute-name.localname.xml
+
+
+ match
+ (?:([-_a-zA-Z0-9]+)((:)))?([a-zA-Z-]+)
+
+
+ include
+ #doublequotedString
+
+
+ include
+ #singlequotedString
+
+
+
+
+ include
+ text.xml
+
+
+ repository
+
+ doublequotedString
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.xml
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.xml
+
+
+ name
+ string.quoted.double.xml
+
+ singlequotedString
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.xml
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.xml
+
+
+ name
+ string.quoted.single.xml
+
+
+ scopeName
+ text.xml.xsl
+ uuid
+ DB8033A1-6D8E-4D80-B8A2-8768AAC6125D
+
+
diff --git a/app/rcc/edbee/syntaxfiles/YAML.tmLanguage b/app/rcc/edbee/syntaxfiles/YAML.tmLanguage
new file mode 100644
index 00000000..1fb3041c
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/YAML.tmLanguage
@@ -0,0 +1,466 @@
+
+
+
+
+ fileTypes
+
+ yaml
+ yml
+
+ foldingStartMarker
+ ^[^#]\s*.*:(\s*\[?| &.+)?$
+ foldingStopMarker
+ ^\s*$|^\s*\}|^\s*\]|^\s*\)
+ keyEquivalent
+ ^~Y
+ name
+ YAML
+ patterns
+
+
+ include
+ #erb
+
+
+ begin
+ ^(\s*)(?:(-)|(?:(-\s*)?(\w+\s*(:))))\s*(\||>)
+ beginCaptures
+
+ 2
+
+ name
+ punctuation.definition.entry.yaml
+
+ 3
+
+ name
+ punctuation.definition.entry.yaml
+
+ 4
+
+ name
+ entity.name.tag.yaml
+
+ 5
+
+ name
+ punctuation.separator.key-value.yaml
+
+
+ end
+ ^(?!^\1)|^(?=\1(-|\w+\s*:)|#)
+ name
+ string.unquoted.block.yaml
+ patterns
+
+
+ include
+ #erb
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entry.yaml
+
+ 2
+
+ name
+ entity.name.tag.yaml
+
+ 3
+
+ name
+ punctuation.separator.key-value.yaml
+
+ 4
+
+ name
+ punctuation.definition.entry.yaml
+
+
+ match
+ (?:(?:(-\s*)?(\w+\s*(:)))|(-))\s*((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\s*$
+ name
+ constant.numeric.yaml
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entry.yaml
+
+ 10
+
+ name
+ punctuation.definition.string.end.yaml
+
+ 11
+
+ name
+ string.unquoted.yaml
+
+ 2
+
+ name
+ entity.name.tag.yaml
+
+ 3
+
+ name
+ punctuation.separator.key-value.yaml
+
+ 4
+
+ name
+ punctuation.definition.entry.yaml
+
+ 5
+
+ name
+ string.quoted.double.yaml
+
+ 6
+
+ name
+ punctuation.definition.string.begin.yaml
+
+ 7
+
+ name
+ punctuation.definition.string.end.yaml
+
+ 8
+
+ name
+ string.quoted.single.yaml
+
+ 9
+
+ name
+ punctuation.definition.string.begin.yaml
+
+
+ match
+ (?:(?:(-\s*)?(\w+\s*(:)))|(-))\s*(?:((")[^"]*("))|((')[^']*('))|([^,{}&#\[\]]+))\s*
+ name
+ string.unquoted.yaml
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entry.yaml
+
+ 2
+
+ name
+ entity.name.tag.yaml
+
+ 3
+
+ name
+ punctuation.separator.key-value.yaml
+
+ 4
+
+ name
+ punctuation.definition.entry.yaml
+
+
+ match
+ (?:(?:(-\s*)?(\w+\s*(:)))|(-))\s*([0-9]{4}-[0-9]{2}-[0-9]{2})\s*$
+ name
+ constant.other.date.yaml
+
+
+ captures
+
+ 1
+
+ name
+ entity.name.tag.yaml
+
+ 2
+
+ name
+ punctuation.separator.key-value.yaml
+
+ 3
+
+ name
+ keyword.other.omap.yaml
+
+ 4
+
+ name
+ punctuation.definition.keyword.yaml
+
+
+ match
+ (\w.*?)(:)\s*((\!\!)omap)?
+ name
+ meta.tag.yaml
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.yaml
+
+
+ match
+ (\&|\*)\w.*?$
+ name
+ variable.other.yaml
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.yaml
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.yaml
+
+
+ name
+ string.quoted.double.yaml
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #erb
+
+
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.yaml
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.yaml
+
+
+ name
+ string.quoted.single.yaml
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #erb
+
+
+
+
+ begin
+ `
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.yaml
+
+
+ end
+ `
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.yaml
+
+
+ name
+ string.interpolated.yaml
+ patterns
+
+
+ include
+ #escaped_char
+
+
+ include
+ #erb
+
+
+
+
+ captures
+
+ 1
+
+ name
+ entity.name.tag.yaml
+
+ 2
+
+ name
+ keyword.operator.merge-key.yaml
+
+ 3
+
+ name
+ punctuation.definition.keyword.yaml
+
+
+ match
+ (\<\<): ((\*).*)$
+ name
+ keyword.operator.merge-key.yaml
+
+
+ disabled
+ 1
+ match
+ ( | )+$
+ name
+ invalid.deprecated.trailing-whitespace.yaml
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.yaml
+
+
+ match
+ (?<!\$)(#)(?!\{).*$\n?
+ name
+ comment.line.number-sign.yaml
+
+
+ match
+ -
+ name
+ keyword.operator.symbol
+
+
+ begin
+ ^(?=\t)
+ end
+ (?=[^\t])
+ name
+ meta.leading-tabs.yaml
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ meta.odd-tab
+
+ 2
+
+ name
+ meta.even-tab
+
+
+ match
+ (\t)(\t)?
+
+
+
+
+ repository
+
+ erb
+
+ begin
+ <%+(?!>)=?
+ captures
+
+ 0
+
+ name
+ punctuation.section.embedded.ruby
+
+
+ end
+ %>
+ name
+ source.ruby.rails.embedded.html
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.ruby
+
+
+ match
+ (#).*?(?=%>)
+ name
+ comment.line.number-sign.ruby
+
+
+ include
+ source.ruby.rails
+
+
+
+ escaped_char
+
+ match
+ \\.
+ name
+ constant.character.escape.yaml
+
+
+ scopeName
+ source.yaml
+ uuid
+ B0C44228-4F1F-11DA-AFF2-000A95AF0064
+
+
diff --git a/app/rcc/edbee/syntaxfiles/reStructuredText.tmLanguage b/app/rcc/edbee/syntaxfiles/reStructuredText.tmLanguage
new file mode 100644
index 00000000..a0c8b8b1
--- /dev/null
+++ b/app/rcc/edbee/syntaxfiles/reStructuredText.tmLanguage
@@ -0,0 +1,654 @@
+
+
+
+
+ comment
+ syntax highlighting for reStructuredText http://docutils.sourceforge.net, based on rst mode from jEdit
+ fileTypes
+
+ rst
+ rest
+
+ keyEquivalent
+ ^~R
+ name
+ reStructuredText
+ patterns
+
+
+ begin
+ ^([ \t]*)(?=\S)
+ contentName
+ meta.paragraph.restructuredtext
+ end
+ ^(?!\1(?=\S))
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ repository
+
+ inline
+
+ patterns
+
+
+ begin
+ ^([ \t]*)((\.\.)\sraw(::)) html
+ captures
+
+ 2
+
+ name
+ meta.directive.restructuredtext
+
+ 3
+
+ name
+ punctuation.definition.directive.restructuredtext
+
+ 4
+
+ name
+ punctuation.separator.key-value.restructuredtext
+
+
+ comment
+ directives.html
+ end
+ ^(?!\1[ \t])
+ patterns
+
+
+ include
+ text.html.basic
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.directive.restructuredtext
+
+ 2
+
+ name
+ punctuation.separator.key-value.restructuredtext
+
+
+ comment
+ directives
+ match
+ (\.\.)\s[A-z][A-z0-9-_]+(::)\s*$
+ name
+ meta.other.directive.restructuredtext
+
+
+ begin
+ ^([ \t]*).*?((::))
+ captures
+
+ 2
+
+ name
+ markup.raw.restructuredtext
+
+ 3
+
+ name
+ punctuation.definition.raw.restructuredtext
+
+
+ comment
+ verbatim blocks
+ end
+ ^(?=\1[^\s]+)
+ name
+ meta.raw.block.restructuredtext
+ patterns
+
+
+ match
+ .+
+ name
+ markup.raw.restructuredtext
+
+
+
+
+ comment
+ directives
+ match
+ ::
+ name
+ meta.startraw.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.italic.restructuredtext
+
+ 2
+
+ name
+ punctuation.definition.italic.restructuredtext
+
+
+ comment
+ strong emphasis
+ match
+ (\*\*)[^*]+(\*\*)
+ name
+ markup.bold.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.italic.restructuredtext
+
+ 2
+
+ name
+ punctuation.definition.italic.restructuredtext
+
+
+ comment
+ emphasis
+ match
+ (\*)\w[^*]+\w(\*)
+ name
+ markup.italic.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.link.restructuredtext
+
+ 2
+
+ name
+ punctuation.definition.string.restructuredtext
+
+ 3
+
+ name
+ string.other.link.title.restructuredtext
+
+ 4
+
+ name
+ punctuation.separator.key-value.restructuredtext
+
+ 5
+
+ name
+ markup.underline.link.restructuredtext
+
+
+ comment
+ replacement
+ match
+ (\.\.)\s+(_)([\w\s]+)(:)\s+(.*)
+ name
+ meta.link.reference.def.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.substitution.restructuredtext
+
+
+ comment
+ substitution
+ match
+ (\|)[^|]+(\|_{0,2})
+ name
+ markup.underline.substitution.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ string.other.link.title.restructuredtext
+
+ 2
+
+ name
+ punctuation.definition.link.restructuredtext
+
+
+ comment
+ links `...`_ or `...`__
+ match
+ \b(\w+)(_)\b
+ name
+ meta.link.reference
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.link.restructuredtext
+
+ 2
+
+ name
+ string.other.link.title.restructuredtext
+
+ 3
+
+ name
+ punctuation.definition.link.restructuredtext
+
+
+ comment
+ links `...`_ or `...`__
+ match
+ (`)([\w\s]+)(`_)
+ name
+ meta.link.reference
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.link.restructuredtext
+
+ 2
+
+ name
+ string.other.link.title.restructuredtext
+
+ 3
+
+ name
+ punctuation.definition.location.restructuredtext
+
+ 4
+
+ name
+ markup.underline.link.restructuredtext
+
+ 5
+
+ name
+ punctuation.definition.location.restructuredtext
+
+ 6
+
+ name
+ punctuation.definition.link.restructuredtext
+
+
+ comment
+ links `...`_
+ match
+ (`)([\w\s]+)\s+(<)(.*?)(>)(`_)
+ name
+ meta.link.inline.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.link.restructuredtext
+
+ 2
+
+ name
+ constant.other.footnote.link.restructuredtext
+
+ 3
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 6
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 7
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 8
+
+ name
+ string.other.footnote.restructuredtext
+
+
+ comment
+ replacement
+ match
+ ^(\.\.)\s+((\[)(((#?)[^]]*?)|\*)(\]))\s+(.*)
+ name
+ meta.link.footnote.def.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ constant.other.footnote.link
+
+ 2
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 3
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 4
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+
+ comment
+ footnote reference: [0]_
+ match
+ ((\[)[0-9]+(\]))(_)
+ name
+ meta.link.footnote.numeric.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ constant.other.footnote.link
+
+ 2
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 3
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 4
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+
+ comment
+ footnote reference [#]_ or [#foo]_
+ match
+ ((\[#)[A-z0-9_]*(\]))(_)
+ name
+ meta.link.footnote.auto.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ constant.other.footnote.link.restructuredtext
+
+ 2
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 3
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 4
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+
+ comment
+ footnote reference [*]_
+ match
+ ((\[)\*(\]))(_)
+ name
+ meta.link.footnote.symbol.auto.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.link.restructuredtext
+
+ 2
+
+ name
+ constant.other.citation.link.restructuredtext
+
+ 3
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 4
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 5
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 6
+
+ name
+ string.other.citation.restructuredtext
+
+
+ comment
+ replacement
+ match
+ ^(\.\.)\s+((\[)[A-z][A-z0-9]*(\]))(_)\s+(.*)
+ name
+ meta.link.citation.def.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ constant.other.citation.link.restructuredtext
+
+ 2
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 3
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+ 4
+
+ name
+ punctuation.definition.constant.restructuredtext
+
+
+ comment
+ citation reference
+ match
+ ((\[)[A-z][A-z0-9_-]*(\]))(_)
+ name
+ meta.link.citation.restructuredtext
+
+
+ begin
+ ``
+ captures
+
+ 0
+
+ name
+ punctuation.definition.raw.restructuredtext
+
+
+ comment
+ inline literal
+ end
+ ``
+ name
+ markup.raw.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.intepreted.restructuredtext
+
+ 2
+
+ name
+ punctuation.definition.intepreted.restructuredtext
+
+
+ comment
+ intepreted text
+ match
+ (`)[^`]+(`)(?!_)
+ name
+ markup.other.command.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.field.restructuredtext
+
+ 2
+
+ name
+ punctuation.definition.field.restructuredtext
+
+
+ comment
+ field list
+ match
+ (:)[A-z][A-z0-9 =\s\t_]*(:)
+ name
+ entity.name.tag.restructuredtext
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.table.restructuredtext
+
+
+ comment
+ table
+ match
+ \+-[+-]+
+ name
+ markup.other.table.restructuredtext
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.table.restructuredtext
+
+
+ comment
+ table
+ match
+ \+=[+=]+
+ name
+ markup.other.table.restructuredtext
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.heading.restructuredtext
+
+
+ match
+ (^(=|-|~|`|#|"|\^|\+|\*){3,}$){1,1}?
+ name
+ markup.heading.restructuredtext
+
+
+ begin
+ ^(\.\.)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.comment.restructuredtext
+
+
+ comment
+ comment
+ end
+ $\n?
+ name
+ comment.line.double-dot.restructuredtext
+
+
+
+
+ scopeName
+ text.restructuredtext
+ uuid
+ 62DA9AD6-36E1-4AB7-BB87-E933AD9FD1A4
+
+
\ No newline at end of file
diff --git a/app/rcc/edbee/themes/All Hallow's Eve.tmTheme b/app/rcc/edbee/themes/All Hallow's Eve.tmTheme
new file mode 100644
index 00000000..47a67978
--- /dev/null
+++ b/app/rcc/edbee/themes/All Hallow's Eve.tmTheme
@@ -0,0 +1,277 @@
+
+
+
+
+ author
+ David Heinemeier Hansson
+ name
+ All Hallow's Eve
+ settings
+
+
+ settings
+
+ background
+ #000000
+ caret
+ #FFFFFF
+ foreground
+ #FFFFFF
+ invisibles
+ #404040
+ lineHighlight
+ #333300
+ selection
+ #73597EE0
+
+
+
+ name
+ Text base
+ scope
+ text
+ settings
+
+ background
+ #434242
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Source base
+ scope
+ source
+ settings
+
+ background
+ #000000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ foreground
+ #9933CC
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ foreground
+ #3387CC
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #CC7833
+
+
+
+ name
+ Pre-processor Line
+ scope
+ meta.preprocessor.c
+ settings
+
+ fontStyle
+
+ foreground
+ #D0D0FF
+
+
+
+ name
+ Pre-processor Directive
+ scope
+ keyword.control.import
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Block comment
+ scope
+ source comment.block
+ settings
+
+ background
+ #9B9B9B
+ foreground
+ #FFFFFF
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #66CC33
+
+
+
+ name
+ String escapes
+ scope
+ string constant.character.escape
+ settings
+
+ foreground
+ #AAAAAA
+
+
+
+ name
+ String (executed)
+ scope
+ string.interpolated
+ settings
+
+ background
+ #CCCC33
+ foreground
+ #000000
+
+
+
+ name
+ Regular expression
+ scope
+ string.regexp
+ settings
+
+ foreground
+ #CCCC33
+
+
+
+ name
+ String (literal)
+ scope
+ string.literal
+ settings
+
+ foreground
+ #CCCC33
+
+
+
+ name
+ String escapes (executed)
+ scope
+ string.interpolated constant.character.escape
+ settings
+
+ foreground
+ #555555
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Class inheritance
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic underline
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Support function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #C83730
+
+
+
+ uuid
+ 37F22BDC-B2F4-11D9-850C-000A95A89C98
+
+
diff --git a/app/rcc/edbee/themes/Amy.tmTheme b/app/rcc/edbee/themes/Amy.tmTheme
new file mode 100644
index 00000000..b3258c46
--- /dev/null
+++ b/app/rcc/edbee/themes/Amy.tmTheme
@@ -0,0 +1,557 @@
+
+
+
+
+ name
+ Amy
+ author
+ William D. Neumann
+ settings
+
+
+ settings
+
+ background
+ #200020
+ caret
+ #7070FF
+ foreground
+ #D0D0FF
+ invisibles
+ #BFBFBF
+ lineHighlight
+ #80000040
+ selection
+ #80000080
+
+
+
+ name
+ Comment
+ scope
+ comment.block
+ settings
+
+ background
+ #200020
+ fontStyle
+ italic
+ foreground
+ #404080
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #999999
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ foreground
+ #707090
+
+
+
+ name
+ Integer
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #7090B0
+
+
+
+ name
+ Int32 constant
+ scope
+ constant.numeric.integer.int32
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Int64 constant
+ scope
+ constant.numeric.integer.int64
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Nativeint constant
+ scope
+ constant.numeric.integer.nativeint
+ settings
+
+ fontStyle
+ bold italic
+
+
+
+ name
+ Floating-point constant
+ scope
+ constant.numeric.floating-point.ocaml
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Character constant
+ scope
+ constant.character
+ settings
+
+ fontStyle
+
+ foreground
+ #666666
+
+
+
+ name
+ Boolean constant
+ scope
+ constant.language.boolean
+ settings
+
+ foreground
+ #8080A0
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.other
+ settings
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+ fontStyle
+
+ foreground
+ #008080
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #A080FF
+
+
+
+ name
+ Keyword operator
+ scope
+ keyword.operator
+ settings
+
+ foreground
+ #A0A0FF
+
+
+
+ name
+ Keyword decorator
+ scope
+ keyword.other.decorator
+ settings
+
+ foreground
+ #D0D0FF
+
+
+
+ name
+ Floating-point infix operator
+ scope
+ keyword.operator.infix.floating-point.ocaml
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Floating-point prefix operator
+ scope
+ keyword.operator.prefix.floating-point.ocaml
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Compiler directives
+ scope
+ keyword.other.directive
+ settings
+
+ fontStyle
+
+ foreground
+ #C080C0
+
+
+
+ name
+ Line-number directives
+ scope
+ keyword.other.directive.line-number
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #C080C0
+
+
+
+ name
+ Control keyword
+ scope
+ keyword.control
+ settings
+
+ foreground
+ #80A0FF
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ foreground
+ #B0FFF0
+
+
+
+ name
+ Variants
+ scope
+ entity.name.type.variant
+ settings
+
+ foreground
+ #60B0FF
+
+
+
+ name
+ Polymorphic variants
+ scope
+ storage.type.variant.polymorphic, entity.name.type.variant.polymorphic
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #60B0FF
+
+
+
+ name
+ Module definitions
+ scope
+ entity.name.type.module
+ settings
+
+ foreground
+ #B000B0
+
+
+
+ name
+ Module type definitions
+ scope
+ entity.name.type.module-type.ocaml
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #B000B0
+
+
+
+ name
+ Support modules
+ scope
+ support.other
+ settings
+
+ foreground
+ #A00050
+
+
+
+ name
+ Class name
+ scope
+ entity.name.type.class
+ settings
+
+ foreground
+ #70E080
+
+
+
+ name
+ Class type
+ scope
+ entity.name.type.class-type
+ settings
+
+ fontStyle
+
+ foreground
+ #70E0A0
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ foreground
+ #50A0A0
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+ foreground
+ #80B0B0
+
+
+
+ name
+ Token definition (ocamlyacc)
+ scope
+ entity.name.type.token
+ settings
+
+ fontStyle
+
+ foreground
+ #3080A0
+
+
+
+ name
+ Token reference (ocamlyacc)
+ scope
+ entity.name.type.token.reference
+ settings
+
+ fontStyle
+
+ foreground
+ #3CB0D0
+
+
+
+ name
+ Non-terminal definition (ocamlyacc)
+ scope
+ entity.name.function.non-terminal
+ settings
+
+ foreground
+ #90E0E0
+
+
+
+ name
+ Non-terminal reference (ocamlyacc)
+ scope
+ entity.name.function.non-terminal.reference
+ settings
+
+ foreground
+ #C0F0F0
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ foreground
+ #009090
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+
+
+ name
+ Library function
+ settings
+
+ background
+ #200020
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ background
+ #200020
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+
+
+ name
+ Invalid - illegal
+ scope
+ invalid.illegal
+ settings
+
+ background
+ #FFFF00
+ fontStyle
+ bold
+ foreground
+ #400080
+
+
+
+ name
+ Invalid - depricated
+ scope
+ invalid.deprecated
+ settings
+
+ background
+ #CC66FF
+ foreground
+ #200020
+
+
+
+ name
+ Camlp4 code
+ scope
+ source.camlp4.embedded
+ settings
+
+ background
+ #40008054
+
+
+
+ name
+ Camlp4 temp (parser)
+ scope
+ source.camlp4.embedded.parser.ocaml
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Punctuation
+ scope
+ punctuation
+ settings
+
+ foreground
+ #805080
+
+
+
+ uuid
+ 3C01FADD-7592-49DD-B7A5-1B82CA4E57B5
+
+
diff --git a/app/rcc/edbee/themes/Blackboard.tmTheme b/app/rcc/edbee/themes/Blackboard.tmTheme
new file mode 100644
index 00000000..18bb72e3
--- /dev/null
+++ b/app/rcc/edbee/themes/Blackboard.tmTheme
@@ -0,0 +1,350 @@
+
+
+
+
+ name
+ Blackboard
+ author
+ Domenico Carbotta
+ settings
+
+
+ settings
+
+ background
+ #0C1021
+ caret
+ #FFFFFFA6
+ foreground
+ #F8F8F8
+ invisibles
+ #FFFFFF40
+ lineHighlight
+ #FFFFFF0F
+ selection
+ #253B76
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+
+ foreground
+ #AEAEAE
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ fontStyle
+
+ foreground
+ #D8FA3C
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ fontStyle
+
+ foreground
+ #FF6400
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #FBDE2D
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #FBDE2D
+
+
+
+ name
+ String
+ scope
+ string, meta.verbatim
+ settings
+
+ fontStyle
+
+ foreground
+ #61CE3C
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+
+ foreground
+ #8DA6CE
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Invalid – Deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #AB2A1D
+
+
+
+ name
+ Invalid – Illegal
+ scope
+ invalid.illegal
+ settings
+
+ background
+ #9D1E15
+ foreground
+ #F8F8F8
+
+
+
+ name
+ Superclass
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #FF6400
+
+
+
+ name
+ String interpolation
+ scope
+ string constant.other.placeholder
+ settings
+
+ fontStyle
+
+ foreground
+ #FF6400
+
+
+
+ name
+ meta.function-call.py
+ scope
+ meta.function-call.py
+ settings
+
+ fontStyle
+
+ foreground
+ #BECDE6
+
+
+
+ name
+ meta.tag
+ scope
+ meta.tag, meta.tag entity
+ settings
+
+ foreground
+ #7F90AA
+
+
+
+ name
+ entity.name.section
+ scope
+ entity.name.section
+ settings
+
+ fontStyle
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ OCaml variant
+ scope
+ keyword.type.variant
+ settings
+
+ foreground
+ #D5E0F3
+
+
+
+ name
+ OCaml operator
+ scope
+ source.ocaml keyword.operator.symbol
+ settings
+
+ foreground
+ #F8F8F8
+
+
+
+ name
+ OCaml infix operator
+ scope
+ source.ocaml keyword.operator.symbol.infix
+ settings
+
+ fontStyle
+
+ foreground
+ #8DA6CE
+
+
+
+ name
+ OCaml prefix operator
+ scope
+ source.ocaml keyword.operator.symbol.prefix
+ settings
+
+ fontStyle
+
+ foreground
+ #8DA6CE
+
+
+
+ name
+ OCaml f-p infix operator
+ scope
+ source.ocaml keyword.operator.symbol.infix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ OCaml f-p prefix operator
+ scope
+ source.ocaml keyword.operator.symbol.prefix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ OCaml f-p constant
+ scope
+ source.ocaml constant.numeric.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ LaTeX environment
+ scope
+ text.tex.latex meta.function.environment
+ settings
+
+ background
+ #FFFFFF08
+
+
+
+ name
+ LaTeX environment (nested)
+ scope
+ text.tex.latex meta.function.environment meta.function.environment
+ settings
+
+ background
+ #7A96FA08
+
+
+
+ name
+ Latex support
+ scope
+ text.tex.latex support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #FBDE2D
+
+
+
+ name
+ PList unquoted string
+ scope
+ source.plist string.unquoted, source.plist keyword.operator
+ settings
+
+ foreground
+ #FFFFFF
+
+
+
+ uuid
+ A2C6BAA7-90D0-4147-BBF5-96B0CD92D109
+
+
diff --git a/app/rcc/edbee/themes/Brilliance_Black.tmTheme b/app/rcc/edbee/themes/Brilliance_Black.tmTheme
new file mode 100644
index 00000000..de35ff97
--- /dev/null
+++ b/app/rcc/edbee/themes/Brilliance_Black.tmTheme
@@ -0,0 +1,2619 @@
+
+
+
+
+ author
+ Thomas Aylott
+ comment
+ Thomas Aylott ㊷ subtleGradient.com
+ name
+ Brilliance Black
+ settings
+
+
+ settings
+
+ background
+ #0D0D0DFA
+ caret
+ #3333FF
+ foreground
+ #EEEEEE
+ invisibles
+ #CCCCCC1A
+ lineHighlight
+ #000080
+ selection
+ #0010B499
+
+
+
+ name
+ Thomas Aylott ㊷
+ scope
+ meta.thomas_aylott
+ settings
+
+ background
+ #FFFFFF
+ fontStyle
+ bold
+ foreground
+ #000000
+
+
+
+ name
+ subtleGradient.com
+ scope
+ meta.subtlegradient
+ settings
+
+ background
+ #FFFFFF
+ fontStyle
+ underline
+ foreground
+ #555555
+
+
+
+ name
+ ~ String
+ scope
+ string -meta.tag -meta.doctype -string.regexp -string.literal -string.interpolated -string.quoted.literal -string.unquoted, variable.parameter.misc.css, text string source string, string.unquoted string, string.regexp string, string.interpolated string, meta.tag source string
+ settings
+
+ background
+ #803D0033
+ foreground
+ #FFFC80
+
+
+
+ name
+ ~ String Punctuation
+ scope
+ punctuation.definition.string -meta.tag
+ settings
+
+ foreground
+ #803D00
+
+
+
+ name
+ ~ String Punctuation II
+ scope
+ string.regexp punctuation.definition.string, string.quoted.literal punctuation.definition.string, string.quoted.double.ruby.mod punctuation.definition.string
+ settings
+
+ foreground
+ #FFF80033
+
+
+
+ name
+ ~ String Literal
+ scope
+ string.quoted.literal, string.quoted.double.ruby.mod
+ settings
+
+ background
+ #43800033
+ foreground
+ #FFF800
+
+
+
+ name
+ ~ String Unquoted
+ scope
+ string.unquoted -string.unquoted.embedded, string.quoted.double.multiline, meta.scope.heredoc
+ settings
+
+ foreground
+ #FFBC80
+
+
+
+ name
+ ~ String Interpolated
+ scope
+ string.interpolated
+ settings
+
+ background
+ #1A1A1A
+ foreground
+ #FFFC80
+
+
+
+ name
+ ~ String RegEx
+ scope
+ string.regexp
+ settings
+
+ background
+ #43800033
+ foreground
+ #FFF800
+
+
+
+ name
+ ~ String RegEx Group 1
+ scope
+ string.regexp.group
+ settings
+
+ background
+ #43800033
+
+
+
+ name
+ ~ String RegEx Group 2
+ scope
+ string.regexp.group string.regexp.group
+ settings
+
+ background
+ #43800033
+ foreground
+ #FFFFFF66
+
+
+
+ name
+ ~ String RegEx Group 3
+ scope
+ string.regexp.group string.regexp.group string.regexp.group
+ settings
+
+ background
+ #43800033
+ foreground
+ #FFFFFF66
+
+
+
+ name
+ ~ String RegEx Group 4
+ scope
+ string.regexp.group string.regexp.group string.regexp.group string.regexp.group
+ settings
+
+ background
+ #43800033
+ foreground
+ #FFFFFF66
+
+
+
+ name
+ ~ String RegEx Character-Class
+ scope
+ string.regexp.character-class
+ settings
+
+ background
+ #43800033
+ foreground
+ #86FF00
+
+
+
+ name
+ ~ String RegEx Arbitrary-Repitition
+ scope
+ string.regexp.arbitrary-repitition
+ settings
+
+ background
+ #43800033
+ foreground
+ #00FFF8
+
+
+
+ name
+ ~ String RegEx Definition Keyword
+ scope
+ string.regexp punctuation.definition.string keyword.other
+ settings
+
+ fontStyle
+
+ foreground
+ #803D00
+
+
+
+ name
+ ~ Meta Group Assertion Regexp
+ scope
+ meta.group.assertion.regexp
+ settings
+
+ background
+ #0086FF33
+
+
+
+ name
+ ~ Meta Assertion
+ scope
+ meta.assertion, meta.group.assertion keyword.control.group.regexp, meta.group.assertion punctuation.definition.group
+ settings
+
+ foreground
+ #0086FF
+
+
+
+ name
+ ~ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #C6FF00
+
+
+
+ name
+ ~ Character constant
+ scope
+ constant.character
+ settings
+
+ foreground
+ #86FF00
+
+
+
+ name
+ ~ Built-in constant
+ scope
+ constant.language, keyword.other.unit, constant.other.java, constant.other.unit
+ settings
+
+ foreground
+ #07FF00
+
+
+
+ name
+ ~ Built-in constant+
+ scope
+ constant.language.pseudo-variable
+ settings
+
+ background
+ #04800033
+ foreground
+ #07FF00
+
+
+
+ name
+ ~ User-defined constant
+ scope
+ constant.other, constant.block
+ settings
+
+ foreground
+ #00FF79
+
+
+
+ name
+ ~ Library constant
+ scope
+ support.constant, constant.name
+ settings
+
+ foreground
+ #00FFF8
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ √ pre-defined variable
+ scope
+ variable.other.readwrite.global.pre-defined, variable.language
+ settings
+
+ background
+ #00807C33
+ foreground
+ #00FF79
+
+
+
+ name
+ √ Constant Variable
+ scope
+ variable.other.constant
+ settings
+
+ foreground
+ #00FFF8
+
+
+
+ name
+ √ Library variable
+ scope
+ support.variable
+ settings
+
+ background
+ #00807C33
+ foreground
+ #00FFF8
+
+
+
+ name
+ √ global Variable
+ scope
+ variable.other.readwrite.global
+ settings
+
+ background
+ #00438033
+ foreground
+ #00807C
+
+
+
+ name
+ √ Variable
+ scope
+ variable.other, variable.js, punctuation.separator.variable
+ settings
+
+ foreground
+ #31A6FF
+
+
+
+ name
+ √ class Variable
+ scope
+ variable.other.readwrite.class
+ settings
+
+ background
+ #0008FF33
+ foreground
+ #0086FF
+
+
+
+ name
+ √ instance Variable
+ scope
+ variable.other.readwrite.instance
+ settings
+
+ foreground
+ #406180
+
+
+
+ name
+ √ Normal Variables
+ scope
+ variable.other.php, variable.other.normal
+ settings
+
+ foreground
+ #406180
+
+
+
+ name
+ √ Variable Punctuation
+ scope
+ punctuation.definition, punctuation.separator.variable
+ settings
+
+ foreground
+ #00000080
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ ¢ Storage
+ scope
+ storage -storage.modifier
+ settings
+
+ foreground
+ #7E0080
+
+
+
+ name
+ ¢ Entity Name Preprocessor
+ scope
+ other.preprocessor, entity.name.preprocessor
+ settings
+
+ background
+ #803D0033
+
+
+
+ name
+ ~ variable.language.this.js.prototype
+ scope
+ variable.language.this.js
+ settings
+
+ foreground
+ #666666
+
+
+
+ name
+ ¢ Storage Modifier
+ scope
+ storage.modifier
+ settings
+
+ foreground
+ #803D00
+
+
+
+ name
+ ¢ Class name
+ scope
+ entity.name.class, entity.name.type.class, entity.name.type.module
+ settings
+
+ foreground
+ #FF0000
+
+
+
+ name
+ ¢ Class
+ scope
+ meta.class -meta.class.instance, declaration.class, meta.definition.class, declaration.module
+ settings
+
+ background
+ #FF000033
+ foreground
+ #870000
+
+
+
+ name
+ ¢ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ background
+ #87000033
+ foreground
+ #FF0000
+
+
+
+ name
+ ¢ Instance
+ scope
+ entity.name.instance, entity.name.type.instance
+ settings
+
+ foreground
+ #FF3D44
+
+
+
+ name
+ ¢ Instance.constructor
+ scope
+ meta.class.instance.constructor
+ settings
+
+ background
+ #831E5133
+
+
+
+ name
+ ¢ Inherited class
+ scope
+ entity.other.inherited-class, entity.name.module
+ settings
+
+ background
+ #80000433
+ foreground
+ #FF0086
+
+
+
+ name
+ ¢ Class Method
+ scope
+ meta.definition.method
+ settings
+
+ foreground
+ #FF0086
+
+
+
+ name
+ ¢ Function Declaration
+ scope
+ meta.function, meta.property.function, declaration.function
+ settings
+
+
+
+ name
+ ¢ Function Declaration Name
+ scope
+ entity.name.function, entity.name.preprocessor
+ settings
+
+ foreground
+ #FF0086
+
+
+
+ name
+ ¢ Function Declaration Parameters
+ scope
+ variable.parameter.function
+ settings
+
+ foreground
+ #9799FF
+
+
+
+ name
+ ¢ Function Declaration Parameters
+ scope
+ variable.parameter -variable.parameter.misc.css, meta.definition.method meta.definition.param-list, meta.function.method.with-arguments variable.parameter.function
+ settings
+
+ foreground
+ #9799FF
+
+
+
+ name
+ ¢ Function Declaration Parameters Punctuation
+ scope
+ punctuation.definition.parameters, variable.parameter.function punctuation.separator.object
+ settings
+
+ foreground
+ #800004
+
+
+
+ name
+ Function Call
+ scope
+ keyword.other.special-method, meta.function-call entity.name.function -(meta.function-call meta.function), support.function - variable
+ settings
+
+ foreground
+ #782EC1
+
+
+
+ name
+ Library Function Call
+ scope
+ meta.function-call support.function - variable
+ settings
+
+ fontStyle
+
+ foreground
+ #9D3EFF
+
+
+
+ name
+ Library Function Name
+ scope
+ support.function
+ settings
+
+ background
+ #603F8033
+ foreground
+ #603F80
+
+
+
+ name
+ Function Call Arguments Punctuation
+ scope
+ punctuation.section.function, meta.brace.curly.function, meta.function-call punctuation.section.scope.ruby, meta.function-call punctuation.separator.object
+ settings
+
+ fontStyle
+
+ foreground
+ #BC80FF
+
+
+
+ name
+ Function Punctuation
+ scope
+ meta.group.braces.round punctuation.section.scope,
+meta.group.braces.round meta.delimiter.object.comma,
+meta.group.braces.curly.function meta.delimiter.object.comma,
+meta.brace.round
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #BC80FF
+
+
+
+ name
+ Function Call Without Arguments
+ scope
+ meta.function-call.method.without-arguments, meta.function-call.method.without-arguments entity.name.function
+ settings
+
+ foreground
+ #A88FC0
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ Keyword Control
+ scope
+ keyword.control
+ settings
+
+ foreground
+ #F800FF
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+
+
+ name
+ Keyword other
+ scope
+ keyword.other
+ settings
+
+ foreground
+ #7900FF
+
+
+
+ name
+ Regex Keyword
+ scope
+ source.regexp keyword.operator
+ settings
+
+
+
+ name
+ Keyword Operator
+ scope
+ keyword.operator, declaration.function.operator, meta.preprocessor.c.include, punctuation.separator.operator
+ settings
+
+ foreground
+ #0000CE
+
+
+
+ name
+ Keyword Operator Assignment
+ scope
+ keyword.operator.assignment
+ settings
+
+ background
+ #00009A33
+ foreground
+ #0000CE
+
+
+
+ name
+ Keyword Operator Arithmetic
+ scope
+ keyword.operator.arithmetic
+ settings
+
+ foreground
+ #2136CE
+
+
+
+ name
+ Keyword Operator Logical
+ scope
+ keyword.operator.logical
+ settings
+
+ background
+ #00009A33
+ foreground
+ #3759FF
+
+
+
+ name
+ Keyword Operator Comparison
+ scope
+ keyword.operator.comparison
+ settings
+
+ foreground
+ #7C88FF
+
+
+
+ name
+ meta.class.instance.constructor keyword.operator.new
+ scope
+ meta.class.instance.constructor keyword.operator.new
+ settings
+
+ foreground
+ #800043
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ ✘ HTML
+ settings
+
+
+
+ name
+ ✘ Tag Doctype
+ scope
+ meta.doctype, meta.tag.sgml-declaration.doctype, meta.tag.sgml.doctype
+ settings
+
+ background
+ #333333
+ foreground
+ #CCCCCC
+
+
+
+ name
+ ✘ Tag
+ scope
+ meta.tag
+ settings
+
+ foreground
+ #333333
+
+
+
+ name
+ ✘ Tag Structure
+ scope
+ meta.tag.structure, meta.tag.segment
+ settings
+
+ background
+ #333333BF
+ foreground
+ #666666
+
+
+
+ name
+ ✘ Tag Block
+ scope
+ meta.tag.block, meta.tag.xml, meta.tag.key
+ settings
+
+ background
+ #4C4C4C33
+ foreground
+ #4C4C4C
+
+
+
+ name
+ ✘ Tag Inline
+ scope
+ meta.tag.inline
+ settings
+
+ background
+ #803D0033
+ foreground
+ #FF7900
+
+
+
+ name
+ meta.tag.inline source
+ scope
+ meta.tag.inline source
+ settings
+
+ background
+ #803D0033
+
+
+
+ name
+ ✘ Tag Other
+ scope
+ meta.tag.other, entity.name.tag.style, entity.name.tag.script, meta.tag.block.script, source.js.embedded punctuation.definition.tag.html, source.css.embedded punctuation.definition.tag.html
+ settings
+
+ background
+ #80000433
+ foreground
+ #FF0007
+
+
+
+ name
+ ✘ Tag Form
+ scope
+ meta.tag.form, meta.tag.block.form
+ settings
+
+ background
+ #00438033
+ foreground
+ #0086FF
+
+
+
+ name
+ ✘ Tag Meta
+ scope
+ meta.tag.meta
+ settings
+
+ background
+ #3C008033
+ foreground
+ #F800FF
+
+
+
+ name
+ ✘ Tag Block Head
+ scope
+ meta.section.html.head
+ settings
+
+ background
+ #121212
+
+
+
+ name
+ ✘ Tag Block Form
+ scope
+ meta.section.html.form
+ settings
+
+ background
+ #0043801A
+
+
+
+ name
+ ✘ XML Tag
+ scope
+ meta.tag.xml
+ settings
+
+ foreground
+ #666666
+
+
+
+ name
+ ✘ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ foreground
+ #FFFFFF4D
+
+
+
+ name
+ ✘ Tag attribute
+ scope
+ entity.other.attribute-name, meta.tag punctuation.definition.string
+ settings
+
+ foreground
+ #FFFFFF33
+
+
+
+ name
+ ✘ Tag value
+ scope
+ meta.tag string -source -punctuation, text source text meta.tag string -punctuation
+ settings
+
+ foreground
+ #FFFFFF66
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ text meta.paragraph
+ scope
+ text meta.paragraph
+ settings
+
+ foreground
+ #999999
+
+
+
+ name
+ M markup
+ scope
+ markup markup -(markup meta.paragraph.list)
+ settings
+
+ background
+ #33333333
+ foreground
+ #FFF800
+
+
+
+ name
+ M HR
+ scope
+ markup.hr
+ settings
+
+ background
+ #FFFFFF
+ foreground
+ #000000
+
+
+
+ name
+ M heading
+ scope
+ markup.heading
+ settings
+
+ fontStyle
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ M bold
+ scope
+ markup.bold
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #95D4FF80
+
+
+
+ name
+ M italic
+ scope
+ markup.italic
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ M strike
+ settings
+
+
+
+ name
+ M add
+ settings
+
+
+
+ name
+ M del
+ settings
+
+
+
+ name
+ M underline
+ scope
+ markup.underline
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ M reference
+ scope
+ meta.reference, markup.underline.link
+ settings
+
+ fontStyle
+
+ foreground
+ #0086FF
+
+
+
+ name
+ M reference name
+ scope
+ entity.name.reference
+ settings
+
+ background
+ #00438033
+ foreground
+ #00FFF8
+
+
+
+ name
+ M underline link
+ scope
+ meta.reference.list markup.underline.link, text.html.textile markup.underline.link
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #00FFF8
+
+
+
+ name
+ M raw block
+ scope
+ markup.raw.block
+ settings
+
+ background
+ #80808040
+
+
+
+ name
+ M quote block
+ scope
+ markup.quote
+ settings
+
+ background
+ #FFFFFF1A
+
+
+
+ name
+ M list
+ scope
+ markup.list meta.paragraph
+ settings
+
+ fontStyle
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ Markdown
+ scope
+ text.html.markdown
+ settings
+
+ background
+ #FFFFFF
+ foreground
+ #000000
+
+
+
+ name
+ text.html.markdown meta.paragraph
+ scope
+ text.html.markdown meta.paragraph
+ settings
+
+ foreground
+ #000000
+
+
+
+ name
+ text.html.markdown markup.list meta.paragraph
+ scope
+ text.html.markdown markup.list meta.paragraph
+ settings
+
+ foreground
+ #555555
+
+
+
+ name
+ text.html.markdown markup.heading
+ scope
+ text.html.markdown markup.heading
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #000000
+
+
+
+ name
+ text.html.markdown string
+ scope
+ text.html.markdown string
+ settings
+
+ foreground
+ #8A5420
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ § CSS
+ scope
+ source.css
+ settings
+
+
+
+ name
+ § Selector
+ scope
+ meta.selector
+ settings
+
+ foreground
+ #666666
+
+
+
+ name
+ Property Value Parens
+ scope
+ source.css meta.scope.property-list meta.property-value punctuation.definition.arguments,
+source.css meta.scope.property-list meta.property-value punctuation.separator.arguments
+ settings
+
+ fontStyle
+
+ foreground
+ #006680
+
+
+
+ name
+ § Pseudo-Element
+ scope
+ entity.other.attribute-name.pseudo-element
+ settings
+
+ foreground
+ #4F00FF
+
+
+
+ name
+ § Pseudo-Class
+ scope
+ entity.other.attribute-name.pseudo-class, entity.other.attribute-name.tag.pseudo-class
+ settings
+
+ foreground
+ #7900FF
+
+
+
+ name
+ § Class
+ scope
+ meta.selector entity.other.attribute-name.class
+ settings
+
+ foreground
+ #F800FF
+
+
+
+ name
+ § ID
+ scope
+ meta.selector entity.other.attribute-name.id
+ settings
+
+ foreground
+ #FF0086
+
+
+
+ name
+ § Tag
+ scope
+ meta.selector entity.name.tag
+ settings
+
+ fontStyle
+
+ foreground
+ #FF0007
+
+
+
+ name
+ § Tag Wildcard
+ scope
+ entity.name.tag.wildcard, entity.other.attribute-name.universal
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #FF7900
+
+
+
+ name
+ § Attribute
+ scope
+ source.css entity.other.attribute-name.attribute
+ settings
+
+ foreground
+ #C25A00
+
+
+
+ name
+ § Attribute-Match
+ scope
+ source.css meta.attribute-selector keyword.operator.comparison
+ settings
+
+ foreground
+ #673000
+
+
+
+ name
+ § meta.scope.property-list
+ scope
+ meta.scope.property-list
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #333333
+
+
+
+ name
+ § meta.property-name
+ scope
+ meta.property-name
+ settings
+
+ fontStyle
+
+ foreground
+ #999999
+
+
+
+ name
+ § support.type.property-name
+ scope
+ support.type.property-name
+ settings
+
+ background
+ #0D0D0D
+ fontStyle
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ § meta.property-value
+ scope
+ meta.property-value
+ settings
+
+ background
+ #19191980
+ fontStyle
+
+ foreground
+ #999999
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ LaTeX
+ scope
+ text.latex
+ settings
+
+
+
+ name
+ L Markup Raw
+ scope
+ text.latex markup.raw
+ settings
+
+ background
+ #000000
+
+
+
+ name
+ L support.function
+ scope
+ text.latex support.function -support.function.textit -support.function.emph
+ settings
+
+ foreground
+ #BC80FF
+
+
+
+ name
+ L support.function.section
+ scope
+ text.latex support.function.section
+ settings
+
+ foreground
+ #FFFFFFBF
+
+
+
+ name
+ L entity.name.section
+ scope
+ text.latex entity.name.section -meta.group -keyword.operator.braces
+ settings
+
+ background
+ #FFFFFF
+ fontStyle
+
+ foreground
+ #000000
+
+
+
+ name
+ L constant.language.general
+ scope
+ text.latex constant.language.general
+ settings
+
+
+
+ name
+ L keyword.operator.delimiter
+ scope
+ text.latex keyword.operator.delimiter
+ settings
+
+ background
+ #00000080
+
+
+
+ name
+ L keyword.operator.brackets
+ scope
+ text.latex keyword.operator.brackets
+ settings
+
+ foreground
+ #999999
+
+
+
+ name
+ L keyword.operator.braces
+ scope
+ text.latex keyword.operator.braces
+ settings
+
+ fontStyle
+
+ foreground
+ #666666
+
+
+
+ name
+ L meta.footnote
+ scope
+ meta.footnote
+ settings
+
+ background
+ #00008033
+ foreground
+ #0008FF4D
+
+
+
+ name
+ L meta.label.reference
+ scope
+ text.latex meta.label.reference
+ settings
+
+ background
+ #FFFFFF0D
+ fontStyle
+
+
+
+
+ name
+ L keyword.control.ref
+ scope
+ text.latex keyword.control.ref
+ settings
+
+ background
+ #260001
+ foreground
+ #FF0007
+
+
+
+ name
+ L variable.parameter.label.reference
+ scope
+ text.latex variable.parameter.label.reference
+ settings
+
+ background
+ #400002
+ foreground
+ #FFBC80
+
+
+
+ name
+ L keyword.control.cite
+ scope
+ text.latex keyword.control.cite
+ settings
+
+ background
+ #260014
+ foreground
+ #FF0086
+
+
+
+ name
+ L variable.parameter.cite
+ scope
+ variable.parameter.cite
+ settings
+
+ background
+ #400022
+ foreground
+ #FFBFE1
+
+
+
+ name
+ L variable.parameter.label
+ scope
+ text.latex variable.parameter.label
+ settings
+
+ foreground
+ #FFFFFF80
+
+
+
+ name
+ L markup
+ scope
+ meta.function markup
+ settings
+
+ foreground
+ #CDCDCD
+
+
+
+ name
+ L meta.group.braces
+ scope
+ text.latex meta.group.braces
+ settings
+
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.environment.list
+ scope
+ text.latex meta.environment.list
+ settings
+
+ background
+ #00000080
+ fontStyle
+
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.environment.list 2
+ scope
+ text.latex meta.environment.list meta.environment.list
+ settings
+
+ background
+ #00000080
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.environment.list 3
+ scope
+ text.latex meta.environment.list meta.environment.list meta.environment.list
+ settings
+
+ background
+ #000000
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.environment.list 4
+ scope
+ text.latex meta.environment.list meta.environment.list meta.environment.list meta.environment.list
+ settings
+
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.environment.list 5
+ scope
+ text.latex meta.environment.list meta.environment.list meta.environment.list meta.environment.list meta.environment.list
+ settings
+
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.environment.list 6
+ scope
+ text.latex meta.environment.list meta.environment.list meta.environment.list meta.environment.list meta.environment.list meta.environment.list
+ settings
+
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.end-document
+ scope
+ text.latex meta.end-document, text.latex meta.begin-document, meta.end-document.latex support.function, meta.end-document.latex variable.parameter, meta.begin-document.latex support.function, meta.begin-document.latex variable.parameter
+ settings
+
+ background
+ #CCCCCC
+ foreground
+ #000000
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ meta.brace.erb.return-value
+ scope
+ meta.brace.erb.return-value
+ settings
+
+ background
+ #00805533
+ foreground
+ #00FFAA
+
+
+
+ name
+ source.ruby.rails.embedded.return-value.one-line
+ scope
+ source.ruby.rails.embedded.return-value.one-line
+ settings
+
+ background
+ #8080801A
+
+
+
+ name
+ meta.brace.erb
+ scope
+ punctuation.section.embedded -(source string source punctuation.section.embedded), meta.brace.erb.html
+ settings
+
+ background
+ #00FFF81A
+ foreground
+ #00FFF8
+
+
+
+ name
+ source.ruby.rails.embedded.one-line
+ scope
+ source.ruby.rails.embedded.one-line
+ settings
+
+ background
+ #00FFF81A
+
+
+
+ name
+ String Embedded Source
+ scope
+ source string source punctuation.section.embedded
+ settings
+
+ foreground
+ #406180
+
+
+
+ name
+ source.js.embedded
+ scope
+ source.js.embedded
+ settings
+
+ background
+ #0D0D0D
+
+
+
+ name
+ ◊ Source
+ scope
+ source
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ ◊ meta.brace.erb
+ scope
+ meta.brace.erb
+ settings
+
+ background
+ #000000
+
+
+
+ name
+ ◊ Source String Source
+ scope
+ source string source
+ settings
+
+ background
+ #33333380
+ foreground
+ #FFFFFF
+
+
+
+ name
+ ◊ Source String Interpolated Source
+ scope
+ source string.interpolated source
+ settings
+
+ background
+ #00000099
+ foreground
+ #999999
+
+
+
+ name
+ ◊ Source Embeded Source
+ scope
+ source source, source.java.embedded
+ settings
+
+ background
+ #3333331A
+
+
+
+ name
+ ◊ Text
+ scope
+ text -text.xml.strict
+ settings
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ ◊ Text Source
+ scope
+ text source, meta.scope.django.template
+ settings
+
+ background
+ #000000
+ foreground
+ #CCCCCC
+
+
+
+ name
+ ◊ Text Source Text String
+ settings
+
+
+
+ name
+ ◊ Text String Source
+ scope
+ text string source
+ settings
+
+ foreground
+ #999999
+
+
+
+ name
+ ◊ Text Source String Source
+ settings
+
+
+
+ name
+ ◊ Text String Source String Source
+ scope
+ text string source string source
+ settings
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ Invalid
+ scope
+ invalid -invalid.SOMETHING
+ settings
+
+ background
+ #FF0007
+ fontStyle
+ bold
+ foreground
+ #330004
+
+
+
+ name
+ Invalid Value
+ scope
+ invalid.SOMETHING
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #FF3600
+
+
+
+ name
+ Syntax
+ scope
+ meta.syntax
+ settings
+
+ foreground
+ #333333
+
+
+
+ name
+ comment
+ scope
+ comment -comment.line
+ settings
+
+ background
+ #33333333
+ foreground
+ #4C4C4C
+
+
+
+ name
+ comment.line
+ scope
+ comment.line
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #4C4C4C
+
+
+
+ name
+ Comment Punctuation
+ scope
+ comment punctuation
+ settings
+
+
+
+ name
+ ✘ HTML Comment
+ scope
+ text comment.block -source
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ D Diff Add
+ scope
+ markup.inserted
+ settings
+
+ background
+ #00401E
+ foreground
+ #40FF9A
+
+
+
+ name
+ D Diff Delete
+ scope
+ markup.deleted
+ settings
+
+ background
+ #400022
+ foreground
+ #FF40A3
+
+
+
+ name
+ D Diff Changed
+ scope
+ markup.changed
+ settings
+
+ background
+ #803D00
+ foreground
+ #FFFF55
+
+
+
+ name
+ text.subversion-commit meta.scope.changed-files
+ scope
+ text.subversion-commit meta.scope.changed-files, text.subversion-commit meta.scope.changed-files.svn meta.diff.separator
+ settings
+
+ background
+ #000000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ text.subversion-commit
+ scope
+ text.subversion-commit
+ settings
+
+ background
+ #FFFFFF
+ foreground
+ #000000
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ meta.delimiter
+ scope
+ punctuation.terminator, meta.delimiter, punctuation.separator.method
+ settings
+
+ background
+ #FFFFFF03
+ fontStyle
+ bold
+ foreground
+ #7F7F7F
+
+
+
+ name
+ meta.delimiter.statement.js
+ scope
+ punctuation.terminator.statement, meta.delimiter.statement.js
+ settings
+
+ background
+ #00000080
+
+
+
+ name
+ meta.delimiter.object.js
+ scope
+ meta.delimiter.object.js
+ settings
+
+ background
+ #00000040
+
+
+
+ name
+ Bold String Quotes
+ scope
+ string.quoted.single.brace, string.quoted.double.brace
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #803D00
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ ß Blog Post / Email Message
+ scope
+ text.blog, text.mail
+ settings
+
+ background
+ #DCDCDC
+ foreground
+ #333333
+
+
+
+ name
+ ß Post Content
+ scope
+ text.blog text, text.mail text
+ settings
+
+ background
+ #000000
+ foreground
+ #CCCCCC
+
+
+
+ name
+ ß Post Header Keys
+ scope
+ meta.header.blog keyword.other, meta.header.mail keyword.other
+ settings
+
+ background
+ #00FFF81A
+ fontStyle
+
+ foreground
+ #06403E
+
+
+
+ name
+ ß Post Header Values
+ scope
+ meta.header.blog string.unquoted.blog, meta.header.mail string.unquoted
+ settings
+
+ background
+ #FFFF551A
+ foreground
+ #803D00
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ OCAML
+ settings
+
+
+
+ name
+ entity.name.type.module
+ scope
+ source.ocaml entity.name.type.module
+ settings
+
+ foreground
+ #FF0000
+
+
+
+ name
+ support.other.module
+ scope
+ source.ocaml support.other.module
+ settings
+
+ background
+ #83000033
+ foreground
+ #FF0000
+
+
+
+ name
+ entity.name.type.variant
+ scope
+ entity.name.type.variant
+ settings
+
+ foreground
+ #00FFF8
+
+
+
+ name
+ entity.name.tag, meta.record.definition
+ scope
+ source.ocaml entity.name.tag, source.ocaml meta.record.definition
+ settings
+
+ foreground
+ #00FF79
+
+
+
+ name
+ ———————— PUNCTUATION ————————
+ settings
+
+
+
+ name
+ punctuation.separator.parameters
+ scope
+ punctuation.separator.parameters
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #FFFFFF
+
+
+
+ name
+ meta.brace.pipe
+ scope
+ meta.brace.pipe
+ settings
+
+ background
+ #33333333
+ fontStyle
+
+ foreground
+ #4C4C4C
+
+
+
+ name
+ Misc Punctuation
+ scope
+ meta.brace.erb, source.ruby.embedded.source.brace, punctuation.section.dictionary, punctuation.terminator.dictionary, punctuation.separator.object, punctuation.separator.statement, punctuation.separator.key-value.css
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #666666
+
+
+
+ name
+ Curly Punctuation
+ scope
+ punctuation.section.scope.curly, punctuation.section.scope
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #999999
+
+
+
+ name
+ Object Punctuation
+ scope
+ punctuation.separator.objects,
+meta.group.braces.curly meta.delimiter.object.comma,
+punctuation.separator.key-value -meta.tag,
+source.ocaml punctuation.separator.match-definition
+
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0C823B
+
+
+
+ name
+ Function Punctuation
+ scope
+ punctuation.separator.parameters.function.js,punctuation.definition.function, punctuation.separator.function-return, punctuation.separator.function-definition, punctuation.definition.arguments, punctuation.separator.arguments
+ settings
+
+ foreground
+ #800043
+
+
+
+ name
+ Array Punctuation
+ scope
+ meta.group.braces.square punctuation.section.scope, meta.group.braces.square meta.delimiter.object.comma, meta.brace.square, punctuation.separator.array, punctuation.section.array, punctuation.definition.array, punctuation.definition.constant.range
+ settings
+
+ background
+ #803D001A
+ fontStyle
+ bold
+ foreground
+ #7F5E40
+
+
+
+ name
+ Array, Range
+ scope
+ meta.structure.array -punctuation.definition.array, meta.definition.range -punctuation.definition.constant.range
+ settings
+
+ background
+ #803D001A
+
+
+
+ name
+ meta.brace.curly meta.group
+ scope
+ meta.brace.curly meta.group.css
+ settings
+
+ background
+ #00000080
+ fontStyle
+
+
+
+
+ name
+ º meta.source.embedded
+ scope
+ meta.source.embedded, entity.other.django.tagbraces
+ settings
+
+ background
+ #00000080
+ foreground
+ #666666
+
+
+
+ name
+ º meta.group.braces.round JS
+ scope
+ source.js meta.group.braces.round, meta.scope.heredoc
+ settings
+
+
+
+ name
+ º Even
+ scope
+ source.ruby meta.even-tab, source.ruby meta.even-tab.group2, source.ruby meta.even-tab.group4, source.ruby meta.even-tab.group6, source.ruby meta.even-tab.group8, source.ruby meta.even-tab.group10, source.ruby meta.even-tab.group12
+
+ settings
+
+ background
+ #00000080
+
+
+
+ name
+ º meta.block.slate
+ scope
+ meta.block.slate
+ settings
+
+ foreground
+ #666666
+
+
+
+ name
+ º meta.block.content.slate
+ scope
+ meta.block.content.slate
+ settings
+
+ foreground
+ #CCCCCC
+
+
+
+ name
+ Function Group1
+ scope
+ meta.function meta.group.braces.curly.function -(meta.group meta.group), meta.function meta.odd-tab.group1
+ settings
+
+
+
+ name
+ Group1
+ scope
+ meta.odd-tab.group1, meta.group.braces, meta.block.slate, text.xml.strict meta.tag, meta.paren-group, meta.section
+ settings
+
+ background
+ #0A0A0A
+
+
+
+ name
+ Group2
+ scope
+ meta.even-tab.group2, meta.group.braces meta.group.braces, meta.block.slate meta.block.slate, text.xml.strict meta.tag meta.tag, meta.group.braces meta.group.braces, meta.paren-group meta.paren-group, meta.section meta.section
+ settings
+
+ background
+ #0E0E0E
+
+
+
+ name
+ Group3
+ scope
+ meta.odd-tab.group3, meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces, meta.paren-group meta.paren-group meta.paren-group, meta.section meta.section meta.section
+ settings
+
+ background
+ #111111
+
+
+
+ name
+ Group4
+ scope
+ meta.even-tab.group4, meta.group.braces meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces meta.group.braces, meta.paren-group meta.paren-group meta.paren-group meta.paren-group, meta.section meta.section meta.section meta.section
+ settings
+
+ background
+ #151515
+
+
+
+ name
+ Group5
+ scope
+ meta.odd-tab.group5, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces, meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group, meta.section meta.section meta.section meta.section meta.section
+ settings
+
+ background
+ #191919
+
+
+
+ name
+ Group6
+ scope
+ meta.even-tab.group6, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces, meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group, meta.section meta.section meta.section meta.section meta.section meta.section
+ settings
+
+ background
+ #1C1C1C
+
+
+
+ name
+ Group7
+ scope
+ meta.odd-tab.group7, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces, meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group, meta.section meta.section meta.section meta.section meta.section meta.section meta.section
+ settings
+
+ background
+ #1F1F1F
+
+
+
+ name
+ Group8
+ scope
+ meta.even-tab.group8, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces, meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group, meta.section meta.section meta.section meta.section meta.section meta.section meta.section meta.section
+ settings
+
+ background
+ #212121
+
+
+
+ name
+ Group9
+ scope
+ meta.odd-tab.group9, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces, meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group meta.paren-group, meta.section meta.section meta.section meta.section meta.section meta.section meta.section meta.section meta.section
+ settings
+
+ background
+ #242424
+
+
+
+ name
+ Group10
+ scope
+ meta.even-tab.group10
+ settings
+
+ background
+ #1F1F1F
+
+
+
+ name
+ Group11
+ scope
+ meta.odd-tab.group11
+ settings
+
+ background
+ #151515
+
+
+
+ name
+ ———————— END ————————
+ settings
+
+
+
+ name
+ IE6
+ scope
+ meta.property.vendor.microsoft.trident.4,
+meta.property.vendor.microsoft.trident.4 support.type.property-name,
+meta.property.vendor.microsoft.trident.4 punctuation.terminator.rule
+ settings
+
+ fontStyle
+
+ foreground
+ #1B95E2
+
+
+
+ name
+ IE7
+ scope
+ meta.property.vendor.microsoft.trident.5,
+meta.property.vendor.microsoft.trident.5 support.type.property-name,
+meta.property.vendor.microsoft.trident.5 punctuation.separator.key-value,
+meta.property.vendor.microsoft.trident.5 punctuation.terminator.rule
+ settings
+
+ fontStyle
+
+ foreground
+ #F5C034
+
+
+
+ uuid
+ 24847CB3-23BC-4BF9-861B-E39661A6DA71
+
+
diff --git a/app/rcc/edbee/themes/Brilliance_Dull.tmTheme b/app/rcc/edbee/themes/Brilliance_Dull.tmTheme
new file mode 100644
index 00000000..ae7e43ad
--- /dev/null
+++ b/app/rcc/edbee/themes/Brilliance_Dull.tmTheme
@@ -0,0 +1,2243 @@
+
+
+
+
+ author
+ Thomas Aylott
+ comment
+ by Thomas Aylott subtleGradient.com
+ name
+ Brilliance Dull
+ settings
+
+
+ settings
+
+ background
+ #050505FA
+ caret
+ #7979B7
+ foreground
+ #CDCDCD
+ invisibles
+ #CDCDCD1A
+ lineHighlight
+ #0000801A
+ selection
+ #2E2EE64D
+
+
+
+ name
+ Thomas Aylott ㊷
+ scope
+ meta.thomas_aylott
+ settings
+
+ background
+ #FFFFFF
+ fontStyle
+ bold
+ foreground
+ #000000
+
+
+
+ name
+ subtleGradient.com
+ scope
+ meta.subtlegradient
+ settings
+
+ background
+ #FFFFFF
+ fontStyle
+ underline
+ foreground
+ #555555
+
+
+
+ name
+ ——————————————————
+ scope
+ meta.subtlegradient
+ settings
+
+ background
+ #FFFFFF
+ foreground
+ #E6E6E6
+
+
+
+ name
+ ~ String
+ scope
+ string -meta.tag -meta.doctype -string.regexp -string.literal -string.interpolated -string.quoted.literal -string.unquoted, variable.parameter.misc.css, text string source string, string.unquoted string, string.regexp string
+ settings
+
+ background
+ #803D0033
+ foreground
+ #D2D1AB
+
+
+
+ name
+ ~ String Punctuation
+ scope
+ punctuation.definition.string -meta.tag
+ settings
+
+ foreground
+ #533F2C
+
+
+
+ name
+ ~ String Punctuation II
+ scope
+ string.regexp punctuation.definition.string, string.quoted.literal punctuation.definition.string, string.quoted.double.ruby.mod punctuation.definition.string
+ settings
+
+ foreground
+ #FFF80033
+
+
+
+ name
+ ~ String Literal
+ scope
+ string.quoted.literal, string.quoted.double.ruby.mod
+ settings
+
+ background
+ #43800033
+ foreground
+ #A6A458
+
+
+
+ name
+ ~ String Unquoted
+ scope
+ string.unquoted -string.unquoted.embedded, string.quoted.double.multiline, meta.scope.heredoc
+ settings
+
+ foreground
+ #D2BEAB
+
+
+
+ name
+ ~ String Interpolated
+ scope
+ string.interpolated
+ settings
+
+ background
+ #1A1A1A
+ foreground
+ #D2D1AB
+
+
+
+ name
+ ~ String RegEx
+ scope
+ string.regexp
+ settings
+
+ background
+ #43800033
+ foreground
+ #A6A458
+
+
+
+ name
+ ~ String RegEx Group 1
+ scope
+ string.regexp.group
+ settings
+
+ background
+ #43800033
+
+
+
+ name
+ ~ String RegEx Group 2
+ scope
+ string.regexp.group string.regexp.group
+ settings
+
+ background
+ #43800033
+ foreground
+ #FFFFFF66
+
+
+
+ name
+ ~ String RegEx Group 3
+ scope
+ string.regexp.group string.regexp.group string.regexp.group
+ settings
+
+ background
+ #43800033
+ foreground
+ #FFFFFF66
+
+
+
+ name
+ ~ String RegEx Group 4
+ scope
+ string.regexp.group string.regexp.group string.regexp.group string.regexp.group
+ settings
+
+ background
+ #43800033
+ foreground
+ #FFFFFF66
+
+
+
+ name
+ ~ String RegEx Character-Class
+ scope
+ string.regexp.character-class
+ settings
+
+ background
+ #43800033
+ foreground
+ #80A659
+
+
+
+ name
+ ~ String RegEx Arbitrary-Repitition
+ scope
+ string.regexp.arbitrary-repitition
+ settings
+
+ background
+ #43800033
+ foreground
+ #56A5A4
+
+
+
+ name
+ source.regexp keyword
+ scope
+ source.regexp keyword.operator
+ settings
+
+ foreground
+ #A75980
+
+
+
+ name
+ ~ String RegEx Comment
+ scope
+ string.regexp comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #FFFFFF
+
+
+
+ name
+ ~ Meta Group Assertion Regexp
+ scope
+ meta.group.assertion.regexp
+ settings
+
+ background
+ #0086FF33
+
+
+
+ name
+ ~ Meta Assertion
+ scope
+ meta.assertion, meta.group.assertion keyword.control.group.regexp
+ settings
+
+ foreground
+ #5780A6
+
+
+
+ name
+ ~ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #95A658
+
+
+
+ name
+ ~ Character constant
+ scope
+ constant.character
+ settings
+
+ foreground
+ #80A659
+
+
+
+ name
+ ~ Built-in constant
+ scope
+ constant.language, keyword.other.unit, constant.other.java, constant.other.unit
+ settings
+
+ foreground
+ #59A559
+
+
+
+ name
+ ~ Built-in constant+
+ scope
+ constant.language.pseudo-variable
+ settings
+
+ background
+ #04800033
+ foreground
+ #59A559
+
+
+
+ name
+ ~ User-defined constant
+ scope
+ constant.other, constant.block
+ settings
+
+ foreground
+ #57A57D
+
+
+
+ name
+ ~ Library constant
+ scope
+ support.constant, constant.name
+ settings
+
+ foreground
+ #56A5A4
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ √ pre-defined variable
+ scope
+ variable.language, variable.other.readwrite.global.pre-defined
+ settings
+
+ foreground
+ #5E6B6B
+
+
+
+ name
+ √ Constant Variable
+ scope
+ variable.other.constant
+ settings
+
+ foreground
+ #56A5A4
+
+
+
+ name
+ √ Library variable
+ scope
+ support.variable
+ settings
+
+ background
+ #00807C33
+ foreground
+ #56A5A4
+
+
+
+ name
+ √ global Variable
+ scope
+ variable.other.readwrite.global
+ settings
+
+ background
+ #00438033
+ foreground
+ #2B5252
+
+
+
+ name
+ √ Variable
+ scope
+ variable.other, variable.js
+ settings
+
+ foreground
+ #5780A6
+
+
+
+ name
+ √ class Variable
+ scope
+ variable.other.readwrite.class
+ settings
+
+ background
+ #0007FF33
+ foreground
+ #5780A6
+
+
+
+ name
+ √ instance Variable
+ scope
+ variable.other.readwrite.instance
+ settings
+
+ foreground
+ #555F69
+
+
+
+ name
+ √ Normal Variables
+ scope
+ variable.other.php, variable.other.normal
+ settings
+
+ foreground
+ #555F69
+
+
+
+ name
+ √ Variable Punctuation
+ scope
+ punctuation.definition -punctuation.definition.comment, punctuation.separator.variable
+ settings
+
+ foreground
+ #00000080
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ ¢ Storage
+ scope
+ storage -storage.modifier
+ settings
+
+ foreground
+ #A77D58
+
+
+
+ name
+ ¢ Entity Name Preprocessor
+ scope
+ other.preprocessor, entity.name.preprocessor
+ settings
+
+ background
+ #803D0033
+
+
+
+ name
+ ~ variable.language.this.js.prototype
+ scope
+ variable.language.this.js
+ settings
+
+ foreground
+ #666666
+
+
+
+ name
+ ¢ Storage Modifier
+ scope
+ storage.modifier
+ settings
+
+ foreground
+ #533F2C
+
+
+
+ name
+ ¢ Class name
+ scope
+ entity.name.class, entity.name.type.class, entity.name.type.module
+ settings
+
+ foreground
+ #A7595A
+
+
+
+ name
+ ¢ Class
+ scope
+ meta.class -meta.class.instance, declaration.class, meta.definition.class, declaration.module
+ settings
+
+ background
+ #29161780
+ foreground
+ #532D2D
+
+
+
+ name
+ ¢ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ background
+ #80000433
+ foreground
+ #A7595A
+
+
+
+ name
+ ¢ Instance
+ scope
+ entity.name.instance
+ settings
+
+ foreground
+ #A7595A
+
+
+
+ name
+ ¢ Instance.constructor
+ scope
+ meta.class.instance.constructor
+ settings
+
+ background
+ #80004333
+
+
+
+ name
+ ¢ Inherited class
+ scope
+ entity.other.inherited-class, entity.name.module
+ settings
+
+ background
+ #80000433
+ foreground
+ #A75980
+
+
+
+ name
+ ¢ Class Method
+ scope
+ object.property.function, meta.definition.method
+ settings
+
+ foreground
+ #A75980
+
+
+
+ name
+ ¢ Function
+ scope
+ meta.function -(meta.tell-block), meta.property.function, declaration.function
+ settings
+
+ background
+ #80004333
+ foreground
+ #532D40
+
+
+
+ name
+ ¢ Function name
+ scope
+ entity.name.function, entity.name.preprocessor
+ settings
+
+ foreground
+ #A75980
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #A459A5
+
+
+
+ name
+ Keyword.control
+ scope
+ keyword.control
+ settings
+
+ background
+ #3C008033
+ foreground
+ #A459A5
+
+
+
+ name
+ Special Function
+ scope
+ keyword.other.special-method, meta.function-call entity.name.function -(meta.function-call meta.function), support.function - variable
+ settings
+
+ foreground
+ #8D809D
+
+
+
+ name
+ Library function
+ scope
+ support.function - variable
+ settings
+
+ foreground
+ #634683
+
+
+
+ name
+ Keyword.operator
+ scope
+ keyword.operator, declaration.function.operator, meta.preprocessor.c.include
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #7979B7
+
+
+
+ name
+ keyword.operator.comparison
+ scope
+ keyword.operator.comparison
+ settings
+
+ fontStyle
+
+ foreground
+ #9899C8
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter -variable.parameter.misc.css, meta.definition.method meta.definition.param-list, meta.function.method.with-arguments variable.parameter.function
+ settings
+
+ background
+ #3C008033
+ foreground
+ #ABACD2
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ ✘ HTML
+ settings
+
+
+
+ name
+ ✘ Tag Doctype
+ scope
+ meta.doctype, meta.tag.sgml-declaration.doctype, meta.tag.sgml.doctype
+ settings
+
+ background
+ #333333
+ foreground
+ #CDCDCD
+
+
+
+ name
+ ✘ Tag
+ scope
+ meta.tag
+ settings
+
+ foreground
+ #333333
+
+
+
+ name
+ ✘ Tag Structure
+ scope
+ meta.tag.structure, meta.tag.segment
+ settings
+
+ background
+ #333333BF
+ foreground
+ #666666
+
+
+
+ name
+ ✘ Tag Block
+ scope
+ meta.tag.block, meta.tag.xml, meta.tag.key
+ settings
+
+ background
+ #4C4C4C33
+ foreground
+ #4C4C4C
+
+
+
+ name
+ ✘ Tag Inline
+ scope
+ meta.tag.inline
+ settings
+
+ background
+ #803D0033
+ foreground
+ #A77D58
+
+
+
+ name
+ meta.tag.inline source
+ scope
+ meta.tag.inline source
+ settings
+
+ background
+ #803D0033
+
+
+
+ name
+ ✘ Tag Other
+ scope
+ meta.tag.other, entity.name.tag.style, source entity.other.attribute-name -text.html.basic.embedded , entity.name.tag.script, meta.tag.block.script
+ settings
+
+ background
+ #80000433
+ foreground
+ #A7595A
+
+
+
+ name
+ ✘ Tag Form
+ scope
+ meta.tag.form, meta.tag.block.form
+ settings
+
+ background
+ #00438033
+ foreground
+ #5780A6
+
+
+
+ name
+ ✘ Tag Meta
+ scope
+ meta.tag.meta
+ settings
+
+ background
+ #3C008033
+ foreground
+ #A459A5
+
+
+
+ name
+ ✘ Tag Block Head
+ scope
+ meta.section.html.head
+ settings
+
+ background
+ #121212
+
+
+
+ name
+ ✘ Tag Block Form
+ scope
+ meta.section.html.form
+ settings
+
+ background
+ #0043801A
+
+
+
+ name
+ ✘ XML Tag
+ scope
+ meta.tag.xml
+ settings
+
+ foreground
+ #666666
+
+
+
+ name
+ ✘ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ foreground
+ #FFFFFF4D
+
+
+
+ name
+ ✘ Tag attribute
+ scope
+ entity.other.attribute-name, meta.tag punctuation.definition.string
+ settings
+
+ foreground
+ #FFFFFF33
+
+
+
+ name
+ ✘ Tag value
+ scope
+ meta.tag string -source -punctuation, text source text meta.tag string -punctuation
+ settings
+
+ foreground
+ #FFFFFF66
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ M markdown
+ settings
+
+
+
+ name
+ M markup
+ scope
+ markup markup -(markup meta.paragraph.list)
+ settings
+
+ background
+ #33333333
+ foreground
+ #A6A458
+
+
+
+ name
+ M HR
+ scope
+ markup.hr
+ settings
+
+ background
+ #FFFFFF
+ foreground
+ #000000
+
+
+
+ name
+ M heading
+ scope
+ markup.heading
+ settings
+
+ background
+ #33333380
+ foreground
+ #666666
+
+
+
+ name
+ M bold
+ scope
+ markup.bold
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ M italic
+ scope
+ markup.italic
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ M strike
+ settings
+
+
+
+ name
+ M add
+ settings
+
+
+
+ name
+ M del
+ settings
+
+
+
+ name
+ M underline
+ scope
+ markup.underline
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ M reference
+ scope
+ meta.reference, markup.underline.link
+ settings
+
+ fontStyle
+
+ foreground
+ #5780A6
+
+
+
+ name
+ M reference name
+ scope
+ entity.name.reference
+ settings
+
+ background
+ #00438033
+ foreground
+ #56A5A4
+
+
+
+ name
+ M underline link
+ scope
+ meta.reference.list markup.underline.link, text.html.textile markup.underline.link
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #56A5A4
+
+
+
+ name
+ M raw block
+ scope
+ markup.raw.block
+ settings
+
+ background
+ #000000
+ foreground
+ #999999
+
+
+
+ name
+ M quote block
+ scope
+ markup.quote
+ settings
+
+ background
+ #FFFFFF1A
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ § CSS
+ scope
+ source.css
+ settings
+
+
+
+ name
+ § Selector
+ scope
+ meta.selector
+ settings
+
+ background
+ #00000080
+ foreground
+ #666666
+
+
+
+ name
+ § Attribute-Match
+ scope
+ meta.attribute-match.css
+ settings
+
+ background
+ #00048033
+ foreground
+ #575AA6
+
+
+
+ name
+ § Pseudo-Class
+ scope
+ entity.other.attribute-name.pseudo-class, entity.other.attribute-name.tag.pseudo-class
+ settings
+
+ foreground
+ #7C58A5
+
+
+
+ name
+ § Class
+ scope
+ meta.selector entity.other.attribute-name.class
+ settings
+
+ foreground
+ #A459A5
+
+
+
+ name
+ § ID
+ scope
+ meta.selector entity.other.attribute-name.id
+ settings
+
+ foreground
+ #A75980
+
+
+
+ name
+ § Tag
+ scope
+ meta.selector entity.name.tag
+ settings
+
+ fontStyle
+
+ foreground
+ #A7595A
+
+
+
+ name
+ § Tag Wildcard
+ scope
+ entity.name.tag.wildcard, entity.other.attribute-name.universal
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #A77D58
+
+
+
+ name
+ § meta.scope.property-list
+ scope
+ meta.scope.property-list
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #333333
+
+
+
+ name
+ § meta.property-name
+ scope
+ meta.property-name
+ settings
+
+ fontStyle
+
+ foreground
+ #999999
+
+
+
+ name
+ § support.type.property-name
+ scope
+ support.type.property-name
+ settings
+
+ background
+ #000000
+ fontStyle
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ § meta.property-value
+ scope
+ meta.property-value
+ settings
+
+ background
+ #0D0D0D
+ fontStyle
+
+ foreground
+ #999999
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ LaTeX
+ scope
+ text.latex
+ settings
+
+
+
+ name
+ L Markup Raw
+ scope
+ text.latex markup.raw
+ settings
+
+ background
+ #000000
+
+
+
+ name
+ L support.function
+ scope
+ text.latex support.function -support.function.textit -support.function.emph
+ settings
+
+ foreground
+ #BDABD1
+
+
+
+ name
+ L support.function.section
+ scope
+ text.latex support.function.section
+ settings
+
+ foreground
+ #FFFFFFBF
+
+
+
+ name
+ L entity.name.section
+ scope
+ text.latex entity.name.section -meta.group -keyword.operator.braces
+ settings
+
+ background
+ #FFFFFF
+ fontStyle
+
+ foreground
+ #000000
+
+
+
+ name
+ L constant.language.general
+ scope
+ text.latex constant.language.general
+ settings
+
+
+
+ name
+ L keyword.operator.delimiter
+ scope
+ text.latex keyword.operator.delimiter
+ settings
+
+ background
+ #00000080
+
+
+
+ name
+ L keyword.operator.brackets
+ scope
+ text.latex keyword.operator.brackets
+ settings
+
+ foreground
+ #999999
+
+
+
+ name
+ L keyword.operator.braces
+ scope
+ text.latex keyword.operator.braces
+ settings
+
+ fontStyle
+
+ foreground
+ #666666
+
+
+
+ name
+ L meta.footnote
+ scope
+ meta.footnote
+ settings
+
+ background
+ #00048033
+ foreground
+ #0008FF4D
+
+
+
+ name
+ L meta.label.reference
+ scope
+ text.latex meta.label.reference
+ settings
+
+ background
+ #FFFFFF0D
+ fontStyle
+
+
+
+
+ name
+ L keyword.control.ref
+ scope
+ text.latex keyword.control.ref
+ settings
+
+ background
+ #180D0C
+ foreground
+ #A7595A
+
+
+
+ name
+ L variable.parameter.label.reference
+ scope
+ text.latex variable.parameter.label.reference
+ settings
+
+ background
+ #291616
+ foreground
+ #D2BEAB
+
+
+
+ name
+ L keyword.control.cite
+ scope
+ text.latex keyword.control.cite
+ settings
+
+ background
+ #180D12
+ foreground
+ #A75980
+
+
+
+ name
+ L variable.parameter.cite
+ scope
+ variable.parameter.cite
+ settings
+
+ background
+ #29161F
+ foreground
+ #E8D5DE
+
+
+
+ name
+ L variable.parameter.label
+ scope
+ text.latex variable.parameter.label
+ settings
+
+ foreground
+ #FFFFFF80
+
+
+
+ name
+ L meta.group.braces
+ scope
+ text.latex meta.group.braces
+ settings
+
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.environment.list
+ scope
+ text.latex meta.environment.list
+ settings
+
+ background
+ #00000080
+ fontStyle
+
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.environment.list 2
+ scope
+ text.latex meta.environment.list meta.environment.list
+ settings
+
+ background
+ #00000080
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.environment.list 3
+ scope
+ text.latex meta.environment.list meta.environment.list meta.environment.list
+ settings
+
+ background
+ #000000
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.environment.list 4
+ scope
+ text.latex meta.environment.list meta.environment.list meta.environment.list meta.environment.list
+ settings
+
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.environment.list 5
+ scope
+ text.latex meta.environment.list meta.environment.list meta.environment.list meta.environment.list meta.environment.list
+ settings
+
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.environment.list 6
+ scope
+ text.latex meta.environment.list meta.environment.list meta.environment.list meta.environment.list meta.environment.list meta.environment.list
+ settings
+
+ foreground
+ #33333333
+
+
+
+ name
+ L meta.end-document
+ scope
+ text.latex meta.end-document, text.latex meta.begin-document, meta.end-document.latex support.function, meta.end-document.latex variable.parameter, meta.begin-document.latex support.function, meta.begin-document.latex variable.parameter
+ settings
+
+ background
+ #CDCDCD
+ foreground
+ #000000
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ meta.brace.erb.return-value
+ scope
+ meta.brace.erb.return-value
+ settings
+
+ background
+ #45815D33
+ foreground
+ #596B61
+
+
+
+ name
+ source.ruby.rails.embedded.return-value.one-line
+ scope
+ source.ruby.rails.embedded.return-value.one-line
+ settings
+
+ background
+ #66666633
+
+
+
+ name
+ meta.brace.erb
+ scope
+ punctuation.section.embedded -(source string source punctuation.section.embedded), meta.brace.erb.html
+ settings
+
+ background
+ #00FFF81A
+ foreground
+ #56A5A4
+
+
+
+ name
+ source.ruby.rails.embedded.one-line
+ scope
+ source.ruby.rails.embedded.one-line
+ settings
+
+ background
+ #00FFF81A
+
+
+
+ name
+ String Embedded Source
+ scope
+ source string source punctuation.section.embedded
+ settings
+
+ foreground
+ #555F69
+
+
+
+ name
+ ◊ Source
+ scope
+ source
+ settings
+
+ background
+ #000000
+ fontStyle
+
+
+
+
+ name
+ ◊ meta.brace.erb
+ scope
+ meta.brace.erb
+ settings
+
+ background
+ #000000
+
+
+
+ name
+ ◊ Source String Source
+ scope
+ source string source
+ settings
+
+ background
+ #33333380
+ foreground
+ #FFFFFF
+
+
+
+ name
+ ◊ Source String Interpolated Source
+ scope
+ source string.interpolated source
+ settings
+
+ background
+ #00000099
+ foreground
+ #999999
+
+
+
+ name
+ ◊ Source Embeded Source
+ scope
+ source.java.embedded
+ settings
+
+ background
+ #3333331A
+
+
+
+ name
+ ◊ Text
+ scope
+ text -text.xml.strict
+ settings
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ ◊ Text Source
+ scope
+ text source, meta.scope.django.template
+ settings
+
+ background
+ #000000
+ foreground
+ #CCCCCC
+
+
+
+ name
+ ◊ Text Source Text String
+ settings
+
+
+
+ name
+ ◊ Text String Source
+ scope
+ text string source
+ settings
+
+ foreground
+ #999999
+
+
+
+ name
+ ◊ Text Source String Source
+ settings
+
+
+
+ name
+ ◊ Text String Source String Source
+ scope
+ text string source string source
+ settings
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ Syntax
+ scope
+ meta.syntax
+ settings
+
+ foreground
+ #333333
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #A7595A
+ fontStyle
+ bold
+ foreground
+ #211211
+
+
+
+ name
+ Comment
+ scope
+ 0comment
+ settings
+
+ background
+ #0000FF1A
+ fontStyle
+ italic
+ foreground
+ #8F8FC3
+
+
+
+ name
+ Comment Punctuation
+ scope
+ comment punctuation
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0000FF1A
+
+
+
+ name
+ comment
+ scope
+ comment
+ settings
+
+ foreground
+ #333333
+
+
+
+ name
+ Comment Punctuation
+ scope
+ comment punctuation
+ settings
+
+ background
+ #8080800D
+ fontStyle
+ bold italic
+ foreground
+ #262626
+
+
+
+ name
+ ✘ HTML Comment
+ scope
+ text comment.block -source
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ D Diff Add
+ scope
+ markup.inserted
+ settings
+
+ background
+ #15281F
+ foreground
+ #81BB9E
+
+
+
+ name
+ D Diff Delete
+ scope
+ markup.deleted
+ settings
+
+ background
+ #400021
+ foreground
+ #BC839F
+
+
+
+ name
+ D Diff Changed
+ scope
+ markup.changed
+ settings
+
+ background
+ #533F2C
+ foreground
+ #C3C38F
+
+
+
+ name
+ text.subversion-commit meta.scope.changed-files
+ scope
+ text.subversion-commit meta.scope.changed-files, text.subversion-commit meta.scope.changed-files.svn meta.diff.separator
+ settings
+
+ background
+ #000000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ text.subversion-commit
+ scope
+ text.subversion-commit
+ settings
+
+ background
+ #FFFFFF
+ foreground
+ #000000
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ meta.delimiter
+ scope
+ punctuation.terminator, meta.delimiter, punctuation.separator.method
+ settings
+
+ background
+ #FFFFFF03
+ fontStyle
+ bold
+ foreground
+ #FFFFFF
+
+
+
+ name
+ meta.delimiter.statement.js
+ scope
+ punctuation.terminator.statement, meta.delimiter.statement.js
+ settings
+
+ background
+ #000000BF
+
+
+
+ name
+ meta.delimiter.object.js
+ scope
+ meta.delimiter.object.js
+ settings
+
+ background
+ #00000040
+
+
+
+ name
+ Bold String Quotes
+ scope
+ string.quoted.single.brace, string.quoted.double.brace
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #533F2C
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ meta.headers.blog
+ scope
+ text.blog -(text.blog text)
+ settings
+
+ background
+ #FFFFFF
+
+
+
+ name
+ meta.headers.blog
+ scope
+ meta.headers.blog
+ settings
+
+ background
+ #FFFFFF
+ foreground
+ #666666
+
+
+
+ name
+ meta.headers.blog keyword.other.blog
+ scope
+ meta.headers.blog keyword.other.blog
+ settings
+
+ background
+ #00FFF81A
+ fontStyle
+
+ foreground
+ #192B2A
+
+
+
+ name
+ meta.headers.blog string.unquoted.blog
+ scope
+ meta.headers.blog string.unquoted.blog
+ settings
+
+ background
+ #FFFF551A
+ foreground
+ #533F2C
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ name
+ meta.brace.pipe
+ scope
+ meta.brace.pipe
+ settings
+
+ background
+ #33333333
+ fontStyle
+
+ foreground
+ #4C4C4C
+
+
+
+ name
+ Misc Punctuation
+ scope
+ meta.brace.erb, source.ruby.embedded.source.brace, punctuation.section.dictionary, punctuation.terminator.dictionary, punctuation.separator.object
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #4C4C4C
+
+
+
+ name
+ Curly Punctuation
+ scope
+ meta.group.braces.curly punctuation.section.scope, meta.brace.curly
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Object Punctuation
+ scope
+ punctuation.separator.objects, meta.group.braces.curly meta.delimiter.object.comma, punctuation.separator.key-value -meta.tag
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #345743
+
+
+
+ name
+ Array Punctuation
+ scope
+ meta.group.braces.square punctuation.section.scope, meta.group.braces.square meta.delimiter.object.comma, meta.brace.square, punctuation.separator.array, punctuation.section.array
+ settings
+
+ background
+ #803D001A
+ fontStyle
+ bold
+ foreground
+ #695F55
+
+
+
+ name
+ meta.brace.curly meta.group
+ scope
+ meta.brace.curly meta.group
+ settings
+
+ background
+ #00000080
+ fontStyle
+
+ foreground
+ #CDCDCD
+
+
+
+ name
+ Function Punctuation
+ scope
+ meta.group.braces.round punctuation.section.scope, meta.group.braces.round meta.delimiter.object.comma, meta.brace.round
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #532D40
+
+
+
+ name
+ meta.brace.curly.function
+ scope
+ punctuation.section.function, meta.brace.curly.function, meta.function-call punctuation.section.scope.ruby
+ settings
+
+ background
+ #3C008033
+ fontStyle
+
+ foreground
+ #ABACD2
+
+
+
+ name
+ º meta.source.embedded
+ scope
+ meta.source.embedded, entity.other.django.tagbraces
+ settings
+
+ background
+ #00000080
+ foreground
+ #666666
+
+
+
+ name
+ º meta.group.braces.round JS
+ scope
+ source.js meta.group.braces.round, meta.scope.heredoc
+ settings
+
+
+
+ name
+ º meta.group.braces 1
+ scope
+ meta.odd-tab.group1, meta.group.braces, meta.block.slate, text.xml.strict meta.tag, meta.tell-block meta.tell-block
+ settings
+
+ background
+ #0A0A0A
+
+
+
+ name
+ º meta.group.braces 2
+ scope
+ meta.even-tab.group2, meta.group.braces meta.group.braces, meta.block.slate meta.block.slate, text.xml.strict meta.tag meta.tag, meta.group.braces meta.group.braces, meta.tell-block meta.tell-block
+ settings
+
+ background
+ #0E0E0E
+
+
+
+ name
+ º meta.group.braces 3
+ scope
+ meta.odd-tab.group3, meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces, meta.tell-block meta.tell-block meta.tell-block
+ settings
+
+ background
+ #111111
+
+
+
+ name
+ º meta.group.braces 4
+ scope
+ meta.even-tab.group4, meta.group.braces meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces meta.group.braces, meta.tell-block meta.tell-block meta.tell-block meta.tell-block
+ settings
+
+ background
+ #151515
+
+
+
+ name
+ º meta.group.braces 5
+ scope
+ meta.odd-tab.group5, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces, meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block
+ settings
+
+ background
+ #191919
+
+
+
+ name
+ º meta.group.braces 6
+ scope
+ meta.even-tab.group6, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces, meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block
+ settings
+
+ background
+ #1C1C1C
+
+
+
+ name
+ º meta.group.braces 7
+ scope
+ meta.odd-tab.group7, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces, meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block
+ settings
+
+ background
+ #1F1F1F
+
+
+
+ name
+ º meta.group.braces 8
+ scope
+ meta.even-tab.group8, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces, meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block
+ settings
+
+ background
+ #212121
+
+
+
+ name
+ º meta.group.braces 9
+ scope
+ meta.odd-tab.group11, meta.odd-tab.group10, meta.odd-tab.group9, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces , meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate meta.block.slate , text.xml.strict meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag meta.tag, meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces meta.group.braces, meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block meta.tell-block
+ settings
+
+ background
+ #242424
+
+
+
+ name
+ º meta.block.slate
+ scope
+ meta.block.slate
+ settings
+
+ foreground
+ #666666
+
+
+
+ name
+ º meta.block.content.slate
+ scope
+ meta.block.content.slate
+ settings
+
+ foreground
+ #CDCDCD
+
+
+
+ name
+ —————————————————
+ settings
+
+
+
+ uuid
+ 4535004C-927A-401A-A6D5-1C9AC89E24C6
+
+
diff --git a/app/rcc/edbee/themes/Cobalt.tmTheme b/app/rcc/edbee/themes/Cobalt.tmTheme
new file mode 100644
index 00000000..97903587
--- /dev/null
+++ b/app/rcc/edbee/themes/Cobalt.tmTheme
@@ -0,0 +1,559 @@
+
+
+
+
+ comment
+ Created by Jacob Rus. Based on ‘Slate’ by Wilson Miner
+ author
+ Jacob Rus
+ name
+ Cobalt
+ settings
+
+
+ settings
+
+ background
+ #002240
+ caret
+ #FFFFFF
+ foreground
+ #FFFFFF
+ invisibles
+ #FFFFFF26
+ lineHighlight
+ #00000059
+ selection
+ #B36539BF
+
+
+
+ name
+ Punctuation
+ scope
+ punctuation - (punctuation.definition.string || punctuation.definition.comment)
+ settings
+
+ fontStyle
+
+ foreground
+ #E1EFFF
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ fontStyle
+
+ foreground
+ #FF628C
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ fontStyle
+
+ foreground
+ #FFDD00
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #FF9D00
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #FFEE80
+
+
+
+ name
+ String
+ scope
+ string -string.unquoted.old-plist -string.unquoted.heredoc, string.unquoted.heredoc string
+ settings
+
+ fontStyle
+
+ foreground
+ #3AD900
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #0088FF
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+
+ foreground
+ #80FFBB
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+
+ foreground
+ #CCCCCC
+
+
+
+ name
+ Lang Variable
+ scope
+ variable.language
+ settings
+
+ fontStyle
+
+ foreground
+ #FF80E1
+
+
+
+ name
+ Function Call
+ scope
+ meta.function-call
+ settings
+
+ foreground
+ #FFEE80
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #800F00
+ foreground
+ #F8F8F8
+
+
+
+ name
+ Embedded Source
+ scope
+ text source, string.unquoted.heredoc, source source
+ settings
+
+ background
+ #223545
+ fontStyle
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Entity inherited-class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #80FCFF
+
+
+
+ name
+ String embedded-source
+ scope
+ string.quoted source
+ settings
+
+ fontStyle
+
+ foreground
+ #9EFF80
+
+
+
+ name
+ String constant
+ scope
+ string constant
+ settings
+
+ foreground
+ #80FF82
+
+
+
+ name
+ String.regexp
+ scope
+ string.regexp
+ settings
+
+ foreground
+ #80FFC2
+
+
+
+ name
+ String variable
+ scope
+ string variable
+ settings
+
+ foreground
+ #EDEF7D
+
+
+
+ name
+ Support.function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #FFB054
+
+
+
+ name
+ Support.constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+
+ foreground
+ #EB939A
+
+
+
+ name
+ Exception
+ scope
+ support.type.exception
+ settings
+
+ foreground
+ #FF1E00
+
+
+
+ name
+ C/C++ Preprocessor Line
+ scope
+ meta.preprocessor.c
+ settings
+
+ foreground
+ #8996A8
+
+
+
+ name
+ C/C++ Preprocessor Directive
+ scope
+ meta.preprocessor.c keyword
+ settings
+
+ foreground
+ #AFC4DB
+
+
+
+ name
+ Doctype/XML Processing
+ scope
+ meta.sgml.html meta.doctype, meta.sgml.html meta.doctype entity, meta.sgml.html meta.doctype string, meta.xml-processing, meta.xml-processing entity, meta.xml-processing string
+ settings
+
+ foreground
+ #73817D
+
+
+
+ name
+ Meta.tag.A
+ scope
+ meta.tag, meta.tag entity
+ settings
+
+ foreground
+ #9EFFFF
+
+
+
+ name
+ css tag-name
+ scope
+ meta.selector.css entity.name.tag
+ settings
+
+ foreground
+ #9EFFFF
+
+
+
+ name
+ css#id
+ scope
+ meta.selector.css entity.other.attribute-name.id
+ settings
+
+ foreground
+ #FFB454
+
+
+
+ name
+ css.class
+ scope
+ meta.selector.css entity.other.attribute-name.class
+ settings
+
+ foreground
+ #5FE461
+
+
+
+ name
+ css property-name:
+ scope
+ support.type.property-name.css
+ settings
+
+ foreground
+ #9DF39F
+
+
+
+ name
+ css property-value;
+ scope
+ meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css
+ settings
+
+ foreground
+ #F6F080
+
+
+
+ name
+ css @at-rule
+ scope
+ meta.preprocessor.at-rule keyword.control.at-rule
+ settings
+
+ foreground
+ #F6AA11
+
+
+
+ name
+ css additional-constants
+ scope
+ meta.property-value support.constant.named-color.css, meta.property-value constant
+ settings
+
+ foreground
+ #EDF080
+
+
+
+ name
+ css constructor.argument
+ scope
+ meta.constructor.argument.css
+ settings
+
+ foreground
+ #EB939A
+
+
+
+ name
+ diff.header
+ scope
+ meta.diff, meta.diff.header
+ settings
+
+ background
+ #000E1A
+ fontStyle
+
+ foreground
+ #F8F8F8
+
+
+
+ name
+ diff.deleted
+ scope
+ markup.deleted
+ settings
+
+ background
+ #4C0900
+ foreground
+ #F8F8F8
+
+
+
+ name
+ diff.changed
+ scope
+ markup.changed
+ settings
+
+ background
+ #806F00
+ foreground
+ #F8F8F8
+
+
+
+ name
+ diff.inserted
+ scope
+ markup.inserted
+ settings
+
+ background
+ #154F00
+ foreground
+ #F8F8F8
+
+
+
+ name
+ Raw Markup
+ scope
+ markup.raw
+ settings
+
+ background
+ #8FDDF630
+
+
+
+ name
+ Block Quote
+ scope
+ markup.quote
+ settings
+
+ background
+ #004480
+
+
+
+ name
+ List
+ scope
+ markup.list
+ settings
+
+ background
+ #130D26
+
+
+
+ name
+ Bold Markup
+ scope
+ markup.bold
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #C1AFFF
+
+
+
+ name
+ Italic Markup
+ scope
+ markup.italic
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #B8FFD9
+
+
+
+ name
+ Heading Markup
+ scope
+ markup.heading
+ settings
+
+ background
+ #001221
+ fontStyle
+ bold
+ foreground
+ #C8E4FD
+
+
+
+ uuid
+ 06CD1FB2-A00A-4F8C-97B2-60E131980454
+
+
diff --git a/app/rcc/edbee/themes/Dawn.tmTheme b/app/rcc/edbee/themes/Dawn.tmTheme
new file mode 100644
index 00000000..a09a3bf2
--- /dev/null
+++ b/app/rcc/edbee/themes/Dawn.tmTheme
@@ -0,0 +1,441 @@
+
+
+
+
+ author
+ David Powers
+ comment
+ Dawn
+ name
+ Dawn
+ settings
+
+
+ settings
+
+ background
+ #F9F9F9
+ caret
+ #000000
+ foreground
+ #080808
+ invisibles
+ #4B4B7E80
+ lineHighlight
+ #2463B41F
+ selection
+ #275FFF4D
+ shadow
+ #808080
+ shadowWidth
+ 6
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #5A525F
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #811F24
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ fontStyle
+
+ foreground
+ #BF4F24
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #794938
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #A71D5D
+
+
+
+ name
+ String
+ scope
+ string | punctuation.definition.string
+ settings
+
+ fontStyle
+
+ foreground
+ #0B6125
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+
+ foreground
+ #691C97
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+
+ foreground
+ #234A97
+
+
+
+ name
+ Punctuation.separator
+ scope
+ punctuation.separator
+ settings
+
+ foreground
+ #794938
+
+
+
+ name
+ Invalid – Deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ fontStyle
+ bold italic underline
+ foreground
+ #B52A1D
+
+
+
+ name
+ Invalid – Illegal
+ scope
+ invalid.illegal
+ settings
+
+ background
+ #B52A1D
+ fontStyle
+ italic underline
+ foreground
+ #F8F8F8
+
+
+
+ name
+ String embedded-source
+ scope
+ string source
+ settings
+
+ background
+ #6F8BBA26
+ fontStyle
+
+ foreground
+ #080808
+
+
+
+ name
+ String constant
+ scope
+ string constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #696969
+
+
+
+ name
+ String variable
+ scope
+ string variable
+ settings
+
+ fontStyle
+
+ foreground
+ #234A97
+
+
+
+ name
+ String.regexp
+ scope
+ string.regexp
+ settings
+
+ fontStyle
+
+ foreground
+ #CF5628
+
+
+
+ name
+ String.regexp.«special»
+ scope
+ string.regexp.character-class, string.regexp constant.character.escaped, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition
+ settings
+
+ fontStyle
+ bold italic
+ foreground
+ #CF5628
+
+
+
+ name
+ String.regexp constant.character.escape
+ scope
+ string.regexp constant.character.escape
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #811F24
+
+
+
+ name
+ Embedded Source
+ scope
+ text source
+ settings
+
+ background
+ #6F8BBA26
+
+
+
+ name
+ Support.function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #693A17
+
+
+
+ name
+ Support.constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+
+ foreground
+ #B4371F
+
+
+
+ name
+ Support.variable
+ scope
+ support.variable
+ settings
+
+ foreground
+ #234A97
+
+
+
+ name
+ Markup.list
+ scope
+ markup.list
+ settings
+
+ foreground
+ #693A17
+
+
+
+ name
+ Markup.heading
+ scope
+ markup.heading | markup.heading entity.name
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #19356D
+
+
+
+ name
+ Markup.quote
+ scope
+ markup.quote
+ settings
+
+ background
+ #BBBBBB30
+ fontStyle
+ italic
+ foreground
+ #0B6125
+
+
+
+ name
+ Markup.italic
+ scope
+ markup.italic
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #080808
+
+
+
+ name
+ Markup.bold
+ scope
+ markup.bold
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #080808
+
+
+
+ name
+ Markup.underline
+ scope
+ markup.underline
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #080808
+
+
+
+ name
+ Markup.link
+ scope
+ markup.link
+ settings
+
+ fontStyle
+ italic underline
+ foreground
+ #234A97
+
+
+
+ name
+ Markup.raw
+ scope
+ markup.raw
+ settings
+
+ background
+ #BBBBBB30
+ fontStyle
+
+ foreground
+ #234A97
+
+
+
+ name
+ Markup.deleted
+ scope
+ markup.deleted
+ settings
+
+ foreground
+ #B52A1D
+
+
+
+ name
+ Meta.separator
+ scope
+ meta.separator
+ settings
+
+ background
+ #DCDCDC
+ fontStyle
+ bold
+ foreground
+ #19356D
+
+
+
+ uuid
+ E7E82498-F9EA-49A6-A0D8-12327EA46B01
+
+
diff --git a/app/rcc/edbee/themes/Eiffel.tmTheme b/app/rcc/edbee/themes/Eiffel.tmTheme
new file mode 100644
index 00000000..1e8160c6
--- /dev/null
+++ b/app/rcc/edbee/themes/Eiffel.tmTheme
@@ -0,0 +1,439 @@
+
+
+
+
+ name
+ Eiffel
+ author
+ Ian Joyner
+ settings
+
+
+ settings
+
+ background
+ #FFFFFF
+ caret
+ #000000
+ foreground
+ #000000
+ invisibles
+ #BFBFBF
+ lineHighlight
+ #00000012
+ selection
+ #C3DCFF
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+
+ foreground
+ #00B418
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #0206FF
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0100B6
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #CD0000
+
+
+
+ name
+ User-defined constant
+ scope
+ constant
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #C5060B
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #585CF6
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ fontStyle
+
+ foreground
+ #D80800
+
+
+
+ name
+ String interpolation
+ scope
+ constant.character.escape, string source
+ settings
+
+ fontStyle
+
+ foreground
+ #26B31A
+
+
+
+ name
+ Preprocessor line
+ scope
+ meta.preprocessor
+ settings
+
+ fontStyle
+
+ foreground
+ #1A921C
+
+
+
+ name
+ Preprocessor directive
+ scope
+ keyword.control.import
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0C450D
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function, keyword.other.name-of-parameter.objc
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0000A2
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Inherited class name
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function parameter
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function argument and result types
+ scope
+ storage.type.method
+ settings
+
+ fontStyle
+
+ foreground
+ #70727E
+
+
+
+ name
+ Section
+ scope
+ meta.section entity.name.section, declaration.section entity.name.section
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #3C4C72
+
+
+
+ name
+ Library object
+ scope
+ support.class, support.type
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #6D79DE
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #06960E
+
+
+
+ name
+ Library variable
+ scope
+ support.variable
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #21439C
+
+
+
+ name
+ JS: Operator
+ scope
+ keyword.operator.js
+ settings
+
+ foreground
+ #687687
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #990000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Invalid trailing whitespace
+ scope
+ invalid.deprecated.trailing-whitespace
+ settings
+
+ background
+ #FFD0D0
+
+
+
+ name
+ Embedded source
+ scope
+ text source, string.unquoted
+ settings
+
+ background
+ #427FF530
+
+
+
+ name
+ Markup XML declaration
+ scope
+ meta.xml-processing, declaration.xml-processing
+ settings
+
+ fontStyle
+
+ foreground
+ #68685B
+
+
+
+ name
+ Markup DOCTYPE
+ scope
+ meta.doctype, declaration.doctype
+ settings
+
+ fontStyle
+
+ foreground
+ #888888
+
+
+
+ name
+ Markup DTD
+ scope
+ meta.doctype.DTD, declaration.doctype.DTD
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Markup tag
+ scope
+ meta.tag, declaration.tag
+ settings
+
+ fontStyle
+
+ foreground
+ #1C02FF
+
+
+
+ name
+ Markup name of tag
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Markup tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Markup: Heading
+ scope
+ markup.heading
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0C07FF
+
+
+
+ name
+ Markup: Quote
+ scope
+ markup.quote
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #000000
+
+
+
+ name
+ Markup: List
+ scope
+ markup.list
+ settings
+
+ foreground
+ #B90690
+
+
+
+ uuid
+ ADD7FDE7-C6BE-454B-A71A-7951ED54FB04
+
+
diff --git a/app/rcc/edbee/themes/Espresso Libre.tmTheme b/app/rcc/edbee/themes/Espresso Libre.tmTheme
new file mode 100644
index 00000000..2ccae644
--- /dev/null
+++ b/app/rcc/edbee/themes/Espresso Libre.tmTheme
@@ -0,0 +1,402 @@
+
+
+
+
+ author
+ Chris Thomas
+ name
+ Espresso Libre
+ settings
+
+
+ settings
+
+ background
+ #2A211C
+ caret
+ #889AFF
+ foreground
+ #BDAE9D
+ invisibles
+ #BFBFBF
+ lineHighlight
+ #3A312C
+ selection
+ #C3DCFF
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #0066FF
+
+
+
+ name
+ Keyword
+ scope
+ keyword, storage
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #43A8ED
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ fontStyle
+
+ foreground
+ #44AA43
+
+
+
+ name
+ User-defined constant
+ scope
+ constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #C5656B
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #585CF6
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+ fontStyle
+
+ foreground
+ #318495
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ fontStyle
+
+ foreground
+ #049B0A
+
+
+
+ name
+ String interpolation
+ scope
+ constant.character.escape, string source
+ settings
+
+ fontStyle
+
+ foreground
+ #2FE420
+
+
+
+ name
+ Preprocessor line
+ scope
+ meta.preprocessor
+ settings
+
+ fontStyle
+
+ foreground
+ #1A921C
+
+
+
+ name
+ Preprocessor directive
+ scope
+ keyword.control.import
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #9AFF87
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function, keyword.other.name-of-parameter.objc
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #FF9358
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Inherited class name
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function parameter
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function argument and result types
+ scope
+ storage.type.method
+ settings
+
+ fontStyle
+
+ foreground
+ #8B8E9C
+
+
+
+ name
+ Section
+ scope
+ meta.section entity.name.section, declaration.section entity.name.section
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #7290D9
+
+
+
+ name
+ Library object
+ scope
+ support.class, support.type
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #6D79DE
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #00AF0E
+
+
+
+ name
+ Library variable
+ scope
+ support.variable
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #2F5FE0
+
+
+
+ name
+ JS: Operator
+ scope
+ keyword.operator.js
+ settings
+
+ foreground
+ #687687
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #990000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Invalid trailing whitespace
+ scope
+ invalid.deprecated.trailing-whitespace
+ settings
+
+ background
+ #FFD0D0
+
+
+
+ name
+ Embedded source
+ scope
+ text source, string.unquoted
+ settings
+
+ background
+ #F5AA7730
+
+
+
+ name
+ Markup XML declaration
+ scope
+ meta.tag.preprocessor.xml
+ settings
+
+ fontStyle
+
+ foreground
+ #8F7E65
+
+
+
+ name
+ Markup DOCTYPE
+ scope
+ meta.tag.sgml.doctype
+ settings
+
+ fontStyle
+
+ foreground
+ #888888
+
+
+
+ name
+ Markup DTD
+ scope
+ string.quoted.docinfo.doctype.DTD
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Markup tag
+ scope
+ meta.tag, declaration.tag
+ settings
+
+ fontStyle
+
+ foreground
+ #43A8ED
+
+
+
+ name
+ Markup name of tag
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Markup tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+ italic
+
+
+
+ uuid
+ 6B90703E-4E4B-43C8-9D32-921BEDF6D725
+
+
diff --git a/app/rcc/edbee/themes/IDLE.tmTheme b/app/rcc/edbee/themes/IDLE.tmTheme
new file mode 100644
index 00000000..704296f5
--- /dev/null
+++ b/app/rcc/edbee/themes/IDLE.tmTheme
@@ -0,0 +1,235 @@
+
+
+
+
+ author
+ Domenico Carbotta
+ name
+ IDLE
+ settings
+
+
+ settings
+
+ background
+ #FFFFFF
+ caret
+ #000000
+ foreground
+ #000000
+ invisibles
+ #BFBFBF
+ lineHighlight
+ #00000012
+ selection
+ #BAD6FD
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ foreground
+ #919191
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #00A33F
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ foreground
+ #A535AE
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #FF5600
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ foreground
+ #FF5600
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ foreground
+ #21439C
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ foreground
+ #21439C
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ foreground
+ #A535AE
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ foreground
+ #A535AE
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ foreground
+ #A535AE
+
+
+
+ name
+ Library variable
+ scope
+ support.variable
+ settings
+
+ foreground
+ #A535AE
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #990000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ String interpolation
+ scope
+ constant.other.placeholder.py
+ settings
+
+ fontStyle
+
+ foreground
+ #990000
+
+
+
+ uuid
+ DDC0CBE1-442B-4CB5-80E4-26E4CFB3A277
+
+
diff --git a/app/rcc/edbee/themes/LAZY.tmTheme b/app/rcc/edbee/themes/LAZY.tmTheme
new file mode 100644
index 00000000..09ff5111
--- /dev/null
+++ b/app/rcc/edbee/themes/LAZY.tmTheme
@@ -0,0 +1,291 @@
+
+
+
+
+ author
+ Domenico Carbotta
+ name
+ LAZY
+ settings
+
+
+ settings
+
+ background
+ #FFFFFF
+ caret
+ #7C7C7C
+ foreground
+ #000000
+ invisibles
+ #B6B6B6
+ lineHighlight
+ #EFFCA68F
+ selection
+ #E3FC8D
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+
+ foreground
+ #8C868F
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ fontStyle
+
+ foreground
+ #3B5BB5
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ fontStyle
+
+ foreground
+ #3B5BB5
+
+
+
+ name
+ Latex Entity
+ scope
+ text.tex.latex entity
+ settings
+
+ fontStyle
+
+ foreground
+ #D62A28
+
+
+
+ name
+ Keyword
+ scope
+ keyword, storage
+ settings
+
+ fontStyle
+
+ foreground
+ #FF7800
+
+
+
+ name
+ String
+ scope
+ string, meta.verbatim
+ settings
+
+ fontStyle
+
+ foreground
+ #409B1C
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+
+ foreground
+ #3B5BB5
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Invalid – Deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #990000
+
+
+
+ name
+ Invalid – Illegal
+ scope
+ invalid.illegal
+ settings
+
+ background
+ #9D1E15
+ foreground
+ #F8F8F8
+
+
+
+ name
+ Superclass
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #3B5BB5
+
+
+
+ name
+ String interpolation
+ scope
+ string constant.other.placeholder
+ settings
+
+ fontStyle
+
+ foreground
+ #671EBB
+
+
+
+ name
+ meta.function-call.py
+ scope
+ meta.function-call.py
+ settings
+
+ fontStyle
+
+ foreground
+ #3E4558
+
+
+
+ name
+ meta.tag
+ scope
+ meta.tag, meta.tag entity
+ settings
+
+ foreground
+ #3A4A64
+
+
+
+ name
+ OCaml variant
+ scope
+ keyword.type.variant
+ settings
+
+ fontStyle
+
+ foreground
+ #7F90AA
+
+
+
+ name
+ OCaml operator
+ scope
+ source.ocaml keyword.operator
+ settings
+
+ foreground
+ #000000
+
+
+
+ name
+ OCaml infix operator
+ scope
+ source.ocaml keyword.operator.symbol.infix
+ settings
+
+ fontStyle
+
+ foreground
+ #3B5BB5
+
+
+
+ name
+ OCaml prefix operator
+ scope
+ source.ocaml keyword.operator.symbol.prefix
+ settings
+
+ foreground
+ #3B5BB5
+
+
+
+ name
+ OCaml infix f-p operator
+ scope
+ source.ocaml keyword.operator.symbol.infix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ OCaml prefix f-p operator
+ scope
+ source.ocaml keyword.operator.symbol.prefix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ OCaml f-p constant
+ scope
+ source.ocaml constant.numeric.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ uuid
+ A1E55FCB-3CD2-4811-9E73-D9B87419443A
+
+
diff --git a/app/rcc/edbee/themes/Mac Classic.tmTheme b/app/rcc/edbee/themes/Mac Classic.tmTheme
new file mode 100644
index 00000000..4b789dfe
--- /dev/null
+++ b/app/rcc/edbee/themes/Mac Classic.tmTheme
@@ -0,0 +1,450 @@
+
+
+
+
+ author
+ Chris Thomas
+ name
+ Mac Classic
+ settings
+
+
+ settings
+
+ background
+ #FFFFFF
+ caret
+ #000000
+ foreground
+ #000000
+ invisibles
+ #BFBFBF
+ lineHighlight
+ #00000012
+ selection
+ #4D97FF54
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #0066FF
+
+
+
+ name
+ Keyword
+ scope
+ keyword, storage
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0000FF
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ fontStyle
+
+ foreground
+ #0000CD
+
+
+
+ name
+ User-defined constant
+ scope
+ constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #C5060B
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #585CF6
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+ fontStyle
+
+ foreground
+ #318495
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ fontStyle
+
+ foreground
+ #036A07
+
+
+
+ name
+ String interpolation
+ scope
+ constant.character.escape, string source
+ settings
+
+ fontStyle
+
+ foreground
+ #26B31A
+
+
+
+ name
+ Preprocessor line
+ scope
+ meta.preprocessor
+ settings
+
+ fontStyle
+
+ foreground
+ #1A921C
+
+
+
+ name
+ Preprocessor directive
+ scope
+ keyword.control.import
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0C450D
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function, support.function.any-method
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0000A2
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Inherited class name
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function parameter
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function argument and result types
+ scope
+ storage.type.method
+ settings
+
+ fontStyle
+
+ foreground
+ #70727E
+
+
+
+ name
+ Section
+ scope
+ meta.section entity.name.section, declaration.section entity.name.section
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #3C4C72
+
+
+
+ name
+ Library object
+ scope
+ support.class, support.type
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #6D79DE
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #06960E
+
+
+
+ name
+ Library variable
+ scope
+ support.variable
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #21439C
+
+
+
+ name
+ JS: Operator
+ scope
+ keyword.operator.js
+ settings
+
+ foreground
+ #687687
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #990000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Invalid trailing whitespace
+ scope
+ invalid.deprecated.trailing-whitespace
+ settings
+
+ background
+ #FFD0D0
+
+
+
+ name
+ Embedded source
+ scope
+ text source, string.unquoted
+ settings
+
+ background
+ #0000000D
+
+
+
+ name
+ Embedded embedded source
+ scope
+ text source string.unquoted, text source text source
+ settings
+
+ background
+ #0000000F
+
+
+
+ name
+ Markup XML declaration
+ scope
+ meta.tag.preprocessor.xml
+ settings
+
+ fontStyle
+
+ foreground
+ #68685B
+
+
+
+ name
+ Markup DOCTYPE
+ scope
+ meta.tag.sgml.doctype, meta.tag.sgml.doctype entity, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string
+ settings
+
+ fontStyle
+
+ foreground
+ #888888
+
+
+
+ name
+ Markup DTD
+ scope
+ string.quoted.docinfo.doctype.DTD
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Markup tag
+ scope
+ meta.tag, declaration.tag
+ settings
+
+ fontStyle
+
+ foreground
+ #1C02FF
+
+
+
+ name
+ Markup name of tag
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Markup tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Markup: Heading
+ scope
+ markup.heading
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0C07FF
+
+
+
+ name
+ Markup: Quote
+ scope
+ markup.quote
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #000000
+
+
+
+ name
+ Markup: List
+ scope
+ markup.list
+ settings
+
+ foreground
+ #B90690
+
+
+
+ uuid
+ 71D40D9D-AE48-11D9-920A-000D93589AF6
+
+
diff --git a/app/rcc/edbee/themes/MagicWB (Amiga).tmTheme b/app/rcc/edbee/themes/MagicWB (Amiga).tmTheme
new file mode 100644
index 00000000..7897886b
--- /dev/null
+++ b/app/rcc/edbee/themes/MagicWB (Amiga).tmTheme
@@ -0,0 +1,376 @@
+
+
+
+
+ author
+ Allan Odgaard
+ comment
+ Inspired by the original 8 MagicWB colors from Martin Huttenloher
+ name
+ MagicWB (Amiga)
+ settings
+
+
+ settings
+
+ background
+ #969696
+ caret
+ #FFFFFF
+ foreground
+ #000000
+ invisibles
+ #FF38FF
+ lineHighlight
+ #00000012
+ selection
+ #B1B1B1
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #8D2E75
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ background
+ #FF000033
+ fontStyle
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Constant: Built-in
+ scope
+ constant.language
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #FFA995
+
+
+
+ name
+ Constant: User-defined
+ scope
+ constant.character, constant.other
+ settings
+
+ background
+ #0000FF33
+ fontStyle
+
+ foreground
+ #FFA995
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+ foreground
+ #FFA995
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #3A68A3
+
+
+
+ name
+ Type Name
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Inherited Class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function Name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+
+ foreground
+ #FFA995
+
+
+
+ name
+ Function Argument
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Entity Name
+ scope
+ entity.name
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0000FF
+
+
+
+ name
+ Tag Attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #3A68A3
+
+
+
+ name
+ Library Function
+ scope
+ support.function
+ settings
+
+ foreground
+ #E5B3FF
+
+
+
+ name
+ Objective-C Method Call
+ scope
+ support.function.any-method
+ settings
+
+ fontStyle
+
+ foreground
+ #000000
+
+
+
+ name
+ Objective-C Method Call - :
+ scope
+ support.function.any-method - punctuation
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Library Constant
+ scope
+ support.constant
+ settings
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Library Class/Type
+ scope
+ support.type, support.class
+ settings
+
+ foreground
+ #FFA995
+
+
+
+ name
+ Library Variable
+ scope
+ support.variable
+ settings
+
+ foreground
+ #3A68A3
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #797979
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Include <system>
+ scope
+ string.quoted.other.lt-gt.include
+ settings
+
+ background
+ #969696
+ fontStyle
+ italic
+ foreground
+ #FFA995
+
+
+
+ name
+ Include "user"
+ scope
+ string.quoted.double.include
+ settings
+
+ background
+ #969696
+ foreground
+ #FFA995
+
+
+
+ name
+ Markup: List Item
+ scope
+ markup.list
+ settings
+
+ foreground
+ #4D4E60
+
+
+
+ name
+ Markup: Raw
+ scope
+ markup.raw
+ settings
+
+ background
+ #0000FF
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Markup: Quote (Email)
+ scope
+ markup.quote
+ settings
+
+ foreground
+ #00F0C9
+
+
+
+ name
+ Markup: Quote Double (Email)
+ scope
+ markup.quote markup.quote
+ settings
+
+ fontStyle
+
+ foreground
+ #4C457E
+
+
+
+ name
+ Embedded Source
+ scope
+ text.html source
+ settings
+
+ background
+ #8A9ECB
+
+
+
+ uuid
+ B0A18BAA-6220-481C-9914-F6D3E51B5410
+
+
diff --git a/app/rcc/edbee/themes/Monokai Bright.tmTheme b/app/rcc/edbee/themes/Monokai Bright.tmTheme
new file mode 100644
index 00000000..3b53e4ed
--- /dev/null
+++ b/app/rcc/edbee/themes/Monokai Bright.tmTheme
@@ -0,0 +1,390 @@
+
+
+
+
+ name
+ Monokai Bright
+ settings
+
+
+ settings
+
+ background
+ #272822
+ caret
+ #F8F8F0
+ foreground
+ #F8F8F2
+ invisibles
+ #3B3A32
+ lineHighlight
+ #3E3D32
+ selection
+ #9D550F
+ selectionForeground
+ #fffff8
+ inactiveSelection
+ #bbbbbb
+ inactiveSelectionForeground
+ #222222
+ findHighlight
+ #FFE792
+ findHighlightForeground
+ #000000
+ activeGuide
+ #9D550FB0
+
+ bracketsForeground
+ #F8F8F2A5
+ bracketsOptions
+ underline
+
+ bracketContentsForeground
+ #F8F8F2A5
+ bracketContentsOptions
+ underline
+
+ tagsOptions
+ stippled_underline
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ foreground
+ #75715E
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #E6DB74
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #AE81FF
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ foreground
+ #AE81FF
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+ foreground
+ #AE81FF
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #F92672
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #F92672
+
+
+
+ name
+ Storage type
+ scope
+ storage.type
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #66D9EF
+
+
+
+ name
+ Class name
+ scope
+ entity.name.class
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #A6E22E
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic underline
+ foreground
+ #A6E22E
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+
+ foreground
+ #A6E22E
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #FD971F
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+
+ foreground
+ #F92672
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+
+ foreground
+ #A6E22E
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #66D9EF
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+
+ foreground
+ #66D9EF
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #66D9EF
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #F92672
+ fontStyle
+
+ foreground
+ #F8F8F0
+
+
+
+ name
+ Invalid deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ background
+ #AE81FF
+ foreground
+ #F8F8F0
+
+
+
+ name
+ JSON String
+ scope
+ meta.structure.dictionary.json string.quoted.double.json
+ settings
+
+ foreground
+ #CFCFC2
+
+
+
+
+ name
+ diff.header
+ scope
+ meta.diff, meta.diff.header
+ settings
+
+ foreground
+ #75715E
+
+
+
+ name
+ diff.deleted
+ scope
+ markup.deleted
+ settings
+
+ foreground
+ #F92672
+
+
+
+ name
+ diff.inserted
+ scope
+ markup.inserted
+ settings
+
+ foreground
+ #A6E22E
+
+
+
+ name
+ diff.changed
+ scope
+ markup.changed
+ settings
+
+ foreground
+ #E6DB74
+
+
+
+
+ scope
+ constant.numeric.line-number.find-in-files - match
+ settings
+
+ foreground
+ #AE81FFA0
+
+
+
+ scope
+ entity.name.filename.find-in-files
+ settings
+
+ foreground
+ #E6DB74
+
+
+
+
+ uuid
+ D8D5E82E-3D5B-46B5-B38E-8C841C21347E
+
+
diff --git a/app/rcc/edbee/themes/Monokai.tmTheme b/app/rcc/edbee/themes/Monokai.tmTheme
new file mode 100644
index 00000000..c179cbe2
--- /dev/null
+++ b/app/rcc/edbee/themes/Monokai.tmTheme
@@ -0,0 +1,387 @@
+
+
+
+
+ name
+ Monokai
+ settings
+
+
+ settings
+
+ background
+ #272822
+ caret
+ #F8F8F0
+ foreground
+ #F8F8F2
+ invisibles
+ #3B3A32
+ lineHighlight
+ #3E3D32
+ selection
+ #49483E
+ findHighlight
+ #FFE792
+ findHighlightForeground
+ #000000
+ selectionBorder
+ #222218
+ activeGuide
+ #9D550FB0
+
+ bracketsForeground
+ #F8F8F2A5
+ bracketsOptions
+ underline
+
+ bracketContentsForeground
+ #F8F8F2A5
+ bracketContentsOptions
+ underline
+
+ tagsOptions
+ stippled_underline
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ foreground
+ #75715E
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #E6DB74
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #AE81FF
+
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ foreground
+ #AE81FF
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+ foreground
+ #AE81FF
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #F92672
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #F92672
+
+
+
+ name
+ Storage type
+ scope
+ storage.type
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #66D9EF
+
+
+
+ name
+ Class name
+ scope
+ entity.name.class
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #A6E22E
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic underline
+ foreground
+ #A6E22E
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+
+ foreground
+ #A6E22E
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #FD971F
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+
+ foreground
+ #F92672
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+
+ foreground
+ #A6E22E
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #66D9EF
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+
+ foreground
+ #66D9EF
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #66D9EF
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #F92672
+ fontStyle
+
+ foreground
+ #F8F8F0
+
+
+
+ name
+ Invalid deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ background
+ #AE81FF
+ foreground
+ #F8F8F0
+
+
+
+ name
+ JSON String
+ scope
+ meta.structure.dictionary.json string.quoted.double.json
+ settings
+
+ foreground
+ #CFCFC2
+
+
+
+
+ name
+ diff.header
+ scope
+ meta.diff, meta.diff.header
+ settings
+
+ foreground
+ #75715E
+
+
+
+ name
+ diff.deleted
+ scope
+ markup.deleted
+ settings
+
+ foreground
+ #F92672
+
+
+
+ name
+ diff.inserted
+ scope
+ markup.inserted
+ settings
+
+ foreground
+ #A6E22E
+
+
+
+ name
+ diff.changed
+ scope
+ markup.changed
+ settings
+
+ foreground
+ #E6DB74
+
+
+
+
+ scope
+ constant.numeric.line-number.find-in-files - match
+ settings
+
+ foreground
+ #AE81FFA0
+
+
+
+ scope
+ entity.name.filename.find-in-files
+ settings
+
+ foreground
+ #E6DB74
+
+
+
+
+ uuid
+ D8D5E82E-3D5B-46B5-B38E-8C841C21347D
+
+
diff --git a/app/rcc/edbee/themes/Pastels on Dark.tmTheme b/app/rcc/edbee/themes/Pastels on Dark.tmTheme
new file mode 100644
index 00000000..e3928606
--- /dev/null
+++ b/app/rcc/edbee/themes/Pastels on Dark.tmTheme
@@ -0,0 +1,701 @@
+
+
+
+
+ author
+ Mats Persson
+ name
+ Pastels on Dark
+ settings
+
+
+ settings
+
+ background
+ #211E1E
+ caret
+ #FFFFFF
+ foreground
+ #DADADA
+ invisibles
+ #4F4D4D
+ lineHighlight
+ #353030
+ selection
+ #73597E80
+
+
+
+ name
+ Comments
+ scope
+ comment
+ settings
+
+ fontStyle
+
+ foreground
+ #555555
+
+
+
+ name
+ Comments Block
+ scope
+ comment.block
+ settings
+
+ fontStyle
+
+ foreground
+ #555555
+
+
+
+ name
+ Strings
+ scope
+ string
+ settings
+
+ foreground
+ #AD9361
+
+
+
+ name
+ Numbers
+ scope
+ constant.numeric
+ settings
+
+ fontStyle
+
+ foreground
+ #CCCCCC
+
+
+
+ name
+ Keywords
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #A1A1FF
+
+
+
+ name
+ Preprocessor Line
+ scope
+ meta.preprocessor
+ settings
+
+ fontStyle
+
+ foreground
+ #2F006E
+
+
+
+ name
+ Preprocessor Directive
+ scope
+ keyword.control.import
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Functions
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #A1A1FF
+
+
+
+ name
+ Function result
+ scope
+ declaration.function function-result
+ settings
+
+ foreground
+ #0000FF
+
+
+
+ name
+ Function name
+ scope
+ declaration.function function-name
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Function argument name
+ scope
+ declaration.function argument-name
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Function argument type
+ scope
+ declaration.function function-arg-type
+ settings
+
+ foreground
+ #0000FF
+
+
+
+ name
+ Function argument variable
+ scope
+ declaration.function function-argument
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Class name
+ scope
+ declaration.class class-name
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Class inheritance
+ scope
+ declaration.class class-inheritance
+ settings
+
+ fontStyle
+ italic underline
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #FF0000
+ fontStyle
+ bold
+ foreground
+ #FFF9F9
+
+
+
+ name
+ Invalid Trailing Whitespace
+ scope
+ invalid.deprecated.trailing-whitespace
+ settings
+
+ background
+ #FFD0D0
+
+
+
+ name
+ Section
+ scope
+ declaration.section section-name
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Interpolation
+ scope
+ string.interpolation
+ settings
+
+ foreground
+ #C10006
+
+
+
+ name
+ Regular Expressions
+ scope
+ string.regexp
+ settings
+
+ fontStyle
+
+ foreground
+ #666666
+
+
+
+ name
+ Variables
+ scope
+ variable
+ settings
+
+ foreground
+ #C1C144
+
+
+
+ name
+ Constants
+ scope
+ constant
+ settings
+
+ foreground
+ #6782D3
+
+
+
+ name
+ Character Constants
+ scope
+ constant.character
+ settings
+
+ fontStyle
+
+ foreground
+ #AFA472
+
+
+
+ name
+ Language Constants
+ scope
+ constant.language
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #DE8E30
+
+
+
+ name
+ Embedded Code
+ scope
+ embedded
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Tag name
+ scope
+ keyword.markup.element-name
+ settings
+
+ fontStyle
+
+ foreground
+ #858EF4
+
+
+
+ name
+ Attribute name
+ scope
+ keyword.markup.attribute-name
+ settings
+
+ fontStyle
+
+ foreground
+ #9B456F
+
+
+
+ name
+ Attribute with Value
+ scope
+ meta.attribute-with-value
+ settings
+
+ fontStyle
+
+ foreground
+ #9B456F
+
+
+
+ name
+ Exceptions
+ scope
+ keyword.exception
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #C82255
+
+
+
+ name
+ Operators
+ scope
+ keyword.operator
+ settings
+
+ fontStyle
+
+ foreground
+ #47B8D6
+
+
+
+ name
+ Control Structures
+ scope
+ keyword.control
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #6969FA
+
+
+
+ name
+ HTML: DocInfo XML
+ scope
+ meta.tag.preprocessor.xml
+ settings
+
+ foreground
+ #68685B
+
+
+
+ name
+ HTML: DocType
+ scope
+ meta.tag.sgml.doctype
+ settings
+
+ foreground
+ #888888
+
+
+
+ name
+ HTML: DocInfo DTD
+ scope
+ string.quoted.docinfo.doctype.DTD
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ HTML: ServerSide Includes
+ scope
+ comment.other.server-side-include.xhtml, comment.other.server-side-include.html
+ settings
+
+ foreground
+ #909090
+
+
+
+ name
+ HTML: Tag
+ scope
+ text.html declaration.tag, text.html meta.tag, text.html entity.name.tag.xhtml
+ settings
+
+ foreground
+ #858EF4
+
+
+
+ name
+ HTML: attribute=""
+ scope
+ keyword.markup.attribute-name
+ settings
+
+ foreground
+ #9B456F
+
+
+
+ name
+ PHP: PHPdocs
+ scope
+ keyword.other.phpdoc.php
+ settings
+
+ foreground
+ #777777
+
+
+
+ name
+ PHP: Include() & Require()
+ scope
+ keyword.other.include.php
+ settings
+
+ foreground
+ #C82255
+
+
+
+ name
+ PHP: Constants Core Predefined
+ scope
+ support.constant.core.php
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #DE8E20
+
+
+
+ name
+ PHP: Constants Standard Predefined
+ scope
+ support.constant.std.php
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #DE8E10
+
+
+
+ name
+ PHP: Variables Globals
+ scope
+ variable.other.global.php
+ settings
+
+ foreground
+ #B72E1D
+
+
+
+ name
+ PHP: Variables Safer Globals
+ scope
+ variable.other.global.safer.php
+ settings
+
+ foreground
+ #00FF00
+
+
+
+ name
+ PHP: Strings Single-Quoted
+ scope
+ string.quoted.single.php
+ settings
+
+ foreground
+ #BFA36D
+
+
+
+ name
+ PHP: Keywords Storage
+ scope
+ keyword.storage.php
+ settings
+
+ foreground
+ #6969FA
+
+
+
+ name
+ PHP: Strings Double-Quoted
+ scope
+ string.quoted.double.php
+ settings
+
+ foreground
+ #AD9361
+
+
+
+ name
+ CSS: Selectors #ID
+ scope
+ entity.other.attribute-name.id.css
+ settings
+
+ foreground
+ #EC9E00
+
+
+
+ name
+ CSS: Selectors <Elements>
+ scope
+ entity.name.tag.css
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #B8CD06
+
+
+
+ name
+ CSS: Selectors .ClassName
+ scope
+ entity.other.attribute-name.class.css
+ settings
+
+ foreground
+ #EDCA06
+
+
+
+ name
+ CSS: Selectors :PseudoClass
+ scope
+ entity.other.attribute-name.pseudo-class.css
+ settings
+
+ foreground
+ #2E759C
+
+
+
+ name
+ CSS: Invalid Comma
+ scope
+ invalid.bad-comma.css
+ settings
+
+ background
+ #FF0000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ CSS: Property Value
+ scope
+ support.constant.property-value.css
+ settings
+
+ foreground
+ #9B2E4D
+
+
+
+ name
+ CSS: Property Keyword
+ scope
+ support.type.property-name.css
+ settings
+
+ foreground
+ #E1C96B
+
+
+
+ name
+ CSS: Property Colours
+ scope
+ constant.other.rgb-value.css
+ settings
+
+ foreground
+ #666633
+
+
+
+ name
+ CSS: Font Names
+ scope
+ support.constant.font-name.css
+ settings
+
+ foreground
+ #666633
+
+
+
+ name
+ TMLangDef: Keys
+ scope
+ support.constant.tm-language-def, support.constant.name.tm-language-def
+ settings
+
+ foreground
+ #7171F3
+
+
+
+ name
+ CSS: Units
+ scope
+ keyword.other.unit.css
+ settings
+
+ foreground
+ #6969FA
+
+
+
+ uuid
+ 343011CC-B7DF-11D9-B5C6-000D93C8BE28
+
+
diff --git a/app/rcc/edbee/themes/Solarized (Dark).tmTheme b/app/rcc/edbee/themes/Solarized (Dark).tmTheme
new file mode 100644
index 00000000..51aa4849
--- /dev/null
+++ b/app/rcc/edbee/themes/Solarized (Dark).tmTheme
@@ -0,0 +1,1897 @@
+
+
+
+
+ name
+ Solarized (dark)
+ settings
+
+
+ settings
+
+ background
+ #042029
+ caret
+ #819090
+ foreground
+ #839496
+ invisibles
+ #0A2933
+ lineHighlight
+ #0A2933
+ selection
+ #0A2933
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+
+ foreground
+ #586E75
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #2AA198
+
+
+
+ name
+ StringNumber
+ scope
+ string
+ settings
+
+ foreground
+ #586E75
+
+
+
+ name
+ Regexp
+ scope
+ string.regexp
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #D33682
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #738A05
+
+
+
+ name
+ Class name
+ scope
+ entity.name.class, entity.name.type.class
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Variable start
+ scope
+ punctuation.definition.variable
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Embedded code markers
+ scope
+ punctuation.section.embedded.begin, punctuation.section.embedded.end
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language, meta.preprocessor
+ settings
+
+ foreground
+ #B58900
+
+
+
+ name
+ Support.construct
+ scope
+ support.function.construct, keyword.other.new
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #268BD2
+
+
+
+ name
+ Tag start/end
+ scope
+ punctuation.definition.tag.html, punctuation.definition.tag.begin, punctuation.definition.tag.end
+ settings
+
+ foreground
+ #586E75
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ foreground
+ #93A1A1
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Continuation
+ scope
+ punctuation.separator.continuation
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Library Exception
+ scope
+ support.type.exception
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ Special
+ scope
+ keyword.other.special-method
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+
+
+ name
+ Quoted String
+ scope
+ string.quoted.double, string.quoted.single
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Quotes
+ scope
+ punctuation.definition.string.begin, punctuation.definition.string.end
+ settings
+
+ foreground
+ #C60000
+
+
+
+ name
+ CSS: Property
+ scope
+ entity.name.tag.css, support.type.property-name.css, meta.property-name.css
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ CSS: @font-face
+ scope
+ source.css
+ settings
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ CSS: Selector
+ scope
+ meta.selector.css
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ CSS: {}
+ scope
+ punctuation.section.property-list.css
+ settings
+
+ foreground
+ #5A74CF
+
+
+
+ name
+ CSS: Numeric Value
+ scope
+ meta.property-value.css constant.numeric.css, keyword.other.unit.css,constant.other.color.rgb-value.css
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ CSS: Value
+ scope
+ meta.property-value.css
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ CSS: !Important
+ scope
+ keyword.other.important.css
+ settings
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ CSS: Standard Value
+ scope
+ support.constant.color
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ CSS: Tag
+ scope
+ entity.name.tag.css
+ settings
+
+ foreground
+ #738A13
+
+
+
+ name
+ CSS: : ,
+ scope
+ punctuation.separator.key-value.css, punctuation.terminator.rule.css
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ CSS .class
+ scope
+ entity.other.attribute-name.class.css
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ CSS :pseudo
+ scope
+ entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-class.css
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ CSS: #id
+ scope
+ entity.other.attribute-name.id.css
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ JS: Function Name
+ scope
+ meta.function.js, entity.name.function.js, support.function.dom.js
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ JS: Source
+ scope
+ text.html.basic source.js.embedded.html
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ JS: Function
+ scope
+ storage.type.function.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ JS: Numeric Constant
+ scope
+ constant.numeric.js
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ JS: []
+ scope
+ meta.brace.square.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ JS: Storage Type
+ scope
+ storage.type.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ ()
+ scope
+ meta.brace.round, punctuation.definition.parameters.begin.js, punctuation.definition.parameters.end.js
+ settings
+
+ foreground
+ #93A1A1
+
+
+
+ name
+ {}
+ scope
+ meta.brace.curly.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ HTML: Doctype
+ scope
+ entity.name.tag.doctype.html, meta.tag.sgml.html, string.quoted.double.doctype.identifiers-and-DTDs.html
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #899090
+
+
+
+ name
+ HTML: Comment Block
+ scope
+ comment.block.html
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #839496
+
+
+
+ name
+ HTML: Script
+ scope
+ entity.name.tag.script.html
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ HTML: Style
+ scope
+ source.css.embedded.html string.quoted.double.html
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ HTML: Text
+ scope
+ text.html.ruby
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #BD3800
+
+
+
+ name
+ HTML: =
+ scope
+ text.html.basic meta.tag.other.html, text.html.basic meta.tag.any.html, text.html.basic meta.tag.block.any, text.html.basic meta.tag.inline.any, text.html.basic meta.tag.structure.any.html, text.html.basic source.js.embedded.html, punctuation.separator.key-value.html
+ settings
+
+ fontStyle
+
+ foreground
+ #708284
+
+
+
+ name
+ HTML: something=
+ scope
+ text.html.basic entity.other.attribute-name.html
+ settings
+
+ foreground
+ #708284
+
+
+
+ name
+ HTML: "
+ scope
+ text.html.basic meta.tag.structure.any.html punctuation.definition.string.begin.html, punctuation.definition.string.begin.html, punctuation.definition.string.end.html
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ HTML: <tag>
+ scope
+ entity.name.tag.block.any.html
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #268BD2
+
+
+
+ name
+ HTML: style
+ scope
+ source.css.embedded.html entity.name.tag.style.html
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ HTML: <style>
+ scope
+ entity.name.tag.style.html
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ HTML: {}
+ scope
+ text.html.basic punctuation.section.property-list.css
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ HTML: Embeddable
+ scope
+ source.css.embedded.html, comment.block.html
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #819090
+
+
+
+ name
+ Ruby: Variable definition
+ scope
+ punctuation.definition.variable.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Ruby: Function Name
+ scope
+ meta.function.method.with-arguments.ruby
+ settings
+
+ foreground
+ #708284
+
+
+
+ name
+ Ruby: Variable
+ scope
+ variable.language.ruby
+ settings
+
+ foreground
+ #469186
+
+
+
+ name
+ Ruby: Function
+ scope
+ entity.name.function.ruby
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Ruby: Keyword Control
+ scope
+ keyword.control.ruby, keyword.control.def.ruby
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #738A05
+
+
+
+ name
+ Ruby: Class
+ scope
+ keyword.control.class.ruby, meta.class.ruby
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ Ruby: Class Name
+ scope
+ entity.name.type.class.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Ruby: Keyword
+ scope
+ keyword.control.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Ruby: Support Class
+ scope
+ support.class.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Ruby: Special Method
+ scope
+ keyword.other.special-method.ruby
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ Ruby: Constant
+ scope
+ constant.language.ruby, constant.numeric.ruby
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Ruby: Constant Other
+ scope
+ variable.other.constant.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Ruby: :symbol
+ scope
+ constant.other.symbol.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Ruby: Punctuation Section ''
+ scope
+ punctuation.section.embedded.ruby, punctuation.definition.string.begin.ruby, punctuation.definition.string.end.ruby
+ settings
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ Ruby: Special Method
+ scope
+ keyword.other.special-method.ruby
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ PHP: Include
+ scope
+ keyword.control.import.include.php
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Ruby: erb =
+ scope
+ text.html.ruby meta.tag.inline.any.html
+ settings
+
+ fontStyle
+
+ foreground
+ #819090
+
+
+
+ name
+ Ruby: erb ""
+ scope
+ text.html.ruby punctuation.definition.string.begin, text.html.ruby punctuation.definition.string.end
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ PHP: Quoted Single
+ scope
+ punctuation.definition.string.begin, punctuation.definition.string.end
+ settings
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: Class Names
+ scope
+ support.class.php
+ settings
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: []
+ scope
+ keyword.operator.index-start.php, keyword.operator.index-end.php
+ settings
+
+ foreground
+ #D31E1E
+
+
+
+ name
+ PHP: Array
+ scope
+ meta.array.php
+ settings
+
+ foreground
+ #536871
+
+
+
+ name
+ PHP: Array()
+ scope
+ meta.array.php support.function.construct.php, meta.array.empty.php support.function.construct.php
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ PHP: Array Construct
+ scope
+ support.function.construct.php
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ PHP: Array Begin
+ scope
+ punctuation.definition.array.begin, punctuation.definition.array.end
+ settings
+
+ foreground
+ #D31E1E
+
+
+
+ name
+ PHP: Numeric Constant
+ scope
+ constant.numeric.php
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ PHP: New
+ scope
+ keyword.other.new.php
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ PHP: ::
+ scope
+ keyword.operator.class
+ settings
+
+ fontStyle
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: Other Property
+ scope
+ variable.other.property.php
+ settings
+
+ foreground
+ #899090
+
+
+
+ name
+ PHP: Class
+ scope
+ storage.modifier.extends.php, storage.type.class.php, keyword.operator.class.php
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ PHP: Class Function
+ settings
+
+
+
+ name
+ PHP: Semicolon
+ scope
+ punctuation.terminator.expression.php
+ settings
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: Inherited Class
+ scope
+ meta.other.inherited-class.php
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ PHP: Storage Type
+ scope
+ storage.type.php
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ PHP: Function
+ scope
+ entity.name.function.php
+ settings
+
+ foreground
+ #899090
+
+
+
+ name
+ PHP: Function Construct
+ scope
+ support.function.construct.php
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ PHP: Function Call
+ scope
+ entity.name.type.class.php, meta.function-call.php, meta.function-call.static.php, meta.function-call.object.php
+ settings
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: Comment
+ scope
+ keyword.other.phpdoc
+ settings
+
+ fontStyle
+
+ foreground
+ #899090
+
+
+
+ name
+ PHP: Source Emebedded
+ scope
+ source.php.embedded.block.html
+ settings
+
+ foreground
+ #BD3613
+
+
+
+ name
+ PHP: Storage Type Function
+ scope
+ storage.type.function.php
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ C: constant
+ scope
+ constant.numeric.c
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ C: Meta Preprocessor
+ scope
+ meta.preprocessor.c.include, meta.preprocessor.macro.c
+ settings
+
+ fontStyle
+
+ foreground
+ #BB3700
+
+
+
+ name
+ C: Keyword
+ scope
+ keyword.control.import.define.c, keyword.control.import.include.c
+ settings
+
+ fontStyle
+
+ foreground
+ #BB3700
+
+
+
+ name
+ C: Function Preprocessor
+ scope
+ entity.name.function.preprocessor.c
+ settings
+
+ fontStyle
+
+ foreground
+ #BB3700
+
+
+
+ name
+ C: include <something.c>
+ scope
+ meta.preprocessor.c.include string.quoted.other.lt-gt.include.c, meta.preprocessor.c.include punctuation.definition.string.begin.c, meta.preprocessor.c.include punctuation.definition.string.end.c
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ C: Function
+ scope
+ support.function.C99.c, support.function.any-method.c, entity.name.function.c
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ C: "
+ scope
+ punctuation.definition.string.begin.c, punctuation.definition.string.end.c
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ C: Storage Type
+ scope
+ storage.type.c
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ diff: header
+ scope
+ meta.diff, meta.diff.header
+ settings
+
+ background
+ #A57706
+ fontStyle
+ italic
+ foreground
+ #E0EDDD
+
+
+
+ name
+ diff: deleted
+ scope
+ markup.deleted
+ settings
+
+ background
+ #EAE3CA
+ fontStyle
+
+ foreground
+ #D3201F
+
+
+
+ name
+ diff: changed
+ scope
+ markup.changed
+ settings
+
+ background
+ #EAE3CA
+ fontStyle
+
+ foreground
+ #BF3904
+
+
+
+ name
+ diff: inserted
+ scope
+ markup.inserted
+ settings
+
+ background
+ #EAE3CA
+ foreground
+ #219186
+
+
+
+ name
+ Markdown: Linebreak
+ scope
+ text.html.markdown meta.dummy.line-break
+ settings
+
+ background
+ #A57706
+ foreground
+ #E0EDDD
+
+
+
+ name
+ Markdown: Raw
+ scope
+ text.html.markdown markup.raw.inline
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ reST raw
+ scope
+ text.restructuredtext markup.raw
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Other: Removal
+ scope
+ other.package.exclude, other.remove
+ settings
+
+ fontStyle
+
+ foreground
+ #D3201F
+
+
+
+ name
+ Other: Add
+ scope
+ other.add
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: {}
+ scope
+ punctuation.section.group.tex , punctuation.definition.arguments.begin.latex, punctuation.definition.arguments.end.latex, punctuation.definition.arguments.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #B81D1C
+
+
+
+ name
+ Tex: {text}
+ scope
+ meta.group.braces.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #A57705
+
+
+
+ name
+ Tex: Other Math
+ scope
+ string.other.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #A57705
+
+
+
+ name
+ Tex: {var}
+ scope
+ variable.parameter.function.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Tex: Math \\
+ scope
+ punctuation.definition.constant.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ Tex: Constant Math
+ scope
+ text.tex.latex constant.other.math.tex, constant.other.general.math.tex, constant.other.general.math.tex, constant.character.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: Other Math String
+ scope
+ string.other.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Tex: $
+ scope
+ punctuation.definition.string.begin.tex, punctuation.definition.string.end.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #D3201F
+
+
+
+ name
+ Tex: \label
+ scope
+ keyword.control.label.latex, text.tex.latex constant.other.general.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: \label { }
+ scope
+ variable.parameter.definition.label.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ Tex: Function
+ scope
+ support.function.be.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Tex: Support Function Section
+ scope
+ support.function.section.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Tex: Support Function
+ scope
+ support.function.general.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: Comment
+ scope
+ punctuation.definition.comment.tex, comment.line.percentage.tex
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Tex: Reference Label
+ scope
+ keyword.control.ref.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Python: storage
+ scope
+ storage.type.class.python, storage.type.function.python, storage.modifier.global.python
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Python: import
+ scope
+ keyword.control.import.python, keyword.control.import.from.python
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Python: Support.exception
+ scope
+ support.type.exception.python
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ Shell: builtin
+ scope
+ support.function.builtin.shell
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ Shell: variable
+ scope
+ variable.other.normal.shell
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Shell: DOT_FILES
+ scope
+ source.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Shell: meta scope in loop
+ scope
+ meta.scope.for-in-loop.shell, variable.other.loop.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Shell: ""
+ scope
+ punctuation.definition.string.end.shell, punctuation.definition.string.begin.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Shell: Meta Block
+ scope
+ meta.scope.case-block.shell, meta.scope.case-body.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Shell: []
+ scope
+ punctuation.definition.logical-expression.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #CD1E1D
+
+
+
+ name
+ Shell: Comment
+ scope
+ comment.line.number-sign.shell
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Java: import
+ scope
+ keyword.other.import.java
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Java: meta-import
+ scope
+ storage.modifier.import.java
+ settings
+
+ fontStyle
+
+ foreground
+ #586E75
+
+
+
+ name
+ Java: Class
+ scope
+ meta.class.java storage.modifier.java
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Java: /* comment */
+ scope
+ source.java comment.block
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Java: /* @param */
+ scope
+ comment.block meta.documentation.tag.param.javadoc keyword.other.documentation.param.javadoc
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Perl: variables
+ scope
+ punctuation.definition.variable.perl, variable.other.readwrite.global.perl, variable.other.predefined.perl, keyword.operator.comparison.perl
+ settings
+
+ foreground
+ #B58900
+
+
+
+ name
+ Perl: functions
+ scope
+ support.function.perl
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Perl: comments
+ scope
+ comment.line.number-sign.perl
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #586E75
+
+
+
+ name
+ Perl: quotes
+ scope
+ punctuation.definition.string.begin.perl, punctuation.definition.string.end.perl
+ settings
+
+ foreground
+ #2AA198
+
+
+
+ name
+ Perl: \char
+ scope
+ constant.character.escape.perl
+ settings
+
+ foreground
+ #DC322F
+
+
+
+ uuid
+ A4299D9B-1DE5-4BC4-87F6-A757E71B1597
+ license
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
diff --git a/app/rcc/edbee/themes/Solarized (Light).tmTheme b/app/rcc/edbee/themes/Solarized (Light).tmTheme
new file mode 100644
index 00000000..a34bef01
--- /dev/null
+++ b/app/rcc/edbee/themes/Solarized (Light).tmTheme
@@ -0,0 +1,1875 @@
+
+
+
+
+ name
+ Solarized (light)
+ settings
+
+
+ settings
+
+ background
+ #FDF6E3
+ caret
+ #000000
+ foreground
+ #586E75
+ invisibles
+ #EAE3C9
+ lineHighlight
+ #EEE8D5
+ selection
+ #073642
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+
+ foreground
+ #93A1A1
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #2AA198
+
+
+
+ name
+ StringNumber
+ scope
+ string
+ settings
+
+ foreground
+ #586E75
+
+
+
+ name
+ Regexp
+ scope
+ string.regexp
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #D33682
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #073642
+
+
+
+ name
+ Class name
+ scope
+ entity.name.class, entity.name.type.class
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Variable start
+ scope
+ punctuation.definition.variable
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Embedded code markers
+ scope
+ punctuation.section.embedded.begin, punctuation.section.embedded.end
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language, meta.preprocessor
+ settings
+
+ foreground
+ #B58900
+
+
+
+ name
+ Support.construct
+ scope
+ support.function.construct, keyword.other.new
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #268BD2
+
+
+
+ name
+ Tag start/end
+ scope
+ punctuation.definition.tag.html, punctuation.definition.tag.begin, punctuation.definition.tag.end
+ settings
+
+ foreground
+ #93A1A1
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ foreground
+ #93A1A1
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Continuation
+ scope
+ punctuation.separator.continuation
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Library Exception
+ scope
+ support.type.exception
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ Special
+ scope
+ keyword.other.special-method
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+
+
+ name
+ Quoted String
+ scope
+ string.quoted.double, string.quoted.single
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Quotes
+ scope
+ punctuation.definition.string.begin, punctuation.definition.string.end
+ settings
+
+ foreground
+ #C60000
+
+
+
+ name
+ CSS: Property
+ scope
+ entity.name.tag.css, support.type.property-name.css, meta.property-name.css
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ CSS: @font-face
+ scope
+ source.css
+ settings
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ CSS: Selector
+ scope
+ meta.selector.css
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ CSS: {}
+ scope
+ punctuation.section.property-list.css
+ settings
+
+ foreground
+ #5A74CF
+
+
+
+ name
+ CSS: Numeric Value
+ scope
+ meta.property-value.css constant.numeric.css, keyword.other.unit.css,constant.other.color.rgb-value.css
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ CSS: Value
+ scope
+ meta.property-value.css
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ CSS: !Important
+ scope
+ keyword.other.important.css
+ settings
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ CSS: Standard Value
+ scope
+ support.constant.color
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ CSS: Tag
+ scope
+ entity.name.tag.css
+ settings
+
+ foreground
+ #738A13
+
+
+
+ name
+ CSS: : ,
+ scope
+ punctuation.separator.key-value.css, punctuation.terminator.rule.css
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ CSS .class
+ scope
+ entity.other.attribute-name.class.css
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ CSS :pseudo
+ scope
+ entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-class.css
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ CSS: #id
+ scope
+ entity.other.attribute-name.id.css
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ JS: Function Name
+ scope
+ meta.function.js, entity.name.function.js, support.function.dom.js
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ JS: Source
+ scope
+ text.html.basic source.js.embedded.html
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ JS: Function
+ scope
+ storage.type.function.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ JS: Numeric Constant
+ scope
+ constant.numeric.js
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ JS: []
+ scope
+ meta.brace.square.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ JS: Storage Type
+ scope
+ storage.type.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ ()
+ scope
+ meta.brace.round, punctuation.definition.parameters.begin.js, punctuation.definition.parameters.end.js
+ settings
+
+ foreground
+ #93A1A1
+
+
+
+ name
+ {}
+ scope
+ meta.brace.curly.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ HTML: Doctype
+ scope
+ entity.name.tag.doctype.html, meta.tag.sgml.html, string.quoted.double.doctype.identifiers-and-DTDs.html
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #899090
+
+
+
+ name
+ HTML: Comment Block
+ scope
+ comment.block.html
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #839496
+
+
+
+ name
+ HTML: Script
+ scope
+ entity.name.tag.script.html
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ HTML: Style
+ scope
+ source.css.embedded.html string.quoted.double.html
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ HTML: Text
+ scope
+ text.html.ruby
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #BD3800
+
+
+
+ name
+ HTML: =
+ scope
+ text.html.basic meta.tag.other.html, text.html.basic meta.tag.any.html, text.html.basic meta.tag.block.any, text.html.basic meta.tag.inline.any, text.html.basic meta.tag.structure.any.html, text.html.basic source.js.embedded.html, punctuation.separator.key-value.html
+ settings
+
+ fontStyle
+
+ foreground
+ #708284
+
+
+
+ name
+ HTML: something=
+ scope
+ text.html.basic entity.other.attribute-name.html
+ settings
+
+ foreground
+ #708284
+
+
+
+ name
+ HTML: "
+ scope
+ text.html.basic meta.tag.structure.any.html punctuation.definition.string.begin.html, punctuation.definition.string.begin.html, punctuation.definition.string.end.html
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ HTML: <tag>
+ scope
+ entity.name.tag.block.any.html
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #268BD2
+
+
+
+ name
+ HTML: style
+ scope
+ source.css.embedded.html entity.name.tag.style.html
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ HTML: <style>
+ scope
+ entity.name.tag.style.html
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ HTML: {}
+ scope
+ text.html.basic punctuation.section.property-list.css
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ HTML: Embeddable
+ scope
+ source.css.embedded.html, comment.block.html
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #819090
+
+
+
+ name
+ Ruby: Variable definition
+ scope
+ punctuation.definition.variable.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Ruby: Function Name
+ scope
+ meta.function.method.with-arguments.ruby
+ settings
+
+ foreground
+ #708284
+
+
+
+ name
+ Ruby: Variable
+ scope
+ variable.language.ruby
+ settings
+
+ foreground
+ #469186
+
+
+
+ name
+ Ruby: Function
+ scope
+ entity.name.function.ruby
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Ruby: Keyword Control
+ scope
+ keyword.control.ruby, keyword.control.def.ruby
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #738A05
+
+
+
+ name
+ Ruby: Class
+ scope
+ keyword.control.class.ruby, meta.class.ruby
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ Ruby: Class Name
+ scope
+ entity.name.type.class.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Ruby: Keyword
+ scope
+ keyword.control.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Ruby: Support Class
+ scope
+ support.class.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Ruby: Special Method
+ scope
+ keyword.other.special-method.ruby
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ Ruby: Constant
+ scope
+ constant.language.ruby, constant.numeric.ruby
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Ruby: Constant Other
+ scope
+ variable.other.constant.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Ruby: :symbol
+ scope
+ constant.other.symbol.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Ruby: Punctuation Section ''
+ scope
+ punctuation.section.embedded.ruby, punctuation.definition.string.begin.ruby, punctuation.definition.string.end.ruby
+ settings
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ Ruby: Special Method
+ scope
+ keyword.other.special-method.ruby
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ PHP: Include
+ scope
+ keyword.control.import.include.php
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Ruby: erb =
+ scope
+ text.html.ruby meta.tag.inline.any.html
+ settings
+
+ fontStyle
+
+ foreground
+ #819090
+
+
+
+ name
+ Ruby: erb ""
+ scope
+ text.html.ruby punctuation.definition.string.begin, text.html.ruby punctuation.definition.string.end
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ PHP: Quoted Single
+ scope
+ punctuation.definition.string.begin, punctuation.definition.string.end
+ settings
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: []
+ scope
+ keyword.operator.index-start.php, keyword.operator.index-end.php
+ settings
+
+ foreground
+ #D31E1E
+
+
+
+ name
+ PHP: Array
+ scope
+ meta.array.php
+ settings
+
+ foreground
+ #536871
+
+
+
+ name
+ PHP: Array()
+ scope
+ meta.array.php support.function.construct.php, meta.array.empty.php support.function.construct.php
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ PHP: Array Construct
+ scope
+ support.function.construct.php
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ PHP: Array Begin
+ scope
+ punctuation.definition.array.begin, punctuation.definition.array.end
+ settings
+
+ foreground
+ #D31E1E
+
+
+
+ name
+ PHP: Numeric Constant
+ scope
+ constant.numeric.php
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ PHP: New
+ scope
+ keyword.other.new.php
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ PHP: ::
+ scope
+ support.class.php, keyword.operator.class
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ PHP: Other Property
+ scope
+ variable.other.property.php
+ settings
+
+ foreground
+ #899090
+
+
+
+ name
+ PHP: Class
+ scope
+ storage.modifier.extends.php, storage.type.class.php, keyword.operator.class.php
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ PHP: Class Function
+ settings
+
+
+
+ name
+ PHP: Inherited Class
+ scope
+ meta.other.inherited-class.php
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ PHP: Storage Type
+ scope
+ storage.type.php
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ PHP: Function
+ scope
+ entity.name.function.php
+ settings
+
+ foreground
+ #899090
+
+
+
+ name
+ PHP: Function Construct
+ scope
+ support.function.construct.php
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ PHP: Function Call
+ scope
+ entity.name.type.class.php, meta.function-call.php, meta.function-call.static.php, meta.function-call.object.php
+ settings
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: Comment
+ scope
+ keyword.other.phpdoc
+ settings
+
+ fontStyle
+
+ foreground
+ #899090
+
+
+
+ name
+ PHP: Source Emebedded
+ scope
+ source.php.embedded.block.html
+ settings
+
+ foreground
+ #BD3613
+
+
+
+ name
+ PHP: Storage Type Function
+ scope
+ storage.type.function.php
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ C: constant
+ scope
+ constant.numeric.c
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ C: Meta Preprocessor
+ scope
+ meta.preprocessor.c.include, meta.preprocessor.macro.c
+ settings
+
+ fontStyle
+
+ foreground
+ #BB3700
+
+
+
+ name
+ C: Keyword
+ scope
+ keyword.control.import.define.c, keyword.control.import.include.c
+ settings
+
+ fontStyle
+
+ foreground
+ #BB3700
+
+
+
+ name
+ C: Function Preprocessor
+ scope
+ entity.name.function.preprocessor.c
+ settings
+
+ fontStyle
+
+ foreground
+ #BB3700
+
+
+
+ name
+ C: include <something.c>
+ scope
+ meta.preprocessor.c.include string.quoted.other.lt-gt.include.c, meta.preprocessor.c.include punctuation.definition.string.begin.c, meta.preprocessor.c.include punctuation.definition.string.end.c
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ C: Function
+ scope
+ support.function.C99.c, support.function.any-method.c, entity.name.function.c
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ C: "
+ scope
+ punctuation.definition.string.begin.c, punctuation.definition.string.end.c
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ C: Storage Type
+ scope
+ storage.type.c
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ diff: header
+ scope
+ meta.diff, meta.diff.header
+ settings
+
+ background
+ #A57706
+ fontStyle
+ italic
+ foreground
+ #E0EDDD
+
+
+
+ name
+ diff: deleted
+ scope
+ markup.deleted
+ settings
+
+ background
+ #EAE3CA
+ fontStyle
+
+ foreground
+ #D3201F
+
+
+
+ name
+ diff: changed
+ scope
+ markup.changed
+ settings
+
+ background
+ #EAE3CA
+ fontStyle
+
+ foreground
+ #BF3904
+
+
+
+ name
+ diff: inserted
+ scope
+ markup.inserted
+ settings
+
+ background
+ #EAE3CA
+ foreground
+ #219186
+
+
+
+ name
+ Markdown: Linebreak
+ scope
+ text.html.markdown meta.dummy.line-break
+ settings
+
+ background
+ #A57706
+ foreground
+ #E0EDDD
+
+
+
+ name
+ Markdown: Raw
+ scope
+ text.html.markdown markup.raw.inline
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ reST raw
+ scope
+ text.restructuredtext markup.raw
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Other: Removal
+ scope
+ other.package.exclude, other.remove
+ settings
+
+ fontStyle
+
+ foreground
+ #D3201F
+
+
+
+ name
+ Other: Add
+ scope
+ other.add
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: {}
+ scope
+ punctuation.section.group.tex , punctuation.definition.arguments.begin.latex, punctuation.definition.arguments.end.latex, punctuation.definition.arguments.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #B81D1C
+
+
+
+ name
+ Tex: {text}
+ scope
+ meta.group.braces.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #A57705
+
+
+
+ name
+ Tex: Other Math
+ scope
+ string.other.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #A57705
+
+
+
+ name
+ Tex: {var}
+ scope
+ variable.parameter.function.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Tex: Math \\
+ scope
+ punctuation.definition.constant.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ Tex: Constant Math
+ scope
+ text.tex.latex constant.other.math.tex, constant.other.general.math.tex, constant.other.general.math.tex, constant.character.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: Other Math String
+ scope
+ string.other.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Tex: $
+ scope
+ punctuation.definition.string.begin.tex, punctuation.definition.string.end.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #D3201F
+
+
+
+ name
+ Tex: \label
+ scope
+ keyword.control.label.latex, text.tex.latex constant.other.general.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: \label { }
+ scope
+ variable.parameter.definition.label.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ Tex: Function
+ scope
+ support.function.be.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Tex: Support Function Section
+ scope
+ support.function.section.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Tex: Support Function
+ scope
+ support.function.general.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: Comment
+ scope
+ punctuation.definition.comment.tex, comment.line.percentage.tex
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Tex: Reference Label
+ scope
+ keyword.control.ref.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Python: storage
+ scope
+ storage.type.class.python, storage.type.function.python, storage.modifier.global.python
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Python: import
+ scope
+ keyword.control.import.python, keyword.control.import.from.python
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Python: Support.exception
+ scope
+ support.type.exception.python
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ Shell: builtin
+ scope
+ support.function.builtin.shell
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ Shell: variable
+ scope
+ variable.other.normal.shell
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Shell: DOT_FILES
+ scope
+ source.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Shell: meta scope in loop
+ scope
+ meta.scope.for-in-loop.shell, variable.other.loop.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Shell: ""
+ scope
+ punctuation.definition.string.end.shell, punctuation.definition.string.begin.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Shell: Meta Block
+ scope
+ meta.scope.case-block.shell, meta.scope.case-body.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Shell: []
+ scope
+ punctuation.definition.logical-expression.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #CD1E1D
+
+
+
+ name
+ Shell: Comment
+ scope
+ comment.line.number-sign.shell
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Java: import
+ scope
+ keyword.other.import.java
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Java: meta-import
+ scope
+ storage.modifier.import.java
+ settings
+
+ fontStyle
+
+ foreground
+ #586E75
+
+
+
+ name
+ Java: Class
+ scope
+ meta.class.java storage.modifier.java
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Java: /* comment */
+ scope
+ source.java comment.block
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Java: /* @param */
+ scope
+ comment.block meta.documentation.tag.param.javadoc keyword.other.documentation.param.javadoc
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Perl: variables
+ scope
+ punctuation.definition.variable.perl, variable.other.readwrite.global.perl, variable.other.predefined.perl, keyword.operator.comparison.perl
+ settings
+
+ foreground
+ #B58900
+
+
+
+ name
+ Perl: functions
+ scope
+ support.function.perl
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Perl: comments
+ scope
+ comment.line.number-sign.perl
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #586E75
+
+
+
+ name
+ Perl: quotes
+ scope
+ punctuation.definition.string.begin.perl, punctuation.definition.string.end.perl
+ settings
+
+ foreground
+ #2AA198
+
+
+
+ name
+ Perl: \char
+ scope
+ constant.character.escape.perl
+ settings
+
+ foreground
+ #DC322F
+
+
+
+ uuid
+ 38E819D9-AE02-452F-9231-ECC3B204AFD7
+ license
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
diff --git a/app/rcc/edbee/themes/SpaceCadet.tmTheme b/app/rcc/edbee/themes/SpaceCadet.tmTheme
new file mode 100644
index 00000000..156f43de
--- /dev/null
+++ b/app/rcc/edbee/themes/SpaceCadet.tmTheme
@@ -0,0 +1,212 @@
+
+
+
+
+ author
+ Alex Ross
+ comment
+ Created by Alex Ross
+ name
+ SpaceCadet
+ settings
+
+
+ settings
+
+ background
+ #0D0D0D
+ caret
+ #7F005D
+ foreground
+ #DDE6CF
+ invisibles
+ #BFBFBF
+ lineHighlight
+ #00000012
+ selection
+ #40002F
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ foreground
+ #473C45
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #805978
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ foreground
+ #A8885A
+
+
+
+ name
+ Variable
+ scope
+ variable.parameter, variable.other
+ settings
+
+ foreground
+ #596380
+
+
+
+ name
+ Keyword
+ scope
+ keyword - keyword.operator, keyword.operator.logical
+ settings
+
+ foreground
+ #728059
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ foreground
+ #9EBF60
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ foreground
+ #6078BF
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ foreground
+ #8A4B66
+
+
+
+ name
+ Exception
+ scope
+ support.type.exception
+ settings
+
+ foreground
+ #893062
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #5F0047
+
+
+
+ name
+ - Meta
+ settings
+
+
+
+ name
+ function.section
+ scope
+ meta.function.section
+ settings
+
+ background
+ #371D28
+
+
+
+ uuid
+ 2C24E84F-F9FE-4C2E-92D2-F52198BA7E41
+
+
diff --git a/app/rcc/edbee/themes/Sunburst.tmTheme b/app/rcc/edbee/themes/Sunburst.tmTheme
new file mode 100644
index 00000000..c48337b9
--- /dev/null
+++ b/app/rcc/edbee/themes/Sunburst.tmTheme
@@ -0,0 +1,665 @@
+
+
+
+
+ author
+ Stanley Rost
+ comment
+ (π) Soryu, 2005
+ name
+ Sunburst
+ settings
+
+
+ settings
+
+ background
+ #000000
+ caret
+ #A7A7A7
+ foreground
+ #F8F8F8
+ invisibles
+ #CAE2FB3D
+ lineHighlight
+ #FFFFFF0D
+ selection
+ #DDF0FF33
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #AEAEAE
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ foreground
+ #3387CC
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ fontStyle
+
+ foreground
+ #89BDFF
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #E28964
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #99CF50
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ fontStyle
+
+ foreground
+ #65B042
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+
+ foreground
+ #9B859D
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ foreground
+ #3E87E3
+
+
+
+ name
+ Invalid – Deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ fontStyle
+ italic underline
+ foreground
+ #FD5FF1
+
+
+
+ name
+ Invalid – Illegal
+ scope
+ invalid.illegal
+ settings
+
+ background
+ #562D56BF
+ foreground
+ #FD5FF1
+
+
+
+ name
+ -----------------------------------
+ settings
+
+
+
+ name
+ ♦ Embedded Source (Bright)
+ scope
+ text source
+ settings
+
+ background
+ #B1B3BA08
+
+
+
+ name
+ ♦ Entity inherited-class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #9B5C2E
+
+
+
+ name
+ ♦ String embedded-source
+ scope
+ string.quoted source
+ settings
+
+ fontStyle
+
+ foreground
+ #DAEFA3
+
+
+
+ name
+ ♦ String constant
+ scope
+ string constant
+ settings
+
+ foreground
+ #DDF2A4
+
+
+
+ name
+ ♦ String.regexp
+ scope
+ string.regexp
+ settings
+
+ foreground
+ #E9C062
+
+
+
+ name
+ ♦ String.regexp.«special»
+ scope
+ string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition
+ settings
+
+ foreground
+ #CF7D34
+
+
+
+ name
+ ♦ String variable
+ scope
+ string variable
+ settings
+
+ foreground
+ #8A9A95
+
+
+
+ name
+ ♦ Support.function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #DAD085
+
+
+
+ name
+ ♦ Support.constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+
+ foreground
+ #CF6A4C
+
+
+
+ name
+ c C/C++ Preprocessor Line
+ scope
+ meta.preprocessor.c
+ settings
+
+ foreground
+ #8996A8
+
+
+
+ name
+ c C/C++ Preprocessor Directive
+ scope
+ meta.preprocessor.c keyword
+ settings
+
+ foreground
+ #AFC4DB
+
+
+
+ name
+ j Entity Name Type
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ j Cast
+ scope
+ meta.cast
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #676767
+
+
+
+ name
+ ✘ Doctype/XML Processing
+ scope
+ meta.sgml.html meta.doctype, meta.sgml.html meta.doctype entity, meta.sgml.html meta.doctype string, meta.xml-processing, meta.xml-processing entity, meta.xml-processing string
+ settings
+
+ foreground
+ #494949
+
+
+
+ name
+ ✘ Meta.tag.«all»
+ scope
+ meta.tag, meta.tag entity
+ settings
+
+ foreground
+ #89BDFF
+
+
+
+ name
+ ✘ Meta.tag.inline
+ scope
+ source entity.name.tag, source entity.other.attribute-name, meta.tag.inline, meta.tag.inline entity
+ settings
+
+ foreground
+ #E0C589
+
+
+
+ name
+ ✘ Namespaces
+ scope
+ entity.name.tag.namespace, entity.other.attribute-name.namespace
+ settings
+
+ foreground
+ #E18964
+
+
+
+ name
+ § css tag-name
+ scope
+ meta.selector.css entity.name.tag
+ settings
+
+ foreground
+ #CDA869
+
+
+
+ name
+ § css:pseudo-class
+ scope
+ meta.selector.css entity.other.attribute-name.tag.pseudo-class
+ settings
+
+ foreground
+ #8F9D6A
+
+
+
+ name
+ § css#id
+ scope
+ meta.selector.css entity.other.attribute-name.id
+ settings
+
+ foreground
+ #8B98AB
+
+
+
+ name
+ § css.class
+ scope
+ meta.selector.css entity.other.attribute-name.class
+ settings
+
+ foreground
+ #9B703F
+
+
+
+ name
+ § css property-name:
+ scope
+ support.type.property-name.css
+ settings
+
+ foreground
+ #C5AF75
+
+
+
+ name
+ § css property-value;
+ scope
+ meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css
+ settings
+
+ foreground
+ #F9EE98
+
+
+
+ name
+ § css @at-rule
+ scope
+ meta.preprocessor.at-rule keyword.control.at-rule
+ settings
+
+ foreground
+ #8693A5
+
+
+
+ name
+ § css additional-constants
+ scope
+ meta.property-value support.constant.named-color.css, meta.property-value constant
+ settings
+
+ foreground
+ #DD7B3B
+
+
+
+ name
+ § css constructor.argument
+ scope
+ meta.constructor.argument.css
+ settings
+
+ foreground
+ #8F9D6A
+
+
+
+ name
+ ⎇ diff.header
+ scope
+ meta.diff, meta.diff.header
+ settings
+
+ background
+ #0E2231
+ fontStyle
+ italic
+ foreground
+ #F8F8F8
+
+
+
+ name
+ ⎇ diff.deleted
+ scope
+ markup.deleted
+ settings
+
+ background
+ #420E09
+ foreground
+ #F8F8F8
+
+
+
+ name
+ ⎇ diff.changed
+ scope
+ markup.changed
+ settings
+
+ background
+ #4A410D
+ foreground
+ #F8F8F8
+
+
+
+ name
+ ⎇ diff.inserted
+ scope
+ markup.inserted
+ settings
+
+ background
+ #253B22
+ foreground
+ #F8F8F8
+
+
+
+ name
+ --------------------------------
+ settings
+
+
+
+ name
+ Markup: Italic
+ scope
+ markup.italic
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #E9C062
+
+
+
+ name
+ Markup: Bold
+ scope
+ markup.bold
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #E9C062
+
+
+
+ name
+ Markup: Underline
+ scope
+ markup.underline
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #E18964
+
+
+
+ name
+ Markup: Quote
+ scope
+ markup.quote
+ settings
+
+ background
+ #FEE09C12
+ fontStyle
+ italic
+ foreground
+ #E1D4B9
+
+
+
+ name
+ Markup: Heading
+ scope
+ markup.heading, markup.heading entity
+ settings
+
+ background
+ #632D04
+ fontStyle
+
+ foreground
+ #FEDCC5
+
+
+
+ name
+ Markup: List
+ scope
+ markup.list
+ settings
+
+ foreground
+ #E1D4B9
+
+
+
+ name
+ Markup: Raw
+ scope
+ markup.raw
+ settings
+
+ background
+ #B1B3BA08
+ fontStyle
+
+ foreground
+ #578BB3
+
+
+
+ name
+ Markup: Comment
+ scope
+ markup comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #F67B37
+
+
+
+ name
+ Markup: Separator
+ scope
+ meta.separator
+ settings
+
+ background
+ #242424
+ foreground
+ #60A633
+
+
+
+ name
+ Log Entry
+ scope
+ meta.line.entry.logfile, meta.line.exit.logfile
+ settings
+
+ background
+ #EEEEEE29
+
+
+
+ name
+ Log Entry Error
+ scope
+ meta.line.error.logfile
+ settings
+
+ background
+ #751012
+
+
+
+ uuid
+ C8C58F9A-35FE-44A4-9BC2-2F3C343DC81D
+
+
diff --git a/app/rcc/edbee/themes/Twilight.tmTheme b/app/rcc/edbee/themes/Twilight.tmTheme
new file mode 100644
index 00000000..a83f7ecb
--- /dev/null
+++ b/app/rcc/edbee/themes/Twilight.tmTheme
@@ -0,0 +1,514 @@
+
+
+
+
+ author
+ Michael Sheets
+ name
+ Twilight
+ settings
+
+
+ settings
+
+ background
+ #141414
+ caret
+ #A7A7A7
+ foreground
+ #F8F8F8
+ invisibles
+ #FFFFFF40
+ lineHighlight
+ #FFFFFF08
+ selection
+ #DDF0FF33
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #5F5A60
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ foreground
+ #CF6A4C
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ fontStyle
+
+ foreground
+ #9B703F
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #CDA869
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #F9EE98
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ fontStyle
+
+ foreground
+ #8F9D6A
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+
+ foreground
+ #9B859D
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ foreground
+ #7587A6
+
+
+
+ name
+ Invalid – Deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ fontStyle
+ italic underline
+ foreground
+ #D2A8A1
+
+
+
+ name
+ Invalid – Illegal
+ scope
+ invalid.illegal
+ settings
+
+ background
+ #562D56BF
+ foreground
+ #F8F8F8
+
+
+
+ name
+ -----------------------------------
+ settings
+
+
+
+ name
+ ♦ Embedded Source
+ scope
+ text source
+ settings
+
+ background
+ #B0B3BA14
+
+
+
+ name
+ ♦ Embedded Source (Bright)
+ scope
+ text.html.ruby source
+ settings
+
+ background
+ #B1B3BA21
+
+
+
+ name
+ ♦ Entity inherited-class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #9B5C2E
+
+
+
+ name
+ ♦ String embedded-source
+ scope
+ string source
+ settings
+
+ fontStyle
+
+ foreground
+ #DAEFA3
+
+
+
+ name
+ ♦ String constant
+ scope
+ string constant
+ settings
+
+ foreground
+ #DDF2A4
+
+
+
+ name
+ ♦ String.regexp
+ scope
+ string.regexp
+ settings
+
+ fontStyle
+
+ foreground
+ #E9C062
+
+
+
+ name
+ ♦ String.regexp.«special»
+ scope
+ string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition
+ settings
+
+ foreground
+ #CF7D34
+
+
+
+ name
+ ♦ String variable
+ scope
+ string variable
+ settings
+
+ foreground
+ #8A9A95
+
+
+
+ name
+ ♦ Support.function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #DAD085
+
+
+
+ name
+ ♦ Support.constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+
+ foreground
+ #CF6A4C
+
+
+
+ name
+ c C/C++ Preprocessor Line
+ scope
+ meta.preprocessor.c
+ settings
+
+ foreground
+ #8996A8
+
+
+
+ name
+ c C/C++ Preprocessor Directive
+ scope
+ meta.preprocessor.c keyword
+ settings
+
+ foreground
+ #AFC4DB
+
+
+
+ name
+ ✘ Doctype/XML Processing
+ scope
+ meta.tag.sgml.doctype, meta.tag.sgml.doctype entity, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string
+ settings
+
+ foreground
+ #494949
+
+
+
+ name
+ ✘ Meta.tag.«all»
+ scope
+ declaration.tag, declaration.tag entity, meta.tag, meta.tag entity
+ settings
+
+ foreground
+ #AC885B
+
+
+
+ name
+ ✘ Meta.tag.inline
+ scope
+ declaration.tag.inline, declaration.tag.inline entity, source entity.name.tag, source entity.other.attribute-name, meta.tag.inline, meta.tag.inline entity
+ settings
+
+ foreground
+ #E0C589
+
+
+
+ name
+ § css tag-name
+ scope
+ meta.selector.css entity.name.tag
+ settings
+
+ foreground
+ #CDA869
+
+
+
+ name
+ § css:pseudo-class
+ scope
+ meta.selector.css entity.other.attribute-name.tag.pseudo-class
+ settings
+
+ foreground
+ #8F9D6A
+
+
+
+ name
+ § css#id
+ scope
+ meta.selector.css entity.other.attribute-name.id
+ settings
+
+ foreground
+ #8B98AB
+
+
+
+ name
+ § css.class
+ scope
+ meta.selector.css entity.other.attribute-name.class
+ settings
+
+ foreground
+ #9B703F
+
+
+
+ name
+ § css property-name:
+ scope
+ support.type.property-name.css
+ settings
+
+ foreground
+ #C5AF75
+
+
+
+ name
+ § css property-value;
+ scope
+ meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css
+ settings
+
+ foreground
+ #F9EE98
+
+
+
+ name
+ § css @at-rule
+ scope
+ meta.preprocessor.at-rule keyword.control.at-rule
+ settings
+
+ foreground
+ #8693A5
+
+
+
+ name
+ § css additional-constants
+ scope
+ meta.property-value support.constant.named-color.css, meta.property-value constant
+ settings
+
+ foreground
+ #CA7840
+
+
+
+ name
+ § css constructor.argument
+ scope
+ meta.constructor.argument.css
+ settings
+
+ foreground
+ #8F9D6A
+
+
+
+ name
+ ⎇ diff.header
+ scope
+ meta.diff, meta.diff.header, meta.separator
+ settings
+
+ background
+ #0E2231
+ fontStyle
+ italic
+ foreground
+ #F8F8F8
+
+
+
+ name
+ ⎇ diff.deleted
+ scope
+ markup.deleted
+ settings
+
+ background
+ #420E09
+ foreground
+ #F8F8F8
+
+
+
+ name
+ ⎇ diff.changed
+ scope
+ markup.changed
+ settings
+
+ background
+ #4A410D
+ foreground
+ #F8F8F8
+
+
+
+ name
+ ⎇ diff.inserted
+ scope
+ markup.inserted
+ settings
+
+ background
+ #253B22
+ foreground
+ #F8F8F8
+
+
+
+ name
+ Markup: List
+ scope
+ markup.list
+ settings
+
+ foreground
+ #F9EE98
+
+
+
+ name
+ Markup: Heading
+ scope
+ markup.heading
+ settings
+
+ foreground
+ #CF6A4C
+
+
+
+ uuid
+ 766026CB-703D-4610-B070-8DE07D967C5F
+
+
diff --git a/app/rcc/edbee/themes/Zenburnesque.tmTheme b/app/rcc/edbee/themes/Zenburnesque.tmTheme
new file mode 100644
index 00000000..8631f986
--- /dev/null
+++ b/app/rcc/edbee/themes/Zenburnesque.tmTheme
@@ -0,0 +1,343 @@
+
+
+
+
+ author
+ William D. Neumann
+ name
+ Zenburnesque
+ settings
+
+
+ settings
+
+ background
+ #404040
+ caret
+ #FFFF66
+ foreground
+ #DEDEDE
+ invisibles
+ #A8A8A8
+ lineHighlight
+ #A0804026
+ selection
+ #A0A0C0
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #709070
+
+
+
+ name
+ Directive
+ scope
+ keyword.other.directive
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Line-number directives
+ scope
+ keyword.other.directive.line-number
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Characters
+ scope
+ constant.character
+ settings
+
+ foreground
+ #FF8080
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #FF2020
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #22C0FF
+
+
+
+ name
+ Floating-point numbers
+ scope
+ constant.numeric.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+
+
+ name
+ Variable
+ scope
+ variable.parameter, variable.other
+ settings
+
+
+
+ name
+ Language Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #FFFFA0
+
+
+
+ name
+ Module Keyword
+ scope
+ entity.name.module, support.other.module
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #FF8000
+
+
+
+ name
+ Operators
+ scope
+ keyword.operator
+ settings
+
+ foreground
+ #FFFFA0
+
+
+
+ name
+ Floating-point infix operators
+ scope
+ source.ocaml keyword.operator.symbol.infix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Floating-point prefix operators
+ scope
+ source.ocaml keyword.operator.symbol.prefix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Storage Types
+ scope
+ storage.type
+ settings
+
+ foreground
+ #6080FF
+
+
+
+ name
+ Variant Types
+ scope
+ entity.name.class.variant
+ settings
+
+ foreground
+ #4080A0
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ foreground
+ #F09040
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #FFCC66
+
+
+
+ name
+ Type name
+ scope
+ storage.type.user-defined
+ settings
+
+ foreground
+ #FFE000
+
+
+
+ name
+ Class type name
+ scope
+ entity.name.type.class.type
+ settings
+
+ foreground
+ #F4A020
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+
+
+ name
+ Library variable
+ scope
+ support.variable
+ settings
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+
+
+ uuid
+ 8D4988B9-ADD8-436F-B388-BC1360F8504B
+
+
diff --git a/app/rcc/edbee/themes/iPlastic.tmTheme b/app/rcc/edbee/themes/iPlastic.tmTheme
new file mode 100644
index 00000000..7253df6a
--- /dev/null
+++ b/app/rcc/edbee/themes/iPlastic.tmTheme
@@ -0,0 +1,286 @@
+
+
+
+
+ author
+ Jeroen van der Ham
+ name
+ iPlastic
+ settings
+
+
+ settings
+
+ background
+ #EEEEEEEB
+ caret
+ #000000
+ foreground
+ #000000
+ invisibles
+ #B3B3B3F4
+ lineHighlight
+ #0000001A
+ selection
+ #BAD6FD
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #009933
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #0066FF
+
+
+
+ name
+ Regular expression
+ scope
+ string.regexp
+ settings
+
+ foreground
+ #FF0080
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #0000FF
+
+
+
+ name
+ Identifier
+ scope
+ constant.language
+ settings
+
+ foreground
+ #9700CC
+
+
+
+ name
+ Exception
+ scope
+ support.class.exception
+ settings
+
+ foreground
+ #990000
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ foreground
+ #FF8000
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ bold underline
+
+
+
+ name
+ Arguments
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #0066FF
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #E71A114D
+ foreground
+ #FF0000
+
+
+
+ name
+ Trailing whitespace
+ scope
+ invalid.deprecated.trailing-whitespace
+ settings
+
+ background
+ #E71A1100
+
+
+
+ name
+ Embedded source
+ scope
+ text source
+ settings
+
+ background
+ #FAFAFAFC
+ foreground
+ #000000
+
+
+
+ name
+ Tag
+ scope
+ meta.tag, declaration.tag
+ settings
+
+ foreground
+ #0033CC
+
+
+
+ name
+ Constant
+ scope
+ constant, support.constant
+ settings
+
+ foreground
+ #6782D3
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #3333FF
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Section name
+ scope
+ entity.name.section
+ settings
+
+ fontStyle
+ bold underline
+
+
+
+ name
+ Frame title
+ scope
+ entity.name.function.frame
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #000000
+
+
+
+ name
+ XML Declaration
+ scope
+ meta.tag.preprocessor.xml
+ settings
+
+ foreground
+ #333333
+
+
+
+ name
+ Tag Attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #3366CC
+
+
+
+ name
+ Tag Name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+
+
+
+ uuid
+ 4FCFA210-B247-11D9-9D00-000D93347A42
+
+
diff --git a/app/rcc/messages/Acknowledgements.txt b/app/rcc/messages/Acknowledgements.txt
index 3fda39bd..78f4abac 100644
--- a/app/rcc/messages/Acknowledgements.txt
+++ b/app/rcc/messages/Acknowledgements.txt
@@ -49,27 +49,26 @@ and/or modify it under the terms of the Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.
-## QSourceHighlite
+## edbee
-Copyright (c) 2019-2020 Waqar Ahmed --
+Copyright (c) 2012-2014 by Reliable Bits Software by Blommers IT
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
## QMQTT
@@ -102,7 +101,7 @@ POSSIBILITY OF SUCH DAMAGE.
## QSimpleUpdater
-Copyright (c) 2014-2021 [Alex Spataru](https://github.com/alex-spataru).
+Copyright (c) 2014-2021 Alex Spataru .
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/app/rcc/rcc.qrc b/app/rcc/rcc.qrc
index 61cd50c0..69cecc1d 100644
--- a/app/rcc/rcc.qrc
+++ b/app/rcc/rcc.qrc
@@ -108,6 +108,95 @@
actions/Xbox Y.svg
actions/Zoom In.svg
actions/Zoom Out.svg
+ edbee/config/default.json
+ edbee/config/default.osx.json
+ edbee/config/default.win.json
+ edbee/config/default.x11.json
+ edbee/keymaps/default.json
+ edbee/keymaps/default.osx.json
+ edbee/keymaps/default.win32.json
+ edbee/syntaxfiles/ActionScript.tmLanguage
+ edbee/syntaxfiles/AppleScript.tmLanguage
+ edbee/syntaxfiles/ASP.tmLanguage
+ edbee/syntaxfiles/Batch File.tmLanguage
+ edbee/syntaxfiles/Bibtex.tmLanguage
+ edbee/syntaxfiles/Build.tmLanguage
+ edbee/syntaxfiles/C#.tmLanguage
+ edbee/syntaxfiles/C++.tmLanguage
+ edbee/syntaxfiles/C.tmLanguage
+ edbee/syntaxfiles/Clojure.tmLanguage
+ edbee/syntaxfiles/CoffeeScript.tmLanguage
+ edbee/syntaxfiles/CSS.tmLanguage
+ edbee/syntaxfiles/D.tmLanguage
+ edbee/syntaxfiles/Diff.tmLanguage
+ edbee/syntaxfiles/DOT.tmLanguage
+ edbee/syntaxfiles/Doxyfile.tmLanguage
+ edbee/syntaxfiles/Erlang.tmLanguage
+ edbee/syntaxfiles/Go.tmLanguage
+ edbee/syntaxfiles/Groovy.tmLanguage
+ edbee/syntaxfiles/Haskell.tmLanguage
+ edbee/syntaxfiles/HTML-ASP.tmLanguage
+ edbee/syntaxfiles/HTML.tmLanguage
+ edbee/syntaxfiles/Java.tmLanguage
+ edbee/syntaxfiles/JavaDoc.tmLanguage
+ edbee/syntaxfiles/JavaScript.tmLanguage
+ edbee/syntaxfiles/LaTeX Beamer.tmLanguage
+ edbee/syntaxfiles/LaTeX.tmLanguage
+ edbee/syntaxfiles/Lisp.tmLanguage
+ edbee/syntaxfiles/Lua.tmLanguage
+ edbee/syntaxfiles/Markdown.tmLanguage
+ edbee/syntaxfiles/Matlab.tmLanguage
+ edbee/syntaxfiles/MultiMarkdown.tmLanguage
+ edbee/syntaxfiles/Objective-C++.tmLanguage
+ edbee/syntaxfiles/Objective-C.tmLanguage
+ edbee/syntaxfiles/OCamlyacc.tmLanguage
+ edbee/syntaxfiles/Perl.tmLanguage
+ edbee/syntaxfiles/PHP.tmLanguage
+ edbee/syntaxfiles/Plain text.tmLanguage
+ edbee/syntaxfiles/Python.tmLanguage
+ edbee/syntaxfiles/R Console.tmLanguage
+ edbee/syntaxfiles/Rd (R Documentation).tmLanguage
+ edbee/syntaxfiles/RegExp.tmLanguage
+ edbee/syntaxfiles/reStructuredText.tmLanguage
+ edbee/syntaxfiles/Ruby Haml.tmLanguage
+ edbee/syntaxfiles/Ruby on Rails.tmLanguage
+ edbee/syntaxfiles/Ruby.tmLanguage
+ edbee/syntaxfiles/Rust.tmLanguage.json
+ edbee/syntaxfiles/Scala.tmLanguage
+ edbee/syntaxfiles/SCSS.tmLanguage
+ edbee/syntaxfiles/Shell-Unix-Generic.tmLanguage
+ edbee/syntaxfiles/SQL.tmLanguage
+ edbee/syntaxfiles/Tcl.tmLanguage
+ edbee/syntaxfiles/TeX Math.tmLanguage
+ edbee/syntaxfiles/TeX.tmLanguage
+ edbee/syntaxfiles/Textile.tmLanguage
+ edbee/syntaxfiles/XML.tmLanguage
+ edbee/syntaxfiles/XSL.tmLanguage
+ edbee/syntaxfiles/YAML.tmLanguage
+ edbee/themes/All Hallow's Eve.tmTheme
+ edbee/themes/Amy.tmTheme
+ edbee/themes/Blackboard.tmTheme
+ edbee/themes/Brilliance_Black.tmTheme
+ edbee/themes/Brilliance_Dull.tmTheme
+ edbee/themes/Cobalt.tmTheme
+ edbee/themes/Dawn.tmTheme
+ edbee/themes/Eiffel.tmTheme
+ edbee/themes/Espresso Libre.tmTheme
+ edbee/themes/IDLE.tmTheme
+ edbee/themes/iPlastic.tmTheme
+ edbee/themes/LAZY.tmTheme
+ edbee/themes/Mac Classic.tmTheme
+ edbee/themes/MagicWB (Amiga).tmTheme
+ edbee/themes/Monokai Bright.tmTheme
+ edbee/themes/Monokai.tmTheme
+ edbee/themes/Pastels on Dark.tmTheme
+ edbee/themes/Solarized (Dark).tmTheme
+ edbee/themes/Solarized (Light).tmTheme
+ edbee/themes/SpaceCadet.tmTheme
+ edbee/themes/Sunburst.tmTheme
+ edbee/themes/Twilight.tmTheme
+ edbee/themes/Zenburnesque.tmTheme
+ edbee/README.md
icons/buttons/apply.svg
icons/buttons/attach.svg
icons/buttons/center.svg
diff --git a/app/rcc/themes/Breeze Dark.json b/app/rcc/themes/Breeze Dark.json
index b8a01099..1f244cc8 100644
--- a/app/rcc/themes/Breeze Dark.json
+++ b/app/rcc/themes/Breeze Dark.json
@@ -1,5 +1,6 @@
{
"title": "Breeze Dark",
+ "code-editor-theme": "Sunburst.tmTheme",
"colors": {
"groupbox_border": "#43494F",
"groupbox_background": "#31363b",
diff --git a/app/rcc/themes/Breeze Light.json b/app/rcc/themes/Breeze Light.json
index 28d5b89b..be9b339f 100644
--- a/app/rcc/themes/Breeze Light.json
+++ b/app/rcc/themes/Breeze Light.json
@@ -1,5 +1,6 @@
{
"title": "Breeze Light",
+ "code-editor-theme": "Dawn.tmTheme",
"colors": {
"groupbox_border": "#c2c2c2",
"groupbox_background": "#eff0f1",
diff --git a/app/rcc/themes/Deep Blue.json b/app/rcc/themes/Deep Blue.json
index 3602f953..5ee368de 100644
--- a/app/rcc/themes/Deep Blue.json
+++ b/app/rcc/themes/Deep Blue.json
@@ -1,5 +1,6 @@
{
"title": "Deep Blue",
+ "code-editor-theme": "Blackboard.tmTheme",
"colors": {
"groupbox_border": "#354a5f",
"groupbox_background": "#1b2a3d",
diff --git a/app/rcc/themes/Deep Green.json b/app/rcc/themes/Deep Green.json
index 2dcd03b8..e5ed11c3 100644
--- a/app/rcc/themes/Deep Green.json
+++ b/app/rcc/themes/Deep Green.json
@@ -1,5 +1,6 @@
{
"title": "Deep Green",
+ "code-editor-theme": "Sunburst.tmTheme",
"colors": {
"groupbox_border": "#3e5a4e",
"groupbox_background": "#1b2b23",
diff --git a/app/rcc/themes/Deep Purple.json b/app/rcc/themes/Deep Purple.json
index fc77431e..b0a24f91 100644
--- a/app/rcc/themes/Deep Purple.json
+++ b/app/rcc/themes/Deep Purple.json
@@ -1,5 +1,6 @@
{
"title": "Deep Purple",
+ "code-editor-theme": "Amy.tmTheme",
"colors": {
"groupbox_border": "#4c2f5d",
"groupbox_background": "#2c1e3e",
diff --git a/app/rcc/themes/Deep Red.json b/app/rcc/themes/Deep Red.json
index bc82fcb4..1cb223a4 100644
--- a/app/rcc/themes/Deep Red.json
+++ b/app/rcc/themes/Deep Red.json
@@ -1,5 +1,6 @@
{
"title": "Deep Red",
+ "code-editor-theme": "Sunburst.tmTheme",
"colors": {
"groupbox_border": "#8b2e2e",
"groupbox_background": "#3d1b1b",
diff --git a/app/rcc/themes/Default.json b/app/rcc/themes/Default.json
index 82540452..d70758f1 100644
--- a/app/rcc/themes/Default.json
+++ b/app/rcc/themes/Default.json
@@ -1,5 +1,6 @@
{
"title": "Default",
+ "code-editor-theme": "LAZY.tmTheme",
"colors": {
"groupbox_border": "#c2c2c2",
"groupbox_background": "#eff0f1",
diff --git a/app/rcc/themes/Dominion.json b/app/rcc/themes/Dominion.json
index 30dffc3f..100ea6a2 100644
--- a/app/rcc/themes/Dominion.json
+++ b/app/rcc/themes/Dominion.json
@@ -1,5 +1,6 @@
{
"title": "Dominion",
+ "code-editor-theme": "Sunburst.tmTheme",
"colors": {
"groupbox_border": "#2d2f33",
"groupbox_background": "#1a1c1e",
diff --git a/app/rcc/themes/Outdoor Day.json b/app/rcc/themes/Outdoor Day.json
index 79d806bf..0a81f7c9 100644
--- a/app/rcc/themes/Outdoor Day.json
+++ b/app/rcc/themes/Outdoor Day.json
@@ -1,5 +1,6 @@
{
"title": "Outdoor Day",
+ "code-editor-theme": "IDLE.tmTheme",
"colors": {
"groupbox_border": "#e5e5e5",
"groupbox_background": "#ffffff",
diff --git a/app/rcc/themes/Outdoor Night.json b/app/rcc/themes/Outdoor Night.json
index efabd9e6..322929fd 100644
--- a/app/rcc/themes/Outdoor Night.json
+++ b/app/rcc/themes/Outdoor Night.json
@@ -1,5 +1,6 @@
{
"title": "Outdoor Night",
+ "code-editor-theme": "Sunburst.tmTheme",
"colors": {
"groupbox_border": "#3a3d42",
"groupbox_background": "#202326",
diff --git a/app/rcc/themes/Pulse.json b/app/rcc/themes/Pulse.json
index 58968675..b3ca1256 100644
--- a/app/rcc/themes/Pulse.json
+++ b/app/rcc/themes/Pulse.json
@@ -1,5 +1,6 @@
{
"title": "Pulse",
+ "code-editor-theme": "Twilight.tmTheme",
"colors": {
"groupbox_border": "#4a4a4a",
"groupbox_background": "#202020",
diff --git a/app/rcc/themes/Resistance.json b/app/rcc/themes/Resistance.json
index 4252064e..72332073 100644
--- a/app/rcc/themes/Resistance.json
+++ b/app/rcc/themes/Resistance.json
@@ -1,5 +1,6 @@
{
"title": "Resistance",
+ "code-editor-theme": "Twilight.tmTheme",
"colors": {
"groupbox_border": "#575554",
"groupbox_background": "#2d2a29",
diff --git a/app/rcc/themes/Yaru Dark.json b/app/rcc/themes/Yaru Dark.json
index ef2eb4dd..c8077a26 100644
--- a/app/rcc/themes/Yaru Dark.json
+++ b/app/rcc/themes/Yaru Dark.json
@@ -1,5 +1,6 @@
{
"title": "Yaru Dark",
+ "code-editor-theme": "Twilight.tmTheme",
"colors": {
"groupbox_border": "#4a4a4a",
"groupbox_background": "#2c2c2c",
diff --git a/app/rcc/themes/Yaru Light.json b/app/rcc/themes/Yaru Light.json
index c471ceb6..7e87d916 100644
--- a/app/rcc/themes/Yaru Light.json
+++ b/app/rcc/themes/Yaru Light.json
@@ -1,5 +1,6 @@
{
"title": "Yaru Light",
+ "code-editor-theme": "IDLE.tmTheme",
"colors": {
"groupbox_border": "#cccccc",
"groupbox_background": "#f8f8f8",
diff --git a/app/rcc/themes/macOS Dark.json b/app/rcc/themes/macOS Dark.json
index 26b6dbdd..84c695c0 100644
--- a/app/rcc/themes/macOS Dark.json
+++ b/app/rcc/themes/macOS Dark.json
@@ -1,5 +1,6 @@
{
"title": "macOS Dark",
+ "code-editor-theme": "Twilight.tmTheme",
"colors": {
"groupbox_border": "#4a4a4a",
"groupbox_background": "#2b2b2b",
diff --git a/app/rcc/themes/macOS Light.json b/app/rcc/themes/macOS Light.json
index d92e93e0..e879952d 100644
--- a/app/rcc/themes/macOS Light.json
+++ b/app/rcc/themes/macOS Light.json
@@ -1,5 +1,6 @@
{
"title": "macOS Light",
+ "code-editor-theme": "Eiffel.tmTheme",
"colors": {
"groupbox_border": "#d1d1d1",
"groupbox_background": "#f1f1f1",
diff --git a/app/src/JSON/FrameParser.cpp b/app/src/JSON/FrameParser.cpp
index 0c4dae27..e2064e43 100644
--- a/app/src/JSON/FrameParser.cpp
+++ b/app/src/JSON/FrameParser.cpp
@@ -34,16 +34,21 @@
#include "Misc/TimerEvents.h"
#include "Misc/ThemeManager.h"
-/**
- * Creates a subclass of @c QPlainTextEdit that allows us to call the given
- * protected/private @a function and pass the given @a event as a parameter to
- * the @a function.
- */
-#define DW_EXEC_EVENT(pointer, function, event) \
- class PwnedWidget : public QPlainTextEdit \
+#include "edbee/models/textdocument.h"
+#include "edbee/models/texteditorconfig.h"
+#include "edbee/models/textgrammar.h"
+#include "edbee/models/textundostack.h"
+#include "edbee/texteditorcontroller.h"
+#include "edbee/views/components/texteditorcomponent.h"
+#include "edbee/views/texteditorscrollarea.h"
+#include "edbee/views/textrenderer.h"
+#include "edbee/views/texttheme.h"
+
+#define DW_EXEC_EVENT(pointer, object, function, event) \
+ class PwnedWidget : public object \
{ \
public: \
- using QPlainTextEdit::function; \
+ using object::function; \
}; \
static_cast(pointer)->function(event);
@@ -62,7 +67,7 @@ JSON::FrameParser::FrameParser(QQuickItem *parent)
setFillColor(Misc::ThemeManager::instance().getColor(QStringLiteral("base")));
// Widgets don't process touch events, disable it
- setAcceptTouchEvents(false);
+ setAcceptTouchEvents(true);
// Set item flags, we need these to forward Quick events to the widget
setFlag(ItemHasContents, true);
@@ -70,12 +75,23 @@ JSON::FrameParser::FrameParser(QQuickItem *parent)
setFlag(ItemAcceptsInputMethod, true);
setAcceptedMouseButtons(Qt::AllButtons);
- // Setup syntax highlighter
- m_highlighter = new QSourceHighlite::QSourceHighliter(m_textEdit.document());
- m_highlighter->setCurrentLanguage(QSourceHighlite::QSourceHighliter::CodeJs);
+ // Configure EDBEE
+ auto *edbee = edbee::Edbee::instance();
+ edbee->autoInit();
+ edbee->autoShutDownOnAppExit();
- // Setup text editor
- m_textEdit.setFont(Misc::CommonFonts::instance().monoFont());
+ // Create a text editor widget
+ m_widget = new edbee::TextEditorWidget();
+
+ // Configure the widget options
+ m_widget->config()->setUseTabChar(false);
+ m_widget->config()->setAutocompleteAutoShow(false);
+ m_widget->config()->setFont(Misc::CommonFonts::instance().monoFont());
+
+ // Read grammar file for Javascript
+ m_widget->textDocument()->setLanguageGrammar(
+ edbee->grammarManager()->readGrammarFile(
+ ":/rcc/edbee/syntaxfiles/JavaScript.tmLanguage"));
// Configure JavaScript engine
m_engine.installExtensions(QJSEngine::ConsoleExtension
@@ -90,7 +106,7 @@ JSON::FrameParser::FrameParser(QQuickItem *parent)
this, &JSON::FrameParser::onThemeChanged);
// Connect modification check signals
- connect(m_textEdit.document(), &QTextDocument::modificationChanged, this,
+ connect(m_widget->textDocument(), &edbee::TextDocument::textChanged, this,
[=] { Q_EMIT modifiedChanged(); });
connect(this, &JSON::FrameParser::modifiedChanged, this, [=] {
if (isModified() && !JSON::ProjectModel::instance().modified())
@@ -103,8 +119,8 @@ JSON::FrameParser::FrameParser(QQuickItem *parent)
&JSON::FrameParser::readCode);
// Bridge signals
- connect(&m_textEdit, &QPlainTextEdit::textChanged, this,
- &JSON::FrameParser::textChanged);
+ connect(m_widget->textDocument(), &edbee::TextDocument::textChanged, this,
+ [=] { Q_EMIT textChanged(); });
// Resize widget to fit QtQuick item
connect(this, &QQuickPaintedItem::widthChanged, this,
@@ -142,7 +158,7 @@ const QString &JSON::FrameParser::defaultCode()
*/
QString JSON::FrameParser::text() const
{
- return m_textEdit.document()->toPlainText();
+ return m_widget->textDocument()->text();
}
/**
@@ -151,7 +167,7 @@ QString JSON::FrameParser::text() const
*/
bool JSON::FrameParser::isModified() const
{
- return m_textEdit.document()->isModified();
+ return m_widget->textDocument()->textUndoStack()->size() > 0;
}
/**
@@ -179,6 +195,21 @@ QStringList JSON::FrameParser::parse(const QString &frame)
return list;
}
+/**
+ * @brief Returns @c true whenever if there are any actions that can be undone.
+ */
+bool JSON::FrameParser::undoAvailable() const
+{
+ return isModified() && m_widget->textDocument()->textUndoStack()->canUndo();
+}
+/**
+ * @brief Returns @c true whenever if there are any actions that can be redone.
+ */
+bool JSON::FrameParser::redoAvailable() const
+{
+ return isModified() && m_widget->textDocument()->textUndoStack()->canRedo();
+}
+
/**
* @brief Validates the script and stores it into the project model.
* @param silent if set to @c false, the user shall be notified that the script
@@ -189,10 +220,10 @@ QStringList JSON::FrameParser::parse(const QString &frame)
bool JSON::FrameParser::save(const bool silent)
{
// Update text edit
- if (loadScript(m_textEdit.toPlainText()))
+ if (loadScript(text()))
{
- m_textEdit.document()->setModified(false);
- ProjectModel::instance().setFrameParserCode(m_textEdit.toPlainText());
+ ProjectModel::instance().setFrameParserCode(text());
+ m_widget->textDocument()->textUndoStack()->clear();
// Show save messagebox
if (!silent)
@@ -201,6 +232,7 @@ bool JSON::FrameParser::save(const bool silent)
tr("No errors have been detected in the code."));
// Everything good
+ Q_EMIT modifiedChanged();
return true;
}
@@ -344,7 +376,7 @@ bool JSON::FrameParser::loadScript(const QString &script)
*/
void JSON::FrameParser::cut()
{
- m_textEdit.cut();
+ m_widget->controller()->executeCommand("cut");
}
/**
@@ -352,7 +384,7 @@ void JSON::FrameParser::cut()
*/
void JSON::FrameParser::undo()
{
- m_textEdit.undo();
+ m_widget->controller()->executeCommand("undo");
}
/**
@@ -360,7 +392,7 @@ void JSON::FrameParser::undo()
*/
void JSON::FrameParser::redo()
{
- m_textEdit.redo();
+ m_widget->controller()->executeCommand("redo");
}
/**
@@ -369,7 +401,7 @@ void JSON::FrameParser::redo()
void JSON::FrameParser::help()
{
// clang-format off
- const auto url = QStringLiteral("https://github.com/Serial-Studio/Serial-Studio/wiki/Project-Editor#frame-parser-function-view");
+ const auto url = QStringLiteral("https://github.com/Serial-Studio/Serial-Studio/wiki/Data-Flow-in-Serial-Studio#frame-parser-function");
QDesktopServices::openUrl(QUrl(url));
// clang-format on
}
@@ -379,7 +411,7 @@ void JSON::FrameParser::help()
*/
void JSON::FrameParser::copy()
{
- m_textEdit.copy();
+ m_widget->controller()->executeCommand("copy");
}
/**
@@ -387,11 +419,7 @@ void JSON::FrameParser::copy()
*/
void JSON::FrameParser::paste()
{
- if (m_textEdit.canPaste())
- {
- m_textEdit.paste();
- Q_EMIT modifiedChanged();
- }
+ m_widget->controller()->executeCommand("paste");
}
/**
@@ -422,7 +450,7 @@ void JSON::FrameParser::apply()
void JSON::FrameParser::reload()
{
// Document has been modified, ask user if he/she wants to continue
- if (m_textEdit.document()->isModified())
+ if (isModified())
{
auto ret = Misc::Utilities::showMessageBox(
tr("The document has been modified!"),
@@ -433,7 +461,7 @@ void JSON::FrameParser::reload()
}
// Load default template
- m_textEdit.setPlainText(defaultCode());
+ m_widget->textDocument()->setText(defaultCode());
(void)save(true);
}
@@ -443,7 +471,7 @@ void JSON::FrameParser::reload()
void JSON::FrameParser::import()
{
// Document has been modified, ask user if he/she wants to continue
- if (m_textEdit.document()->isModified())
+ if (isModified())
{
auto ret = Misc::Utilities::showMessageBox(
tr("The document has been modified!"),
@@ -464,8 +492,8 @@ void JSON::FrameParser::import()
QFile file(path);
if (file.open(QFile::ReadOnly))
{
- auto data = file.readAll();
- m_textEdit.setPlainText(QString::fromUtf8(data));
+ m_widget->textDocument()->setText(QString::fromUtf8(file.readAll()));
+ file.close();
(void)save(true);
}
}
@@ -476,13 +504,13 @@ void JSON::FrameParser::import()
*/
void JSON::FrameParser::readCode()
{
- m_textEdit.document()->setModified(false);
-
const auto code = ProjectModel::instance().frameParserCode();
- if (m_textEdit.toPlainText() != code)
+ if (text() != code)
{
- m_textEdit.setPlainText(code);
+ m_widget->textDocument()->setText(code);
+ m_widget->textDocument()->textUndoStack()->clear();
(void)loadScript(code);
+ Q_EMIT modifiedChanged();
}
}
@@ -491,7 +519,7 @@ void JSON::FrameParser::readCode()
*/
void JSON::FrameParser::selectAll()
{
- m_textEdit.selectAll();
+ m_widget->controller()->executeCommand("sel_all");
}
/**
@@ -500,18 +528,11 @@ void JSON::FrameParser::selectAll()
*/
void JSON::FrameParser::onThemeChanged()
{
- QPalette palette;
- auto theme = &Misc::ThemeManager::instance();
- palette.setColor(QPalette::Text, theme->getColor("text"));
- palette.setColor(QPalette::Base, theme->getColor("base"));
- palette.setColor(QPalette::Button, theme->getColor("button"));
- palette.setColor(QPalette::Window, theme->getColor("window"));
- palette.setColor(QPalette::Highlight, theme->getColor("highlight"));
- palette.setColor(QPalette::HighlightedText,
- theme->getColor("highlighted_text"));
- palette.setColor(QPalette::PlaceholderText,
- theme->getColor("placeholder_text"));
- m_textEdit.setPalette(palette);
+ static const auto *t = &Misc::ThemeManager::instance();
+ const auto n = t->themeData().value("code-editor-theme").toString();
+ const auto f = QString(":/rcc/edbee/themes/%1").arg(n);
+ const auto d = edbee::Edbee::instance()->themeManager()->readThemeFile(f);
+ m_widget->textRenderer()->setTheme(d);
}
/**
@@ -520,9 +541,9 @@ void JSON::FrameParser::onThemeChanged()
*/
void JSON::FrameParser::renderWidget()
{
- if (isVisible())
+ if (isVisible() && m_widget)
{
- m_pixmap = m_textEdit.grab();
+ m_pixmap = m_widget->grab();
update();
}
}
@@ -534,7 +555,9 @@ void JSON::FrameParser::resizeWidget()
{
if (width() > 0 && height() > 0)
{
- m_textEdit.setFixedSize(width(), height());
+ m_widget->setFixedSize(width(), height());
+ m_widget->updateRendererViewport();
+ m_widget->updateComponents();
renderWidget();
}
}
@@ -554,7 +577,8 @@ void JSON::FrameParser::paint(QPainter *painter)
*/
void JSON::FrameParser::keyPressEvent(QKeyEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, keyPressEvent, event);
+ DW_EXEC_EVENT(m_widget->textEditorComponent(), edbee::TextEditorComponent,
+ keyPressEvent, event);
}
/**
@@ -562,7 +586,8 @@ void JSON::FrameParser::keyPressEvent(QKeyEvent *event)
*/
void JSON::FrameParser::keyReleaseEvent(QKeyEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, keyReleaseEvent, event);
+ DW_EXEC_EVENT(m_widget->textEditorComponent(), edbee::TextEditorComponent,
+ keyReleaseEvent, event);
}
/**
@@ -570,7 +595,8 @@ void JSON::FrameParser::keyReleaseEvent(QKeyEvent *event)
*/
void JSON::FrameParser::inputMethodEvent(QInputMethodEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, inputMethodEvent, event);
+ DW_EXEC_EVENT(m_widget->textEditorComponent(), edbee::TextEditorComponent,
+ inputMethodEvent, event);
}
/**
@@ -578,7 +604,8 @@ void JSON::FrameParser::inputMethodEvent(QInputMethodEvent *event)
*/
void JSON::FrameParser::focusInEvent(QFocusEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, focusInEvent, event);
+ DW_EXEC_EVENT(m_widget->textEditorComponent(), edbee::TextEditorComponent,
+ focusInEvent, event);
}
/**
@@ -586,7 +613,8 @@ void JSON::FrameParser::focusInEvent(QFocusEvent *event)
*/
void JSON::FrameParser::focusOutEvent(QFocusEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, focusOutEvent, event);
+ DW_EXEC_EVENT(m_widget->textEditorComponent(), edbee::TextEditorComponent,
+ focusOutEvent, event);
}
/**
@@ -594,7 +622,8 @@ void JSON::FrameParser::focusOutEvent(QFocusEvent *event)
*/
void JSON::FrameParser::mousePressEvent(QMouseEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, mousePressEvent, event);
+ DW_EXEC_EVENT(m_widget->textEditorComponent(), edbee::TextEditorComponent,
+ mousePressEvent, event);
}
/**
@@ -602,7 +631,8 @@ void JSON::FrameParser::mousePressEvent(QMouseEvent *event)
*/
void JSON::FrameParser::mouseMoveEvent(QMouseEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, mouseMoveEvent, event);
+ DW_EXEC_EVENT(m_widget->textEditorComponent(), edbee::TextEditorComponent,
+ mouseMoveEvent, event);
}
/**
@@ -610,7 +640,8 @@ void JSON::FrameParser::mouseMoveEvent(QMouseEvent *event)
*/
void JSON::FrameParser::mouseReleaseEvent(QMouseEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, mouseReleaseEvent, event);
+ DW_EXEC_EVENT(m_widget->textEditorComponent(), edbee::TextEditorComponent,
+ mouseReleaseEvent, event);
}
/**
@@ -618,7 +649,8 @@ void JSON::FrameParser::mouseReleaseEvent(QMouseEvent *event)
*/
void JSON::FrameParser::mouseDoubleClickEvent(QMouseEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, mouseDoubleClickEvent, event);
+ DW_EXEC_EVENT(m_widget->textEditorComponent(), edbee::TextEditorComponent,
+ mouseDoubleClickEvent, event);
}
/**
@@ -626,7 +658,8 @@ void JSON::FrameParser::mouseDoubleClickEvent(QMouseEvent *event)
*/
void JSON::FrameParser::wheelEvent(QWheelEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, wheelEvent, event);
+ DW_EXEC_EVENT(m_widget->textScrollArea(), edbee::TextEditorScrollArea,
+ wheelEvent, event);
}
/**
@@ -634,7 +667,8 @@ void JSON::FrameParser::wheelEvent(QWheelEvent *event)
*/
void JSON::FrameParser::dragEnterEvent(QDragEnterEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, dragEnterEvent, event);
+ DW_EXEC_EVENT(m_widget->textEditorComponent(), edbee::TextEditorComponent,
+ dragEnterEvent, event);
}
/**
@@ -642,7 +676,8 @@ void JSON::FrameParser::dragEnterEvent(QDragEnterEvent *event)
*/
void JSON::FrameParser::dragMoveEvent(QDragMoveEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, dragMoveEvent, event);
+ DW_EXEC_EVENT(m_widget->textEditorComponent(), edbee::TextEditorComponent,
+ dragMoveEvent, event);
}
/**
@@ -650,7 +685,8 @@ void JSON::FrameParser::dragMoveEvent(QDragMoveEvent *event)
*/
void JSON::FrameParser::dragLeaveEvent(QDragLeaveEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, dragLeaveEvent, event);
+ DW_EXEC_EVENT(m_widget->textEditorComponent(), edbee::TextEditorComponent,
+ dragLeaveEvent, event);
}
/**
@@ -658,5 +694,6 @@ void JSON::FrameParser::dragLeaveEvent(QDragLeaveEvent *event)
*/
void JSON::FrameParser::dropEvent(QDropEvent *event)
{
- DW_EXEC_EVENT(&m_textEdit, dropEvent, event);
+ DW_EXEC_EVENT(m_widget->textEditorComponent(), edbee::TextEditorComponent,
+ dropEvent, event);
}
diff --git a/app/src/JSON/FrameParser.h b/app/src/JSON/FrameParser.h
index 3d57fa3a..60e02f55 100644
--- a/app/src/JSON/FrameParser.h
+++ b/app/src/JSON/FrameParser.h
@@ -32,7 +32,8 @@
#include
#include
-#include
+#include
+#include
namespace JSON
{
@@ -41,6 +42,8 @@ class FrameParser : public QQuickPaintedItem
Q_OBJECT
Q_PROPERTY(QString text READ text NOTIFY textChanged)
Q_PROPERTY(bool isModified READ isModified NOTIFY modifiedChanged)
+ Q_PROPERTY(bool undoAvailable READ undoAvailable NOTIFY modifiedChanged)
+ Q_PROPERTY(bool redoAvailable READ redoAvailable NOTIFY modifiedChanged)
signals:
void textChanged();
@@ -55,6 +58,8 @@ public:
[[nodiscard]] bool isModified() const;
[[nodiscard]] QStringList parse(const QString &frame);
+ [[nodiscard]] bool undoAvailable() const;
+ [[nodiscard]] bool redoAvailable() const;
[[nodiscard]] bool save(const bool silent = false);
[[nodiscard]] bool loadScript(const QString &script);
@@ -99,7 +104,6 @@ private:
QPixmap m_pixmap;
QJSEngine m_engine;
QJSValue m_parseFunction;
- QPlainTextEdit m_textEdit;
- QSourceHighlite::QSourceHighliter *m_highlighter;
+ edbee::TextEditorWidget *m_widget;
};
} // namespace JSON
diff --git a/app/src/Misc/ThemeManager.cpp b/app/src/Misc/ThemeManager.cpp
index f36ace1c..2b536656 100644
--- a/app/src/Misc/ThemeManager.cpp
+++ b/app/src/Misc/ThemeManager.cpp
@@ -68,10 +68,9 @@ Misc::ThemeManager::ThemeManager()
QFile file(QStringLiteral(":/rcc/themes/%1.json").arg(theme));
if (file.open(QFile::ReadOnly))
{
- auto document = QJsonDocument::fromJson(file.readAll());
- auto title = document.object().value("title").toString();
- auto colors = document.object().value("colors").toObject();
- m_themes.insert(title, colors);
+ const auto document = QJsonDocument::fromJson(file.readAll());
+ const auto title = document.object().value("title").toString();
+ m_themes.insert(title, document.object());
file.close();
}
@@ -121,6 +120,15 @@ const QJsonObject &Misc::ThemeManager::colors() const
return m_colors;
}
+/**
+ * @brief Fetches the current theme as a QJsonObject.
+ * @return QJsonObject containing all the properties of the loaded theme.
+ */
+const QJsonObject &Misc::ThemeManager::themeData() const
+{
+ return m_themeData;
+}
+
/**
* @brief Returns a list of theme names that are available.
* @return QStringList containing the names of all loaded themes.
@@ -158,11 +166,14 @@ void Misc::ThemeManager::setTheme(const int index)
if (index < 0 || index >= availableThemes().count())
filteredIndex = 0;
- // Update the theme & obtain the colors
+ // Update the theme name
m_theme = filteredIndex;
m_settings.setValue("Theme", filteredIndex);
m_themeName = availableThemes().at(filteredIndex);
- m_colors = m_themes.value(m_themeName);
+
+ // Obtain the data for the theme name
+ m_themeData = m_themes.value(m_themeName);
+ m_colors = m_themeData.value("colors").toObject();
// Tell OS if we prefer dark mode or light mode
auto bg = getColor("base");
diff --git a/app/src/Misc/ThemeManager.h b/app/src/Misc/ThemeManager.h
index ada95928..8a0bd67c 100644
--- a/app/src/Misc/ThemeManager.h
+++ b/app/src/Misc/ThemeManager.h
@@ -127,6 +127,7 @@ public:
[[nodiscard]] int theme() const;
[[nodiscard]] const QString &themeName() const;
[[nodiscard]] const QJsonObject &colors() const;
+ [[nodiscard]] const QJsonObject &themeData() const;
[[nodiscard]] const QStringList &availableThemes() const;
[[nodiscard]] QColor getColor(const QString &name) const;
@@ -139,6 +140,7 @@ private:
QSettings m_settings;
QJsonObject m_colors;
+ QJsonObject m_themeData;
QStringList m_availableThemes;
QMap m_themes;
diff --git a/app/src/SIMD/SIMD.h b/app/src/SIMD/SIMD.h
index bba516e3..d46b967b 100644
--- a/app/src/SIMD/SIMD.h
+++ b/app/src/SIMD/SIMD.h
@@ -25,7 +25,7 @@
#include
#include
#include
-#include
+#include
#include
#include
@@ -51,13 +51,13 @@ template
inline void fill(T *data, size_t count, T value)
{
// Get the number of items that can be processed in a SIMD register
- constexpr int simdWidth = sizeof(simde__m128d) / sizeof(T);
+ constexpr int simdWidth = sizeof(simde__m256d) / sizeof(T);
// SIMD bulk initialization
size_t i = 0;
- simde__m128d fillValue = simde_mm_set1_pd(value);
+ simde__m256d fillValue = simde_mm256_set1_pd(value);
for (; i + simdWidth <= count; i += simdWidth)
- simde_mm_storeu_pd(data + i, fillValue);
+ simde_mm256_storeu_pd(data + i, fillValue);
// Handle remaining elements using a scalar loop
for (; i < count; ++i)
@@ -82,14 +82,14 @@ template
inline void shift(T *data, size_t count, T value)
{
// Get the number of items that can be processed in a SIMD register
- constexpr int simdWidth = sizeof(simde__m128d) / sizeof(T);
+ constexpr int simdWidth = sizeof(simde__m256d) / sizeof(T);
// Shift elements using SIMD operations
size_t i = 0;
for (; i + simdWidth <= count; i += simdWidth)
{
- simde__m128d next = simde_mm_loadu_pd(data + i + 1);
- simde_mm_storeu_pd(data + i, next);
+ simde__m256d next = simde_mm256_loadu_pd(data + i + 1);
+ simde_mm256_storeu_pd(data + i, next);
}
// Handle remaining elements using a scalar loop
@@ -116,21 +116,21 @@ template
inline T findMin(const T *data, size_t count)
{
// Get the number of items that can be processed in a SIMD register
- constexpr int simdWidth = sizeof(simde__m128d) / sizeof(T);
+ constexpr int simdWidth = sizeof(simde__m256d) / sizeof(T);
// SIMD comparisons
size_t i = 0;
- simde__m128d minVec = simde_mm_set1_pd(data[0]);
+ simde__m256d minVec = simde_mm256_set1_pd(data[0]);
for (; i + simdWidth <= count; i += simdWidth)
{
- simde__m128d values = simde_mm_loadu_pd(&data[i]);
- minVec = simde_mm_min_pd(minVec, values);
+ simde__m256d values = simde_mm256_loadu_pd(&data[i]);
+ minVec = simde_mm256_min_pd(minVec, values);
}
// Reduce SIMD register to scalar
T minVal = data[0];
alignas(simdWidth) T buffer[simdWidth];
- simde_mm_storeu_pd(buffer, minVec);
+ simde_mm256_storeu_pd(buffer, minVec);
for (int j = 0; j < simdWidth; ++j)
minVal = std::min(minVal, buffer[j]);
@@ -157,21 +157,21 @@ template
inline T findMax(const T *data, size_t count)
{
// Get the number of items that can be processed in a SIMD register
- constexpr int simdWidth = sizeof(simde__m128d) / sizeof(T);
+ constexpr int simdWidth = sizeof(simde__m256d) / sizeof(T);
// SIMD comparisons
size_t i = 0;
- simde__m128d maxVec = simde_mm_set1_pd(data[0]);
+ simde__m256d maxVec = simde_mm256_set1_pd(data[0]);
for (; i + simdWidth <= count; i += simdWidth)
{
- simde__m128d values = simde_mm_loadu_pd(&data[i]);
- maxVec = simde_mm_max_pd(maxVec, values);
+ simde__m256d values = simde_mm256_loadu_pd(&data[i]);
+ maxVec = simde_mm256_max_pd(maxVec, values);
}
// Reduce SIMD register to scalar
T maxVal = data[0];
alignas(simdWidth) T buffer[simdWidth];
- simde_mm_storeu_pd(buffer, maxVec);
+ simde_mm256_storeu_pd(buffer, maxVec);
for (int j = 0; j < simdWidth; ++j)
maxVal = std::max(maxVal, buffer[j]);
@@ -204,23 +204,31 @@ template
inline qreal findMin(const QVector &data, Extractor extractor)
{
// Get the number of items that can be processed in a SIMD register
- constexpr int simdWidth = sizeof(simde__m128d) / sizeof(qreal);
+ constexpr int simdWidth = sizeof(simde__m256d) / sizeof(qreal);
- // SIMD comparisons
+ // Prepare parameters for comparisons
size_t i = 0;
size_t count = data.size();
- auto minVec = simde_mm_set1_pd(extractor(data[0]));
+ if (count == 0)
+ return 0;
+
+ // Initialize SIMD vector with the first extracted value
+ simde__m256d minVec = simde_mm256_set1_pd(extractor(data[0]));
+
+ // SIMD comparisons
for (; i + simdWidth <= count; i += simdWidth)
{
- auto values = simde_mm_set_pd(extractor(data[i + 1]), extractor(data[i]));
- minVec = simde_mm_min_pd(minVec, values);
+ simde__m256d values
+ = simde_mm256_set_pd(extractor(data[i + 3]), extractor(data[i + 2]),
+ extractor(data[i + 1]), extractor(data[i]));
+ minVec = simde_mm256_min_pd(minVec, values);
}
// Reduce SIMD register to scalar
- qreal minVal = extractor(data[0]);
- alignas(16) qreal buffer[simdWidth];
- simde_mm_storeu_pd(buffer, minVec);
- for (int j = 0; j < simdWidth; ++j)
+ alignas(32) qreal buffer[simdWidth];
+ simde_mm256_storeu_pd(buffer, minVec);
+ qreal minVal = buffer[0];
+ for (int j = 1; j < simdWidth; ++j)
minVal = std::min(minVal, buffer[j]);
// Scalar fallback for remaining elements
@@ -252,23 +260,31 @@ template
inline qreal findMax(const QVector &data, Extractor extractor)
{
// Get the number of items that can be processed in a SIMD register
- constexpr int simdWidth = sizeof(simde__m128d) / sizeof(qreal);
+ constexpr int simdWidth = sizeof(simde__m256d) / sizeof(qreal);
- // SIMD comparisons
+ // Prepare parameters for comparisons
size_t i = 0;
size_t count = data.size();
- auto maxVec = simde_mm_set1_pd(extractor(data[0]));
+ if (count == 0)
+ return 0;
+
+ // Initialize SIMD vector with the first extracted value
+ simde__m256d maxVec = simde_mm256_set1_pd(extractor(data[0]));
+
+ // SIMD comparisons
for (; i + simdWidth <= count; i += simdWidth)
{
- auto values = simde_mm_set_pd(extractor(data[i + 1]), extractor(data[i]));
- maxVec = simde_mm_max_pd(maxVec, values);
+ simde__m256d values
+ = simde_mm256_set_pd(extractor(data[i + 3]), extractor(data[i + 2]),
+ extractor(data[i + 1]), extractor(data[i]));
+ maxVec = simde_mm256_max_pd(maxVec, values);
}
// Reduce SIMD register to scalar
- qreal maxVal = extractor(data[0]);
- alignas(16) qreal buffer[simdWidth];
- simde_mm_storeu_pd(buffer, maxVec);
- for (int j = 0; j < simdWidth; ++j)
+ alignas(32) qreal buffer[simdWidth];
+ simde_mm256_storeu_pd(buffer, maxVec);
+ qreal maxVal = buffer[0];
+ for (int j = 1; j < simdWidth; ++j)
maxVal = std::max(maxVal, buffer[j]);
// Scalar fallback for remaining elements
diff --git a/app/src/UI/Dashboard.cpp b/app/src/UI/Dashboard.cpp
index bb5055e6..b1947491 100644
--- a/app/src/UI/Dashboard.cpp
+++ b/app/src/UI/Dashboard.cpp
@@ -725,7 +725,7 @@ void UI::Dashboard::updatePlots()
const auto &dataset = getDatasetWidget(SerialStudio::DashboardPlot, i);
auto *data = m_linearPlotValues[i].data();
auto count = m_linearPlotValues[i].count();
- SIMD::shift(data, count, dataset.value().toDouble());
+ SIMD::shift(data, count, dataset.value().toFloat());
}
// Append latest values to FFT plots data
@@ -734,7 +734,7 @@ void UI::Dashboard::updatePlots()
const auto &dataset = getDatasetWidget(SerialStudio::DashboardFFT, i);
auto *data = m_fftPlotValues[i].data();
auto count = m_fftPlotValues[i].count();
- SIMD::shift(data, count, dataset.value().toDouble());
+ SIMD::shift(data, count, dataset.value().toFloat());
}
// Append latest values to multiplots data
@@ -746,7 +746,7 @@ void UI::Dashboard::updatePlots()
const auto &dataset = group.datasets()[j];
auto *data = m_multiplotValues[i][j].data();
auto count = m_multiplotValues[i][j].count();
- SIMD::shift(data, count, dataset.value().toDouble());
+ SIMD::shift(data, count, dataset.value().toFloat());
}
}
}
diff --git a/examples/HexadecimalADC/HexadecimalADC.json b/examples/HexadecimalADC/HexadecimalADC.json
index 4c70632d..70aa738f 100644
--- a/examples/HexadecimalADC/HexadecimalADC.json
+++ b/examples/HexadecimalADC/HexadecimalADC.json
@@ -4,7 +4,7 @@
"decoder": 1,
"frameDetection": 1,
"frameEnd": ";",
- "frameParser": "/**\n * This function parses a binary data frame (represented as a hexadecimal string),\n * and converts it into an array of decimal values (0-255).\n *\n * @param[in] frame The latest received frame as a hexadecimal string.\n * @return Array of integers containing the parsed frame elements.\n */\nfunction parse(frame) {\n let dataArray = [];\n for (let i = 0; i < frame.length; i += 2) {\n let hexByte = frame.substring(i, i + 2);\n let decimalValue = parseInt(hexByte, 16);\n dataArray.push(decimalValue * 5.0 / 255);\n }\n\n return dataArray;\n}",
+ "frameParser": "/**\n * This function parses a binary data frame (represented as a hexadecimal string),\n * and converts it into an array of decimal values ranging from 0 to 5 volts.\n *\n * @param[in] frame The latest received frame as a hexadecimal string.\n * @return Array of integers containing the parsed frame elements.\n */\nfunction parse(frame) {\n let dataArray = [];\n for (let i = 0; i < frame.length; i += 2) {\n let hexByte = frame.substring(i, i + 2);\n let decimalValue = parseInt(hexByte, 16);\n dataArray.push(decimalValue * 5.0 / 255);\n }\n\n return dataArray;\n}",
"frameStart": "$",
"groups": [
{
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 992238c6..5e067fd1 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -25,8 +25,8 @@ cmake_minimum_required(VERSION 3.19)
add_subdirectory(simde)
add_subdirectory(qmqtt)
add_subdirectory(OpenSSL)
+add_subdirectory(edbee-lib)
add_subdirectory(QRealFourier)
add_subdirectory(QSimpleUpdater)
-add_subdirectory(QSourceHighlite)
diff --git a/lib/QSourceHighlite/.clang-format b/lib/QSourceHighlite/.clang-format
deleted file mode 100644
index d83582fc..00000000
--- a/lib/QSourceHighlite/.clang-format
+++ /dev/null
@@ -1,38 +0,0 @@
-BasedOnStyle: LLVM
-Standard: Cpp11
-CommentPragmas: "^!|^:"
-PointerBindsToType: false
-SpaceAfterTemplateKeyword: false
-BreakBeforeBinaryOperators: All
-BreakBeforeBraces: Custom
-BreakBeforeTernaryOperators: true
-BreakConstructorInitializers: BeforeComma
-ConstructorInitializerIndentWidth: 2
-NamespaceIndentation: None
-AlignAfterOpenBracket: true
-AlwaysBreakTemplateDeclarations: true
-AllowShortFunctionsOnASingleLine: Inline
-SortIncludes: false
-IndentCaseLabels: true
-IndentPPDirectives: AfterHash
-AccessModifierOffset: -2
-IndentWidth: 2
-ColumnLimit: 80
-
-BraceWrapping:
- AfterClass: true
- AfterControlStatement: true
- AfterEnum: true
- AfterFunction: true
- AfterNamespace: true
- AfterObjCDeclaration: true
- AfterStruct: true
- AfterUnion: true
- BeforeCatch: true
- BeforeElse: true
- IndentBraces: false
-
-ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH, forever, Q_FOREVER, QBENCHMARK, QBENCHMARK_ONCE ]
-#StatementMacros ['Q_OBJECT', 'Q_UNUSED']
-
-
diff --git a/lib/QSourceHighlite/.gitignore b/lib/QSourceHighlite/.gitignore
deleted file mode 100755
index 5ba03410..00000000
--- a/lib/QSourceHighlite/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-build-*
-*.user
diff --git a/lib/QSourceHighlite/CMakeLists.txt b/lib/QSourceHighlite/CMakeLists.txt
deleted file mode 100644
index e633c632..00000000
--- a/lib/QSourceHighlite/CMakeLists.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# Copyright (c) 2024 Alex Spataru
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-
-#-------------------------------------------------------------------------------
-# Project setup
-#-------------------------------------------------------------------------------
-
-cmake_minimum_required(VERSION 3.19)
-project(QSourceHighlite CXX)
-
-#-------------------------------------------------------------------------------
-# C++ options
-#-------------------------------------------------------------------------------
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTOUIC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_CXX_STANDARD 17)
-set(CMAKE_VERBOSE_MAKEFILE ON)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-
-#-------------------------------------------------------------------------------
-# Add external dependencies
-#-------------------------------------------------------------------------------
-
-find_package(Qt6 COMPONENTS Gui Core Widgets REQUIRED)
-
-#-------------------------------------------------------------------------------
-# Import source code & resources
-#-------------------------------------------------------------------------------
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-
-set(SOURCES
- languagedata.cpp
- qsourcehighliter.cpp
- qsourcehighliterthemes.cpp
-)
-
-set(HEADERS
- languagedata.h
- qsourcehighliter.h
- qsourcehighliterthemes.h
-)
-
-#-------------------------------------------------------------------------------
-# Compile & link the library
-#-------------------------------------------------------------------------------
-
-add_library(
- QSourceHighlite
- STATIC
- ${SOURCES}
- ${HEADERS}
-)
-
-target_link_libraries(
- QSourceHighlite PUBLIC
-
- Qt6::Core
- Qt6::Gui
- Qt6::Widgets
-)
-
-target_include_directories(
- QSourceHighlite PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}
-)
diff --git a/lib/QSourceHighlite/LICENSE b/lib/QSourceHighlite/LICENSE
deleted file mode 100755
index f0c6f9a1..00000000
--- a/lib/QSourceHighlite/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2019-2020 Waqar Ahmed --
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/lib/QSourceHighlite/README.md b/lib/QSourceHighlite/README.md
deleted file mode 100755
index 21c7b4a6..00000000
--- a/lib/QSourceHighlite/README.md
+++ /dev/null
@@ -1,65 +0,0 @@
-# Background
-
-It started as an internal component of [qmarkdowntextedit](https://github.com/pbek/qmarkdowntextedit) to provide syntax highlighting(kind of like **highlight.js**). Ithttps://github.com/pbek/qmarkdowntextedit is currently being used in QOwnNotes and you can test it there or run the demo here.
-
-It doesn't use any regex because I want it to be fast. It can currently load a 100,000 lines of source code in ~0.4 seconds on my 4th Gen Intel Core i5 4300U.
-
-# Screenshot
-
-![Cpp](screenshot/syntax.png)
-
-# Usage
-
-Add the `.pri` file to your project. Then initialize it like this:
-```cpp
-highlighter = new QSourceHighliter(plainTextEdit->document());
-highlighter->setCurrentLanguage(QSourceHighlighter::CodeCpp);
-```
-
-# Themes
-
-Currently there is only one theme 'Monokai' apart from the one that is created during highlighter initialization. More themes will be added soon. You can add more themes in QSourceHighlighterThemes.
-
-## Supported Languages
-
-Currently the following languages are supported (more being added):
-- Bash script
-- C
-- C++
-- C#
-- CMake
-- CSS
-- Go
-- Html
-- INI
-- Java
-- Javascript
-- JSON
-- Make
-- PHP
-- Python
-- QML
-- Rust
-- SQL
-- Typescript
-- V lang
-- XML
-- YAML
-- Houdini Vex
-
-## Adding more languages
-
-If you want to add a language, collect the language data like keywords and types and add it to the `languagedata.h` file. For some languages it may not work, so create an issue and I will write a separate parser for that language.
-
-## Dependencies
-
-It has no dependency except Qt ofcourse. It should work with any Qt version > 5 but if it fails please create an issue.
-
-## Building
-
-Load the project into Qt Creator and click run.
-
-## LICENSE
-
-MIT License
-
diff --git a/lib/QSourceHighlite/languagedata.cpp b/lib/QSourceHighlite/languagedata.cpp
deleted file mode 100644
index 2a8f9201..00000000
--- a/lib/QSourceHighlite/languagedata.cpp
+++ /dev/null
@@ -1,5698 +0,0 @@
-/*
- * Copyright (c) 2019-2020 Waqar Ahmed --
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-
-#include
-#include
-#include "languagedata.h"
-/* ------------------------
- * TEMPLATE FOR LANG DATA
- * -------------------------
- *
- * loadXXXData, where XXX is the language
- * keywords are the language keywords e.g, const
- * types are built-in types i.e, int, char, var
- * literals are words like, true false
- * builtin are the library functions
- * other can contain any other thing, for e.g, in cpp it contains the
- preprocessor
-
- xxx_keywords = {
- };
-
- xxx_types = {
- };
-
- xxx_literals = {
- };
-
- xxx_builtin = {
- };
-
- xxx_other = {
- };
-
-*/
-
-namespace QSourceHighlite
-{
-
-/**********************************************************/
-/* LuaData ************************************************/
-/**********************************************************/
-
-static bool luaDataInitialized = false;
-static LanguageData lua_keywords;
-static LanguageData lua_types;
-static LanguageData lua_builtin;
-static LanguageData lua_literals;
-static LanguageData lua_other;
-void initLuaData()
-{
- lua_keywords = LanguageData{
- {('a'), QLatin1String("and")}, {('b'), QLatin1String("break")},
- {('d'), QLatin1String("do")}, {('e'), QLatin1String("else")},
- {('e'), QLatin1String("elseif")}, {('e'), QLatin1String("end")},
- {('f'), QLatin1String("for")}, {('f'), QLatin1String("function")},
- {('i'), QLatin1String("if")}, {('i'), QLatin1String("in")},
- {('l'), QLatin1String("local")}, {('n'), QLatin1String("not")},
- {('o'), QLatin1String("or")}, {('r'), QLatin1String("repeat")},
- {('r'), QLatin1String("require")}, {('r'), QLatin1String("return")},
- {('t'), QLatin1String("then")}, {('u'), QLatin1String("until")},
- {('w'), QLatin1String("while")}};
-
- lua_literals = LanguageData{{('f'), QLatin1String("false")},
- {('n'), QLatin1String("nil")},
- {('t'), QLatin1String("true")}};
-
- lua_other = LanguageData{
- {('_'), QLatin1String("_G")}, {('_'), QLatin1String("__add")},
- {('_'), QLatin1String("__call")}, {('_'), QLatin1String("__contact")},
- {('_'), QLatin1String("__div")}, {('_'), QLatin1String("__eq")},
- {('_'), QLatin1String("__index")}, {('_'), QLatin1String("__le")},
- {('_'), QLatin1String("__lt")}, {('_'), QLatin1String("__mod")},
- {('_'), QLatin1String("__mul")}, {('_'), QLatin1String("__newindex")},
- {('_'), QLatin1String("__sub")}, {('_'), QLatin1String("__tostring")},
- {('_'), QLatin1String("__unm")}};
-
- lua_builtin = LanguageData{{('d'), QLatin1String("debug")},
- {('d'), QLatin1String("dofile")},
- {('g'), QLatin1String("getfenv")},
- {('g'), QLatin1String("gethook")},
- {('g'), QLatin1String("getinfo")},
- {('g'), QLatin1String("getlocal")},
- {('g'), QLatin1String("getmetatable")},
- {('g'), QLatin1String("getregistry")},
- {('g'), QLatin1String("getupvalue")},
- {('i'), QLatin1String("ipairs")},
- {('l'), QLatin1String("load")},
- {('l'), QLatin1String("loadfile")},
- {('l'), QLatin1String("loadstring")},
- {('n'), QLatin1String("next")},
- {('p'), QLatin1String("pairs")},
- {('p'), QLatin1String("print")},
- {('r'), QLatin1String("rawequal")},
- {('r'), QLatin1String("rawget")},
- {('r'), QLatin1String("rawset")},
- {('s'), QLatin1String("select")},
- {('s'), QLatin1String("setfenv")},
- {('s'), QLatin1String("sethook")},
- {('s'), QLatin1String("setlocal")},
- {('s'), QLatin1String("setmetatable")},
- {('s'), QLatin1String("setupvalue")},
- {('t'), QLatin1String("tonumber")},
- {('t'), QLatin1String("tostring")},
- {('t'), QLatin1String("traceback")},
- {('t'), QLatin1String("type")},
- {('u'), QLatin1String("unpack")}};
-}
-
-void loadLuaData(LanguageData &typess, LanguageData &keywordss,
- LanguageData &builtins, LanguageData &literalss,
- LanguageData &others)
-{
- if (!luaDataInitialized)
- {
- initLuaData();
- luaDataInitialized = true;
- }
- typess = lua_types;
- keywordss = lua_keywords;
- builtins = lua_builtin;
- literalss = lua_literals;
- others = lua_other;
-}
-
-/**********************************************************/
-/* C/C++ Data *********************************************/
-/**********************************************************/
-
-static bool cppDataInitialized = false;
-static LanguageData cpp_keywords;
-static LanguageData cpp_types;
-static LanguageData cpp_builtin;
-static LanguageData cpp_literals;
-static LanguageData cpp_other;
-void initCppData()
-{
- cpp_keywords = LanguageData{{('a'), QLatin1String("alignas")},
- {('a'), QLatin1String("alignof")},
- {('a'), QLatin1String("and")},
- {('a'), QLatin1String("and_eq")},
- {('a'), QLatin1String("asm")},
- {('b'), QLatin1String("bit_and")},
- {('b'), QLatin1String("bit_or")},
- {('b'), QLatin1String("break")},
- {('c'), QLatin1String("case")},
- {('c'), QLatin1String("catch")},
- {('c'), QLatin1String("compl")},
- {('c'), QLatin1String("concept")},
- {('c'), QLatin1String("const")},
- {('c'), QLatin1String("constinit")},
- {('c'), QLatin1String("constexpr")},
- {('c'), QLatin1String("consteval")},
- {('c'), QLatin1String("const_cast")},
- {('c'), QLatin1String("continue")},
- {('c'), QLatin1String("co_await")},
- {('c'), QLatin1String("co_return")},
- {('c'), QLatin1String("co_yield")},
- {('d'), QLatin1String("decltype")},
- {('d'), QLatin1String("default")},
- {('d'), QLatin1String("delete")},
- {('d'), QLatin1String("do")},
- {('d'), QLatin1String("dynamic_cast")},
- {('e'), QLatin1String("else")},
- {('e'), QLatin1String("explicit")},
- {('e'), QLatin1String("export")},
- {('e'), QLatin1String("extern")},
- {('f'), QLatin1String("for")},
- {('f'), QLatin1String("friend")},
- {('g'), QLatin1String("goto")},
- {('i'), QLatin1String("if")},
- {('i'), QLatin1String("inline")},
- {('m'), QLatin1String("mutable")},
- {('n'), QLatin1String("new")},
- {('n'), QLatin1String("not")},
- {('n'), QLatin1String("not_eq")},
- {('n'), QLatin1String("noexcept")},
- {('o'), QLatin1String("or")},
- {('o'), QLatin1String("or_eq")},
- {('o'), QLatin1String("operator")},
- {('p'), QLatin1String("private")},
- {('p'), QLatin1String("protected")},
- {('p'), QLatin1String("public")},
- {('r'), QLatin1String("register")},
- {('r'), QLatin1String("reinterpret_cast")},
- {('r'), QLatin1String("requires")},
- {('r'), QLatin1String("return")},
- {('s'), QLatin1String("signal")},
- {('s'), QLatin1String("sizeof")},
- {('s'), QLatin1String("slot")},
- {('s'), QLatin1String("static")},
- {('s'), QLatin1String("static_assert")},
- {('s'), QLatin1String("static_cast")},
- {('s'), QLatin1String("switch")},
- {('t'), QLatin1String("template")},
- {('t'), QLatin1String("this")},
- {('t'), QLatin1String("thread_local")},
- {('t'), QLatin1String("throw")},
- {('t'), QLatin1String("try")},
- {('t'), QLatin1String("typeid")},
- {('t'), QLatin1String("typedef")},
- {('t'), QLatin1String("typename")},
- {('u'), QLatin1String("using")},
- {('v'), QLatin1String("volatile")},
- {('w'), QLatin1String("while")},
- {('x'), QLatin1String("xor")},
- {('x'), QLatin1String("xor_eq")}};
-
- cpp_types = {{('a'), QLatin1String("auto")},
- {('b'), QLatin1String("bool")},
- {('c'), QLatin1String("char")},
- {('c'), QLatin1String("char8_t")},
- {('c'), QLatin1String("char16_t")},
- {('c'), QLatin1String("char32_t")},
- {('c'), QLatin1String("class")},
- {('d'), QLatin1String("double")},
- {('e'), QLatin1String("enum")},
- {('f'), QLatin1String("float")},
- {('i'), QLatin1String("int")},
- {('i'), QLatin1String("int8_t")},
- {('i'), QLatin1String("int16_t")},
- {('i'), QLatin1String("int32_t")},
- {('i'), QLatin1String("int64_t")},
- {('i'), QLatin1String("int_fast8_t")},
- {('i'), QLatin1String("int_fast16_t")},
- {('i'), QLatin1String("int_fast32_t")},
- {('i'), QLatin1String("int_fast64_t")},
- {('i'), QLatin1String("intmax_t")},
- {('i'), QLatin1String("intptr_t")},
- {('l'), QLatin1String("long")},
- {('n'), QLatin1String("namespace")},
- {('Q'), QLatin1String("QHash")},
- {('Q'), QLatin1String("QList")},
- {('Q'), QLatin1String("QMap")},
- {('Q'), QLatin1String("QString")},
- {('Q'), QLatin1String("QVector")},
- {('s'), QLatin1String("short")},
- {('s'), QLatin1String("size_t")},
- {('s'), QLatin1String("signed")},
- {('s'), QLatin1String("struct")},
- {('s'), QLatin1String("ssize_t")},
- {('u'), QLatin1String("uint8_t")},
- {('u'), QLatin1String("uint16_t")},
- {('u'), QLatin1String("uint32_t")},
- {('u'), QLatin1String("uint64_t")},
- {('u'), QLatin1String("uint_fast8_t")},
- {('u'), QLatin1String("uint_fast16_t")},
- {('u'), QLatin1String("uint_fast32_t")},
- {('u'), QLatin1String("uint_fast64_t")},
- {('u'), QLatin1String("uint_least8_t")},
- {('u'), QLatin1String("uint_least16_t")},
- {('u'), QLatin1String("uint_least32_t")},
- {('u'), QLatin1String("uint_least64_t")},
- {('u'), QLatin1String("uintmax_t")},
- {('u'), QLatin1String("uintptr_t")},
- {('u'), QLatin1String("unsigned")},
- {('u'), QLatin1String("union")},
- {('v'), QLatin1String("void")},
- {('w'), QLatin1String("wchar_t")}};
-
- cpp_literals = {{('f'), QLatin1String("false")},
- {('n'), QLatin1String("nullptr")},
- {('N'), QLatin1String("NULL")},
- {('t'), QLatin1String("true")}};
-
- cpp_builtin = {{('s'), QLatin1String("std")},
- {('s'), QLatin1String("string")},
- {('w'), QLatin1String("wstring")},
- {('c'), QLatin1String("cin")},
- {('c'), QLatin1String("cout")},
- {('c'), QLatin1String("cerr")},
- {('c'), QLatin1String("clog")},
- {('s'), QLatin1String("stdin")},
- {('s'), QLatin1String("stdout")},
- {('s'), QLatin1String("stderr")},
- {('s'), QLatin1String("stringstream")},
- {('i'), QLatin1String("istringstream")},
- {('o'), QLatin1String("ostringstream")},
- {('a'), QLatin1String("auto_ptr")},
- {('d'), QLatin1String("deque")},
- {('l'), QLatin1String("list")},
- {('q'), QLatin1String("queue")},
- {('s'), QLatin1String("stack")},
- {('v'), QLatin1String("vector")},
- {('m'), QLatin1String("map")},
- {('s'), QLatin1String("set")},
- {('b'), QLatin1String("bitset")},
- {('m'), QLatin1String("multiset")},
- {('m'), QLatin1String("multimap")},
- {('u'), QLatin1String("unordered_set")},
- {('u'), QLatin1String("unordered_map")},
- {('u'), QLatin1String("unordered_multiset")},
- {('u'), QLatin1String("unordered_multimap")},
- {('a'), QLatin1String("array")},
- {('s'), QLatin1String("shared_ptr")},
- {('a'), QLatin1String("abort")},
- {('t'), QLatin1String("terminate")},
- {('a'), QLatin1String("abs")},
- {('a'), QLatin1String("acos")},
- {('a'), QLatin1String("asin")},
- {('a'), QLatin1String("atan2")},
- {('a'), QLatin1String("atan")},
- {('c'), QLatin1String("calloc")},
- {('c'), QLatin1String("ceil")},
- {('c'), QLatin1String("cosh")},
- {('c'), QLatin1String("cos")},
- {('e'), QLatin1String("exit")},
- {('e'), QLatin1String("exp")},
- {('f'), QLatin1String("fabs")},
- {('f'), QLatin1String("floor")},
- {('f'), QLatin1String("fmod")},
- {('f'), QLatin1String("fprintf")},
- {('f'), QLatin1String("fputs")},
- {('f'), QLatin1String("free")},
- {('f'), QLatin1String("frexp")},
- {('f'), QLatin1String("fscanf")},
- {('f'), QLatin1String("future")},
- {('i'), QLatin1String("isalnum")},
- {('i'), QLatin1String("isalpha")},
- {('i'), QLatin1String("iscntrl")},
- {('i'), QLatin1String("isdigit")},
- {('i'), QLatin1String("isgraph")},
- {('i'), QLatin1String("islower")},
- {('i'), QLatin1String("isprint")},
- {('i'), QLatin1String("ispunct")},
- {('i'), QLatin1String("isspace")},
- {('i'), QLatin1String("isupper")},
- {('i'), QLatin1String("isxdigit")},
- {('t'), QLatin1String("tolower")},
- {('t'), QLatin1String("toupper")},
- {('l'), QLatin1String("labs")},
- {('l'), QLatin1String("ldexp")},
- {('l'), QLatin1String("log10")},
- {('l'), QLatin1String("log")},
- {('m'), QLatin1String("malloc")},
- {('r'), QLatin1String("realloc")},
- {('m'), QLatin1String("main")},
- {('m'), QLatin1String("memchr")},
- {('m'), QLatin1String("memcmp")},
- {('m'), QLatin1String("memcpy")},
- {('m'), QLatin1String("memset")},
- {('m'), QLatin1String("modf")},
- {('p'), QLatin1String("pow")},
- {('p'), QLatin1String("printf")},
- {('p'), QLatin1String("putchar")},
- {('p'), QLatin1String("puts")},
- {('s'), QLatin1String("scanf")},
- {('s'), QLatin1String("sinh")},
- {('s'), QLatin1String("sin")},
- {('s'), QLatin1String("snprintf")},
- {('s'), QLatin1String("sprintf")},
- {('s'), QLatin1String("sqrt")},
- {('s'), QLatin1String("sscanf")},
- {('s'), QLatin1String("strcat")},
- {('s'), QLatin1String("strchr")},
- {('s'), QLatin1String("strcmp")},
- {('s'), QLatin1String("strcpy")},
- {('s'), QLatin1String("strcspn")},
- {('s'), QLatin1String("strlen")},
- {('s'), QLatin1String("strncat")},
- {('s'), QLatin1String("strncmp")},
- {('s'), QLatin1String("strncpy")},
- {('s'), QLatin1String("strpbrk")},
- {('s'), QLatin1String("strrchr")},
- {('s'), QLatin1String("strspn")},
- {('s'), QLatin1String("strstr")},
- {('t'), QLatin1String("tanh")},
- {('t'), QLatin1String("tan")},
- {('v'), QLatin1String("vfprintf")},
- {('v'), QLatin1String("vprintf")},
- {('v'), QLatin1String("vsprintf")},
- {('e'), QLatin1String("endl")},
- {('i'), QLatin1String("initializer_list")},
- {('u'), QLatin1String("unique_ptr")},
- {('c'), QLatin1String("complex")},
- {('i'), QLatin1String("imaginary")}};
-
- cpp_other
- = {{('d'), QLatin1String("define")}, {('e'), QLatin1String("else")},
- {('e'), QLatin1String("elif")}, {('e'), QLatin1String("endif")},
- {('e'), QLatin1String("error")}, {('i'), QLatin1String("if")},
- {('i'), QLatin1String("ifdef")}, {('i'), QLatin1String("ifndef")},
- {('i'), QLatin1String("include")}, {('l'), QLatin1String("line")},
- {('p'), QLatin1String("pragma")}, {('P'), QLatin1String("_Pragma")},
- {('u'), QLatin1String("undef")}, {('w'), QLatin1String("warning")}};
-}
-void loadCppData(LanguageData &typess, LanguageData &keywordss,
- LanguageData &builtins, LanguageData &literalss,
- LanguageData &others)
-{
- if (!cppDataInitialized)
- {
- initCppData();
- cppDataInitialized = true;
- }
-
- typess = cpp_types;
- keywordss = cpp_keywords;
- builtins = cpp_builtin;
- literalss = cpp_literals;
- others = cpp_other;
-}
-
-/**********************************************************/
-/* Shell Data *********************************************/
-/**********************************************************/
-
-static bool shellDataInitialized = false;
-static LanguageData shell_keywords;
-static LanguageData shell_types;
-static LanguageData shell_literals;
-static LanguageData shell_builtin;
-static LanguageData shell_other;
-void initShellData()
-{
- shell_keywords
- = {{('i'), QLatin1String("if")}, {('t'), QLatin1String("then")},
- {('e'), QLatin1String("else")}, {('e'), QLatin1String("elif")},
- {('f'), QLatin1String("fi")}, {('f'), QLatin1String("for")},
- {('w'), QLatin1String("while")}, {('i'), QLatin1String("in")},
- {('d'), QLatin1String("do")}, {('d'), QLatin1String("done")},
- {('c'), QLatin1String("case")}, {('e'), QLatin1String("esac")},
- {('f'), QLatin1String("function")}};
-
- shell_types = {};
-
- shell_literals
- = {{('f'), QLatin1String("false")}, {('t'), QLatin1String("true")}};
-
- shell_builtin = {{('b'), QLatin1String("break")},
- {('c'), QLatin1String("cd")},
- {('c'), QLatin1String("continue")},
- {('e'), QLatin1String("eval")},
- {('e'), QLatin1String("exec")},
- {('e'), QLatin1String("exit")},
- {('e'), QLatin1String("export")},
- {('g'), QLatin1String("getopts")},
- {('h'), QLatin1String("hash")},
- {('p'), QLatin1String("pwd")},
- {('r'), QLatin1String("readonly")},
- {('r'), QLatin1String("return")},
- {('s'), QLatin1String("shift")},
- {('t'), QLatin1String("test")},
- {('t'), QLatin1String("timestrap")},
- {('u'), QLatin1String("umask")},
- {('u'), QLatin1String("unset")},
- {('B'), QLatin1String("Bash")},
- {('a'), QLatin1String("alias")},
- {('b'), QLatin1String("bind")},
- {('b'), QLatin1String("builtin")},
- {('c'), QLatin1String("caller")},
- {('c'), QLatin1String("command")},
- {('d'), QLatin1String("declare")},
- {('e'), QLatin1String("echo")},
- {('e'), QLatin1String("enable")},
- {('h'), QLatin1String("help")},
- {('l'), QLatin1String("let")},
- {('l'), QLatin1String("local")},
- {('l'), QLatin1String("logout")},
- {('m'), QLatin1String("mapfile")},
- {('p'), QLatin1String("printfread")},
- {('r'), QLatin1String("readarray")},
- {('s'), QLatin1String("source")},
- {('t'), QLatin1String("type")},
- {('t'), QLatin1String("typeset")},
- {('u'), QLatin1String("ulimit")},
- {('u'), QLatin1String("unalias")},
- {('m'), QLatin1String("modifiers")},
- {('s'), QLatin1String("set")},
- {('s'), QLatin1String("shopt")},
- {('a'), QLatin1String("autoload")},
- {('b'), QLatin1String("bg")},
- {('b'), QLatin1String("bindkey")},
- {('b'), QLatin1String("bye")},
- {('c'), QLatin1String("cap")},
- {('c'), QLatin1String("chdir")},
- {('c'), QLatin1String("clone")},
- {('c'), QLatin1String("comparguments")},
- {('c'), QLatin1String("compcall")},
- {('c'), QLatin1String("compctl")},
- {('c'), QLatin1String("compdescribe")},
- {('c'), QLatin1String("compfilescompgroups")},
- {('c'), QLatin1String("compquote")},
- {('c'), QLatin1String("comptags")},
- {('c'), QLatin1String("comptry")},
- {('c'), QLatin1String("compvalues")},
- {('d'), QLatin1String("dirs")},
- {('d'), QLatin1String("disable")},
- {('d'), QLatin1String("disown")},
- {('e'), QLatin1String("echotc")},
- {('e'), QLatin1String("echoti")},
- {('e'), QLatin1String("emulatefc")},
- {('f'), QLatin1String("fg")},
- {('f'), QLatin1String("float")},
- {('f'), QLatin1String("functions")},
- {('g'), QLatin1String("getcap")},
- {('g'), QLatin1String("getln")},
- {('h'), QLatin1String("history")},
- {('i'), QLatin1String("integer")},
- {('j'), QLatin1String("jobs")},
- {('k'), QLatin1String("kill")},
- {('l'), QLatin1String("limit")},
- {('l'), QLatin1String("log")},
- {('n'), QLatin1String("noglob")},
- {('p'), QLatin1String("popd")},
- {('p'), QLatin1String("printpushd")},
- {('p'), QLatin1String("pushln")},
- {('r'), QLatin1String("rehash")},
- {('s'), QLatin1String("sched")},
- {('s'), QLatin1String("setcap")},
- {('s'), QLatin1String("setopt")},
- {('s'), QLatin1String("stat")},
- {('s'), QLatin1String("suspend")},
- {('t'), QLatin1String("ttyctl")},
- {('u'), QLatin1String("unfunction")},
- {('u'), QLatin1String("unhash")},
- {('u'), QLatin1String("unlimitunsetopt")},
- {('v'), QLatin1String("vared")},
- {('w'), QLatin1String("wait")},
- {('w'), QLatin1String("whence")},
- {('w'), QLatin1String("where")},
- {('w'), QLatin1String("which")},
- {('z'), QLatin1String("zcompile")},
- {('z'), QLatin1String("zformat")},
- {('z'), QLatin1String("zftp")},
- {('z'), QLatin1String("zle")},
- {('z'), QLatin1String("zmodload")},
- {('z'), QLatin1String("zparseopts")},
- {('z'), QLatin1String("zprof")},
- {('z'), QLatin1String("zpty")},
- {('z'), QLatin1String("zregexparse")},
- {('z'), QLatin1String("zsocket")},
- {('z'), QLatin1String("zstyle")},
- {('z'), QLatin1String("ztcp")},
- {('g'), QLatin1String("git")},
- {('r'), QLatin1String("rm")},
- {('s'), QLatin1String("sudo")},
- {('f'), QLatin1String("fdisk")},
- {('a'), QLatin1String("apt")},
- {('s'), QLatin1String("snap")},
- {('f'), QLatin1String("flatpak")},
- {('s'), QLatin1String("snapcraft")},
- {('y'), QLatin1String("yaourt")},
- {('n'), QLatin1String("nmcli")},
- {('p'), QLatin1String("pacman")},
- {('p'), QLatin1String("pamac")},
- {('f'), QLatin1String("fsck")},
- {('m'), QLatin1String("mount")},
- {('m'), QLatin1String("mkdir")},
- {('m'), QLatin1String("mkswap")},
- {('s'), QLatin1String("sleep")},
- {('l'), QLatin1String("ls")},
- {('w'), QLatin1String("wget")},
- {('k'), QLatin1String("kill")},
- {('k'), QLatin1String("killall")},
- {('g'), QLatin1String("gdb")},
- {('Q'), QLatin1String("QOwnNotes")},
- {('q'), QLatin1String("qownnotes")},
- {('d'), QLatin1String("docker")},
- {('o'), QLatin1String("openssl")},
- {('p'), QLatin1String("php")},
- {('p'), QLatin1String("python")},
- {('p'), QLatin1String("perl")},
- {('g'), QLatin1String("go")},
- {('c'), QLatin1String("curl")}};
-
- shell_other = {};
-}
-
-void loadShellData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!shellDataInitialized)
- {
- initShellData();
- shellDataInitialized = true;
- }
- types = shell_types;
- keywords = shell_keywords;
- builtin = shell_builtin;
- literals = shell_literals;
- other = shell_other;
-}
-
-/**********************************************************/
-/* JS Data *********************************************/
-/**********************************************************/
-static bool JSDataInitialized = false;
-static LanguageData js_keywords;
-static LanguageData js_types;
-static LanguageData js_literals;
-static LanguageData js_builtin;
-static LanguageData js_other;
-void initJSData()
-{
- js_keywords = {
- {('i'), QLatin1String("in")}, {('o'), QLatin1String("of")},
- {('i'), QLatin1String("if")}, {('f'), QLatin1String("for")},
- {('w'), QLatin1String("while")}, {('f'), QLatin1String("finally")},
- {('n'), QLatin1String("new")}, {('f'), QLatin1String("function")},
- {('d'), QLatin1String("do")}, {('r'), QLatin1String("return")},
- {('v'), QLatin1String("void")}, {('e'), QLatin1String("else")},
- {('b'), QLatin1String("break")}, {('c'), QLatin1String("catch")},
- {('i'), QLatin1String("instanceof")}, {('w'), QLatin1String("with")},
- {('t'), QLatin1String("throw")}, {('c'), QLatin1String("case")},
- {('d'), QLatin1String("default")}, {('t'), QLatin1String("try")},
- {('t'), QLatin1String("this")}, {('s'), QLatin1String("switch")},
- {('c'), QLatin1String("continue")}, {('t'), QLatin1String("typeof")},
- {('d'), QLatin1String("delete")}, {('l'), QLatin1String("let")},
- {('y'), QLatin1String("yield")}, {('c'), QLatin1String("const")},
- {('e'), QLatin1String("export")}, {('s'), QLatin1String("super")},
- {('d'), QLatin1String("debugger")}, {('a'), QLatin1String("as")},
- {('a'), QLatin1String("async")}, {('a'), QLatin1String("await")},
- {('s'), QLatin1String("static")}, {('i'), QLatin1String("import")},
- {('f'), QLatin1String("from")}, {('a'), QLatin1String("as")}};
-
- js_types
- = {{('v'), QLatin1String("var")}, {('c'), QLatin1String("class")},
- {('b'), QLatin1String("byte")}, {('e'), QLatin1String("enum")},
- {('f'), QLatin1String("float")}, {('s'), QLatin1String("short")},
- {('l'), QLatin1String("long")}, {('i'), QLatin1String("int")},
- {('v'), QLatin1String("void")}, {('b'), QLatin1String("boolean")},
- {('d'), QLatin1String("double")}};
-
- js_literals
- = {{('f'), QLatin1String("false")}, {('n'), QLatin1String("null")},
- {('t'), QLatin1String("true")}, {('u'), QLatin1String("undefined")},
- {('N'), QLatin1String("NaN")}, {('I'), QLatin1String("Infinity")}};
-
- js_builtin = {{('e'), QLatin1String("eval")},
- {('i'), QLatin1String("isFinite")},
- {('i'), QLatin1String("isNaN")},
- {('p'), QLatin1String("parseFloat")},
- {('p'), QLatin1String("parseInt")},
- {('d'), QLatin1String("decodeURI")},
- {('d'), QLatin1String("decodeURIComponent")},
- {('e'), QLatin1String("encodeURI")},
- {('e'), QLatin1String("encodeURIComponent")},
- {('e'), QLatin1String("escape")},
- {('u'), QLatin1String("unescape")},
- {('O'), QLatin1String("Object")},
- {('F'), QLatin1String("Function")},
- {('B'), QLatin1String("Boolean")},
- {('E'), QLatin1String("Error")},
- {('E'), QLatin1String("EvalError")},
- {('I'), QLatin1String("InternalError")},
- {('R'), QLatin1String("RangeError")},
- {('R'), QLatin1String("ReferenceError")},
- {('S'), QLatin1String("StopIteration")},
- {('S'), QLatin1String("SyntaxError")},
- {('T'), QLatin1String("TypeError")},
- {('U'), QLatin1String("URIError")},
- {('N'), QLatin1String("Number")},
- {('M'), QLatin1String("Math")},
- {('D'), QLatin1String("Date")},
- {('S'), QLatin1String("String")},
- {('R'), QLatin1String("RegExp")},
- {('A'), QLatin1String("Array")},
- {('F'), QLatin1String("Float32Array")},
- {('F'), QLatin1String("Float64Array")},
- {('I'), QLatin1String("Int16Array")},
- {('I'), QLatin1String("Int32Array")},
- {('I'), QLatin1String("Int8Array")},
- {('U'), QLatin1String("Uint16Array")},
- {('U'), QLatin1String("Uint32Array")},
- {('U'), QLatin1String("Uint8Array")},
- {('U'), QLatin1String("Uint8ClampedArray")},
- {('A'), QLatin1String("ArrayBuffer")},
- {('D'), QLatin1String("DataView")},
- {('J'), QLatin1String("JSON")},
- {('I'), QLatin1String("Intl")},
- {('a'), QLatin1String("arguments")},
- {('r'), QLatin1String("require")},
- {('m'), QLatin1String("module")},
- {('c'), QLatin1String("console")},
- {('w'), QLatin1String("window")},
- {('d'), QLatin1String("document")},
- {('S'), QLatin1String("Symbol")},
- {('S'), QLatin1String("Set")},
- {('M'), QLatin1String("Map")},
- {('W'), QLatin1String("WeakSet")},
- {('W'), QLatin1String("WeakMap")},
- {('P'), QLatin1String("Proxy")},
- {('R'), QLatin1String("Reflect")},
- {('P'), QLatin1String("Promise")}};
-
- js_other = {};
-}
-
-void loadJSData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!JSDataInitialized)
- {
- initJSData();
- JSDataInitialized = true;
- }
- types = js_types;
- keywords = js_keywords;
- builtin = js_builtin;
- literals = js_literals;
- other = js_other;
-}
-
-/**********************************************************/
-/* PHP Data *********************************************/
-/**********************************************************/
-static bool PHPDataInitialized = false;
-static LanguageData php_keywords;
-static LanguageData php_types;
-static LanguageData php_literals;
-static LanguageData php_builtin;
-static LanguageData php_other;
-void initPHPData()
-{
- php_keywords = {{('a'), QLatin1String("and")},
- {('l'), QLatin1String("list")},
- {('a'), QLatin1String("abstract")},
- {('g'), QLatin1String("global")},
- {('p'), QLatin1String("private")},
- {('e'), QLatin1String("echo")},
- {('i'), QLatin1String("interface")},
- {('a'), QLatin1String("as")},
- {('s'), QLatin1String("static")},
- {('e'), QLatin1String("endswitch")},
- {('i'), QLatin1String("if")},
- {('e'), QLatin1String("endwhile")},
- {('o'), QLatin1String("or")},
- {('c'), QLatin1String("const")},
- {('f'), QLatin1String("for")},
- {('e'), QLatin1String("endforeach")},
- {('s'), QLatin1String("self")},
- {('w'), QLatin1String("while")},
- {('i'), QLatin1String("isset")},
- {('p'), QLatin1String("public")},
- {('p'), QLatin1String("protected")},
- {('e'), QLatin1String("exit")},
- {('f'), QLatin1String("foreach")},
- {('t'), QLatin1String("throw")},
- {('e'), QLatin1String("elseif")},
- {('e'), QLatin1String("empty")},
- {('d'), QLatin1String("do")},
- {('x'), QLatin1String("xor")},
- {('r'), QLatin1String("return")},
- {('p'), QLatin1String("parent")},
- {('c'), QLatin1String("clone")},
- {('u'), QLatin1String("use")},
- {('e'), QLatin1String("else")},
- {('b'), QLatin1String("break")},
- {('p'), QLatin1String("print")},
- {('e'), QLatin1String("eval")},
- {('n'), QLatin1String("new")},
- {('c'), QLatin1String("catch")},
- {('c'), QLatin1String("case")},
- {('e'), QLatin1String("exception")},
- {('d'), QLatin1String("default")},
- {('d'), QLatin1String("die")},
- {('e'), QLatin1String("enddeclare")},
- {('f'), QLatin1String("final")},
- {('t'), QLatin1String("try")},
- {('s'), QLatin1String("switch")},
- {('c'), QLatin1String("continue")},
- {('e'), QLatin1String("endfor")},
- {('e'), QLatin1String("endif")},
- {('d'), QLatin1String("declare")},
- {('u'), QLatin1String("unset")},
- {('t'), QLatin1String("trait")},
- {('g'), QLatin1String("goto")},
- {('i'), QLatin1String("instanceof")},
- {('i'), QLatin1String("insteadof")},
- {('y'), QLatin1String("yield")},
- {('f'), QLatin1String("finally")}};
-
- php_types = {{('v'), QLatin1String("var")},
- {('c'), QLatin1String("class")},
- {('e'), QLatin1String("enum")},
- {('a'), QLatin1String("array")}};
-
- php_literals = {{('f'), QLatin1String("false")},
- {('t'), QLatin1String("true")},
- {('n'), QLatin1String("null")}};
-
- php_builtin = {
-
- };
-
- php_other = {{('i'), QLatin1String("include_once")},
- {('i'), QLatin1String("include")},
- {('_'), QLatin1String("__FILE__")},
- {('r'), QLatin1String("require")},
- {('r'), QLatin1String("require_once")},
- {('_'), QLatin1String("__CLASS__")},
- {('_'), QLatin1String("__LINE__")},
- {('_'), QLatin1String("__METHOD__")},
- {('_'), QLatin1String("__FUNCTION__")},
- {('_'), QLatin1String("__DIR__")},
- {('_'), QLatin1String("__NAMESPACE__")},
-
- {('S'), QLatin1String("SERVER")},
- {('G'), QLatin1String("GET")},
- {('P'), QLatin1String("POST")},
- {('F'), QLatin1String("FILES")},
- {('R'), QLatin1String("REQUEST")},
- {('S'), QLatin1String("SESSION")},
- {('E'), QLatin1String("ENV")},
- {('C'), QLatin1String("COOKIE")},
- {('G'), QLatin1String("GLOBALS")},
- {('H'), QLatin1String("HTTP_RAW_POST_DATA")},
- {('a'), QLatin1String("argc")},
- {('a'), QLatin1String("argv")},
- {('p'), QLatin1String("php_errormsg")},
- {('h'), QLatin1String("http_response_header")}};
-}
-void loadPHPData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!PHPDataInitialized)
- {
- initPHPData();
- PHPDataInitialized = true;
- }
- types = php_types;
- keywords = php_keywords;
- builtin = php_builtin;
- literals = php_literals;
- other = php_other;
-}
-
-/**********************************************************/
-/* QML Data *********************************************/
-/**********************************************************/
-static bool QMLDataInitialized = false;
-static LanguageData qml_keywords;
-static LanguageData qml_types;
-static LanguageData qml_literals;
-static LanguageData qml_builtin;
-static LanguageData qml_other;
-
-void initQMLData()
-{
- qml_keywords = {{('d'), QLatin1String("default")},
- {('p'), QLatin1String("property")},
- {('i'), QLatin1String("int")},
- {('v'), QLatin1String("var")},
- {('s'), QLatin1String("string")},
- {('f'), QLatin1String("function")},
- {('r'), QLatin1String("readonly")},
- {('M'), QLatin1String("MouseArea")},
- {('d'), QLatin1String("delegate")},
- {('i'), QLatin1String("if")},
- {('e'), QLatin1String("else")},
-
- {('e'), QLatin1String("eval")},
- {('i'), QLatin1String("isFinite")},
- {('i'), QLatin1String("isNaN")},
- {('p'), QLatin1String("parseFloat")},
- {('p'), QLatin1String("parseInt")},
- {('d'), QLatin1String("decodeURI")},
- {('d'), QLatin1String("decodeURIComponent")},
- {('e'), QLatin1String("encodeURI")},
- {('e'), QLatin1String("encodeURIComponent")},
- {('e'), QLatin1String("escape")},
- {('u'), QLatin1String("unescape")},
- {('O'), QLatin1String("Object")},
- {('E'), QLatin1String("Error")},
- {('E'), QLatin1String("EvalError")},
- {('I'), QLatin1String("InternalError")},
- {('R'), QLatin1String("RangeError")},
- {('R'), QLatin1String("ReferenceError")},
- {('S'), QLatin1String("StopIteration")},
- {('S'), QLatin1String("SyntaxError")},
- {('T'), QLatin1String("TypeError")},
- {('U'), QLatin1String("URIError")},
- {('N'), QLatin1String("Number")},
- {('M'), QLatin1String("Math")},
- {('D'), QLatin1String("Date")},
- {('S'), QLatin1String("String")},
- {('R'), QLatin1String("RegExp")},
- {('A'), QLatin1String("Array")},
- {('F'), QLatin1String("Float32Array")},
- {('F'), QLatin1String("Float64Array")},
- {('I'), QLatin1String("Int16Array")},
- {('I'), QLatin1String("Int32Array")},
- {('I'), QLatin1String("Int8Array")},
- {('U'), QLatin1String("Uint16Array")},
- {('U'), QLatin1String("Uint32Array")},
- {('U'), QLatin1String("Uint8Array")},
- {('U'), QLatin1String("Uint8ClampedArray")},
- {('A'), QLatin1String("ArrayBuffer")},
- {('D'), QLatin1String("DataView")},
- {('J'), QLatin1String("JSON")},
- {('I'), QLatin1String("Intl")},
- {('a'), QLatin1String("arguments")},
- {('m'), QLatin1String("module")},
- {('c'), QLatin1String("console")},
- {('w'), QLatin1String("window")},
- {('d'), QLatin1String("document")},
- {('S'), QLatin1String("Symbol")},
- {('S'), QLatin1String("Set")},
- {('M'), QLatin1String("Map")},
- {('W'), QLatin1String("WeakSet")},
- {('W'), QLatin1String("WeakMap")},
- {('P'), QLatin1String("Proxy")},
- {('R'), QLatin1String("Reflect")},
- {('B'), QLatin1String("Behavior")},
- {('c'), QLatin1String("color")},
- {('c'), QLatin1String("coordinate")},
- {('d'), QLatin1String("date")},
- {('e'), QLatin1String("enumeration")},
- {('f'), QLatin1String("font")},
- {('g'), QLatin1String("geocircle")},
- {('g'), QLatin1String("georectangle")},
- {('g'), QLatin1String("geoshape")},
- {('l'), QLatin1String("list")},
- {('m'), QLatin1String("matrix4x4")},
- {('p'), QLatin1String("parent")},
- {('p'), QLatin1String("point")},
- {('q'), QLatin1String("quaternion")},
- {('r'), QLatin1String("real")},
- {('s'), QLatin1String("size")},
- {('s'), QLatin1String("string")},
- {('v'), QLatin1String("variant")},
- {('v'), QLatin1String("vector2d")},
- {('v'), QLatin1String("vector3d")},
- {('v'), QLatin1String("vector4d")},
- {('P'), QLatin1String("Promise")}};
-
- qml_types = {
- {('R'), QLatin1String("Rectangle")}, {('T'), QLatin1String("Text")},
- {('c'), QLatin1String("color")}, {('I'), QLatin1String("Item")},
- {('u'), QLatin1String("url")}, {('C'), QLatin1String("Component")},
- {('B'), QLatin1String("Button")}, {('T'), QLatin1String("TextInput")},
- {('L'), QLatin1String("ListView")},
-
- };
-
- qml_literals
- = {{('f'), QLatin1String("false")}, {('t'), QLatin1String("true")}};
-
- qml_builtin = {
-
- };
-
- qml_other = {{('i'), QLatin1String("import")}};
-}
-void loadQMLData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!QMLDataInitialized)
- {
- initQMLData();
- QMLDataInitialized = true;
- }
- types = qml_types;
- keywords = qml_keywords;
- builtin = qml_builtin;
- literals = qml_literals;
- other = qml_other;
-}
-
-/**********************************************************/
-/* Python Data *********************************************/
-/**********************************************************/
-static bool PyDataInitialized = false;
-static LanguageData py_keywords;
-static LanguageData py_types;
-static LanguageData py_literals;
-static LanguageData py_builtin;
-static LanguageData py_other;
-
-void initPyData()
-{
- py_keywords = {
- {('a'), QLatin1String("and")}, {('e'), QLatin1String("elif")},
- {('i'), QLatin1String("is")}, {('g'), QLatin1String("global")},
- {('a'), QLatin1String("as")}, {('i'), QLatin1String("in")},
- {('i'), QLatin1String("if")}, {('f'), QLatin1String("from")},
- {('r'), QLatin1String("raise")}, {('f'), QLatin1String("for")},
- {('e'), QLatin1String("except")}, {('f'), QLatin1String("finally")},
- {('p'), QLatin1String("print")}, {('p'), QLatin1String("pass")},
- {('r'), QLatin1String("return")}, {('e'), QLatin1String("exec")},
- {('e'), QLatin1String("else")}, {('b'), QLatin1String("break")},
- {('n'), QLatin1String("not")}, {('w'), QLatin1String("with")},
- {('c'), QLatin1String("class")}, {('a'), QLatin1String("assert")},
- {('y'), QLatin1String("yield")}, {('t'), QLatin1String("try")},
- {('w'), QLatin1String("while")}, {('c'), QLatin1String("continue")},
- {('d'), QLatin1String("del")}, {('o'), QLatin1String("or")},
- {('d'), QLatin1String("def")}, {('l'), QLatin1String("lambda")},
- {('a'), QLatin1String("async")}, {('a'), QLatin1String("await")},
- {('n'), QLatin1String("nonlocal")},
- };
-
- py_types = {
-
- };
-
- py_literals = {{('F'), QLatin1String("False")},
- {('T'), QLatin1String("True")},
- {('N'), QLatin1String("None")}};
-
- py_builtin = {{('_'), QLatin1String("__import__")},
- {('a'), QLatin1String("abs")},
- {('a'), QLatin1String("all")},
- {('a'), QLatin1String("any")},
- {('a'), QLatin1String("apply")},
- {('a'), QLatin1String("ascii")},
- {('b'), QLatin1String("basestring")},
- {('b'), QLatin1String("bin")},
- {('b'), QLatin1String("bool")},
- {('b'), QLatin1String("buffer")},
- {('b'), QLatin1String("bytearray")},
- {('b'), QLatin1String("bytes")},
- {('c'), QLatin1String("callable")},
- {('c'), QLatin1String("chr")},
- {('c'), QLatin1String("classmethod")},
- {('c'), QLatin1String("cmp")},
- {('c'), QLatin1String("coerce")},
- {('c'), QLatin1String("compile")},
- {('c'), QLatin1String("complex")},
- {('d'), QLatin1String("delattr")},
- {('d'), QLatin1String("dict")},
- {('d'), QLatin1String("dir")},
- {('d'), QLatin1String("divmod")},
- {('e'), QLatin1String("enumerate")},
- {('e'), QLatin1String("eval")},
- {('e'), QLatin1String("execfile")},
- {('f'), QLatin1String("file")},
- {('f'), QLatin1String("filter")},
- {('f'), QLatin1String("float")},
- {('f'), QLatin1String("format")},
- {('f'), QLatin1String("frozenset")},
- {('g'), QLatin1String("getattr")},
- {('g'), QLatin1String("globals")},
- {('h'), QLatin1String("hasattr")},
- {('h'), QLatin1String("hash")},
- {('h'), QLatin1String("help")},
- {('h'), QLatin1String("hex")},
- {('i'), QLatin1String("id")},
- {('i'), QLatin1String("input")},
- {('i'), QLatin1String("int")},
- {('i'), QLatin1String("intern")},
- {('i'), QLatin1String("isinstance")},
- {('i'), QLatin1String("issubclass")},
- {('i'), QLatin1String("iter")},
- {('l'), QLatin1String("len")},
- {('l'), QLatin1String("list")},
- {('l'), QLatin1String("locals")},
- {('l'), QLatin1String("long")},
- {('m'), QLatin1String("map")},
- {('m'), QLatin1String("max")},
- {('m'), QLatin1String("memoryview")},
- {('m'), QLatin1String("min")},
- {('n'), QLatin1String("next")},
- {('o'), QLatin1String("object")},
- {('o'), QLatin1String("oct")},
- {('o'), QLatin1String("open")},
- {('o'), QLatin1String("ord")},
- {('p'), QLatin1String("pow")},
- {('p'), QLatin1String("property")},
- {('r'), QLatin1String("range")},
- {('r'), QLatin1String("raw_input")},
- {('r'), QLatin1String("reduce")},
- {('r'), QLatin1String("reload")},
- {('r'), QLatin1String("repr")},
- {('r'), QLatin1String("reversed")},
- {('r'), QLatin1String("round")},
- {('s'), QLatin1String("set")},
- {('s'), QLatin1String("setattr")},
- {('s'), QLatin1String("slice")},
- {('s'), QLatin1String("sorted")},
- {('s'), QLatin1String("staticmethod")},
- {('s'), QLatin1String("str")},
- {('s'), QLatin1String("sum")},
- {('s'), QLatin1String("super")},
- {('t'), QLatin1String("tuple")},
- {('t'), QLatin1String("type")},
- {('u'), QLatin1String("unichr")},
- {('u'), QLatin1String("unicode")},
- {('v'), QLatin1String("vars")},
- {('x'), QLatin1String("xrange")},
- {('z'), QLatin1String("zip")}};
-
- py_other = {{('i'), QLatin1String("import")}};
-}
-void loadPythonData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!PyDataInitialized)
- {
- initPyData();
- PyDataInitialized = true;
- }
- types = py_types;
- keywords = py_keywords;
- builtin = py_builtin;
- literals = py_literals;
- other = py_other;
-}
-
-/********************************************************/
-/*** Rust DATA ***********************************/
-/********************************************************/
-static bool rustDataInitialized = false;
-static LanguageData rust_keywords;
-static LanguageData rust_types;
-static LanguageData rust_literals;
-static LanguageData rust_builtin;
-static LanguageData rust_other;
-void initRustData()
-{
- rust_keywords = {
- {('a'), QLatin1String("abstract")}, {('a'), QLatin1String("alignof")},
- {('a'), QLatin1String("as")}, {('a'), QLatin1String("async")},
- {('a'), QLatin1String("await")}, {('b'), QLatin1String("be")},
- {('b'), QLatin1String("box")}, {('b'), QLatin1String("break")},
- {('c'), QLatin1String("const")}, {('c'), QLatin1String("continue")},
- {('c'), QLatin1String("crate")}, {('d'), QLatin1String("do")},
- {('d'), QLatin1String("dyn")}, {('e'), QLatin1String("else")},
- {('e'), QLatin1String("extern")}, {('f'), QLatin1String("final")},
- {('f'), QLatin1String("fn")}, {('f'), QLatin1String("for")},
- {('i'), QLatin1String("if")}, {('i'), QLatin1String("impl")},
- {('i'), QLatin1String("in")}, {('l'), QLatin1String("let")},
- {('l'), QLatin1String("loop")}, {('m'), QLatin1String("match")},
- {('m'), QLatin1String("mod")}, {('m'), QLatin1String("move")},
- {('m'), QLatin1String("mut")}, {('o'), QLatin1String("offsetof")},
- {('o'), QLatin1String("once")}, {('o'), QLatin1String("override")},
- {('p'), QLatin1String("priv")}, {('p'), QLatin1String("pub")},
- {('p'), QLatin1String("pure")}, {('r'), QLatin1String("ref")},
- {('r'), QLatin1String("return")}, {('s'), QLatin1String("sizeof")},
- {('s'), QLatin1String("static")}, {('s'), QLatin1String("self")},
- {('S'), QLatin1String("Self")}, {('s'), QLatin1String("super")},
- {('t'), QLatin1String("trait")}, {('t'), QLatin1String("type")},
- {('t'), QLatin1String("typeof")}, {('u'), QLatin1String("unsafe")},
- {('u'), QLatin1String("unsized")}, {('u'), QLatin1String("use")},
- {('v'), QLatin1String("virtual")}, {('w'), QLatin1String("where")},
- {('w'), QLatin1String("while")}, {('y'), QLatin1String("yield")},
- };
-
- rust_types
- = {{('u'), QLatin1String("union")}, {('e'), QLatin1String("enum")},
- {('s'), QLatin1String("struct")},
-
- {('i'), QLatin1String("i8")}, {('i'), QLatin1String("i16")},
- {('i'), QLatin1String("i32")}, {('i'), QLatin1String("i64")},
- {('i'), QLatin1String("i128")}, {('i'), QLatin1String("isize")},
- {('u'), QLatin1String("u8")}, {('u'), QLatin1String("u16")},
- {('u'), QLatin1String("u32")}, {('u'), QLatin1String("u64")},
- {('u'), QLatin1String("u128")}, {('u'), QLatin1String("usize")},
- {('f'), QLatin1String("f32")}, {('f'), QLatin1String("f64")},
- {('s'), QLatin1String("str")}, {('c'), QLatin1String("char")},
- {('b'), QLatin1String("bool")}, {('B'), QLatin1String("Box")},
- {('O'), QLatin1String("Option")}, {('R'), QLatin1String("Result")},
- {('S'), QLatin1String("String")}, {('V'), QLatin1String("Vec")}};
-
- rust_literals
- = {{('f'), QLatin1String("false")}, {('t'), QLatin1String("true")}};
-
- rust_builtin = {
-
- };
-
- rust_other = {{('a'), QLatin1String("assert!")},
- {('a'), QLatin1String("assert_eq!")},
- {('b'), QLatin1String("bitflags!")},
- {('b'), QLatin1String("bytes!")},
- {('c'), QLatin1String("cfg!")},
- {('c'), QLatin1String("col!")},
- {('c'), QLatin1String("concat!")},
- {('c'), QLatin1String("concat_idents!")},
- {('d'), QLatin1String("debug_assert!")},
- {('d'), QLatin1String("debug_assert_eq!")},
- {('e'), QLatin1String("env!")},
- {('p'), QLatin1String("panic!")},
- {('f'), QLatin1String("file!")},
- {('f'), QLatin1String("format!")},
- {('f'), QLatin1String("format_args!")},
- {('i'), QLatin1String("include_bin!")},
- {('i'), QLatin1String("include_str!")},
- {('l'), QLatin1String("line!")},
- {('l'), QLatin1String("local_data_key!")},
- {('m'), QLatin1String("module_path!")},
- {('o'), QLatin1String("option_env!")},
- {('p'), QLatin1String("print!")},
- {('p'), QLatin1String("println!")},
- {('s'), QLatin1String("select!")},
- {('s'), QLatin1String("stringify!")},
- {('t'), QLatin1String("try!")},
- {('u'), QLatin1String("unimplemented!")},
- {('u'), QLatin1String("unreachable!")},
- {('v'), QLatin1String("vec!")},
- {('w'), QLatin1String("write!")},
- {('w'), QLatin1String("writeln!")},
- {('m'), QLatin1String("macro_rules!")},
- {('a'), QLatin1String("assert_ne!")},
- {('d'), QLatin1String("debug_assert_ne!")}};
-}
-void loadRustData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!rustDataInitialized)
- {
- initRustData();
- rustDataInitialized = true;
- }
- types = rust_types;
- keywords = rust_keywords;
- builtin = rust_builtin;
- literals = rust_literals;
- other = rust_other;
-}
-
-/********************************************************/
-/*** Java DATA ***********************************/
-/********************************************************/
-static bool javaDataInitialized = false;
-static LanguageData java_keywords;
-static LanguageData java_types;
-static LanguageData java_literals;
-static LanguageData java_builtin;
-static LanguageData java_other;
-void initJavaData()
-{
- java_keywords = {{('a'), QLatin1String("abstract")},
- {('a'), QLatin1String("assert")},
- {('b'), QLatin1String("break")},
- {('c'), QLatin1String("case")},
- {('c'), QLatin1String("catch")},
- {('c'), QLatin1String("const")},
- {('c'), QLatin1String("continue")},
- {('d'), QLatin1String("default")},
- {('d'), QLatin1String("do")},
- {('e'), QLatin1String("else")},
- {('e'), QLatin1String("exports")},
- {('e'), QLatin1String("extends")},
- {('f'), QLatin1String("final")},
- {('f'), QLatin1String("finally")},
- {('f'), QLatin1String("for")},
- {('g'), QLatin1String("goto")},
- {('i'), QLatin1String("if")},
- {('i'), QLatin1String("implements")},
- {('i'), QLatin1String("import")},
- {('i'), QLatin1String("instanceof")},
- {('i'), QLatin1String("interface")},
- {('l'), QLatin1String("long")},
- {('m'), QLatin1String("module")},
- {('n'), QLatin1String("native")},
- {('n'), QLatin1String("new")},
- {('n'), QLatin1String("null")},
- {('o'), QLatin1String("open")},
- {('o'), QLatin1String("opens")},
- {('p'), QLatin1String("package")},
- {('p'), QLatin1String("private")},
- {('p'), QLatin1String("protected")},
- {('p'), QLatin1String("provides")},
- {('p'), QLatin1String("public")},
- {('r'), QLatin1String("requires")},
- {('r'), QLatin1String("return")},
- {('s'), QLatin1String("static")},
- {('s'), QLatin1String("strictfp")},
- {('s'), QLatin1String("super")},
- {('s'), QLatin1String("switch")},
- {('s'), QLatin1String("synchronized")},
- {('t'), QLatin1String("this")},
- {('t'), QLatin1String("throw")},
- {('t'), QLatin1String("throws")},
- {('t'), QLatin1String("to")},
- {('t'), QLatin1String("transient")},
- {('t'), QLatin1String("transitive")},
- {('t'), QLatin1String("try")},
- {('u'), QLatin1String("uses")},
- {('v'), QLatin1String("var")},
- {('v'), QLatin1String("volatile")},
- {('w'), QLatin1String("while")},
- {('w'), QLatin1String("with")},
- {('y'), QLatin1String("yield")}};
-
- java_types = {
- {('v'), QLatin1String("void")}, {('f'), QLatin1String("float")},
- {('b'), QLatin1String("boolean")}, {('b'), QLatin1String("byte")},
- {('i'), QLatin1String("int")}, {('c'), QLatin1String("char")},
- {('c'), QLatin1String("class")}, {('d'), QLatin1String("double")},
- {('e'), QLatin1String("enum")}, {('s'), QLatin1String("short")},
-
- };
-
- java_literals
- = {{('f'), QLatin1String("false")}, {('t'), QLatin1String("true")}};
-
- java_builtin = {
-
- };
-
- java_other = {
-
- };
-}
-void loadJavaData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!javaDataInitialized)
- {
- initJavaData();
- javaDataInitialized = true;
- }
- types = java_types;
- keywords = java_keywords;
- builtin = java_builtin;
- literals = java_literals;
- other = java_other;
-}
-
-/********************************************************/
-/*** C# DATA *************************************/
-/********************************************************/
-static bool csharpDataInitialized = false;
-static LanguageData csharp_keywords;
-static LanguageData csharp_types;
-static LanguageData csharp_literals;
-static LanguageData csharp_builtin;
-static LanguageData csharp_other;
-void initCSharpData()
-{
- csharp_keywords = {{('a'), QLatin1String("abstract")},
- {('a'), QLatin1String("add")},
- {('a'), QLatin1String("alias")},
- {('a'), QLatin1String("as")},
- {('a'), QLatin1String("ascending")},
- {('a'), QLatin1String("async")},
- {('a'), QLatin1String("await")},
- {('b'), QLatin1String("base")},
- {('b'), QLatin1String("break")},
- {('c'), QLatin1String("case")},
- {('c'), QLatin1String("catch")},
- {('c'), QLatin1String("checked")},
- {('c'), QLatin1String("const")},
- {('c'), QLatin1String("continue")},
- {('d'), QLatin1String("decimal")},
- {('d'), QLatin1String("default")},
- {('d'), QLatin1String("delegate")},
- {('d'), QLatin1String("descending")},
- {('d'), QLatin1String("do")},
- {('d'), QLatin1String("dynamic")},
- {('e'), QLatin1String("else")},
- {('e'), QLatin1String("event")},
- {('e'), QLatin1String("explicit")},
- {('e'), QLatin1String("extern")},
- {('f'), QLatin1String("finally")},
- {('f'), QLatin1String("fixed")},
- {('f'), QLatin1String("for")},
- {('f'), QLatin1String("foreach")},
- {('f'), QLatin1String("from")},
- {('g'), QLatin1String("get")},
- {('g'), QLatin1String("global")},
- {('g'), QLatin1String("goto")},
- {('g'), QLatin1String("group")},
- {('i'), QLatin1String("if")},
- {('i'), QLatin1String("implicit")},
- {('i'), QLatin1String("in")},
- {('i'), QLatin1String("interface")},
- {('i'), QLatin1String("internal")},
- {('i'), QLatin1String("into")},
- {('i'), QLatin1String("is")},
- {('j'), QLatin1String("join")},
- {('l'), QLatin1String("let")},
- {('l'), QLatin1String("lock")},
- {('l'), QLatin1String("long")},
- {('n'), QLatin1String("namespace")},
- {('n'), QLatin1String("new")},
- {('o'), QLatin1String("object")},
- {('o'), QLatin1String("operator")},
- {('o'), QLatin1String("orderby")},
- {('o'), QLatin1String("out")},
- {('o'), QLatin1String("override")},
- {('p'), QLatin1String("params")},
- {('p'), QLatin1String("partial")},
- {('p'), QLatin1String("private")},
- {('p'), QLatin1String("protected")},
- {('p'), QLatin1String("public")},
- {('r'), QLatin1String("readonly")},
- {('r'), QLatin1String("ref")},
- {('r'), QLatin1String("remove")},
- {('r'), QLatin1String("return")},
- {('s'), QLatin1String("sealed")},
- {('s'), QLatin1String("select")},
- {('s'), QLatin1String("set")},
- {('s'), QLatin1String("sizeof")},
- {('s'), QLatin1String("stackalloc")},
- {('s'), QLatin1String("static")},
- {('s'), QLatin1String("switch")},
- {('t'), QLatin1String("this")},
- {('t'), QLatin1String("throw")},
- {('t'), QLatin1String("try")},
- {('t'), QLatin1String("typeof")},
- {('u'), QLatin1String("unchecked")},
- {('u'), QLatin1String("unsafe")},
- {('u'), QLatin1String("using")},
- {('v'), QLatin1String("value")},
- {('v'), QLatin1String("virtual")},
- {('v'), QLatin1String("volatile")},
- {('w'), QLatin1String("where")},
- {('w'), QLatin1String("while")},
- {('y'), QLatin1String("yield")}};
-
- csharp_types = {
- {('b'), QLatin1String("bool")}, {('b'), QLatin1String("byte")},
- {('c'), QLatin1String("char")}, {('c'), QLatin1String("class")},
- {('d'), QLatin1String("double")}, {('e'), QLatin1String("enum")},
- {('f'), QLatin1String("float")}, {('i'), QLatin1String("int")},
- {('s'), QLatin1String("sbyte")}, {('s'), QLatin1String("short")},
- {('s'), QLatin1String("string")}, {('s'), QLatin1String("struct")},
- {('u'), QLatin1String("uint")}, {('u'), QLatin1String("ulong")},
- {('u'), QLatin1String("ushort")}, {('v'), QLatin1String("var")},
- {('v'), QLatin1String("void")},
- };
-
- csharp_literals = {{('f'), QLatin1String("false")},
- {('t'), QLatin1String("true")},
- {('n'), QLatin1String("null")}};
-
- csharp_builtin = {
-
- };
-
- csharp_other = {
- {('d'), QLatin1String("define")}, {('e'), QLatin1String("elif")},
- {('e'), QLatin1String("else")}, {('e'), QLatin1String("endif")},
- {('e'), QLatin1String("endregion")}, {('e'), QLatin1String("error")},
- {('i'), QLatin1String("if")}, {('l'), QLatin1String("line")},
- {('p'), QLatin1String("pragma")}, {('r'), QLatin1String("region")},
- {('u'), QLatin1String("undef")}, {('w'), QLatin1String("warning")}};
-}
-void loadCSharpData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!csharpDataInitialized)
- {
- initCSharpData();
- csharpDataInitialized = true;
- }
- types = csharp_types;
- keywords = csharp_keywords;
- builtin = csharp_builtin;
- literals = csharp_literals;
- other = csharp_other;
-}
-
-/********************************************************/
-/*** Go DATA *************************************/
-/********************************************************/
-static bool goDataInitialized = false;
-static LanguageData go_keywords;
-static LanguageData go_types;
-static LanguageData go_literals;
-static LanguageData go_builtin;
-static LanguageData go_other;
-void initGoData()
-{
- go_keywords = {
- {('b'), QLatin1String("break")},
- {('c'), QLatin1String("case")},
- {('c'), QLatin1String("chan")},
- {('c'), QLatin1String("const")},
- {('c'), QLatin1String("continue")},
- {('d'), QLatin1String("default")},
- {('d'), QLatin1String("defer")},
- {('e'), QLatin1String("else")},
- {('f'), QLatin1String("fallthrough")},
- {('f'), QLatin1String("for")},
- {('f'), QLatin1String("func")},
- {('g'), QLatin1String("go")},
- {('t'), QLatin1String("to")},
- {('i'), QLatin1String("if")},
- {('i'), QLatin1String("import")},
- {('i'), QLatin1String("interface")},
- {('p'), QLatin1String("package")},
- {('r'), QLatin1String("range")},
- {('r'), QLatin1String("return")},
- {('s'), QLatin1String("select")},
- {('s'), QLatin1String("struct")},
- {('s'), QLatin1String("switch")},
- {('t'), QLatin1String("type")},
- };
-
- go_types = {
- {('m'), QLatin1String("map")}, {('s'), QLatin1String("struct")},
- {('v'), QLatin1String("var")}, {('b'), QLatin1String("bool")},
- {('b'), QLatin1String("byte")}, {('c'), QLatin1String("complex64")},
- {('c'), QLatin1String("complex128")}, {('f'), QLatin1String("float32")},
- {('f'), QLatin1String("float64")}, {('i'), QLatin1String("int8")},
- {('i'), QLatin1String("int16")}, {('i'), QLatin1String("int32")},
- {('i'), QLatin1String("int64")}, {('s'), QLatin1String("string")},
- {('u'), QLatin1String("uint8")}, {('u'), QLatin1String("uint16")},
- {('u'), QLatin1String("uint32")}, {('u'), QLatin1String("uint64")},
- {('i'), QLatin1String("int")}, {('u'), QLatin1String("uint")},
- {('u'), QLatin1String("uintptr")}, {('r'), QLatin1String("rune")}};
-
- go_literals = {{('f'), QLatin1String("false")},
- {('t'), QLatin1String("true")},
- {('n'), QLatin1String("nil")},
- {('i'), QLatin1String("iota")}};
-
- go_builtin
- = {{('a'), QLatin1String("append")}, {('c'), QLatin1String("cap")},
- {('c'), QLatin1String("close")}, {('c'), QLatin1String("complex")},
- {('c'), QLatin1String("copy")}, {('i'), QLatin1String("imag")},
- {('l'), QLatin1String("len")}, {('m'), QLatin1String("make")},
- {('n'), QLatin1String("new")}, {('p'), QLatin1String("panic")},
- {('p'), QLatin1String("print")}, {('p'), QLatin1String("println")},
- {('r'), QLatin1String("real")}, {('r'), QLatin1String("recover")},
- {('d'), QLatin1String("delete")}};
-
- go_other = {
-
- };
-}
-void loadGoData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!goDataInitialized)
- {
- initGoData();
- goDataInitialized = true;
- }
- types = go_types;
- keywords = go_keywords;
- builtin = go_builtin;
- literals = go_literals;
- other = go_other;
-}
-
-/********************************************************/
-/*** V DATA **************************************/
-/********************************************************/
-static bool vDataInitialized = false;
-static LanguageData v_keywords;
-static LanguageData v_types;
-static LanguageData v_literals;
-static LanguageData v_builtin;
-static LanguageData v_other;
-void initVData()
-{
- v_keywords = {
- {('b'), QLatin1String("break")}, {('c'), QLatin1String("const")},
- {('c'), QLatin1String("continue")}, {('d'), QLatin1String("defer")},
- {('e'), QLatin1String("else")}, {('f'), QLatin1String("for")},
- {('f'), QLatin1String("fn")}, {('g'), QLatin1String("go")},
- {('g'), QLatin1String("goto")}, {('i'), QLatin1String("if")},
- {('i'), QLatin1String("import")}, {('i'), QLatin1String("interface")},
- {('r'), QLatin1String("return")}, {('s'), QLatin1String("struct")},
- {('s'), QLatin1String("switch")}, {('t'), QLatin1String("type")},
- {('p'), QLatin1String("pub")}, {('o'), QLatin1String("or")},
- {('n'), QLatin1String("none")}};
-
- v_types
- = {{('m'), QLatin1String("map")}, {('s'), QLatin1String("struct")},
- {('b'), QLatin1String("bool")}, {('b'), QLatin1String("byte")},
- {('f'), QLatin1String("f32")}, {('f'), QLatin1String("f64")},
- {('i'), QLatin1String("i8")}, {('i'), QLatin1String("i16")},
- {('i'), QLatin1String("int")}, {('i'), QLatin1String("i64")},
- {('i'), QLatin1String("i128")}, {('s'), QLatin1String("string")},
- {('u'), QLatin1String("u16")}, {('u'), QLatin1String("u32")},
- {('u'), QLatin1String("u64")}, {('u'), QLatin1String("u128")},
- {('u'), QLatin1String("byteptr")}, {('u'), QLatin1String("voidptr")},
- {('r'), QLatin1String("rune")}};
-
- v_literals = {
- {('f'), QLatin1String("false")},
- {('t'), QLatin1String("true")},
- };
-
- v_builtin = {};
-
- v_other = {
-
- };
-}
-void loadVData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!vDataInitialized)
- {
- initVData();
- vDataInitialized = true;
- }
- types = v_types;
- keywords = v_keywords;
- builtin = v_builtin;
- literals = v_literals;
- other = v_other;
-}
-
-/********************************************************/
-/*** SQL DATA ************************************/
-/********************************************************/
-static bool sqlDataInitialized = false;
-static LanguageData sql_keywords;
-static LanguageData sql_types;
-static LanguageData sql_literals;
-static LanguageData sql_builtin;
-static LanguageData sql_other;
-void initSQLData()
-{
- sql_keywords = {{('A'), QLatin1String("ACTION")},
- {('A'), QLatin1String("ADD")},
- {('A'), QLatin1String("AFTER")},
- {('A'), QLatin1String("ALGORITHM")},
- {('A'), QLatin1String("ALL")},
- {('A'), QLatin1String("ALTER")},
- {('A'), QLatin1String("ANALYZE")},
- {('A'), QLatin1String("ANY")},
- {('A'), QLatin1String("APPLY")},
- {('A'), QLatin1String("AS")},
- {('A'), QLatin1String("ASC")},
- {('A'), QLatin1String("AUTHORIZATION")},
- {('A'), QLatin1String("AUTO_INCREMENT")},
- {('B'), QLatin1String("BACKUP")},
- {('B'), QLatin1String("BDB")},
- {('B'), QLatin1String("BEGIN")},
- {('B'), QLatin1String("BERKELEYDB")},
- {('B'), QLatin1String("BIGINT")},
- {('B'), QLatin1String("BINARY")},
- {('B'), QLatin1String("BIT")},
- {('B'), QLatin1String("BLOB")},
- {('B'), QLatin1String("BOOL")},
- {('B'), QLatin1String("BOOLEAN")},
- {('B'), QLatin1String("BREAK")},
- {('B'), QLatin1String("BROWSE")},
- {('B'), QLatin1String("BTREE")},
- {('B'), QLatin1String("BULK")},
- {('B'), QLatin1String("BY")},
- {('C'), QLatin1String("CALL")},
- {('C'), QLatin1String("CASCADED")},
- {('C'), QLatin1String("CASE")},
- {('C'), QLatin1String("CHAIN")},
- {('C'), QLatin1String("CHARACTER")},
- {('S'), QLatin1String("SET")},
- {('C'), QLatin1String("CHECKPOINT")},
- {('C'), QLatin1String("CLOSE")},
- {('C'), QLatin1String("CLUSTERED")},
- {('C'), QLatin1String("COALESCE")},
- {('C'), QLatin1String("COLLATE")},
- {('C'), QLatin1String("COLUMNS")},
- {('C'), QLatin1String("COMMENT")},
- {('C'), QLatin1String("COMMITTED")},
- {('C'), QLatin1String("COMPUTE")},
- {('C'), QLatin1String("CONNECT")},
- {('C'), QLatin1String("CONSISTENT")},
- {('C'), QLatin1String("CONSTRAINT")},
- {('C'), QLatin1String("CONTAINSTABLE")},
- {('C'), QLatin1String("CONTINUE")},
- {('C'), QLatin1String("CONVERT")},
- {('C'), QLatin1String("CREATE")},
- {('C'), QLatin1String("CROSS")},
- {('C'), QLatin1String("CURRENT_DATE")},
- {('_'), QLatin1String("_TIME")},
- {('_'), QLatin1String("_TIMESTAMP")},
- {('_'), QLatin1String("_USER")},
- {('C'), QLatin1String("CURSOR")},
- {('C'), QLatin1String("CYCLE")},
- {('D'), QLatin1String("DATABASES")},
- {('D'), QLatin1String("DATETIME")},
- {('D'), QLatin1String("DAY")},
- {('D'), QLatin1String("DBCC")},
- {('D'), QLatin1String("DEALLOCATE")},
- {('D'), QLatin1String("DEC")},
- {('D'), QLatin1String("DECIMAL")},
- {('D'), QLatin1String("DECLARE")},
- {('D'), QLatin1String("DEFAULT")},
- {('D'), QLatin1String("DEFINER")},
- {('D'), QLatin1String("DELAYED")},
- {('D'), QLatin1String("DELETE")},
- {('D'), QLatin1String("DELIMITERS")},
- {('D'), QLatin1String("DENY")},
- {('D'), QLatin1String("DESC")},
- {('D'), QLatin1String("DESCRIBE")},
- {('D'), QLatin1String("DETERMINISTIC")},
- {('D'), QLatin1String("DISABLE")},
- {('D'), QLatin1String("DISCARD")},
- {('D'), QLatin1String("DISK")},
- {('D'), QLatin1String("DISTINCT")},
- {('D'), QLatin1String("DISTINCTROW")},
- {('D'), QLatin1String("DISTRIBUTED")},
- {('D'), QLatin1String("DO")},
- {('D'), QLatin1String("DOUBLE")},
- {('D'), QLatin1String("DROP")},
- {('D'), QLatin1String("DUMMY")},
- {('D'), QLatin1String("DUMPFILE")},
- {('D'), QLatin1String("DUPLICATE")},
- {('E'), QLatin1String("ELSEIF")},
- {('E'), QLatin1String("ENABLE")},
- {('E'), QLatin1String("ENCLOSED")},
- {('E'), QLatin1String("END")},
- {('E'), QLatin1String("ENGINE")},
- {('E'), QLatin1String("ENUM")},
- {('E'), QLatin1String("ERRLVL")},
- {('E'), QLatin1String("ERRORS")},
- {('E'), QLatin1String("ESCAPED")},
- {('E'), QLatin1String("EXCEPT")},
- {('E'), QLatin1String("EXECUTE")},
- {('E'), QLatin1String("EXISTS")},
- {('E'), QLatin1String("EXIT")},
- {('E'), QLatin1String("EXPLAIN")},
- {('E'), QLatin1String("EXTENDED")},
- {('F'), QLatin1String("FETCH")},
- {('F'), QLatin1String("FIELDS")},
- {('F'), QLatin1String("FILE")},
- {('F'), QLatin1String("FILLFACTOR")},
- {('F'), QLatin1String("FIRST")},
- {('F'), QLatin1String("FIXED")},
- {('F'), QLatin1String("FLOAT")},
- {('F'), QLatin1String("FOLLOWING")},
- {('F'), QLatin1String("FOR")},
- {('E'), QLatin1String("EACH")},
- {('R'), QLatin1String("ROW")},
- {('F'), QLatin1String("FORCE")},
- {('F'), QLatin1String("FOREIGN")},
- {('F'), QLatin1String("FREETEXTTABLE")},
- {('F'), QLatin1String("FROM")},
- {('F'), QLatin1String("FULL")},
- {('F'), QLatin1String("FUNCTION")},
- {('G'), QLatin1String("GEOMETRYCOLLECTION")},
- {('G'), QLatin1String("GLOBAL")},
- {('G'), QLatin1String("GOTO")},
- {('G'), QLatin1String("GRANT")},
- {('G'), QLatin1String("GROUP")},
- {('H'), QLatin1String("HANDLER")},
- {('H'), QLatin1String("HASH")},
- {('H'), QLatin1String("HAVING")},
- {('H'), QLatin1String("HOLDLOCK")},
- {('H'), QLatin1String("HOUR")},
- {('I'), QLatin1String("IDENTITY_INSERT")},
- {('C'), QLatin1String("COL")},
- {('I'), QLatin1String("IF")},
- {('I'), QLatin1String("IGNORE")},
- {('I'), QLatin1String("IMPORT")},
- {('I'), QLatin1String("INDEX")},
- {('I'), QLatin1String("INFILE")},
- {('I'), QLatin1String("INNER")},
- {('I'), QLatin1String("INNODB")},
- {('I'), QLatin1String("INOUT")},
- {('I'), QLatin1String("INSERT")},
- {('I'), QLatin1String("INT")},
- {('I'), QLatin1String("INTEGER")},
- {('I'), QLatin1String("INTERSECT")},
- {('I'), QLatin1String("INTERVAL")},
- {('I'), QLatin1String("INTO")},
- {('I'), QLatin1String("INVOKER")},
- {('I'), QLatin1String("ISOLATION")},
- {('I'), QLatin1String("ITERATE")},
- {('J'), QLatin1String("JOIN")},
- {('K'), QLatin1String("KEYS")},
- {('K'), QLatin1String("KILL")},
- {('L'), QLatin1String("LANGUAGE")},
- {('L'), QLatin1String("LAST")},
- {('L'), QLatin1String("LEAVE")},
- {('L'), QLatin1String("LEFT")},
- {('L'), QLatin1String("LEVEL")},
- {('L'), QLatin1String("LIMIT")},
- {('L'), QLatin1String("LINENO")},
- {('L'), QLatin1String("LINES")},
- {('L'), QLatin1String("LINESTRING")},
- {('L'), QLatin1String("LOAD")},
- {('L'), QLatin1String("LOCAL")},
- {('L'), QLatin1String("LOCK")},
- {('L'), QLatin1String("LONGBLOB")},
- {('T'), QLatin1String("TEXT")},
- {('L'), QLatin1String("LOOP")},
- {('M'), QLatin1String("MATCHED")},
- {('M'), QLatin1String("MEDIUMBLOB")},
- {('I'), QLatin1String("INT")},
- {('T'), QLatin1String("TEXT")},
- {('M'), QLatin1String("MERGE")},
- {('M'), QLatin1String("MIDDLEINT")},
- {('M'), QLatin1String("MINUTE")},
- {('M'), QLatin1String("MODE")},
- {('M'), QLatin1String("MODIFIES")},
- {('M'), QLatin1String("MODIFY")},
- {('M'), QLatin1String("MONTH")},
- {('M'), QLatin1String("MULTILINESTRING")},
- {('P'), QLatin1String("POINT")},
- {('P'), QLatin1String("POLYGON")},
- {('N'), QLatin1String("NATIONAL")},
- {('N'), QLatin1String("NATURAL")},
- {('N'), QLatin1String("NCHAR")},
- {('N'), QLatin1String("NEXT")},
- {('N'), QLatin1String("NO")},
- {('N'), QLatin1String("NONCLUSTERED")},
- {('N'), QLatin1String("NULLIF")},
- {('N'), QLatin1String("NUMERIC")},
- {('O'), QLatin1String("OFF")},
- {('O'), QLatin1String("OFFSETS")},
- {('O'), QLatin1String("ON")},
- {('O'), QLatin1String("OPENDATASOURCE")},
- {('Q'), QLatin1String("QUERY")},
- {('R'), QLatin1String("ROWSET")},
- {('O'), QLatin1String("OPTIMIZE")},
- {('O'), QLatin1String("OPTIONALLY")},
- {('O'), QLatin1String("ORDER")},
- {('O'), QLatin1String("OUTER")},
- {('F'), QLatin1String("FILE")},
- {('O'), QLatin1String("OVER")},
- {('P'), QLatin1String("PARTIAL")},
- {('P'), QLatin1String("PARTITION")},
- {('P'), QLatin1String("PERCENT")},
- {('P'), QLatin1String("PIVOT")},
- {('P'), QLatin1String("PLAN")},
- {('P'), QLatin1String("POINT")},
- {('P'), QLatin1String("POLYGON")},
- {('P'), QLatin1String("PRECEDING")},
- {('P'), QLatin1String("PRECISION")},
- {('P'), QLatin1String("PREPARE")},
- {('P'), QLatin1String("PREV")},
- {('P'), QLatin1String("PRIMARY")},
- {('P'), QLatin1String("PRINT")},
- {('P'), QLatin1String("PRIVILEGES")},
- {('P'), QLatin1String("PROCEDURE")},
- {('P'), QLatin1String("PUBLIC")},
- {('P'), QLatin1String("PURGE")},
- {('Q'), QLatin1String("QUICK")},
- {('R'), QLatin1String("RAISERROR")},
- {('R'), QLatin1String("READS")},
- {('R'), QLatin1String("REAL")},
- {('R'), QLatin1String("RECONFIGURE")},
- {('R'), QLatin1String("REFERENCES")},
- {('R'), QLatin1String("RELEASE")},
- {('R'), QLatin1String("RENAME")},
- {('R'), QLatin1String("REPEATABLE")},
- {('R'), QLatin1String("REPLACE")},
- {('R'), QLatin1String("REPLICATION")},
- {('R'), QLatin1String("REQUIRE")},
- {('R'), QLatin1String("RESIGNAL")},
- {('R'), QLatin1String("RESTORE")},
- {('R'), QLatin1String("RESTRICT")},
- {('R'), QLatin1String("RETURNS")},
- {('R'), QLatin1String("REVOKE")},
- {('R'), QLatin1String("RIGHT")},
- {('R'), QLatin1String("ROLLBACK")},
- {('R'), QLatin1String("ROUTINE")},
- {('R'), QLatin1String("ROWCOUNT")},
- {('G'), QLatin1String("GUIDCOL")},
- {('R'), QLatin1String("RTREE")},
- {('R'), QLatin1String("RULE")},
- {('S'), QLatin1String("SAVEPOINT")},
- {('S'), QLatin1String("SCHEMA")},
- {('S'), QLatin1String("SECOND")},
- {('S'), QLatin1String("SELECT")},
- {('S'), QLatin1String("SERIALIZABLE")},
- {('S'), QLatin1String("SESSION_USER")},
- {('S'), QLatin1String("SETUSER")},
- {('S'), QLatin1String("SHARE")},
- {('S'), QLatin1String("SHOW")},
- {('S'), QLatin1String("SHUTDOWN")},
- {('S'), QLatin1String("SIMPLE")},
- {('S'), QLatin1String("SMALLINT")},
- {('S'), QLatin1String("SNAPSHOT")},
- {('S'), QLatin1String("SOME")},
- {('S'), QLatin1String("SONAME")},
- {('S'), QLatin1String("SQL")},
- {('S'), QLatin1String("STARTING")},
- {('S'), QLatin1String("STATISTICS")},
- {('S'), QLatin1String("STATUS")},
- {('S'), QLatin1String("STRIPED")},
- {('S'), QLatin1String("SYSTEM_USER")},
- {('T'), QLatin1String("TABLES")},
- {('T'), QLatin1String("TABLESPACE")},
- {('T'), QLatin1String("TEMPORARY")},
- {('T'), QLatin1String("TABLE")},
- {('T'), QLatin1String("TERMINATED")},
- {('T'), QLatin1String("TEXTSIZE")},
- {('T'), QLatin1String("THEN")},
- {('T'), QLatin1String("TIMESTAMP")},
- {('T'), QLatin1String("TINYBLOB")},
- {('I'), QLatin1String("INT")},
- {('T'), QLatin1String("TEXT")},
- {('T'), QLatin1String("TOP")},
- {('T'), QLatin1String("TRANSACTIONS")},
- {('T'), QLatin1String("TRIGGER")},
- {('T'), QLatin1String("TRUNCATE")},
- {('T'), QLatin1String("TSEQUAL")},
- {('T'), QLatin1String("TYPES")},
- {('U'), QLatin1String("UNBOUNDED")},
- {('U'), QLatin1String("UNCOMMITTED")},
- {('U'), QLatin1String("UNDEFINED")},
- {('U'), QLatin1String("UNION")},
- {('U'), QLatin1String("UNIQUE")},
- {('U'), QLatin1String("UNLOCK")},
- {('U'), QLatin1String("UNPIVOT")},
- {('U'), QLatin1String("UNSIGNED")},
- {('U'), QLatin1String("UPDATETEXT")},
- {('U'), QLatin1String("USAGE")},
- {('U'), QLatin1String("USE")},
- {('U'), QLatin1String("USER")},
- {('U'), QLatin1String("USING")},
- {('V'), QLatin1String("VALUES")},
- {('V'), QLatin1String("VARBINARY")},
- {('C'), QLatin1String("CHAR")},
- {('C'), QLatin1String("CHARACTER")},
- {('Y'), QLatin1String("YING")},
- {('V'), QLatin1String("VIEW")},
- {('W'), QLatin1String("WAITFOR")},
- {('W'), QLatin1String("WARNINGS")},
- {('W'), QLatin1String("WHEN")},
- {('W'), QLatin1String("WHERE")},
- {('W'), QLatin1String("WHILE")},
- {('W'), QLatin1String("WITH")},
- {('R'), QLatin1String("ROLLUP")},
- {('I'), QLatin1String("IN")},
- {('W'), QLatin1String("WORK")},
- {('W'), QLatin1String("WRITETEXT")},
- {('Y'), QLatin1String("YEAR")}};
-
- sql_types = {
-
- };
-
- sql_literals = {
- {('A'), QLatin1String("TRUE")},
- {('F'), QLatin1String("FALSE")},
- {('N'), QLatin1String("NULL")},
- };
-
- sql_builtin
- = {{('A'), QLatin1String("AVG")}, {('C'), QLatin1String("COUNT")},
- {('F'), QLatin1String("FIRST")}, {('F'), QLatin1String("FORMAT")},
- {('L'), QLatin1String("LAST")}, {('L'), QLatin1String("LCASE")},
- {('L'), QLatin1String("LEN")}, {('M'), QLatin1String("MAX")},
- {('M'), QLatin1String("MID")}, {('M'), QLatin1String("MIN")},
- {('M'), QLatin1String("MOD")}, {('N'), QLatin1String("NOW")},
- {('R'), QLatin1String("ROUND")}, {('S'), QLatin1String("SUM")},
- {('U'), QLatin1String("UCASE")}};
-
- sql_other = {
-
- };
-}
-void loadSQLData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!sqlDataInitialized)
- {
- initSQLData();
- sqlDataInitialized = true;
- }
- types = sql_types;
- keywords = sql_keywords;
- builtin = sql_builtin;
- literals = sql_literals;
- other = sql_other;
-}
-
-/********************************************************/
-/*** JSON DATA ***********************************/
-/********************************************************/
-static bool jsonDataInitialized = false;
-static LanguageData json_keywords;
-static LanguageData json_types;
-static LanguageData json_literals;
-static LanguageData json_builtin;
-static LanguageData json_other;
-void initJSONData()
-{
- json_keywords = {};
-
- json_types = {};
-
- json_literals = {{('f'), QLatin1String("false")},
- {('t'), QLatin1String("true")},
- {('n'), QLatin1String("null")}};
-
- json_builtin = {};
-
- json_other = {};
-}
-void loadJSONData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!jsonDataInitialized)
- {
- initJSONData();
- jsonDataInitialized = true;
- }
- types = json_types;
- keywords = json_keywords;
- builtin = json_builtin;
- literals = json_literals;
- other = json_other;
-}
-
-/********************************************************/
-/*** CSS DATA ***********************************/
-/********************************************************/
-static bool cssDataInitialized = false;
-static LanguageData css_keywords;
-static LanguageData css_types;
-static LanguageData css_literals;
-static LanguageData css_builtin;
-static LanguageData css_other;
-void initCSSData()
-{
- css_keywords = {{'i', QLatin1String("important")},
- {'p', QLatin1String("px")},
- {'e', QLatin1String("em")}};
-
- css_types = {
- {'a', QLatin1String("align")}, {'c', QLatin1String("content")},
- {'i', QLatin1String("items")}, {'s', QLatin1String("self")},
- {'a', QLatin1String("all")}, {'a', QLatin1String("animation")},
- {'d', QLatin1String("delay")}, {'d', QLatin1String("direction")},
- {'d', QLatin1String("duration")}, {'f', QLatin1String("fill")},
- {'m', QLatin1String("mode")}, {'i', QLatin1String("iteration")},
- {'c', QLatin1String("count")}, {'n', QLatin1String("name")},
- {'p', QLatin1String("play")}, {'s', QLatin1String("state")},
- {'t', QLatin1String("timing")}, {'f', QLatin1String("function")},
- {'a', QLatin1String("azimuth")}, {'b', QLatin1String("backface")},
- {'v', QLatin1String("visibility")}, {'a', QLatin1String("attachment")},
- {'b', QLatin1String("blend")}, {'m', QLatin1String("mode")},
- {'c', QLatin1String("clip")}, {'c', QLatin1String("color")},
- {'i', QLatin1String("image")}, {'o', QLatin1String("origin")},
- {'p', QLatin1String("position")}, {'r', QLatin1String("repeat")},
- {'s', QLatin1String("size")}, {'b', QLatin1String("background")},
- {'b', QLatin1String("bleed")}, {'c', QLatin1String("color")},
- {'r', QLatin1String("radius")}, {'r', QLatin1String("radius")},
- {'s', QLatin1String("style")}, {'w', QLatin1String("width")},
- {'b', QLatin1String("bottom")}, {'c', QLatin1String("collapse")},
- {'c', QLatin1String("color")}, {'i', QLatin1String("image")},
- {'o', QLatin1String("outset")}, {'r', QLatin1String("repeat")},
- {'s', QLatin1String("source")}, {'s', QLatin1String("slice")},
- {'w', QLatin1String("width")}, {'c', QLatin1String("color")},
- {'s', QLatin1String("style")}, {'w', QLatin1String("width")},
- {'l', QLatin1String("left")}, {'r', QLatin1String("radius")},
- {'c', QLatin1String("color")}, {'s', QLatin1String("style")},
- {'w', QLatin1String("width")}, {'r', QLatin1String("right")},
- {'s', QLatin1String("spacing")}, {'s', QLatin1String("style")},
- {'c', QLatin1String("color")}, {'l', QLatin1String("left")},
- {'r', QLatin1String("radius")}, {'r', QLatin1String("radius")},
- {'s', QLatin1String("style")}, {'w', QLatin1String("width")},
- {'t', QLatin1String("top")}, {'w', QLatin1String("width")},
- {'b', QLatin1String("border")}, {'b', QLatin1String("bottom")},
- {'b', QLatin1String("break")}, {'b', QLatin1String("box")},
- {'s', QLatin1String("shadow")}, {'b', QLatin1String("box")},
- {'s', QLatin1String("sizing")}, {'a', QLatin1String("after")},
- {'b', QLatin1String("before")}, {'b', QLatin1String("break")},
- {'i', QLatin1String("inside")}, {'c', QLatin1String("caption")},
- {'s', QLatin1String("side")}, {'c', QLatin1String("caret")},
- {'c', QLatin1String("color")}, {'c', QLatin1String("clear")},
- {'c', QLatin1String("clip")}, {'c', QLatin1String("color")},
- {'c', QLatin1String("columns")}, {'c', QLatin1String("column")},
- {'c', QLatin1String("count")}, {'f', QLatin1String("fill")},
- {'g', QLatin1String("gap")}, {'r', QLatin1String("rule")},
- {'c', QLatin1String("color")}, {'s', QLatin1String("style")},
- {'w', QLatin1String("width")}, {'s', QLatin1String("span")},
- {'w', QLatin1String("width")}, {'c', QLatin1String("content")},
- {'i', QLatin1String("increment")}, {'c', QLatin1String("counter")},
- {'r', QLatin1String("reset")}, {'a', QLatin1String("after")},
- {'b', QLatin1String("before")}, {'c', QLatin1String("cue")},
- {'c', QLatin1String("cursor")}, {'d', QLatin1String("direction")},
- {'d', QLatin1String("display")}, {'e', QLatin1String("elevation")},
- {'e', QLatin1String("empty")}, {'c', QLatin1String("cells")},
- {'f', QLatin1String("filter")}, {'f', QLatin1String("flex")},
- {'b', QLatin1String("basis")}, {'d', QLatin1String("direction")},
- {'f', QLatin1String("feature")}, {'s', QLatin1String("settings")},
- {'f', QLatin1String("flex")}, {'f', QLatin1String("flow")},
- {'g', QLatin1String("grow")}, {'s', QLatin1String("shrink")},
- {'w', QLatin1String("wrap")}, {'f', QLatin1String("float")},
- {'f', QLatin1String("family")}, {'k', QLatin1String("kerning")},
- {'l', QLatin1String("language")}, {'o', QLatin1String("override")},
- {'a', QLatin1String("adjust")}, {'s', QLatin1String("size")},
- {'s', QLatin1String("stretch")}, {'s', QLatin1String("style")},
- {'s', QLatin1String("synthesis")}, {'v', QLatin1String("variant")},
- {'a', QLatin1String("alternates")}, {'c', QLatin1String("caps")},
- {'e', QLatin1String("east")}, {'a', QLatin1String("asian")},
- {'l', QLatin1String("ligatures")}, {'n', QLatin1String("numeric")},
- {'p', QLatin1String("position")}, {'w', QLatin1String("weight")},
- {'f', QLatin1String("font")}, {'a', QLatin1String("area")},
- {'a', QLatin1String("auto")}, {'c', QLatin1String("columns")},
- {'f', QLatin1String("flow")}, {'r', QLatin1String("rows")},
- {'e', QLatin1String("end")}, {'g', QLatin1String("gap")},
- {'s', QLatin1String("start")}, {'c', QLatin1String("column")},
- {'g', QLatin1String("gap")}, {'e', QLatin1String("end")},
- {'g', QLatin1String("gap")}, {'s', QLatin1String("start")},
- {'r', QLatin1String("row")}, {'a', QLatin1String("areas")},
- {'c', QLatin1String("columns")}, {'r', QLatin1String("rows")},
- {'t', QLatin1String("template")}, {'g', QLatin1String("grid")},
- {'h', QLatin1String("hanging")}, {'p', QLatin1String("punctuation")},
- {'h', QLatin1String("height")}, {'h', QLatin1String("hyphens")},
- {'i', QLatin1String("isolation")}, {'j', QLatin1String("justify")},
- {'c', QLatin1String("content")}, {'i', QLatin1String("items")},
- {'s', QLatin1String("self")}, {'l', QLatin1String("leftimage")},
- {'l', QLatin1String("letter")}, {'s', QLatin1String("spacing")},
- {'b', QLatin1String("break")}, {'l', QLatin1String("line")},
- {'s', QLatin1String("style")}, {'i', QLatin1String("image")},
- {'s', QLatin1String("style")}, {'p', QLatin1String("position")},
- {'t', QLatin1String("type")}, {'l', QLatin1String("list")},
- {'s', QLatin1String("style")}, {'b', QLatin1String("bottom")},
- {'l', QLatin1String("left")}, {'r', QLatin1String("right")},
- {'t', QLatin1String("top")}, {'m', QLatin1String("margin")},
- {'m', QLatin1String("marker")}, {'o', QLatin1String("offset")},
- {'m', QLatin1String("marks")}, {'m', QLatin1String("max")},
- {'h', QLatin1String("height")}, {'w', QLatin1String("width")},
- {'m', QLatin1String("min")}, {'m', QLatin1String("mix")},
- {'b', QLatin1String("blend")}, {'m', QLatin1String("mode")},
- {'n', QLatin1String("nav")}, {'u', QLatin1String("up")},
- {'d', QLatin1String("down")}, {'l', QLatin1String("left")},
- {'r', QLatin1String("right")}, {'o', QLatin1String("opacity")},
- {'o', QLatin1String("order")}, {'o', QLatin1String("orphans")},
- {'c', QLatin1String("color")}, {'o', QLatin1String("offset")},
- {'s', QLatin1String("style")}, {'w', QLatin1String("width")},
- {'o', QLatin1String("outline")}, {'w', QLatin1String("wrap")},
- {'o', QLatin1String("overflow")}, {'b', QLatin1String("bottom")},
- {'l', QLatin1String("left")}, {'r', QLatin1String("right")},
- {'t', QLatin1String("top")}, {'p', QLatin1String("padding")},
- {'b', QLatin1String("break")}, {'a', QLatin1String("after")},
- {'b', QLatin1String("before")}, {'i', QLatin1String("inside")},
- {'p', QLatin1String("page")}, {'a', QLatin1String("after")},
- {'b', QLatin1String("before")}, {'p', QLatin1String("pause")},
- {'p', QLatin1String("perspective")}, {'o', QLatin1String("origin")},
- {'r', QLatin1String("range")}, {'p', QLatin1String("pitch")},
- {'c', QLatin1String("content")}, {'i', QLatin1String("items")},
- {'p', QLatin1String("place")}, {'s', QLatin1String("self")},
- {'p', QLatin1String("play")}, {'d', QLatin1String("during")},
- {'p', QLatin1String("position")}, {'q', QLatin1String("quotes")},
- {'r', QLatin1String("resize")}, {'r', QLatin1String("rest")},
- {'a', QLatin1String("after")}, {'b', QLatin1String("before")},
- {'r', QLatin1String("rest")}, {'r', QLatin1String("richness")},
- {'r', QLatin1String("right")}, {'s', QLatin1String("size")},
- {'h', QLatin1String("header")}, {'n', QLatin1String("numeral")},
- {'s', QLatin1String("speak")}, {'p', QLatin1String("punctuation")},
- {'s', QLatin1String("speak")}, {'s', QLatin1String("speech")},
- {'r', QLatin1String("rate")}, {'s', QLatin1String("stress")},
- {'t', QLatin1String("tab")}, {'s', QLatin1String("size")},
- {'t', QLatin1String("table")}, {'l', QLatin1String("layout")},
- {'t', QLatin1String("text")}, {'a', QLatin1String("align")},
- {'l', QLatin1String("last")}, {'d', QLatin1String("decoration")},
- {'c', QLatin1String("color")}, {'l', QLatin1String("line")},
- {'s', QLatin1String("skip")}, {'s', QLatin1String("style")},
- {'i', QLatin1String("indent")}, {'o', QLatin1String("overflow")},
- {'s', QLatin1String("shadow")}, {'t', QLatin1String("transform")},
- {'u', QLatin1String("underline")}, {'p', QLatin1String("position")},
- {'t', QLatin1String("top")}, {'t', QLatin1String("transform")},
- {'o', QLatin1String("origin")}, {'s', QLatin1String("style")},
- {'t', QLatin1String("transition")}, {'d', QLatin1String("delay")},
- {'d', QLatin1String("duration")}, {'p', QLatin1String("property")},
- {'t', QLatin1String("timing")}, {'f', QLatin1String("function")},
- {'u', QLatin1String("unicode")}, {'b', QLatin1String("bidi")},
- {'v', QLatin1String("vertical")}, {'a', QLatin1String("align")},
- {'v', QLatin1String("visibility")}, {'b', QLatin1String("balance")},
- {'d', QLatin1String("duration")}, {'f', QLatin1String("family")},
- {'p', QLatin1String("pitch")}, {'r', QLatin1String("range")},
- {'r', QLatin1String("rate")}, {'s', QLatin1String("stress")},
- {'v', QLatin1String("volume")}, {'v', QLatin1String("voice")},
- {'v', QLatin1String("volume")}, {'w', QLatin1String("white")},
- {'s', QLatin1String("space")}, {'w', QLatin1String("widows")},
- {'w', QLatin1String("width")}, {'w', QLatin1String("will")},
- {'c', QLatin1String("change")}, {'w', QLatin1String("word")},
- {'b', QLatin1String("break")}, {'s', QLatin1String("spacing")},
- {'w', QLatin1String("wrap")}, {'x', QLatin1String("x")},
- {'y', QLatin1String("y")}, {'z', QLatin1String("z")},
- {'i', QLatin1String("index")}, {'r', QLatin1String("rgb")},
- {'s', QLatin1String("sans")}, {'s', QLatin1String("serif")},
- {'n', QLatin1String("normal")}};
-
- css_literals = {};
-
- css_builtin = {};
-
- css_other = {};
-}
-void loadCSSData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!cssDataInitialized)
- {
- initCSSData();
- cssDataInitialized = true;
- }
- types = css_types;
- keywords = css_keywords;
- builtin = css_builtin;
- literals = css_literals;
- other = css_other;
-}
-
-/********************************************************/
-/*** Typescript DATA *********************************/
-/********************************************************/
-static bool typescriptDataInitialized = false;
-static LanguageData typescript_keywords;
-static LanguageData typescript_types;
-static LanguageData typescript_literals;
-static LanguageData typescript_builtin;
-static LanguageData typescript_other;
-void initTypescriptData()
-{
- typescript_keywords
- = {{'i', QLatin1String("in")}, {'i', QLatin1String("if")},
- {'f', QLatin1String("for")}, {'w', QLatin1String("while")},
- {'f', QLatin1String("finally")}, {'n', QLatin1String("new")},
- {'f', QLatin1String("function")}, {'d', QLatin1String("do")},
- {'r', QLatin1String("return")}, {'v', QLatin1String("void")},
- {'e', QLatin1String("else")}, {'b', QLatin1String("break")},
- {'c', QLatin1String("catch")}, {'i', QLatin1String("instanceof")},
- {'w', QLatin1String("with")}, {'t', QLatin1String("throw")},
- {'c', QLatin1String("case")}, {'d', QLatin1String("default")},
- {'t', QLatin1String("try")}, {'t', QLatin1String("this")},
- {'s', QLatin1String("switch")}, {'c', QLatin1String("continue")},
- {'t', QLatin1String("typeof")}, {'d', QLatin1String("delete")},
- {'l', QLatin1String("let")}, {'y', QLatin1String("yield")},
- {'c', QLatin1String("const")}, {'p', QLatin1String("public")},
- {'p', QLatin1String("private")}, {'p', QLatin1String("protected")},
- {'g', QLatin1String("get")}, {'s', QLatin1String("set")},
- {'s', QLatin1String("super")}, {'s', QLatin1String("static")},
- {'i', QLatin1String("implements")}, {'e', QLatin1String("export")},
- {'i', QLatin1String("import")}, {'d', QLatin1String("declare")},
- {'t', QLatin1String("type")}, {'n', QLatin1String("namespace")},
- {'a', QLatin1String("abstract")}, {'a', QLatin1String("as")},
- {'f', QLatin1String("from")}, {'e', QLatin1String("extends")},
- {'a', QLatin1String("async")}, {'a', QLatin1String("await")}};
-
- typescript_types = {{'v', QLatin1String("var")},
- {'c', QLatin1String("class")},
- {'e', QLatin1String("enum")}};
-
- typescript_literals
- = {{('f'), QLatin1String("false")}, {('n'), QLatin1String("null")},
- {('t'), QLatin1String("true")}, {('u'), QLatin1String("undefined")},
- {('N'), QLatin1String("NaN")}, {('I'), QLatin1String("Infinity")}};
-
- typescript_builtin = {{'e', QLatin1String("eval")},
- {'i', QLatin1String("isFinite")},
- {'i', QLatin1String("isNaN")},
- {'p', QLatin1String("parseFloat")},
- {'p', QLatin1String("parseInt")},
- {'d', QLatin1String("decodeURI")},
- {'d', QLatin1String("decodeURIComponent")},
- {'e', QLatin1String("encodeURI")},
- {'e', QLatin1String("encodeURIComponent")},
- {'e', QLatin1String("escape")},
- {'u', QLatin1String("unescape")},
- {'O', QLatin1String("Object")},
- {'F', QLatin1String("Function")},
- {'B', QLatin1String("Boolean")},
- {'E', QLatin1String("Error")},
- {'E', QLatin1String("EvalError")},
- {'I', QLatin1String("InternalError")},
- {'R', QLatin1String("RangeError")},
- {'R', QLatin1String("ReferenceError")},
- {'S', QLatin1String("StopIteration")},
- {'S', QLatin1String("SyntaxError")},
- {'T', QLatin1String("TypeError")},
- {'U', QLatin1String("URIError")},
- {'N', QLatin1String("Number")},
- {'M', QLatin1String("Math")},
- {'D', QLatin1String("Date")},
- {'S', QLatin1String("String")},
- {'R', QLatin1String("RegExp")},
- {'A', QLatin1String("Array")},
- {'F', QLatin1String("Float32Array")},
- {'F', QLatin1String("Float64Array")},
- {'I', QLatin1String("Int16Array")},
- {'I', QLatin1String("Int32Array")},
- {'I', QLatin1String("Int8Array")},
- {'U', QLatin1String("Uint16Array")},
- {'U', QLatin1String("Uint32Array")},
- {'U', QLatin1String("Uint8Array")},
- {'U', QLatin1String("Uint8ClampedArray")},
- {'A', QLatin1String("ArrayBuffer")},
- {'D', QLatin1String("DataView")},
- {'J', QLatin1String("JSON")},
- {'I', QLatin1String("Intl")},
- {'a', QLatin1String("arguments")},
- {'r', QLatin1String("require")},
- {'m', QLatin1String("module")},
- {'c', QLatin1String("console")},
- {'w', QLatin1String("window")},
- {'d', QLatin1String("document")},
- {'a', QLatin1String("any")},
- {'n', QLatin1String("number")},
- {'b', QLatin1String("boolean")},
- {'s', QLatin1String("string")},
- {'v', QLatin1String("void")},
- {'P', QLatin1String("Promise")}};
-
- typescript_other = {};
-}
-void loadTypescriptData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!typescriptDataInitialized)
- {
- initTypescriptData();
- typescriptDataInitialized = true;
- }
- types = typescript_types;
- keywords = typescript_keywords;
- builtin = typescript_builtin;
- literals = typescript_literals;
- other = typescript_other;
-}
-
-/********************************************************/
-/*** YAML DATA ***************************************/
-/********************************************************/
-static bool YAMLDataInitialized = false;
-static LanguageData YAML_keywords;
-static LanguageData YAML_types;
-static LanguageData YAML_literals;
-static LanguageData YAML_builtin;
-static LanguageData YAML_other;
-void initYAMLData()
-{
- YAML_keywords = {};
- YAML_types = {};
- YAML_literals = {
- {('f'), QLatin1String("false")},
- {('t'), QLatin1String("true")},
- {('n'), QLatin1String("null")},
- };
-
- YAML_builtin = {};
- YAML_other = {};
-}
-void loadYAMLData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!YAMLDataInitialized)
- {
- initYAMLData();
- YAMLDataInitialized = true;
- }
- types = YAML_types;
- keywords = YAML_keywords;
- builtin = YAML_builtin;
- literals = YAML_literals;
- other = YAML_other;
-}
-
-/********************************************************/
-/*** VEX DATA ***************************************/
-/********************************************************/
-static bool vexDataInitialized = false;
-static LanguageData vex_keywords;
-static LanguageData vex_types;
-static LanguageData vex_literals;
-static LanguageData vex_builtin;
-static LanguageData vex_other;
-void initVEXData()
-{
- vex_keywords
- = {{'b', QLatin1String("break")}, {'c', QLatin1String("continue")},
- {'d', QLatin1String("do")}, {'e', QLatin1String("else")},
- {'f', QLatin1String("for")}, {'f', QLatin1String("foreach")},
- {'f', QLatin1String("forpoints")}, {'f', QLatin1String("function")},
- {'g', QLatin1String("gather")}, {'i', QLatin1String("if")},
- {'i', QLatin1String("illuminance")}, {'r', QLatin1String("return")},
- {'w', QLatin1String("while")}};
- vex_types = {
- {'b', QLatin1String("bsdf")}, {'c', QLatin1String("char")},
- {'c', QLatin1String("color")}, {'f', QLatin1String("float")},
- {'i', QLatin1String("int")}, {'i', QLatin1String("integer")},
- {'m', QLatin1String("matrix")}, {'m', QLatin1String("matrix2")},
- {'m', QLatin1String("matrix3")}, {'m', QLatin1String("matrix4")},
- {'n', QLatin1String("normal")}, {'p', QLatin1String("point")},
- {'s', QLatin1String("string")}, {'s', QLatin1String("struct")},
- {'t', QLatin1String("typedef")}, {'u', QLatin1String("union")},
- {'v', QLatin1String("vector")}, {'v', QLatin1String("vector2")},
- {'v', QLatin1String("vector4")}, {'v', QLatin1String("void")},
- };
- vex_literals = {
- {('f'), QLatin1String("false")},
- {('t'), QLatin1String("true")},
- {('n'), QLatin1String("null")},
- };
-
- vex_builtin = {{'D', QLatin1String("Du")},
- {'D', QLatin1String("Dv")},
- {'D', QLatin1String("Dw")},
- {'a', QLatin1String("abs")},
- {'a', QLatin1String("accessframe")},
- {'a', QLatin1String("acos")},
- {'a', QLatin1String("addattrib")},
- {'a', QLatin1String("addattribute")},
- {'a', QLatin1String("adddetailattrib")},
- {'a', QLatin1String("addgroup")},
- {'a', QLatin1String("addpoint")},
- {'a', QLatin1String("addpointattrib")},
- {'a', QLatin1String("addprim")},
- {'a', QLatin1String("addprimattrib")},
- {'a', QLatin1String("addvariablename")},
- {'a', QLatin1String("addvertex")},
- {'a', QLatin1String("addvertexattrib")},
- {'a', QLatin1String("addvisualizer")},
- {'a', QLatin1String("agentaddclip")},
- {'a', QLatin1String("agentclipcatalog")},
- {'a', QLatin1String("agentclipchannel")},
- {'a', QLatin1String("agentcliplength")},
- {'a', QLatin1String("agentclipnames")},
- {'a', QLatin1String("agentclipsample")},
- {'a', QLatin1String("agentclipsamplelocal")},
- {'a', QLatin1String("agentclipsamplerate")},
- {'a', QLatin1String("agentclipsampleworld")},
- {'a', QLatin1String("agentcliptimes")},
- {'a', QLatin1String("agentclipweights")},
- {'a', QLatin1String("agentcollisionlayer")},
- {'a', QLatin1String("agentcurrentlayer")},
- {'a', QLatin1String("agentlayerbindings")},
- {'a', QLatin1String("agentlayers")},
- {'a', QLatin1String("agentlayershapes")},
- {'a', QLatin1String("agentlocaltransform")},
- {'a', QLatin1String("agentlocaltransforms")},
- {'a', QLatin1String("agentrigchildren")},
- {'a', QLatin1String("agentrigfind")},
- {'a', QLatin1String("agentrigparent")},
- {'a', QLatin1String("agenttransformcount")},
- {'a', QLatin1String("agenttransformnames")},
- {'a', QLatin1String("agenttransformtolocal")},
- {'a', QLatin1String("agenttransformtoworld")},
- {'a', QLatin1String("agentworldtransform")},
- {'a', QLatin1String("agentworldtransforms")},
- {'a', QLatin1String("albedo")},
- {'a', QLatin1String("alphaname")},
- {'a', QLatin1String("ambient")},
- {'a', QLatin1String("anoise")},
- {'a', QLatin1String("append")},
- {'a', QLatin1String("area")},
- {'a', QLatin1String("argsort")},
- {'a', QLatin1String("array")},
- {'a', QLatin1String("ashikhmin")},
- {'a', QLatin1String("asin")},
- {'a', QLatin1String("assert_enabled")},
- {'a', QLatin1String("assign")},
- {'a', QLatin1String("atan")},
- {'a', QLatin1String("atan2")},
- {'a', QLatin1String("atof")},
- {'a', QLatin1String("atoi")},
- {'a', QLatin1String("atten")},
- {'a', QLatin1String("attrib")},
- {'a', QLatin1String("attribclass")},
- {'a', QLatin1String("attribsize")},
- {'a', QLatin1String("attribtype")},
- {'a', QLatin1String("attribtypeinfo")},
- {'a', QLatin1String("avg")},
- {'b', QLatin1String("binput")},
- {'b', QLatin1String("blackbody")},
- {'b', QLatin1String("blinn")},
- {'b', QLatin1String("blinnBRDF")},
- {'b', QLatin1String("bouncelabel")},
- {'b', QLatin1String("bouncemask")},
- {'b', QLatin1String("bumpmap")},
- {'b', QLatin1String("bumpmapA")},
- {'b', QLatin1String("bumpmapB")},
- {'b', QLatin1String("bumpmapG")},
- {'b', QLatin1String("bumpmapL")},
- {'b', QLatin1String("bumpmapR")},
- {'b', QLatin1String("bumpname")},
- {'c', QLatin1String("cbrt")},
- {'c', QLatin1String("ceil")},
- {'c', QLatin1String("ch")},
- {'c', QLatin1String("ch3")},
- {'c', QLatin1String("ch4")},
- {'c', QLatin1String("chend")},
- {'c', QLatin1String("chendf")},
- {'c', QLatin1String("chendt")},
- {'c', QLatin1String("chf")},
- {'c', QLatin1String("chi")},
- {'c', QLatin1String("chinput")},
- {'c', QLatin1String("chname")},
- {'c', QLatin1String("chnumchan")},
- {'c', QLatin1String("chp")},
- {'c', QLatin1String("chr")},
- {'c', QLatin1String("chramp")},
- {'c', QLatin1String("chrate")},
- {'c', QLatin1String("chs")},
- {'c', QLatin1String("chsraw")},
- {'c', QLatin1String("chstart")},
- {'c', QLatin1String("chstartf")},
- {'c', QLatin1String("chstartt")},
- {'c', QLatin1String("chv")},
- {'c', QLatin1String("cinput")},
- {'c', QLatin1String("ckspline")},
- {'c', QLatin1String("clamp")},
- {'c', QLatin1String("clip")},
- {'c', QLatin1String("colormap")},
- {'c', QLatin1String("colorname")},
- {'c', QLatin1String("computenormal")},
- {'c', QLatin1String("concat")},
- {'c', QLatin1String("cone")},
- {'c', QLatin1String("cos")},
- {'c', QLatin1String("cosh")},
- {'c', QLatin1String("cracktransform")},
- {'c', QLatin1String("cross")},
- {'c', QLatin1String("cspline")},
- {'c', QLatin1String("ctransform")},
- {'c', QLatin1String("curlnoise")},
- {'c', QLatin1String("curlnoise2d")},
- {'c', QLatin1String("curlxnoise")},
- {'c', QLatin1String("curlxnoise2d")},
- {'c', QLatin1String("cvex_bsdf")},
- {'d', QLatin1String("degrees")},
- {'d', QLatin1String("depthmap")},
- {'d', QLatin1String("depthname")},
- {'d', QLatin1String("detail")},
- {'d', QLatin1String("detailattrib")},
- {'d', QLatin1String("detailattribsize")},
- {'d', QLatin1String("detailattribtype")},
- {'d', QLatin1String("detailattribtypeinfo")},
- {'d', QLatin1String("detailintrinsic")},
- {'d', QLatin1String("determinant")},
- {'d', QLatin1String("diffuse")},
- {'d', QLatin1String("diffuseBRDF")},
- {'d', QLatin1String("dihedral")},
- {'d', QLatin1String("dimport")},
- {'d', QLatin1String("distance")},
- {'d', QLatin1String("distance2")},
- {'d', QLatin1String("dot")},
- {'d', QLatin1String("dsmpixel")},
- {'e', QLatin1String("eigenvalues")},
- {'e', QLatin1String("endswith")},
- {'e', QLatin1String("environment")},
- {'e', QLatin1String("erf")},
- {'e', QLatin1String("erf_inv")},
- {'e', QLatin1String("erfc")},
- {'e', QLatin1String("error")},
- {'e', QLatin1String("eulertoquaternion")},
- {'e', QLatin1String("eval_bsdf")},
- {'e', QLatin1String("exp")},
- {'e', QLatin1String("expand_udim")},
- {'e', QLatin1String("expandpointgroup")},
- {'e', QLatin1String("expandprimgroup")},
- {'f', QLatin1String("fastshadow")},
- {'f', QLatin1String("filamentsample")},
- {'f', QLatin1String("file_stat")},
- {'f', QLatin1String("filtershadow")},
- {'f', QLatin1String("filterstep")},
- {'f', QLatin1String("find")},
- {'f', QLatin1String("findattribval")},
- {'f', QLatin1String("findattribvalcount")},
- {'f', QLatin1String("finput")},
- {'f', QLatin1String("fit")},
- {'f', QLatin1String("fit01")},
- {'f', QLatin1String("fit10")},
- {'f', QLatin1String("fit11")},
- {'f', QLatin1String("floor")},
- {'f', QLatin1String("flownoise")},
- {'f', QLatin1String("flowpnoise")},
- {'f', QLatin1String("frac")},
- {'f', QLatin1String("fresnel")},
- {'f', QLatin1String("fromNDC")},
- {'f', QLatin1String("frontface")},
- {'f', QLatin1String("fuzzify")},
- {'f', QLatin1String("fuzzy_and")},
- {'f', QLatin1String("fuzzy_defuzz_centroid")},
- {'f', QLatin1String("fuzzy_nand")},
- {'f', QLatin1String("fuzzy_nor")},
- {'f', QLatin1String("fuzzy_not")},
- {'f', QLatin1String("fuzzy_nxor")},
- {'f', QLatin1String("fuzzy_or")},
- {'f', QLatin1String("fuzzy_xor")},
- {'g', QLatin1String("geoself")},
- {'g', QLatin1String("getattrib")},
- {'g', QLatin1String("getattribute")},
- {'g', QLatin1String("getbbox")},
- {'g', QLatin1String("getblurP")},
- {'g', QLatin1String("getbounces")},
- {'g', QLatin1String("getbounds")},
- {'g', QLatin1String("getcomp")},
- {'g', QLatin1String("getcomponents")},
- {'g', QLatin1String("getderiv")},
- {'g', QLatin1String("getfogname")},
- {'g', QLatin1String("getglobalraylevel")},
- {'g', QLatin1String("getlight")},
- {'g', QLatin1String("getlightid")},
- {'g', QLatin1String("getlightname")},
- {'g', QLatin1String("getlights")},
- {'g', QLatin1String("getlightscope")},
- {'g', QLatin1String("getmaterial")},
- {'g', QLatin1String("getobjectname")},
- {'g', QLatin1String("getphotonlight")},
- {'g', QLatin1String("getpointbbox")},
- {'g', QLatin1String("getprimid")},
- {'g', QLatin1String("getptextureid")},
- {'g', QLatin1String("getraylevel")},
- {'g', QLatin1String("getrayweight")},
- {'g', QLatin1String("getsamplestore")},
- {'g', QLatin1String("getscope")},
- {'g', QLatin1String("getsmoothP")},
- {'g', QLatin1String("getspace")},
- {'g', QLatin1String("getuvobjects")},
- {'g', QLatin1String("getuvtangents")},
- {'g', QLatin1String("gradient")},
- {'h', QLatin1String("hair")},
- {'h', QLatin1String("hasattrib")},
- {'h', QLatin1String("hasdetailattrib")},
- {'h', QLatin1String("haslight")},
- {'h', QLatin1String("hasplane")},
- {'h', QLatin1String("haspointattrib")},
- {'h', QLatin1String("hasprimattrib")},
- {'h', QLatin1String("hasvertexattrib")},
- {'h', QLatin1String("hedge_dstpoint")},
- {'h', QLatin1String("hedge_dstvertex")},
- {'h', QLatin1String("hedge_equivcount")},
- {'h', QLatin1String("hedge_isequiv")},
- {'h', QLatin1String("hedge_isprimary")},
- {'h', QLatin1String("hedge_isvalid")},
- {'h', QLatin1String("hedge_next")},
- {'h', QLatin1String("hedge_nextequiv")},
- {'h', QLatin1String("hedge_postdstpoint")},
- {'h', QLatin1String("hedge_postdstvertex")},
- {'h', QLatin1String("hedge_presrcpoint")},
- {'h', QLatin1String("hedge_presrcvertex")},
- {'h', QLatin1String("hedge_prev")},
- {'h', QLatin1String("hedge_prim")},
- {'h', QLatin1String("hedge_primary")},
- {'h', QLatin1String("hedge_srcpoint")},
- {'h', QLatin1String("hedge_srcvertex")},
- {'h', QLatin1String("henyeygreenstein")},
- {'h', QLatin1String("hscript_noise")},
- {'h', QLatin1String("hscript_rand")},
- {'h', QLatin1String("hscript_snoise")},
- {'h', QLatin1String("hscript_sturb")},
- {'h', QLatin1String("hscript_turb")},
- {'h', QLatin1String("hsvtorgb")},
- {'i', QLatin1String("iaspect")},
- {'i', QLatin1String("ichname")},
- {'i', QLatin1String("ident")},
- {'i', QLatin1String("idtopoint")},
- {'i', QLatin1String("idtoprim")},
- {'i', QLatin1String("iend")},
- {'i', QLatin1String("iendtime")},
- {'i', QLatin1String("ihasplane")},
- {'i', QLatin1String("import")},
- {'i', QLatin1String("ingroup")},
- {'i', QLatin1String("inpointgroup")},
- {'i', QLatin1String("inprimgroup")},
- {'i', QLatin1String("insert")},
- {'i', QLatin1String("instance")},
- {'i', QLatin1String("interpolate")},
- {'i', QLatin1String("intersect")},
- {'i', QLatin1String("intersect_all")},
- {'i', QLatin1String("intersect_lights")},
- {'i', QLatin1String("inumplanes")},
- {'i', QLatin1String("invert")},
- {'i', QLatin1String("invertexgroup")},
- {'i', QLatin1String("iplaneindex")},
- {'i', QLatin1String("iplanename")},
- {'i', QLatin1String("iplanesize")},
- {'i', QLatin1String("irate")},
- {'i', QLatin1String("irradiance")},
- {'i', QLatin1String("isalpha")},
- {'i', QLatin1String("isbound")},
- {'i', QLatin1String("isconnected")},
- {'i', QLatin1String("isdigit")},
- {'i', QLatin1String("isfinite")},
- {'i', QLatin1String("isfogray")},
- {'i', QLatin1String("isframes")},
- {'i', QLatin1String("isnan")},
- {'i', QLatin1String("isotropic")},
- {'i', QLatin1String("israytracing")},
- {'i', QLatin1String("issamples")},
- {'i', QLatin1String("isseconds")},
- {'i', QLatin1String("isshadowray")},
- {'i', QLatin1String("istart")},
- {'i', QLatin1String("istarttime")},
- {'i', QLatin1String("isuvrendering")},
- {'i', QLatin1String("isvalidindex")},
- {'i', QLatin1String("isvarying")},
- {'i', QLatin1String("itoa")},
- {'i', QLatin1String("ixres")},
- {'i', QLatin1String("iyres")},
- {'j', QLatin1String("join")},
- {'k', QLatin1String("kspline")},
- {'l', QLatin1String("len")},
- {'l', QLatin1String("length")},
- {'l', QLatin1String("length2")},
- {'l', QLatin1String("lerp")},
- {'l', QLatin1String("lightid")},
- {'l', QLatin1String("limit_sample_space")},
- {'l', QLatin1String("limport")},
- {'l', QLatin1String("lkspline")},
- {'l', QLatin1String("log")},
- {'l', QLatin1String("log10")},
- {'l', QLatin1String("lookat")},
- {'l', QLatin1String("lspline")},
- {'l', QLatin1String("lstrip")},
- {'l', QLatin1String("luminance")},
- {'l', QLatin1String("lumname")},
- {'m', QLatin1String("makebasis")},
- {'m', QLatin1String("maketransform")},
- {'m', QLatin1String("maskname")},
- {'m', QLatin1String("match")},
- {'m', QLatin1String("matchvex_blinn")},
- {'m', QLatin1String("matchvex_specular")},
- {'m', QLatin1String("mattrib")},
- {'m', QLatin1String("max")},
- {'m', QLatin1String("mdensity")},
- {'m', QLatin1String("metaimport")},
- {'m', QLatin1String("metamarch")},
- {'m', QLatin1String("metanext")},
- {'m', QLatin1String("metastart")},
- {'m', QLatin1String("metaweight")},
- {'m', QLatin1String("min")},
- {'m', QLatin1String("minpos")},
- {'m', QLatin1String("mspace")},
- {'n', QLatin1String("nametopoint")},
- {'n', QLatin1String("nametoprim")},
- {'n', QLatin1String("nbouncetypes")},
- {'n', QLatin1String("nearpoint")},
- {'n', QLatin1String("nearpoints")},
- {'n', QLatin1String("neighbour")},
- {'n', QLatin1String("neighbourcount")},
- {'n', QLatin1String("neighbours")},
- {'n', QLatin1String("newgroup")},
- {'n', QLatin1String("newsampler")},
- {'n', QLatin1String("nextsample")},
- {'n', QLatin1String("ninput")},
- {'n', QLatin1String("noise")},
- {'n', QLatin1String("noised")},
- {'n', QLatin1String("normal_bsdf")},
- {'n', QLatin1String("normalize")},
- {'n', QLatin1String("normalname")},
- {'n', QLatin1String("npoints")},
- {'n', QLatin1String("npointsgroup")},
- {'n', QLatin1String("nprimitives")},
- {'n', QLatin1String("nprimitivesgroup")},
- {'n', QLatin1String("nrandom")},
- {'n', QLatin1String("ntransform")},
- {'n', QLatin1String("nuniqueval")},
- {'n', QLatin1String("nvertices")},
- {'n', QLatin1String("nverticesgroup")},
- {'o', QLatin1String("occlusion")},
- {'o', QLatin1String("onoise")},
- {'o', QLatin1String("opdigits")},
- {'o', QLatin1String("opend")},
- {'o', QLatin1String("opfullpath")},
- {'o', QLatin1String("opstart")},
- {'o', QLatin1String("optransform")},
- {'o', QLatin1String("ord")},
- {'o', QLatin1String("osd_facecount")},
- {'o', QLatin1String("osd_firstpatch")},
- {'o', QLatin1String("osd_limitsurface")},
- {'o', QLatin1String("osd_limitsurfacevertex")},
- {'o', QLatin1String("osd_patchcount")},
- {'o', QLatin1String("osd_patches")},
- {'o', QLatin1String("outerproduct")},
- {'o', QLatin1String("ow_nspace")},
- {'o', QLatin1String("ow_space")},
- {'o', QLatin1String("ow_vspace")},
- {'p', QLatin1String("pack_inttosafefloat")},
- {'p', QLatin1String("pathtrace")},
- {'p', QLatin1String("pcclose")},
- {'p', QLatin1String("pcconvex")},
- {'p', QLatin1String("pcexport")},
- {'p', QLatin1String("pcfarthest")},
- {'p', QLatin1String("pcfilter")},
- {'p', QLatin1String("pcfind")},
- {'p', QLatin1String("pcfind_radius")},
- {'p', QLatin1String("pcgenerate")},
- {'p', QLatin1String("pcimport")},
- {'p', QLatin1String("pcimportbyidx3")},
- {'p', QLatin1String("pcimportbyidx4")},
- {'p', QLatin1String("pcimportbyidxf")},
- {'p', QLatin1String("pcimportbyidxi")},
- {'p', QLatin1String("pcimportbyidxp")},
- {'p', QLatin1String("pcimportbyidxs")},
- {'p', QLatin1String("pcimportbyidxv")},
- {'p', QLatin1String("pciterate")},
- {'p', QLatin1String("pcnumfound")},
- {'p', QLatin1String("pcopen")},
- {'p', QLatin1String("pcopenlod")},
- {'p', QLatin1String("pcsampleleaf")},
- {'p', QLatin1String("pcsize")},
- {'p', QLatin1String("pcunshaded")},
- {'p', QLatin1String("pcwrite")},
- {'p', QLatin1String("pgfind")},
- {'p', QLatin1String("phong")},
- {'p', QLatin1String("phongBRDF")},
- {'p', QLatin1String("phonglobe")},
- {'p', QLatin1String("photonmap")},
- {'p', QLatin1String("planeindex")},
- {'p', QLatin1String("planename")},
- {'p', QLatin1String("planesize")},
- {'p', QLatin1String("pluralize")},
- {'p', QLatin1String("pnoise")},
- {'p', QLatin1String("point")},
- {'p', QLatin1String("pointattrib")},
- {'p', QLatin1String("pointattribsize")},
- {'p', QLatin1String("pointattribtype")},
- {'p', QLatin1String("pointattribtypeinfo")},
- {'p', QLatin1String("pointedge")},
- {'p', QLatin1String("pointhedge")},
- {'p', QLatin1String("pointhedgenext")},
- {'p', QLatin1String("pointname")},
- {'p', QLatin1String("pointprims")},
- {'p', QLatin1String("pointvertex")},
- {'p', QLatin1String("pointvertices")},
- {'p', QLatin1String("polardecomp")},
- {'p', QLatin1String("pop")},
- {'p', QLatin1String("pow")},
- {'p', QLatin1String("prim")},
- {'p', QLatin1String("prim_attribute")},
- {'p', QLatin1String("prim_normal")},
- {'p', QLatin1String("primattrib")},
- {'p', QLatin1String("primattribsize")},
- {'p', QLatin1String("primattribtype")},
- {'p', QLatin1String("primattribtypeinfo")},
- {'p', QLatin1String("primhedge")},
- {'p', QLatin1String("primintrinsic")},
- {'p', QLatin1String("primpoint")},
- {'p', QLatin1String("primpoints")},
- {'p', QLatin1String("primuv")},
- {'p', QLatin1String("primvertex")},
- {'p', QLatin1String("primvertexcount")},
- {'p', QLatin1String("primvertices")},
- {'p', QLatin1String("print_once")},
- {'p', QLatin1String("printf")},
- {'p', QLatin1String("product")},
- {'p', QLatin1String("ptexture")},
- {'p', QLatin1String("ptlined")},
- {'p', QLatin1String("ptransform")},
- {'p', QLatin1String("push")},
- {'q', QLatin1String("qconvert")},
- {'q', QLatin1String("qdistance")},
- {'q', QLatin1String("qinvert")},
- {'q', QLatin1String("qmultiply")},
- {'q', QLatin1String("qrotate")},
- {'q', QLatin1String("quaternion")},
- {'r', QLatin1String("radians")},
- {'r', QLatin1String("rand")},
- {'r', QLatin1String("random")},
- {'r', QLatin1String("random_fhash")},
- {'r', QLatin1String("random_ihash")},
- {'r', QLatin1String("random_shash")},
- {'r', QLatin1String("random_sobol")},
- {'r', QLatin1String("rawbumpmap")},
- {'r', QLatin1String("rawbumpmapA")},
- {'r', QLatin1String("rawbumpmapB")},
- {'r', QLatin1String("rawbumpmapG")},
- {'r', QLatin1String("rawbumpmapL")},
- {'r', QLatin1String("rawbumpmapR")},
- {'r', QLatin1String("rawcolormap")},
- {'r', QLatin1String("rayhittest")},
- {'r', QLatin1String("rayimport")},
- {'r', QLatin1String("re_find")},
- {'r', QLatin1String("re_findall")},
- {'r', QLatin1String("re_match")},
- {'r', QLatin1String("re_replace")},
- {'r', QLatin1String("re_split")},
- {'r', QLatin1String("reflect")},
- {'r', QLatin1String("reflectlight")},
- {'r', QLatin1String("refract")},
- {'r', QLatin1String("refractlight")},
- {'r', QLatin1String("relativepath")},
- {'r', QLatin1String("relbbox")},
- {'r', QLatin1String("relpointbbox")},
- {'r', QLatin1String("removegroup")},
- {'r', QLatin1String("removeindex")},
- {'r', QLatin1String("removepoint")},
- {'r', QLatin1String("removeprim")},
- {'r', QLatin1String("removevalue")},
- {'r', QLatin1String("renderstate")},
- {'r', QLatin1String("reorder")},
- {'r', QLatin1String("resample_linear")},
- {'r', QLatin1String("resize")},
- {'r', QLatin1String("resolvemissedray")},
- {'r', QLatin1String("reverse")},
- {'r', QLatin1String("rgbtohsv")},
- {'r', QLatin1String("rgbtoxyz")},
- {'r', QLatin1String("rint")},
- {'r', QLatin1String("rotate")},
- {'r', QLatin1String("rotate_x_to")},
- {'r', QLatin1String("rstrip")},
- {'s', QLatin1String("sample_bsdf")},
- {'s', QLatin1String("sample_cauchy")},
- {'s', QLatin1String("sample_circle_arc")},
- {'s', QLatin1String("sample_circle_edge_uniform")},
- {'s', QLatin1String("sample_circle_slice")},
- {'s', QLatin1String("sample_circle_uniform")},
- {'s', QLatin1String("sample_direction_cone")},
- {'s', QLatin1String("sample_direction_uniform")},
- {'s', QLatin1String("sample_discrete")},
- {'s', QLatin1String("sample_exponential")},
- {'s', QLatin1String("sample_geometry")},
- {'s', QLatin1String("sample_hemisphere")},
- {'s', QLatin1String("sample_hypersphere_cone")},
- {'s', QLatin1String("sample_hypersphere_uniform")},
- {'s', QLatin1String("sample_light")},
- {'s', QLatin1String("sample_lognormal")},
- {'s', QLatin1String("sample_lognormal_by_median")},
- {'s', QLatin1String("sample_normal")},
- {'s', QLatin1String("sample_orientation_cone")},
- {'s', QLatin1String("sample_orientation_uniform")},
- {'s', QLatin1String("sample_photon")},
- {'s', QLatin1String("sample_sphere_cone")},
- {'s', QLatin1String("sample_sphere_uniform")},
- {'s', QLatin1String("sampledisk")},
- {'s', QLatin1String("scale")},
- {'s', QLatin1String("select")},
- {'s', QLatin1String("sensor_panorama_create")},
- {'s', QLatin1String("sensor_panorama_getcolor")},
- {'s', QLatin1String("sensor_panorama_getcone")},
- {'s', QLatin1String("sensor_panorama_getdepth")},
- {'s', QLatin1String("sensor_save")},
- {'s', QLatin1String("serialize")},
- {'s', QLatin1String("set")},
- {'s', QLatin1String("setagentclipnames")},
- {'s', QLatin1String("setagentcliptimes")},
- {'s', QLatin1String("setagentclipweights")},
- {'s', QLatin1String("setagentcollisionlayer")},
- {'s', QLatin1String("setagentcurrentlayer")},
- {'s', QLatin1String("setagentlocaltransform")},
- {'s', QLatin1String("setagentlocaltransforms")},
- {'s', QLatin1String("setagentworldtransform")},
- {'s', QLatin1String("setagentworldtransforms")},
- {'s', QLatin1String("setattrib")},
- {'s', QLatin1String("setattribtypeinfo")},
- {'s', QLatin1String("setcomp")},
- {'s', QLatin1String("setcurrentlight")},
- {'s', QLatin1String("setdetailattrib")},
- {'s', QLatin1String("setpointattrib")},
- {'s', QLatin1String("setpointgroup")},
- {'s', QLatin1String("setprimattrib")},
- {'s', QLatin1String("setprimgroup")},
- {'s', QLatin1String("setprimintrinsic")},
- {'s', QLatin1String("setprimvertex")},
- {'s', QLatin1String("setsamplestore")},
- {'s', QLatin1String("setvertexattrib")},
- {'s', QLatin1String("setvertexgroup")},
- {'s', QLatin1String("setvertexpoint")},
- {'s', QLatin1String("shadow")},
- {'s', QLatin1String("shadow_light")},
- {'s', QLatin1String("shadowmap")},
- {'s', QLatin1String("shimport")},
- {'s', QLatin1String("shl")},
- {'s', QLatin1String("shr")},
- {'s', QLatin1String("shrz")},
- {'s', QLatin1String("sign")},
- {'s', QLatin1String("simport")},
- {'s', QLatin1String("sin")},
- {'s', QLatin1String("sinh")},
- {'s', QLatin1String("sleep")},
- {'s', QLatin1String("slerp")},
- {'s', QLatin1String("slice")},
- {'s', QLatin1String("slideframe")},
- {'s', QLatin1String("smooth")},
- {'s', QLatin1String("smoothrotation")},
- {'s', QLatin1String("snoise")},
- {'s', QLatin1String("solvecubic")},
- {'s', QLatin1String("solvepoly")},
- {'s', QLatin1String("solvequadratic")},
- {'s', QLatin1String("sort")},
- {'s', QLatin1String("specular")},
- {'s', QLatin1String("specularBRDF")},
- {'s', QLatin1String("spline")},
- {'s', QLatin1String("split")},
- {'s', QLatin1String("splitpath")},
- {'s', QLatin1String("sprintf")},
- {'s', QLatin1String("sqrt")},
- {'s', QLatin1String("startswith")},
- {'s', QLatin1String("storelightexport")},
- {'s', QLatin1String("strip")},
- {'s', QLatin1String("strlen")},
- {'s', QLatin1String("sum")},
- {'s', QLatin1String("switch")},
- {'s', QLatin1String("swizzle")},
- {'t', QLatin1String("tan")},
- {'t', QLatin1String("tanh")},
- {'t', QLatin1String("tet_adjacent")},
- {'t', QLatin1String("tet_faceindex")},
- {'t', QLatin1String("teximport")},
- {'t', QLatin1String("texprintf")},
- {'t', QLatin1String("texture")},
- {'t', QLatin1String("texture3d")},
- {'t', QLatin1String("texture3dBox")},
- {'t', QLatin1String("titlecase")},
- {'t', QLatin1String("toNDC")},
- {'t', QLatin1String("tolower")},
- {'t', QLatin1String("toupper")},
- {'t', QLatin1String("trace")},
- {'t', QLatin1String("translate")},
- {'t', QLatin1String("translucent")},
- {'t', QLatin1String("transpose")},
- {'t', QLatin1String("trunc")},
- {'t', QLatin1String("tw_nspace")},
- {'t', QLatin1String("tw_space")},
- {'t', QLatin1String("tw_vspace")},
- {'u', QLatin1String("uniqueval")},
- {'u', QLatin1String("unpack_intfromsafefloat")},
- {'u', QLatin1String("unserialize")},
- {'u', QLatin1String("upush")},
- {'u', QLatin1String("uvunwrap")},
- {'v', QLatin1String("variance")},
- {'v', QLatin1String("velocityname")},
- {'v', QLatin1String("vertex")},
- {'v', QLatin1String("vertexattrib")},
- {'v', QLatin1String("vertexattribsize")},
- {'v', QLatin1String("vertexattribtype")},
- {'v', QLatin1String("vertexattribtypeinfo")},
- {'v', QLatin1String("vertexhedge")},
- {'v', QLatin1String("vertexindex")},
- {'v', QLatin1String("vertexnext")},
- {'v', QLatin1String("vertexpoint")},
- {'v', QLatin1String("vertexprev")},
- {'v', QLatin1String("vertexprim")},
- {'v', QLatin1String("vertexprimindex")},
- {'v', QLatin1String("vnoise")},
- {'v', QLatin1String("volume")},
- {'v', QLatin1String("volumegradient")},
- {'v', QLatin1String("volumeindex")},
- {'v', QLatin1String("volumeindexorigin")},
- {'v', QLatin1String("volumeindextopos")},
- {'v', QLatin1String("volumeindexv")},
- {'v', QLatin1String("volumepostoindex")},
- {'v', QLatin1String("volumeres")},
- {'v', QLatin1String("volumesample")},
- {'v', QLatin1String("volumesamplev")},
- {'v', QLatin1String("vtransform")},
- {'w', QLatin1String("warning")},
- {'w', QLatin1String("wireblinn")},
- {'w', QLatin1String("wirediffuse")},
- {'w', QLatin1String("wnoise")},
- {'w', QLatin1String("wo_nspace")},
- {'w', QLatin1String("wo_space")},
- {'w', QLatin1String("wo_vspace")},
- {'w', QLatin1String("writepixel")},
- {'w', QLatin1String("wt_nspace")},
- {'w', QLatin1String("wt_space")},
- {'w', QLatin1String("wt_vspace")},
- {'x', QLatin1String("xnoise")},
- {'x', QLatin1String("xnoised")},
- {'x', QLatin1String("xyzdist")},
- {'x', QLatin1String("xyztorgb")}};
- vex_other = {
- {('d'), QLatin1String("define")}, {('e'), QLatin1String("else")},
- {('e'), QLatin1String("endif")}, {('i'), QLatin1String("if")},
- {('i'), QLatin1String("ifdef")}, {('i'), QLatin1String("ifndef")},
- {('i'), QLatin1String("include")}, {('p'), QLatin1String("pragma")},
- {('u'), QLatin1String("undef")},
- };
-}
-void loadVEXData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other)
-{
- if (!vexDataInitialized)
- {
- initVEXData();
- vexDataInitialized = true;
- }
- types = vex_types;
- keywords = vex_keywords;
- builtin = vex_builtin;
- literals = vex_literals;
- other = vex_other;
-}
-
-/********************************************************/
-/*** CMAKE DATA ***************************************/
-/********************************************************/
-static bool cmakeDataInitialized = false;
-static QMultiHash cmake_keywords;
-static QMultiHash cmake_types;
-static QMultiHash cmake_literals;
-static QMultiHash cmake_builtin;
-static QMultiHash cmake_other;
-void initCMakeData()
-{
- cmake_keywords = {{'b', QLatin1String("break")},
- {'c', QLatin1String("cmake_host_system_information")},
- {'c', QLatin1String("cmake_minimum_required")},
- {'c', QLatin1String("cmake_parse_arguments")},
- {'c', QLatin1String("cmake_policy")},
- {'c', QLatin1String("configure_file")},
- {'c', QLatin1String("continue")},
- {'e', QLatin1String("elseif")},
- {'e', QLatin1String("else")},
- {'e', QLatin1String("endforeach")},
- {'e', QLatin1String("endfunction")},
- {'e', QLatin1String("endif")},
- {'e', QLatin1String("endmacro")},
- {'e', QLatin1String("endwhile")},
- {'e', QLatin1String("execute_process")},
- {'f', QLatin1String("file")},
- {'f', QLatin1String("find_file")},
- {'f', QLatin1String("find_library")},
- {'f', QLatin1String("find_package")},
- {'f', QLatin1String("find_path")},
- {'f', QLatin1String("find_program")},
- {'f', QLatin1String("foreach")},
- {'f', QLatin1String("function")},
- {'g', QLatin1String("get_cmake_property")},
- {'g', QLatin1String("get_directory_property")},
- {'g', QLatin1String("get_filename_component")},
- {'g', QLatin1String("get_property")},
- {'i', QLatin1String("if")},
- {'i', QLatin1String("include")},
- {'i', QLatin1String("include_guard")},
- {'l', QLatin1String("list")},
- {'m', QLatin1String("macro")},
- {'m', QLatin1String("mark_as_advanced")},
- {'m', QLatin1String("math")},
- {'m', QLatin1String("message")},
- {'o', QLatin1String("option")},
- {'r', QLatin1String("return")},
- {'s', QLatin1String("separate_arguments")},
- {'s', QLatin1String("set_directory_properties")},
- {'s', QLatin1String("set")},
- {'s', QLatin1String("set_property")},
- {'s', QLatin1String("site_name")},
- {'s', QLatin1String("string")},
- {'u', QLatin1String("unset")},
- {'v', QLatin1String("variable_watch")},
- {'w', QLatin1String("while")},
- {'a', QLatin1String("add_compile_definitions")},
- {'a', QLatin1String("add_compile_options")},
- {'A', QLatin1String("ADD_COMPILE_OPTIONS")},
- {'a', QLatin1String("add_custom_command")},
- {'a', QLatin1String("add_custom_target")},
- {'a', QLatin1String("add_definitions")},
- {'a', QLatin1String("add_dependencies")},
- {'a', QLatin1String("add_executable")},
- {'a', QLatin1String("add_library")},
- {'a', QLatin1String("add_link_options")},
- {'a', QLatin1String("add_subdirectory")},
- {'a', QLatin1String("add_test")},
- {'a', QLatin1String("aux_source_directory")},
- {'b', QLatin1String("build_command")},
- {'c', QLatin1String("create_test_sourcelist")},
- {'d', QLatin1String("define_property")},
- {'e', QLatin1String("enable_language")},
- {'e', QLatin1String("enable_testing")},
- {'e', QLatin1String("export")},
- {'f', QLatin1String("fltk_wrap_ui")},
- {'g', QLatin1String("get_source_file_property")},
- {'g', QLatin1String("get_target_property")},
- {'g', QLatin1String("get_test_property")},
- {'i', QLatin1String("include_directories")},
- {'i', QLatin1String("include_external_msproject")},
- {'i', QLatin1String("include_regular_expression")},
- {'i', QLatin1String("install")},
- {'l', QLatin1String("link_directories")},
- {'l', QLatin1String("link_libraries")},
- {'l', QLatin1String("load_cache")},
- {'p', QLatin1String("project")},
- {'q', QLatin1String("qt_wrap_cpp")},
- {'q', QLatin1String("qt_wrap_ui")},
- {'r', QLatin1String("remove_definitions")},
- {'s', QLatin1String("set_source_files_properties")},
- {'s', QLatin1String("set_target_properties")},
- {'s', QLatin1String("set_tests_properties")},
- {'s', QLatin1String("source_group")},
- {'t', QLatin1String("target_compile_definitions")},
- {'t', QLatin1String("target_compile_features")},
- {'t', QLatin1String("target_compile_options")},
- {'t', QLatin1String("target_include_directories")},
- {'t', QLatin1String("target_link_directories")},
- {'t', QLatin1String("target_link_libraries")},
- {'t', QLatin1String("target_link_options")},
- {'t', QLatin1String("target_sources")},
- {'t', QLatin1String("try_compile")},
- {'t', QLatin1String("try_run")},
- {'c', QLatin1String("ctest_build")},
- {'c', QLatin1String("ctest_configure")},
- {'c', QLatin1String("ctest_coverage")},
- {'c', QLatin1String("ctest_empty_binary_directory")},
- {'c', QLatin1String("ctest_memcheck")},
- {'c', QLatin1String("ctest_read_custom_files")},
- {'c', QLatin1String("ctest_run_script")},
- {'c', QLatin1String("ctest_sleep")},
- {'c', QLatin1String("ctest_start")},
- {'c', QLatin1String("ctest_submit")},
- {'c', QLatin1String("ctest_test")},
- {'c', QLatin1String("ctest_update")},
- {'c', QLatin1String("ctest_upload")},
- {'b', QLatin1String("build_name")},
- {'e', QLatin1String("exec_program")},
- {'e', QLatin1String("export_library_dependencies")},
- {'i', QLatin1String("install_files")},
- {'i', QLatin1String("install_programs")},
- {'i', QLatin1String("install_targets")},
- {'l', QLatin1String("load_command")},
- {'m', QLatin1String("make_directory")},
- {'o', QLatin1String("output_required_files")},
- {'r', QLatin1String("remove")},
- {'s', QLatin1String("subdir_depends")},
- {'s', QLatin1String("subdirs")},
- {'u', QLatin1String("use_mangled_mesa")},
- {'u', QLatin1String("utility_source")},
- {'v', QLatin1String("variable_requires")},
- {'w', QLatin1String("write_file")},
- {'q', QLatin1String("qt5_use_modules")},
- {'q', QLatin1String("qt5_use_package")},
- {'q', QLatin1String("qt5_wrap_cpp")},
- {'a', QLatin1String("and")},
- {'o', QLatin1String("or")},
- {'n', QLatin1String("not")},
- {'c', QLatin1String("command")},
- {'p', QLatin1String("policy")},
- {'t', QLatin1String("target")},
- {'t', QLatin1String("test")},
- {'e', QLatin1String("exists")},
- {'i', QLatin1String("is_newer_than")},
- {'i', QLatin1String("is_directory")},
- {'i', QLatin1String("is_symlink")},
- {'i', QLatin1String("is_absolute")},
- {'m', QLatin1String("matches")},
- {'l', QLatin1String("less")},
- {'g', QLatin1String("greater")},
- {'e', QLatin1String("equal")},
- {'l', QLatin1String("less_equal")},
- {'g', QLatin1String("greater_equal")},
- {'s', QLatin1String("strless")},
- {'s', QLatin1String("strgreater")},
- {'s', QLatin1String("strequal")},
- {'s', QLatin1String("strless_equal")},
- {'s', QLatin1String("strgreater_equal")},
- {'v', QLatin1String("version_less")},
- {'v', QLatin1String("version_greater")},
- {'v', QLatin1String("version_equal")},
- {'v', QLatin1String("version_less_equal")},
- {'v', QLatin1String("version_greater_equal")},
- {'i', QLatin1String("in_list")},
- {'d', QLatin1String("defined")}};
- cmake_types = {};
- cmake_literals
- = {{'o', QLatin1String("on")}, {'o', QLatin1String("off")},
- {'O', QLatin1String("ON")}, {'O', QLatin1String("OFF")},
- {'t', QLatin1String("true")}, {'f', QLatin1String("false")},
- {'T', QLatin1String("TRUE")}, {'F', QLatin1String("FALSE")}};
- cmake_builtin = {{'A', QLatin1String("ALLOW_DUPLICATE_CUSTOM_TARGETS")},
- {'A', QLatin1String("AUTOGEN_TARGETS_FOLDER")},
- {'A', QLatin1String("AUTOMOC_TARGETS_FOLDER")},
- {'D', QLatin1String("DEBUG_CONFIGURATIONS")},
- {'D', QLatin1String("DISABLED_FEATURES")},
- {'E', QLatin1String("ENABLED_FEATURES")},
- {'E', QLatin1String("ENABLED_LANGUAGES")},
- {'F', QLatin1String("FIND_LIBRARY_USE_LIB64_PATHS")},
- {'F', QLatin1String("FIND_LIBRARY_USE_OPENBSD_VERSIONING")},
- {'G', QLatin1String("GLOBAL_DEPENDS_DEBUG_MODE")},
- {'G', QLatin1String("GLOBAL_DEPENDS_NO_CYCLES")},
- {'I', QLatin1String("IN_TRY_COMPILE")},
- {'P', QLatin1String("PACKAGES_FOUND")},
- {'P', QLatin1String("PACKAGES_NOT_FOUND")},
- {'J', QLatin1String("JOB_POOLS")},
- {'P', QLatin1String("PREDEFINED_TARGETS_FOLDER")},
- {'E', QLatin1String("ECLIPSE_EXTRA_NATURES")},
- {'R', QLatin1String("REPORT_UNDEFINED_PROPERTIES")},
- {'R', QLatin1String("RULE_LAUNCH_COMPILE")},
- {'R', QLatin1String("RULE_LAUNCH_CUSTOM")},
- {'R', QLatin1String("RULE_LAUNCH_LINK")},
- {'R', QLatin1String("RULE_MESSAGES")},
- {'T', QLatin1String("TARGET_ARCHIVES_MAY_BE_SHARED_LIBS")},
- {'T', QLatin1String("TARGET_SUPPORTS_SHARED_LIBS")},
- {'U', QLatin1String("USE_FOLDERS")},
- {'A', QLatin1String("ADDITIONAL_MAKE_CLEAN_FILES")},
- {'C', QLatin1String("CACHE_VARIABLES")},
- {'C', QLatin1String("CLEAN_NO_CUSTOM")},
- {'C', QLatin1String("CMAKE_CONFIGURE_DEPENDS")},
- {'C', QLatin1String("COMPILE_DEFINITIONS")},
- {'C', QLatin1String("COMPILE_OPTIONS")},
- {'D', QLatin1String("DEFINITIONS")},
- {'E', QLatin1String("EXCLUDE_FROM_ALL")},
- {'I', QLatin1String("IMPLICIT_DEPENDS_INCLUDE_TRANSFORM")},
- {'I', QLatin1String("INCLUDE_DIRECTORIES")},
- {'I', QLatin1String("INCLUDE_REGULAR_EXPRESSION")},
- {'I', QLatin1String("INTERPROCEDURAL_OPTIMIZATION")},
- {'L', QLatin1String("LINK_DIRECTORIES")},
- {'L', QLatin1String("LISTFILE_STACK")},
- {'M', QLatin1String("MACROS")},
- {'P', QLatin1String("PARENT_DIRECTORY")},
- {'R', QLatin1String("RULE_LAUNCH_COMPILE")},
- {'R', QLatin1String("RULE_LAUNCH_CUSTOM")},
- {'R', QLatin1String("RULE_LAUNCH_LINK")},
- {'T', QLatin1String("TEST_INCLUDE_FILE")},
- {'V', QLatin1String("VARIABLES")},
- {'A', QLatin1String("ALIASED_TARGET")},
- {'A', QLatin1String("ARCHIVE_OUTPUT_DIRECTORY")},
- {'A', QLatin1String("ARCHIVE_OUTPUT_NAME")},
- {'A', QLatin1String("AUTOGEN_TARGET_DEPENDS")},
- {'A', QLatin1String("AUTOMOC_MOC_OPTIONS")},
- {'A', QLatin1String("AUTOMOC")},
- {'A', QLatin1String("AUTOUIC")},
- {'A', QLatin1String("AUTOUIC_OPTIONS")},
- {'A', QLatin1String("AUTORCC")},
- {'A', QLatin1String("AUTORCC_OPTIONS")},
- {'B', QLatin1String("BUILD_WITH_INSTALL_RPATH")},
- {'B', QLatin1String("BUNDLE_EXTENSION")},
- {'B', QLatin1String("BUNDLE")},
- {'C', QLatin1String("COMPATIBLE_INTERFACE_BOOL")},
- {'C', QLatin1String("COMPATIBLE_INTERFACE_NUMBER_MAX")},
- {'C', QLatin1String("COMPATIBLE_INTERFACE_NUMBER_MIN")},
- {'C', QLatin1String("COMPATIBLE_INTERFACE_STRING")},
- {'C', QLatin1String("COMPILE_DEFINITIONS")},
- {'C', QLatin1String("COMPILE_FLAGS")},
- {'C', QLatin1String("COMPILE_OPTIONS")},
- {'D', QLatin1String("DEBUG_POSTFIX")},
- {'D', QLatin1String("DEFINE_SYMBOL")},
- {'E', QLatin1String("EchoString")},
- {'E', QLatin1String("ENABLE_EXPORTS")},
- {'E', QLatin1String("EXCLUDE_FROM_ALL")},
- {'E', QLatin1String("EXCLUDE_FROM_DEFAULT_BUILD")},
- {'E', QLatin1String("EXPORT_NAME")},
- {'F', QLatin1String("FOLDER")},
- {'F', QLatin1String("Fortran_FORMAT")},
- {'F', QLatin1String("Fortran_MODULE_DIRECTORY")},
- {'F', QLatin1String("FRAMEWORK")},
- {'G', QLatin1String("GENERATOR_FILE_NAME")},
- {'G', QLatin1String("GNUtoMS")},
- {'H', QLatin1String("HAS_CXX")},
- {'I', QLatin1String("IMPLICIT_DEPENDS_INCLUDE_TRANSFORM")},
- {'I', QLatin1String("IMPORTED_CONFIGURATIONS")},
- {'I', QLatin1String("IMPORTED_IMPLIB")},
- {'I', QLatin1String("IMPORTED_LINK_DEPENDENT_LIBRARIES")},
- {'I', QLatin1String("IMPORTED_LINK_INTERFACE_LANGUAGES")},
- {'I', QLatin1String("IMPORTED_LINK_INTERFACE_LIBRARIES")},
- {'I', QLatin1String("IMPORTED_LINK_INTERFACE_MULTIPLICITY")},
- {'I', QLatin1String("IMPORTED_LOCATION")},
- {'I', QLatin1String("IMPORTED_NO_SONAME")},
- {'I', QLatin1String("IMPORTED")},
- {'I', QLatin1String("IMPORTED_SONAME")},
- {'I', QLatin1String("IMPORT_PREFIX")},
- {'I', QLatin1String("IMPORT_SUFFIX")},
- {'I', QLatin1String("INCLUDE_DIRECTORIES")},
- {'I', QLatin1String("INSTALL_NAME_DIR")},
- {'I', QLatin1String("INSTALL_RPATH")},
- {'I', QLatin1String("INSTALL_RPATH_USE_LINK_PATH")},
- {'I', QLatin1String("INTERFACE_AUTOUIC_OPTIONS")},
- {'I', QLatin1String("INTERFACE_COMPILE_DEFINITIONS")},
- {'I', QLatin1String("INTERFACE_COMPILE_OPTIONS")},
- {'I', QLatin1String("INTERFACE_INCLUDE_DIRECTORIES")},
- {'I', QLatin1String("INTERFACE_LINK_LIBRARIES")},
- {'I', QLatin1String("INTERFACE_POSITION_INDEPENDENT_CODE")},
- {'I', QLatin1String("INTERFACE_SYSTEM_INCLUDE_DIRECTORIES")},
- {'I', QLatin1String("INTERPROCEDURAL_OPTIMIZATION")},
- {'J', QLatin1String("JOB_POOL_COMPILE")},
- {'J', QLatin1String("JOB_POOL_LINK")},
- {'L', QLatin1String("LABELS")},
- {'L', QLatin1String("LIBRARY_OUTPUT_DIRECTORY")},
- {'L', QLatin1String("LIBRARY_OUTPUT_NAME")},
- {'L', QLatin1String("LINK_DEPENDS_NO_SHARED")},
- {'L', QLatin1String("LINK_DEPENDS")},
- {'L', QLatin1String("LINKER_LANGUAGE")},
- {'L', QLatin1String("LINK_FLAGS")},
- {'L', QLatin1String("LINK_INTERFACE_LIBRARIES")},
- {'L', QLatin1String("LINK_INTERFACE_MULTIPLICITY")},
- {'L', QLatin1String("LINK_LIBRARIES")},
- {'L', QLatin1String("LINK_SEARCH_END_STATIC")},
- {'L', QLatin1String("LINK_SEARCH_START_STATIC")},
- {'L', QLatin1String("LOCATION")},
- {'M', QLatin1String("MACOSX_BUNDLE_INFO_PLIST")},
- {'M', QLatin1String("MACOSX_BUNDLE")},
- {'M', QLatin1String("MACOSX_FRAMEWORK_INFO_PLIST")},
- {'M', QLatin1String("MACOSX_RPATH")},
- // {'N', QLatin1String("NAME")},
- {'N', QLatin1String("NO_SONAME")},
- {'N', QLatin1String("NO_SYSTEM_FROM_IMPORTED")},
- {'O', QLatin1String("OSX_ARCHITECTURES")},
- {'O', QLatin1String("OUTPUT_NAME")},
- {'P', QLatin1String("PDB_NAME")},
- {'P', QLatin1String("PDB_OUTPUT_DIRECTORY")},
- {'P', QLatin1String("POSITION_INDEPENDENT_CODE")},
- {'P', QLatin1String("POST_INSTALL_SCRIPT")},
- {'P', QLatin1String("PREFIX")},
- {'P', QLatin1String("PROPERTY")},
- {'P', QLatin1String("PRE_INSTALL_SCRIPT")},
- {'P', QLatin1String("PRIVATE_HEADER")},
- {'P', QLatin1String("PROJECT_LABEL")},
- {'P', QLatin1String("PUBLIC_HEADER")},
- {'R', QLatin1String("RESOURCE")},
- {'R', QLatin1String("RULE_LAUNCH_COMPILE")},
- {'R', QLatin1String("RULE_LAUNCH_CUSTOM")},
- {'R', QLatin1String("RULE_LAUNCH_LINK")},
- {'R', QLatin1String("RUNTIME_OUTPUT_DIRECTORY")},
- {'R', QLatin1String("RUNTIME_OUTPUT_NAME")},
- {'S', QLatin1String("SKIP_BUILD_RPATH")},
- {'S', QLatin1String("SOURCES")},
- {'S', QLatin1String("SOVERSION")},
- {'S', QLatin1String("STATIC_LIBRARY_FLAGS")},
- {'S', QLatin1String("SUFFIX")},
- {'T', QLatin1String("TARGET")},
- {'T', QLatin1String("TYPE")},
- {'V', QLatin1String("VERSION")},
- {'V', QLatin1String("VISIBILITY_INLINES_HIDDEN")},
- {'V', QLatin1String("VS_DOTNET_REFERENCES")},
- {'V', QLatin1String("VS_DOTNET_TARGET_FRAMEWORK_VERSION")},
- {'V', QLatin1String("VS_GLOBAL_KEYWORD")},
- {'V', QLatin1String("VS_GLOBAL_PROJECT_TYPES")},
- {'V', QLatin1String("VS_GLOBAL_ROOTNAMESPACE")},
- {'V', QLatin1String("VS_KEYWORD")},
- {'V', QLatin1String("VS_SCC_AUXPATH")},
- {'V', QLatin1String("VS_SCC_LOCALPATH")},
- {'V', QLatin1String("VS_SCC_PROJECTNAME")},
- {'V', QLatin1String("VS_SCC_PROVIDER")},
- {'V', QLatin1String("VS_WINRT_EXTENSIONS")},
- {'V', QLatin1String("VS_WINRT_REFERENCES")},
- {'W', QLatin1String("WIN32_EXECUTABLE")},
- {'A', QLatin1String("ATTACHED_FILES_ON_FAIL")},
- {'A', QLatin1String("ATTACHED_FILES")},
- {'C', QLatin1String("COST")},
- {'D', QLatin1String("DEPENDS")},
- {'E', QLatin1String("ENVIRONMENT")},
- {'F', QLatin1String("FAIL_REGULAR_EXPRESSION")},
- {'L', QLatin1String("LABELS")},
- {'M', QLatin1String("MEASUREMENT")},
- {'P', QLatin1String("PASS_REGULAR_EXPRESSION")},
- {'P', QLatin1String("PROCESSORS")},
- {'R', QLatin1String("REQUIRED_FILES")},
- {'R', QLatin1String("RESOURCE_LOCK")},
- {'R', QLatin1String("RUN_SERIAL")},
- {'S', QLatin1String("SKIP_RETURN_CODE")},
- {'T', QLatin1String("TIMEOUT")},
- {'W', QLatin1String("WILL_FAIL")},
- {'W', QLatin1String("WORKING_DIRECTORY")},
- {'A', QLatin1String("ABSTRACT")},
- {'A', QLatin1String("AUTOUIC_OPTIONS")},
- {'A', QLatin1String("AUTORCC_OPTIONS")},
- {'C', QLatin1String("COMPILE_DEFINITIONS")},
- {'C', QLatin1String("COMPILE_FLAGS")},
- {'E', QLatin1String("EXTERNAL_OBJECT")},
- {'F', QLatin1String("Fortran_FORMAT")},
- {'G', QLatin1String("GENERATED")},
- {'H', QLatin1String("HEADER_FILE_ONLY")},
- {'K', QLatin1String("KEEP_EXTENSION")},
- {'L', QLatin1String("LABELS")},
- // {'L', QLatin1String("LANGUAGE")},
- {'L', QLatin1String("LOCATION")},
- {'M', QLatin1String("MACOSX_PACKAGE_LOCATION")},
- {'O', QLatin1String("OBJECT_DEPENDS")},
- {'O', QLatin1String("OBJECT_OUTPUTS")},
- {'S', QLatin1String("SYMBOLIC")},
- {'W', QLatin1String("WRAP_EXCLUDE")},
- {'A', QLatin1String("ADVANCED")},
- {'H', QLatin1String("HELPSTRING")},
- {'M', QLatin1String("MODIFIED")},
- {'S', QLatin1String("STRINGS")},
- {'T', QLatin1String("TYPE")},
- {'V', QLatin1String("VALUE")}};
- cmake_other
- = {{'C', QLatin1String("CMAKE_ARGC")},
- {'C', QLatin1String("CMAKE_ARGV0")},
- {'C', QLatin1String("CMAKE_AR")},
- {'C', QLatin1String("CMAKE_BINARY_DIR")},
- {'C', QLatin1String("CMAKE_BUILD_TOOL")},
- {'C', QLatin1String("CMAKE_CACHEFILE_DIR")},
- {'C', QLatin1String("CMAKE_CACHE_MAJOR_VERSION")},
- {'C', QLatin1String("CMAKE_CACHE_MINOR_VERSION")},
- {'C', QLatin1String("CMAKE_CACHE_PATCH_VERSION")},
- {'C', QLatin1String("CMAKE_CFG_INTDIR")},
- {'C', QLatin1String("CMAKE_COMMAND")},
- {'C', QLatin1String("CMAKE_CROSSCOMPILING")},
- {'C', QLatin1String("CMAKE_CTEST_COMMAND")},
- {'C', QLatin1String("CMAKE_CURRENT_BINARY_DIR")},
- {'C', QLatin1String("CMAKE_CURRENT_LIST_DIR")},
- {'C', QLatin1String("CMAKE_CURRENT_LIST_FILE")},
- {'C', QLatin1String("CMAKE_CURRENT_LIST_LINE")},
- {'C', QLatin1String("CMAKE_CURRENT_SOURCE_DIR")},
- {'C', QLatin1String("CMAKE_DL_LIBS")},
- {'C', QLatin1String("CMAKE_EDIT_COMMAND")},
- {'C', QLatin1String("CMAKE_EXECUTABLE_SUFFIX")},
- {'C', QLatin1String("CMAKE_EXTRA_GENERATOR")},
- {'C', QLatin1String("CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES")},
- {'C', QLatin1String("CMAKE_GENERATOR")},
- {'C', QLatin1String("CMAKE_GENERATOR_TOOLSET")},
- {'C', QLatin1String("CMAKE_HOME_DIRECTORY")},
- {'C', QLatin1String("CMAKE_IMPORT_LIBRARY_PREFIX")},
- {'C', QLatin1String("CMAKE_IMPORT_LIBRARY_SUFFIX")},
- {'C', QLatin1String("CMAKE_JOB_POOL_COMPILE")},
- {'C', QLatin1String("CMAKE_JOB_POOL_LINK")},
- {'C', QLatin1String("CMAKE_LINK_LIBRARY_SUFFIX")},
- {'C', QLatin1String("CMAKE_MAJOR_VERSION")},
- {'C', QLatin1String("CMAKE_MAKE_PROGRAM")},
- {'C', QLatin1String("CMAKE_MINIMUM_REQUIRED_VERSION")},
- {'C', QLatin1String("CMAKE_MINOR_VERSION")},
- {'C', QLatin1String("CMAKE_PARENT_LIST_FILE")},
- {'C', QLatin1String("CMAKE_PATCH_VERSION")},
- {'C', QLatin1String("CMAKE_PROJECT_NAME")},
- {'C', QLatin1String("CMAKE_RANLIB")},
- {'C', QLatin1String("CMAKE_ROOT")},
- {'C', QLatin1String("CMAKE_SCRIPT_MODE_FILE")},
- {'C', QLatin1String("CMAKE_SHARED_LIBRARY_PREFIX")},
- {'C', QLatin1String("CMAKE_SHARED_LIBRARY_SUFFIX")},
- {'C', QLatin1String("CMAKE_SHARED_MODULE_PREFIX")},
- {'C', QLatin1String("CMAKE_SHARED_MODULE_SUFFIX")},
- {'C', QLatin1String("CMAKE_SIZEOF_VOID_P")},
- {'C', QLatin1String("CMAKE_SKIP_INSTALL_RULES")},
- {'C', QLatin1String("CMAKE_SKIP_RPATH")},
- {'C', QLatin1String("CMAKE_SOURCE_DIR")},
- {'C', QLatin1String("CMAKE_STANDARD_LIBRARIES")},
- {'C', QLatin1String("CMAKE_STATIC_LIBRARY_PREFIX")},
- {'C', QLatin1String("CMAKE_STATIC_LIBRARY_SUFFIX")},
- {'C', QLatin1String("CMAKE_TOOLCHAIN_FILE")},
- {'C', QLatin1String("CMAKE_TWEAK_VERSION")},
- {'C', QLatin1String("CMAKE_VERBOSE_MAKEFILE")},
- {'C', QLatin1String("CMAKE_VERSION")},
- {'C', QLatin1String("CMAKE_VS_DEVENV_COMMAND")},
- {'C', QLatin1String("CMAKE_VS_INTEL_Fortran_PROJECT_VERSION")},
- {'C', QLatin1String("CMAKE_VS_MSBUILD_COMMAND")},
- {'C', QLatin1String("CMAKE_VS_MSDEV_COMMAND")},
- {'C', QLatin1String("CMAKE_VS_PLATFORM_TOOLSET")},
- {'C', QLatin1String("CMAKE_XCODE_PLATFORM_TOOLSET")},
- {'P', QLatin1String("PROJECT_BINARY_DIR")},
- // {'P', QLatin1String("PROJECT_NAME")},
- {'P', QLatin1String("PROJECT_SOURCE_DIR")},
- {'P', QLatin1String("PROJECT_VERSION")},
- {'P', QLatin1String("PROJECT_VERSION_MAJOR")},
- {'P', QLatin1String("PROJECT_VERSION_MINOR")},
- {'P', QLatin1String("PROJECT_VERSION_PATCH")},
- {'P', QLatin1String("PROJECT_VERSION_TWEAK")},
- {'B', QLatin1String("BUILD_SHARED_LIBS")},
- {'C', QLatin1String("CMAKE_ABSOLUTE_DESTINATION_FILES")},
- {'C', QLatin1String("CMAKE_APPBUNDLE_PATH")},
- {'C', QLatin1String("CMAKE_AUTOMOC_RELAXED_MODE")},
- {'C', QLatin1String("CMAKE_BACKWARDS_COMPATIBILITY")},
- {'C', QLatin1String("CMAKE_BUILD_TYPE")},
- {'C', QLatin1String("CMAKE_COLOR_MAKEFILE")},
- {'C', QLatin1String("CMAKE_CONFIGURATION_TYPES")},
- {'C', QLatin1String("CMAKE_DEBUG_TARGET_PROPERTIES")},
- {'C', QLatin1String("CMAKE_ERROR_DEPRECATED")},
- {'C', QLatin1String("CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION")},
- {'C', QLatin1String("CMAKE_SYSROOT")},
- {'C', QLatin1String("CMAKE_FIND_LIBRARY_PREFIXES")},
- {'C', QLatin1String("CMAKE_FIND_LIBRARY_SUFFIXES")},
- {'C', QLatin1String("CMAKE_FIND_NO_INSTALL_PREFIX")},
- {'C', QLatin1String("CMAKE_FIND_PACKAGE_WARN_NO_MODULE")},
- {'C', QLatin1String("CMAKE_FIND_ROOT_PATH")},
- {'C', QLatin1String("CMAKE_FIND_ROOT_PATH_MODE_INCLUDE")},
- {'C', QLatin1String("CMAKE_FIND_ROOT_PATH_MODE_LIBRARY")},
- {'C', QLatin1String("CMAKE_FIND_ROOT_PATH_MODE_PACKAGE")},
- {'C', QLatin1String("CMAKE_FIND_ROOT_PATH_MODE_PROGRAM")},
- {'C', QLatin1String("CMAKE_FRAMEWORK_PATH")},
- {'C', QLatin1String("CMAKE_IGNORE_PATH")},
- {'C', QLatin1String("CMAKE_INCLUDE_PATH")},
- {'C', QLatin1String("CMAKE_INCLUDE_DIRECTORIES_BEFORE")},
- {'C', QLatin1String("CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE")},
- {'C', QLatin1String("CMAKE_INSTALL_DEFAULT_COMPONENT_NAME")},
- {'C', QLatin1String("CMAKE_INSTALL_PREFIX")},
- {'C', QLatin1String("CMAKE_LIBRARY_PATH")},
- {'C', QLatin1String("CMAKE_MFC_FLAG")},
- {'C', QLatin1String("CMAKE_MODULE_PATH")},
- {'C', QLatin1String("CMAKE_NOT_USING_CONFIG_FLAGS")},
- {'C', QLatin1String("CMAKE_PREFIX_PATH")},
- {'C', QLatin1String("CMAKE_PROGRAM_PATH")},
- {'C', QLatin1String("CMAKE_SKIP_INSTALL_ALL_DEPENDENCY")},
- {'C', QLatin1String("CMAKE_STAGING_PREFIX")},
- {'C', QLatin1String("CMAKE_SYSTEM_IGNORE_PATH")},
- {'C', QLatin1String("CMAKE_SYSTEM_INCLUDE_PATH")},
- {'C', QLatin1String("CMAKE_SYSTEM_LIBRARY_PATH")},
- {'C', QLatin1String("CMAKE_SYSTEM_PREFIX_PATH")},
- {'C', QLatin1String("CMAKE_SYSTEM_PROGRAM_PATH")},
- {'C', QLatin1String("CMAKE_USER_MAKE_RULES_OVERRIDE")},
- {'C', QLatin1String("CMAKE_WARN_DEPRECATED")},
- {'C', QLatin1String("CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION")},
- {'A', QLatin1String("APPLE")},
- {'B', QLatin1String("BORLAND")},
- {'C', QLatin1String("CMAKE_CL_64")},
- {'C', QLatin1String("CMAKE_COMPILER_2005")},
- {'C', QLatin1String("CMAKE_HOST_APPLE")},
- {'C', QLatin1String("CMAKE_HOST_SYSTEM_NAME")},
- {'C', QLatin1String("CMAKE_HOST_SYSTEM_PROCESSOR")},
- {'C', QLatin1String("CMAKE_HOST_SYSTEM")},
- {'C', QLatin1String("CMAKE_HOST_SYSTEM_VERSION")},
- {'C', QLatin1String("CMAKE_HOST_UNIX")},
- {'C', QLatin1String("CMAKE_HOST_WIN32")},
- {'C', QLatin1String("CMAKE_LIBRARY_ARCHITECTURE_REGEX")},
- {'C', QLatin1String("CMAKE_LIBRARY_ARCHITECTURE")},
- {'C', QLatin1String("CMAKE_OBJECT_PATH_MAX")},
- {'C', QLatin1String("CMAKE_SYSTEM_NAME")},
- {'C', QLatin1String("CMAKE_SYSTEM_PROCESSOR")},
- {'C', QLatin1String("CMAKE_SYSTEM")},
- {'C', QLatin1String("CMAKE_SYSTEM_VERSION")},
- {'C', QLatin1String("CYGWIN")},
- {'E', QLatin1String("ENV")},
- {'M', QLatin1String("MSVC10")},
- {'M', QLatin1String("MSVC11")},
- {'M', QLatin1String("MSVC12")},
- {'M', QLatin1String("MSVC60")},
- {'M', QLatin1String("MSVC70")},
- {'M', QLatin1String("MSVC71")},
- {'M', QLatin1String("MSVC80")},
- {'M', QLatin1String("MSVC90")},
- {'M', QLatin1String("MSVC_IDE")},
- {'M', QLatin1String("MSVC")},
- {'M', QLatin1String("MSVC_VERSION")},
- {'U', QLatin1String("UNIX")},
- {'W', QLatin1String("WIN32")},
- {'X', QLatin1String("XCODE_VERSION")},
- {'C', QLatin1String("CMAKE_ARCHIVE_OUTPUT_DIRECTORY")},
- {'C', QLatin1String("CMAKE_AUTOMOC_MOC_OPTIONS")},
- {'C', QLatin1String("CMAKE_AUTOMOC")},
- {'C', QLatin1String("CMAKE_AUTORCC")},
- {'C', QLatin1String("CMAKE_AUTORCC_OPTIONS")},
- {'C', QLatin1String("CMAKE_AUTOUIC")},
- {'C', QLatin1String("CMAKE_AUTOUIC_OPTIONS")},
- {'C', QLatin1String("CMAKE_BUILD_WITH_INSTALL_RPATH")},
- {'C', QLatin1String("CMAKE_DEBUG_POSTFIX")},
- {'C', QLatin1String("CMAKE_EXE_LINKER_FLAGS")},
- {'C', QLatin1String("CMAKE_Fortran_FORMAT")},
- {'C', QLatin1String("CMAKE_Fortran_MODULE_DIRECTORY")},
- {'C', QLatin1String("CMAKE_GNUtoMS")},
- {'C', QLatin1String("CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE")},
- {'C', QLatin1String("CMAKE_INCLUDE_CURRENT_DIR")},
- {'C', QLatin1String("CMAKE_INSTALL_NAME_DIR")},
- {'C', QLatin1String("CMAKE_INSTALL_RPATH")},
- {'C', QLatin1String("CMAKE_INSTALL_RPATH_USE_LINK_PATH")},
- {'C', QLatin1String("CMAKE_LIBRARY_OUTPUT_DIRECTORY")},
- {'C', QLatin1String("CMAKE_LIBRARY_PATH_FLAG")},
- {'C', QLatin1String("CMAKE_LINK_DEF_FILE_FLAG")},
- {'C', QLatin1String("CMAKE_LINK_DEPENDS_NO_SHARED")},
- {'C', QLatin1String("CMAKE_LINK_INTERFACE_LIBRARIES")},
- {'C', QLatin1String("CMAKE_LINK_LIBRARY_FILE_FLAG")},
- {'C', QLatin1String("CMAKE_LINK_LIBRARY_FLAG")},
- {'C', QLatin1String("CMAKE_MACOSX_BUNDLE")},
- {'C', QLatin1String("CMAKE_MACOSX_RPATH")},
- {'C', QLatin1String("CMAKE_MODULE_LINKER_FLAGS")},
- {'C', QLatin1String("CMAKE_NO_BUILTIN_CHRPATH")},
- {'C', QLatin1String("CMAKE_NO_SYSTEM_FROM_IMPORTED")},
- {'C', QLatin1String("CMAKE_OSX_ARCHITECTURES")},
- {'C', QLatin1String("CMAKE_OSX_DEPLOYMENT_TARGET")},
- {'C', QLatin1String("CMAKE_OSX_SYSROOT")},
- {'C', QLatin1String("CMAKE_PDB_OUTPUT_DIRECTORY")},
- {'C', QLatin1String("CMAKE_POSITION_INDEPENDENT_CODE")},
- {'C', QLatin1String("CMAKE_RUNTIME_OUTPUT_DIRECTORY")},
- {'C', QLatin1String("CMAKE_SHARED_LINKER_FLAGS")},
- {'C', QLatin1String("CMAKE_SKIP_BUILD_RPATH")},
- {'C', QLatin1String("CMAKE_SKIP_INSTALL_RPATH")},
- {'C', QLatin1String("CMAKE_STATIC_LINKER_FLAGS")},
- {'C', QLatin1String("CMAKE_TRY_COMPILE_CONFIGURATION")},
- {'C', QLatin1String("CMAKE_USE_RELATIVE_PATHS")},
- {'C', QLatin1String("CMAKE_VISIBILITY_INLINES_HIDDEN")},
- {'C', QLatin1String("CMAKE_WIN32_EXECUTABLE")},
- {'E', QLatin1String("EXECUTABLE_OUTPUT_PATH")},
- {'L', QLatin1String("LIBRARY_OUTPUT_PATH")},
- {'C', QLatin1String("CMAKE_Fortran_MODDIR_DEFAULT")},
- {'C', QLatin1String("CMAKE_Fortran_MODDIR_FLAG")},
- {'C', QLatin1String("CMAKE_Fortran_MODOUT_FLAG")},
- {'C', QLatin1String("CMAKE_INTERNAL_PLATFORM_ABI")},
- {'C', QLatin1String("CPACK_ABSOLUTE_DESTINATION_FILES")},
- {'C', QLatin1String("CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY")},
- {'C', QLatin1String("CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION")},
- {'C', QLatin1String("CPACK_INCLUDE_TOPLEVEL_DIRECTORY")},
- {'C', QLatin1String("CPACK_INSTALL_SCRIPT")},
- {'C', QLatin1String("CPACK_PACKAGING_INSTALL_PREFIX")},
- {'C', QLatin1String("CPACK_SET_DESTDIR")},
- {'C', QLatin1String("CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION")}};
-}
-
-void loadCMakeData(QMultiHash &types,
- QMultiHash &keywords,
- QMultiHash &builtin,
- QMultiHash &literals,
- QMultiHash &other)
-{
- if (!cmakeDataInitialized)
- {
- initCMakeData();
- cmakeDataInitialized = true;
- }
- types = cmake_types;
- keywords = cmake_keywords;
- builtin = cmake_builtin;
- literals = cmake_literals;
- other = cmake_other;
-}
-
-/********************************************************/
-/*** MAKE DATA ***************************************/
-/********************************************************/
-static bool makeDataInitialized = false;
-static QMultiHash make_keywords;
-static QMultiHash make_types;
-static QMultiHash make_literals;
-static QMultiHash make_builtin;
-static QMultiHash make_other;
-void initMakeData()
-{
- make_keywords
- = {{'i', QLatin1String("include")}, {'d', QLatin1String("define")},
- {'e', QLatin1String("else")}, {'e', QLatin1String("endef")},
- {'e', QLatin1String("endif")}, {'e', QLatin1String("export")},
- {'i', QLatin1String("ifn?def")}, {'i', QLatin1String("ifn?eq")},
- {'i', QLatin1String("include")}, {'o', QLatin1String("override")},
- {'p', QLatin1String("private")}, {'s', QLatin1String("sinclude")},
- {'u', QLatin1String("undefine")}, {'u', QLatin1String("unexport")},
- {'v', QLatin1String("vpath")}};
- make_types
- = {{'a', QLatin1String("addsuffix")}, {'a', QLatin1String("abspath")},
- {'a', QLatin1String("and")}, {'a', QLatin1String("ar")},
- {'b', QLatin1String("basename")}, {'c', QLatin1String("call")},
- {'d', QLatin1String("dir")}, {'e', QLatin1String("error")},
- {'e', QLatin1String("eval")}, {'f', QLatin1String("file")},
- {'f', QLatin1String("filter")}, {'f', QLatin1String("find")},
- {'f', QLatin1String("findstring")}, {'f', QLatin1String("firstword")},
- {'f', QLatin1String("flavor")}, {'f', QLatin1String("foreach")},
- {'g', QLatin1String("guile")}, {'i', QLatin1String("if")},
- {'i', QLatin1String("info")}, {'i', QLatin1String("install")},
- {'j', QLatin1String("join")}, {'l', QLatin1String("lastword")},
- {'l', QLatin1String("load")}, {'n', QLatin1String("notdir")},
- {'o', QLatin1String("or")}, {'o', QLatin1String("origin")},
- {'p', QLatin1String("patsubst")}, {'r', QLatin1String("ranlib")},
- {'r', QLatin1String("realpath")}, {'r', QLatin1String("rm")},
- {'s', QLatin1String("shell")}, {'s', QLatin1String("sort")},
- {'s', QLatin1String("strip")}, {'s', QLatin1String("subst")},
- {'s', QLatin1String("suffix")}, {'v', QLatin1String("value")},
- {'w', QLatin1String("warning")}, {'w', QLatin1String("wildcard")},
- {'w', QLatin1String("word")}};
- make_literals = {
- {'t', QLatin1String("true")},
- {'f', QLatin1String("false")},
- };
- make_builtin = {};
- make_other = {
- {'C', QLatin1String("CFLAGS")},
- {'L', QLatin1String("LIBS")},
- {'P', QLatin1String("PREFIX")},
- };
-}
-
-void loadMakeData(QMultiHash &types,
- QMultiHash &keywords,
- QMultiHash &builtin,
- QMultiHash &literals,
- QMultiHash &other)
-{
- if (!makeDataInitialized)
- {
- initMakeData();
- makeDataInitialized = true;
- }
- types = make_types;
- keywords = make_keywords;
- builtin = make_builtin;
- literals = make_literals;
- other = make_other;
-}
-
-void loadAsmData(QMultiHash &types,
- QMultiHash &keywords,
- QMultiHash &builtin,
- QMultiHash &literals,
- QMultiHash &other)
-{
- Q_UNUSED(literals);
- types = {{'i', QLatin1String("ip")}, {'e', QLatin1String("eip")},
- {'r', QLatin1String("rip")}, {'a', QLatin1String("al")},
- {'a', QLatin1String("ah")}, {'b', QLatin1String("bl")},
- {'b', QLatin1String("bh")}, {'c', QLatin1String("cl")},
- {'c', QLatin1String("ch")}, {'d', QLatin1String("dl")},
- {'d', QLatin1String("dh")}, {'s', QLatin1String("sil")},
- {'d', QLatin1String("dil")}, {'b', QLatin1String("bpl")},
- {'s', QLatin1String("spl")}, {'r', QLatin1String("r8b")},
- {'r', QLatin1String("r9b")}, {'r', QLatin1String("r10b")},
- {'r', QLatin1String("r11b")}, {'r', QLatin1String("r12b")},
- {'r', QLatin1String("r13b")}, {'r', QLatin1String("r14b")},
- {'r', QLatin1String("r15b")}, {'b', QLatin1String("bx")},
- {'c', QLatin1String("cx")}, {'d', QLatin1String("dx")},
- {'s', QLatin1String("si")}, {'d', QLatin1String("di")},
- {'b', QLatin1String("bp")}, {'s', QLatin1String("sp")},
- {'r', QLatin1String("r8w")}, {'r', QLatin1String("r9w")},
- {'r', QLatin1String("r10w")}, {'r', QLatin1String("r11w")},
- {'r', QLatin1String("r12w")}, {'r', QLatin1String("r13w")},
- {'r', QLatin1String("r14w")}, {'r', QLatin1String("r15w")},
- {'e', QLatin1String("eax")}, {'e', QLatin1String("ebx")},
- {'e', QLatin1String("ecx")}, {'e', QLatin1String("edx")},
- {'e', QLatin1String("esi")}, {'e', QLatin1String("edi")},
- {'e', QLatin1String("ebp")}, {'e', QLatin1String("esp")},
- {'e', QLatin1String("eip")}, {'r', QLatin1String("r8d")},
- {'r', QLatin1String("r9d")}, {'r', QLatin1String("r10d")},
- {'r', QLatin1String("r11d")}, {'r', QLatin1String("r12d")},
- {'r', QLatin1String("r13d")}, {'r', QLatin1String("r14d")},
- {'r', QLatin1String("r15d")}, {'r', QLatin1String("rax")},
- {'r', QLatin1String("rbx")}, {'r', QLatin1String("rcx")},
- {'r', QLatin1String("rdx")}, {'r', QLatin1String("rsi")},
- {'r', QLatin1String("rdi")}, {'r', QLatin1String("rbp")},
- {'r', QLatin1String("rsp")}, {'r', QLatin1String("r8")},
- {'r', QLatin1String("r9")}, {'r', QLatin1String("r10")},
- {'r', QLatin1String("r11")}, {'r', QLatin1String("r12")},
- {'r', QLatin1String("r13")}, {'r', QLatin1String("r14")},
- {'r', QLatin1String("r15")}, {'d', QLatin1String("ds")},
- {'e', QLatin1String("es")}, {'f', QLatin1String("fs")},
- {'g', QLatin1String("gs")}, {'s', QLatin1String("ss")},
- {'s', QLatin1String("st0")}, {'s', QLatin1String("st1")},
- {'s', QLatin1String("st2")}, {'s', QLatin1String("st3")},
- {'s', QLatin1String("st4")}, {'s', QLatin1String("st5")},
- {'s', QLatin1String("st6")}, {'s', QLatin1String("st7")},
- {'m', QLatin1String("mm0")}, {'m', QLatin1String("mm1")},
- {'m', QLatin1String("mm2")}, {'m', QLatin1String("mm3")},
- {'m', QLatin1String("mm4")}, {'m', QLatin1String("mm5")},
- {'m', QLatin1String("mm6")}, {'m', QLatin1String("mm7")},
- {'x', QLatin1String("xmm0")}, {'x', QLatin1String("xmm1")},
- {'x', QLatin1String("xmm2")}, {'x', QLatin1String("xmm3")},
- {'x', QLatin1String("xmm4")}, {'x', QLatin1String("xmm5")},
- {'x', QLatin1String("xmm6")}, {'x', QLatin1String("xmm7")},
- {'x', QLatin1String("xmm8")}, {'x', QLatin1String("xmm9")},
- {'x', QLatin1String("xmm10")}, {'x', QLatin1String("xmm11")},
- {'x', QLatin1String("xmm12")}, {'x', QLatin1String("xmm13")},
- {'x', QLatin1String("xmm14")}, {'x', QLatin1String("xmm15")},
- {'x', QLatin1String("xmm16")}, {'x', QLatin1String("xmm17")},
- {'x', QLatin1String("xmm18")}, {'x', QLatin1String("xmm19")},
- {'x', QLatin1String("xmm20")}, {'x', QLatin1String("xmm21")},
- {'x', QLatin1String("xmm22")}, {'x', QLatin1String("xmm23")},
- {'x', QLatin1String("xmm24")}, {'x', QLatin1String("xmm25")},
- {'x', QLatin1String("xmm26")}, {'x', QLatin1String("xmm27")},
- {'x', QLatin1String("xmm28")}, {'x', QLatin1String("xmm29")},
- {'x', QLatin1String("xmm30")}, {'x', QLatin1String("xmm31")},
- {'y', QLatin1String("ymm0")}, {'y', QLatin1String("ymm1")},
- {'y', QLatin1String("ymm2")}, {'y', QLatin1String("ymm3")},
- {'y', QLatin1String("ymm4")}, {'y', QLatin1String("ymm5")},
- {'y', QLatin1String("ymm6")}, {'y', QLatin1String("ymm7")},
- {'y', QLatin1String("ymm8")}, {'y', QLatin1String("ymm9")},
- {'y', QLatin1String("ymm10")}, {'y', QLatin1String("ymm11")},
- {'y', QLatin1String("ymm12")}, {'y', QLatin1String("ymm13")},
- {'y', QLatin1String("ymm14")}, {'y', QLatin1String("ymm15")},
- {'y', QLatin1String("ymm16")}, {'y', QLatin1String("ymm17")},
- {'y', QLatin1String("ymm18")}, {'y', QLatin1String("ymm19")},
- {'y', QLatin1String("ymm20")}, {'y', QLatin1String("ymm21")},
- {'y', QLatin1String("ymm22")}, {'y', QLatin1String("ymm23")},
- {'y', QLatin1String("ymm24")}, {'y', QLatin1String("ymm25")},
- {'y', QLatin1String("ymm26")}, {'y', QLatin1String("ymm27")},
- {'y', QLatin1String("ymm28")}, {'y', QLatin1String("ymm29")},
- {'y', QLatin1String("ymm30")}, {'y', QLatin1String("ymm31")},
- {'z', QLatin1String("zmm0")}, {'z', QLatin1String("zmm1")},
- {'z', QLatin1String("zmm2")}, {'z', QLatin1String("zmm3")},
- {'z', QLatin1String("zmm4")}, {'z', QLatin1String("zmm5")},
- {'z', QLatin1String("zmm6")}, {'z', QLatin1String("zmm7")},
- {'z', QLatin1String("zmm8")}, {'z', QLatin1String("zmm9")},
- {'z', QLatin1String("zmm10")}, {'z', QLatin1String("zmm11")},
- {'z', QLatin1String("zmm12")}, {'z', QLatin1String("zmm13")},
- {'z', QLatin1String("zmm14")}, {'z', QLatin1String("zmm15")},
- {'z', QLatin1String("zmm16")}, {'z', QLatin1String("zmm17")},
- {'z', QLatin1String("zmm18")}, {'z', QLatin1String("zmm19")},
- {'z', QLatin1String("zmm20")}, {'z', QLatin1String("zmm21")},
- {'z', QLatin1String("zmm22")}, {'z', QLatin1String("zmm23")},
- {'z', QLatin1String("zmm24")}, {'z', QLatin1String("zmm25")},
- {'z', QLatin1String("zmm26")}, {'z', QLatin1String("zmm27")},
- {'z', QLatin1String("zmm28")}, {'z', QLatin1String("zmm29")},
- {'z', QLatin1String("zmm30")}, {'z', QLatin1String("zmm31")},
- {'k', QLatin1String("k0")}, {'k', QLatin1String("k1")},
- {'k', QLatin1String("k2")}, {'k', QLatin1String("k3")},
- {'k', QLatin1String("k4")}, {'k', QLatin1String("k5")},
- {'k', QLatin1String("k6")}, {'k', QLatin1String("k7")},
- {'b', QLatin1String("bnd0")}, {'b', QLatin1String("bnd1")},
- {'b', QLatin1String("bnd2")}, {'b', QLatin1String("bnd3")},
- {'c', QLatin1String("cr0")}, {'c', QLatin1String("cr1")},
- {'c', QLatin1String("cr2")}, {'c', QLatin1String("cr3")},
- {'c', QLatin1String("cr4")}, {'c', QLatin1String("cr8")},
- {'d', QLatin1String("dr0")}, {'d', QLatin1String("dr1")},
- {'d', QLatin1String("dr2")}, {'d', QLatin1String("dr3")},
- {'d', QLatin1String("dr8")}, {'t', QLatin1String("tr3")},
- {'t', QLatin1String("tr4")}, {'t', QLatin1String("tr5")},
- {'t', QLatin1String("tr6")}, {'t', QLatin1String("tr7")},
- {'r', QLatin1String("r0")}, {'r', QLatin1String("r1")},
- {'r', QLatin1String("r2")}, {'r', QLatin1String("r3")},
- {'r', QLatin1String("r4")}, {'r', QLatin1String("r5")},
- {'r', QLatin1String("r6")}, {'r', QLatin1String("r7")},
- {'r', QLatin1String("r0b")}, {'r', QLatin1String("r1b")},
- {'r', QLatin1String("r2b")}, {'r', QLatin1String("r3b")},
- {'r', QLatin1String("r4b")}, {'r', QLatin1String("r5b")},
- {'r', QLatin1String("r6b")}, {'r', QLatin1String("r7b")},
- {'r', QLatin1String("r0w")}, {'r', QLatin1String("r1w")},
- {'r', QLatin1String("r2w")}, {'r', QLatin1String("r3w")},
- {'r', QLatin1String("r4w")}, {'r', QLatin1String("r5w")},
- {'r', QLatin1String("r6w")}, {'r', QLatin1String("r7w")},
- {'r', QLatin1String("r0d")}, {'r', QLatin1String("r1d")},
- {'r', QLatin1String("r2d")}, {'r', QLatin1String("r3d")},
- {'r', QLatin1String("r4d")}, {'r', QLatin1String("r5d")},
- {'r', QLatin1String("r6d")}, {'r', QLatin1String("r7d")},
- {'r', QLatin1String("r0h")}, {'r', QLatin1String("r1h")},
- {'r', QLatin1String("r2h")}, {'r', QLatin1String("r3h")},
- {'r', QLatin1String("r0l")}, {'r', QLatin1String("r1l")},
- {'r', QLatin1String("r2l")}, {'r', QLatin1String("r3l")},
- {'r', QLatin1String("r4l")}, {'r', QLatin1String("r5l")},
- {'r', QLatin1String("r6l")}, {'r', QLatin1String("r7l")},
- {'r', QLatin1String("r8l")}, {'r', QLatin1String("r9l")},
- {'r', QLatin1String("r10l")}, {'r', QLatin1String("r11l")},
- {'r', QLatin1String("r12l")}, {'r', QLatin1String("r13l")},
- {'r', QLatin1String("r14l")}, {'r', QLatin1String("r15l")},
- {'d', QLatin1String("db")}, {'d', QLatin1String("dw")},
- {'d', QLatin1String("dd")}, {'d', QLatin1String("dq")},
- {'d', QLatin1String("dt")}, {'d', QLatin1String("ddq")},
- {'d', QLatin1String("do")}, {'d', QLatin1String("dy")},
- {'d', QLatin1String("dz")}, {'r', QLatin1String("resb")},
- {'r', QLatin1String("resw")}, {'r', QLatin1String("resd")},
- {'r', QLatin1String("resq")}, {'r', QLatin1String("rest")},
- {'r', QLatin1String("resdq")}, {'r', QLatin1String("reso")},
- {'r', QLatin1String("resy")}, {'r', QLatin1String("resz")},
- {'i', QLatin1String("inc")}, {'b', QLatin1String("bin")},
- {'e', QLatin1String("equ")}, {'t', QLatin1String("times")},
- {'b', QLatin1String("byte")}, {'w', QLatin1String("word")},
- {'d', QLatin1String("dword")}, {'q', QLatin1String("qword")},
- {'n', QLatin1String("nosplit")}, {'r', QLatin1String("rel")},
- {'a', QLatin1String("abs")}, {'s', QLatin1String("seg")},
- {'w', QLatin1String("wrt")}, {'s', QLatin1String("strict")},
- {'n', QLatin1String("near")}, {'f', QLatin1String("far")},
- {'a', QLatin1String("a32")}, {'p', QLatin1String("ptr")}};
-
- keywords = {
- {'l', QLatin1String("lock")},
- {'r', QLatin1String("rep")},
- {'r', QLatin1String("repe")},
- {'r', QLatin1String("repz")},
- {'r', QLatin1String("repne")},
- {'r', QLatin1String("repnz")},
- {'x', QLatin1String("xaquire")},
- {'x', QLatin1String("xrelease")},
- {'b', QLatin1String("bnd")},
- {'n', QLatin1String("nobnd")},
- {'a', QLatin1String("aaa")},
- {'a', QLatin1String("aad")},
- {'a', QLatin1String("aam")},
- {'a', QLatin1String("aas")},
- {'a', QLatin1String("adc")},
- {'a', QLatin1String("add")},
- {'a', QLatin1String("addl")},
- {'a', QLatin1String("and")},
- {'a', QLatin1String("arpl")},
- {'b', QLatin1String("bb0_reset")},
- {'b', QLatin1String("bb1_reset")},
- {'b', QLatin1String("bound")},
- {'b', QLatin1String("bsf")},
- {'b', QLatin1String("bsr")},
- {'b', QLatin1String("bswap")},
- {'b', QLatin1String("bt")},
- {'b', QLatin1String("btc")},
- {'b', QLatin1String("btr")},
- {'b', QLatin1String("bts")},
- {'c', QLatin1String("call")},
- {'c', QLatin1String("cbw")},
- {'c', QLatin1String("cdq")},
- {'c', QLatin1String("cdqe")},
- {'c', QLatin1String("clc")},
- {'c', QLatin1String("cld")},
- {'c', QLatin1String("cli")},
- {'c', QLatin1String("clts")},
- {'c', QLatin1String("cltd")},
- {'c', QLatin1String("cmc")},
- {'c', QLatin1String("cmp")},
- {'c', QLatin1String("cmpl")},
- {'c', QLatin1String("cmpsb")},
- {'c', QLatin1String("cmpsd")},
- {'c', QLatin1String("cmpsq")},
- {'c', QLatin1String("cmpsw")},
- {'c', QLatin1String("cmpxchg")},
- {'c', QLatin1String("cmpxchg486")},
- {'c', QLatin1String("cmpxchg8b")},
- {'c', QLatin1String("cmpxchg16b")},
- {'c', QLatin1String("cpuid")},
- {'c', QLatin1String("cpu_read")},
- {'c', QLatin1String("cpu_write")},
- {'c', QLatin1String("cqo")},
- {'c', QLatin1String("cwd")},
- {'c', QLatin1String("cwde")},
- {'d', QLatin1String("daa")},
- {'d', QLatin1String("das")},
- {'d', QLatin1String("dec")},
- {'d', QLatin1String("div")},
- {'d', QLatin1String("dmint")},
- {'e', QLatin1String("emms")},
- {'e', QLatin1String("enter")},
- {'e', QLatin1String("equ")},
- {'f', QLatin1String("f2xm1")},
- {'f', QLatin1String("fabs")},
- {'f', QLatin1String("fadd")},
- {'f', QLatin1String("faddp")},
- {'f', QLatin1String("fbld")},
- {'f', QLatin1String("fbstp")},
- {'f', QLatin1String("fchs")},
- {'f', QLatin1String("fclex")},
- {'f', QLatin1String("fcmovb")},
- {'f', QLatin1String("fcmovbe")},
- {'f', QLatin1String("fcmove")},
- {'f', QLatin1String("fcmovnb")},
- {'f', QLatin1String("fcmovnbe")},
- {'f', QLatin1String("fcmovne")},
- {'f', QLatin1String("fcmovnu")},
- {'f', QLatin1String("fcmovu")},
- {'f', QLatin1String("fcom")},
- {'f', QLatin1String("fcomi")},
- {'f', QLatin1String("fcomip")},
- {'f', QLatin1String("fcomp")},
- {'f', QLatin1String("fcompp")},
- {'f', QLatin1String("fcos")},
- {'f', QLatin1String("fdecstp")},
- {'f', QLatin1String("fdisi")},
- {'f', QLatin1String("fdiv")},
- {'f', QLatin1String("fdivp")},
- {'f', QLatin1String("fdivr")},
- {'f', QLatin1String("fdivrp")},
- {'f', QLatin1String("femms")},
- {'f', QLatin1String("feni")},
- {'f', QLatin1String("ffree")},
- {'f', QLatin1String("ffreep")},
- {'f', QLatin1String("fiadd")},
- {'f', QLatin1String("ficom")},
- {'f', QLatin1String("ficomp")},
- {'f', QLatin1String("fidiv")},
- {'f', QLatin1String("fidivr")},
- {'f', QLatin1String("fild")},
- {'f', QLatin1String("fimul")},
- {'f', QLatin1String("fincstp")},
- {'f', QLatin1String("finit")},
- {'f', QLatin1String("fist")},
- {'f', QLatin1String("fistp")},
- {'f', QLatin1String("fisttp")},
- {'f', QLatin1String("fisub")},
- {'f', QLatin1String("fisubr")},
- {'f', QLatin1String("fld")},
- {'f', QLatin1String("fld1")},
- {'f', QLatin1String("fldcw")},
- {'f', QLatin1String("fldenv")},
- {'f', QLatin1String("fldl2e")},
- {'f', QLatin1String("fldl2t")},
- {'f', QLatin1String("fldlg2")},
- {'f', QLatin1String("fldln2")},
- {'f', QLatin1String("fldpi")},
- {'f', QLatin1String("fldz")},
- {'f', QLatin1String("fmul")},
- {'f', QLatin1String("fmulp")},
- {'f', QLatin1String("fnclex")},
- {'f', QLatin1String("fndisi")},
- {'f', QLatin1String("fneni")},
- {'f', QLatin1String("fninit")},
- {'f', QLatin1String("fnop")},
- {'f', QLatin1String("fnsave")},
- {'f', QLatin1String("fnstcw")},
- {'f', QLatin1String("fnstenv")},
- {'f', QLatin1String("fnstsw")},
- {'f', QLatin1String("fpatan")},
- {'f', QLatin1String("fprem")},
- {'f', QLatin1String("fprem1")},
- {'f', QLatin1String("fptan")},
- {'f', QLatin1String("frndint")},
- {'f', QLatin1String("frstor")},
- {'f', QLatin1String("fsave")},
- {'f', QLatin1String("fscale")},
- {'f', QLatin1String("fsetpm")},
- {'f', QLatin1String("fsin")},
- {'f', QLatin1String("fsincos")},
- {'f', QLatin1String("fsqrt")},
- {'f', QLatin1String("fst")},
- {'f', QLatin1String("fstcw")},
- {'f', QLatin1String("fstenv")},
- {'f', QLatin1String("fstp")},
- {'f', QLatin1String("fstsw")},
- {'f', QLatin1String("fsub")},
- {'f', QLatin1String("fsubp")},
- {'f', QLatin1String("fsubr")},
- {'f', QLatin1String("fsubrp")},
- {'f', QLatin1String("ftst")},
- {'f', QLatin1String("fucom")},
- {'f', QLatin1String("fucomi")},
- {'f', QLatin1String("fucomip")},
- {'f', QLatin1String("fucomp")},
- {'f', QLatin1String("fucompp")},
- {'f', QLatin1String("fxam")},
- {'f', QLatin1String("fxch")},
- {'f', QLatin1String("fxtract")},
- {'f', QLatin1String("fyl2x")},
- {'f', QLatin1String("fyl2xp1")},
- {'g', QLatin1String("global")},
- {'g', QLatin1String("globl")},
- {'h', QLatin1String("hlt")},
- {'i', QLatin1String("ibts")},
- {'i', QLatin1String("icebp")},
- {'i', QLatin1String("idiv")},
- {'i', QLatin1String("idivl")},
- {'i', QLatin1String("idivq")},
- {'i', QLatin1String("imul")},
- {'i', QLatin1String("imull")},
- {'i', QLatin1String("imulq")},
- {'i', QLatin1String("in")},
- {'i', QLatin1String("inc")},
- {'i', QLatin1String("incbin")},
- {'i', QLatin1String("insb")},
- {'i', QLatin1String("insd")},
- {'i', QLatin1String("insw")},
- {'i', QLatin1String("int")},
- {'i', QLatin1String("int01")},
- {'i', QLatin1String("int1")},
- {'i', QLatin1String("int03")},
- {'i', QLatin1String("int3")},
- {'i', QLatin1String("into")},
- {'i', QLatin1String("invd")},
- {'i', QLatin1String("invpcid")},
- {'i', QLatin1String("invlpg")},
- {'i', QLatin1String("invlpga")},
- {'i', QLatin1String("iret")},
- {'i', QLatin1String("iretd")},
- {'i', QLatin1String("iretq")},
- {'i', QLatin1String("iretw")},
- {'j', QLatin1String("jcxz")},
- {'j', QLatin1String("jecxz")},
- {'j', QLatin1String("jrcxz")},
- {'j', QLatin1String("jmp")},
- {'j', QLatin1String("jmpe")},
- {'l', QLatin1String("lahf")},
- {'l', QLatin1String("lar")},
- {'l', QLatin1String("lds")},
- {'l', QLatin1String("lea")},
- {'l', QLatin1String("leal")},
- {'l', QLatin1String("leaq")},
- {'l', QLatin1String("leave")},
- {'l', QLatin1String("les")},
- {'l', QLatin1String("lfence")},
- {'l', QLatin1String("lfs")},
- {'l', QLatin1String("lgdt")},
- {'l', QLatin1String("lgs")},
- {'l', QLatin1String("lidt")},
- {'l', QLatin1String("lldt")},
- {'l', QLatin1String("lmsw")},
- {'l', QLatin1String("loadall")},
- {'l', QLatin1String("loadall286")},
- {'l', QLatin1String("lodsb")},
- {'l', QLatin1String("lodsd")},
- {'l', QLatin1String("lodsq")},
- {'l', QLatin1String("lodsw")},
- {'l', QLatin1String("loop")},
- {'l', QLatin1String("loope")},
- {'l', QLatin1String("loopne")},
- {'l', QLatin1String("loopnz")},
- {'l', QLatin1String("loopz")},
- {'l', QLatin1String("lsl")},
- {'l', QLatin1String("lss")},
- {'l', QLatin1String("ltr")},
- {'m', QLatin1String("mfence")},
- {'m', QLatin1String("monitor")},
- {'m', QLatin1String("mov")},
- {'m', QLatin1String("movd")},
- {'m', QLatin1String("movl")},
- {'m', QLatin1String("movq")},
- {'m', QLatin1String("movsb")},
- {'m', QLatin1String("movsd")},
- {'m', QLatin1String("movsq")},
- {'m', QLatin1String("movsw")},
- {'m', QLatin1String("movsx")},
- {'m', QLatin1String("movsxd")},
- {'m', QLatin1String("movzx")},
- {'m', QLatin1String("mul")},
- {'m', QLatin1String("mwait")},
- {'n', QLatin1String("neg")},
- {'n', QLatin1String("nop")},
- {'n', QLatin1String("not")},
- {'o', QLatin1String("or")},
- {'o', QLatin1String("out")},
- {'o', QLatin1String("outsb")},
- {'o', QLatin1String("outsd")},
- {'o', QLatin1String("outsw")},
- {'p', QLatin1String("packssdw")},
- {'p', QLatin1String("packsswb")},
- {'p', QLatin1String("packuswb")},
- {'p', QLatin1String("paddb")},
- {'p', QLatin1String("paddd")},
- {'p', QLatin1String("paddsb")},
- {'p', QLatin1String("paddsiw")},
- {'p', QLatin1String("paddsw")},
- {'p', QLatin1String("paddusb")},
- {'p', QLatin1String("paddusw")},
- {'p', QLatin1String("paddw")},
- {'p', QLatin1String("pand")},
- {'p', QLatin1String("pandn")},
- {'p', QLatin1String("pause")},
- {'p', QLatin1String("paveb")},
- {'p', QLatin1String("pavgusb")},
- {'p', QLatin1String("pcmpeqb")},
- {'p', QLatin1String("pcmpeqd")},
- {'p', QLatin1String("pcmpeqw")},
- {'p', QLatin1String("pcmpgtb")},
- {'p', QLatin1String("pcmpgtd")},
- {'p', QLatin1String("pcmpgtw")},
- {'p', QLatin1String("pdistib")},
- {'p', QLatin1String("pf2id")},
- {'p', QLatin1String("pfacc")},
- {'p', QLatin1String("pfadd")},
- {'p', QLatin1String("pfcmpeq")},
- {'p', QLatin1String("pfcmpge")},
- {'p', QLatin1String("pfcmpgt")},
- {'p', QLatin1String("pfmax")},
- {'p', QLatin1String("pfmin")},
- {'p', QLatin1String("pfmul")},
- {'p', QLatin1String("pfrcp")},
- {'p', QLatin1String("pfrcpit1")},
- {'p', QLatin1String("pfrcpit2")},
- {'p', QLatin1String("pfrsqit1")},
- {'p', QLatin1String("pfrsqrt")},
- {'p', QLatin1String("pfsub")},
- {'p', QLatin1String("pfsubr")},
- {'p', QLatin1String("pi2fd")},
- {'p', QLatin1String("pmachriw")},
- {'p', QLatin1String("pmaddwd")},
- {'p', QLatin1String("pmagw")},
- {'p', QLatin1String("pmulhriw")},
- {'p', QLatin1String("pmulhrwa")},
- {'p', QLatin1String("pmulhrwc")},
- {'p', QLatin1String("pmulhw")},
- {'p', QLatin1String("pmullw")},
- {'p', QLatin1String("pmvgezb")},
- {'p', QLatin1String("pmvlzb")},
- {'p', QLatin1String("pmvnzb")},
- {'p', QLatin1String("pmvzb")},
- {'p', QLatin1String("pop")},
- {'p', QLatin1String("popq")},
- {'p', QLatin1String("popa")},
- {'p', QLatin1String("popad")},
- {'p', QLatin1String("popaw")},
- {'p', QLatin1String("popf")},
- {'p', QLatin1String("popfd")},
- {'p', QLatin1String("popfq")},
- {'p', QLatin1String("popfw")},
- {'p', QLatin1String("por")},
- {'p', QLatin1String("prefetch")},
- {'p', QLatin1String("prefetchw")},
- {'p', QLatin1String("pslld")},
- {'p', QLatin1String("psllq")},
- {'p', QLatin1String("psllw")},
- {'p', QLatin1String("psrad")},
- {'p', QLatin1String("psraw")},
- {'p', QLatin1String("psrld")},
- {'p', QLatin1String("psrlq")},
- {'p', QLatin1String("psrlw")},
- {'p', QLatin1String("psubb")},
- {'p', QLatin1String("psubd")},
- {'p', QLatin1String("psubsb")},
- {'p', QLatin1String("psubsiw")},
- {'p', QLatin1String("psubsw")},
- {'p', QLatin1String("psubusb")},
- {'p', QLatin1String("psubusw")},
- {'p', QLatin1String("psubw")},
- {'p', QLatin1String("punpckhbw")},
- {'p', QLatin1String("punpckhdq")},
- {'p', QLatin1String("punpckhwd")},
- {'p', QLatin1String("punpcklbw")},
- {'p', QLatin1String("punpckldq")},
- {'p', QLatin1String("punpcklwd")},
- {'p', QLatin1String("push")},
- {'p', QLatin1String("pusha")},
- {'p', QLatin1String("pushq")},
- {'p', QLatin1String("pushad")},
- {'p', QLatin1String("pushaw")},
- {'p', QLatin1String("pushf")},
- {'p', QLatin1String("pushfd")},
- {'p', QLatin1String("pushfq")},
- {'p', QLatin1String("pushfw")},
- {'p', QLatin1String("pxor")},
- {'r', QLatin1String("rcl")},
- {'r', QLatin1String("rcr")},
- {'r', QLatin1String("rdshr")},
- {'r', QLatin1String("rdmsr")},
- {'r', QLatin1String("rdpmc")},
- {'r', QLatin1String("rdtsc")},
- {'r', QLatin1String("rdtscp")},
- {'r', QLatin1String("ret")},
- {'r', QLatin1String("retf")},
- {'r', QLatin1String("retn")},
- {'r', QLatin1String("retq")},
- {'r', QLatin1String("rol")},
- {'r', QLatin1String("ror")},
- {'r', QLatin1String("rdm")},
- {'r', QLatin1String("rsdc")},
- {'r', QLatin1String("rsldt")},
- {'r', QLatin1String("rsm")},
- {'r', QLatin1String("rsts")},
- {'s', QLatin1String("sahf")},
- {'s', QLatin1String("sal")},
- {'s', QLatin1String("sall")},
- {'s', QLatin1String("salq")},
- {'s', QLatin1String("salc")},
- {'s', QLatin1String("sar")},
- {'s', QLatin1String("sarl")},
- {'s', QLatin1String("sarq")},
- {'s', QLatin1String("sbb")},
- {'s', QLatin1String("scasb")},
- {'s', QLatin1String("scasd")},
- {'s', QLatin1String("scasq")},
- {'s', QLatin1String("scasw")},
- {'s', QLatin1String("sfence")},
- {'s', QLatin1String("sgdt")},
- {'s', QLatin1String("shl")},
- {'s', QLatin1String("shll")},
- {'s', QLatin1String("shllq")},
- {'s', QLatin1String("shld")},
- {'s', QLatin1String("shr")},
- {'s', QLatin1String("shrd")},
- {'s', QLatin1String("sidt")},
- {'s', QLatin1String("sldt")},
- {'s', QLatin1String("skinit")},
- {'s', QLatin1String("smi")},
- {'s', QLatin1String("smint")},
- {'s', QLatin1String("smintold")},
- {'s', QLatin1String("smsw")},
- {'s', QLatin1String("stc")},
- {'s', QLatin1String("std")},
- {'s', QLatin1String("sti")},
- {'s', QLatin1String("stosb")},
- {'s', QLatin1String("stosd")},
- {'s', QLatin1String("stosq")},
- {'s', QLatin1String("stosw")},
- {'s', QLatin1String("str")},
- {'s', QLatin1String("sub")},
- {'s', QLatin1String("svdc")},
- {'s', QLatin1String("svldt")},
- {'s', QLatin1String("svts")},
- {'s', QLatin1String("swapgs")},
- {'s', QLatin1String("syscall")},
- {'s', QLatin1String("sysenter")},
- {'s', QLatin1String("sysexit")},
- {'s', QLatin1String("sysret")},
- {'t', QLatin1String("test")},
- {'t', QLatin1String("testl")},
- {'t', QLatin1String("testq")},
- {'u', QLatin1String("ud0")},
- {'u', QLatin1String("ud1")},
- {'u', QLatin1String("ud2b")},
- {'u', QLatin1String("ud2")},
- {'u', QLatin1String("ud2a")},
- {'u', QLatin1String("umov")},
- {'v', QLatin1String("verr")},
- {'v', QLatin1String("verw")},
- {'f', QLatin1String("fwait")},
- {'w', QLatin1String("wbinvd")},
- {'w', QLatin1String("wrshr")},
- {'w', QLatin1String("wrmsr")},
- {'x', QLatin1String("xadd")},
- {'x', QLatin1String("xbts")},
- {'x', QLatin1String("xchg")},
- {'x', QLatin1String("xlatb")},
- {'x', QLatin1String("xlat")},
- {'x', QLatin1String("xor")},
- {'c', QLatin1String("cmove")},
- {'c', QLatin1String("cmovz")},
- {'c', QLatin1String("cmovne")},
- {'c', QLatin1String("cmovnz")},
- {'c', QLatin1String("cmova")},
- {'c', QLatin1String("cmovnbe")},
- {'c', QLatin1String("cmovae")},
- {'c', QLatin1String("cmovnb")},
- {'c', QLatin1String("cmovb")},
- {'c', QLatin1String("cmovnae")},
- {'c', QLatin1String("cmovbe")},
- {'c', QLatin1String("cmovna")},
- {'c', QLatin1String("cmovg")},
- {'c', QLatin1String("cmovnle")},
- {'c', QLatin1String("cmovge")},
- {'c', QLatin1String("cmovnl")},
- {'c', QLatin1String("cmovl")},
- {'c', QLatin1String("cmovnge")},
- {'c', QLatin1String("cmovle")},
- {'c', QLatin1String("cmovng")},
- {'c', QLatin1String("cmovc")},
- {'c', QLatin1String("cmovnc")},
- {'c', QLatin1String("cmovo")},
- {'c', QLatin1String("cmovno")},
- {'c', QLatin1String("cmovs")},
- {'c', QLatin1String("cmovns")},
- {'c', QLatin1String("cmovp")},
- {'c', QLatin1String("cmovpe")},
- {'c', QLatin1String("cmovnp")},
- {'c', QLatin1String("cmovpo")},
- {'j', QLatin1String("je")},
- {'j', QLatin1String("jz")},
- {'j', QLatin1String("jne")},
- {'j', QLatin1String("jnz")},
- {'j', QLatin1String("ja")},
- {'j', QLatin1String("jnbe")},
- {'j', QLatin1String("jae")},
- {'j', QLatin1String("jnb")},
- {'j', QLatin1String("jb")},
- {'j', QLatin1String("jnae")},
- {'j', QLatin1String("jbe")},
- {'j', QLatin1String("jna")},
- {'j', QLatin1String("jg")},
- {'j', QLatin1String("jnle")},
- {'j', QLatin1String("jge")},
- {'j', QLatin1String("jnl")},
- {'j', QLatin1String("jl")},
- {'j', QLatin1String("jnge")},
- {'j', QLatin1String("jle")},
- {'j', QLatin1String("jng")},
- {'j', QLatin1String("jc")},
- {'j', QLatin1String("jnc")},
- {'j', QLatin1String("jo")},
- {'j', QLatin1String("jno")},
- {'j', QLatin1String("js")},
- {'j', QLatin1String("jns")},
- {'j', QLatin1String("jpo")},
- {'j', QLatin1String("jnp")},
- {'j', QLatin1String("jpe")},
- {'j', QLatin1String("jp")},
- {'s', QLatin1String("sete")},
- {'s', QLatin1String("setz")},
- {'s', QLatin1String("setne")},
- {'s', QLatin1String("setnz")},
- {'s', QLatin1String("seta")},
- {'s', QLatin1String("setnbe")},
- {'s', QLatin1String("setae")},
- {'s', QLatin1String("setnb")},
- {'s', QLatin1String("setnc")},
- {'s', QLatin1String("setb")},
- {'s', QLatin1String("setnae")},
- {'s', QLatin1String("setcset")},
- {'s', QLatin1String("setbe")},
- {'s', QLatin1String("setna")},
- {'s', QLatin1String("setg")},
- {'s', QLatin1String("setnle")},
- {'s', QLatin1String("setge")},
- {'s', QLatin1String("setnl")},
- {'s', QLatin1String("setl")},
- {'s', QLatin1String("setnge")},
- {'s', QLatin1String("setle")},
- {'s', QLatin1String("setng")},
- {'s', QLatin1String("sets")},
- {'s', QLatin1String("setns")},
- {'s', QLatin1String("seto")},
- {'s', QLatin1String("setno")},
- {'s', QLatin1String("setpe")},
- {'s', QLatin1String("setp")},
- {'s', QLatin1String("setpo")},
- {'s', QLatin1String("setnp")},
- {'a', QLatin1String("addps")},
- {'a', QLatin1String("addss")},
- {'a', QLatin1String("andnps")},
- {'a', QLatin1String("andps")},
- {'c', QLatin1String("cmpeqps")},
- {'c', QLatin1String("cmpeqss")},
- {'c', QLatin1String("cmpleps")},
- {'c', QLatin1String("cmpless")},
- {'c', QLatin1String("cmpltps")},
- {'c', QLatin1String("cmpltss")},
- {'c', QLatin1String("cmpneqps")},
- {'c', QLatin1String("cmpneqss")},
- {'c', QLatin1String("cmpnleps")},
- {'c', QLatin1String("cmpnless")},
- {'c', QLatin1String("cmpnltps")},
- {'c', QLatin1String("cmpnltss")},
- {'c', QLatin1String("cmpordps")},
- {'c', QLatin1String("cmpordss")},
- {'c', QLatin1String("cmpunordps")},
- {'c', QLatin1String("cmpunordss")},
- {'c', QLatin1String("cmpps")},
- {'c', QLatin1String("cmpss")},
- {'c', QLatin1String("comiss")},
- {'c', QLatin1String("cvtpi2ps")},
- {'c', QLatin1String("cvtps2pi")},
- {'c', QLatin1String("cvtsi2ss")},
- {'c', QLatin1String("cvtss2si")},
- {'c', QLatin1String("cvttps2pi")},
- {'c', QLatin1String("cvttss2si")},
- {'d', QLatin1String("divps")},
- {'d', QLatin1String("divss")},
- {'l', QLatin1String("ldmxcsr")},
- {'m', QLatin1String("maxps")},
- {'m', QLatin1String("maxss")},
- {'m', QLatin1String("minps")},
- {'m', QLatin1String("minss")},
- {'m', QLatin1String("movaps")},
- {'m', QLatin1String("movhps")},
- {'m', QLatin1String("movlhps")},
- {'m', QLatin1String("movlps")},
- {'m', QLatin1String("movhlps")},
- {'m', QLatin1String("movmskps")},
- {'m', QLatin1String("movntps")},
- {'m', QLatin1String("movss")},
- {'m', QLatin1String("movups")},
- {'m', QLatin1String("mulps")},
- {'m', QLatin1String("mulss")},
- {'o', QLatin1String("orps")},
- {'r', QLatin1String("rcpps")},
- {'r', QLatin1String("rcpss")},
- {'r', QLatin1String("rsqrtps")},
- {'r', QLatin1String("rsqrtss")},
- {'s', QLatin1String("shufps")},
- {'s', QLatin1String("sqrtps")},
- {'s', QLatin1String("sqrtss")},
- {'s', QLatin1String("stmxcsr")},
- {'s', QLatin1String("subps")},
- {'s', QLatin1String("subss")},
- {'u', QLatin1String("ucomiss")},
- {'u', QLatin1String("unpckhps")},
- {'u', QLatin1String("unpcklps")},
- {'x', QLatin1String("xorps")},
- {'f', QLatin1String("fxrstor")},
- {'f', QLatin1String("fxrstor64")},
- {'f', QLatin1String("fxsave")},
- {'f', QLatin1String("fxsave64")},
- {'x', QLatin1String("xgetbv")},
- {'x', QLatin1String("xsetbv")},
- {'x', QLatin1String("xsave")},
- {'x', QLatin1String("xsave64")},
- {'x', QLatin1String("xsaveopt")},
- {'x', QLatin1String("xsaveopt64")},
- {'x', QLatin1String("xrstor")},
- {'x', QLatin1String("xrstor64")},
- {'p', QLatin1String("prefetchnta")},
- {'p', QLatin1String("prefetcht0")},
- {'p', QLatin1String("prefetcht1")},
- {'p', QLatin1String("prefetcht2")},
- {'m', QLatin1String("maskmovq")},
- {'m', QLatin1String("movntq")},
- {'p', QLatin1String("pavgb")},
- {'p', QLatin1String("pavgw")},
- {'p', QLatin1String("pextrw")},
- {'p', QLatin1String("pinsrw")},
- {'p', QLatin1String("pmaxsw")},
- {'p', QLatin1String("pmaxub")},
- {'p', QLatin1String("pminsw")},
- {'p', QLatin1String("pminub")},
- {'p', QLatin1String("pmovmskb")},
- {'p', QLatin1String("pmulhuw")},
- {'p', QLatin1String("psadbw")},
- {'p', QLatin1String("pshufw")},
- {'p', QLatin1String("pf2iw")},
- {'p', QLatin1String("pfnacc")},
- {'p', QLatin1String("pfpnacc")},
- {'p', QLatin1String("pi2fw")},
- {'p', QLatin1String("pswapd")},
- {'m', QLatin1String("maskmovdqu")},
- {'c', QLatin1String("clflush")},
- {'m', QLatin1String("movntdq")},
- {'m', QLatin1String("movnti")},
- {'m', QLatin1String("movntpd")},
- {'m', QLatin1String("movdqa")},
- {'m', QLatin1String("movdqu")},
- {'m', QLatin1String("movdq2q")},
- {'m', QLatin1String("movq2dq")},
- {'p', QLatin1String("paddq")},
- {'p', QLatin1String("pmuludq")},
- {'p', QLatin1String("pshufd")},
- {'p', QLatin1String("pshufhw")},
- {'p', QLatin1String("pshuflw")},
- {'p', QLatin1String("pslldq")},
- {'p', QLatin1String("psrldq")},
- {'p', QLatin1String("psubq")},
- {'p', QLatin1String("punpckhqdq")},
- {'p', QLatin1String("punpcklqdq")},
- {'a', QLatin1String("addpd")},
- {'a', QLatin1String("addsd")},
- {'a', QLatin1String("andnpd")},
- {'a', QLatin1String("andpd")},
- {'c', QLatin1String("cmpeqpd")},
- {'c', QLatin1String("cmpeqsd")},
- {'c', QLatin1String("cmplepd")},
- {'c', QLatin1String("cmplesd")},
- {'c', QLatin1String("cmpltpd")},
- {'c', QLatin1String("cmpltsd")},
- {'c', QLatin1String("cmpneqpd")},
- {'c', QLatin1String("cmpneqsd")},
- {'c', QLatin1String("cmpnlepd")},
- {'c', QLatin1String("cmpnlesd")},
- {'c', QLatin1String("cmpnltpd")},
- {'c', QLatin1String("cmpnltsd")},
- {'c', QLatin1String("cmpordpd")},
- {'c', QLatin1String("cmpordsd")},
- {'c', QLatin1String("cmpunordpd")},
- {'c', QLatin1String("cmpunordsd")},
- {'c', QLatin1String("cmppd")},
- {'c', QLatin1String("comisd")},
- {'c', QLatin1String("cvtdq2pd")},
- {'c', QLatin1String("cvtdq2ps")},
- {'c', QLatin1String("cvtpd2dq")},
- {'c', QLatin1String("cvtpd2pi")},
- {'c', QLatin1String("cvtpd2ps")},
- {'c', QLatin1String("cvtpi2pd")},
- {'c', QLatin1String("cvtps2dq")},
- {'c', QLatin1String("cvtps2pd")},
- {'c', QLatin1String("cvtsd2si")},
- {'c', QLatin1String("cvtsd2ss")},
- {'c', QLatin1String("cvtsi2sd")},
- {'c', QLatin1String("cvtss2sd")},
- {'c', QLatin1String("cvttpd2pi")},
- {'c', QLatin1String("cvttpd2dq")},
- {'c', QLatin1String("cvttps2dq")},
- {'c', QLatin1String("cvttsd2si")},
- {'d', QLatin1String("divpd")},
- {'d', QLatin1String("divsd")},
- {'m', QLatin1String("maxpd")},
- {'m', QLatin1String("maxsd")},
- {'m', QLatin1String("minpd")},
- {'m', QLatin1String("minsd")},
- {'m', QLatin1String("movapd")},
- {'m', QLatin1String("movhpd")},
- {'m', QLatin1String("movlpd")},
- {'m', QLatin1String("movmskpd")},
- {'m', QLatin1String("movupd")},
- {'m', QLatin1String("mulpd")},
- {'m', QLatin1String("mulsd")},
- {'o', QLatin1String("orpd")},
- {'s', QLatin1String("shufpd")},
- {'s', QLatin1String("sqrtpd")},
- {'s', QLatin1String("sqrtsd")},
- {'s', QLatin1String("subpd")},
- {'s', QLatin1String("subsd")},
- {'u', QLatin1String("ucomisd")},
- {'u', QLatin1String("unpckhpd")},
- {'u', QLatin1String("unpcklpd")},
- {'x', QLatin1String("xorpd")},
- {'a', QLatin1String("addsubpd")},
- {'a', QLatin1String("addsubps")},
- {'h', QLatin1String("haddpd")},
- {'h', QLatin1String("haddps")},
- {'h', QLatin1String("hsubpd")},
- {'h', QLatin1String("hsubps")},
- {'l', QLatin1String("lddqu")},
- {'m', QLatin1String("movddup")},
- {'m', QLatin1String("movshdup")},
- {'m', QLatin1String("movsldup")},
- {'c', QLatin1String("clgi")},
- {'s', QLatin1String("stgi")},
- {'v', QLatin1String("vmcall")},
- {'v', QLatin1String("vmclear")},
- {'v', QLatin1String("vmfunc")},
- {'v', QLatin1String("vmlaunch")},
- {'v', QLatin1String("vmload")},
- {'v', QLatin1String("vmmcall")},
- {'v', QLatin1String("vmptrld")},
- {'v', QLatin1String("vmptrst")},
- {'v', QLatin1String("vmread")},
- {'v', QLatin1String("vmresume")},
- {'v', QLatin1String("vmrun")},
- {'v', QLatin1String("vmsave")},
- {'v', QLatin1String("vmwrite")},
- {'v', QLatin1String("vmxoff")},
- {'v', QLatin1String("vmxon")},
- {'i', QLatin1String("invept")},
- {'i', QLatin1String("invvpid")},
- {'p', QLatin1String("pabsb")},
- {'p', QLatin1String("pabsw")},
- {'p', QLatin1String("pabsd")},
- {'p', QLatin1String("palignr")},
- {'p', QLatin1String("phaddw")},
- {'p', QLatin1String("phaddd")},
- {'p', QLatin1String("phaddsw")},
- {'p', QLatin1String("phsubw")},
- {'p', QLatin1String("phsubd")},
- {'p', QLatin1String("phsubsw")},
- {'p', QLatin1String("pmaddubsw")},
- {'p', QLatin1String("pmulhrsw")},
- {'p', QLatin1String("pshufb")},
- {'p', QLatin1String("psignb")},
- {'p', QLatin1String("psignw")},
- {'p', QLatin1String("psignd")},
- {'e', QLatin1String("extrq")},
- {'i', QLatin1String("insertq")},
- {'m', QLatin1String("movntsd")},
- {'m', QLatin1String("movntss")},
- {'l', QLatin1String("lzcnt")},
- {'b', QLatin1String("blendpd")},
- {'b', QLatin1String("blendps")},
- {'b', QLatin1String("blendvpd")},
- {'b', QLatin1String("blendvps")},
- {'d', QLatin1String("dppd")},
- {'d', QLatin1String("dpps")},
- {'e', QLatin1String("extractps")},
- {'i', QLatin1String("insertps")},
- {'m', QLatin1String("movntdqa")},
- {'m', QLatin1String("mpsadbw")},
- {'p', QLatin1String("packusdw")},
- {'p', QLatin1String("pblendvb")},
- {'p', QLatin1String("pblendw")},
- {'p', QLatin1String("pcmpeqq")},
- {'p', QLatin1String("pextrb")},
- {'p', QLatin1String("pextrd")},
- {'p', QLatin1String("pextrq")},
- {'p', QLatin1String("phminposuw")},
- {'p', QLatin1String("pinsrb")},
- {'p', QLatin1String("pinsrd")},
- {'p', QLatin1String("pinsrq")},
- {'p', QLatin1String("pmaxsb")},
- {'p', QLatin1String("pmaxsd")},
- {'p', QLatin1String("pmaxud")},
- {'p', QLatin1String("pmaxuw")},
- {'p', QLatin1String("pminsb")},
- {'p', QLatin1String("pminsd")},
- {'p', QLatin1String("pminud")},
- {'p', QLatin1String("pminuw")},
- {'p', QLatin1String("pmovsxbw")},
- {'p', QLatin1String("pmovsxbd")},
- {'p', QLatin1String("pmovsxbq")},
- {'p', QLatin1String("pmovsxwd")},
- {'p', QLatin1String("pmovsxwq")},
- {'p', QLatin1String("pmovsxdq")},
- {'p', QLatin1String("pmovzxbw")},
- {'p', QLatin1String("pmovzxbd")},
- {'p', QLatin1String("pmovzxbq")},
- {'p', QLatin1String("pmovzxwd")},
- {'p', QLatin1String("pmovzxwq")},
- {'p', QLatin1String("pmovzxdq")},
- {'p', QLatin1String("pmuldq")},
- {'p', QLatin1String("pmulld")},
- {'p', QLatin1String("ptest")},
- {'r', QLatin1String("roundpd")},
- {'r', QLatin1String("roundps")},
- {'r', QLatin1String("roundsd")},
- {'r', QLatin1String("roundss")},
- {'c', QLatin1String("crc32")},
- {'p', QLatin1String("pcmpestri")},
- {'p', QLatin1String("pcmpestrm")},
- {'p', QLatin1String("pcmpistri")},
- {'p', QLatin1String("pcmpistrm")},
- {'p', QLatin1String("pcmpgtq")},
- {'p', QLatin1String("popcnt")},
- {'g', QLatin1String("getsec")},
- {'p', QLatin1String("pfrcpv")},
- {'p', QLatin1String("pfrsqrtv")},
- {'m', QLatin1String("movbe")},
- {'a', QLatin1String("aesenc")},
- {'a', QLatin1String("aesenclast")},
- {'a', QLatin1String("aesdec")},
- {'a', QLatin1String("aesdeclast")},
- {'a', QLatin1String("aesimc")},
- {'a', QLatin1String("aeskeygenassist")},
- {'v', QLatin1String("vaesenc")},
- {'v', QLatin1String("vaesenclast")},
- {'v', QLatin1String("vaesdec")},
- {'v', QLatin1String("vaesdeclast")},
- {'v', QLatin1String("vaesimc")},
- {'v', QLatin1String("vaeskeygenassist")},
- {'v', QLatin1String("vaddpd")},
- {'v', QLatin1String("vaddps")},
- {'v', QLatin1String("vaddsd")},
- {'v', QLatin1String("vaddss")},
- {'v', QLatin1String("vaddsubpd")},
- {'v', QLatin1String("vaddsubps")},
- {'v', QLatin1String("vandpd")},
- {'v', QLatin1String("vandps")},
- {'v', QLatin1String("vandnpd")},
- {'v', QLatin1String("vandnps")},
- {'v', QLatin1String("vblendpd")},
- {'v', QLatin1String("vblendps")},
- {'v', QLatin1String("vblendvpd")},
- {'v', QLatin1String("vblendvps")},
- {'v', QLatin1String("vbroadcastss")},
- {'v', QLatin1String("vbroadcastsd")},
- {'v', QLatin1String("vbroadcastf128")},
- {'v', QLatin1String("vcmpeq_ospd")},
- {'v', QLatin1String("vcmpeqpd")},
- {'v', QLatin1String("vcmplt_ospd")},
- {'v', QLatin1String("vcmpltpd")},
- {'v', QLatin1String("vcmple_ospd")},
- {'v', QLatin1String("vcmplepd")},
- {'v', QLatin1String("vcmpunord_qpd")},
- {'v', QLatin1String("vcmpunordpd")},
- {'v', QLatin1String("vcmpneq_uqpd")},
- {'v', QLatin1String("vcmpneqpd")},
- {'v', QLatin1String("vcmpnlt_uspd")},
- {'v', QLatin1String("vcmpnltpd")},
- {'v', QLatin1String("vcmpnle_uspd")},
- {'v', QLatin1String("vcmpnlepd")},
- {'v', QLatin1String("vcmpord_qpd")},
- {'v', QLatin1String("vcmpordpd")},
- {'v', QLatin1String("vcmpeq_uqpd")},
- {'v', QLatin1String("vcmpnge_uspd")},
- {'v', QLatin1String("vcmpngepd")},
- {'v', QLatin1String("vcmpngt_uspd")},
- {'v', QLatin1String("vcmpngtpd")},
- {'v', QLatin1String("vcmpfalse_oqpd")},
- {'v', QLatin1String("vcmpfalsepd")},
- {'v', QLatin1String("vcmpneq_oqpd")},
- {'v', QLatin1String("vcmpge_ospd")},
- {'v', QLatin1String("vcmpgepd")},
- {'v', QLatin1String("vcmpgt_ospd")},
- {'v', QLatin1String("vcmpgtpd")},
- {'v', QLatin1String("vcmptrue_uqpd")},
- {'v', QLatin1String("vcmptruepd")},
- {'v', QLatin1String("vcmplt_oqpd")},
- {'v', QLatin1String("vcmple_oqpd")},
- {'v', QLatin1String("vcmpunord_spd")},
- {'v', QLatin1String("vcmpneq_uspd")},
- {'v', QLatin1String("vcmpnlt_uqpd")},
- {'v', QLatin1String("vcmpnle_uqpd")},
- {'v', QLatin1String("vcmpord_spd")},
- {'v', QLatin1String("vcmpeq_uspd")},
- {'v', QLatin1String("vcmpnge_uqpd")},
- {'v', QLatin1String("vcmpngt_uqpd")},
- {'v', QLatin1String("vcmpfalse_ospd")},
- {'v', QLatin1String("vcmpneq_ospd")},
- {'v', QLatin1String("vcmpge_oqpd")},
- {'v', QLatin1String("vcmpgt_oqpd")},
- {'v', QLatin1String("vcmptrue_uspd")},
- {'v', QLatin1String("vcmppd")},
- {'v', QLatin1String("vcmpeq_osps")},
- {'v', QLatin1String("vcmpeqps")},
- {'v', QLatin1String("vcmplt_osps")},
- {'v', QLatin1String("vcmpltps")},
- {'v', QLatin1String("vcmple_osps")},
- {'v', QLatin1String("vcmpleps")},
- {'v', QLatin1String("vcmpunord_qps")},
- {'v', QLatin1String("vcmpunordps")},
- {'v', QLatin1String("vcmpneq_uqps")},
- {'v', QLatin1String("vcmpneqps")},
- {'v', QLatin1String("vcmpnlt_usps")},
- {'v', QLatin1String("vcmpnltps")},
- {'v', QLatin1String("vcmpnle_usps")},
- {'v', QLatin1String("vcmpnleps")},
- {'v', QLatin1String("vcmpord_qps")},
- {'v', QLatin1String("vcmpordps")},
- {'v', QLatin1String("vcmpeq_uqps")},
- {'v', QLatin1String("vcmpnge_usps")},
- {'v', QLatin1String("vcmpngeps")},
- {'v', QLatin1String("vcmpngt_usps")},
- {'v', QLatin1String("vcmpngtps")},
- {'v', QLatin1String("vcmpfalse_oqps")},
- {'v', QLatin1String("vcmpfalseps")},
- {'v', QLatin1String("vcmpneq_oqps")},
- {'v', QLatin1String("vcmpge_osps")},
- {'v', QLatin1String("vcmpgeps")},
- {'v', QLatin1String("vcmpgt_osps")},
- {'v', QLatin1String("vcmpgtps")},
- {'v', QLatin1String("vcmptrue_uqps")},
- {'v', QLatin1String("vcmptrueps")},
- {'v', QLatin1String("vcmplt_oqps")},
- {'v', QLatin1String("vcmple_oqps")},
- {'v', QLatin1String("vcmpunord_sps")},
- {'v', QLatin1String("vcmpneq_usps")},
- {'v', QLatin1String("vcmpnlt_uqps")},
- {'v', QLatin1String("vcmpnle_uqps")},
- {'v', QLatin1String("vcmpord_sps")},
- {'v', QLatin1String("vcmpeq_usps")},
- {'v', QLatin1String("vcmpnge_uqps")},
- {'v', QLatin1String("vcmpngt_uqps")},
- {'v', QLatin1String("vcmpfalse_osps")},
- {'v', QLatin1String("vcmpneq_osps")},
- {'v', QLatin1String("vcmpge_oqps")},
- {'v', QLatin1String("vcmpgt_oqps")},
- {'v', QLatin1String("vcmptrue_usps")},
- {'v', QLatin1String("vcmpps")},
- {'v', QLatin1String("vcmpeq_ossd")},
- {'v', QLatin1String("vcmpeqsd")},
- {'v', QLatin1String("vcmplt_ossd")},
- {'v', QLatin1String("vcmpltsd")},
- {'v', QLatin1String("vcmple_ossd")},
- {'v', QLatin1String("vcmplesd")},
- {'v', QLatin1String("vcmpunord_qsd")},
- {'v', QLatin1String("vcmpunordsd")},
- {'v', QLatin1String("vcmpneq_uqsd")},
- {'v', QLatin1String("vcmpneqsd")},
- {'v', QLatin1String("vcmpnlt_ussd")},
- {'v', QLatin1String("vcmpnltsd")},
- {'v', QLatin1String("vcmpnle_ussd")},
- {'v', QLatin1String("vcmpnlesd")},
- {'v', QLatin1String("vcmpord_qsd")},
- {'v', QLatin1String("vcmpordsd")},
- {'v', QLatin1String("vcmpeq_uqsd")},
- {'v', QLatin1String("vcmpnge_ussd")},
- {'v', QLatin1String("vcmpngesd")},
- {'v', QLatin1String("vcmpngt_ussd")},
- {'v', QLatin1String("vcmpngtsd")},
- {'v', QLatin1String("vcmpfalse_oqsd")},
- {'v', QLatin1String("vcmpfalsesd")},
- {'v', QLatin1String("vcmpneq_oqsd")},
- {'v', QLatin1String("vcmpge_ossd")},
- {'v', QLatin1String("vcmpgesd")},
- {'v', QLatin1String("vcmpgt_ossd")},
- {'v', QLatin1String("vcmpgtsd")},
- {'v', QLatin1String("vcmptrue_uqsd")},
- {'v', QLatin1String("vcmptruesd")},
- {'v', QLatin1String("vcmplt_oqsd")},
- {'v', QLatin1String("vcmple_oqsd")},
- {'v', QLatin1String("vcmpunord_ssd")},
- {'v', QLatin1String("vcmpneq_ussd")},
- {'v', QLatin1String("vcmpnlt_uqsd")},
- {'v', QLatin1String("vcmpnle_uqsd")},
- {'v', QLatin1String("vcmpord_ssd")},
- {'v', QLatin1String("vcmpeq_ussd")},
- {'v', QLatin1String("vcmpnge_uqsd")},
- {'v', QLatin1String("vcmpngt_uqsd")},
- {'v', QLatin1String("vcmpfalse_ossd")},
- {'v', QLatin1String("vcmpneq_ossd")},
- {'v', QLatin1String("vcmpge_oqsd")},
- {'v', QLatin1String("vcmpgt_oqsd")},
- {'v', QLatin1String("vcmptrue_ussd")},
- {'v', QLatin1String("vcmpsd")},
- {'v', QLatin1String("vcmpeq_osss")},
- {'v', QLatin1String("vcmpeqss")},
- {'v', QLatin1String("vcmplt_osss")},
- {'v', QLatin1String("vcmpltss")},
- {'v', QLatin1String("vcmple_osss")},
- {'v', QLatin1String("vcmpless")},
- {'v', QLatin1String("vcmpunord_qss")},
- {'v', QLatin1String("vcmpunordss")},
- {'v', QLatin1String("vcmpneq_uqss")},
- {'v', QLatin1String("vcmpneqss")},
- {'v', QLatin1String("vcmpnlt_usss")},
- {'v', QLatin1String("vcmpnltss")},
- {'v', QLatin1String("vcmpnle_usss")},
- {'v', QLatin1String("vcmpnless")},
- {'v', QLatin1String("vcmpord_qss")},
- {'v', QLatin1String("vcmpordss")},
- {'v', QLatin1String("vcmpeq_uqss")},
- {'v', QLatin1String("vcmpnge_usss")},
- {'v', QLatin1String("vcmpngess")},
- {'v', QLatin1String("vcmpngt_usss")},
- {'v', QLatin1String("vcmpngtss")},
- {'v', QLatin1String("vcmpfalse_oqss")},
- {'v', QLatin1String("vcmpfalsess")},
- {'v', QLatin1String("vcmpneq_oqss")},
- {'v', QLatin1String("vcmpge_osss")},
- {'v', QLatin1String("vcmpgess")},
- {'v', QLatin1String("vcmpgt_osss")},
- {'v', QLatin1String("vcmpgtss")},
- {'v', QLatin1String("vcmptrue_uqss")},
- {'v', QLatin1String("vcmptruess")},
- {'v', QLatin1String("vcmplt_oqss")},
- {'v', QLatin1String("vcmple_oqss")},
- {'v', QLatin1String("vcmpunord_sss")},
- {'v', QLatin1String("vcmpneq_usss")},
- {'v', QLatin1String("vcmpnlt_uqss")},
- {'v', QLatin1String("vcmpnle_uqss")},
- {'v', QLatin1String("vcmpord_sss")},
- {'v', QLatin1String("vcmpeq_usss")},
- {'v', QLatin1String("vcmpnge_uqss")},
- {'v', QLatin1String("vcmpngt_uqss")},
- {'v', QLatin1String("vcmpfalse_osss")},
- {'v', QLatin1String("vcmpneq_osss")},
- {'v', QLatin1String("vcmpge_oqss")},
- {'v', QLatin1String("vcmpgt_oqss")},
- {'v', QLatin1String("vcmptrue_usss")},
- {'v', QLatin1String("vcmpss")},
- {'v', QLatin1String("vcomisd")},
- {'v', QLatin1String("vcomiss")},
- {'v', QLatin1String("vcvtdq2pd")},
- {'v', QLatin1String("vcvtdq2ps")},
- {'v', QLatin1String("vcvtpd2dq")},
- {'v', QLatin1String("vcvtpd2ps")},
- {'v', QLatin1String("vcvtps2dq")},
- {'v', QLatin1String("vcvtps2pd")},
- {'v', QLatin1String("vcvtsd2si")},
- {'v', QLatin1String("vcvtsd2ss")},
- {'v', QLatin1String("vcvtsi2sd")},
- {'v', QLatin1String("vcvtsi2ss")},
- {'v', QLatin1String("vcvtss2sd")},
- {'v', QLatin1String("vcvtss2si")},
- {'v', QLatin1String("vcvttpd2dq")},
- {'v', QLatin1String("vcvttps2dq")},
- {'v', QLatin1String("vcvttsd2si")},
- {'v', QLatin1String("vcvttss2si")},
- {'v', QLatin1String("vdivpd")},
- {'v', QLatin1String("vdivps")},
- {'v', QLatin1String("vdivsd")},
- {'v', QLatin1String("vdivss")},
- {'v', QLatin1String("vdppd")},
- {'v', QLatin1String("vdpps")},
- {'v', QLatin1String("vextractf128")},
- {'v', QLatin1String("vextractps")},
- {'v', QLatin1String("vhaddpd")},
- {'v', QLatin1String("vhaddps")},
- {'v', QLatin1String("vhsubpd")},
- {'v', QLatin1String("vhsubps")},
- {'v', QLatin1String("vinsertf128")},
- {'v', QLatin1String("vinsertps")},
- {'v', QLatin1String("vlddqu")},
- {'v', QLatin1String("vldqqu")},
- {'v', QLatin1String("vldmxcsr")},
- {'v', QLatin1String("vmaskmovdqu")},
- {'v', QLatin1String("vmaskmovps")},
- {'v', QLatin1String("vmaskmovpd")},
- {'v', QLatin1String("vmaxpd")},
- {'v', QLatin1String("vmaxps")},
- {'v', QLatin1String("vmaxsd")},
- {'v', QLatin1String("vmaxss")},
- {'v', QLatin1String("vminpd")},
- {'v', QLatin1String("vminps")},
- {'v', QLatin1String("vminsd")},
- {'v', QLatin1String("vminss")},
- {'v', QLatin1String("vmovapd")},
- {'v', QLatin1String("vmovaps")},
- {'v', QLatin1String("vmovd")},
- {'v', QLatin1String("vmovq")},
- {'v', QLatin1String("vmovddup")},
- {'v', QLatin1String("vmovdqa")},
- {'v', QLatin1String("vmovqqa")},
- {'v', QLatin1String("vmovdqu")},
- {'v', QLatin1String("vmovqqu")},
- {'v', QLatin1String("vmovhlps")},
- {'v', QLatin1String("vmovhpd")},
- {'v', QLatin1String("vmovhps")},
- {'v', QLatin1String("vmovlhps")},
- {'v', QLatin1String("vmovlpd")},
- {'v', QLatin1String("vmovlps")},
- {'v', QLatin1String("vmovmskpd")},
- {'v', QLatin1String("vmovmskps")},
- {'v', QLatin1String("vmovntdq")},
- {'v', QLatin1String("vmovntqq")},
- {'v', QLatin1String("vmovntdqa")},
- {'v', QLatin1String("vmovntpd")},
- {'v', QLatin1String("vmovntps")},
- {'v', QLatin1String("vmovsd")},
- {'v', QLatin1String("vmovshdup")},
- {'v', QLatin1String("vmovsldup")},
- {'v', QLatin1String("vmovss")},
- {'v', QLatin1String("vmovupd")},
- {'v', QLatin1String("vmovups")},
- {'v', QLatin1String("vmpsadbw")},
- {'v', QLatin1String("vmulpd")},
- {'v', QLatin1String("vmulps")},
- {'v', QLatin1String("vmulsd")},
- {'v', QLatin1String("vmulss")},
- {'v', QLatin1String("vorpd")},
- {'v', QLatin1String("vorps")},
- {'v', QLatin1String("vpabsb")},
- {'v', QLatin1String("vpabsw")},
- {'v', QLatin1String("vpabsd")},
- {'v', QLatin1String("vpacksswb")},
- {'v', QLatin1String("vpackssdw")},
- {'v', QLatin1String("vpackuswb")},
- {'v', QLatin1String("vpackusdw")},
- {'v', QLatin1String("vpaddb")},
- {'v', QLatin1String("vpaddw")},
- {'v', QLatin1String("vpaddd")},
- {'v', QLatin1String("vpaddq")},
- {'v', QLatin1String("vpaddsb")},
- {'v', QLatin1String("vpaddsw")},
- {'v', QLatin1String("vpaddusb")},
- {'v', QLatin1String("vpaddusw")},
- {'v', QLatin1String("vpalignr")},
- {'v', QLatin1String("vpand")},
- {'v', QLatin1String("vpandn")},
- {'v', QLatin1String("vpavgb")},
- {'v', QLatin1String("vpavgw")},
- {'v', QLatin1String("vpblendvb")},
- {'v', QLatin1String("vpblendw")},
- {'v', QLatin1String("vpcmpestri")},
- {'v', QLatin1String("vpcmpestrm")},
- {'v', QLatin1String("vpcmpistri")},
- {'v', QLatin1String("vpcmpistrm")},
- {'v', QLatin1String("vpcmpeqb")},
- {'v', QLatin1String("vpcmpeqw")},
- {'v', QLatin1String("vpcmpeqd")},
- {'v', QLatin1String("vpcmpeqq")},
- {'v', QLatin1String("vpcmpgtb")},
- {'v', QLatin1String("vpcmpgtw")},
- {'v', QLatin1String("vpcmpgtd")},
- {'v', QLatin1String("vpcmpgtq")},
- {'v', QLatin1String("vpermilpd")},
- {'v', QLatin1String("vpermilps")},
- {'v', QLatin1String("vperm2f128")},
- {'v', QLatin1String("vpextrb")},
- {'v', QLatin1String("vpextrw")},
- {'v', QLatin1String("vpextrd")},
- {'v', QLatin1String("vpextrq")},
- {'v', QLatin1String("vphaddw")},
- {'v', QLatin1String("vphaddd")},
- {'v', QLatin1String("vphaddsw")},
- {'v', QLatin1String("vphminposuw")},
- {'v', QLatin1String("vphsubw")},
- {'v', QLatin1String("vphsubd")},
- {'v', QLatin1String("vphsubsw")},
- {'v', QLatin1String("vpinsrb")},
- {'v', QLatin1String("vpinsrw")},
- {'v', QLatin1String("vpinsrd")},
- {'v', QLatin1String("vpinsrq")},
- {'v', QLatin1String("vpmaddwd")},
- {'v', QLatin1String("vpmaddubsw")},
- {'v', QLatin1String("vpmaxsb")},
- {'v', QLatin1String("vpmaxsw")},
- {'v', QLatin1String("vpmaxsd")},
- {'v', QLatin1String("vpmaxub")},
- {'v', QLatin1String("vpmaxuw")},
- {'v', QLatin1String("vpmaxud")},
- {'v', QLatin1String("vpminsb")},
- {'v', QLatin1String("vpminsw")},
- {'v', QLatin1String("vpminsd")},
- {'v', QLatin1String("vpminub")},
- {'v', QLatin1String("vpminuw")},
- {'v', QLatin1String("vpminud")},
- {'v', QLatin1String("vpmovmskb")},
- {'v', QLatin1String("vpmovsxbw")},
- {'v', QLatin1String("vpmovsxbd")},
- {'v', QLatin1String("vpmovsxbq")},
- {'v', QLatin1String("vpmovsxwd")},
- {'v', QLatin1String("vpmovsxwq")},
- {'v', QLatin1String("vpmovsxdq")},
- {'v', QLatin1String("vpmovzxbw")},
- {'v', QLatin1String("vpmovzxbd")},
- {'v', QLatin1String("vpmovzxbq")},
- {'v', QLatin1String("vpmovzxwd")},
- {'v', QLatin1String("vpmovzxwq")},
- {'v', QLatin1String("vpmovzxdq")},
- {'v', QLatin1String("vpmulhuw")},
- {'v', QLatin1String("vpmulhrsw")},
- {'v', QLatin1String("vpmulhw")},
- {'v', QLatin1String("vpmullw")},
- {'v', QLatin1String("vpmulld")},
- {'v', QLatin1String("vpmuludq")},
- {'v', QLatin1String("vpmuldq")},
- {'v', QLatin1String("vpor")},
- {'v', QLatin1String("vpsadbw")},
- {'v', QLatin1String("vpshufb")},
- {'v', QLatin1String("vpshufd")},
- {'v', QLatin1String("vpshufhw")},
- {'v', QLatin1String("vpshuflw")},
- {'v', QLatin1String("vpsignb")},
- {'v', QLatin1String("vpsignw")},
- {'v', QLatin1String("vpsignd")},
- {'v', QLatin1String("vpslldq")},
- {'v', QLatin1String("vpsrldq")},
- {'v', QLatin1String("vpsllw")},
- {'v', QLatin1String("vpslld")},
- {'v', QLatin1String("vpsllq")},
- {'v', QLatin1String("vpsraw")},
- {'v', QLatin1String("vpsrad")},
- {'v', QLatin1String("vpsrlw")},
- {'v', QLatin1String("vpsrld")},
- {'v', QLatin1String("vpsrlq")},
- {'v', QLatin1String("vptest")},
- {'v', QLatin1String("vpsubb")},
- {'v', QLatin1String("vpsubw")},
- {'v', QLatin1String("vpsubd")},
- {'v', QLatin1String("vpsubq")},
- {'v', QLatin1String("vpsubsb")},
- {'v', QLatin1String("vpsubsw")},
- {'v', QLatin1String("vpsubusb")},
- {'v', QLatin1String("vpsubusw")},
- {'v', QLatin1String("vpunpckhbw")},
- {'v', QLatin1String("vpunpckhwd")},
- {'v', QLatin1String("vpunpckhdq")},
- {'v', QLatin1String("vpunpckhqdq")},
- {'v', QLatin1String("vpunpcklbw")},
- {'v', QLatin1String("vpunpcklwd")},
- {'v', QLatin1String("vpunpckldq")},
- {'v', QLatin1String("vpunpcklqdq")},
- {'v', QLatin1String("vpxor")},
- {'v', QLatin1String("vrcpps")},
- {'v', QLatin1String("vrcpss")},
- {'v', QLatin1String("vrsqrtps")},
- {'v', QLatin1String("vrsqrtss")},
- {'v', QLatin1String("vroundpd")},
- {'v', QLatin1String("vroundps")},
- {'v', QLatin1String("vroundsd")},
- {'v', QLatin1String("vroundss")},
- {'v', QLatin1String("vshufpd")},
- {'v', QLatin1String("vshufps")},
- {'v', QLatin1String("vsqrtpd")},
- {'v', QLatin1String("vsqrtps")},
- {'v', QLatin1String("vsqrtsd")},
- {'v', QLatin1String("vsqrtss")},
- {'v', QLatin1String("vstmxcsr")},
- {'v', QLatin1String("vsubpd")},
- {'v', QLatin1String("vsubps")},
- {'v', QLatin1String("vsubsd")},
- {'v', QLatin1String("vsubss")},
- {'v', QLatin1String("vtestps")},
- {'v', QLatin1String("vtestpd")},
- {'v', QLatin1String("vucomisd")},
- {'v', QLatin1String("vucomiss")},
- {'v', QLatin1String("vunpckhpd")},
- {'v', QLatin1String("vunpckhps")},
- {'v', QLatin1String("vunpcklpd")},
- {'v', QLatin1String("vunpcklps")},
- {'v', QLatin1String("vxorpd")},
- {'v', QLatin1String("vxorps")},
- {'v', QLatin1String("vzeroall")},
- {'v', QLatin1String("vzeroupper")},
- {'p', QLatin1String("pclmullqlqdq")},
- {'p', QLatin1String("pclmulhqlqdq")},
- {'p', QLatin1String("pclmullqhqdq")},
- {'p', QLatin1String("pclmulhqhqdq")},
- {'p', QLatin1String("pclmulqdq")},
- {'v', QLatin1String("vpclmullqlqdq")},
- {'v', QLatin1String("vpclmulhqlqdq")},
- {'v', QLatin1String("vpclmullqhqdq")},
- {'v', QLatin1String("vpclmulhqhqdq")},
- {'v', QLatin1String("vpclmulqdq")},
- {'v', QLatin1String("vfmadd132ps")},
- {'v', QLatin1String("vfmadd132pd")},
- {'v', QLatin1String("vfmadd312ps")},
- {'v', QLatin1String("vfmadd312pd")},
- {'v', QLatin1String("vfmadd213ps")},
- {'v', QLatin1String("vfmadd213pd")},
- {'v', QLatin1String("vfmadd123ps")},
- {'v', QLatin1String("vfmadd123pd")},
- {'v', QLatin1String("vfmadd231ps")},
- {'v', QLatin1String("vfmadd231pd")},
- {'v', QLatin1String("vfmadd321ps")},
- {'v', QLatin1String("vfmadd321pd")},
- {'v', QLatin1String("vfmaddsub132ps")},
- {'v', QLatin1String("vfmaddsub132pd")},
- {'v', QLatin1String("vfmaddsub312ps")},
- {'v', QLatin1String("vfmaddsub312pd")},
- {'v', QLatin1String("vfmaddsub213ps")},
- {'v', QLatin1String("vfmaddsub213pd")},
- {'v', QLatin1String("vfmaddsub123ps")},
- {'v', QLatin1String("vfmaddsub123pd")},
- {'v', QLatin1String("vfmaddsub231ps")},
- {'v', QLatin1String("vfmaddsub231pd")},
- {'v', QLatin1String("vfmaddsub321ps")},
- {'v', QLatin1String("vfmaddsub321pd")},
- {'v', QLatin1String("vfmsub132ps")},
- {'v', QLatin1String("vfmsub132pd")},
- {'v', QLatin1String("vfmsub312ps")},
- {'v', QLatin1String("vfmsub312pd")},
- {'v', QLatin1String("vfmsub213ps")},
- {'v', QLatin1String("vfmsub213pd")},
- {'v', QLatin1String("vfmsub123ps")},
- {'v', QLatin1String("vfmsub123pd")},
- {'v', QLatin1String("vfmsub231ps")},
- {'v', QLatin1String("vfmsub231pd")},
- {'v', QLatin1String("vfmsub321ps")},
- {'v', QLatin1String("vfmsub321pd")},
- {'v', QLatin1String("vfmsubadd132ps")},
- {'v', QLatin1String("vfmsubadd132pd")},
- {'v', QLatin1String("vfmsubadd312ps")},
- {'v', QLatin1String("vfmsubadd312pd")},
- {'v', QLatin1String("vfmsubadd213ps")},
- {'v', QLatin1String("vfmsubadd213pd")},
- {'v', QLatin1String("vfmsubadd123ps")},
- {'v', QLatin1String("vfmsubadd123pd")},
- {'v', QLatin1String("vfmsubadd231ps")},
- {'v', QLatin1String("vfmsubadd231pd")},
- {'v', QLatin1String("vfmsubadd321ps")},
- {'v', QLatin1String("vfmsubadd321pd")},
- {'v', QLatin1String("vfnmadd132ps")},
- {'v', QLatin1String("vfnmadd132pd")},
- {'v', QLatin1String("vfnmadd312ps")},
- {'v', QLatin1String("vfnmadd312pd")},
- {'v', QLatin1String("vfnmadd213ps")},
- {'v', QLatin1String("vfnmadd213pd")},
- {'v', QLatin1String("vfnmadd123ps")},
- {'v', QLatin1String("vfnmadd123pd")},
- {'v', QLatin1String("vfnmadd231ps")},
- {'v', QLatin1String("vfnmadd231pd")},
- {'v', QLatin1String("vfnmadd321ps")},
- {'v', QLatin1String("vfnmadd321pd")},
- {'v', QLatin1String("vfnmsub132ps")},
- {'v', QLatin1String("vfnmsub132pd")},
- {'v', QLatin1String("vfnmsub312ps")},
- {'v', QLatin1String("vfnmsub312pd")},
- {'v', QLatin1String("vfnmsub213ps")},
- {'v', QLatin1String("vfnmsub213pd")},
- {'v', QLatin1String("vfnmsub123ps")},
- {'v', QLatin1String("vfnmsub123pd")},
- {'v', QLatin1String("vfnmsub231ps")},
- {'v', QLatin1String("vfnmsub231pd")},
- {'v', QLatin1String("vfnmsub321ps")},
- {'v', QLatin1String("vfnmsub321pd")},
- {'v', QLatin1String("vfmadd132ss")},
- {'v', QLatin1String("vfmadd132sd")},
- {'v', QLatin1String("vfmadd312ss")},
- {'v', QLatin1String("vfmadd312sd")},
- {'v', QLatin1String("vfmadd213ss")},
- {'v', QLatin1String("vfmadd213sd")},
- {'v', QLatin1String("vfmadd123ss")},
- {'v', QLatin1String("vfmadd123sd")},
- {'v', QLatin1String("vfmadd231ss")},
- {'v', QLatin1String("vfmadd231sd")},
- {'v', QLatin1String("vfmadd321ss")},
- {'v', QLatin1String("vfmadd321sd")},
- {'v', QLatin1String("vfmsub132ss")},
- {'v', QLatin1String("vfmsub132sd")},
- {'v', QLatin1String("vfmsub312ss")},
- {'v', QLatin1String("vfmsub312sd")},
- {'v', QLatin1String("vfmsub213ss")},
- {'v', QLatin1String("vfmsub213sd")},
- {'v', QLatin1String("vfmsub123ss")},
- {'v', QLatin1String("vfmsub123sd")},
- {'v', QLatin1String("vfmsub231ss")},
- {'v', QLatin1String("vfmsub231sd")},
- {'v', QLatin1String("vfmsub321ss")},
- {'v', QLatin1String("vfmsub321sd")},
- {'v', QLatin1String("vfnmadd132ss")},
- {'v', QLatin1String("vfnmadd132sd")},
- {'v', QLatin1String("vfnmadd312ss")},
- {'v', QLatin1String("vfnmadd312sd")},
- {'v', QLatin1String("vfnmadd213ss")},
- {'v', QLatin1String("vfnmadd213sd")},
- {'v', QLatin1String("vfnmadd123ss")},
- {'v', QLatin1String("vfnmadd123sd")},
- {'v', QLatin1String("vfnmadd231ss")},
- {'v', QLatin1String("vfnmadd231sd")},
- {'v', QLatin1String("vfnmadd321ss")},
- {'v', QLatin1String("vfnmadd321sd")},
- {'v', QLatin1String("vfnmsub132ss")},
- {'v', QLatin1String("vfnmsub132sd")},
- {'v', QLatin1String("vfnmsub312ss")},
- {'v', QLatin1String("vfnmsub312sd")},
- {'v', QLatin1String("vfnmsub213ss")},
- {'v', QLatin1String("vfnmsub213sd")},
- {'v', QLatin1String("vfnmsub123ss")},
- {'v', QLatin1String("vfnmsub123sd")},
- {'v', QLatin1String("vfnmsub231ss")},
- {'v', QLatin1String("vfnmsub231sd")},
- {'v', QLatin1String("vfnmsub321ss")},
- {'v', QLatin1String("vfnmsub321sd")},
- {'r', QLatin1String("rdfsbase")},
- {'r', QLatin1String("rdgsbase")},
- {'r', QLatin1String("rdrand")},
- {'w', QLatin1String("wrfsbase")},
- {'w', QLatin1String("wrgsbase")},
- {'v', QLatin1String("vcvtph2ps")},
- {'v', QLatin1String("vcvtps2ph")},
- {'a', QLatin1String("adcx")},
- {'a', QLatin1String("adox")},
- {'r', QLatin1String("rdseed")},
- {'c', QLatin1String("clac")},
- {'s', QLatin1String("stac")},
- {'x', QLatin1String("xstore")},
- {'x', QLatin1String("xcryptecb")},
- {'x', QLatin1String("xcryptcbc")},
- {'x', QLatin1String("xcryptctr")},
- {'x', QLatin1String("xcryptcfb")},
- {'x', QLatin1String("xcryptofb")},
- {'m', QLatin1String("montmul")},
- {'x', QLatin1String("xsha1")},
- {'x', QLatin1String("xsha256")},
- {'l', QLatin1String("llwpcb")},
- {'s', QLatin1String("slwpcb")},
- {'l', QLatin1String("lwpval")},
- {'l', QLatin1String("lwpins")},
- {'v', QLatin1String("vfmaddpd")},
- {'v', QLatin1String("vfmaddps")},
- {'v', QLatin1String("vfmaddsd")},
- {'v', QLatin1String("vfmaddss")},
- {'v', QLatin1String("vfmaddsubpd")},
- {'v', QLatin1String("vfmaddsubps")},
- {'v', QLatin1String("vfmsubaddpd")},
- {'v', QLatin1String("vfmsubaddps")},
- {'v', QLatin1String("vfmsubpd")},
- {'v', QLatin1String("vfmsubps")},
- {'v', QLatin1String("vfmsubsd")},
- {'v', QLatin1String("vfmsubss")},
- {'v', QLatin1String("vfnmaddpd")},
- {'v', QLatin1String("vfnmaddps")},
- {'v', QLatin1String("vfnmaddsd")},
- {'v', QLatin1String("vfnmaddss")},
- {'v', QLatin1String("vfnmsubpd")},
- {'v', QLatin1String("vfnmsubps")},
- {'v', QLatin1String("vfnmsubsd")},
- {'v', QLatin1String("vfnmsubss")},
- {'v', QLatin1String("vfrczpd")},
- {'v', QLatin1String("vfrczps")},
- {'v', QLatin1String("vfrczsd")},
- {'v', QLatin1String("vfrczss")},
- {'v', QLatin1String("vpcmov")},
- {'v', QLatin1String("vpcomb")},
- {'v', QLatin1String("vpcomd")},
- {'v', QLatin1String("vpcomq")},
- {'v', QLatin1String("vpcomub")},
- {'v', QLatin1String("vpcomud")},
- {'v', QLatin1String("vpcomuq")},
- {'v', QLatin1String("vpcomuw")},
- {'v', QLatin1String("vpcomw")},
- {'v', QLatin1String("vphaddbd")},
- {'v', QLatin1String("vphaddbq")},
- {'v', QLatin1String("vphaddbw")},
- {'v', QLatin1String("vphadddq")},
- {'v', QLatin1String("vphaddubd")},
- {'v', QLatin1String("vphaddubq")},
- {'v', QLatin1String("vphaddubw")},
- {'v', QLatin1String("vphaddudq")},
- {'v', QLatin1String("vphadduwd")},
- {'v', QLatin1String("vphadduwq")},
- {'v', QLatin1String("vphaddwd")},
- {'v', QLatin1String("vphaddwq")},
- {'v', QLatin1String("vphsubbw")},
- {'v', QLatin1String("vphsubdq")},
- {'v', QLatin1String("vphsubwd")},
- {'v', QLatin1String("vpmacsdd")},
- {'v', QLatin1String("vpmacsdqh")},
- {'v', QLatin1String("vpmacsdql")},
- {'v', QLatin1String("vpmacssdd")},
- {'v', QLatin1String("vpmacssdqh")},
- {'v', QLatin1String("vpmacssdql")},
- {'v', QLatin1String("vpmacsswd")},
- {'v', QLatin1String("vpmacssww")},
- {'v', QLatin1String("vpmacswd")},
- {'v', QLatin1String("vpmacsww")},
- {'v', QLatin1String("vpmadcsswd")},
- {'v', QLatin1String("vpmadcswd")},
- {'v', QLatin1String("vpperm")},
- {'v', QLatin1String("vprotb")},
- {'v', QLatin1String("vprotd")},
- {'v', QLatin1String("vprotq")},
- {'v', QLatin1String("vprotw")},
- {'v', QLatin1String("vpshab")},
- {'v', QLatin1String("vpshad")},
- {'v', QLatin1String("vpshaq")},
- {'v', QLatin1String("vpshaw")},
- {'v', QLatin1String("vpshlb")},
- {'v', QLatin1String("vpshld")},
- {'v', QLatin1String("vpshlq")},
- {'v', QLatin1String("vpshlw")},
- {'v', QLatin1String("vbroadcasti128")},
- {'v', QLatin1String("vpblendd")},
- {'v', QLatin1String("vpbroadcastb")},
- {'v', QLatin1String("vpbroadcastw")},
- {'v', QLatin1String("vpbroadcastd")},
- {'v', QLatin1String("vpbroadcastq")},
- {'v', QLatin1String("vpermd")},
- {'v', QLatin1String("vpermpd")},
- {'v', QLatin1String("vpermps")},
- {'v', QLatin1String("vpermq")},
- {'v', QLatin1String("vperm2i128")},
- {'v', QLatin1String("vextracti128")},
- {'v', QLatin1String("vinserti128")},
- {'v', QLatin1String("vpmaskmovd")},
- {'v', QLatin1String("vpmaskmovq")},
- {'v', QLatin1String("vpsllvd")},
- {'v', QLatin1String("vpsllvq")},
- {'v', QLatin1String("vpsravd")},
- {'v', QLatin1String("vpsrlvd")},
- {'v', QLatin1String("vpsrlvq")},
- {'v', QLatin1String("vgatherdpd")},
- {'v', QLatin1String("vgatherqpd")},
- {'v', QLatin1String("vgatherdps")},
- {'v', QLatin1String("vgatherqps")},
- {'v', QLatin1String("vpgatherdd")},
- {'v', QLatin1String("vpgatherqd")},
- {'v', QLatin1String("vpgatherdq")},
- {'v', QLatin1String("vpgatherqq")},
- {'x', QLatin1String("xabort")},
- {'x', QLatin1String("xbegin")},
- {'x', QLatin1String("xend")},
- {'x', QLatin1String("xtest")},
- {'a', QLatin1String("andn")},
- {'b', QLatin1String("bextr")},
- {'b', QLatin1String("blci")},
- {'b', QLatin1String("blcic")},
- {'b', QLatin1String("blsi")},
- {'b', QLatin1String("blsic")},
- {'b', QLatin1String("blcfill")},
- {'b', QLatin1String("blsfill")},
- {'b', QLatin1String("blcmsk")},
- {'b', QLatin1String("blsmsk")},
- {'b', QLatin1String("blsr")},
- {'b', QLatin1String("blcs")},
- {'b', QLatin1String("bzhi")},
- {'m', QLatin1String("mulx")},
- {'p', QLatin1String("pdep")},
- {'p', QLatin1String("pext")},
- {'r', QLatin1String("rorx")},
- {'s', QLatin1String("sarx")},
- {'s', QLatin1String("shlx")},
- {'s', QLatin1String("shrx")},
- {'t', QLatin1String("tzcnt")},
- {'t', QLatin1String("tzmsk")},
- {'t', QLatin1String("t1mskc")},
- {'v', QLatin1String("valignd")},
- {'v', QLatin1String("valignq")},
- {'v', QLatin1String("vblendmpd")},
- {'v', QLatin1String("vblendmps")},
- {'v', QLatin1String("vbroadcastf32x4")},
- {'v', QLatin1String("vbroadcastf64x4")},
- {'v', QLatin1String("vbroadcasti32x4")},
- {'v', QLatin1String("vbroadcasti64x4")},
- {'v', QLatin1String("vcompresspd")},
- {'v', QLatin1String("vcompressps")},
- {'v', QLatin1String("vcvtpd2udq")},
- {'v', QLatin1String("vcvtps2udq")},
- {'v', QLatin1String("vcvtsd2usi")},
- {'v', QLatin1String("vcvtss2usi")},
- {'v', QLatin1String("vcvttpd2udq")},
- {'v', QLatin1String("vcvttps2udq")},
- {'v', QLatin1String("vcvttsd2usi")},
- {'v', QLatin1String("vcvttss2usi")},
- {'v', QLatin1String("vcvtudq2pd")},
- {'v', QLatin1String("vcvtudq2ps")},
- {'v', QLatin1String("vcvtusi2sd")},
- {'v', QLatin1String("vcvtusi2ss")},
- {'v', QLatin1String("vexpandpd")},
- {'v', QLatin1String("vexpandps")},
- {'v', QLatin1String("vextractf32x4")},
- {'v', QLatin1String("vextractf64x4")},
- {'v', QLatin1String("vextracti32x4")},
- {'v', QLatin1String("vextracti64x4")},
- {'v', QLatin1String("vfixupimmpd")},
- {'v', QLatin1String("vfixupimmps")},
- {'v', QLatin1String("vfixupimmsd")},
- {'v', QLatin1String("vfixupimmss")},
- {'v', QLatin1String("vgetexppd")},
- {'v', QLatin1String("vgetexpps")},
- {'v', QLatin1String("vgetexpsd")},
- {'v', QLatin1String("vgetexpss")},
- {'v', QLatin1String("vgetmantpd")},
- {'v', QLatin1String("vgetmantps")},
- {'v', QLatin1String("vgetmantsd")},
- {'v', QLatin1String("vgetmantss")},
- {'v', QLatin1String("vinsertf32x4")},
- {'v', QLatin1String("vinsertf64x4")},
- {'v', QLatin1String("vinserti32x4")},
- {'v', QLatin1String("vinserti64x4")},
- {'v', QLatin1String("vmovdqa32")},
- {'v', QLatin1String("vmovdqa64")},
- {'v', QLatin1String("vmovdqu32")},
- {'v', QLatin1String("vmovdqu64")},
- {'v', QLatin1String("vpabsq")},
- {'v', QLatin1String("vpandd")},
- {'v', QLatin1String("vpandnd")},
- {'v', QLatin1String("vpandnq")},
- {'v', QLatin1String("vpandq")},
- {'v', QLatin1String("vpblendmd")},
- {'v', QLatin1String("vpblendmq")},
- {'v', QLatin1String("vpcmpltd")},
- {'v', QLatin1String("vpcmpled")},
- {'v', QLatin1String("vpcmpneqd")},
- {'v', QLatin1String("vpcmpnltd")},
- {'v', QLatin1String("vpcmpnled")},
- {'v', QLatin1String("vpcmpd")},
- {'v', QLatin1String("vpcmpltq")},
- {'v', QLatin1String("vpcmpleq")},
- {'v', QLatin1String("vpcmpneqq")},
- {'v', QLatin1String("vpcmpnltq")},
- {'v', QLatin1String("vpcmpnleq")},
- {'v', QLatin1String("vpcmpq")},
- {'v', QLatin1String("vpcmpequd")},
- {'v', QLatin1String("vpcmpltud")},
- {'v', QLatin1String("vpcmpleud")},
- {'v', QLatin1String("vpcmpnequd")},
- {'v', QLatin1String("vpcmpnltud")},
- {'v', QLatin1String("vpcmpnleud")},
- {'v', QLatin1String("vpcmpud")},
- {'v', QLatin1String("vpcmpequq")},
- {'v', QLatin1String("vpcmpltuq")},
- {'v', QLatin1String("vpcmpleuq")},
- {'v', QLatin1String("vpcmpnequq")},
- {'v', QLatin1String("vpcmpnltuq")},
- {'v', QLatin1String("vpcmpnleuq")},
- {'v', QLatin1String("vpcmpuq")},
- {'v', QLatin1String("vpcompressd")},
- {'v', QLatin1String("vpcompressq")},
- {'v', QLatin1String("vpermi2d")},
- {'v', QLatin1String("vpermi2pd")},
- {'v', QLatin1String("vpermi2ps")},
- {'v', QLatin1String("vpermi2q")},
- {'v', QLatin1String("vpermt2d")},
- {'v', QLatin1String("vpermt2pd")},
- {'v', QLatin1String("vpermt2ps")},
- {'v', QLatin1String("vpermt2q")},
- {'v', QLatin1String("vpexpandd")},
- {'v', QLatin1String("vpexpandq")},
- {'v', QLatin1String("vpmaxsq")},
- {'v', QLatin1String("vpmaxuq")},
- {'v', QLatin1String("vpminsq")},
- {'v', QLatin1String("vpminuq")},
- {'v', QLatin1String("vpmovdb")},
- {'v', QLatin1String("vpmovdw")},
- {'v', QLatin1String("vpmovqb")},
- {'v', QLatin1String("vpmovqd")},
- {'v', QLatin1String("vpmovqw")},
- {'v', QLatin1String("vpmovsdb")},
- {'v', QLatin1String("vpmovsdw")},
- {'v', QLatin1String("vpmovsqb")},
- {'v', QLatin1String("vpmovsqd")},
- {'v', QLatin1String("vpmovsqw")},
- {'v', QLatin1String("vpmovusdb")},
- {'v', QLatin1String("vpmovusdw")},
- {'v', QLatin1String("vpmovusqb")},
- {'v', QLatin1String("vpmovusqd")},
- {'v', QLatin1String("vpmovusqw")},
- {'v', QLatin1String("vpord")},
- {'v', QLatin1String("vporq")},
- {'v', QLatin1String("vprold")},
- {'v', QLatin1String("vprolq")},
- {'v', QLatin1String("vprolvd")},
- {'v', QLatin1String("vprolvq")},
- {'v', QLatin1String("vprord")},
- {'v', QLatin1String("vprorq")},
- {'v', QLatin1String("vprorvd")},
- {'v', QLatin1String("vprorvq")},
- {'v', QLatin1String("vpscatterdd")},
- {'v', QLatin1String("vpscatterdq")},
- {'v', QLatin1String("vpscatterqd")},
- {'v', QLatin1String("vpscatterqq")},
- {'v', QLatin1String("vpsraq")},
- {'v', QLatin1String("vpsravq")},
- {'v', QLatin1String("vpternlogd")},
- {'v', QLatin1String("vpternlogq")},
- {'v', QLatin1String("vptestmd")},
- {'v', QLatin1String("vptestmq")},
- {'v', QLatin1String("vptestnmd")},
- {'v', QLatin1String("vptestnmq")},
- {'v', QLatin1String("vpxord")},
- {'v', QLatin1String("vpxorq")},
- {'v', QLatin1String("vrcp14pd")},
- {'v', QLatin1String("vrcp14ps")},
- {'v', QLatin1String("vrcp14sd")},
- {'v', QLatin1String("vrcp14ss")},
- {'v', QLatin1String("vrndscalepd")},
- {'v', QLatin1String("vrndscaleps")},
- {'v', QLatin1String("vrndscalesd")},
- {'v', QLatin1String("vrndscaless")},
- {'v', QLatin1String("vrsqrt14pd")},
- {'v', QLatin1String("vrsqrt14ps")},
- {'v', QLatin1String("vrsqrt14sd")},
- {'v', QLatin1String("vrsqrt14ss")},
- {'v', QLatin1String("vscalefpd")},
- {'v', QLatin1String("vscalefps")},
- {'v', QLatin1String("vscalefsd")},
- {'v', QLatin1String("vscalefss")},
- {'v', QLatin1String("vscatterdpd")},
- {'v', QLatin1String("vscatterdps")},
- {'v', QLatin1String("vscatterqpd")},
- {'v', QLatin1String("vscatterqps")},
- {'v', QLatin1String("vshuff32x4")},
- {'v', QLatin1String("vshuff64x2")},
- {'v', QLatin1String("vshufi32x4")},
- {'v', QLatin1String("vshufi64x2")},
- {'k', QLatin1String("kandnw")},
- {'k', QLatin1String("kandw")},
- {'k', QLatin1String("kmovw")},
- {'k', QLatin1String("knotw")},
- {'k', QLatin1String("kortestw")},
- {'k', QLatin1String("korw")},
- {'k', QLatin1String("kshiftlw")},
- {'k', QLatin1String("kshiftrw")},
- {'k', QLatin1String("kunpckbw")},
- {'k', QLatin1String("kxnorw")},
- {'k', QLatin1String("kxorw")},
- {'v', QLatin1String("vpbroadcastmb2q")},
- {'v', QLatin1String("vpbroadcastmw2d")},
- {'v', QLatin1String("vpconflictd")},
- {'v', QLatin1String("vpconflictq")},
- {'v', QLatin1String("vplzcntd")},
- {'v', QLatin1String("vplzcntq")},
- {'v', QLatin1String("vexp2pd")},
- {'v', QLatin1String("vexp2ps")},
- {'v', QLatin1String("vrcp28pd")},
- {'v', QLatin1String("vrcp28ps")},
- {'v', QLatin1String("vrcp28sd")},
- {'v', QLatin1String("vrcp28ss")},
- {'v', QLatin1String("vrsqrt28pd")},
- {'v', QLatin1String("vrsqrt28ps")},
- {'v', QLatin1String("vrsqrt28sd")},
- {'v', QLatin1String("vrsqrt28ss")},
- {'v', QLatin1String("vgatherpf0dpd")},
- {'v', QLatin1String("vgatherpf0dps")},
- {'v', QLatin1String("vgatherpf0qpd")},
- {'v', QLatin1String("vgatherpf0qps")},
- {'v', QLatin1String("vgatherpf1dpd")},
- {'v', QLatin1String("vgatherpf1dps")},
- {'v', QLatin1String("vgatherpf1qpd")},
- {'v', QLatin1String("vgatherpf1qps")},
- {'v', QLatin1String("vscatterpf0dpd")},
- {'v', QLatin1String("vscatterpf0dps")},
- {'v', QLatin1String("vscatterpf0qpd")},
- {'v', QLatin1String("vscatterpf0qps")},
- {'v', QLatin1String("vscatterpf1dpd")},
- {'v', QLatin1String("vscatterpf1dps")},
- {'v', QLatin1String("vscatterpf1qpd")},
- {'v', QLatin1String("vscatterpf1qps")},
- {'p', QLatin1String("prefetchwt1")},
- {'b', QLatin1String("bndmk")},
- {'b', QLatin1String("bndcl")},
- {'b', QLatin1String("bndcu")},
- {'b', QLatin1String("bndcn")},
- {'b', QLatin1String("bndmov")},
- {'b', QLatin1String("bndldx")},
- {'b', QLatin1String("bndstx")},
- {'s', QLatin1String("sha1rnds4")},
- {'s', QLatin1String("sha1nexte")},
- {'s', QLatin1String("sha1msg1")},
- {'s', QLatin1String("sha1msg2")},
- {'s', QLatin1String("sha256rnds2")},
- {'s', QLatin1String("sha256msg1")},
- {'s', QLatin1String("sha256msg2")},
- {'h', QLatin1String("hint_nop")},
- };
-
- other = {
- {'s', QLatin1String("section")},
- };
- builtin = {
-
- {'t', QLatin1String("text")},
- {'c', QLatin1String("code")},
- {'d', QLatin1String("data")},
- {'b', QLatin1String("bss")}};
-}
-
-} // namespace QSourceHighlite
diff --git a/lib/QSourceHighlite/languagedata.h b/lib/QSourceHighlite/languagedata.h
deleted file mode 100644
index bc523535..00000000
--- a/lib/QSourceHighlite/languagedata.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (c) 2019-2020 Waqar Ahmed --
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-
-#ifndef QOWNLANGUAGEDATA_H
-#define QOWNLANGUAGEDATA_H
-
-template
-class QMultiHash;
-
-class QLatin1String;
-
-namespace QSourceHighlite
-{
-
-using LanguageData = QMultiHash;
-
-/**********************************************************/
-/* LuaData ************************************************/
-/**********************************************************/
-void loadLuaData(LanguageData &typess, LanguageData &keywordss,
- LanguageData &builtins, LanguageData &literalss,
- LanguageData &others);
-
-/**********************************************************/
-/* C/C++ Data *********************************************/
-/**********************************************************/
-void loadCppData(LanguageData &typess, LanguageData &keywordss,
- LanguageData &builtins, LanguageData &literalss,
- LanguageData &others);
-
-/**********************************************************/
-/* Shell Data *********************************************/
-/**********************************************************/
-void loadShellData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/**********************************************************/
-/* JS Data *********************************************/
-/**********************************************************/
-void loadJSData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/**********************************************************/
-/* PHP Data *********************************************/
-/**********************************************************/
-void loadPHPData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/**********************************************************/
-/* QML Data *********************************************/
-/**********************************************************/
-void loadQMLData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/**********************************************************/
-/* Python Data *********************************************/
-/**********************************************************/
-void loadPythonData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/********************************************************/
-/*** Rust DATA ***********************************/
-/********************************************************/
-void loadRustData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/********************************************************/
-/*** Java DATA ***********************************/
-/********************************************************/
-void loadJavaData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/********************************************************/
-/*** C# DATA *************************************/
-/********************************************************/
-void loadCSharpData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/********************************************************/
-/*** Go DATA *************************************/
-/********************************************************/
-void loadGoData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/********************************************************/
-/*** V DATA **************************************/
-/********************************************************/
-void loadVData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/********************************************************/
-/*** SQL DATA ************************************/
-/********************************************************/
-void loadSQLData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/********************************************************/
-/*** JSON DATA ***********************************/
-/********************************************************/
-void loadJSONData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/********************************************************/
-/*** CSS DATA ***********************************/
-/********************************************************/
-void loadCSSData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/********************************************************/
-/*** Typescript DATA *********************************/
-/********************************************************/
-void loadTypescriptData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/********************************************************/
-/*** YAML DATA ***************************************/
-/********************************************************/
-void loadYAMLData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/********************************************************/
-/*** VEX DATA ***************************************/
-/********************************************************/
-void loadVEXData(LanguageData &types, LanguageData &keywords,
- LanguageData &builtin, LanguageData &literals,
- LanguageData &other);
-
-/********************************************************/
-/*** CMake DATA **************************************/
-/********************************************************/
-void loadCMakeData(QMultiHash &types,
- QMultiHash &keywords,
- QMultiHash &builtin,
- QMultiHash &literals,
- QMultiHash &other);
-
-/********************************************************/
-/*** Make DATA ***************************************/
-/********************************************************/
-void loadMakeData(QMultiHash &types,
- QMultiHash &keywords,
- QMultiHash &builtin,
- QMultiHash &literals,
- QMultiHash &other);
-
-void loadAsmData(QMultiHash &types,
- QMultiHash &keywords,
- QMultiHash &builtin,
- QMultiHash &literals,
- QMultiHash &other);
-} // namespace QSourceHighlite
-#endif
diff --git a/lib/QSourceHighlite/qsourcehighliter.cpp b/lib/QSourceHighlite/qsourcehighliter.cpp
deleted file mode 100644
index 079bd676..00000000
--- a/lib/QSourceHighlite/qsourcehighliter.cpp
+++ /dev/null
@@ -1,1099 +0,0 @@
-/*
- * Copyright (c) 2019-2020 Waqar Ahmed --
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-
-#include "qsourcehighliter.h"
-#include "languagedata.h"
-#include "qsourcehighliterthemes.h"
-
-#include
-#include
-#include
-
-namespace QSourceHighlite
-{
-
-QSourceHighliter::QSourceHighliter(QTextDocument *doc)
- : QSyntaxHighlighter(doc)
- , _language(CodeC)
-{
- initFormats();
-}
-
-QSourceHighliter::QSourceHighliter(QTextDocument *doc,
- QSourceHighliter::Themes theme)
- : QSyntaxHighlighter(doc)
- , _language(CodeC)
-{
- setTheme(theme);
-}
-
-void QSourceHighliter::initFormats()
-{
- /****************************************
- * Formats for syntax highlighting
- ***************************************/
-
- QTextCharFormat format = QTextCharFormat();
-
- _formats[Token::CodeBlock] = format;
- format = QTextCharFormat();
-
- format.setForeground(QColor("#F92672"));
- _formats[Token::CodeKeyWord] = format;
- format = QTextCharFormat();
-
- format.setForeground(QColor("#a39b4e"));
- _formats[Token::CodeString] = format;
- format = QTextCharFormat();
-
- format.setForeground(QColor("#75715E"));
- _formats[Token::CodeComment] = format;
- format = QTextCharFormat();
-
- format.setForeground(QColor("#54aebf"));
- _formats[Token::CodeType] = format;
-
- format = QTextCharFormat();
- format.setForeground(QColor("#db8744"));
- _formats[Token::CodeOther] = format;
-
- format = QTextCharFormat();
- format.setForeground(QColor("#AE81FF"));
- _formats[Token::CodeNumLiteral] = format;
-
- format = QTextCharFormat();
- format.setForeground(QColor("#018a0f"));
- _formats[Token::CodeBuiltIn] = format;
-}
-
-void QSourceHighliter::setCurrentLanguage(Language language)
-{
- if (language != _language)
- _language = language;
-}
-
-QSourceHighliter::Language QSourceHighliter::currentLanguage()
-{
- return _language;
-}
-
-void QSourceHighliter::setTheme(QSourceHighliter::Themes theme)
-{
- _formats = QSourceHighliterTheme::theme(theme);
- rehighlight();
-}
-
-void QSourceHighliter::highlightBlock(const QString &text)
-{
- if (currentBlock() == document()->firstBlock())
- {
- setCurrentBlockState(_language);
- }
- else
- {
- previousBlockState() == _language ? setCurrentBlockState(_language)
- : setCurrentBlockState(_language + 1);
- }
-
- highlightSyntax(text);
-}
-
-/**
- * @brief Does the code syntax highlighting
- * @param text
- */
-void QSourceHighliter::highlightSyntax(const QString &text)
-{
- if (text.isEmpty())
- return;
-
- const auto textLen = text.length();
-
- QChar comment;
- bool isCSS = false;
- bool isYAML = false;
- bool isMake = false;
- bool isAsm = false;
- bool isSQL = false;
-
- LanguageData keywords{}, others{}, types{}, builtin{}, literals{};
-
- switch (currentBlockState())
- {
- case CodeLua:
- case CodeLuaComment:
- loadLuaData(types, keywords, builtin, literals, others);
- break;
- case CodeCpp:
- case CodeCppComment:
- loadCppData(types, keywords, builtin, literals, others);
- break;
- case CodeJs:
- case CodeJsComment:
- loadJSData(types, keywords, builtin, literals, others);
- break;
- case CodeC:
- case CodeCComment:
- loadCppData(types, keywords, builtin, literals, others);
- break;
- case CodeBash:
- loadShellData(types, keywords, builtin, literals, others);
- comment = QLatin1Char('#');
- break;
- case CodePHP:
- case CodePHPComment:
- loadPHPData(types, keywords, builtin, literals, others);
- break;
- case CodeQML:
- case CodeQMLComment:
- loadQMLData(types, keywords, builtin, literals, others);
- break;
- case CodePython:
- loadPythonData(types, keywords, builtin, literals, others);
- comment = QLatin1Char('#');
- break;
- case CodeRust:
- case CodeRustComment:
- loadRustData(types, keywords, builtin, literals, others);
- break;
- case CodeJava:
- case CodeJavaComment:
- loadJavaData(types, keywords, builtin, literals, others);
- break;
- case CodeCSharp:
- case CodeCSharpComment:
- loadCSharpData(types, keywords, builtin, literals, others);
- break;
- case CodeGo:
- case CodeGoComment:
- loadGoData(types, keywords, builtin, literals, others);
- break;
- case CodeV:
- case CodeVComment:
- loadVData(types, keywords, builtin, literals, others);
- break;
- case CodeSQL:
- isSQL = true;
- loadSQLData(types, keywords, builtin, literals, others);
- break;
- case CodeJSON:
- loadJSONData(types, keywords, builtin, literals, others);
- break;
- case CodeXML:
- xmlHighlighter(text);
- return;
- case CodeCSS:
- case CodeCSSComment:
- isCSS = true;
- loadCSSData(types, keywords, builtin, literals, others);
- break;
- case CodeTypeScript:
- case CodeTypeScriptComment:
- loadTypescriptData(types, keywords, builtin, literals, others);
- break;
- case CodeYAML:
- isYAML = true;
- loadYAMLData(types, keywords, builtin, literals, others);
- comment = QLatin1Char('#');
- break;
- case CodeINI:
- comment = QLatin1Char('#');
- break;
- case CodeVex:
- case CodeVexComment:
- loadVEXData(types, keywords, builtin, literals, others);
- break;
- case CodeCMake:
- loadCMakeData(types, keywords, builtin, literals, others);
- comment = QLatin1Char('#');
- break;
- case CodeMake:
- isMake = true;
- loadMakeData(types, keywords, builtin, literals, others);
- comment = QLatin1Char('#');
- break;
- case CodeAsm:
- isAsm = true;
- loadAsmData(types, keywords, builtin, literals, others);
- comment = QLatin1Char('#');
- break;
- default:
- break;
- }
-
- // keep the default code block format
- // this statement is very slow
- // TODO: do this formatting when necessary instead of
- // applying it to the whole block in the beginning
- setFormat(0, textLen, _formats[CodeBlock]);
-
- auto applyCodeFormat
- = [this](int i, const LanguageData &data, const QString &text,
- const QTextCharFormat &fmt) -> int {
- // check if we are at the beginning OR if this is the start of a word
- if (i == 0
- || (!text.at(i - 1).isLetterOrNumber()
- && text.at(i - 1) != QLatin1Char('_')))
- {
- const auto wordList = data.values(text.at(i).toLatin1());
- for (const QLatin1String &word : wordList)
- {
- // we have a word match check
- // 1. if we are at the end
- // 2. if we have a complete word
- if (word == strMidRef(text, i, word.size())
- && (i + word.size() == text.length()
- || (!text.at(i + word.size()).isLetterOrNumber()
- && text.at(i + word.size()) != QLatin1Char('_'))))
- {
- setFormat(i, word.size(), fmt);
- i += word.size();
- }
- }
- }
- return i;
- };
-
- const QTextCharFormat &formatType = _formats[CodeType];
- const QTextCharFormat &formatKeyword = _formats[CodeKeyWord];
- const QTextCharFormat &formatComment = _formats[CodeComment];
- const QTextCharFormat &formatNumLit = _formats[CodeNumLiteral];
- const QTextCharFormat &formatBuiltIn = _formats[CodeBuiltIn];
- const QTextCharFormat &formatOther = _formats[CodeOther];
-
- for (int i = 0; i < textLen; ++i)
- {
-
- if (currentBlockState() % 2 != 0)
- goto Comment;
-
- while (i < textLen && !text[i].isLetter())
- {
- if (text[i].isSpace())
- {
- ++i;
- // make sure we don't cross the bound
- if (i == textLen)
- return;
- if (text[i].isLetter())
- break;
- else
- continue;
- }
- // inline comment
- if (comment.isNull() && text[i] == QLatin1Char('/'))
- {
- if ((i + 1) < textLen)
- {
- if (text[i + 1] == QLatin1Char('/'))
- {
- setFormat(i, textLen, formatComment);
- return;
- }
- else if (text[i + 1] == QLatin1Char('*'))
- {
- Comment:
- // find a comment end after current position.
- int next = text.indexOf(QLatin1String("*/"), i);
- if (next == -1)
- {
- // we didn't find a comment end.
- // Check if we are already in a comment block
- if (currentBlockState() % 2 == 0)
- setCurrentBlockState(currentBlockState() + 1);
- setFormat(i, textLen, formatComment);
- return;
- }
- else
- {
- // we found a comment end
- // mark this block as code if it was previously comment
- // first check if the comment ended on the same line
- // if modulo 2 is not equal to zero, it means we are in a comment
- //-1 will set this block's state as language
- if (currentBlockState() % 2 != 0)
- {
- setCurrentBlockState(currentBlockState() - 1);
- }
- next += 2;
- setFormat(i, next - i, formatComment);
- i = next;
- if (i >= textLen)
- return;
- }
- }
- }
- }
- else if (isSQL && comment.isNull() && text[i] == QLatin1Char('-'))
- {
- if ((i + 1) < textLen)
- {
- if (text[i + 1] == QLatin1Char('-'))
- {
- setFormat(i, textLen, formatComment);
- return;
- }
- }
- }
- else if (text[i] == comment)
- {
- setFormat(i, textLen, formatComment);
- i = textLen;
- // integer literal
- }
- else if (text[i].isNumber())
- {
- i = highlightNumericLiterals(text, i);
- // string literals
- }
- else if (text[i] == QLatin1Char('\"'))
- {
- i = highlightStringLiterals('\"', text, i);
- }
- else if (text[i] == QLatin1Char('\''))
- {
- i = highlightStringLiterals('\'', text, i);
- }
- if (i >= textLen)
- {
- break;
- }
- ++i;
- }
-
- const int pos = i;
-
- if (i == textLen || !text[i].isLetter())
- continue;
-
- /* Highlight Types */
- i = applyCodeFormat(i, types, text, formatType);
- /************************************************
- next letter is usually a space, in that case
- going forward is useless, so continue;
- We can ++i here and go to the beginning of the next word
- so that the next formatter can check for formatting but this will
- cause problems in case the next word is also of 'Type' or the current
- type(keyword/builtin). We can work around it and reset the value of i
- in the beginning of the loop to the word's first letter but I am not
- sure about its efficiency yet.
- ************************************************/
- if (i == textLen || !text[i].isLetter())
- continue;
-
- /* Highlight Keywords */
- i = applyCodeFormat(i, keywords, text, formatKeyword);
- if (i == textLen || !text[i].isLetter())
- continue;
-
- /* Highlight Literals (true/false/NULL,nullptr) */
- i = applyCodeFormat(i, literals, text, formatNumLit);
- if (i == textLen || !text[i].isLetter())
- continue;
-
- /* Highlight Builtin library stuff */
- i = applyCodeFormat(i, builtin, text, formatBuiltIn);
- if (i == textLen || !text[i].isLetter())
- continue;
-
- /* Highlight other stuff (preprocessor etc.) */
- if ((i == 0 || !text.at(i - 1).isLetter())
- && others.contains(text[i].toLatin1()))
- {
- const QList wordList = others.values(text[i].toLatin1());
- for (const QLatin1String &word : wordList)
- {
- if (word == strMidRef(text, i, word.size()) // we have a word match
- && (i + word.size() == text.length() // check if we are at the end
- || !text.at(i + word.size())
- .isLetter()) // OR if we have a complete word
- )
- {
- currentBlockState() == CodeCpp
- ? setFormat(i - 1, word.size() + 1, formatOther)
- : setFormat(i, word.size(), formatOther);
- i += word.size();
- }
- }
- }
-
- // we were unable to find any match, lets skip this word
- if (pos == i)
- {
- int count = i;
- while (count < textLen)
- {
- if (!text[count].isLetter())
- break;
- ++count;
- }
- i = count;
- }
- }
-
- if (isCSS)
- cssHighlighter(text);
- if (isYAML)
- ymlHighlighter(text);
- if (isMake)
- makeHighlighter(text);
- if (isAsm)
- asmHighlighter(text);
-}
-
-/**
- * @brief Highlight string literals in code
- * @param strType str type i.e., ' or "
- * @param text the text being scanned
- * @param i pos of i in loop
- * @return pos of i after the string
- */
-int QSourceHighliter::highlightStringLiterals(const QChar strType,
- const QString &text, int i)
-{
- setFormat(i, 1, _formats[CodeString]);
- ++i;
-
- while (i < text.length())
- {
- // look for string end
- // make sure it's not an escape seq
- if (text.at(i) == strType && text.at(i - 1) != QLatin1Char('\\'))
- {
- setFormat(i, 1, _formats[CodeString]);
- ++i;
- break;
- }
- // look for escape sequence
- if (text.at(i) == QLatin1Char('\\') && (i + 1) < text.length())
- {
- int len = 0;
- switch (text.at(i + 1).toLatin1())
- {
- case 'a':
- case 'b':
- case 'e':
- case 'f':
- case 'n':
- case 'r':
- case 't':
- case 'v':
- case '\'':
- case '"':
- case '\\':
- case '\?':
- // 2 because we have to highlight \ as well as the following char
- len = 2;
- break;
- // octal esc sequence \123
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7': {
- if (i + 4 <= text.length())
- {
- bool isCurrentOctal = true;
- if (!isOctal(text.at(i + 2).toLatin1()))
- {
- isCurrentOctal = false;
- break;
- }
- if (!isOctal(text.at(i + 3).toLatin1()))
- {
- isCurrentOctal = false;
- break;
- }
- len = isCurrentOctal ? 4 : 0;
- }
- break;
- }
- // hex numbers \xFA
- case 'x': {
- if (i + 3 <= text.length())
- {
- bool isCurrentHex = true;
- if (!isHex(text.at(i + 2).toLatin1()))
- {
- isCurrentHex = false;
- break;
- }
- if (!isHex(text.at(i + 3).toLatin1()))
- {
- isCurrentHex = false;
- break;
- }
- len = isCurrentHex ? 4 : 0;
- }
- break;
- }
- // TODO: implement unicode code point escaping
- default:
- break;
- }
-
- // if len is zero, that means this wasn't an esc seq
- // increment i so that we skip this backslash
- if (len == 0)
- {
- setFormat(i, 1, _formats[CodeString]);
- ++i;
- continue;
- }
-
- setFormat(i, len, _formats[CodeNumLiteral]);
- i += len;
- continue;
- }
- setFormat(i, 1, _formats[CodeString]);
- ++i;
- }
- return i;
-}
-
-/**
- * @brief Highlight number literals in code
- * @param text the text being scanned
- * @param i pos of i in loop
- * @return pos of i after the number
- */
-int QSourceHighliter::highlightNumericLiterals(const QString &text, int i)
-{
- bool isPreAllowed = false;
- if (i == 0)
- isPreAllowed = true;
- else
- {
- // these values are allowed before a number
- switch (text.at(i - 1).toLatin1())
- {
- // css number
- case ':':
- if (currentBlockState() == CodeCSS)
- isPreAllowed = true;
- break;
- case '$':
- if (currentBlockState() == CodeAsm)
- isPreAllowed = true;
- break;
- case '[':
- case '(':
- case '{':
- case ' ':
- case ',':
- case '=':
- case '+':
- case '-':
- case '*':
- case '/':
- case '%':
- case '<':
- case '>':
- isPreAllowed = true;
- break;
- }
- }
-
- if (!isPreAllowed)
- return i;
-
- const int start = i;
-
- if ((i + 1) >= text.length())
- {
- setFormat(i, 1, _formats[CodeNumLiteral]);
- return ++i;
- }
-
- ++i;
- // hex numbers highlighting (only if there's a preceding zero)
- if (text.at(i) == QChar('x') && text.at(i - 1) == QChar('0'))
- ++i;
-
- while (i < text.length())
- {
- if (!text.at(i).isNumber() && text.at(i) != QChar('.')
- && text.at(i) != QChar('e')) // exponent
- break;
- ++i;
- }
-
- bool isPostAllowed = false;
- if (i == text.length())
- {
- // cant have e at the end
- if (text.at(i - 1) != QChar('e'))
- isPostAllowed = true;
- }
- else
- {
- // these values are allowed after a number
- switch (text.at(i).toLatin1())
- {
- case ']':
- case ')':
- case '}':
- case ' ':
- case ',':
- case '=':
- case '+':
- case '-':
- case '*':
- case '/':
- case '%':
- case '>':
- case '<':
- case ';':
- isPostAllowed = true;
- break;
- // for 100u, 1.0F
- case 'p':
- if (currentBlockState() == CodeCSS)
- if (i + 1 < text.length() && text.at(i + 1) == QChar('x'))
- {
- if (i + 2 == text.length() || !text.at(i + 2).isLetterOrNumber())
- isPostAllowed = true;
- }
- break;
- case 'e':
- if (currentBlockState() == CodeCSS)
- if (i + 1 < text.length() && text.at(i + 1) == QChar('m'))
- {
- if (i + 2 == text.length() || !text.at(i + 2).isLetterOrNumber())
- isPostAllowed = true;
- }
- break;
- case 'u':
- case 'l':
- case 'f':
- case 'U':
- case 'L':
- case 'F':
- if (i + 1 == text.length() || !text.at(i + 1).isLetterOrNumber())
- {
- isPostAllowed = true;
- ++i;
- }
- break;
- }
- }
- if (isPostAllowed)
- {
- int end = i;
- setFormat(start, end - start, _formats[CodeNumLiteral]);
- }
- // decrement so that the index is at the last number, not after it
- return --i;
-}
-
-/**
- * @brief The YAML highlighter
- * @param text
- * @details This function post processes a line after the main syntax
- * highlighter has run for additional highlighting. It does these things
- *
- * If the current line is a comment, skip it
- *
- * Highlight all the words that have a colon after them as 'keyword' except:
- * If the word is a string, skip it.
- * If the colon is in between a path, skip it (C:\)
- *
- * Once the colon is found, the function will skip every character except 'h'
- *
- * If an h letter is found, check the next 4/5 letters for http/https and
- * highlight them as a link (underlined)
- */
-void QSourceHighliter::ymlHighlighter(const QString &text)
-{
- if (text.isEmpty())
- return;
- const auto textLen = text.length();
- bool colonNotFound = false;
-
- // if this is a comment don't do anything and just return
- if (text.trimmed().at(0) == QLatin1Char('#'))
- return;
-
- for (int i = 0; i < textLen; ++i)
- {
- if (!text.at(i).isLetter())
- continue;
-
- if (colonNotFound && text.at(i) != QLatin1Char('h'))
- continue;
-
- // we found a string literal, skip it
- if (i != 0
- && (text.at(i - 1) == QLatin1Char('"')
- || text.at(i - 1) == QLatin1Char('\'')))
- {
- const int next = text.indexOf(text.at(i - 1), i);
- if (next == -1)
- break;
- i = next;
- continue;
- }
-
- const int colon = text.indexOf(QLatin1Char(':'), i);
-
- // if colon isn't found, we set this true
- if (colon == -1)
- colonNotFound = true;
-
- if (!colonNotFound)
- {
- // if the line ends here, format and return
- if (colon + 1 == textLen)
- {
- setFormat(i, colon - i, _formats[CodeKeyWord]);
- return;
- }
- else
- {
- // colon is found, check if it isn't some path or something else
- if (!(text.at(colon + 1) == QLatin1Char('\\')
- && text.at(colon + 1) == QLatin1Char('/')))
- {
- setFormat(i, colon - i, _formats[CodeKeyWord]);
- }
- }
- }
-
- // underlined links
- if (text.at(i) == QLatin1Char('h'))
- {
- if (strMidRef(text, i, 5) == QLatin1String("https")
- || strMidRef(text, i, 4) == QLatin1String("http"))
- {
- int space = text.indexOf(QChar(' '), i);
- if (space == -1)
- space = textLen;
- QTextCharFormat f = _formats[CodeString];
- f.setUnderlineStyle(QTextCharFormat::SingleUnderline);
- setFormat(i, space - i, f);
- i = space;
- }
- }
- }
-}
-
-void QSourceHighliter::cssHighlighter(const QString &text)
-{
- if (text.isEmpty())
- return;
- const auto textLen = text.length();
- for (int i = 0; i < textLen; ++i)
- {
- if (text[i] == QLatin1Char('.') || text[i] == QLatin1Char('#'))
- {
- if (i + 1 >= textLen)
- return;
- if (text[i + 1].isSpace() || text[i + 1].isNumber())
- continue;
- int space = text.indexOf(QLatin1Char(' '), i);
- if (space < 0)
- {
- space = text.indexOf('{');
- if (space < 0)
- {
- space = textLen;
- }
- }
- setFormat(i, space - i, _formats[CodeKeyWord]);
- i = space;
- }
- else if (text[i] == QLatin1Char('c'))
- {
- if (strMidRef(text, i, 5) == QLatin1String("color"))
- {
- i += 5;
- int colon = text.indexOf(QLatin1Char(':'), i);
- if (colon < 0)
- continue;
- i = colon;
- i++;
- while (i < textLen)
- {
- if (!text[i].isSpace())
- break;
- i++;
- }
- int semicolon = text.indexOf(QLatin1Char(';'));
- if (semicolon < 0)
- semicolon = textLen;
- const QString color = text.mid(i, semicolon - i);
- QTextCharFormat f = _formats[CodeBlock];
- QColor c(color);
- if (color.startsWith(QLatin1String("rgb")))
- {
- int t = text.indexOf(QLatin1Char('('), i);
- int rPos = text.indexOf(QLatin1Char(','), t);
- int gPos = text.indexOf(QLatin1Char(','), rPos + 1);
- int bPos = text.indexOf(QLatin1Char(')'), gPos);
- if (rPos > -1 && gPos > -1 && bPos > -1)
- {
- const auto r = strMidRef(text, t + 1, rPos - (t + 1));
- const auto g = strMidRef(text, rPos + 1, gPos - (rPos + 1));
- const auto b = strMidRef(text, gPos + 1, bPos - (gPos + 1));
- c.setRgb(r.toInt(), g.toInt(), b.toInt());
- }
- else
- {
- c = _formats[CodeBlock].background().color();
- }
- }
-
- if (!c.isValid())
- {
- continue;
- }
-
- int lightness{};
- QColor foreground;
- // really dark
- if (c.lightness() <= 20)
- {
- foreground = Qt::white;
- }
- else if (c.lightness() > 20 && c.lightness() <= 51)
- {
- foreground = QColor("#ccc");
- }
- else if (c.lightness() > 51 && c.lightness() <= 78)
- {
- foreground = QColor("#bbb");
- }
- else if (c.lightness() > 78 && c.lightness() <= 110)
- {
- foreground = QColor("#bbb");
- }
- else if (c.lightness() > 127)
- {
- lightness = c.lightness() + 100;
- foreground = c.darker(lightness);
- }
- else
- {
- lightness = c.lightness() + 100;
- foreground = c.lighter(lightness);
- }
-
- f.setBackground(c);
- f.setForeground(foreground);
- setFormat(i, semicolon - i, QTextCharFormat()); // clear prev format
- setFormat(i, semicolon - i, f);
- i = semicolon;
- }
- }
- }
-}
-
-void QSourceHighliter::xmlHighlighter(const QString &text)
-{
- if (text.isEmpty())
- return;
- const auto textLen = text.length();
-
- setFormat(0, textLen, _formats[CodeBlock]);
-
- for (int i = 0; i < textLen; ++i)
- {
- if (text[i] == QLatin1Char('<') && text[i + 1] != QLatin1Char('!'))
- {
-
- const int found = text.indexOf(QLatin1Char('>'), i);
- if (found > 0)
- {
- ++i;
- if (text[i] == QLatin1Char('/'))
- ++i;
- setFormat(i, found - i, _formats[CodeKeyWord]);
- }
- }
-
- if (text[i] == QLatin1Char('='))
- {
- int lastSpace = text.lastIndexOf(QLatin1Char(' '), i);
- if (lastSpace == i - 1)
- lastSpace = text.lastIndexOf(QLatin1Char(' '), i - 2);
- if (lastSpace > 0)
- {
- setFormat(lastSpace, i - lastSpace, _formats[CodeBuiltIn]);
- }
- }
-
- if (text[i] == QLatin1Char('\"'))
- {
- const int pos = i;
- int cnt = 1;
- ++i;
- // bound check
- if ((i + 1) >= textLen)
- return;
- while (i < textLen)
- {
- if (text[i] == QLatin1Char('\"'))
- {
- ++cnt;
- ++i;
- break;
- }
- ++i;
- ++cnt;
- // bound check
- if ((i + 1) >= textLen)
- {
- ++cnt;
- break;
- }
- }
- setFormat(pos, cnt, _formats[CodeString]);
- }
- }
-}
-
-void QSourceHighliter::makeHighlighter(const QString &text)
-{
- int colonPos = text.indexOf(QLatin1Char(':'));
- if (colonPos == -1)
- return;
- setFormat(0, colonPos, _formats[Token::CodeBuiltIn]);
-}
-
-/**
- * @brief highlight inline labels such as 'func()' in "call func()"
- * @param text
- */
-void QSourceHighliter::highlightInlineAsmLabels(const QString &text)
-{
-#define Q(s) QStringLiteral(s)
- static const QString jumps[27]
- = {// 0 - 19
- Q("jmp"), Q("je"), Q("jne"), Q("jz"), Q("jnz"), Q("ja"), Q("jb"),
- Q("jg"), Q("jge"), Q("jae"), Q("jl"), Q("jle"), Q("jbe"), Q("jo"),
- Q("jno"), Q("js"), Q("jns"), Q("jcxz"), Q("jecxz"), Q("jrcxz"),
- // 20 - 24
- Q("loop"), Q("loope"), Q("loopne"), Q("loopz"), Q("loopnz"),
- // 25 - 26
- Q("call"), Q("callq")};
-#undef Q
-
- auto format = _formats[Token::CodeBuiltIn];
- format.setFontUnderline(true);
-
- const QString trimmed = text.trimmed();
- int start = -1;
- int end = -1;
- char c{};
- if (!trimmed.isEmpty())
- c = trimmed.at(0).toLatin1();
- if (c == 'j')
- {
- start = 0;
- end = 20;
- }
- else if (c == 'c')
- {
- start = 25;
- end = 27;
- }
- else if (c == 'l')
- {
- start = 20;
- end = 25;
- }
- else
- {
- return;
- }
-
- auto skipSpaces = [&text](int &j) {
- while (text.at(j).isSpace())
- j++;
- return j;
- };
-
- for (int i = start; i < end; ++i)
- {
- if (trimmed.startsWith(jumps[i]))
- {
- int j = 0;
- skipSpaces(j);
- j = j + jumps[i].length() + 1;
- skipSpaces(j);
- int len = text.length() - j;
- setFormat(j, len, format);
- }
- }
-}
-
-void QSourceHighliter::asmHighlighter(const QString &text)
-{
- highlightInlineAsmLabels(text);
- // label highlighting
- // examples:
- // L1:
- // LFB1: # local func begin
- //
- // following e.gs are not a label
- // mov %eax, Count::count(%rip)
- //.string ": #%s"
-
- // look for the last occurence of a colon
- int colonPos = text.lastIndexOf(QLatin1Char(':'));
- if (colonPos == -1)
- return;
- // check if this colon is in a comment maybe?
- bool isComment = text.lastIndexOf('#', colonPos) != -1;
- if (isComment)
- {
- int commentPos = text.lastIndexOf('#', colonPos);
- colonPos = text.lastIndexOf(':', commentPos);
- }
-
- auto format = _formats[Token::CodeBuiltIn];
- format.setFontUnderline(true);
-
- if (colonPos >= text.length() - 1)
- {
- setFormat(0, colonPos, format);
- }
-
- int i = 0;
- bool isLabel = true;
- for (i = colonPos + 1; i < text.length(); ++i)
- {
- if (!text.at(i).isSpace())
- {
- isLabel = false;
- break;
- }
- }
-
- if (!isLabel && i < text.length() && text.at(i) == QLatin1Char('#'))
- setFormat(0, colonPos, format);
-}
-} // namespace QSourceHighlite
diff --git a/lib/QSourceHighlite/qsourcehighliter.h b/lib/QSourceHighlite/qsourcehighliter.h
deleted file mode 100644
index 726f0b2f..00000000
--- a/lib/QSourceHighlite/qsourcehighliter.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (c) 2019-2020 Waqar Ahmed --
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-
-#ifndef QSOURCEHIGHLITER_H
-#define QSOURCEHIGHLITER_H
-
-#include
-
-#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
-# include
-#endif
-
-namespace QSourceHighlite
-{
-
-class QSourceHighliter : public QSyntaxHighlighter
-{
-public:
- enum Themes
- {
- Monokai = 1
- };
-
- explicit QSourceHighliter(QTextDocument *doc);
- QSourceHighliter(QTextDocument *doc, Themes theme);
-
- // languages
- /*********
- * When adding a language make sure that its value is a multiple of 2
- * This is because we use the next number as comment for that language
- * In case the language doesn't support multiline comments in the traditional
- * C++ sense, leave the next value empty. Otherwise mark the next value as
- * comment for that language. e.g CodeCpp = 200 CodeCppComment = 201
- */
- enum Language
- {
- // languages
- CodeCpp = 200,
- CodeCppComment = 201,
- CodeJs = 202,
- CodeJsComment = 203,
- CodeC = 204,
- CodeCComment = 205,
- CodeBash = 206,
- CodePHP = 208,
- CodePHPComment = 209,
- CodeQML = 210,
- CodeQMLComment = 211,
- CodePython = 212,
- CodeRust = 214,
- CodeRustComment = 215,
- CodeJava = 216,
- CodeJavaComment = 217,
- CodeCSharp = 218,
- CodeCSharpComment = 219,
- CodeGo = 220,
- CodeGoComment = 221,
- CodeV = 222,
- CodeVComment = 223,
- CodeSQL = 224,
- CodeJSON = 226,
- CodeXML = 228,
- CodeCSS = 230,
- CodeCSSComment = 231,
- CodeTypeScript = 232,
- CodeTypeScriptComment = 233,
- CodeYAML = 234,
- CodeINI = 236,
- CodeVex = 238,
- CodeVexComment = 239,
- CodeCMake = 240,
- CodeMake = 242,
- CodeAsm = 244,
- CodeLua = 246,
- CodeLuaComment = 247
- };
- Q_ENUM(Language)
-
- enum Token
- {
- CodeBlock,
- CodeKeyWord,
- CodeString,
- CodeComment,
- CodeType,
- CodeOther,
- CodeNumLiteral,
- CodeBuiltIn,
- };
- Q_ENUM(Token)
-
- void setCurrentLanguage(Language language);
- Q_REQUIRED_RESULT Language currentLanguage();
- void setTheme(Themes theme);
-
-protected:
- void highlightBlock(const QString &text) override;
-
-private:
- void highlightSyntax(const QString &text);
- Q_REQUIRED_RESULT int highlightNumericLiterals(const QString &text, int i);
- Q_REQUIRED_RESULT int highlightStringLiterals(const QChar strType,
- const QString &text, int i);
-
- /**
- * @brief returns true if c is octal
- * @param c the char being checked
- * @returns true if the number is octal, false otherwise
- */
- Q_REQUIRED_RESULT static constexpr inline bool isOctal(const char c)
- {
- return (c >= '0' && c <= '7');
- }
-
- /**
- * @brief returns true if c is hex
- * @param c the char being checked
- * @returns true if the number is hex, false otherwise
- */
- Q_REQUIRED_RESULT static constexpr inline bool isHex(const char c)
- {
- return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f')
- || (c >= 'A' && c <= 'F'));
- }
-
- void cssHighlighter(const QString &text);
- void ymlHighlighter(const QString &text);
- void xmlHighlighter(const QString &text);
- void makeHighlighter(const QString &text);
- void highlightInlineAsmLabels(const QString &text);
- void asmHighlighter(const QString &text);
- void initFormats();
-
-#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
- static inline QStringView strMidRef(const QString &str, qsizetype position,
- qsizetype n = -1)
- {
- return QStringView(str).mid(position, n);
- }
-#else
- static inline QStringRef strMidRef(const QString &str, int position,
- int n = -1)
- {
- return str.midRef(position, n);
- }
-#endif
-
- QHash _formats;
- Language _language;
-};
-} // namespace QSourceHighlite
-#endif // QSOURCEHIGHLITER_H
diff --git a/lib/QSourceHighlite/qsourcehighliterthemes.cpp b/lib/QSourceHighlite/qsourcehighliterthemes.cpp
deleted file mode 100644
index 80afb91b..00000000
--- a/lib/QSourceHighlite/qsourcehighliterthemes.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2019-2020 Waqar Ahmed --
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-
-#include "qsourcehighliterthemes.h"
-
-namespace QSourceHighlite
-{
-
-static QHash formats()
-{
- QHash _formats;
-
- QTextCharFormat defaultFormat = QTextCharFormat();
-
- _formats[QSourceHighliter::Token::CodeBlock] = defaultFormat;
- _formats[QSourceHighliter::Token::CodeKeyWord] = defaultFormat;
- _formats[QSourceHighliter::Token::CodeString] = defaultFormat;
- _formats[QSourceHighliter::Token::CodeComment] = defaultFormat;
- _formats[QSourceHighliter::Token::CodeType] = defaultFormat;
- _formats[QSourceHighliter::Token::CodeOther] = defaultFormat;
- _formats[QSourceHighliter::Token::CodeNumLiteral] = defaultFormat;
- _formats[QSourceHighliter::Token::CodeBuiltIn] = defaultFormat;
-
- return _formats;
-}
-
-static QHash monokai()
-{
- QHash _formats = formats();
-
- _formats[QSourceHighliter::Token::CodeBlock].setForeground(
- QColor(227, 226, 214));
- _formats[QSourceHighliter::Token::CodeKeyWord].setForeground(
- QColor(249, 38, 114));
- _formats[QSourceHighliter::Token::CodeString].setForeground(
- QColor(230, 219, 116));
- _formats[QSourceHighliter::Token::CodeComment].setForeground(
- QColor(117, 113, 94));
- _formats[QSourceHighliter::Token::CodeType].setForeground(
- QColor(102, 217, 239));
- _formats[QSourceHighliter::Token::CodeOther].setForeground(
- QColor(249, 38, 114));
- _formats[QSourceHighliter::Token::CodeNumLiteral].setForeground(
- QColor(174, 129, 255));
- _formats[QSourceHighliter::Token::CodeBuiltIn].setForeground(
- QColor(166, 226, 46));
-
- return _formats;
-}
-
-QHash
-QSourceHighliterTheme::theme(QSourceHighliter::Themes theme)
-{
- switch (theme)
- {
- case QSourceHighliter::Themes::Monokai:
- return monokai();
- default:
- return {};
- }
-}
-
-} // namespace QSourceHighlite
diff --git a/lib/QSourceHighlite/qsourcehighliterthemes.h b/lib/QSourceHighlite/qsourcehighliterthemes.h
deleted file mode 100644
index 6dd5a4a6..00000000
--- a/lib/QSourceHighlite/qsourcehighliterthemes.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2019-2020 Waqar Ahmed --
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-
-#ifndef QSOURCEHIGHLITERTHEMES_H
-#define QSOURCEHIGHLITERTHEMES_H
-
-#include "qsourcehighliter.h"
-
-namespace QSourceHighlite
-{
-
-namespace QSourceHighliterTheme
-{
-QHash theme(QSourceHighliter::Themes);
-
-} // namespace QSourceHighliterTheme
-
-} // namespace QSourceHighlite
-#endif // QSOURCEHIGHLITERTHEMES_H
diff --git a/lib/edbee-lib/CMakeLists.txt b/lib/edbee-lib/CMakeLists.txt
new file mode 100644
index 00000000..40ce2441
--- /dev/null
+++ b/lib/edbee-lib/CMakeLists.txt
@@ -0,0 +1,197 @@
+# Should be called before PROJECT.
+CMAKE_MINIMUM_REQUIRED(VERSION 3.1...3.20)
+
+IF(POLICY CMP0020)
+ CMAKE_POLICY(SET CMP0020 NEW)
+ENDIF()
+
+# hack?? https://stackoverflow.com/questions/31561309/cmake-warnings-under-os-x-macosx-rpath-is-not-specified-for-the-following-targe
+set(CMAKE_MACOSX_RPATH 1)
+
+PROJECT(edbee-lib)
+
+add_subdirectory(vendor/qslog/ qslog)
+
+SET(SOURCES
+ edbee/commands/commentcommand.cpp
+ edbee/commands/copycommand.cpp
+ edbee/commands/cutcommand.cpp
+ edbee/commands/debugcommand.cpp
+ edbee/commands/duplicatecommand.cpp
+ edbee/commands/findcommand.cpp
+ edbee/commands/movelinecommand.cpp
+ edbee/commands/newlinecommand.cpp
+ edbee/commands/pastecommand.cpp
+ edbee/commands/redocommand.cpp
+ edbee/commands/removecommand.cpp
+ edbee/commands/replaceselectioncommand.cpp
+ edbee/commands/selectioncommand.cpp
+ edbee/commands/tabcommand.cpp
+ edbee/commands/togglereadonlycommand.cpp
+ edbee/commands/undocommand.cpp
+ edbee/data/factorycommandmap.cpp
+ edbee/data/factorykeymap.cpp
+ edbee/edbee.cpp
+ edbee/io/baseplistparser.cpp
+ edbee/io/jsonparser.cpp
+ edbee/io/keymapparser.cpp
+ edbee/io/textdocumentserializer.cpp
+ edbee/io/tmlanguageparser.cpp
+ edbee/io/tmthemeparser.cpp
+ edbee/lexers/grammartextlexer.cpp
+ edbee/models/change.cpp
+ edbee/models/changes/abstractrangedchange.cpp
+ edbee/models/changes/linedatachange.cpp
+ edbee/models/changes/linedatalistchange.cpp
+ edbee/models/changes/mergablechangegroup.cpp
+ edbee/models/changes/selectionchange.cpp
+ edbee/models/changes/textchange.cpp
+ edbee/models/changes/textchangewithcaret.cpp
+ edbee/models/chardocument/chartextbuffer.cpp
+ edbee/models/chardocument/chartextdocument.cpp
+ edbee/models/dynamicvariables.cpp
+ edbee/models/textautocompleteprovider.cpp
+ edbee/models/textbuffer.cpp
+ edbee/models/textdocument.cpp
+ edbee/models/textdocumentfilter.cpp
+ edbee/models/textdocumentscopes.cpp
+ edbee/models/texteditorcommandmap.cpp
+ edbee/models/texteditorconfig.cpp
+ edbee/models/texteditorkeymap.cpp
+ edbee/models/textgrammar.cpp
+ edbee/models/textlexer.cpp
+ edbee/models/textlinedata.cpp
+ edbee/models/textrange.cpp
+ edbee/models/textsearcher.cpp
+ edbee/models/textundostack.cpp
+ edbee/texteditorcommand.cpp
+ edbee/texteditorcontroller.cpp
+ edbee/texteditorwidget.cpp
+ edbee/util/cascadingqvariantmap.cpp
+ edbee/util/gapvector.h
+ edbee/util/lineending.cpp
+ edbee/util/lineoffsetvector.cpp
+ edbee/util/mem/debug_allocs.cpp
+ edbee/util/mem/debug_new.cpp
+ edbee/util/rangelineiterator.cpp
+ edbee/util/rangesetlineiterator.cpp
+ edbee/util/regexp.cpp
+ edbee/util/simpleprofiler.cpp
+ edbee/util/test.cpp
+ edbee/util/textcodec.cpp
+ edbee/util/textcodecdetector.cpp
+ edbee/util/util.cpp
+ edbee/views/accessibletexteditorwidget.cpp
+ edbee/views/components/texteditorautocompletecomponent.cpp
+ edbee/views/components/texteditorcomponent.cpp
+ edbee/views/components/texteditorrenderer.cpp
+ edbee/views/components/textmargincomponent.cpp
+ edbee/views/textcaretcache.cpp
+ edbee/views/texteditorscrollarea.cpp
+ edbee/views/textlayout.cpp
+ edbee/views/textrenderer.cpp
+ edbee/views/textselection.cpp
+ edbee/views/texttheme.cpp
+)
+
+SET(HEADERS
+ edbee/commands/commentcommand.h
+ edbee/commands/copycommand.h
+ edbee/commands/cutcommand.h
+ edbee/commands/debugcommand.h
+ edbee/commands/duplicatecommand.h
+ edbee/commands/findcommand.h
+ edbee/commands/movelinecommand.h
+ edbee/commands/newlinecommand.h
+ edbee/commands/pastecommand.h
+ edbee/commands/redocommand.h
+ edbee/commands/removecommand.h
+ edbee/commands/replaceselectioncommand.h
+ edbee/commands/selectioncommand.h
+ edbee/commands/tabcommand.h
+ edbee/commands/togglereadonlycommand.h
+ edbee/commands/undocommand.h
+ edbee/data/factorycommandmap.h
+ edbee/data/factorykeymap.h
+ edbee/debug.h
+ edbee/edbee.h
+ edbee/io/baseplistparser.h
+ edbee/io/jsonparser.h
+ edbee/io/keymapparser.h
+ edbee/io/textdocumentserializer.h
+ edbee/io/tmlanguageparser.h
+ edbee/io/tmthemeparser.h
+ edbee/lexers/grammartextlexer.h
+ edbee/models/change.h
+ edbee/models/changes/abstractrangedchange.h
+ edbee/models/changes/linedatachange.h
+ edbee/models/changes/linedatalistchange.h
+ edbee/models/changes/mergablechangegroup.h
+ edbee/models/changes/selectionchange.h
+ edbee/models/changes/textchange.h
+ edbee/models/changes/textchangewithcaret.h
+ edbee/models/chardocument/chartextbuffer.h
+ edbee/models/chardocument/chartextdocument.h
+ edbee/models/dynamicvariables.h
+ edbee/models/textautocompleteprovider.h
+ edbee/models/textbuffer.h
+ edbee/models/textdocument.h
+ edbee/models/textdocumentfilter.h
+ edbee/models/textdocumentscopes.h
+ edbee/models/texteditorcommandmap.h
+ edbee/models/texteditorconfig.h
+ edbee/models/texteditorkeymap.h
+ edbee/models/textgrammar.h
+ edbee/models/textlexer.h
+ edbee/models/textlinedata.h
+ edbee/models/textrange.h
+ edbee/models/textsearcher.h
+ edbee/models/textundostack.h
+ edbee/texteditorcommand.h
+ edbee/texteditorcontroller.h
+ edbee/texteditorwidget.h
+ edbee/util/cascadingqvariantmap.h
+ edbee/util/lineending.h
+ edbee/util/lineoffsetvector.h
+ edbee/util/logging.h
+ edbee/util/mem/debug_allocs.h
+ edbee/util/mem/debug_new.h
+ edbee/util/rangelineiterator.h
+ edbee/util/rangesetlineiterator.h
+ edbee/util/regexp.h
+ edbee/util/simpleprofiler.h
+ edbee/util/test.h
+ edbee/util/textcodec.h
+ edbee/util/textcodecdetector.h
+ edbee/util/util.h
+ edbee/views/accessibletexteditorwidget.h
+ edbee/views/components/texteditorautocompletecomponent.h
+ edbee/views/components/texteditorcomponent.h
+ edbee/views/components/texteditorrenderer.h
+ edbee/views/components/textmargincomponent.h
+ edbee/views/textcaretcache.h
+ edbee/views/texteditorscrollarea.h
+ edbee/views/textlayout.h
+ edbee/views/textrenderer.h
+ edbee/views/textselection.h
+ edbee/views/texttheme.h
+)
+
+add_subdirectory(vendor/onig/ onig)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Widgets Core5Compat)
+set(QT_LIBS Qt6::Core Qt6::Widgets Qt6::Core5Compat)
+
+ADD_LIBRARY(edbee-lib STATIC
+ ${SOURCES} ${HEADERS} ${ONIG_SOURCES}
+ ${ONIG_HEADERS})
+
+target_link_libraries(edbee-lib QsLog ${QT_LIBS})
+
+set_target_properties(edbee-lib PROPERTIES AUTOMOC ON CXX_STANDARD 11)
+
+TARGET_INCLUDE_DIRECTORIES(edbee-lib PUBLIC
+ ${QS_LOG_INCLUDE_DIRS}
+ ${ONIG_INCLUDE_DIRS}
+ ${CMAKE_CURRENT_SOURCE_DIR}
+)
diff --git a/lib/edbee-lib/Doxyfile b/lib/edbee-lib/Doxyfile
new file mode 100644
index 00000000..7e667a38
--- /dev/null
+++ b/lib/edbee-lib/Doxyfile
@@ -0,0 +1,1801 @@
+# Doxyfile 1.8.0
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME = "edbee - Qt Editor Library"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF = ""
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO = images/doc-logo.png
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = ../edbee-lib-doxydocs
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS =
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this
+# tag. The format is ext=language, where ext is a file extension, and language
+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+SYMBOL_CACHE_SIZE = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command , where is the value of
+# the FILE_VERSION_FILTER tag, and is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. The create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT =
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command , where
+# is the value of the INPUT_FILTER tag, and is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+#INPUT_FILTER =
+INPUT_FILTER = "sed -e 's/\/\/.*TODO/\/\/\/ \\todo/' -e 's/\/\/.*FIXME/\/\/\/ \\todo/'"
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+# for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# style sheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP = YES
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS = YES
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+#
+# Qt Help Project / Custom Filters.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+#
+# Qt Help Project / Filter Attributes.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+# will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE = 4
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = YES
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS = 1
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = YES
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
diff --git a/lib/edbee-lib/doc/coding-style.md b/lib/edbee-lib/doc/coding-style.md
new file mode 100644
index 00000000..44ba5484
--- /dev/null
+++ b/lib/edbee-lib/doc/coding-style.md
@@ -0,0 +1,126 @@
+Coding Style {#coding-style}
+============
+
+The coding style is based on google's styleguide:
+
+
+
+* default names: defaultNames
+* class names : ClassNames
+* const names : CONSTANT_NAMES
+
+Reference, pointer location can be placed next to type typename or to the variable name
+* good: TypeName* object; TypeName& name;
+* good: TypeName *object; TypeName &name;
+* bad: TypeName * object; TypeName & name;
+
+
+Member instances should be private. Subclasses should never access data members directly unless it's stricly necessary.
+
+class members
+-------------
+
+A class member name is postfixed with '_'. (To prevent clashes with getter functions)
+
+~~~{.cpp}
+int itemName_;
+~~~
+
+A class member pointer that is NOT owned by the classes show be postfixed with "Ref".
+For example a reference to a buffer is added like this
+
+~~~{.cpp}
+TextBuffer* bufferRef_;
+~~~
+
+When you have a list of reference the following name is used:
+
+~~~{.cpp}
+QList- itemRefList_;
+~~~
+
+
+Method definitions
+------------------
+
+Separate methods from each other with 2 blank lines. This improves the visible separation of method bodies.
+
+
+Ownership
+---------
+
+In C / C++ you need to do your own garabage collection. So ownership is important. Here are some rules to make the
+ownership in the code clear:
+
+* all class members are 'owned' by the class. If not add the postfix "Ref" (see class members)
+* transfering ownership from x => y, prefix the function with the word "give" or "take".
+* object.give( x ) gives the ownership of x to object
+* object.take( x ) removes the ownership of x from object
+
+When it is possible for a class to have the ownership of an object optionally, the way to do this is the following. (See redbee::TextEditorController.textDocument[Ref])
+
+* give the class 2 members. For example in the case of a document:
+* document_, this is the 'owned' document (only if the document is owner else it is 0)
+* documentRef_ , this is the reference to the document. This can be a reference to document_
+* For working with the document the documentRef_ member is used
+* For destruction/giving etc. the document_ member is used
+
+When using lists yout can use the following structure
+
+~~~{.cpp}
+QList objectList_ ; // when owning the items (use qDeleteAll in the destructor)
+QList objectRefList_; // use this when you do not own the objectlist
+~~~
+
+
+Memory Leak Detection and include order
+---------------------------------------
+
+We use custom memory leak detection. To enable this leak detection it is required to include 'debug.h'
+You must include "debug.h" in every Source file AFTER all pre-compiled items and header files. Example:
+
+~~~{.cpp}
+// first you should include the source's header file. (This allows you to see if the headers users 'missing' dependencies'
+#include "header-file-of-this-source-file.h"
+
+// then include all Qt headers (and other external libraries) (sorted alpabeticly).
+#include
+
+// after this include your other header files from your project (alpabeticly is nice!)
+#include "other-custom-headers.h"
+
+// then include debug.h so memory leak detection can do it's work
+#include "debug.h"
+~~~
+
+This implies that you should never use a new or delete keyword in a header file!!!
+main.cpp is different, it includes all DEBUG_NEW stuff below ALL existing header files!
+
+
+Documentation
+--------------
+
+We make use of doxygen:
+
+- Put member documentation in the header file. Above the member definition with '/// description'. Or next to the definition '///< description'
+- Put class documentation in the header file
+- Put method documentation in the source file of the class
+
+
+Header files
+------------
+- Use #pragma once.. Most platforms support this keyword, so use it. #ifdef structure is outdated
+- Never use code in a header file. Even not for getters and setters. (It has been done in this project on certain places, but recommendation is to not do it, because it can case strange build errors)
+- You can make an exception (of course) for template classes / function
+- limit the use of templates! This slows down the compilation process and gives very crappy error messages
+- Prefer pointers/references above class inclusions in the header file
+
+
+Enumerations
+------------
+On several places in the code you will find enumeration definitions. We do not aways force the enumeration
+type for variables. The reason for this is, that somethimes it's desirable to extends the number of enumeration options.
+And when forcing a enumeration type, you cannot easy pass a custom value and are limited to the predefined definitions.
+
+
+
diff --git a/lib/edbee-lib/doc/index.md b/lib/edbee-lib/doc/index.md
new file mode 100644
index 00000000..5c1db451
--- /dev/null
+++ b/lib/edbee-lib/doc/index.md
@@ -0,0 +1,8 @@
+edbee documentation {#mainpage}
+===================
+
+This is the generated documentation for the edbee library.
+Please use the menu above to navigate...
+
+[Coding Style](@ref coding-style)
+
diff --git a/lib/edbee-lib/edbee-lib.pri b/lib/edbee-lib/edbee-lib.pri
new file mode 100644
index 00000000..5ae6833a
--- /dev/null
+++ b/lib/edbee-lib/edbee-lib.pri
@@ -0,0 +1,191 @@
+
+
+INCLUDEPATH += $$PWD
+
+SOURCES += \
+ $$PWD/edbee/commands/commentcommand.cpp \
+ $$PWD/edbee/commands/copycommand.cpp \
+ $$PWD/edbee/commands/cutcommand.cpp \
+ $$PWD/edbee/commands/debugcommand.cpp \
+ $$PWD/edbee/commands/duplicatecommand.cpp \
+ $$PWD/edbee/commands/findcommand.cpp \
+ $$PWD/edbee/commands/movelinecommand.cpp \
+ $$PWD/edbee/commands/newlinecommand.cpp \
+ $$PWD/edbee/commands/pastecommand.cpp \
+ $$PWD/edbee/commands/redocommand.cpp \
+ $$PWD/edbee/commands/removecommand.cpp \
+ $$PWD/edbee/commands/replaceselectioncommand.cpp \
+ $$PWD/edbee/commands/selectioncommand.cpp \
+ $$PWD/edbee/commands/tabcommand.cpp \
+ $$PWD/edbee/commands/togglereadonlycommand.cpp \
+ $$PWD/edbee/commands/undocommand.cpp \
+ $$PWD/edbee/data/factorycommandmap.cpp \
+ $$PWD/edbee/data/factorykeymap.cpp \
+ $$PWD/edbee/edbee.cpp \
+ $$PWD/edbee/io/baseplistparser.cpp \
+ $$PWD/edbee/io/jsonparser.cpp \
+ $$PWD/edbee/io/keymapparser.cpp \
+ $$PWD/edbee/io/textdocumentserializer.cpp \
+ $$PWD/edbee/io/tmlanguageparser.cpp \
+ $$PWD/edbee/io/tmthemeparser.cpp \
+ $$PWD/edbee/lexers/grammartextlexer.cpp \
+ $$PWD/edbee/models/change.cpp \
+ $$PWD/edbee/models/changes/abstractrangedchange.cpp \
+ $$PWD/edbee/models/changes/linedatachange.cpp \
+ $$PWD/edbee/models/changes/linedatalistchange.cpp \
+ $$PWD/edbee/models/changes/mergablechangegroup.cpp \
+ $$PWD/edbee/models/changes/selectionchange.cpp \
+ $$PWD/edbee/models/changes/textchange.cpp \
+ $$PWD/edbee/models/changes/textchangewithcaret.cpp \
+ $$PWD/edbee/models/chardocument/chartextbuffer.cpp \
+ $$PWD/edbee/models/chardocument/chartextdocument.cpp \
+ $$PWD/edbee/models/dynamicvariables.cpp \
+ $$PWD/edbee/models/textautocompleteprovider.cpp \
+ $$PWD/edbee/models/textbuffer.cpp \
+ $$PWD/edbee/models/textdocument.cpp \
+ $$PWD/edbee/models/textdocumentfilter.cpp \
+ $$PWD/edbee/models/textdocumentscopes.cpp \
+ $$PWD/edbee/models/texteditorcommandmap.cpp \
+ $$PWD/edbee/models/texteditorconfig.cpp \
+ $$PWD/edbee/models/texteditorkeymap.cpp \
+ $$PWD/edbee/models/textgrammar.cpp \
+ $$PWD/edbee/models/textlexer.cpp \
+ $$PWD/edbee/models/textlinedata.cpp \
+ $$PWD/edbee/models/textrange.cpp \
+ $$PWD/edbee/models/textsearcher.cpp \
+ $$PWD/edbee/models/textundostack.cpp \
+ $$PWD/edbee/texteditorcommand.cpp \
+ $$PWD/edbee/texteditorcontroller.cpp \
+ $$PWD/edbee/texteditorwidget.cpp \
+ $$PWD/edbee/util/cascadingqvariantmap.cpp \
+ $$PWD/edbee/util/gapvector.h \
+ $$PWD/edbee/util/lineending.cpp \
+ $$PWD/edbee/util/lineoffsetvector.cpp \
+ $$PWD/edbee/util/mem/debug_allocs.cpp \
+ $$PWD/edbee/util/mem/debug_new.cpp \
+ $$PWD/edbee/util/rangelineiterator.cpp \
+ $$PWD/edbee/util/rangesetlineiterator.cpp \
+ $$PWD/edbee/util/regexp.cpp \
+ $$PWD/edbee/util/simpleprofiler.cpp \
+ $$PWD/edbee/util/test.cpp \
+ $$PWD/edbee/util/textcodec.cpp \
+ $$PWD/edbee/util/textcodecdetector.cpp \
+ $$PWD/edbee/util/util.cpp \
+ $$PWD/edbee/views/accessibletexteditorwidget.cpp \
+ $$PWD/edbee/views/components/texteditorautocompletecomponent.cpp \
+ $$PWD/edbee/views/components/texteditorcomponent.cpp \
+ $$PWD/edbee/views/components/texteditorrenderer.cpp \
+ $$PWD/edbee/views/components/textmargincomponent.cpp \
+ $$PWD/edbee/views/textcaretcache.cpp \
+ $$PWD/edbee/views/texteditorscrollarea.cpp \
+ $$PWD/edbee/views/textlayout.cpp \
+ $$PWD/edbee/views/textrenderer.cpp \
+ $$PWD/edbee/views/textselection.cpp \
+ $$PWD/edbee/views/texttheme.cpp
+
+HEADERS += \
+ $$PWD/edbee/commands/commentcommand.h \
+ $$PWD/edbee/commands/copycommand.h \
+ $$PWD/edbee/commands/cutcommand.h \
+ $$PWD/edbee/commands/debugcommand.h \
+ $$PWD/edbee/commands/duplicatecommand.h \
+ $$PWD/edbee/commands/findcommand.h \
+ $$PWD/edbee/commands/movelinecommand.h \
+ $$PWD/edbee/commands/newlinecommand.h \
+ $$PWD/edbee/commands/pastecommand.h \
+ $$PWD/edbee/commands/redocommand.h \
+ $$PWD/edbee/commands/removecommand.h \
+ $$PWD/edbee/commands/replaceselectioncommand.h \
+ $$PWD/edbee/commands/selectioncommand.h \
+ $$PWD/edbee/commands/tabcommand.h \
+ $$PWD/edbee/commands/togglereadonlycommand.h \
+ $$PWD/edbee/commands/undocommand.h \
+ $$PWD/edbee/data/factorycommandmap.h \
+ $$PWD/edbee/data/factorykeymap.h \
+ $$PWD/edbee/debug.h \
+ $$PWD/edbee/edbee.h \
+ $$PWD/edbee/exports.h \
+ $$PWD/edbee/io/baseplistparser.h \
+ $$PWD/edbee/io/jsonparser.h \
+ $$PWD/edbee/io/keymapparser.h \
+ $$PWD/edbee/io/textdocumentserializer.h \
+ $$PWD/edbee/io/tmlanguageparser.h \
+ $$PWD/edbee/io/tmthemeparser.h \
+ $$PWD/edbee/lexers/grammartextlexer.h \
+ $$PWD/edbee/models/change.h \
+ $$PWD/edbee/models/changes/abstractrangedchange.h \
+ $$PWD/edbee/models/changes/linedatachange.h \
+ $$PWD/edbee/models/changes/linedatalistchange.h \
+ $$PWD/edbee/models/changes/mergablechangegroup.h \
+ $$PWD/edbee/models/changes/selectionchange.h \
+ $$PWD/edbee/models/changes/textchange.h \
+ $$PWD/edbee/models/changes/textchangewithcaret.h \
+ $$PWD/edbee/models/chardocument/chartextbuffer.h \
+ $$PWD/edbee/models/chardocument/chartextdocument.h \
+ $$PWD/edbee/models/dynamicvariables.h \
+ $$PWD/edbee/models/textautocompleteprovider.h \
+ $$PWD/edbee/models/textbuffer.h \
+ $$PWD/edbee/models/textdocument.h \
+ $$PWD/edbee/models/textdocumentfilter.h \
+ $$PWD/edbee/models/textdocumentscopes.h \
+ $$PWD/edbee/models/texteditorcommandmap.h \
+ $$PWD/edbee/models/texteditorconfig.h \
+ $$PWD/edbee/models/texteditorkeymap.h \
+ $$PWD/edbee/models/textgrammar.h \
+ $$PWD/edbee/models/textlexer.h \
+ $$PWD/edbee/models/textlinedata.h \
+ $$PWD/edbee/models/textrange.h \
+ $$PWD/edbee/models/textsearcher.h \
+ $$PWD/edbee/models/textundostack.h \
+ $$PWD/edbee/texteditorcommand.h \
+ $$PWD/edbee/texteditorcontroller.h \
+ $$PWD/edbee/texteditorwidget.h \
+ $$PWD/edbee/util/cascadingqvariantmap.h \
+ $$PWD/edbee/util/lineending.h \
+ $$PWD/edbee/util/lineoffsetvector.h \
+ $$PWD/edbee/util/logging.h \
+ $$PWD/edbee/util/mem/debug_allocs.h \
+ $$PWD/edbee/util/mem/debug_new.h \
+ $$PWD/edbee/util/rangelineiterator.h \
+ $$PWD/edbee/util/rangesetlineiterator.h \
+ $$PWD/edbee/util/regexp.h \
+ $$PWD/edbee/util/simpleprofiler.h \
+ $$PWD/edbee/util/test.h \
+ $$PWD/edbee/util/textcodec.h \
+ $$PWD/edbee/util/textcodecdetector.h \
+ $$PWD/edbee/util/util.h \
+ $$PWD/edbee/views/accessibletexteditorwidget.h \
+ $$PWD/edbee/views/components/texteditorautocompletecomponent.h \
+ $$PWD/edbee/views/components/texteditorcomponent.h \
+ $$PWD/edbee/views/components/texteditorrenderer.h \
+ $$PWD/edbee/views/components/textmargincomponent.h \
+ $$PWD/edbee/views/textcaretcache.h \
+ $$PWD/edbee/views/texteditorscrollarea.h \
+ $$PWD/edbee/views/textlayout.h \
+ $$PWD/edbee/views/textrenderer.h \
+ $$PWD/edbee/views/textselection.h \
+ $$PWD/edbee/views/texttheme.h
+
+## Extra dependencies
+##====================
+include($$PWD/../vendor/qslog/QsLog.pri)
+include($$PWD/../vendor/onig/onig.pri)
+
+## Files that can usefully listed inside Qt IDE (Qt Creator, as "Other files")
+##============================================================================
+DISTFILES += \
+ $$PWD/../CHANGELOG.md \
+ $$PWD/../LICENSE \
+ $$PWD/../README.md \
+ $$PWD/../.travis.yml \
+ $$PWD/../.gitignore \
+ $$PWD/../CMakeLists.txt \
+ $$PWD/../CI/travis.install.sh \
+ $$PWD/../CI/travis.osx.install.sh \
+ $$PWD/../CI/travis.before_install.sh \
+ $$PWD/../CI/travis.osx.before_install.sh \
+ $$PWD/CMakeLists.txt \
+ $$PWD/Doxyfile \
+ $$PWD/doc/coding-style.md \
+ $$PWD/doc/index.md \
+ $$PWD/images/doc-logo.png
diff --git a/lib/edbee-lib/edbee-lib.pro b/lib/edbee-lib/edbee-lib.pro
new file mode 100644
index 00000000..eaf8e7f1
--- /dev/null
+++ b/lib/edbee-lib/edbee-lib.pro
@@ -0,0 +1,33 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2013-01-03T08:11:25
+#
+#-------------------------------------------------
+
+QT += core gui widgets
+
+# for the time being:
+greaterThan(QT_MAJOR_VERSION,5): QT += core5compat
+
+
+TARGET = edbee
+TEMPLATE = lib
+CONFIG += staticlib
+
+# Define EDBEE_BEGUG to enable memory debugging
+DEFINES += EDBEE_DEBUG
+
+# DEFINE 'EDBEE_SANITIZE' to enable santitize bounds checks
+EDBEE_SANITIZE = $$(EDBEE_SANITIZE)
+!isEmpty( EDBEE_SANITIZE ) {
+ warning('*** SANITIZE ENABLED! edbee-lib ***')
+ QMAKE_CXXFLAGS+=-fsanitize=address -fsanitize=bounds -fsanitize-undefined-trap-on-error
+ QMAKE_LFLAGS+=-fsanitize=address -fsanitize=bounds -fsanitize-undefined-trap-on-error
+}
+
+# This seems to be required for Windows
+INCLUDEPATH += $$PWD
+DEPENDPATH += $$PWD
+DEFINES += QT_NODLL
+
+include(edbee-lib.pri)
diff --git a/lib/edbee-lib/edbee/commands/commentcommand.cpp b/lib/edbee-lib/edbee/commands/commentcommand.cpp
new file mode 100644
index 00000000..bfb30dee
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/commentcommand.cpp
@@ -0,0 +1,524 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "commentcommand.h"
+
+#include "edbee/edbee.h"
+#include "edbee/models/dynamicvariables.h"
+#include "edbee/models/textlexer.h"
+#include "edbee/models/texteditorconfig.h"
+#include "edbee/models/textbuffer.h"
+#include "edbee/models/textdocument.h"
+#include "edbee/models/textdocumentscopes.h"
+#include "edbee/views/textselection.h"
+#include "edbee/texteditorcontroller.h"
+#include "edbee/util/rangelineiterator.h"
+#include "edbee/util/regexp.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+// TODO, we need to rewrite this for improved testability
+// TODO, this code can be much clearer, if we let go of the TM_ structure!!
+
+/// A helper structures for storing comment start and end definitions
+class CommentDefinitionItem
+{
+public:
+ /// constructs the definition
+ CommentDefinitionItem(const QString &startIn, const QString &endIn)
+ : start_(startIn)
+ , end_(endIn)
+ , commentStartRegExp_(0)
+ , removeCommentStartRegeExp_(0)
+ {
+ }
+
+ /// the destructor
+ virtual ~CommentDefinitionItem()
+ {
+ delete removeCommentStartRegeExp_;
+ delete commentStartRegExp_;
+ }
+
+ /// returns the start regular expression
+ const QString &start() { return start_; }
+
+ /// returns the end regular expression
+ const QString &end() { return end_; }
+
+ /// returns true if the definition is a block comment
+ bool isBlockComment() { return !end_.isEmpty(); }
+
+ /// creates the regexp for the start regular expression
+ RegExp *commentStartRegExp()
+ {
+ if (!commentStartRegExp_)
+ {
+ commentStartRegExp_ = new RegExp(
+ QStringLiteral("^\\s*%1").arg(RegExp::escape(start().trimmed())));
+ }
+ return commentStartRegExp_;
+ }
+
+ /// creates the regexp for removing a comment
+ RegExp *removeCommentStartRegeExp()
+ {
+ if (!removeCommentStartRegeExp_)
+ {
+ removeCommentStartRegeExp_
+ = new RegExp(QStringLiteral("^[^\\S\n]*(%1[^\\S\n]?)")
+ .arg(RegExp::escape(start().trimmed())));
+ }
+ return removeCommentStartRegeExp_;
+ }
+
+private:
+ QString start_;
+ QString end_;
+ RegExp *commentStartRegExp_;
+ RegExp *removeCommentStartRegeExp_;
+};
+
+/// A class to temporary store all comment definitions for the current scope
+/// placed in a class so we can make use of
+class CommentDefinition
+{
+public:
+ /// the destructor deletes all mail comment definitions
+ ~CommentDefinition() { qDeleteAll(commentDefinitionList_); }
+
+ /// returns a reference to the list for direct access
+ QList &list() { return commentDefinitionList_; }
+
+ /// this method returns the first comment definition with the given criteria
+ /// It return 0 if no block definition has been found
+ /// @param block should we find a block definition
+ CommentDefinitionItem *findDefinition(bool block)
+ {
+ foreach (CommentDefinitionItem *item, commentDefinitionList_)
+ {
+ if (block == item->isBlockComment())
+ {
+ return item;
+ }
+ }
+ return 0;
+ }
+
+private:
+ QList commentDefinitionList_;
+};
+
+//--------------------------------
+
+/// This method checks if all lines are comment
+/// @param doc the document to check
+/// @param range the range for checking all commented lines
+/// @param commentStart the text used as the line comment prefix
+/// @return true if all lines are commented
+static bool
+areAllLinesCommented(TextDocument *doc, TextRange &range,
+ const QList &definitions)
+{
+
+ // we directly check in the buffer for fast regexp without QString creation
+ TextBuffer *buf = doc->buffer();
+
+ // iterate over all lines
+ RangeLineIterator itr(doc, range);
+ while (itr.hasNext())
+ {
+
+ int line = itr.next();
+ int lineLength = doc->lineLengthWithoutNewline(line);
+
+ // when it's the last line and its blank, we must skip it
+ if (!itr.hasNext() && lineLength == 0)
+ {
+ continue;
+ }
+
+ // directly search in the raw data pointer buffer to prevent QString
+ // creation
+ int offset = doc->offsetFromLine(line);
+
+ // iterate over all line definitions
+ bool found = false;
+ foreach (CommentDefinitionItem *def, definitions)
+ {
+
+ // skip block comments
+ if (def->isBlockComment())
+ {
+ continue;
+ }
+
+ RegExp *commentStartRegExp = def->commentStartRegExp();
+
+ /// toggle the found flag if a comment is found and break
+ if (commentStartRegExp->indexIn(buf->rawDataPointer(), offset,
+ offset + doc->lineLength(line) - 1)
+ >= 0)
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if (!found)
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+/// removes all line comments from the iven line
+/// @param doc the document to change
+/// @param range the range to remove the comments
+/// @param commentStart the text used as the line comment prefix
+static void removeLineComment(TextDocument *doc, TextRange &range,
+ const QList &definitions)
+{
+ // RegExp regExp( QStringLiteral("^[^\\S\n]*(%1[^\\S\n]?)").arg(
+ // RegExp::escape(commentStart.trimmed() ) ) );
+ TextBuffer *buf = doc->buffer();
+
+ // iterate over all lines and build all ranges
+ RangeLineIterator itr(doc, range);
+ while (itr.hasNext())
+ {
+
+ // directly search in the raw data pointer buffer to prevent QString
+ // creation
+ int line = itr.next();
+ int offset = doc->offsetFromLine(line);
+
+ // iterate over alll definitions
+ foreach (CommentDefinitionItem *def, definitions)
+ {
+
+ // skip block comments
+ if (def->isBlockComment())
+ {
+ continue;
+ }
+
+ RegExp *regExp = def->removeCommentStartRegeExp();
+
+ // perform a regexp to extract the comment that needs to be removed
+ if (regExp->indexIn(buf->rawDataPointer(), offset,
+ offset + doc->lineLength(line))
+ >= 0)
+ {
+
+ // remove the found regexp and goto the next line
+ doc->replace(regExp->pos(1), regExp->len(1), "");
+ break;
+ }
+ }
+ }
+}
+
+/// Adds comments on all line starts
+/// @param doc the document to insert the comment
+/// @param range the textrange to insert comments
+/// @param str the comment prefix
+static void insertLineComments(TextDocument *doc, TextRange &range,
+ const QString &str)
+{
+ TextBuffer *buf = doc->buffer();
+
+ // iterate over all lines and build all ranges
+ RangeLineIterator itr(doc, range);
+ while (itr.hasNext())
+ {
+
+ // directly search in the raw data pointer buffer to prevent QString
+ // creation
+ int line = itr.next();
+ int offset = doc->offsetFromLine(line);
+ int lineLength = doc->lineLengthWithoutNewline(line);
+
+ // when it's the last line and its blank, we must skip it
+ if (!itr.hasNext() && lineLength == 0)
+ {
+ continue;
+ }
+
+ // when there's no comment found at this line return false
+ int wordStart = buf->findCharPosWithinRangeOrClamp(
+ offset, 1, doc->config()->whitespaces(), false, offset,
+ offset + lineLength);
+ doc->replace(wordStart, 0, str);
+ }
+}
+
+/// Removes a block comment if possible
+/// @param controller the controller to perform the operation on
+/// @param range the current textrange
+/// @param commentStart the start of the commment
+/// @param commentEnd the end of the comment
+/// @return this method returns true if the block comment was remoed
+static bool
+removeBlockComment(TextEditorController *controller, TextRange &range,
+ const QList &definitions)
+{
+ TextDocument *doc = controller->textDocument();
+ TextDocumentScopes *scopes = doc->scopes();
+
+ // it seems that every language in sublime/textmate use the comment.block
+ // convention
+ TextScope *blockCommentScope
+ = Edbee::instance()->scopeManager()->refTextScope("comment.block");
+
+ // we only fetch multi-line scoped textranges
+ int middleRange = range.min() + (range.max() - range.min()) / 2;
+
+ // With this uberdirty for loop, we also check if there's a commentscope
+ // 1 character to the left. (this is required to fix the uncommnt block issue
+ // when the caret is next to the comment :)
+ for (int i = 0; middleRange && i < 2; ++i)
+ {
+
+ QVector scopedRanges
+ = scopes->createScopedRangesAtOffsetList(middleRange);
+
+ foreach (ScopedTextRange *scopedRange, scopedRanges)
+ {
+ TextScope *scope = scopedRange->scope();
+
+ // did we found a block comment
+ if (scope->startsWith(blockCommentScope))
+ {
+ int min = scopedRange->min();
+ int max = scopedRange->max();
+
+ // check all 'block' comments
+ foreach (CommentDefinitionItem *def, definitions)
+ {
+
+ // skip if not a blockcomment
+ if (!def->isBlockComment())
+ {
+ continue;
+ }
+
+ const QString &commentStart = def->start();
+ const QString &commentEnd = def->end();
+
+ // when the scope starts and ends with the comment start and end
+ // remove it
+ if (doc->textPart(min, commentStart.length()) == commentStart
+ && doc->textPart(max - commentEnd.length(), commentEnd.length())
+ == commentEnd)
+ {
+
+ // * warning! * we cannot use the scoped rangeset directly
+ // when we replace a text, the scoped rangeset could be invalidated
+ // and destroyed!
+
+ // next remove the range
+ doc->replace(min, commentStart.length(), "");
+ doc->replace(max - commentEnd.length() - commentStart.length(),
+ commentEnd.length(), "");
+
+ qDeleteAll(scopedRanges);
+ return true;
+ }
+ }
+ }
+ }
+ qDeleteAll(scopedRanges);
+
+ // 1 char to the left
+ --middleRange;
+ }
+ return false;
+}
+
+/// Insert a block comment
+/// Adds a comment start and end around the current text range.
+/// If the textrange is empty, it first is expanded to a full line
+/// @param controller the controller to insert a comment for
+/// @param range the range to insert a block comment for
+/// @param commentStart the start of the comment
+/// @param commentEnd the end of the comment
+/// @return the last affected range
+static int insertBlockComment(TextEditorController *controller,
+ TextRange &range, const QString &commentStart,
+ const QString &commentEnd)
+{
+ TextDocument *doc = controller->textDocument();
+
+ // for safety I don't use the range anymore. It's adjusted automatically, but
+ // could in theory vanish
+ int min = range.min();
+ int max = range.max();
+
+ // when the range is 'blank' expand it to a full line
+ if (range.isEmpty())
+ {
+ int line = doc->lineFromOffset(min);
+ min = doc->offsetFromLine(line);
+ max = min + doc->lineLengthWithoutNewline(line);
+ // range.expandToFullLine(doc,0);
+ // range.deselectTrailingNewLine(doc);
+ }
+
+ doc->replace(min, 0, commentStart);
+ doc->replace(max + commentStart.length(), 0, commentEnd);
+
+ return max + commentStart.length() + commentEnd.length();
+}
+
+/// Collect all active comment structures
+static bool getCommentDefinitions(TextEditorController *controller,
+ TextRange &range,
+ QList &definitions)
+{
+ TextDocument *doc = controller->textDocument();
+ TextDocumentScopes *scopes = doc->scopes();
+
+ // retrieve the starting scope
+ TextScopeList startScopeList = scopes->scopesAtOffset(range.min(), true);
+
+ // next find all comment definitions
+ QString padding;
+ int index = 1;
+ do
+ {
+ // retrieve the comment start
+ // when there's no comment start then we're done
+ QString commentStart
+ = controller->dynamicVariables()
+ ->value(QStringLiteral("TM_COMMENT_START%1").arg(padding),
+ &startScopeList)
+ .toString();
+ if (commentStart.isEmpty())
+ {
+ break;
+ }
+
+ // when there's a start there could be an ending (for block comments)
+ QString commentEnd
+ = controller->dynamicVariables()
+ ->value(QStringLiteral("TM_COMMENT_END%1").arg(padding),
+ &startScopeList)
+ .toString();
+ definitions.push_back(new CommentDefinitionItem(commentStart, commentEnd));
+
+ // increase the index and change the padding
+ ++index;
+ padding = QStringLiteral("_%1").arg(index);
+ } while (true);
+
+ // return true if the comment isn't empty
+ return !definitions.isEmpty();
+}
+
+/// Comments the given range
+/// @param controller the controller that conatins the controller
+/// @param range the range to comment
+/// @return the last affected offset
+static int commentRange(TextEditorController *controller, TextRange &range,
+ bool block)
+{
+ CommentDefinition defs;
+ // retrieve all comment definitions
+ if (!getCommentDefinitions(controller, range, defs.list()))
+ {
+ return range.max();
+ }
+
+ // here we need to remove an active block comment, if there is one
+ if (removeBlockComment(controller, range, defs.list()))
+ {
+ return range.max();
+ }
+
+ // find the first block definition
+ CommentDefinitionItem *blockDef = defs.findDefinition(true);
+ CommentDefinitionItem *lineDef = defs.findDefinition(false);
+
+ // check if we need to do a block comment
+ if (blockDef && (block || !lineDef))
+ {
+ return insertBlockComment(controller, range, blockDef->start(),
+ blockDef->end());
+
+ // check if we need to perform a line comment
+ }
+ else if (lineDef)
+ {
+ TextDocument *doc = controller->textDocument();
+
+ // we need to remove all comments
+ if (areAllLinesCommented(doc, range, defs.list()))
+ {
+ removeLineComment(doc, range, defs.list());
+
+ // add comments
+ }
+ else
+ {
+ insertLineComments(doc, range, lineDef->start());
+ }
+ }
+ return range.max();
+}
+
+//---------------------------
+
+/// constructs the comment comment
+/// @param block should we try a block comment
+CommentCommand::CommentCommand(bool block)
+ : block_(block)
+{
+}
+
+/// Executes the given comment
+/// @param controller the controller this command is executed for
+void CommentCommand::execute(TextEditorController *controller)
+{
+ // iterate over all ranges
+ TextRangeSet *selection
+ = new DynamicTextRangeSet(controller->textSelection());
+ TextDocument *doc = controller->textDocument();
+
+ // start changing the document
+ // int lastOffset = -1;
+
+ doc->beginChanges(controller);
+ for (int i = 0, cnt = selection->rangeCount(); i < cnt; ++i)
+ {
+
+ TextRange range = selection->range(i);
+
+ // assert the ranges are all lexed!
+ controller->textDocument()->textLexer()->lexRange(range.min(), range.max());
+
+ // comment the range and get the last offset
+ // lastOffset = commentRange( controller, range, block_ );
+ commentRange(controller, range, block_);
+ }
+
+ doc->giveSelection(controller, selection);
+ doc->endChanges(0);
+
+ // the following call shouldn't be necessary
+ controller->update();
+}
+
+/// converts this command to a string
+QString CommentCommand::toString()
+{
+ return "CommentCommand";
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/commentcommand.h b/lib/edbee-lib/edbee/commands/commentcommand.h
new file mode 100644
index 00000000..6aeb95d5
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/commentcommand.h
@@ -0,0 +1,34 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include
+
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+class TextEditorController;
+
+/// This command is used for commenting / decommenting a line
+/// We cannot implement this truely at the moment, we first need support for
+/// making scope-based 'environment-variables' so we can creating something like
+/// TM_COMMENT_START
+class EDBEE_EXPORT CommentCommand : public TextEditorCommand
+{
+public:
+ CommentCommand(bool block);
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+
+private:
+ bool block_; ///< When this flag is set it uses a block comment (if possible)
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/copycommand.cpp b/lib/edbee-lib/edbee/commands/copycommand.cpp
new file mode 100644
index 00000000..a5f96cab
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/copycommand.cpp
@@ -0,0 +1,67 @@
+/**
+ * Copyright 2011-2012 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "copycommand.h"
+
+#include
+#include
+#include
+
+#include "edbee/texteditorcontroller.h"
+#include "edbee/views/textselection.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// An internal mime-type, used for identifying special copy/paste operations of
+/// edbee
+const QString CopyCommand::EDBEE_TEXT_TYPE("application/vnd.edbee.text-type");
+
+/// Copies the current selection to the clipboard
+void CopyCommand::execute(TextEditorController *controller)
+{
+ QClipboard *clipboard = QApplication::clipboard();
+ TextSelection *sel = controller->textSelection();
+
+ // get the selected text
+ QString str = sel->getSelectedText();
+ if (!str.isEmpty())
+ {
+ clipboard->setText(str);
+
+ // perform a full-lines copy.. The full line of the caret's position is
+ // copied
+ }
+ else
+ {
+
+ str = sel->getSelectedTextExpandedToFullLines();
+
+ // we don't want to detect a memory leak because Qt is going to delete our
+ // mime data
+ edbee::pause_memleak_detection(true);
+ QMimeData *mimeData = new QMimeData();
+ edbee::pause_memleak_detection(false);
+ mimeData->setText(str);
+ mimeData->setData(EDBEE_TEXT_TYPE, "line");
+ clipboard->setMimeData(mimeData);
+ // delete mimeData;
+ }
+}
+
+/// Convers this command to string
+QString CopyCommand::toString()
+{
+ return "CopyCommand";
+}
+
+bool CopyCommand::readonly()
+{
+ return true;
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/copycommand.h b/lib/edbee-lib/edbee/commands/copycommand.h
new file mode 100644
index 00000000..814fe445
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/copycommand.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright 2011-2012 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include
+
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+class TextEditorController;
+
+/// This command is used for copying data to the clipboard
+class EDBEE_EXPORT CopyCommand : public TextEditorCommand
+{
+public:
+ static const QString EDBEE_TEXT_TYPE;
+
+public:
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+ virtual bool readonly() override;
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/cutcommand.cpp b/lib/edbee-lib/edbee/commands/cutcommand.cpp
new file mode 100644
index 00000000..21c15641
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/cutcommand.cpp
@@ -0,0 +1,88 @@
+/**
+ * Copyright 2011-2012 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "cutcommand.h"
+
+#include
+#include
+#include
+
+#include "edbee/commands/copycommand.h"
+
+#include "edbee/models/textdocument.h"
+#include "edbee/models/change.h"
+#include "edbee/models/textrange.h"
+#include "edbee/models/textundostack.h"
+#include "edbee/texteditorcontroller.h"
+#include "edbee/views/textselection.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// Performs the cut command
+/// @param controller the controller context
+void CutCommand::execute(TextEditorController *controller)
+{
+ QClipboard *clipboard = QApplication::clipboard();
+ TextRangeSet *sel = controller->textSelection();
+
+ // get the selected text
+ QString str = sel->getSelectedText();
+ if (!str.isEmpty())
+ {
+ clipboard->setText(str);
+ controller->replaceSelection("", 0);
+ return;
+
+ // perform a full-lines cut
+ }
+ else
+ {
+
+ // fetch the selected lines
+ TextRangeSet newSel(*sel);
+ newSel.expandToFullLines(1);
+ str = newSel.getSelectedText();
+
+ // we only coalesce if 1 range is available
+ int coalesceId = (sel->rangeCount() != 1) ? 0 : CoalesceId_CutLine;
+
+ // when the previous command was a cut
+ // and there's a line on the stack, we need to expand the line
+ if (controller->textDocument()
+ ->textUndoStack()
+ ->lastCoalesceIdAtCurrentLevel()
+ == CoalesceId_CutLine)
+ {
+ QClipboard *clipboard = QApplication::clipboard();
+ const QMimeData *mimeData = clipboard->mimeData();
+ if (mimeData->hasFormat(CopyCommand::EDBEE_TEXT_TYPE))
+ {
+ str = mimeData->text() + str;
+ }
+ }
+
+ // set the new clipboard data
+ QMimeData *mimeData = new QMimeData();
+ mimeData->setText(str);
+ mimeData->setData(CopyCommand::EDBEE_TEXT_TYPE, "line");
+ clipboard->setMimeData(mimeData);
+ // delete mimeData;
+
+ // remove the selection
+ controller->replaceRangeSet(newSel, "", coalesceId);
+ return;
+ }
+}
+
+/// Converts this command to a string
+QString CutCommand::toString()
+{
+ return "CutCommand";
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/cutcommand.h b/lib/edbee-lib/edbee/commands/cutcommand.h
new file mode 100644
index 00000000..3f65353e
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/cutcommand.h
@@ -0,0 +1,28 @@
+/**
+ * Copyright 2011-2012 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+class TextEditorController;
+
+/// Performs a cut command. The cut command removes the selected content
+/// and places onto the clipboard.
+///
+/// When pressing cut without selection, the full line is cut
+class EDBEE_EXPORT CutCommand : public TextEditorCommand
+{
+public:
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/debugcommand.cpp b/lib/edbee-lib/edbee/commands/debugcommand.cpp
new file mode 100644
index 00000000..88a0c34b
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/debugcommand.cpp
@@ -0,0 +1,120 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "debugcommand.h"
+
+#include "edbee/models/textdocument.h"
+#include "edbee/models/textdocumentscopes.h"
+#include "edbee/models/textlexer.h"
+#include "edbee/models/textrange.h"
+#include "edbee/models/textundostack.h"
+#include "edbee/texteditorcontroller.h"
+#include "edbee/views/textselection.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+DebugCommand::DebugCommand(DebugCommandType command)
+ : command_(command)
+{
+}
+
+void DebugCommand::execute(TextEditorController *controller)
+{
+ switch (command_)
+ {
+ case DumpScopes:
+ dumpScopes(controller);
+ break;
+ case RebuildScopes:
+ rebuildScopes(controller);
+ break;
+ case DumpUndoStack:
+ dumpUndoStack(controller);
+ break;
+ case DumpCharacterCodes:
+ dumpCharacterCodes(controller);
+ break;
+ }
+}
+
+QString DebugCommand::toString()
+{
+ return "DebugCommand";
+}
+
+bool DebugCommand::readonly()
+{
+ return true;
+}
+
+/// This method dumps the scopes
+void DebugCommand::dumpScopes(TextEditorController *controller)
+{
+ TextDocumentScopes *scopes = controller->textDocument()->scopes();
+ QString dump = "\nMultiLineScopes:---\n";
+ dump.append(QString(scopes->toString()).replace("|", "\n"));
+
+ dump.append("\nPer Line:---\n");
+ for (int i = 0; i < scopes->scopedLineCount(); ++i)
+ {
+ ScopedTextRangeList *range = scopes->scopedRangesAtLine(i);
+ dump.append(QStringLiteral("%1: %2\n").arg(i).arg(range->toString()));
+ }
+
+ qlog_info() << dump;
+}
+
+/// rebuilds all scopes
+void DebugCommand::rebuildScopes(TextEditorController *controller)
+{
+ TextDocument *document = controller->textDocument();
+ TextDocumentScopes *scopes = document->scopes();
+ TextLexer *lexer = document->textLexer();
+
+ /// lex the complete document
+ scopes->removeScopesAfterOffset(0);
+ lexer->lexRange(0, document->length());
+}
+
+/// dumps the undostack
+void DebugCommand::dumpUndoStack(TextEditorController *controller)
+{
+ qlog_info() << controller->textDocument()->textUndoStack()->dumpStack();
+}
+
+/// dumps the character codes (around the FIRST caret)
+void DebugCommand::dumpCharacterCodes(TextEditorController *controller)
+{
+ static int count = 3; // 2 chars before caret and 2 chars after caret
+
+ // get the current range
+ TextSelection *sel = controller->textSelection();
+ TextRange range = sel->range(0);
+
+ QString line;
+
+ // iterate over the characters
+ int start = qMax(range.caret() - count, 0);
+ int end
+ = qMin(range.caret() + count, controller->textDocument()->length() - 1);
+ for (int i = start; i <= end; ++i)
+ {
+ QChar c = controller->textDocument()->charAt(i);
+ if (i == range.caret())
+ {
+ line.append("| ");
+ }
+
+ line.append(QString::number((int)c.unicode(), 16));
+ line.append(" ");
+ }
+
+ qlog_info() << "charcodes: " << line;
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/debugcommand.h b/lib/edbee-lib/edbee/commands/debugcommand.h
new file mode 100644
index 00000000..9cb180c9
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/debugcommand.h
@@ -0,0 +1,45 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+/// A debug command, for simply suppling/dumping some editor state information
+/// to the console
+class EDBEE_EXPORT DebugCommand : public TextEditorCommand
+{
+public:
+ enum DebugCommandType
+ {
+ DumpScopes,
+ RebuildScopes,
+ DumpUndoStack,
+ DumpCharacterCodes
+ };
+
+ DebugCommand(DebugCommandType command);
+
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+ virtual bool readonly() override;
+
+protected:
+ void dumpScopes(TextEditorController *controller);
+ void rebuildScopes(TextEditorController *controller);
+
+ void dumpUndoStack(TextEditorController *controller);
+ void dumpCharacterCodes(TextEditorController *controller);
+
+private:
+ DebugCommandType command_; ///< the command to execute
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/duplicatecommand.cpp b/lib/edbee-lib/edbee/commands/duplicatecommand.cpp
new file mode 100644
index 00000000..ffdfe8b9
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/duplicatecommand.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "duplicatecommand.h"
+
+#include "edbee/models/changes/mergablechangegroup.h"
+#include "edbee/models/textdocument.h"
+#include "edbee/models/textrange.h"
+#include "edbee/views/textselection.h"
+#include "edbee/texteditorcontroller.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// Executes the duplication command
+/// @param controller the active controller
+void DuplicateCommand::execute(TextEditorController *controller)
+{
+ // create a new range set and the new texts
+ TextRangeSet newRanges(controller->textSelection());
+ TextRangeSet *newSelection = new TextRangeSet(controller->textSelection());
+ QStringList newTexts;
+ TextDocument *doc = controller->textDocument();
+
+ // iterate over all range and build the new texts to insert
+ int delta = 0;
+ for (int i = 0, cnt = newRanges.rangeCount(); i < cnt; ++i)
+ {
+ TextRange &range = newRanges.range(i);
+
+ // when the range is empty we need to use the complete line line (inclusive
+ // the newline)
+ if (range.isEmpty())
+ {
+
+ // get the complete line
+ int line = doc->lineFromOffset(range.caret());
+ range.setCaret(doc->offsetFromLine(line));
+ range.setAnchor(range.caret());
+ newTexts.append(
+ QStringLiteral("%1\n").arg(doc->lineWithoutNewline(line)));
+ }
+ else
+ {
+
+ // append the new text, and change the insert position to the place before
+ // the caret :)
+ newTexts.append(doc->textPart(range.min(), range.length()));
+ range.maxVar() = range.min();
+ }
+
+ // change the spatial of the new selection
+ // insert the spatial at the caret position.
+ // we only insert text so the length = 0 and the new length is the length of
+ // the inserted text
+ int length = newTexts.last().length();
+ newSelection->changeSpatial(range.caret() + delta, 0, length);
+ delta += length;
+ }
+
+ // replace the texts
+ doc->beginChanges(controller);
+ doc->replaceRangeSet(newRanges, newTexts);
+ doc->giveSelection(controller, newSelection);
+ doc->endChanges(CoalesceId_Duplicate);
+}
+
+/// Returns the textual representation of this command
+QString DuplicateCommand::toString()
+{
+ return "DuplicateCommand";
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/duplicatecommand.h b/lib/edbee-lib/edbee/commands/duplicatecommand.h
new file mode 100644
index 00000000..2fb7ced7
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/duplicatecommand.h
@@ -0,0 +1,25 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+/// The Duplicate command.
+/// Duplicates the selected line or text
+///
+class EDBEE_EXPORT DuplicateCommand : public TextEditorCommand
+{
+public:
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/findcommand.cpp b/lib/edbee-lib/edbee/commands/findcommand.cpp
new file mode 100644
index 00000000..8e56e819
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/findcommand.cpp
@@ -0,0 +1,143 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "findcommand.h"
+
+#include "edbee/models/texteditorconfig.h"
+#include "edbee/models/textdocument.h"
+#include "edbee/models/textrange.h"
+#include "edbee/models/textsearcher.h"
+#include "edbee/texteditorcontroller.h"
+#include "edbee/views/textselection.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// Constructs the find operation
+/// @param findType the findtype to use
+FindCommand::FindCommand(FindType findType)
+ : findType_(findType)
+{
+}
+
+/// executes this command. What happens depends mainly on the FindType
+/// @param controller the controller used for executing
+void FindCommand::execute(TextEditorController *controller)
+{
+ TextSearcher *searcher = controller->textSearcher();
+ TextRangeSet *currentSelection
+ = dynamic_cast(controller->textSelection());
+ TextDocument *doc = controller->textDocument();
+
+ // uses the current selection for find or uses the current word (doesn't
+ // require a soft undo)
+ if (findType_ == UseSelectionForFind)
+ {
+ // when empty select the word
+ TextRange range = currentSelection->range(
+ 0); // Note: No reference we're changing TextRange copy!
+ if (range.isEmpty())
+ {
+ range.expandToWord(doc, doc->config()->whitespaces(),
+ doc->config()->charGroups());
+ }
+ searcher->setSearchTerm(doc->textPart(range.min(), range.length()));
+ return;
+ }
+
+ // next process the operation and move the caret/selection
+ switch (findType_)
+ {
+
+ // finds the next match of the current selected word
+ case FindNextMatch:
+ searcher->setReverse(false);
+ searcher->findNext(controller->widget());
+ break;
+
+ // finds the previous match of the current selected word
+ case FindPreviousMatch:
+ searcher->setReverse(true);
+ searcher->findNext(controller->widget());
+ break;
+
+ // finds and selects the next match
+ case SelectNextMatch:
+ searcher->setReverse(false);
+ searcher->selectNext(controller->widget());
+ break;
+
+ // finds and selects the previous match
+ case SelectPreviousMatch:
+ searcher->setReverse(true);
+ searcher->selectNext(controller->widget());
+ break;
+
+ // selects all matches
+ case SelectAllMatches:
+ searcher->selectAll(controller->widget());
+ break;
+
+ // use the current-selection for find or selects the current word
+ case SelectUnderExpand:
+ searcher->selectUnderExpand(controller->widget(), false);
+ break;
+
+ // select all words under the given word/selection
+ case SelectAllUnder:
+ searcher->selectUnderExpand(controller->widget(), true);
+ break;
+
+ default:
+ qlog_warn() << "Warning, invalid FindCommand supplied!";
+ Q_ASSERT(false);
+ }
+
+ controller->update();
+}
+
+/// Converts this find command to a string
+/// This string describes the command (useful only for debugging purposes)
+QString FindCommand::toString()
+{
+ QString str;
+ switch (findType_)
+ {
+ case UseSelectionForFind:
+ str = "UseSelectionForFind";
+ break;
+ case FindNextMatch:
+ str = "FindNext";
+ break;
+ case FindPreviousMatch:
+ str = "FindPrevious";
+ break;
+ case SelectNextMatch:
+ str = "SelectNextMatch";
+ break;
+ case SelectPreviousMatch:
+ str = "SelectPreviousMatch";
+ break;
+ case SelectAllMatches:
+ str = "SelectAllMatches";
+ break;
+ case SelectUnderExpand:
+ str = "SelectUnderExpand";
+ break;
+ case SelectAllUnder:
+ str = "SelectAllUnder";
+ break;
+ }
+ return QStringLiteral("FindCommand(%1)").arg(str);
+}
+
+bool FindCommand::readonly()
+{
+ return true;
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/findcommand.h b/lib/edbee-lib/edbee/commands/findcommand.h
new file mode 100644
index 00000000..5849cb8d
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/findcommand.h
@@ -0,0 +1,46 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+class EDBEE_EXPORT FindCommand : public TextEditorCommand
+{
+public:
+ enum FindType
+ {
+ UseSelectionForFind, //< uses the current selection for find
+ FindNextMatch, //< finds the next match
+ FindPreviousMatch, //< finds the previous match
+ SelectNextMatch, //< adds the next match to the selection
+ SelectPreviousMatch, //< adds the previous match to the selection
+ SelectAllMatches, //< select all matches
+
+ SelectUnderExpand, ///< A smart selection: when there's no selection the
+ ///< current word is used and selected, else the next
+ ///< word is selected
+ SelectAllUnder ///< A smart selection: when there's no selection the current
+ ///< word is used, and all occurences in the document are
+ ///< selected
+
+ };
+
+ FindCommand(FindType findType);
+
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+ virtual bool readonly() override;
+
+private:
+ FindType findType_; ///< the current find-type
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/movelinecommand.cpp b/lib/edbee-lib/edbee/commands/movelinecommand.cpp
new file mode 100644
index 00000000..d63d6167
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/movelinecommand.cpp
@@ -0,0 +1,132 @@
+#include "movelinecommand.h"
+
+#include "edbee/models/change.h"
+#include "edbee/models/textdocument.h"
+#include "edbee/models/textrange.h"
+#include "edbee/texteditorcontroller.h"
+#include "edbee/views/textselection.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+MoveLineCommand::MoveLineCommand(int direction)
+ : direction_(direction)
+{
+}
+
+MoveLineCommand::~MoveLineCommand() {}
+
+/// Calculates the new ranges after moving
+/*
+static void calculateNewSelectionRanges( TextDocument* doc, TextRangeSet&
+newCaretSelection, int direction )
+{
+ for( int i=0,cnt=newCaretSelection.rangeCount(); ilineFromOffset(min);
+ int len = doc->lineLength(line-1);
+ min -= len;
+ max -= len;
+ } else {
+ int line = doc->lineFromOffset(max);
+ int len = doc->lineLength(line+1);
+ min += len;
+ max += len;
+ }
+ }
+}
+*/
+
+/// all carets in the newCaretSelection are changed in the movedRange
+void updateNewCaretSelectionForMove(TextDocument *doc,
+ TextRangeSet &newCaretSelection,
+ TextRange &movedRange, int direction)
+{
+ for (int i = 0, cnt = newCaretSelection.rangeCount(); i < cnt; ++i)
+ {
+ TextRange &newRange = newCaretSelection.range(i);
+ if (movedRange.min() <= newRange.min()
+ && newRange.max() <= movedRange.max())
+ {
+ int min = movedRange.min();
+ int max = movedRange.max();
+
+ int delta = 0;
+ if (direction < 0)
+ {
+ int line = doc->lineFromOffset(min);
+ delta = -doc->lineLength(line - 1);
+ }
+ else
+ {
+ int line = doc->lineFromOffset(max - 1); // -1 exclude the last newline
+ delta = doc->lineLength(line + 1);
+ }
+
+ newRange.setCaretBounded(doc, newRange.caret() + delta);
+ newRange.setAnchorBounded(doc, newRange.anchor() + delta);
+ }
+ }
+}
+
+void MoveLineCommand::execute(TextEditorController *controller)
+{
+ TextRangeSet *sel = controller->textSelection();
+ TextDocument *doc = controller->textDocument();
+
+ // expand the selection in full-lines
+ TextRangeSet moveRangeSet(*sel);
+ moveRangeSet.expandToFullLines(1);
+ moveRangeSet.mergeOverlappingRanges(true);
+
+ // because of the full-line expansion, we can assume that 0 means at the first
+ // line moving up on the first line is impossible
+ int firstOffset = moveRangeSet.firstRange().minVar();
+ if (firstOffset + direction_ <= 0)
+ return;
+
+ int lastOffset = moveRangeSet.lastRange().maxVar();
+ if (lastOffset + direction_ > doc->length())
+ return;
+
+ // Calculate the new caret positions
+ TextRangeSet newCaretSelection(*sel);
+ for (int i = 0, cnt = moveRangeSet.rangeCount(); i < cnt; ++i)
+ {
+ TextRange &range = moveRangeSet.range(i);
+ updateNewCaretSelectionForMove(doc, newCaretSelection, range, direction_);
+ }
+
+ // move the text in the correct direciton
+ controller->beginUndoGroup();
+ for (int i = 0, cnt = moveRangeSet.rangeCount(); i < cnt; ++i)
+ {
+ TextRange &range = moveRangeSet.range(i);
+
+ int line = doc->lineFromOffset(range.min());
+ QString text = doc->textPart(range.min(), range.length());
+
+ controller->replace(range.min(), range.length(), QStringLiteral(),
+ 0); // remove the line
+ controller->replace(doc->offsetFromLine(line + direction_), 0, text,
+ 0); // add the line back
+ }
+
+ *sel = newCaretSelection; // change the selection
+
+ int coalesceID = CoalesceId_MoveLine + direction_ + 10;
+ controller->endUndoGroup(coalesceID, false);
+}
+
+QString MoveLineCommand::toString()
+{
+ return "MoveLineCommand";
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/movelinecommand.h b/lib/edbee-lib/edbee/commands/movelinecommand.h
new file mode 100644
index 00000000..d81bd604
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/movelinecommand.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "edbee/exports.h"
+
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+/// moves
+class EDBEE_EXPORT MoveLineCommand : public TextEditorCommand
+{
+public:
+ MoveLineCommand(int direction);
+ virtual ~MoveLineCommand();
+
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+
+private:
+ int direction_;
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/newlinecommand.cpp b/lib/edbee-lib/edbee/commands/newlinecommand.cpp
new file mode 100644
index 00000000..3e0ceb46
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/newlinecommand.cpp
@@ -0,0 +1,203 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "newlinecommand.h"
+
+#include "edbee/models/texteditorconfig.h"
+#include "edbee/models/textbuffer.h"
+#include "edbee/models/textdocument.h"
+#include "edbee/models/textrange.h"
+#include "edbee/texteditorcontroller.h"
+#include "edbee/util/util.h"
+#include "edbee/views/textselection.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// Constructs the newline command
+/// @param metod the method
+NewlineCommand::NewlineCommand(NewlineCommand::NewLineType method)
+ : newLineType_(method)
+{
+}
+
+/// This method calculates the required 'smart' indent value at the given
+/// positon
+/// @param controller the controller
+/// @param range the range to calculate the smart tab for
+QString NewlineCommand::calculateSmartIndent(TextEditorController *controller,
+ TextRange &range)
+{
+ QString result;
+
+ TextDocument *doc = controller->textDocument();
+ TextBuffer *buf = doc->buffer();
+ TextEditorConfig *config = doc->config();
+
+ // find the line column position
+ int caretOffset = range.min();
+ int line = doc->lineFromOffset(range.min());
+ int startOffset = doc->offsetFromLine(line);
+ int endOffset = qMin(caretOffset, doc->offsetFromLine(line + 1) - 1);
+
+ // searches for the start of the current line
+ int charPos = buf->findCharPosWithinRangeOrClamp(
+ startOffset, 1, config->whitespaceWithoutNewline(), false, startOffset,
+ endOffset);
+
+ // when the start is found
+ if (charPos > startOffset)
+ {
+
+ // we have found the column index. This isn't yet the column,
+ // because when using tab-characters the column position can be different.
+ // calculate the position by converting the tabs to spaces
+ int column = Util()
+ .convertTabsToSpaces(
+ doc->textPart(startOffset, charPos - startOffset),
+ config->indentSize())
+ .length();
+
+ // when a tab character is used, we need to add the given number of tabs
+ if (config->useTabChar())
+ {
+ int tabs = column / config->indentSize();
+ int spaces = column % config->indentSize();
+ result.append(QStringLiteral("\t").repeated(tabs));
+ if (spaces > 0)
+ {
+ result.append(QStringLiteral(" ").repeated(spaces));
+ }
+
+ // else we can add spaces to the given column position
+ }
+ else
+ {
+ result.append(QStringLiteral(" ").repeated(column));
+ }
+ }
+ return result;
+}
+
+/// Executes a 'normal' newline operation
+void NewlineCommand::executeNormalNewline(TextEditorController *controller)
+{
+ TextDocument *doc = controller->textDocument();
+ TextEditorConfig *config = doc->config();
+
+ // when no smarttab is enabled this function is simple
+ // the current selection is simple replaced by a newline :)
+ if (!config->smartTab())
+ {
+ controller->replaceSelection("\n",
+ CoalesceId_InsertNewLine + NormalNewline);
+ return;
+ }
+
+ // when we're using smart tab. We're going to indent every next line
+ // to the same level as the previous one
+ QStringList texts;
+
+ TextSelection *sel = controller->textSelection();
+ for (int i = 0, cnt = sel->rangeCount(); i < cnt; ++i)
+ {
+ TextRange &range = sel->range(i);
+
+ // add the string to insert
+ texts.push_back(
+ QStringLiteral("\n%1").arg(calculateSmartIndent(controller, range)));
+ }
+
+ // next execute the replace command
+ controller->replaceSelection(texts, CoalesceId_InsertNewLine + NormalNewline);
+}
+
+/// Executes a special newline operation. (Inserts a newline before or the
+/// current line)
+/// @param controller the controller to execute this operation for
+/// @param nextLine a nextline operation
+void NewlineCommand::executeSpecialNewline(TextEditorController *controller,
+ bool nextLine)
+{
+ TextDocument *doc = controller->textDocument();
+ TextEditorConfig *config = doc->config();
+
+ // we need to insert a newline above every caret
+ bool smart = config->smartTab();
+ doc->beginChanges(controller);
+
+ // iterate over the selection via a dynamic rangeset
+ DynamicTextRangeSet sel(controller->textSelection());
+ TextRangeSet *newSelection = new TextRangeSet(doc);
+ int lastLine = -1;
+ int lineDelta = nextLine ? 1 : 0;
+ for (int i = 0; i < sel.rangeCount(); ++i)
+ {
+
+ // only handle the line if it's another line then the previous
+ TextRange &range = sel.range(i);
+ int line = doc->lineFromOffset(range.caret());
+ if (line > lastLine)
+ {
+
+ // create a new range
+ int pos = doc->offsetFromLine(line + lineDelta) - 1;
+ TextRange newRange(pos, pos);
+
+ QString text = QStringLiteral("\n%1").arg(
+ smart ? calculateSmartIndent(controller, newRange) : "");
+
+ // replaces the text
+ doc->replace(qMax(0, newRange.caret()), 0, text);
+ newRange.setCaret(pos + text.length());
+ newRange.reset();
+
+ // add the range to the selection
+ newSelection->addRange(newRange);
+ lastLine = line;
+ }
+ }
+
+ // give the selection and end the changes
+ doc->giveSelection(controller, newSelection);
+ doc->endChanges(CoalesceId_InsertNewLine
+ + (nextLine ? AddLineAfter : AddLineBefore));
+
+ // the following call shouldn't be necessary
+ controller->update();
+}
+
+/// Executes the insert newline command
+/// @param controller the controller to execute this command for
+void NewlineCommand::execute(TextEditorController *controller)
+{
+ switch (newLineType_)
+ {
+ case NormalNewline:
+ executeNormalNewline(controller);
+ break;
+
+ case AddLineBefore:
+ executeSpecialNewline(controller, false);
+ break;
+
+ case AddLineAfter:
+ executeSpecialNewline(controller, true);
+ break;
+
+ default:
+ Q_ASSERT(false && "Invalid newLineType!");
+ }
+}
+
+/// Returns the command name
+QString NewlineCommand::toString()
+{
+ return "NewlineCommand";
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/newlinecommand.h b/lib/edbee-lib/edbee/commands/newlinecommand.h
new file mode 100644
index 00000000..923c175b
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/newlinecommand.h
@@ -0,0 +1,46 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+class TextRange;
+
+/// Inserts a newline.
+/// When smarttab is enabled it also inser leading tabs/spaces
+class EDBEE_EXPORT NewlineCommand : public TextEditorCommand
+{
+public:
+ enum NewLineType
+ {
+ NormalNewline = 0,
+ AddLineBefore = 1,
+ AddLineAfter = 2
+ };
+
+ NewlineCommand(NewLineType method);
+
+ QString calculateSmartIndent(TextEditorController *controller,
+ TextRange &range);
+
+ virtual void executeNormalNewline(TextEditorController *controller);
+
+ virtual void executeSpecialNewline(TextEditorController *controller,
+ bool nextLine);
+
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+
+private:
+ NewLineType newLineType_; ///< The current newline type
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/pastecommand.cpp b/lib/edbee-lib/edbee/commands/pastecommand.cpp
new file mode 100644
index 00000000..c6aa4858
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/pastecommand.cpp
@@ -0,0 +1,95 @@
+/**
+ * Copyright 2011-2012 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "pastecommand.h"
+
+#include
+#include
+#include
+#include
+
+#include "edbee/commands/copycommand.h"
+#include "edbee/models/changes/mergablechangegroup.h"
+#include "edbee/models/textbuffer.h"
+#include "edbee/models/change.h"
+#include "edbee/models/textdocument.h"
+#include "edbee/models/textrange.h"
+#include "edbee/texteditorcontroller.h"
+#include "edbee/views/textselection.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// Default (blank) constructor
+PasteCommand::PasteCommand() {}
+
+/// Returns the command id for coalescing this operation
+int PasteCommand::commandId()
+{
+ return CoalesceId_Paste;
+}
+
+/// Execute the paste command
+/// @param controller the controller context this operation is executed for
+void PasteCommand::execute(TextEditorController *controller)
+{
+ QClipboard *clipboard = QApplication::clipboard();
+ const QMimeData *mimeData = clipboard->mimeData();
+ QString text = clipboard->text();
+
+ TextDocument *doc = controller->textDocument();
+ TextRangeSet *sel = controller->textSelection();
+
+ // a line-based paste
+ if (mimeData && mimeData->hasFormat(CopyCommand::EDBEE_TEXT_TYPE))
+ {
+ TextRangeSet newRanges(doc);
+ for (int i = 0, cnt = sel->rangeCount(); i < cnt; ++i)
+ {
+ TextRange &range = sel->range(i);
+ int line = doc->lineFromOffset(range.min());
+ int offset = doc->offsetFromLine(line);
+ newRanges.addRange(offset, offset);
+ }
+
+ controller->replaceRangeSet(newRanges, text, commandId());
+ return;
+
+ // normal paste
+ }
+ else
+ {
+ if (!text.isEmpty())
+ {
+ int lineCount = text.count("\n") + 1;
+ int rangeCount = controller->textSelection()->rangeCount();
+
+ // multi-line/caret copy paste
+ if (lineCount == rangeCount)
+ {
+ QStringList texts = text.split("\n");
+ controller->replaceRangeSet(*controller->textSelection(), texts,
+ commandId());
+
+ // this the normal operation
+ }
+ else
+ {
+ controller->replaceSelection(text, commandId());
+ }
+ }
+ return;
+ }
+}
+
+/// Converst the command to a string (for fetching the commandname)
+QString PasteCommand::toString()
+{
+ return "PasteCommand";
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/pastecommand.h b/lib/edbee-lib/edbee/commands/pastecommand.h
new file mode 100644
index 00000000..258ece9d
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/pastecommand.h
@@ -0,0 +1,34 @@
+/**
+ * Copyright 2011-2012 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+class TextEditorController;
+
+/// Executes a paste command
+/// This usually simply pastes the text at the given location.
+/// There are two special cases:
+/// - there's a line cutting/pasing mode to copy complete lines
+/// - when the number of carets is equal to the number of lines, every line is
+/// pasted at a caret
+class EDBEE_EXPORT PasteCommand : public TextEditorCommand
+{
+public:
+ PasteCommand();
+
+ virtual int commandId();
+
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/redocommand.cpp b/lib/edbee-lib/edbee/commands/redocommand.cpp
new file mode 100644
index 00000000..d633c235
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/redocommand.cpp
@@ -0,0 +1,35 @@
+/**
+ * Copyright 2011-2012 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "redocommand.h"
+
+#include "edbee/texteditorcontroller.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+RedoCommand::RedoCommand(bool soft)
+ : soft_(soft)
+{
+}
+
+void RedoCommand::execute(TextEditorController *controller)
+{
+ controller->redo(soft_);
+}
+
+QString RedoCommand::toString()
+{
+ return QStringLiteral("RedoCommand(%1)").arg(soft_ ? "soft" : "hard");
+}
+
+bool RedoCommand::readonly()
+{
+ return soft_;
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/redocommand.h b/lib/edbee-lib/edbee/commands/redocommand.h
new file mode 100644
index 00000000..9db040d8
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/redocommand.h
@@ -0,0 +1,32 @@
+/**
+ * Copyright 2011-2012 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+class EDBEE_EXPORT RedoCommand : public TextEditorCommand
+{
+public:
+ RedoCommand(bool soft = false);
+
+ /// This method should return the command identifier
+ virtual int commandId() { return CoalesceId_None; }
+
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+ virtual bool readonly() override;
+
+private:
+ bool soft_;
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/removecommand.cpp b/lib/edbee-lib/edbee/commands/removecommand.cpp
new file mode 100644
index 00000000..46e939a5
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/removecommand.cpp
@@ -0,0 +1,249 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "removecommand.h"
+
+#include "edbee/models/changes/mergablechangegroup.h"
+#include "edbee/models/textdocument.h"
+#include "edbee/models/texteditorconfig.h"
+#include "edbee/models/textrange.h"
+#include "edbee/texteditorcontroller.h"
+#include "edbee/views/textselection.h"
+#include "edbee/util/util.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// The remove command constructor
+/// @param removeMode the mode for removal
+/// @param direction the direction for the removal
+RemoveCommand::RemoveCommand(int removeMode, int direction)
+ : removeMode_(removeMode)
+ , direction_(direction)
+{
+}
+
+/// This method returns the coalesceId to use
+/// Currently all commands in the same direction will get the same coalesceId
+/// @return the coalesceId to use
+int RemoveCommand::coalesceId() const
+{
+ return CoalesceId_Remove + (direction_ == Left ? 1 : 2);
+}
+
+/// Performs a smart backspace by adjusting the textrange so the backspace leads
+/// to the start of a column
+///
+/// @param controller to perform the smartbackspace for
+/// @param caret the current caret position
+///
+/// @return the new caret position
+int RemoveCommand::smartBackspace(TextDocument *doc, int caret)
+{
+ TextBuffer *buf = doc->buffer();
+ TextEditorConfig *config = doc->config();
+
+ // find the line column position
+ int line = doc->lineFromOffset(caret);
+ int lineStartOffset = doc->offsetFromLine(line);
+ int lineEndOffset = qMin(caret, doc->offsetFromLine(line + 1) - 1);
+
+ // searches for the start of the current line
+ int firstNoneWhitespaceCharPos = buf->findCharPosWithinRangeOrClamp(
+ lineStartOffset, 1, config->whitespaceWithoutNewline(), false,
+ lineStartOffset, lineEndOffset);
+
+ // only when the caret if before a characer
+ if (caret <= firstNoneWhitespaceCharPos
+ && lineStartOffset < firstNoneWhitespaceCharPos)
+ {
+
+ // retrieve the whitespace-start-part of the line
+ QString linePrefix = doc->textPart(
+ lineStartOffset, firstNoneWhitespaceCharPos - lineStartOffset);
+ QList lineColumnOffsets
+ = Util().tabColumnOffsets(linePrefix, config->indentSize());
+
+ // when we're exactly at a columnOffset, we need to get the previous
+ int lastColumnOffset = lineColumnOffsets.last() + lineStartOffset;
+ if (lastColumnOffset == caret)
+ {
+ lastColumnOffset
+ = lineStartOffset
+ + (lineColumnOffsets.size() > 1
+ ? lineColumnOffsets.at(lineColumnOffsets.size() - 2)
+ : 0);
+ }
+
+ // we need to got the given number of characters
+ return qMax(0, caret - (caret - lastColumnOffset));
+ }
+ return qMax(0, caret - 1);
+}
+
+/// Changes the ranges so one character on the left is removed
+/// This method can switch to smart-backspace mode, so backspace moves to the
+/// previous column at the start of the line
+///
+/// @param controller the active controller
+/// @param ranges (in/out) the ranges to modify for deletion
+void RemoveCommand::rangesForRemoveChar(TextEditorController *controller,
+ TextRangeSet *ranges)
+{
+ // there's already a selection, just delete that one
+ if (ranges->hasSelection())
+ {
+ return;
+ }
+
+ // when there isn't a selection we need to 'smart-move' the caret
+
+ // when a tab char is used (or we're deleting right) the operation is pretty
+ // simple, just delete the character on the left
+ if (direction_ == Right || controller->textDocument()->config()->useTabChar())
+ {
+ ranges->moveCarets(directionSign());
+
+ // in the case of spaces, we need to some smart stuff :)
+ }
+ else
+ {
+ for (int i = 0, cnt = ranges->rangeCount(); i < cnt; ++i)
+ {
+ TextRange &range = ranges->range(i);
+ range.minVar() = smartBackspace(controller->textDocument(), range.min());
+ }
+ }
+}
+
+/// Changes the ranges so one word at the left is removed
+///
+/// @param controller the active controller
+/// @param ranges (in/out) the ranges to modify so it spans a word
+void RemoveCommand::rangesForRemoveWord(TextEditorController *controller,
+ TextRangeSet *ranges)
+{
+ // there's already a selection, just delete that one
+ if (ranges->hasSelection())
+ {
+ return;
+ }
+
+ TextEditorConfig *config = controller->textDocument()->config();
+ ranges->moveCaretsByCharGroup(directionSign(),
+ config->whitespaceWithoutNewline(),
+ config->charGroups());
+}
+
+/// Changes the ranges so one line at the left is removed
+///
+/// @param controller the active controller
+/// @param ranges (in/out) the ranges to modify so it spans a line
+void RemoveCommand::rangesForRemoveLine(TextEditorController *controller,
+ TextRangeSet *ranges)
+{
+ TextDocument *doc = controller->textDocument();
+
+ // process all carets
+ int offset = direction_ == Left ? -1 : 0;
+ for (int rangeIdx = ranges->rangeCount() - 1; rangeIdx >= 0; --rangeIdx)
+ {
+ TextRange &range = ranges->range(rangeIdx);
+ QChar chr = doc->charAtOrNull(range.caret() + offset);
+ if (chr == '\n')
+ {
+ range.moveCaret(doc, directionSign());
+ }
+ else
+ {
+ range.moveCaretToLineBoundary(
+ doc, directionSign(),
+ controller->textDocument()->config()->whitespaceWithoutNewline());
+ }
+ }
+}
+
+/// Performs the remove command
+///
+/// @param controller the active controller
+void RemoveCommand::execute(TextEditorController *controller)
+{
+ TextSelection *sel = controller->textSelection();
+ TextRangeSet *ranges = new TextRangeSet(*sel);
+
+ int coalesceId = this->coalesceId();
+
+ // depending on the delete mode we need to expand the selection
+ ranges->beginChanges();
+ switch (removeMode_)
+ {
+ case RemoveChar:
+ rangesForRemoveChar(controller, ranges);
+ break;
+ case RemoveWord:
+ rangesForRemoveWord(controller, ranges);
+ break;
+ case RemoveLine:
+ rangesForRemoveLine(controller, ranges);
+ break;
+ default:
+ Q_ASSERT(false);
+ }
+ ranges->endChanges();
+
+ // when there still isn't a selection, simply delete/ignore this command
+ if (!ranges->hasSelection())
+ {
+ delete ranges;
+ return;
+ }
+
+ // use the simple replacerangeset function
+ TextDocument *doc = controller->textDocument();
+ doc->beginChanges(controller);
+ doc->replaceRangeSet(*ranges, "");
+ doc->giveSelection(controller, ranges);
+ doc->endChanges(coalesceId);
+ emit controller->backspacePressed();
+}
+
+/// Converts the command to a string
+QString RemoveCommand::toString()
+{
+ // build the mode string
+ QString mode;
+ switch (removeMode_)
+ {
+ case RemoveChar:
+ mode = "Char";
+ break;
+ case RemoveWord:
+ mode = "Word";
+ break;
+ case RemoveLine:
+ mode = "Line";
+ break;
+ default:
+ mode = "Unkown!";
+ }
+ // build the direction string
+ QString dir = direction_ == Left ? "Left" : "Right";
+
+ // next returnt he string
+ return QStringLiteral("RemoveCommand(%1,%2)").arg(mode).arg(dir);
+}
+
+/// This method returns the direction sign.
+/// (It seems negative enumeration-values are not allowed on all compilers:
+/// http://stackoverflow.com/questions/159034/are-c-enums-signed-or-unsigned )
+/// @return -1 if left direction, 1 on the right direction.
+int RemoveCommand::directionSign() const
+{
+ return direction_ == Left ? -1 : 1;
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/removecommand.h b/lib/edbee-lib/edbee/commands/removecommand.h
new file mode 100644
index 00000000..044ea5a2
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/removecommand.h
@@ -0,0 +1,69 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+class TextDocument;
+class TextRangeSet;
+
+/// A delete command. This is a backspace or a delete operation
+///
+/// The delete behaviour is pretty obvious, it just deletes :)
+///
+/// The behaviour of the RemoveCharLeft depends on several factors:
+///
+/// When the editor has enabled useTabChar_is enabled, backspace is very simple,
+/// it simply deletes the previous character or the selection
+///
+/// When spaces are used for tabs the behaviour is different. If the caret is
+/// left of the first non-space character, it will move 1 column to the left,
+/// depending on the tabsize
+///
+class EDBEE_EXPORT RemoveCommand : public TextEditorCommand
+{
+public:
+ enum RemoveMode
+ {
+ RemoveChar, ///< Remove a single character
+ RemoveWord, ///< Remove a single word
+ RemoveLine ///< Remove a line
+ };
+
+ enum Direction
+ {
+ Left, ///< Remove the item to the left
+ Right ///< Remove the item to ther right
+ };
+
+ RemoveCommand(int removeMode, int direction);
+
+ int coalesceId() const;
+ int smartBackspace(TextDocument *doc, int caret);
+
+ void rangesForRemoveChar(TextEditorController *controller,
+ TextRangeSet *ranges);
+ void rangesForRemoveWord(TextEditorController *controller,
+ TextRangeSet *ranges);
+ void rangesForRemoveLine(TextEditorController *controller,
+ TextRangeSet *ranges);
+
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+
+private:
+ int directionSign() const;
+
+ int removeMode_; ///< The remove mode
+ int direction_; ///< The remove direction
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/replaceselectioncommand.cpp b/lib/edbee-lib/edbee/commands/replaceselectioncommand.cpp
new file mode 100644
index 00000000..1f7f1595
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/replaceselectioncommand.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright 2011-2012 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "replaceselectioncommand.h"
+
+#include "edbee/texteditorcontroller.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// The constructor of the replaceSelection command
+/// @param text the text to replace
+/// @param coalesceId the coalesceId top merge undo operations
+ReplaceSelectionCommand::ReplaceSelectionCommand(const QString &text,
+ int coalesceId)
+ : text_(text)
+ , coalesceId_(coalesceId)
+{
+}
+
+/// Executes the replace selection command
+/// @param controller the controller context this command runs ons
+void ReplaceSelectionCommand::execute(TextEditorController *controller)
+{
+ controller->replaceSelection(text_, coalesceId_);
+}
+
+/// Converts the current command to a string
+QString ReplaceSelectionCommand::toString()
+{
+ return QStringLiteral("ReplaceSelectionCommand");
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/replaceselectioncommand.h b/lib/edbee-lib/edbee/commands/replaceselectioncommand.h
new file mode 100644
index 00000000..d195e33f
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/replaceselectioncommand.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright 2011-2012 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+/// This command can be used to replace the current selection with a given text
+class EDBEE_EXPORT ReplaceSelectionCommand : public TextEditorCommand
+{
+public:
+ ReplaceSelectionCommand(const QString &text, int caolesceId);
+
+ virtual int commandId() { return coalesceId_; }
+
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+
+private:
+ QString text_; ///< The text to 'replace'
+ int coalesceId_; ///< The coalesce id to use for this command
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/selectioncommand.cpp b/lib/edbee-lib/edbee/commands/selectioncommand.cpp
new file mode 100644
index 00000000..cfced645
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/selectioncommand.cpp
@@ -0,0 +1,271 @@
+/**
+ * Copyright 2011-2012 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "selectioncommand.h"
+
+#include "edbee/models/change.h"
+#include "edbee/models/textdocument.h"
+#include "edbee/models/texteditorconfig.h"
+#include "edbee/models/textrange.h"
+#include "edbee/views/textselection.h"
+#include "edbee/views/textrenderer.h"
+#include "edbee/texteditorcontroller.h"
+#include "edbee/texteditorwidget.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// The constructor of the selection command
+/// @param unit the unit of this command
+/// @param amount the number of steps
+/// @param keepSelection when true the anchor stays put (and the selection is
+/// expanded)
+SelectionCommand::SelectionCommand(SelectionType unit, int amount,
+ bool keepSelection, int rangeIndex)
+ : unit_(unit)
+ , amount_(amount)
+ , anchor_(-1)
+ , keepSelection_(keepSelection)
+ , rangeIndex_(rangeIndex)
+{
+}
+
+/// The descructor of the command
+SelectionCommand::~SelectionCommand() {}
+
+/// Return the command id
+/// This is th coalesceId + the given selection item
+int SelectionCommand::commandId()
+{
+ int coalesceId = CoalesceId_Selection + unit_ * 10;
+ if (amount_ > 0)
+ {
+ coalesceId += 1;
+ }
+ return coalesceId;
+}
+
+/// execute the given selection command
+/// @param controller the controller to execute the selection for
+void SelectionCommand::execute(TextEditorController *controller)
+{
+ // save the selection state
+ TextDocument *document = controller->textDocument();
+ TextRangeSet *currentSelection
+ = dynamic_cast(controller->textSelection());
+ TextRangeSet *sel
+ = new TextRangeSet(*currentSelection); // start with the current selection
+
+ bool resetAnchors = !keepSelection_;
+
+ // handle the select operation
+ switch (unit_)
+ {
+ // character movement
+ case MoveCaretByCharacter:
+ sel->moveCarets(amount_);
+ break;
+
+ // This results in clearing the selection if a selection is present or it
+ // results in a movement of the caret. When clearing a selection the caret
+ // is placed next to the selection (which side depends on the direction)
+ case MoveCaretsOrDeselect:
+ if (keepSelection_)
+ {
+ sel->moveCarets(amount_);
+ }
+ else
+ {
+ sel->moveCaretsOrDeselect(amount_);
+ }
+ break;
+
+ case MoveCaretByWord:
+ sel->moveCaretsByCharGroup(amount_,
+ document->config()->whitespaceWithoutNewline(),
+ document->config()->charGroups());
+ break;
+
+ case MoveCaretByLine:
+ TextSelection::moveCaretsByLine(controller, sel, amount_);
+ break;
+
+ case MoveCaretToWordBoundary:
+ sel->moveCaretsByCharGroup(amount_,
+ document->config()->whitespaceWithoutNewline(),
+ document->config()->charGroups());
+ break;
+
+ case MoveCaretToLineBoundary:
+ sel->moveCaretsToLineBoundary(
+ amount_, document->config()->whitespaceWithoutNewline());
+ break;
+
+ case MoveCaretToDocumentBegin:
+ sel->toSingleRange();
+ sel->range(0).setCaret(0);
+ break;
+
+ case MoveCaretToDocumentEnd:
+ sel->toSingleRange();
+ sel->range(0).setCaret(controller->textDocument()->length());
+ break;
+
+ case MoveCaretByPage: {
+ // make sure the first line of the window is scrolled
+ TextRenderer *renderer = controller->textRenderer();
+ TextEditorWidget *widget = controller->widget();
+ int firstVisibleLine = renderer->firstVisibleLine();
+ int linesPerPage = renderer->viewHeightInLines();
+
+ sel->beginChanges();
+ TextSelection::moveCaretsByPage(controller, sel, amount_);
+ if (!keepSelection_)
+ {
+ sel->resetAnchors(); // we must reset anchors here because de
+ // process-changes will merge carets
+ }
+ sel->endChanges();
+
+ firstVisibleLine += linesPerPage * amount_;
+ widget->scrollTopToLine(firstVisibleLine);
+
+ break;
+ }
+ case MoveCaretToExactOffset: {
+ if (rangeIndex_ < 0)
+ {
+ sel->toSingleRange();
+ }
+ TextRange &range = sel->range(rangeIndex_ >= 0 ? rangeIndex_ : 0);
+ range.setCaret(amount_);
+ if (anchor_ >= 0)
+ range.setAnchor(anchor_);
+ break;
+ }
+ case SelectAll:
+ sel->toSingleRange();
+ sel->setRange(0, document->buffer()->length());
+ resetAnchors = false; // do not reset the anchors
+ break;
+
+ case SelectWord:
+ sel->expandToWords(document->config()->whitespaces(),
+ document->config()->charGroups());
+ resetAnchors = false; // do not reset the anchors
+ break;
+
+ case SelectWordAt:
+ sel->selectWordAt(amount_, document->config()->whitespaces(),
+ document->config()->charGroups());
+ resetAnchors = false;
+ break;
+
+ case ToggleWordSelectionAt:
+ sel->toggleWordSelectionAt(amount_, document->config()->whitespaces(),
+ document->config()->charGroups());
+ resetAnchors = false;
+ break;
+
+ case SelectFullLine:
+ sel->expandToFullLines(amount_);
+ resetAnchors = false;
+ break;
+
+ case AddCaretAtOffset:
+ sel->addRange(amount_, amount_);
+ resetAnchors = false; // do not reset the anchors
+ break;
+
+ case AddCaretByLine:
+ TextSelection::addRangesByLine(controller, sel, amount_);
+ break;
+
+ case ResetSelection:
+
+ // when there's a selection ESCAPE clears the selection
+ if (sel->hasSelection())
+ {
+ sel->clearSelection();
+ }
+ else if (sel->rangeCount() > 1)
+ {
+ sel->toSingleRange();
+ }
+ resetAnchors = false; // keep selection
+ break;
+ }
+
+ if (resetAnchors)
+ {
+ sel->resetAnchors();
+ }
+
+ // no change?
+ if (currentSelection->equals(*sel))
+ {
+ delete sel;
+ return; // 0
+ }
+
+ controller->changeAndGiveTextSelection(sel, commandId());
+}
+
+/// Converts the unit enumeration to a string
+/// @param unit the unit enumeration value
+/// @return the string representation of this unit
+static QString unitToString(int unit)
+{
+ switch (unit)
+ {
+ case SelectionCommand::MoveCaretByCharacter:
+ return "MoveCaretByCharacter";
+ case SelectionCommand::MoveCaretByWord:
+ return "MoveCaretByWord";
+ case SelectionCommand::MoveCaretByLine:
+ return "MoveCaretByLine";
+ case SelectionCommand::MoveCaretToLineBoundary:
+ return "MoveCaretToLineBoundary";
+ case SelectionCommand::MoveCaretToDocumentBegin:
+ return "MoveCaretToDocumentBegin";
+ case SelectionCommand::MoveCaretToDocumentEnd:
+ return "MoveCaretToDocumentEnd";
+ case SelectionCommand::MoveCaretToExactOffset:
+ return "MoveCaretToExactOffset";
+ case SelectionCommand::SelectAll:
+ return "SelectAll";
+ case SelectionCommand::SelectWord:
+ return "SelectWord";
+ case SelectionCommand::SelectWordAt:
+ return "SelectWordAt";
+ case SelectionCommand::ToggleWordSelectionAt:
+ return "ToggleWordSelectionAt";
+ case SelectionCommand::SelectFullLine:
+ return "SelectFullLine";
+ case SelectionCommand::AddCaretAtOffset:
+ return "AddCaretAtOffset";
+ case SelectionCommand::AddCaretByLine:
+ return "AddCaretByLine";
+ case SelectionCommand::ResetSelection:
+ return "ResetToSingleCaret";
+ default:
+ return "Unkown";
+ }
+}
+
+/// Converts this command to a strings
+QString SelectionCommand::toString()
+{
+ return QStringLiteral("SelectionCommand(%1)").arg(unitToString(unit_));
+}
+
+bool SelectionCommand::readonly()
+{
+ return true;
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/selectioncommand.h b/lib/edbee-lib/edbee/commands/selectioncommand.h
new file mode 100644
index 00000000..504cc050
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/selectioncommand.h
@@ -0,0 +1,85 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+/// The selection command is used to move the caret and anchors to
+/// make selections and move the carets around
+class EDBEE_EXPORT SelectionCommand : public TextEditorCommand
+{
+public:
+ enum SelectionType
+ {
+
+ // movement and selection
+ MoveCaretByCharacter, ///< Moves the caret(s) by the given amount of
+ ///< characters
+ MoveCaretsOrDeselect, ///< Moves the caret(s) by the given amount of
+ ///< characters or deselects the current selection
+ // SubWord, // TODO, implement subword selecting
+ MoveCaretByWord, ///< moves the caret(s) by the given amount of words
+ MoveCaretByLine, ///< moves the caret(s) by the given amount of lines
+ MoveCaretByPage, ///< moves the caret(s) by the given amount of pages
+ MoveCaretToWordBoundary, ///< moves the caret to a line-boundary (<0 begin
+ ///< of line, >0 end of line)
+ MoveCaretToLineBoundary, ///< moves the caret to a line-boundary (<0 begin
+ ///< of line, >0 end of line)
+ MoveCaretToDocumentBegin, ///< moves the caret to the document start
+ MoveCaretToDocumentEnd, ///< moves the caret to the document end
+ MoveCaretToExactOffset, ///< moves the caret to the given offset (given in
+ ///< amount). (This action also support the
+ ///< adjustment of the anchor)
+
+ // selection only
+ SelectAll, ///< selects the complete document
+ SelectWord, ///< select a full word
+ SelectFullLine, ///< select a full line
+ SelectWordAt, ///< select 'toggles' a word. Double click on a word to select
+ ///< a word or deselect a word
+ ToggleWordSelectionAt, ///< Toggles the selection and caret at the given
+ ///< location
+
+ // add an extra caret
+ AddCaretAtOffset, ///< adds a extra caret at the given offset (amount is the
+ ///< caret offset)
+ AddCaretByLine, ///< adds a caret at the given line amount is the amount of
+ ///< lines and the direction to add
+ ResetSelection
+ };
+
+public:
+ explicit SelectionCommand(SelectionType unit, int amount = 0,
+ bool keepSelection = false, int rangeIndex = -1);
+ virtual ~SelectionCommand();
+
+ virtual int commandId();
+
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+ virtual bool readonly() override;
+
+ SelectionType unit() { return unit_; }
+ int amount() { return amount_; }
+ bool keepSelection() { return keepSelection_; }
+ int rangeIndex() { return rangeIndex_; }
+ void setAnchor(int anchor) { anchor_ = anchor; }
+ int anchor() { return anchor_; }
+
+private:
+ SelectionType unit_;
+ int amount_;
+ int anchor_; ///< currently only used for word-selection / line selection
+ bool keepSelection_;
+ int rangeIndex_;
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/tabcommand.cpp b/lib/edbee-lib/edbee/commands/tabcommand.cpp
new file mode 100644
index 00000000..e24c8051
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/tabcommand.cpp
@@ -0,0 +1,213 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "tabcommand.h"
+
+#include "edbee/texteditorcontroller.h"
+#include "edbee/models/changes/mergablechangegroup.h"
+#include "edbee/models/texteditorconfig.h"
+#include "edbee/models/textdocument.h"
+#include "edbee/views/textselection.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// Constructs the tabcommand
+/// @param direction the direction of the tab (Forward or Backward)
+/// @param insertTab should we use a tab character?
+TabCommand::TabCommand(TabCommand::Direction direction, bool insertTab)
+ : dir_(direction)
+ , insertTab_(insertTab)
+{
+}
+
+/// indents or outdents in the given controller
+/// @parma controller the controller
+void TabCommand::indent(TextEditorController *controller)
+{
+ TextDocument *doc = controller->textDocument();
+ TextSelection *sel = controller->textSelection();
+ int tabSize = doc->config()->indentSize();
+ bool useTab = false; // doc->config()->useTabChar();
+ QString tab = useTab ? "\t" : QStringLiteral(" ").repeated(tabSize);
+
+ controller->beginUndoGroup(new MergableChangeGroup(controller));
+
+ sel->beginChanges();
+
+ int lastLine = -1;
+ for (int i = 0, cnt = sel->rangeCount(); i < cnt; ++i)
+ {
+ TextRange &range = sel->range(i);
+
+ // calculate the start and endline
+ int startLine = doc->lineFromOffset(range.min());
+ int endLine = doc->lineFromOffset(range.max());
+
+ // when the last line is blank, we do NOT want to indent it (fixes #61)
+ if (startLine != endLine
+ && doc->columnFromOffsetAndLine(range.max(), endLine) == 0)
+ {
+ --endLine;
+ }
+
+ // make sure we at least indent one line
+ if (startLine <= lastLine)
+ startLine = lastLine + 1;
+
+ // now indent all lines
+ for (int line = startLine; line <= endLine; ++line)
+ {
+ int offset = doc->offsetFromLine(line);
+
+ // insert-tab
+ if (dir_ == Forward)
+ {
+ doc->replace(offset, 0, tab);
+ sel->changeSpatial(offset, 0, tab.length(), true);
+
+ // remove tab
+ }
+ else
+ {
+ int offsetNextLine = doc->offsetFromLine(line + 1) - 1;
+ int endOffset = offset;
+ for (int j = 0; j < tabSize; ++j)
+ {
+ int off = offset + j;
+ if (off >= doc->length())
+ break;
+ QChar chr = doc->charAt(off);
+
+ if (chr != ' ' && chr != '\t')
+ break;
+ if (off >= offsetNextLine)
+ break;
+ ++endOffset;
+ if (chr == '\t')
+ break;
+ }
+ if (offset != (endOffset - offset))
+ {
+ doc->replace(offset, endOffset - offset, "");
+ sel->changeSpatial(offset, endOffset - offset, 0, true);
+ }
+ }
+ }
+ lastLine = endLine;
+ }
+
+ sel->endChanges();
+
+ controller->endUndoGroup(CoalesceId_Indent + dir_, true);
+}
+
+/// TODO: Refactor :)
+void TabCommand::execute(TextEditorController *controller)
+{
+ if (!insertTab_)
+ {
+ indent(controller);
+ return;
+ }
+
+ // retrieve the settings
+ TextDocument *doc = controller->textDocument();
+ TextSelection *sel = controller->textSelection();
+ int tabSize = doc->config()->indentSize();
+ bool useTab = doc->config()->useTabChar();
+ QString ws = doc->config()->whitespaces();
+
+ // check if the changes are multi-line
+ bool multiLine = false;
+ bool atStartOfLine = true;
+ for (int i = 0, cnt = sel->rangeCount(); i < cnt && !multiLine; ++i)
+ {
+ TextRange &range = sel->range(i);
+ multiLine = multiLine
+ || doc->lineFromOffset(range.anchor())
+ != doc->lineFromOffset(range.caret());
+
+ // no selection? we need to check if we are at the start of the line
+ if (!range.hasSelection() && atStartOfLine)
+ {
+ int pos = range.caret();
+ int startPos = doc->offsetFromLine(doc->lineFromOffset(pos));
+ --pos; // look hat the character before the pos
+
+ // Q_ASSERT(startPos <= pos);
+ if (pos >= startPos)
+ {
+ while (pos > startPos && atStartOfLine)
+ {
+ QChar chr = doc->charAt(pos);
+ if (!ws.contains(chr))
+ {
+ atStartOfLine = false;
+ }
+ --pos;
+ }
+ }
+ }
+ else
+ {
+ atStartOfLine = false;
+ }
+ }
+
+ // a Line-moving operation
+ if (multiLine || (atStartOfLine && dir_ == Backward))
+ {
+ indent(controller);
+
+ // a character inserting operation
+ }
+ else
+ {
+ if (dir_ == Forward)
+ {
+ if (useTab)
+ {
+ controller->replaceSelection(
+ "\t", CoalesceId_Indent + SubCoalesceId_Indent_InsertTab);
+ }
+ else
+ {
+
+ // we need to 'calculate' the number of spaces to add (per caret)
+ QStringList texts;
+ for (int i = 0, cnt = sel->rangeCount(); i < cnt; ++i)
+ {
+ TextRange &range = sel->range(i);
+ int offset = range.min();
+ int col = doc->columnFromOffsetAndLine(offset);
+
+ // calculate the number of spaces depending on the column
+ int spaces = tabSize - col % tabSize;
+ if (!spaces)
+ spaces = tabSize;
+
+ // append the text
+ texts.push_back(QStringLiteral(" ").repeated(spaces));
+ }
+
+ controller->replaceSelection(
+ texts, CoalesceId_Indent + SubCoalesceId_Indent_InsertSpaces);
+ }
+ }
+ }
+}
+
+/// Returs the name of this command
+QString TabCommand::toString()
+{
+ if (dir_ == Backward)
+ return "TabCommand(back)";
+ return "TabCommand(fwd)";
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/tabcommand.h b/lib/edbee-lib/edbee/commands/tabcommand.h
new file mode 100644
index 00000000..1926dd51
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/tabcommand.h
@@ -0,0 +1,46 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+/// For inserting/executing forward and backwards tabs
+class EDBEE_EXPORT TabCommand : public TextEditorCommand
+{
+public:
+ /// The possible directions of the tab command
+ enum Direction
+ {
+ Forward,
+ Backward
+ };
+
+ /// Extra possible coalesce (sub-ids)
+ enum
+ {
+ SubCoalesceId_Indent_Forward = Forward,
+ SubCoalesceId_Indent_Backward = Backward,
+ SubCoalesceId_Indent_InsertTab,
+ SubCoalesceId_Indent_InsertSpaces
+ };
+
+ TabCommand(Direction direction, bool insertTab);
+
+ virtual void indent(TextEditorController *controller);
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+
+private:
+ Direction dir_; ///< The tab direction
+ bool insertTab_; ///< Should we insert a tab
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/togglereadonlycommand.cpp b/lib/edbee-lib/edbee/commands/togglereadonlycommand.cpp
new file mode 100644
index 00000000..000efcab
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/togglereadonlycommand.cpp
@@ -0,0 +1,32 @@
+#include "togglereadonlycommand.h"
+
+#include "edbee/texteditorcontroller.h"
+#include "edbee/models/changes/mergablechangegroup.h"
+#include "edbee/models/texteditorconfig.h"
+#include "edbee/models/textdocument.h"
+#include "edbee/views/textselection.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// Constructs the toggle readonly command
+ToggleReadonlyCommand::ToggleReadonlyCommand() {}
+
+void ToggleReadonlyCommand::execute(TextEditorController *controller)
+{
+ controller->setReadonly(controller->readonly() ? false : true);
+}
+
+QString ToggleReadonlyCommand::toString()
+{
+ return "ToggleReadOnlyCommand()";
+}
+
+bool ToggleReadonlyCommand::readonly()
+{
+ return true;
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/togglereadonlycommand.h b/lib/edbee-lib/edbee/commands/togglereadonlycommand.h
new file mode 100644
index 00000000..64c44d60
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/togglereadonlycommand.h
@@ -0,0 +1,23 @@
+/**
+ * Copyright 2011-2020 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+#include "edbee/exports.h"
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+class ToggleReadonlyCommand : public TextEditorCommand
+{
+public:
+ ToggleReadonlyCommand();
+
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+ virtual bool readonly() override;
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/undocommand.cpp b/lib/edbee-lib/edbee/commands/undocommand.cpp
new file mode 100644
index 00000000..622a96b6
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/undocommand.cpp
@@ -0,0 +1,35 @@
+/**
+ * Copyright 2011-2012 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "undocommand.h"
+
+#include "edbee/texteditorcontroller.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+UndoCommand::UndoCommand(bool soft)
+ : soft_(soft)
+{
+}
+
+void UndoCommand::execute(TextEditorController *controller)
+{
+ controller->undo(soft_);
+}
+
+QString UndoCommand::toString()
+{
+ return QStringLiteral("UndoCommand(%1)").arg(soft_ ? "soft" : "hard");
+}
+
+bool UndoCommand::readonly()
+{
+ return soft_;
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/commands/undocommand.h b/lib/edbee-lib/edbee/commands/undocommand.h
new file mode 100644
index 00000000..44cecb84
--- /dev/null
+++ b/lib/edbee-lib/edbee/commands/undocommand.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright 2011-2012 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include
+#include "edbee/texteditorcommand.h"
+
+namespace edbee
+{
+
+class EDBEE_EXPORT UndoCommand : public TextEditorCommand
+{
+public:
+ UndoCommand(bool soft = false);
+
+ virtual int commandId() { return CoalesceId_None; }
+
+ virtual void execute(TextEditorController *controller) override;
+ virtual QString toString() override;
+ virtual bool readonly() override;
+
+private:
+ bool soft_; ///< should this command perform a soft undo?
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/data/factorycommandmap.cpp b/lib/edbee-lib/edbee/data/factorycommandmap.cpp
new file mode 100644
index 00000000..df19460e
--- /dev/null
+++ b/lib/edbee-lib/edbee/data/factorycommandmap.cpp
@@ -0,0 +1,171 @@
+/**
+ * Copyright 2011-2020 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "factorycommandmap.h"
+
+#include "edbee/commands/commentcommand.h"
+#include "edbee/commands/copycommand.h"
+#include "edbee/commands/cutcommand.h"
+#include "edbee/commands/debugcommand.h"
+#include "edbee/commands/duplicatecommand.h"
+#include "edbee/commands/findcommand.h"
+#include "edbee/commands/pastecommand.h"
+#include "edbee/commands/movelinecommand.h"
+#include "edbee/commands/newlinecommand.h"
+#include "edbee/commands/redocommand.h"
+#include "edbee/commands/removecommand.h"
+#include "edbee/commands/replaceselectioncommand.h"
+#include "edbee/commands/selectioncommand.h"
+#include "edbee/commands/tabcommand.h"
+#include "edbee/commands/togglereadonlycommand.h"
+#include "edbee/commands/undocommand.h"
+#include "edbee/models/texteditorcommandmap.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+#define give(key, command) cm->give(key, command)
+
+/// This method adds all factory keys to the texteditor keymap
+/// This method does NOT clear the existing items.
+/// @param km the command manager
+void FactoryCommandMap::fill(TextEditorCommandMap *cm)
+{
+ give("goto_next_char",
+ new SelectionCommand(SelectionCommand::MoveCaretsOrDeselect, 1));
+ give("goto_prev_char",
+ new SelectionCommand(SelectionCommand::MoveCaretsOrDeselect, -1));
+ give("goto_next_word",
+ new SelectionCommand(SelectionCommand::MoveCaretByWord, 1));
+ give("goto_prev_word",
+ new SelectionCommand(SelectionCommand::MoveCaretByWord, -1));
+ give("goto_bol",
+ new SelectionCommand(SelectionCommand::MoveCaretToLineBoundary, -1));
+ give("goto_eol",
+ new SelectionCommand(SelectionCommand::MoveCaretToLineBoundary, 1));
+ give("goto_next_line",
+ new SelectionCommand(SelectionCommand::MoveCaretByLine, 1));
+ give("goto_prev_line",
+ new SelectionCommand(SelectionCommand::MoveCaretByLine, -1));
+ give("goto_bof",
+ new SelectionCommand(SelectionCommand::MoveCaretToDocumentBegin));
+ give("goto_eof",
+ new SelectionCommand(SelectionCommand::MoveCaretToDocumentEnd));
+ give("goto_page_down",
+ new SelectionCommand(SelectionCommand::MoveCaretByPage, 1));
+ give("goto_page_up",
+ new SelectionCommand(SelectionCommand::MoveCaretByPage, -1));
+
+ // selection
+ give("sel_next_char",
+ new SelectionCommand(SelectionCommand::MoveCaretByCharacter, 1, true));
+ give("sel_prev_char",
+ new SelectionCommand(SelectionCommand::MoveCaretByCharacter, -1, true));
+ give("sel_next_word",
+ new SelectionCommand(SelectionCommand::MoveCaretByWord, 1, true));
+ give("sel_prev_word",
+ new SelectionCommand(SelectionCommand::MoveCaretByWord, -1, true));
+ give("sel_to_bol", new SelectionCommand(
+ SelectionCommand::MoveCaretToLineBoundary, -1, true));
+ give("sel_to_eol", new SelectionCommand(
+ SelectionCommand::MoveCaretToLineBoundary, 1, true));
+ give("sel_to_next_line",
+ new SelectionCommand(SelectionCommand::MoveCaretByLine, 1, true));
+ give("sel_to_prev_Line",
+ new SelectionCommand(SelectionCommand::MoveCaretByLine, -1, true));
+ give("sel_to_bof", new SelectionCommand(
+ SelectionCommand::MoveCaretToDocumentBegin, -1, true));
+ give("sel_to_eof",
+ new SelectionCommand(SelectionCommand::MoveCaretToDocumentEnd, 1, true));
+ give("sel_page_down",
+ new SelectionCommand(SelectionCommand::MoveCaretByPage, 1, true));
+ give("sel_page_up",
+ new SelectionCommand(SelectionCommand::MoveCaretByPage, -1, true));
+
+ give("sel_all", new SelectionCommand(SelectionCommand::SelectAll));
+ give("sel_word", new SelectionCommand(SelectionCommand::SelectWord));
+ give("sel_line", new SelectionCommand(SelectionCommand::SelectFullLine, 1));
+ give("sel_prev_line",
+ new SelectionCommand(SelectionCommand::SelectFullLine, -1));
+ give("add_caret_prev_line",
+ new SelectionCommand(SelectionCommand::AddCaretByLine, -1));
+ give("add_caret_next_line",
+ new SelectionCommand(SelectionCommand::AddCaretByLine, 1));
+ give("sel_reset", new SelectionCommand(SelectionCommand::ResetSelection));
+
+ // line entry
+ give("ins_newline", new NewlineCommand(NewlineCommand::NormalNewline));
+ give("ins_newline_before", new NewlineCommand(NewlineCommand::AddLineBefore));
+ give("ins_newline_after", new NewlineCommand(NewlineCommand::AddLineAfter));
+
+ // remove text at the left
+ give("del_left",
+ new RemoveCommand(RemoveCommand::RemoveChar, RemoveCommand::Left));
+ give("del_word_left",
+ new RemoveCommand(RemoveCommand::RemoveWord, RemoveCommand::Left));
+ give("del_line_left",
+ new RemoveCommand(RemoveCommand::RemoveLine, RemoveCommand::Left));
+
+ // remove text at the rigth
+ give("del_right",
+ new RemoveCommand(RemoveCommand::RemoveChar, RemoveCommand::Right));
+ give("del_word_right",
+ new RemoveCommand(RemoveCommand::RemoveWord, RemoveCommand::Right));
+ give("del_line_right",
+ new RemoveCommand(RemoveCommand::RemoveLine, RemoveCommand::Right));
+
+ // special text entry commands
+ give("duplicate", new DuplicateCommand());
+ give("toggle_comment", new CommentCommand(false));
+ give("toggle_block_comment", new CommentCommand(true));
+
+ // tab entry
+ // give( "tab", new ReplaceSelectionCommand( "\t", CoalesceId_InsertTab ));
+ /// TODO: add a backtab action here
+ // set( QKeySequence( Qt::Key_BackTab ), new )
+ give("tab", new TabCommand(TabCommand::Forward, true));
+ give("tab_back", new TabCommand(TabCommand::Backward, true));
+
+ give("indent", new TabCommand(TabCommand::Forward, false));
+ give("outdent", new TabCommand(TabCommand::Backward, false));
+
+ // undo / redo comamnds
+ give("undo", new UndoCommand());
+ give("redo", new RedoCommand());
+ give("soft_undo", new UndoCommand(true));
+ give("soft_redo", new RedoCommand(true));
+
+ // clipboard operations
+ give("copy", new CopyCommand());
+ give("cut", new CutCommand());
+ give("paste", new PasteCommand());
+
+ // debug commands
+ give("debug_dump_scopes", new DebugCommand(DebugCommand::DumpScopes));
+ give("debug_rebuild_scopes", new DebugCommand(DebugCommand::RebuildScopes));
+ give("debug_dump_undo_stack", new DebugCommand(DebugCommand::DumpUndoStack));
+ give("debug_dump_character_codes",
+ new DebugCommand(DebugCommand::DumpCharacterCodes));
+
+ // find items
+ give("find_use_sel", new FindCommand(FindCommand::UseSelectionForFind));
+ give("find_next_match", new FindCommand(FindCommand::FindNextMatch));
+ give("find_prev_match", new FindCommand(FindCommand::FindPreviousMatch));
+ give("sel_next_match", new FindCommand(FindCommand::SelectNextMatch));
+ give("sel_prev_match", new FindCommand(FindCommand::SelectPreviousMatch));
+ give("sel_all_matches", new FindCommand(FindCommand::SelectAllMatches));
+
+ give("select_under_expand", new FindCommand(FindCommand::SelectUnderExpand));
+ give("select_all_under", new FindCommand(FindCommand::SelectAllUnder));
+
+ give("move_lines_up", new MoveLineCommand(-1));
+ give("move_lines_down", new MoveLineCommand(1));
+
+ give("toggle_readonly", new ToggleReadonlyCommand());
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/data/factorycommandmap.h b/lib/edbee-lib/edbee/data/factorycommandmap.h
new file mode 100644
index 00000000..11ef9628
--- /dev/null
+++ b/lib/edbee-lib/edbee/data/factorycommandmap.h
@@ -0,0 +1,22 @@
+/**
+ * Copyright 2011-2014 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+namespace edbee
+{
+
+class TextEditorCommandMap;
+
+/// This class contains the factory edbee command map
+class EDBEE_EXPORT FactoryCommandMap
+{
+public:
+ void fill(TextEditorCommandMap *cm);
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/data/factorykeymap.cpp b/lib/edbee-lib/edbee/data/factorykeymap.cpp
new file mode 100644
index 00000000..5a71d8cf
--- /dev/null
+++ b/lib/edbee-lib/edbee/data/factorykeymap.cpp
@@ -0,0 +1,137 @@
+/**
+ * Copyright 2011-2014 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "factorykeymap.h"
+
+#include "edbee/models/texteditorkeymap.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+#define add(key, value) km->add(key, value)
+
+/// This method adds all factory keys to the texteditor keymap
+/// This method does NOT clear the existing items.
+/// @param km the command manager
+void FactoryKeyMap::fill(TextEditorKeyMap *km)
+{
+ // add( command, keyname/sequence )
+ add("goto_next_char", "move_to_next_char");
+ add("goto_prev_char", "move_to_previous_char");
+ add("goto_next_word", "move_to_next_word");
+ add("goto_prev_word", "move_to_previous_word");
+ add("goto_bol", "move_to_start_of_line");
+ add("goto_bol", "move_to_start_of_block");
+ add("goto_eol", "move_to_end_of_line");
+ add("goto_eol", "move_to_end_of_block");
+ add("goto_next_line", "move_to_next_line");
+ add("goto_prev_line", "move_to_previous_line");
+ add("goto_bof", "move_to_start_of_document");
+ add("goto_eof", "move_to_end_of_document");
+ add("goto_page_down", "move_to_next_page");
+ add("goto_page_up", "move_to_previous_page");
+
+ // selection
+ add("sel_next_char", "select_next_char");
+ add("sel_prev_char", "select_previous_char");
+ add("sel_next_word", "select_next_word");
+ add("sel_prev_word", "select_previous_word");
+ add("sel_to_bol", "select_start_of_line");
+ add("sel_to_eol", "select_end_of_line");
+ add("sel_to_next_line", "select_next_line");
+ add("sel_to_prev_Line", "select_previous_line");
+ add("sel_to_bof", "select_start_of_document");
+ add("sel_to_eof", "select_end_of_document");
+ add("sel_page_down", "select_next_page");
+ add("sel_page_up", "select_previous_page");
+
+ add("sel_all", "select_all");
+ // add("sel_word", "Ctrl+D" ); // is superseeded by 'find_under_expand'
+ add("sel_line", "Ctrl+L");
+ add("sel_prev_line", "Ctrl+Shift+L");
+ add("add_caret_prev_line", "Meta+shift+Up");
+ add("add_caret_next_line", "Meta+shift+Down");
+ add("sel_reset", "Escape");
+
+ // TODO: We need to build in support for alternative keymaps per platform
+ add("add_caret_prev_line", "Ctrl+Alt+Up");
+ add("add_caret_next_line", "Ctrl+Alt+Down");
+
+ // line entry
+ add("ins_newline", "Enter");
+ add("ins_newline", "Return");
+ add("ins_newline", "Shift+Enter");
+ add("ins_newline", "Shift+Return");
+ add("ins_newline_before", "Ctrl+Shift+Return");
+ add("ins_newline_before", "Ctrl+Shift+Enter");
+ add("ins_newline_after", "Ctrl+Enter");
+ add("ins_newline_after", "Ctrl+Return");
+
+ // deletion left
+ add("del_left", "Backspace");
+ add("del_left", "Shift+Backspace");
+ add("del_word_left", "Alt+Backspace");
+ add("del_line_left", "Ctrl+Backspace");
+
+ // deletion right
+ add("del_right", "Delete");
+ add("del_word_right", "Alt+Delete");
+ add("del_line_right", "Ctrl+Delete");
+
+ // tab entry
+ add("tab", "Tab");
+ // add( "tab_back", "Backtab" ); (Workaround for issue #72)
+ add("tab_back", "Shift+Tab");
+ add("tab_back", "Shift+Backtab");
+ add("indent", "Ctrl+]");
+ add("outdent", "Ctrl+[");
+
+ // special entry
+ add("duplicate", "Ctrl+Shift+D");
+ add("toggle_comment", "Ctrl+/");
+ add("toggle_block_comment", "Ctrl+Meta+/");
+
+ // undo / redo commands
+ add("undo", "undo");
+ add("redo", "redo");
+ add("soft_undo", "Ctrl+U");
+ add("soft_redo", "Ctrl+Shift+U");
+
+ // clipboard operations
+ add("copy", "Ctrl+Insert");
+ add("cut", "Shift+Delete");
+ add("paste", "Shift+Insert");
+
+ add("copy", "copy");
+ add("cut", "cut");
+ add("paste", "paste");
+
+ // debug commands
+ add("debug_dump_scopes", "Ctrl+Shift+X,S");
+ add("debug_rebuild_scopes", "Ctrl+Shift+X,R");
+ add("debug_dump_undo_stack", "Ctrl+Shift+X,U");
+ add("debug_dump_character_codes", "Ctrl+Shift+X,C");
+
+ // find commands
+ add("find_use_sel", "Ctrl+E");
+ add("find_next_match", "find_next");
+ add("find_prev_match", "find_previous");
+ add("sel_next_match", "Meta+S");
+ add("sel_prev_match", "Meta+Shift+S");
+ add("sel_all_matches", "Ctrl+Shift+Meta+A");
+ add("select_under_expand", "Ctrl+D");
+ add("select_all_under", "Alt+F3");
+
+ // move lines
+ add("move_lines_up", "Ctrl+Meta+Up");
+ add("move_lines_down", "Ctrl+Meta+Down");
+
+ // toggle readonly
+ add("toggle_readonly", "Ctrl+R");
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/data/factorykeymap.h b/lib/edbee-lib/edbee/data/factorykeymap.h
new file mode 100644
index 00000000..790a0b46
--- /dev/null
+++ b/lib/edbee-lib/edbee/data/factorykeymap.h
@@ -0,0 +1,24 @@
+/**
+ * Copyright 2011-2014 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+namespace edbee
+{
+
+class TextEditorKeyMap;
+
+/**
+ * This class can fill the texteditor keymap with the factory defaults
+ */
+class EDBEE_EXPORT FactoryKeyMap
+{
+public:
+ void fill(TextEditorKeyMap *km);
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/debug.h b/lib/edbee-lib/edbee/debug.h
new file mode 100644
index 00000000..b783b596
--- /dev/null
+++ b/lib/edbee-lib/edbee/debug.h
@@ -0,0 +1,21 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/util/logging.h"
+
+#include "edbee/util/mem/debug_new.h"
+
+#if defined(QT_DEBUG)
+/// This assert requires the inclusion of QApplication an QThread
+# define Q_ASSERT_GUI_THREAD \
+ Q_ASSERT(qApp->thread() == QThread::currentThread())
+# define Q_ASSERT_NOT_GUI_THREAD \
+ Q_ASSERT(qApp->thread() != QThread::currentThread())
+#else
+# define Q_ASSERT_GUI_THREAD
+# define Q_ASSERT_NOT_GUI_THREAD
+#endif
diff --git a/lib/edbee-lib/edbee/edbee.cpp b/lib/edbee-lib/edbee/edbee.cpp
new file mode 100644
index 00000000..bfe892e9
--- /dev/null
+++ b/lib/edbee-lib/edbee/edbee.cpp
@@ -0,0 +1,298 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "edbee.h"
+
+#include
+#include
+
+#include "edbee/models/textautocompleteprovider.h"
+#include "edbee/models/dynamicvariables.h"
+#include "edbee/models/textbuffer.h"
+#include "edbee/models/texteditorcommandmap.h"
+#include "edbee/models/texteditorkeymap.h"
+#include "edbee/models/textdocumentscopes.h"
+#include "edbee/models/textgrammar.h"
+#include "edbee/util/textcodec.h"
+#include "edbee/views/accessibletexteditorwidget.h"
+#include "edbee/views/texttheme.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// The edbee instance singleton
+static Edbee *theInstance = 0;
+
+/// The constructor
+Edbee::Edbee()
+ : inited_(false)
+ , defaultCommandMap_(0)
+ , codecManager_(0)
+ , scopeManager_(0)
+ , grammarManager_(0)
+ , themeManager_(0)
+ , keyMapManager_(0)
+ , environmentVariables_(0)
+ , autoCompleteProviderList_(0)
+{
+}
+
+/// The edbee destructors destroys the different managers
+Edbee::~Edbee()
+{
+ delete autoCompleteProviderList_;
+ delete environmentVariables_;
+ delete keyMapManager_;
+ delete themeManager_;
+ delete grammarManager_;
+ delete scopeManager_;
+ delete codecManager_;
+ delete defaultCommandMap_;
+}
+
+/// The singleton instance getter
+Edbee *Edbee::instance()
+{
+ if (!theInstance)
+ {
+ theInstance = new Edbee();
+ }
+ return theInstance;
+}
+
+/// sets the path where to find the keymap files
+/// @param keyMapPath the path with keymap files
+void Edbee::setKeyMapPath(const QString &keyMapPath)
+{
+ keyMapPath_ = keyMapPath;
+}
+
+/// Sets the grammar path
+/// @param grammarPath the path with the grammar files
+void Edbee::setGrammarPath(const QString &grammarPath)
+{
+ grammarPath_ = grammarPath;
+}
+
+/// Sets the path where to find the theme files
+/// @param themePath the path to find the themes
+void Edbee::setThemePath(const QString &themePath)
+{
+ themePath_ = themePath;
+}
+
+/// This method automatically initializes the edbee library it this hasn't
+/// already been done
+void Edbee::autoInit()
+{
+ if (!inited_)
+ {
+ init();
+ autoShutDownOnAppExit();
+ }
+}
+
+/// TODO: We need a way to load the (scoped) environment variables
+/// for now we just add some variables for some common languages
+static void initHardCodedDynamicScopes(DynamicVariables *env)
+{
+ QString tcs("TM_COMMENT_START");
+ QString tce("TM_COMMENT_END");
+ QString tcs2("TM_COMMENT_START_2");
+ QString tce2("TM_COMMENT_END_2");
+ QString tcs3("TM_COMMENT_START_3");
+ QString tce3("TM_COMMENT_END_3");
+ env->setAndGiveScopedSelector(tcs, "# ", "source.yaml");
+
+ env->setAndGiveScopedSelector(
+ tcs, "// ", "source.c, source.c++, source.objc, source.objc++");
+ env->setAndGiveScopedSelector(
+ tcs2, "/*", "source.c, source.c++, source.objc, source.objc++");
+ env->setAndGiveScopedSelector(
+ tce2, "*/", "source.c, source.c++, source.objc, source.objc++");
+
+ env->setAndGiveScopedSelector(tcs, "-- ", "source.lua");
+ env->setAndGiveScopedSelector(tcs2, "--[[", "source.lua");
+ env->setAndGiveScopedSelector(tce2, "]]", "source.lua");
+
+ env->setAndGiveScopedSelector(tcs, "/*", "source.css");
+ env->setAndGiveScopedSelector(tce, "*/", "source.css");
+
+ env->setAndGiveScopedSelector(tcs, "; ", "source.clojure");
+
+ env->setAndGiveScopedSelector(tcs, "# ", "source.coffee");
+ env->setAndGiveScopedSelector(tcs2, "###", "source.coffee");
+ env->setAndGiveScopedSelector(tce2, "###", "source.coffee");
+
+ env->setAndGiveScopedSelector(tcs, "", "text.html");
+
+ env->setAndGiveScopedSelector(tcs, "", "text.xml");
+
+ env->setAndGiveScopedSelector(tcs, "// ", "source.java");
+ env->setAndGiveScopedSelector(tcs2, "/*", "source.java");
+ env->setAndGiveScopedSelector(tce2, "*/", "source.java");
+
+ env->setAndGiveScopedSelector(tcs, "// ", "source.js, source.json");
+ env->setAndGiveScopedSelector(tcs2, "/*", "source.js, source.json");
+ env->setAndGiveScopedSelector(tce2, "*/", "source.js, source.json");
+
+ env->setAndGiveScopedSelector(tcs, "// ", "source.php");
+ env->setAndGiveScopedSelector(tcs2, "# ", "source.php");
+ env->setAndGiveScopedSelector(tcs3, "/*", "source.php");
+ env->setAndGiveScopedSelector(tce3, "*/", "source.php");
+
+ env->setAndGiveScopedSelector(tcs, "# ", "source.perl");
+
+ env->setAndGiveScopedSelector(tcs, "-# ",
+ "text.haml"); // I hate the default '/'
+
+ env->setAndGiveScopedSelector(tcs, "# ", "source.js, source.ruby");
+ env->setAndGiveScopedSelector(tcs2, "=begin", "source.js, source.ruby");
+ env->setAndGiveScopedSelector(tce2, "=end", "source.js, source.ruby");
+
+ env->setAndGiveScopedSelector(tcs, "// ", "source.scss");
+ env->setAndGiveScopedSelector(tcs2, "/*", "source.scss");
+ env->setAndGiveScopedSelector(tce2, "*/", "source.scss");
+
+ env->setAndGiveScopedSelector(tcs, "-- ", "source.sql");
+ env->setAndGiveScopedSelector(tcs2, "/*", "source.sql");
+ env->setAndGiveScopedSelector(tce2, "*/", "source.sql");
+
+ env->setAndGiveScopedSelector(tcs, "# ", "source.shell");
+}
+
+/// initializes the engine on startup
+void Edbee::init()
+{
+ defaultCommandMap_ = new TextEditorCommandMap();
+ codecManager_ = new TextCodecManager();
+ scopeManager_ = new TextScopeManager();
+ themeManager_ = new TextThemeManager();
+ grammarManager_ = new TextGrammarManager();
+ keyMapManager_ = new TextKeyMapManager();
+ environmentVariables_ = new DynamicVariables();
+ autoCompleteProviderList_ = new TextAutoCompleteProviderList();
+
+ qRegisterMetaType("edbee::TextBufferChange");
+
+ // register the AccessibileText interface
+ QAccessible::installFactory(edbee::AccessibleTextEditorWidget::factory);
+
+ // factory fill the default command map
+ defaultCommandMap_->loadFactoryCommandMap();
+
+ // load all grammar definitions
+ if (!grammarPath_.isEmpty())
+ {
+ grammarManager_->readAllGrammarFilesInPath(grammarPath_);
+ }
+
+ // load all themes
+ if (!themePath_.isEmpty())
+ {
+ themeManager_->listAllThemes(themePath_);
+ }
+
+ // load the keymaps or fallback to the factory keymap
+ if (!keyMapPath_.isEmpty())
+ {
+ keyMapManager_->loadAllKeyMaps(keyMapPath_);
+ }
+ else
+ {
+ keyMapManager_->loadFactoryKeyMap();
+ }
+
+ inited_ = true;
+
+ // for now initialize the dynamic variables
+ initHardCodedDynamicScopes(environmentVariables_);
+}
+
+/// destroys the texteditor manager and all related class
+void Edbee::shutdown()
+{
+ delete theInstance;
+ theInstance = 0;
+}
+
+/// Call this method to automatically shutdown the texteditor manager on
+/// shutdown (This method listens to the qApp::aboutToQuit signal
+void Edbee::autoShutDownOnAppExit()
+{
+ connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(shutdown()));
+}
+
+/// returns the default editor keymap
+TextEditorKeyMap *Edbee::defaultKeyMap()
+{
+ return keyMapManager()->get("");
+}
+
+/// Returns the default editor command map. This is the default command map
+/// that's used by the editor components
+/// @return the default command map
+TextEditorCommandMap *Edbee::defaultCommandMap()
+{
+ return defaultCommandMap_;
+}
+
+/// Returns the codec-manager for Edbee
+TextCodecManager *Edbee::codecManager()
+{
+ Q_ASSERT(inited_);
+ return codecManager_;
+}
+
+/// Returns the scope manager. The scope manager is a general class to share
+/// scope names and identifiers between different editors
+TextScopeManager *Edbee::scopeManager()
+{
+ Q_ASSERT(inited_);
+ return scopeManager_;
+}
+
+/// Returns the grammar manager used by all editors
+/// The grammar manager is used for sharing the different grammar definitions
+/// between the different editors
+TextGrammarManager *Edbee::grammarManager()
+{
+ Q_ASSERT(inited_);
+ return grammarManager_;
+}
+
+/// Returns the theme manager
+/// The theme manager is used to share themes between the different editors
+TextThemeManager *Edbee::themeManager()
+{
+ Q_ASSERT(inited_);
+ return themeManager_;
+}
+
+/// Returns the keymap manager
+TextKeyMapManager *Edbee::keyMapManager()
+{
+ Q_ASSERT(inited_);
+ return keyMapManager_;
+}
+
+/// Returns the dynamicvariables object
+DynamicVariables *Edbee::environmentVariables()
+{
+ Q_ASSERT(inited_);
+ return environmentVariables_;
+}
+
+TextAutoCompleteProviderList *Edbee::autoCompleteProviderList()
+{
+ Q_ASSERT(autoCompleteProviderList_);
+ return autoCompleteProviderList_;
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/edbee.h b/lib/edbee-lib/edbee/edbee.h
new file mode 100644
index 00000000..1d8abce4
--- /dev/null
+++ b/lib/edbee-lib/edbee/edbee.h
@@ -0,0 +1,81 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include
+
+namespace edbee
+{
+
+class DynamicVariables;
+class TextAutoCompleteProviderList;
+class TextCodecManager;
+class TextEditorCommandMap;
+class TextEditorKeyMap;
+class TextGrammarManager;
+class TextKeyMapManager;
+class TextScopeManager;
+class TextThemeManager;
+
+/// The texteditor manager,
+/// It manages all singleton objects for the editor
+/// It performs the initialization and shutdown code for all editors
+class EDBEE_EXPORT Edbee : public QObject
+{
+ Q_OBJECT
+private:
+ Edbee();
+ virtual ~Edbee();
+
+public:
+ static Edbee *instance();
+
+ void setKeyMapPath(const QString &keyMapPath);
+ void setGrammarPath(const QString &grammarPath);
+ void setThemePath(const QString &themePath);
+
+ void autoInit();
+
+public slots:
+ void init();
+ void shutdown();
+ void autoShutDownOnAppExit();
+
+public:
+ TextEditorKeyMap *defaultKeyMap();
+ TextEditorCommandMap *defaultCommandMap();
+
+ TextCodecManager *codecManager();
+ TextScopeManager *scopeManager();
+ TextGrammarManager *grammarManager();
+ TextThemeManager *themeManager();
+ TextKeyMapManager *keyMapManager();
+ DynamicVariables *environmentVariables();
+ TextAutoCompleteProviderList *autoCompleteProviderList();
+
+protected:
+ bool inited_; ///< This method is set to true if the manager is inited
+
+ QString grammarPath_; ///< The path were to load all grammars from
+ QString themePath_; ///< The path to load all themes from
+ QString keyMapPath_; ///< The path to load all keymaps
+
+ TextEditorCommandMap *defaultCommandMap_; ///< The default command map
+
+ TextCodecManager *codecManager_; ///< The text-editor codec manager
+ TextScopeManager *scopeManager_; ///< The text-scope manager
+ TextGrammarManager *grammarManager_; ///< The grammar manager
+ TextThemeManager *themeManager_; ///< The text theme manager
+ TextKeyMapManager *keyMapManager_; ///< The keymap manager
+ DynamicVariables
+ *environmentVariables_; ///< The (dynamic) environment variables
+ TextAutoCompleteProviderList
+ *autoCompleteProviderList_; ///< The global autocomplete providers
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/exports.h b/lib/edbee-lib/edbee/exports.h
new file mode 100644
index 00000000..c60047e6
--- /dev/null
+++ b/lib/edbee-lib/edbee/exports.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include
+
+#ifdef EDBEE_SHARED
+# ifdef EDBEE_EXPORT_SYMBOLS
+# define EDBEE_EXPORT Q_DECL_EXPORT
+# else
+# define EDBEE_EXPORT Q_DECL_IMPORT
+# endif
+#else
+# define EDBEE_EXPORT
+#endif
diff --git a/lib/edbee-lib/edbee/io/baseplistparser.cpp b/lib/edbee-lib/edbee/io/baseplistparser.cpp
new file mode 100644
index 00000000..9484c0d6
--- /dev/null
+++ b/lib/edbee-lib/edbee/io/baseplistparser.cpp
@@ -0,0 +1,203 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include
+
+#include "baseplistparser.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// The constructor for the parser
+BasePListParser::BasePListParser()
+ : xml_(0)
+{
+}
+
+/// the default desctructor
+BasePListParser::~BasePListParser()
+{
+ delete xml_;
+}
+
+/// Returns the last error message of the parsed file
+QString BasePListParser::lastErrorMessage() const
+{
+ return lastErrorMessage_;
+}
+
+/// Sets the last error message.
+/// To correctly set the last error message while parsing please use raiseError
+void BasePListParser::setLastErrorMessage(const QString &str)
+{
+ lastErrorMessage_ = str;
+}
+
+/// Start the parsing of the plist. If it isn't a valid plist this method return
+/// false. (it only checks and reads the existence of )
+bool BasePListParser::beginParsing(QIODevice *device)
+{
+ lastErrorMessage_.clear();
+ elementStack_.clear();
+
+ xml_ = new QXmlStreamReader(device);
+ if (readNextElement("plist"))
+ {
+ return true;
+ }
+ else
+ {
+ raiseError(QObject::tr("Start element not found!"));
+ return false;
+ }
+}
+
+/// Closes the parsers
+/// @return true if the parsing was succesful
+bool BasePListParser::endParsing()
+{
+ bool result = !xml_->error();
+ if (!result)
+ {
+ lastErrorMessage_ = QObject::tr("line %1: %2")
+ .arg(xml_->lineNumber())
+ .arg(xml_->errorString());
+ result = false;
+ }
+ delete xml_;
+ xml_ = 0;
+ return result;
+}
+
+/// Call this method to raise an error and stop the xml parsing
+/// @param str the error to raise
+void BasePListParser::raiseError(const QString &str)
+{
+ xml_->raiseError(str);
+}
+
+/// reads a list of qvariants
+QList BasePListParser::readList()
+{
+ QList result;
+ QVariant value;
+ int level = currentStackLevel();
+ while ((value = readNextPlistType(level)).isValid())
+ {
+ result.append(value);
+ }
+ return result;
+}
+
+/// reads a dictionary
+QHash BasePListParser::readDict()
+{
+ QHash result;
+ int level = currentStackLevel();
+ while (readNextElement("key", level))
+ {
+ QString key = readElementText();
+ QVariant data = readNextPlistType();
+ result.insert(key, data);
+ }
+ return result;
+}
+
+/// reads the next plist type
+/// @param level the level we're currently parsing
+QVariant BasePListParser::readNextPlistType(int level)
+{
+ if (readNextElement("", level))
+ {
+ // reads a dictionary
+ if (xml_->name().compare(QLatin1String("dict"), Qt::CaseInsensitive) == 0)
+ {
+ return readDict();
+
+ // reads an array
+ }
+ else if (xml_->name().compare(QLatin1String("array"), Qt::CaseInsensitive)
+ == 0)
+ {
+ return readList();
+
+ // reads a string
+ }
+ else if (xml_->name().compare(QLatin1String("string"), Qt::CaseInsensitive)
+ == 0)
+ {
+ return readElementText();
+ }
+ }
+ return QVariant();
+}
+
+/// Reads the next element and optionally expects it to be the given name
+/// @param name the name taht's expected. Use '' to not check the name
+/// @param minimum level the level the element should be. -1 means ignore this
+/// argument
+bool BasePListParser::readNextElement(const QString &name, int level)
+{
+ // qlog_info() << "* readNextElement(" << name << ","<atEnd())
+ {
+ switch (xml_->readNext())
+ {
+ case QXmlStreamReader::StartElement:
+ elementStack_.push(xml_->name().toString());
+ // qlog_info() << "- <" << elementStack_.top() << " (" <<
+ // elementStack_.size() << "/" << level << ")";
+
+ if (name.isEmpty())
+ return true; // name doesn't matter
+ if (xml_->name().compare(name, Qt::CaseInsensitive) == 0)
+ return true;
+ xml_->raiseError(QObject::tr("Expected %1 while parsing").arg(name));
+ return false;
+
+ case QXmlStreamReader::EndElement:
+ // qlog_info() << "- " <<
+ // (elementStack_.isEmpty()?elementStack_.top():"") << " (" <<
+ // elementStack_.size() << "/" << level << ")";
+ if (!elementStack_.isEmpty())
+ {
+ elementStack_.pop();
+ }
+
+ // end level detected
+ if (level >= 0 && elementStack_.size() < level)
+ {
+ return false;
+ }
+ break;
+ default:
+ // ignore
+ break;
+ }
+ }
+ return false;
+}
+
+/// Reads the element text contents
+QString BasePListParser::readElementText()
+{
+ QString result = xml_->readElementText();
+ if (!elementStack_.isEmpty())
+ {
+ elementStack_.pop();
+ }
+ return result;
+}
+
+/// returns the current stack-level
+int BasePListParser::currentStackLevel()
+{
+ return elementStack_.size();
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/io/baseplistparser.h b/lib/edbee-lib/edbee/io/baseplistparser.h
new file mode 100644
index 00000000..c7244731
--- /dev/null
+++ b/lib/edbee-lib/edbee/io/baseplistparser.h
@@ -0,0 +1,53 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include
+#include
+#include
+#include
+
+class QIODevice;
+class QXmlStreamReader;
+
+namespace edbee
+{
+
+/// A general plist xml-file parser
+class EDBEE_EXPORT BasePListParser
+{
+public:
+ BasePListParser();
+ virtual ~BasePListParser();
+
+ QString lastErrorMessage() const;
+
+ void setLastErrorMessage(const QString &str);
+
+ bool beginParsing(QIODevice *device);
+ bool endParsing();
+
+ void raiseError(const QString &str);
+
+ // general plist parsing
+ QList readList();
+ QHash readDict();
+ QVariant readNextPlistType(int level = -1);
+
+ bool readNextElement(const QString &name, int level = -1);
+ QString readElementText();
+
+ int currentStackLevel();
+
+private:
+ QString lastErrorMessage_; ///< The last error message
+ QStack elementStack_; ///< The elements currently on the stack
+ QXmlStreamReader *xml_; ///< The reference of the xml reader
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/io/jsonparser.cpp b/lib/edbee-lib/edbee/io/jsonparser.cpp
new file mode 100644
index 00000000..a216751c
--- /dev/null
+++ b/lib/edbee-lib/edbee/io/jsonparser.cpp
@@ -0,0 +1,255 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+#include "jsonparser.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// Constructs the jsonparser
+JsonParser::JsonParser()
+ : errorMessage_()
+ , errorOffset_(0)
+ , errorLine_(0)
+ , errorColumn_(0)
+{
+}
+
+/// The parser destructor
+JsonParser::~JsonParser() {}
+
+/// loads the given keymap file returns true on success
+/// @param filename the filename to parse
+/// @return true if the file was parsed
+bool JsonParser::parse(const QString &fileName)
+{
+ clearErrors();
+ QFile file(fileName);
+ if (file.open(QIODevice::ReadOnly))
+ {
+ bool result = parse(&file);
+ file.close();
+ return result;
+ }
+ else
+ {
+ errorMessage_ = file.errorString();
+ return false;
+ }
+}
+
+/// Parses the given QIODevice
+/// @param device the device to parse the json data
+/// @return true if the file was successfully parsed
+bool JsonParser::parse(QIODevice *device)
+{
+ clearErrors();
+ bool opened = false;
+ if (!device->isOpen())
+ {
+ if (!device->open(QIODevice::ReadOnly))
+ {
+ errorMessage_ = device->errorString();
+ return false;
+ }
+ opened = true;
+ }
+
+ QByteArray bytesIn = device->readAll();
+ bool result = parse(bytesIn);
+ if (opened)
+ device->close();
+ return result;
+}
+
+/// opens the given bytes as a json document
+/// @param bytesIn the bytes of the Json document
+/// @return true if the data was succeeful parsed
+bool JsonParser::parse(const QByteArray &bytesIn)
+{
+ clearErrors();
+ QByteArray bytes = stripCommentsFromJson(bytesIn);
+ QJsonParseError parseResult;
+ QJsonDocument document = QJsonDocument::fromJson(bytes, &parseResult);
+ if (parseResult.error != QJsonParseError::NoError)
+ {
+ errorMessage_ = parseResult.errorString();
+ errorOffset_ = parseResult.offset;
+
+ // convert the offset to a column and offset
+ errorLine_ = errorColumn_ = 0;
+ for (int i = 0, cnt = qMin(errorOffset_, bytes.size()); i < cnt; ++i)
+ {
+ ++errorColumn_;
+ if (bytes.at(i) == '\n')
+ {
+ errorColumn_ = 0;
+ ++errorLine_;
+ }
+ }
+ return false;
+ }
+ result_ = document.toVariant();
+ return true;
+}
+
+/// Returns the result of the json parsing
+QVariant JsonParser::result()
+{
+ return result_;
+}
+
+/// Clears the error flags/variables
+void JsonParser::clearErrors()
+{
+ errorMessage_.clear();
+ errorOffset_ = errorLine_ = errorColumn_ = 0;
+}
+
+/// Returns the errormessage
+QString JsonParser::errorMessage() const
+{
+ return errorMessage_;
+}
+
+/// returns the line number of the error
+int JsonParser::errorLine() const
+{
+ return errorLine_;
+}
+
+/// Returns the error column
+int JsonParser::errorColumn() const
+{
+ return errorColumn_;
+}
+
+/// Returns the full eror message
+QString JsonParser::fullErrorMessage() const
+{
+ if (!errorLine())
+ return errorMessage();
+ return QObject::tr("%1 @ line %2").arg(errorMessage()).arg(errorLine());
+}
+
+/// reads all bytes from the io device, while removing comments and keeping the
+/// number of lines quick and dirty 'lexer' that replaces every comment by
+/// spaces (so the number of charactes keeps the same)
+QByteArray JsonParser::stripCommentsFromJson(const QByteArray &bytesIn)
+{
+ QByteArray result;
+ enum
+ {
+ StateNormal,
+ StateString,
+ StateLineComment,
+ StateBlockComment
+ } state
+ = StateNormal;
+ for (int i = 0, cnt = bytesIn.size(); i < cnt; ++i)
+ {
+ char c = bytesIn.at(i);
+ switch (state)
+ {
+ case StateNormal:
+ // a '/'
+ if (c == '/')
+ {
+ char c2 = ((i + 1) < cnt) ? bytesIn.at(i + 1) : 0;
+ if (c2 == '/')
+ {
+ i++;
+ state = StateLineComment;
+ result.append(' ');
+ result.append(' ');
+ break;
+ }
+ else if (c2 == '*')
+ {
+ i++;
+ state = StateBlockComment;
+ result.append(' ');
+ result.append(' ');
+ break;
+ }
+ // start of a string
+ }
+ else if (c == '\"')
+ {
+ state = StateString;
+ }
+ result.append(c);
+ break;
+
+ case StateString:
+ if (c == '\\')
+ {
+ char c2 = ((i + 1) < cnt) ? bytesIn.at(i + 1) : 0;
+ if (c2 == '\"')
+ {
+ i++;
+ result.append('\\');
+ result.append('\"');
+ break;
+ }
+ }
+ else if (c == '\"')
+ {
+ state = StateNormal;
+ }
+ result.append(c);
+ break;
+
+ case StateLineComment:
+ if (c == '\r')
+ {
+ result.append('\r');
+ }
+ else if (c == '\n')
+ {
+ result.append(c);
+ state = StateNormal;
+ }
+ else
+ {
+ result.append(' ');
+ }
+ break;
+
+ case StateBlockComment:
+ if (c == '*')
+ {
+ char c2 = ((i + 1) < cnt) ? bytesIn.at(i + 1) : 0;
+ if (c2 == '/')
+ {
+ i++;
+ state = StateNormal;
+ result.append(' ');
+ }
+ result.append(' ');
+ }
+ else if (c == '\r' || c == '\n')
+ {
+ result.append(c);
+ }
+ else
+ {
+ result.append(' ');
+ }
+ break;
+ }
+ }
+ return result;
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/io/jsonparser.h b/lib/edbee-lib/edbee/io/jsonparser.h
new file mode 100644
index 00000000..7143f8fb
--- /dev/null
+++ b/lib/edbee-lib/edbee/io/jsonparser.h
@@ -0,0 +1,55 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include
+
+class QIODevice;
+
+namespace edbee
+{
+
+/// A Json Parser that supports strings in json sources!
+/// standard json doesn't support comments. This class strips the comments
+/// before passing it to qt the comments are replaced by spaces, this way the
+/// line-numbers and column numbers will stay the same
+class EDBEE_EXPORT JsonParser
+{
+public:
+ JsonParser();
+ virtual ~JsonParser();
+
+ bool parse(const QString &fileName);
+ bool parse(QIODevice *device);
+ bool parse(const QByteArray &bytesIn);
+
+ QVariant result();
+
+ void clearErrors();
+
+ QString errorMessage() const;
+ int errorLine() const;
+ int errorColumn() const;
+
+ QString fullErrorMessage() const;
+
+protected:
+ QByteArray stripCommentsFromJson(const QByteArray &bytesIn);
+
+private:
+ QString errorMessage_; ///< The error message
+ int errorOffset_; ///< The character offset of the error
+ int errorLine_; ///< The line number of the error
+ int errorColumn_; ///< The column number of the error
+
+ QVariant
+ result_; ///< variant is the easiest format to play around with in Qt. The
+ ///< result will be QVariantMap (no hash!) or QVariantArray
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/io/keymapparser.cpp b/lib/edbee-lib/edbee/io/keymapparser.cpp
new file mode 100644
index 00000000..31e7c639
--- /dev/null
+++ b/lib/edbee-lib/edbee/io/keymapparser.cpp
@@ -0,0 +1,140 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "keymapparser.h"
+
+#include
+#include
+#include
+#include
+#include
+
+#include "edbee/io/jsonparser.h"
+#include "edbee/models/texteditorkeymap.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// constructs the keymapparser
+KeyMapParser::KeyMapParser()
+ : parser_(0)
+{
+ parser_ = new JsonParser();
+}
+
+/// destructs the keymapparser
+KeyMapParser::~KeyMapParser()
+{
+ delete parser_;
+}
+
+/// loads the given keymap file returns true on success
+/// @param filename the file to parse
+/// @param keyMap the keymapfile to put the results in
+/// @return true on success
+bool KeyMapParser::parse(const QString &filename, TextEditorKeyMap *keyMap)
+{
+ if (parser_->parse(filename))
+ {
+ return parse(parser_->result(), keyMap);
+ }
+ buildErrorMessageFromParser();
+ return false;
+}
+
+bool KeyMapParser::parse(QIODevice *device, TextEditorKeyMap *keyMap)
+{
+ if (parser_->parse(device))
+ {
+ return parse(parser_->result(), keyMap);
+ }
+ buildErrorMessageFromParser();
+ return false;
+}
+
+bool KeyMapParser::parse(const QByteArray &bytes, TextEditorKeyMap *keyMap)
+{
+ if (parser_->parse(bytes))
+ {
+ return parse(parser_->result(), keyMap);
+ }
+ buildErrorMessageFromParser();
+ return false;
+}
+
+/// Parsers the variant map so the keymapManager is filled
+/// @param variant the variant to parse
+/// @param manager the manager to parse
+/// @param manager the keymap manager
+bool KeyMapParser::parse(const QVariant &variant, TextEditorKeyMap *keyMap)
+{
+ errorMessage_.clear();
+
+ // next read all exteniosn
+ QVariantList list = variant.toList();
+ if (list.isEmpty())
+ {
+ errorMessage_ = QObject::tr("No data found!");
+ return false;
+ }
+
+ foreach (QVariant var, list)
+ {
+ QVariantMap obj = var.toMap();
+ if (obj.isEmpty())
+ {
+ errorMessage_.append(QObject::tr("Expected object in keymap\n"));
+ }
+ else
+ {
+ parseBindingBlock(obj, keyMap);
+ }
+ }
+ return true;
+}
+
+/// Returns the error message
+QString KeyMapParser::errorMessage() const
+{
+ return errorMessage_;
+}
+
+void KeyMapParser::buildErrorMessageFromParser()
+{
+ errorMessage_ = parser_->fullErrorMessage();
+}
+
+/// parses the given block
+bool KeyMapParser::parseBindingBlock(const QVariantMap &valueObject,
+ TextEditorKeyMap *keyMap)
+{
+ QVariantMap context = valueObject.value("context").toMap();
+ QVariantList bindings = valueObject.value("bindings").toList();
+
+ // add all bindings
+ foreach (QVariant bindingItem, bindings)
+ {
+ QVariantMap binding = bindingItem.toMap();
+ QString keys = binding.value("keys").toString();
+ QString command = binding.value("command").toString();
+
+ if (keys.size() > 0 && command.size() > 0)
+ {
+
+ /// TODO: add binding to keymap
+
+ if (!keyMap->add(command, keys))
+ {
+ errorMessage_.append(
+ QObject::tr("Invalid keysequence used %1\n").arg(keys));
+ }
+ }
+ }
+ return true;
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/io/keymapparser.h b/lib/edbee-lib/edbee/io/keymapparser.h
new file mode 100644
index 00000000..c66f5f1e
--- /dev/null
+++ b/lib/edbee-lib/edbee/io/keymapparser.h
@@ -0,0 +1,76 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include
+#include
+#include
+
+class QIODevice;
+
+namespace edbee
+{
+
+class JsonParser;
+class TextEditorKeyMap;
+
+/// This emthod method can be used to load text-editor keymaps
+///
+/// The json file has got the following format
+///
+/// [
+/// {
+/// "context": {
+/// "name": "texteditor", // the part of the appliction these
+/// bindigns used for.
+/// ...
+/// },
+/// "defaults": {
+/// "context": [ { // the context defined here is
+/// coppied to alle keybindings
+/// {"key": "scope", "value": "source.php"},
+/// ...
+/// }]
+/// },
+/// "bindings": [
+/// { "keys": "Ctrl+M,U", "command": "display_undo_stack" }, //
+/// todo, add scopes to keybindings
+/// ....
+/// ]
+/// },
+/// ...
+/// ]
+///
+/// Context is still not completely thought over but it is used to make certain
+/// keybindings context specific. Think for example of keybindings only used for
+/// given language
+///
+class EDBEE_EXPORT KeyMapParser
+{
+public:
+ KeyMapParser();
+ virtual ~KeyMapParser();
+
+ bool parse(const QString &filename, TextEditorKeyMap *keyMap);
+ bool parse(QIODevice *device, TextEditorKeyMap *keyMap);
+ bool parse(const QByteArray &bytes, TextEditorKeyMap *keyMap);
+ bool parse(const QVariant &variant, TextEditorKeyMap *keyMap);
+
+ QString errorMessage() const;
+
+private:
+ void buildErrorMessageFromParser();
+
+ bool parseBindingBlock(const QVariantMap &valueObject,
+ TextEditorKeyMap *keyMap);
+
+ QString errorMessage_; ///< The current error message
+ JsonParser *parser_; ///< The json parser
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/io/textdocumentserializer.cpp b/lib/edbee-lib/edbee/io/textdocumentserializer.cpp
new file mode 100644
index 00000000..5ac2c6e6
--- /dev/null
+++ b/lib/edbee-lib/edbee/io/textdocumentserializer.cpp
@@ -0,0 +1,268 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "textdocumentserializer.h"
+
+#include
+#include
+#include
+
+#include "edbee/models/textdocument.h"
+#include "edbee/util/lineending.h"
+#include "edbee/util/textcodecdetector.h"
+#include "edbee/util/textcodec.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+TextDocumentSerializer::TextDocumentSerializer(TextDocument *textDocument)
+ : textDocumentRef_(textDocument)
+ , blockSize_(8192)
+ , filterRef_(0)
+{
+}
+
+/// loads the file data for the given (opened) ioDevice
+/// @return true on success,
+bool TextDocumentSerializer::loadWithoutOpening(QIODevice *ioDevice)
+{
+ errorString_.clear();
+
+ // start raw appending
+ textDocumentRef_->rawAppendBegin();
+
+ // read the file in blocks of 4096 bytes
+ TextCodec *detectedCodec = 0;
+ const LineEnding *detectedLineEnding = 0;
+
+ QTextDecoder *textDecoder = 0;
+
+ // read the buffer
+ QByteArray bytes(blockSize_ + 1, 0);
+ QString remainingBuffer;
+
+ /// TODO: atEnd doesn't seem to work !?!
+ /// TODO: implement isStopRequested to stop loading if required
+ while (/*ioDeviceRef_->atEnd() &&*/ true /*!isStopRequested()*/)
+ {
+
+ int bytesRead = ioDevice->read(bytes.data(), blockSize_ - 1);
+ if (bytesRead > 0)
+ {
+ bytes[bytesRead + 1] = 0; // 0 terminate the read bytes
+
+ // In the first block we're need to detect the correct encoding
+ if (!detectedCodec)
+ {
+ TextCodecDetector codecDetector(bytes.constData(), bytesRead);
+ detectedCodec = codecDetector.detectCodec();
+ Q_ASSERT(detectedCodec);
+ textDecoder = detectedCodec->makeDecoder();
+ }
+
+ // convert the bytes to a string
+ QString newBuffer = textDecoder->toUnicode(bytes.constData(), bytesRead);
+
+ // next detect the line ending. When no line ending is detected 0 is
+ // returned!
+ if (!detectedLineEnding)
+ {
+ detectedLineEnding = LineEnding::detect(newBuffer);
+ }
+
+ // when we detected a line ending
+ if (detectedLineEnding)
+ {
+ remainingBuffer.append(newBuffer);
+ remainingBuffer = appendBufferToDocument(remainingBuffer);
+ // else we need to append it to the rest
+ }
+ else
+ {
+ remainingBuffer.append(newBuffer);
+ }
+ }
+
+ // we're done
+ if (bytesRead <= 0)
+ break;
+ }
+
+ // When no line ending could be detected, take the unix line ending
+ if (!detectedLineEnding)
+ detectedLineEnding
+ = LineEnding::get(LineEnding::UnixType); // fallback to unix
+ if (!detectedCodec)
+ {
+ detectedCodec = TextCodecDetector::globalPreferedCodec();
+ }
+
+ // set the detected items
+ delete textDecoder;
+ textDocumentRef_->setEncoding(detectedCodec);
+ textDocumentRef_->setLineEnding(detectedLineEnding);
+
+ // append the remaing line ending
+ remainingBuffer = appendBufferToDocument(remainingBuffer);
+ // fileDocument_->appendLine( remainingBuffer,
+ // FsFileDocument::Line::StateUnkown ) ; // append the last line
+
+ // next detect the file type
+ // FileType *fileType = app()->fileTypeManager()->detectFileType(
+ // virtualFile()->fileName() ); fileDocument_->setFileType( fileType );
+
+ // start raw appending
+ textDocumentRef_->rawAppendEnd();
+ return true;
+}
+
+/// executes the file loading for the given (unopened) ioDevice
+/// @return true on success,
+bool TextDocumentSerializer::load(QIODevice *ioDevice)
+{
+ errorString_.clear();
+
+ // open the device
+ if (!ioDevice->open(QIODevice::ReadOnly))
+ {
+ errorString_ = ioDevice->errorString();
+ return false;
+ }
+ bool result = loadWithoutOpening(ioDevice);
+ ioDevice->close();
+
+ return result;
+}
+
+/// loads the file data for the given (opened) ioDevice
+/// @return true on success
+bool TextDocumentSerializer::saveWithoutOpening(QIODevice *ioDevice)
+{
+ errorString_.clear();
+
+ // get the codec en encoder
+ TextCodec *codec = textDocumentRef_->encoding();
+ QTextEncoder *encoder = codec->makeEncoder();
+ QString lineEnding(textDocumentRef_->lineEnding()->chars());
+
+ // work via a buffer
+ QByteArray buffer;
+ for (int lineIdx = 0, cnt = textDocumentRef_->lineCount(); lineIdx < cnt;
+ ++lineIdx)
+ {
+ QString line = textDocumentRef_->lineWithoutNewline(lineIdx);
+ if (filter())
+ {
+ // if this line is not selected move to the next
+ if (!filter()->saveLineSelector(this, lineIdx, line))
+ {
+ continue;
+ }
+ }
+ buffer.append(encoder->fromUnicode(line));
+
+ // no newline after the last line
+ if (lineIdx + 1 < cnt)
+ {
+ buffer.append(encoder->fromUnicode(lineEnding));
+ }
+
+ // flush the bufer
+ if (buffer.size() >= blockSize_)
+ {
+ if (ioDevice->write(buffer) < 0)
+ {
+ errorString_ = ioDevice->errorString();
+ buffer.clear();
+ break;
+ }
+ buffer.clear();
+ }
+ }
+
+ // flush the last part of the buffer
+ if (buffer.size())
+ {
+ if (ioDevice->write(buffer) < 0)
+ {
+ errorString_ = ioDevice->errorString();
+ }
+ buffer.clear();
+ }
+ delete encoder;
+ return errorString_.isEmpty();
+}
+
+/// Saves the given document to the iodevice
+/// This method opens and closes the ioDevice..
+bool TextDocumentSerializer::save(QIODevice *ioDevice)
+{
+ errorString_.clear();
+
+ // open the device
+ if (!ioDevice->open(QIODevice::WriteOnly))
+ {
+ errorString_ = ioDevice->errorString();
+ return false;
+ }
+
+ bool result = saveWithoutOpening(ioDevice);
+ ioDevice->close();
+
+ return result;
+}
+
+/// This method appends the given lines to the document
+/// @param strIn the string to append
+/// @retirn the remaining last line
+QString TextDocumentSerializer::appendBufferToDocument(const QString &strIn)
+{
+ // The code blow is to translate all newlines to the correct format
+ int lastPos = 0;
+ for (int pos = 0, len = strIn.length(); pos < len; ++pos)
+ {
+
+ // we found an 'wrong' endline
+ QChar c = strIn.at(pos);
+ if (c == '\r')
+ {
+ // append the buffer
+ if (pos - lastPos - 1 >= 0)
+ {
+ textDocumentRef_->rawAppend(strIn.data() + lastPos, pos - lastPos);
+ lastPos = pos;
+ }
+
+ // lookahead to check if it's a '\n'
+ if (pos + 1 < strIn.length())
+ {
+ pos += 1;
+ QChar c2 = strIn.at(pos);
+ if (c2 != '\n')
+ {
+ pos -= 1;
+ }
+ lastPos = pos;
+ // textDocumentRef_->rawAppend('\n');
+ // we need to process the last line-end (later)
+ }
+ else
+ {
+ return "\r";
+ }
+ }
+ }
+
+ if (strIn.length() - lastPos > 0)
+ {
+ textDocumentRef_->rawAppend(strIn.data() + lastPos,
+ strIn.length() - lastPos);
+ }
+ return "";
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/io/textdocumentserializer.h b/lib/edbee-lib/edbee/io/textdocumentserializer.h
new file mode 100644
index 00000000..78a71f34
--- /dev/null
+++ b/lib/edbee-lib/edbee/io/textdocumentserializer.h
@@ -0,0 +1,63 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include
+
+class QIODevice;
+
+namespace edbee
+{
+
+class TextDocument;
+class TextDocumentSerializer;
+
+class EDBEE_EXPORT TextDocumentSerializerFilter
+{
+public:
+ /// A special filter class to filter lines while saving
+ /// @param serializer the text serialzer
+ /// @param lineIdx the line index that needs to be saved
+ /// @param line the line that's save
+ /// @return true if the line needs to be selected. return false to skip the
+ /// line
+ virtual bool saveLineSelector(TextDocumentSerializer *serializer, int lineIdx,
+ QString &line)
+ = 0;
+};
+
+/// A class used to load/save a text-file from and to an IODevice
+class EDBEE_EXPORT TextDocumentSerializer
+{
+public:
+ TextDocumentSerializer(TextDocument *textDocument);
+
+ bool loadWithoutOpening(QIODevice *ioDevice);
+ bool load(QIODevice *ioDevice);
+
+ bool saveWithoutOpening(QIODevice *ioDevice);
+ bool save(QIODevice *ioDevice);
+
+ QString errorString() { return errorString_; }
+ void setFilter(TextDocumentSerializerFilter *filter) { filterRef_ = filter; }
+ TextDocumentSerializerFilter *filter() { return filterRef_; }
+
+private:
+ QString appendBufferToDocument(const QString &strIn);
+
+private:
+ TextDocument *textDocumentRef_; ///< The reference to the textdocument
+ int blockSize_; ///< The block-size to read/write. you must NOT makes this to
+ ///< small.. The first block is used to detected the
+ ///< encoding!!
+ QString
+ errorString_; ///< The last error (This is reset when calling load/save)
+ TextDocumentSerializerFilter *filterRef_; ///< The line filter
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/io/tmlanguageparser.cpp b/lib/edbee-lib/edbee/io/tmlanguageparser.cpp
new file mode 100644
index 00000000..cdca5043
--- /dev/null
+++ b/lib/edbee-lib/edbee/io/tmlanguageparser.cpp
@@ -0,0 +1,299 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "tmlanguageparser.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "edbee/io/baseplistparser.h"
+#include "edbee/io/jsonparser.h"
+#include "edbee/models/textgrammar.h"
+#include "edbee/edbee.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// Parses a textmate language
+TmLanguageParser::TmLanguageParser() {}
+
+/// returns the last error message
+QString TmLanguageParser::lastErrorMessage() const
+{
+ return lastErrorMessage_;
+}
+
+/// Sets the last error message
+void TmLanguageParser::setLastErrorMessage(const QString &str)
+{
+ lastErrorMessage_ = str;
+}
+
+/// Parses a PList (XML Grammar file definition)
+TextGrammar *TmLanguageParser::parsePlist(QIODevice *device)
+{
+ TextGrammar *result = nullptr;
+
+ BasePListParser plistParser;
+ if (plistParser.beginParsing(device))
+ {
+ QVariant plist = plistParser.readNextPlistType();
+ result = createLanguage(plist);
+ }
+
+ if (!plistParser.endParsing())
+ {
+ delete result;
+ result = nullptr;
+ }
+
+ // returns the language
+ return result;
+}
+
+/// Parses a JSON grammar file definition
+TextGrammar *TmLanguageParser::parseJson(QIODevice *device)
+{
+ TextGrammar *result = nullptr;
+
+ JsonParser jsonParser;
+ if (jsonParser.parse(device))
+ {
+ // QVariant plist = readNextPlistType( );
+ QVariant parseResult = jsonParser.result();
+ result = createLanguage(parseResult);
+ }
+
+ return result;
+}
+
+/// reads the content of a single file
+/// @param device the device to read from. The device NEEDS to be open!!
+/// @param json use the json parser
+/// @return the language grammar or nullptr on error
+TextGrammar *TmLanguageParser::parse(QIODevice *device, bool json)
+{
+ if (json)
+ {
+ return parseJson(device);
+ }
+ else
+ {
+ return parsePlist(device);
+ }
+}
+
+/// Parses the given file
+TextGrammar *TmLanguageParser::parse(QFile &file)
+{
+ if (file.open(QIODevice::ReadOnly))
+ {
+ TextGrammar *result = parse(&file, file.fileName().endsWith(".json"));
+ file.close();
+ return result;
+ }
+ else
+ {
+ setLastErrorMessage(file.errorString());
+ return nullptr;
+ }
+}
+
+/// parses the given grammar file
+/// @param file the file to read
+/// @return the language grammar or 0 on error
+TextGrammar *TmLanguageParser::parse(const QString &fileName)
+{
+ QFile file(fileName);
+ return parse(file);
+}
+
+/// sets the captures
+void TmLanguageParser::addCapturesToGrammarRule(
+ TextGrammarRule *rule, QHash captures, bool endCapture)
+{
+ if (captures.isEmpty())
+ {
+ return;
+ }
+ QHashIterator itr(captures);
+ while (itr.hasNext())
+ {
+ itr.next();
+ QHash fields = itr.value().toHash();
+ int keyIndex = itr.key().toInt();
+ QString name = fields.value("name").toString();
+ if (endCapture)
+ {
+ rule->setEndCapture(keyIndex, name);
+ }
+ else
+ {
+ rule->setCapture(keyIndex, name);
+ }
+ }
+}
+
+/// Adds all patterns to the grammar rules
+void TmLanguageParser::addPatternsToGrammarRule(TextGrammarRule *rule,
+ QList patterns)
+{
+ foreach (QVariant pattern, patterns)
+ {
+ TextGrammarRule *childRule = createGrammarRule(rule->grammar(), pattern);
+ if (childRule)
+ {
+ rule->giveRule(childRule);
+ }
+ }
+}
+
+/// creates a grammar rue
+TextGrammarRule *TmLanguageParser::createGrammarRule(TextGrammar *grammar,
+ const QVariant &data)
+{
+ QHash map = data.toHash();
+ QString match = map.value("match").toString();
+ QString include = map.value("include").toString();
+ QString begin = map.value("begin").toString();
+ QString name = map.value("name").toString();
+
+ // match filled?
+ if (!match.isEmpty())
+ {
+ TextGrammarRule *rule
+ = TextGrammarRule::createSingleLineRegExp(grammar, name, match);
+ QHash captures = map.value("captures").toHash();
+ addCapturesToGrammarRule(rule, captures);
+ return rule;
+ }
+ else if (!include.isEmpty())
+ {
+ return TextGrammarRule::createIncludeRule(grammar, include);
+ }
+ else if (!begin.isEmpty())
+ {
+ QString end = map.value("end").toString();
+
+ // TODO: contentScopeName
+ QString contentScope = name;
+ TextGrammarRule *rule = TextGrammarRule::createMultiLineRegExp(
+ grammar, name, contentScope, begin, end);
+
+ // add the patterns
+ QList patterns = map.value("patterns").toList();
+ addPatternsToGrammarRule(rule, patterns);
+
+ if (map.contains("captures"))
+ {
+ QHash captures = map.value("captures").toHash();
+ addCapturesToGrammarRule(rule, captures);
+ addCapturesToGrammarRule(rule, captures, true);
+ }
+ if (map.contains("beginCaptures"))
+ {
+ QHash captures = map.value("beginCaptures").toHash();
+ addCapturesToGrammarRule(rule, captures);
+ }
+ if (map.contains("endCaptures"))
+ {
+ QHash endCaptures = map.value("endCaptures").toHash();
+ addCapturesToGrammarRule(rule, endCaptures, true);
+ }
+ return rule;
+ }
+ else
+ {
+ TextGrammarRule *rule = TextGrammarRule::createRuleList(grammar);
+
+ // add the patterns
+ QList patterns = map.value("patterns").toList();
+ addPatternsToGrammarRule(rule, patterns);
+
+ return rule;
+ }
+
+ // angle_brackets
+ //
+ // begin
+ // <
+ // end
+ // >
+ // name
+ // meta.angle-brackets.c++
+ // patterns
+ //
+ //
+ // include
+ // #angle_brackets
+ //
+ //
+ // include
+ // $base
+ //
+ //
+ //
+}
+
+// parses the given language
+TextGrammar *TmLanguageParser::createLanguage(QVariant &data)
+{
+ QHash hashMap = data.toHash();
+ QString name = hashMap.value("name").toString();
+ QString scopeName = hashMap.value("scopeName").toString();
+ QString uuid = hashMap.value("uuid").toString();
+
+ if (name.isEmpty() || scopeName.isEmpty())
+ {
+ setLastErrorMessage("Name or scope is empty. Cannot parse language!");
+ return nullptr;
+ }
+
+ // construct the grammar
+ TextGrammar *grammar = new TextGrammar(scopeName, name);
+
+ // and get the main patterns
+ // construct the main rule
+ TextGrammarRule *mainRule
+ = TextGrammarRule::createMainRule(grammar, scopeName);
+ grammar->giveMainRule(mainRule);
+
+ QList patterns = hashMap.value("patterns").toList();
+ addPatternsToGrammarRule(mainRule, patterns);
+
+ // get the repos
+ QHash repos = hashMap.value("repository").toHash();
+ QHashIterator itr(repos);
+ while (itr.hasNext())
+ {
+ itr.next();
+ TextGrammarRule *rule = createGrammarRule(grammar, itr.value());
+ if (rule)
+ {
+ grammar->giveToRepos(itr.key(), rule);
+ }
+ else
+ {
+ qlog_warn() << "Error create grammar rule!";
+ }
+ }
+
+ // add the file types
+ QStringList fileTypes = hashMap.value("fileTypes").toStringList();
+ foreach (QString fileType, fileTypes)
+ {
+ grammar->addFileExtension(fileType);
+ }
+
+ return grammar;
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/io/tmlanguageparser.h b/lib/edbee-lib/edbee/io/tmlanguageparser.h
new file mode 100644
index 00000000..e6822357
--- /dev/null
+++ b/lib/edbee-lib/edbee/io/tmlanguageparser.h
@@ -0,0 +1,57 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include
+#include
+#include
+#include
+
+class QFile;
+class QIODevice;
+class QXmlStreamReader;
+
+namespace edbee
+{
+
+class TextGrammar;
+class TextGrammarManager;
+class TextGrammarRule;
+
+/// For parsing a Textmate Language
+class EDBEE_EXPORT TmLanguageParser
+{
+public:
+ TmLanguageParser();
+ TextGrammar *parsePlist(QIODevice *device);
+ TextGrammar *parseJson(QIODevice *device);
+
+ TextGrammar *parse(QIODevice *device, bool json = false);
+ TextGrammar *parse(QFile &file);
+ TextGrammar *parse(const QString &fileName);
+
+ QString lastErrorMessage() const;
+
+protected:
+ void setLastErrorMessage(const QString &str);
+
+ void addCapturesToGrammarRule(TextGrammarRule *rule,
+ QHash captures,
+ bool endCapture = false);
+ void addPatternsToGrammarRule(TextGrammarRule *rule,
+ QList patterns);
+
+ TextGrammarRule *createGrammarRule(TextGrammar *grammar,
+ const QVariant &data);
+ TextGrammar *createLanguage(QVariant &data);
+
+private:
+ QString lastErrorMessage_; ///< The last error message
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/io/tmthemeparser.cpp b/lib/edbee-lib/edbee/io/tmthemeparser.cpp
new file mode 100644
index 00000000..3d9a2e0e
--- /dev/null
+++ b/lib/edbee-lib/edbee/io/tmthemeparser.cpp
@@ -0,0 +1,156 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "edbee/views/texttheme.h"
+#include "tmthemeparser.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+TmThemeParser::TmThemeParser() {}
+
+/// parses theme color
+QColor TmThemeParser::parseThemeColor(const QString &rgba) const
+{
+ // check if there's an alpha component
+ if (rgba.length() == 9)
+ {
+ QString argb = "#";
+ argb.append(rgba.right(2)); // append the alpha part
+ argb.append(rgba.mid(1, 6)); // append the color part
+ return QColor(argb);
+ // return the color
+ }
+ else
+ {
+ return QColor(rgba);
+ }
+}
+
+/// reads the content of a single file
+/// @param device the device to read from. The device NEEDS to be open!!
+/// @return the language grammar or 0 on error
+TextTheme *TmThemeParser::readContent(QIODevice *device)
+{
+ TextTheme *result = 0;
+
+ if (beginParsing(device))
+ {
+ QVariant plist = readNextPlistType();
+ result = createTheme(plist);
+ }
+
+ if (!endParsing())
+ {
+ delete result;
+ result = 0;
+ }
+
+ // returns the language
+ return result;
+}
+
+/// fetches the settings from the hashmap and puts them in the theme file
+void TmThemeParser::fillRuleSettings(TextTheme *theme,
+ const QHash &settings)
+{
+ // force an opaque background color
+ QColor background = parseThemeColor(settings.value("background").toString());
+ if (background.alphaF() < 1.0)
+ {
+ background.setRedF(background.redF() * background.alphaF());
+ background.setGreenF(background.greenF() * background.alphaF());
+ background.setBlueF(background.blueF() * background.alphaF());
+ background.setAlphaF(1.0);
+ }
+ theme->setBackgroundColor(background);
+
+ theme->setForegroundColor(
+ parseThemeColor(settings.value("foreground").toString()));
+ theme->setCaretColor(parseThemeColor(settings.value("caret").toString()));
+ theme->setInvisiblesColor(
+ parseThemeColor(settings.value("invisibles").toString()));
+ theme->setLineHighlightColor(
+ parseThemeColor(settings.value("lineHighlight").toString()));
+ theme->setSelectionColor(
+ parseThemeColor(settings.value("selection").toString()));
+ theme->setFindHighlightForegroundColor(
+ parseThemeColor(settings.value("findHighlightForeground").toString()));
+ theme->setFindHighlightBackgroundColor(
+ parseThemeColor(settings.value("findHighlight").toString()));
+ theme->setSelectionBorderColor(
+ parseThemeColor(settings.value("selectionBorder").toString()));
+ theme->setActiveGuideColor(
+ parseThemeColor(settings.value("activeGuide").toString()));
+ theme->setBracketForegroundColor(
+ parseThemeColor(settings.value("bracketsForeground").toString()));
+ theme->setBracketOptions(settings.value("bracketsOptions").toString());
+ theme->setBracketContentsForegroundColor(
+ parseThemeColor(settings.value("bracketContentsForeground").toString()));
+ theme->setBracketContentsOptions(
+ settings.value("bracketContentsOptions").toString());
+ theme->setTagsOptions(settings.value("tagsOptions").toString());
+}
+
+/// parses all rules
+void TmThemeParser::parseRules(TextTheme *theme, const QList &rules)
+{
+ foreach (const QVariant &rule, rules)
+ {
+ QHash hashMap = rule.toHash();
+ QString name = hashMap.value("name").toString();
+ QString scope = hashMap.value("scope").toString();
+ QString comment = hashMap.value("comment").toString();
+ QHash settings = hashMap.value("settings").toHash();
+
+ // no name or scope then it's the settings rule
+ if (name.isEmpty() && scope.isEmpty())
+ {
+ fillRuleSettings(theme, settings); // yes it's true settings/settings !
+ }
+ else
+ {
+ QColor foreground
+ = parseThemeColor(settings.value("foreground").toString());
+ QColor background
+ = parseThemeColor(settings.value("background").toString());
+ QString fontStyle(settings.value("fontStyle").toString());
+ bool bold = fontStyle.contains("bold");
+ bool italic = fontStyle.contains("italic");
+ bool underline = fontStyle.contains("underline");
+
+ TextThemeRule *rule = new TextThemeRule(
+ name, scope, foreground, background, bold, italic, underline);
+ theme->giveThemeRule(rule);
+ }
+ }
+}
+
+/// Reads and parsers the theme
+TextTheme *TmThemeParser::createTheme(QVariant &data)
+{
+ QHash hashMap = data.toHash();
+
+ QString name = hashMap.value("name").toString();
+ QString uuid = hashMap.value("uuid").toString();
+
+ if (name.isEmpty())
+ {
+ raiseError("Name is empty. Cannot parse theme!");
+ return 0;
+ }
+
+ TextTheme *theme = new TextTheme();
+
+ // fill the settings
+ QList rules = hashMap.value("settings").toList();
+ parseRules(theme, rules);
+
+ return theme;
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/io/tmthemeparser.h b/lib/edbee-lib/edbee/io/tmthemeparser.h
new file mode 100644
index 00000000..996f4368
--- /dev/null
+++ b/lib/edbee-lib/edbee/io/tmthemeparser.h
@@ -0,0 +1,37 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include
+#include
+#include
+
+#include "baseplistparser.h"
+
+namespace edbee
+{
+
+class TextTheme;
+
+class EDBEE_EXPORT TmThemeParser : public BasePListParser
+{
+public:
+ TmThemeParser();
+
+ QColor parseThemeColor(const QString &color) const;
+
+ TextTheme *readContent(QIODevice *device);
+
+protected:
+ void fillRuleSettings(TextTheme *theme,
+ const QHash &settings);
+ void parseRules(TextTheme *theme, const QList &settings);
+ TextTheme *createTheme(QVariant &data);
+};
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/lexers/grammartextlexer.cpp b/lib/edbee-lib/edbee/lexers/grammartextlexer.cpp
new file mode 100644
index 00000000..c4820a37
--- /dev/null
+++ b/lib/edbee-lib/edbee/lexers/grammartextlexer.cpp
@@ -0,0 +1,616 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#include "grammartextlexer.h"
+
+#include
+#include
+
+#include "edbee/models/textgrammar.h"
+#include "edbee/models/textdocument.h"
+#include "edbee/models/textdocumentscopes.h"
+#include "edbee/util/regexp.h"
+#include "edbee/edbee.h"
+
+#include "edbee/debug.h"
+
+namespace edbee
+{
+
+/// Constructs the grammar textlexer
+/// @param scopes a reference to the scopes model
+GrammarTextLexer::GrammarTextLexer(TextDocumentScopes *scopes)
+ : TextLexer(scopes)
+ , lineRangeList_(0)
+{
+ setGrammar(Edbee::instance()->grammarManager()->defaultGrammar());
+}
+
+/// The destructor
+GrammarTextLexer::~GrammarTextLexer()
+{
+ delete lineRangeList_; // just in case
+}
+
+/// This method builds the end-regexp for the given multi-line-regexp
+/// @param startRegExp the start regexp
+/// @param endRegExStringIn the end regexp string
+RegExp *GrammarTextLexer::createEndRegExp(RegExp *startRegExp,
+ const QString &endRegExpStringIn)
+{
+ // build the end-regexp string
+ QString endRegExpString;
+ RegExp matcher("\\\\(\\d+)"); // \(d+)
+ int lastPos = 0;
+ while (matcher.indexIn(endRegExpStringIn, lastPos) >= 0)
+ {
+ int len = matcher.len();
+ int pos = matcher.pos();
+
+ // append the previous string
+ if (pos - lastPos > 0)
+ {
+ endRegExpString.append(endRegExpStringIn.mid(lastPos, pos - lastPos));
+ }
+
+ // append the 'match'
+ int nr = matcher.cap(1).toInt();
+ if (nr >= 0)
+ {
+ endRegExpString.append(startRegExp->cap(nr));
+ }
+ lastPos = pos + len + 1;
+ }
+ endRegExpString.append(endRegExpStringIn.mid(lastPos));
+ return new RegExp(endRegExpString);
+}
+
+/// Search the next grammar rule
+/// @param (out) foundRegExp the found regexp
+/// @param (out) foundPosition the found position
+/// @return the grammarRule found
+void GrammarTextLexer::findNextGrammarRule(
+ const QString &line, int offsetInLine, TextGrammarRule *activeRule,
+ TextGrammarRule *&foundRule, RegExp *&foundRegExp, int &foundPosition)
+{
+
+ // next iterate over all rules and find the rule with the lowest offset
+ QStack ruleIterators;
+ ruleIterators.push(activeRule->createIterator());
+ while (!ruleIterators.isEmpty())
+ {
+
+ while (ruleIterators.top()->hasNext())
+ {
+ TextGrammarRule *rule
+ = ruleIterators.top()->next(); // activeRule->rule(i);
+
+ bool processNewRule = false;
+ do
+ {
+ processNewRule = false;
+ // qlog_info() << " - " << ":" << rule->toString(false);
+ switch (rule->instruction())
+ {
+ case TextGrammarRule::SingleLineRegExp:
+ case TextGrammarRule::MultiLineRegExp: {
+ // only use this match if the offset < foundPosition
+ int pos = rule->matchRegExp()->indexIn(line, offsetInLine);
+ if (pos >= 0)
+ {
+ if (pos < foundPosition)
+ {
+ foundRule = rule;
+ foundRegExp = rule->matchRegExp();
+ foundPosition = pos;
+ }
+ }
+ break;
+ }
+
+ // and include rule
+ case TextGrammarRule::IncludeCall: {
+ TextGrammarRule *includedRule = findIncludeGrammarRule(rule);
+ if (includedRule)
+ {
+ // a rule list, append the iterator
+ if (includedRule->isRuleList() || includedRule->isMainRule())
+ {
+ ruleIterators.push_back(includedRule->createIterator());
+
+ // a normal rule? We need to process this one again
+ }
+ else
+ {
+ rule = includedRule;
+ processNewRule = true;
+ }
+ }
+ else
+ {
+ qlog_warn() << "ERROR, include rule" << rule->includeName()
+ << "not found!";
+ }
+ break;
+ }
+ case TextGrammarRule::MainRule:
+ Q_ASSERT(false && "a mainrule as child is not allowed!");
+ break;
+ case TextGrammarRule::RuleList:
+ Q_ASSERT(false && "a rule list is not directly allowed!");
+ break;
+ default:
+ Q_ASSERT(false && "unkown rule");
+ }
+ } while (processNewRule);
+ } // while hasNext
+
+ delete ruleIterators.pop();
+
+ } // while ruleIterators
+}
+
+/// This method processes the captures and adds them to the active line
+/// @param foundRegExp the found regexp
+/// @param foundCaptures the found captures
+void GrammarTextLexer::processCaptures(RegExp *foundRegExp,
+ const QMap *foundCaptures)
+{
+ if (!foundCaptures->isEmpty())
+ {
+ // qlog_info() << "found: captures:";
+ QMapIterator itr(*foundCaptures);
+ while (itr.hasNext())
+ {
+ itr.next();
+ int captureIndex = itr.key();
+ const QString scope = itr.value();
+
+ int capturePos = foundRegExp->pos(captureIndex);
+ if (capturePos >= 0)
+ {
+ int capLen = foundRegExp->len(captureIndex);
+ int start = capturePos;
+ int end = capturePos + capLen;
+
+ // textScopes()->addScopedRange(
+ // currentDocOffset+capturePos,
+ // currentDocOffset+capturePos+capLen, scope, foundRule
+ // );
+ lineRangeList_->giveRange(new ScopedTextRange(
+ start, end,
+ Edbee::instance()->scopeManager()->refTextScope(scope)));
+ }
+ }
+ }
+}
+
+/// This is the main algorithm for finding and matching the correct scopes with
+/// help of the regular expressions
+/// @param currentDocOffset the current document offset
+/// @param line the line that's being matches
+/// @param offsetInLine (in/out) the current offset in the line
+TextGrammarRule *GrammarTextLexer::findAndApplyNextGrammarRule(
+ int currentDocOffset, const QString &line, int &offsetInLine)
+{
+ Q_ASSERT(lineRangeList_);
+
+ // qlog_info() << "--- matchNextGrammarRule: " << currentDocOffset << ",
+ // line:" << line << ":"<activeMultiLineRange();
+ TextGrammarRule *activeRule = activeMultiRange->grammarRule();
+ // qlog_info() << "--- matchNextGrammarRule ---------------------";
+ // qlog_info() << " - activeRule : " << activeRule->toString();
+ // qlog_info() << " - activeRange: " << activeRange->toString();
+
+ TextGrammarRule *foundRule = 0;
+ RegExp *foundRegExp = 0;
+ int foundPosition = std::numeric_limits::max();
+
+ // first try to close the active rule
+ if (activeMultiRange->endRegExp())
+ {
+ if (activeMultiRange->endRegExp()->indexIn(line, offsetInLine) >= 0)
+ {
+ foundRule = activeRule;
+ foundRegExp = activeMultiRange->endRegExp();
+ foundPosition = foundRegExp->pos();
+ }
+ }
+
+ // find the grammar rule
+ findNextGrammarRule(line, offsetInLine, activeRule, foundRule, foundRegExp,
+ foundPosition);
+
+ // next we have found the rule that matched a certain scope
+ if (foundRule)
+ {
+ int matchedLength = foundRegExp->matchedLength();
+ // if( !matchedLength ) { matchedLength=1; } // always match at
+ // least 1 character! (else we're in big trouble )
+
+ int startPos = foundPosition;
+ int endPos = startPos + matchedLength;
+ // qlog_info() << " foundRule: " << foundRule->toString(false) << ",
+ // foundPosition:" << foundPosition <<" : " << startPos << "t/m" << endPos;
+ // qlog_info() << " foundRegExp: " << foundRegExp->pattern();
+
+ // the found captures
+
+ // Did we found the endrule? Then we need to 'close' the current activeRule
+ if (activeMultiRange->endRegExp() == foundRegExp)
+ {
+ activeMultiRange->maxVar()
+ = currentDocOffset + endPos; // mark the end (DOC)
+ activeScopedTextRange()->maxVar() = endPos; // mark the end (TextScope)
+
+ processCaptures(foundRegExp, &activeRule->endCaptures());
+
+ popActiveRange();
+
+ // a normal match or start of multi-line
+ }
+ else
+ {
+ TextScope *scopeRef = Edbee::instance()->scopeManager()->refTextScope(
+ foundRule->scopeName());
+
+ // did we find a multiline regexp. add the start of this scope
+ if (foundRule->isMultiLineRegExp())
+ {
+
+ ScopedTextRange *range
+ = new ScopedTextRange(startPos, line.length(), scopeRef);
+ lineRangeList_->giveRange(range);
+
+ MultiLineScopedTextRange *multiRange = new MultiLineScopedTextRange(
+ currentDocOffset + startPos, textScopes()->textDocument()->length(),
+ scopeRef);
+ multiRange->setGrammarRule(foundRule);
+ multiRange->giveEndRegExp(
+ createEndRegExp(foundRegExp, foundRule->endRegExpString()));
+
+ pushActiveRange(range, multiRange);
+
+ // a single rule
+ }
+ else
+ {
+ // add the found regexp
+ lineRangeList_->giveRange(
+ new ScopedTextRange(startPos, endPos, scopeRef));
+ // textScopes()->addScopedRange( startPos, endPos,
+ // foundRule->scopeName(), foundRule );
+ }
+
+ // next we need to add the 'captures'
+ processCaptures(foundRegExp, &foundRule->matchCaptures());
+ }
+
+ // increase the offset for the next search
+ // qlog_info() << " ++ " << matchedLength;
+ offsetInLine = foundPosition + matchedLength;
+
+ return foundRule;
+ }
+ // qlog_info() << "-- not found ??";
+ return 0; // no rule found
+}
+
+/// internal method that returns the active grammar rule
+MultiLineScopedTextRange *GrammarTextLexer::activeMultiLineRange()
+{
+ Q_ASSERT(!activeMultiLineRangesRefList_.isEmpty());
+ MultiLineScopedTextRange *result = activeMultiLineRangesRefList_.last();
+ Q_ASSERT(result->grammarRule());
+ return result;
+}
+
+/// Returns the active scoped text range
+ScopedTextRange *GrammarTextLexer::activeScopedTextRange()
+{
+ Q_ASSERT(!activeScopedRangesRefList_.isEmpty());
+ return activeScopedRangesRefList_.last();
+}
+
+/// removes the active range from the stack
+/// If the ranges is added for the current line, it is removed from the
+/// currentLineRangeList. If the range was started at a previous line, the item
+/// is added to the closedActiveRangeRefList
+void GrammarTextLexer::popActiveRange()
+{
+ Q_ASSERT(activeMultiLineRangesRefList_.size()
+ > 1); // there should be at least 2 items. The first one is the
+ // grammar rule!
+ Q_ASSERT(activeScopedRangesRefList_.size()
+ == activeMultiLineRangesRefList_.size());
+ //
+ if (currentMultiLineRangeList_.isEmpty())
+ {
+ closedMultiRangesRangesRefList_.append(
+ activeMultiLineRangesRefList_.last());
+ // closedActiveRangesRefList_.append(range);
+ // pushed and popped on this line, no document-scope
+ }
+ else
+ {
+ delete currentMultiLineRangeList_.last();
+ currentMultiLineRangeList_.pop_back();
+ }
+
+ activeMultiLineRangesRefList_.pop_back();
+ activeScopedRangesRefList_.pop_back();
+}
+
+/// Adds the given range to the multiscoped textranges
+/// And to the list of current line ranges
+/// @param range the range top push
+void GrammarTextLexer::pushActiveRange(ScopedTextRange *range,
+ MultiLineScopedTextRange *multiRange)
+{
+ activeMultiLineRangesRefList_.push_back(multiRange);
+ currentMultiLineRangeList_.push_back(multiRange);
+ activeScopedRangesRefList_.push_back(range);
+ // qlog_info() << "[push]";
+ // activeRangesRefList_.push_back( range );
+ // currentLineRangesList_.push_back(range);
+}
+
+/// T his method finds the 'included' grammar rule
+TextGrammarRule *GrammarTextLexer::findIncludeGrammarRule(TextGrammarRule *base)
+{
+ Q_ASSERT(base->isIncludeCall());
+ QString name = base->includeName();
+
+ // repos call
+ if (name.startsWith("#"))
+ {
+ return base->grammar()->findFromRepos(name.mid(1));
+ }
+ // another language call
+ // The difference between $base and $self is very subtle.. The exact
+ // difference is unkown to me..
+ if (name == "$base" || name == "$self")
+ {
+ return grammar()->mainRule();
+ }
+
+ TextGrammar *grammar = Edbee::instance()->grammarManager()->get(name);
+ if (grammar)
+ {
+ return grammar->mainRule();
+ }
+ return 0;
+}
+
+/// This method is called to notify the lexer some data has been changed
+// void GrammarTextLexer::textReplaced( int offset, int length, int newLength )
+void GrammarTextLexer::textChanged(const TextBufferChange &change)
+{
+ TextDocument *doc = textDocument();
+ TextDocumentScopes *docScopes = textScopes();
+
+ int offsetStart = doc->offsetFromLine(change.line());
+ docScopes->removeScopesAfterOffset(offsetStart);
+
+ /// TODO: rebuild an optimized scope-rebuilding algorithm
+}
+
+/// This method lexes a single line
+/// @return the last indexed offset
+/// WARNING lexline CANNOT be called indepdently of lexLines (beacuse lex-lines
+/// set the activeScopes!
+bool GrammarTextLexer::lexLine(int lineIdx, int ¤tDocOffset)
+{
+ TextDocument *doc = textDocument();
+ TextDocumentScopes *docScopes = textScopes();
+
+ QString line = doc->line(lineIdx); //+ "\n";
+
+ // int lineStartOffset = doc->offsetFromLine(lineIdx);
+
+ Q_ASSERT(currentMultiLineRangeList_.isEmpty());
+ Q_ASSERT(closedMultiRangesRangesRefList_.isEmpty());
+ Q_ASSERT(activeScopedRangesRefList_.isEmpty());
+
+ lineRangeList_ = new ScopedTextRangeList();
+
+ // append the active ranges
+ for (int i = 0, cnt = activeMultiLineRangesRefList_.size(); i < cnt; ++i)
+ {
+ MultiLineScopedTextRangeReference *range
+ = new MultiLineScopedTextRangeReference(
+ *activeMultiLineRangesRefList_.at(i));
+ range->setAnchor(0);
+ range->setCaret(line.length());
+ lineRangeList_->giveRange(range);
+ activeScopedRangesRefList_.append(range);
+ }
+
+ // qlog_info() << "";
+ // qlog_info() <<
+ // "////////////////////////////////////////////////////////////////";
+ // qlog_info() << " * " << lineIdx << ":" << line;
+
+ // find the first 'matching' rule
+ int offsetInLine = 0;
+ int lastOffsetInLine = 0;
+ TextGrammarRule *lastFoundRule = 0;
+ while (true)
+ {
+ // QString debug;
+ // debug.append( QStringLiteral((" =[%1,%2,%3]=
+ // ").arg(lineIdx).arg(offsetInLine).arg(currentDocOffset) );
+ TextGrammarRule *foundRule
+ = findAndApplyNextGrammarRule(currentDocOffset, line, offsetInLine);
+ // debug.append( QStringLiteral((" %1
+ // (%2)").arg(foundRule?foundRule->scopeName():"<").arg(offsetInLine)
+ // ); qlog_info() << debug;
+ if (!foundRule)
+ break;
+
+ /// check the next offset
+ if (offsetInLine == lastOffsetInLine)
+ {
+
+ if (lastFoundRule == foundRule)
+ {
+
+ // I'm very much in doubt how to solve this. What should happend here?
+ // when the same ruleis found, we need to stop else we will keep on
+ // getting this rule forever.
+ //
+ // btw. A grammar that fires this situation is the Ruby Haml language
+ // when using the %tagname construct
+ //
+ // There are several options to fix this:
+ // 1. simply ending the parsing of this line with break (Risk is that
+ // the rest of the line isn't parsed)
+ // 2. increase offsetInLine to the next character. (Risk is that prasing
+ // goes wrong, and start identifying at the wrong position)
+ // 3. Keep a list with found rules and never allow the same rule again.
+ // (Compelexer to implement don't really know if this is the solution)
+
+ // DEBUG info:
+ // qlog_info() << "Found grammar-rule("<< lineIdx << "," <<
+ // offsetInLine<<")"; qlog_info() << " - line: " << line; qlog_info() <<
+ // " - rule: " << foundRule->toString(); qlog_info() << " INFINITE LOOP
+ // PREVENTION";
+
+ // we're going for option [2] for the moment
+ ++offsetInLine; // never have an endless loop
+
+ // option[1] also works.
+ // break;
+ }
+ }
+ lastFoundRule = foundRule;
+
+ lastOffsetInLine = offsetInLine;
+ }
+
+ // when there are no-multi-line spanning rules, set the independent flag
+ lineRangeList_->setIndependent(currentMultiLineRangeList_.isEmpty()
+ && closedMultiRangesRangesRefList_.isEmpty());
+ lineRangeList_->squeeze(); // free unused memory
+ bool result = lineRangeList_->isIndependent();
+
+ // give the line to the document scopes
+ docScopes->giveLineScopedRangeList(lineIdx, lineRangeList_);
+ lineRangeList_ = 0;
+
+ foreach (MultiLineScopedTextRange *scopedRange, currentMultiLineRangeList_)
+ {
+ docScopes->giveMultiLineScopedTextRange(scopedRange);
+ }
+ activeScopedRangesRefList_.clear();
+ currentMultiLineRangeList_.clear();
+ closedMultiRangesRangesRefList_.clear();
+
+ // increase the current document offset
+ currentDocOffset
+ += line.size(); // + 1; // +1 because we didn't retrieve the newline
+ return result;
+}
+
+/// This method lexes a range of line
+/// @return the last indexed offset
+void GrammarTextLexer::lexLines(int lineStart, int lineCount)
+{
+
+ // (INIT) ALGORITHM BELOW:
+ //
+ // - first find the current active scopes.
+ // - all multi-line-scopes that start on this line we need to 'remove'
+ // - all multi-line-scopes that end on this line we need to set the end to
+ // 'unkown'
+ // - next we must find the ruleset for the current scopes by going into the
+ // grammar rules
+
+ // WHILE there are chars left to match
+ // - run all rule reg-exps for this scope and
+ // - also run all reg-exps for active multi-line scopes to find (a possibly
+ // new end-marker)
+ // - use the the rule regexp with the first offset. Add the range to the
+ // scopes
+ // - if this is a begin-block regexp, activate the new ruleset. (check if the
+ // end-regexp is here)
+ //------------------------
+
+ TextDocument *doc = textDocument();
+ TextDocumentScopes *docScopes = textScopes();
+
+ // qlog_info() << "===== lexText(" << offset << "," << length << ")
+ // ["<offsetFromLine(lineStart);
+ activeMultiLineRangesRefList_
+ = docScopes->multiLineScopedRangesBetweenOffsets(offsetStart,
+ offsetStart);
+
+ // GrammarRule* activeRule = grammarRef_->mainRule();
+ // if( !activeScopedRanges.isEmpty() ) { activeRule =
+ // activeScopedRanges.last()->grammarRule(); } Q_ASSERT( activeRule );
+
+ // next find the rule
+ int currentDocOffset = offsetStart;
+ bool independent = true;
+ for (int idx = 0; idx < lineCount; ++idx)
+ {
+ independent = lexLine(lineStart + idx, currentDocOffset) && independent;
+ }
+
+ // only set the scoped offset if less and not indepdent
+ if (currentDocOffset < docScopes->lastScopedOffset())
+ {
+ if (!independent)
+ {
+ docScopes->setLastScopedOffset(currentDocOffset);
+ docScopes->removeScopesAfterOffset(currentDocOffset);
+ }
+ // further down the document, update the scope
+ }
+ else
+ {
+ docScopes->setLastScopedOffset(currentDocOffset);
+ docScopes->removeScopesAfterOffset(currentDocOffset);
+ }
+}
+
+/// This method is called when the given range needs to be lexed
+///
+/// WARNING, this method must be VERY optimized and should 'remember' the lexing
+/// states between calls. To invalidate the scopes/lexing state the textReplaced
+/// method can be used
+///
+/// @param beginOffset the first offset
+/// @param endOffset the last offset to
+void GrammarTextLexer::lexRange(int beginOffset, int endOffset)
+{
+ Q_UNUSED(beginOffset);
+
+ // find the beginning of the given line
+ TextDocument *doc = textDocument();
+ TextDocumentScopes *docScopes = textScopes();
+
+ // no lexing required
+ if (endOffset <= docScopes->lastScopedOffset())
+ {
+ return;
+ }
+
+ // first we need to find the correct location to start from
+ int offset
+ = docScopes->lastScopedOffset(); // qMin( docScopes->scopedToOffset(),
+ // offset );
+
+ int lineStart = doc->lineFromOffset(offset);
+ int lineEnd = doc->lineFromOffset(endOffset) + 1;
+
+ lexLines(lineStart, lineEnd - lineStart);
+}
+
+} // namespace edbee
diff --git a/lib/edbee-lib/edbee/lexers/grammartextlexer.h b/lib/edbee-lib/edbee/lexers/grammartextlexer.h
new file mode 100644
index 00000000..dc780699
--- /dev/null
+++ b/lib/edbee-lib/edbee/lexers/grammartextlexer.h
@@ -0,0 +1,91 @@
+/**
+ * Copyright 2011-2013 - Reliable Bits Software by Blommers IT. All Rights
+ * Reserved. Author Rick Blommers
+ */
+
+#pragma once
+
+#include "edbee/exports.h"
+
+#include
+#include
+#include
+
+#include "edbee/models/textlexer.h"
+
+namespace edbee
+{
+
+class MultiLineScopedTextRange;
+class RegExp;
+class ScopedTextRange;
+class ScopedTextRangeList;
+class TextDocumentScopes;
+class TextGrammar;
+class TextGrammarRule;
+
+/// A simple lexer matches texts with simple regular expressions
+class EDBEE_EXPORT GrammarTextLexer : public TextLexer
+{
+public:
+ GrammarTextLexer(TextDocumentScopes *scopes);
+ virtual ~GrammarTextLexer();
+
+ virtual void textChanged(const TextBufferChange &change);
+
+private:
+ virtual bool lexLine(int line, int ¤tDocOffset);
+
+public:
+ virtual void lexLines(int line, int lineCount);
+ virtual void lexRange(int beginOffset, int endOffset);
+
+private:
+ RegExp *createEndRegExp(RegExp *startRegExp,
+ const QString &endRegExpStringIn);
+
+ void findNextGrammarRule(const QString &line, int offsetInLine,
+ TextGrammarRule *activeRule,
+ TextGrammarRule *&foundRule, RegExp *&foundRegExp,
+ int &foundPosition);
+ void processCaptures(RegExp *foundRegExp,
+ const QMap *foundCaptures);
+
+ TextGrammarRule *findAndApplyNextGrammarRule(int currentDocOffset,
+ const QString &line,
+ int &offsetInLine);
+
+ MultiLineScopedTextRange *activeMultiLineRange();
+ ScopedTextRange *activeScopedTextRange();
+
+ void popActiveRange();
+ void pushActiveRange(ScopedTextRange *range,
+ MultiLineScopedTextRange *multiRange);
+
+ TextGrammarRule *findIncludeGrammarRule(TextGrammarRule *base);
+
+private:
+ QVector
+ activeMultiLineRangesRefList_; ///< The current active scoped text ranges,
+ ///< DOC (this is only valid during
+ ///< parsing)
+ QVector
+ currentMultiLineRangeList_; ///< The doc ranges currently created (only
+ ///< valid during parsing
+ QVector