implement tcl

This commit is contained in:
Christoph Brandau
2025-01-10 16:44:50 +01:00
parent 3ce2ad902b
commit 5c41b8fa0a
5 changed files with 945 additions and 5333 deletions
+16
View File
@@ -22,6 +22,17 @@
], ],
"contributes": { "contributes": {
"languages": [ "languages": [
{
"id": "tcl",
"aliases": [
"NX TCL",
"tcl"
],
"extensions": [
".tcl"
],
"configuration": "./language-configuration.json"
},
{ {
"id": "cdl", "id": "cdl",
"aliases": [ "aliases": [
@@ -46,6 +57,11 @@
} }
], ],
"grammars": [ "grammars": [
{
"language": "tcl",
"scopeName": "source.tcl",
"path": "./syntaxes/tcl.tmLanguage.json"
},
{ {
"language": "cdl", "language": "cdl",
"scopeName": "source.cdl", "scopeName": "source.cdl",
+272 -5317
View File
File diff suppressed because it is too large Load Diff
+638
View File
@@ -0,0 +1,638 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><!-- Generated via Iro -->
<dict>
<key>fileTypes</key>
<array>
<string>tcl</string>
</array>
<key>name</key>
<string>tcl</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#main</string>
</dict>
</array>
<key>scopeName</key>
<string>source.tcl</string>
<key>uuid</key>
<string>c7017136-2ff2-48e9-bdb0-570cf238b4a2</string>
<key>repository</key>
<dict>
<key>main</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#command</string>
</dict>
</array>
</dict>
<key>args</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#quoted_args</string>
</dict>
<dict>
<key>include</key>
<string>#numeric</string>
</dict>
<dict>
<key>match</key>
<string>((?&lt;=;)\s*#.*$)</string>
<key>name</key>
<string>comment.tcl</string>
<key>comment</key>
<string>Inline comments.</string>
</dict>
</array>
</dict>
<key>braced</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>((?&lt;!\\)\{)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.tcl</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#braced__1</string>
</dict>
</array>
<key>end</key>
<string>(\}([^\s\]]*))</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.tcl</string>
</dict>
</dict>
</dict>
</array>
</dict>
<key>braced__1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>(\\(?:\d{1,3}|x[a-fA-F0-9]{1,2}|u[a-fA-F0-9]{1,4}|U[a-fA-F0-9]{1,8}|.))</string>
<key>name</key>
<string>constant.character.escape.tcl</string>
</dict>
<dict>
<key>include</key>
<string>#keywords</string>
</dict>
<dict>
<key>match</key>
<string>((?&lt;={)\s*(?:after|append|apply|array|auto_execok|auto_import|auto_load|auto_mkindex|auto_qualify|auto_reset|bgerror|binary|break|catch|cd|chan|clock|close|concat|continue|coroutine|dde|dict|encoding|eof|error|eval|exec|exit|expr|fblocked|fconfigure|fcopy|fileevent|file|flush|foreach|for|format|gets|global|glob|history|http|if|incr|info|interp|join|lappend|lassign|lindex|linsert|list|llength|lmap|load|lrange|lrepeat|lreplace|lreverse|lsearch|lset|lsort|memory|my|namespace|nextto|next|oo::class|oo::copy|oo::define|oo::objdefine|oo::object|open|package|parray|pid|pkg::create|pkg_mkIndex|platform::shell|proc|puts|pwd|read|regexp|registry|regsub|rename|return|scan|seek|self|set|socket|source|split|string|subst|switch|tailcall|tcl::prefix|tcl_endOfWord|tcl_findLibrary|tcl_startOfNextWord|tcl_startOfPreviousWord|tcl_wordBreakAfter|tcl_wordBreakBefore|tell|throw|time|trace|try|unknown|unload|unset|update|uplevel|upvar|variable|vwait|while|yieldto|yield)\s+)</string>
<key>name</key>
<string>keyword.tcl</string>
<key>comment</key>
<string>Special handling for known commands.</string>
</dict>
<dict>
<key>include</key>
<string>#braced_inner</string>
</dict>
<dict>
<key>include</key>
<string>#args</string>
</dict>
</array>
</dict>
<key>braced_inner</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(\{)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.tcl</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#braced_inner__1</string>
</dict>
</array>
<key>end</key>
<string>(\})</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.tcl</string>
</dict>
</dict>
</dict>
</array>
</dict>
<key>braced_inner__1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>(\\[\x{007b}\x{007d}])</string>
<key>name</key>
<string>constant.character.escape.tcl</string>
</dict>
<dict>
<key>include</key>
<string>#numeric</string>
</dict>
<dict>
<key>include</key>
<string>#braced_inner</string>
</dict>
<dict>
<key>include</key>
<string>#args</string>
</dict>
</array>
</dict>
<key>braced_lit</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>((?:(?&lt;!\\){)(?:[^\x{007b}\x{007d}\n]*(?:\g&lt;1&gt;(?:\\{|\\}|[^\x{007b}\x{007d}])*)*)})</string>
<key>name</key>
<string>none.tcl</string>
<key>comment</key>
<string>Handle braced literal.</string>
</dict>
</array>
</dict>
<key>braced_lit_re</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>((?:(?&lt;!\\){)(?:[^\x{007b}\x{007d}\n]*(?:\g&lt;1&gt;(?:\\{|\\}|[^\x{007b}\x{007d}])*)*)})</string>
<key>name</key>
<string>string.regexp.tcl</string>
<key>comment</key>
<string>Handle braced regex pattern.</string>
</dict>
</array>
</dict>
<key>command</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(\\\s*$)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>constant.character.escape.tcl</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#command__1</string>
</dict>
</array>
<key>end</key>
<string>((?&lt;!\\\s)$)</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>none.tcl</string>
</dict>
</dict>
</dict>
<dict>
<key>match</key>
<string>(^\s*#.*)</string>
<key>name</key>
<string>comment.tcl</string>
<key>comment</key>
<string>Line comments.</string>
</dict>
<dict>
<key>match</key>
<string>(\{\s*$|^\s*\})</string>
<key>name</key>
<string>punctuation.tcl</string>
<key>comment</key>
<string>Leading/trailing curly braces.</string>
</dict>
<dict>
<key>match</key>
<string>(?&lt;=^|{)(\s*proc\s+)(\S+\s+)((?:(?&lt;!\\){)(?:[^\x{007b}\x{007d}\n]*(?:\g&lt;1&gt;(?:\\{|\\}|[^\x{007b}\x{007d}])*)*)})</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.tcl</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>entity.name.function.tcl</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>none.tcl</string>
</dict>
</dict>
<key>comment</key>
<string>Proc command.</string>
</dict>
<dict>
<key>include</key>
<string>#regexp</string>
</dict>
<dict>
<key>include</key>
<string>#keywords</string>
</dict>
<dict>
<key>match</key>
<string>(^\s*\S+|(?:(?&lt;=[^\x{005c}]\[)[^\s\]]++(?!\])))</string>
<key>name</key>
<string>keyword.tcl</string>
<key>comment</key>
<string>All other commands. (NOTE: Iro doesn&apos;t support possessive quantifiers, but the grammar does; be sure to replace the second + with ++ after regenerating!)</string>
</dict>
<dict>
<key>include</key>
<string>#args</string>
</dict>
</array>
</dict>
<key>command__1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#keywords</string>
</dict>
<dict>
<key>include</key>
<string>#args</string>
</dict>
</array>
</dict>
<key>embedded</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>((?&lt;!\\)\[)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.tcl</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#embedded__1</string>
</dict>
</array>
<key>end</key>
<string>((?&lt;!\\)\])</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.tcl</string>
</dict>
</dict>
</dict>
</array>
</dict>
<key>embedded__1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#command</string>
</dict>
</array>
</dict>
<key>keywords</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>((?&lt;=^|[\[\x{007b}\x{003b}])\s*(break|catch|continue|default|error|exit|foreach|for|if|return|switch|throw|try|while)\b)</string>
<key>name</key>
<string>keyword.control.tcl</string>
<key>comment</key>
<string>Keywords.</string>
</dict>
<dict>
<key>match</key>
<string>((?&lt;=^|})\s*(then|elseif|else)\b)</string>
<key>name</key>
<string>keyword.control.tcl</string>
<key>comment</key>
<string>Inline keywords.</string>
</dict>
</array>
</dict>
<key>numeric</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>((?:\b|[\+\-\.])(?:0b[01]+|0o[0-7]+|0x[0-9a-fA-F]+|(?:\d*\.\d+(?:[Ee][-\x{002b}]?\d+)?)|(?:\d+\.?[Ee][-\x{002b}]?\d+)|\d+|[Ii][Nn][Ff]|[Nn][Aa][Nn])\b)</string>
<key>name</key>
<string>constant.numeric.tcl</string>
</dict>
</array>
</dict>
<key>quoted</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>((?&lt;!\\)&quot;)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>string.tcl</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#quoted__1</string>
</dict>
</array>
<key>end</key>
<string>(&quot;)</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>string.tcl</string>
</dict>
</dict>
</dict>
</array>
</dict>
<key>quoted__1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#quoted_args</string>
</dict>
<dict>
<key>match</key>
<string>([^\x{0024}\x{005b}\x{0022}\x{005c}]+)</string>
<key>name</key>
<string>string.tcl</string>
</dict>
</array>
</dict>
<key>quoted_args</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#braced</string>
</dict>
<dict>
<key>include</key>
<string>#quoted</string>
</dict>
<dict>
<key>include</key>
<string>#embedded</string>
</dict>
<dict>
<key>match</key>
<string>(\\(?:\d{1,3}|x[a-fA-F0-9]{1,2}|u[a-fA-F0-9]{1,4}|U[a-fA-F0-9]{1,8}|.))</string>
<key>name</key>
<string>constant.character.escape.tcl</string>
</dict>
<dict>
<key>include</key>
<string>#variable</string>
</dict>
</array>
</dict>
<key>regexp</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>((?&lt;=^|[\[\x{007b}\x{003b}])\s*(?:regexp|regsub)\s+)((?:(?:(?:-about|-all|-expanded|-indices|-inline|-lineanchor|-linestop|-line|-nocase|(?:-index\s+(?:end|\d+)(?:[\+\-]-?\d+)?))\s+)*(?:--\s+)?)?)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.tcl</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>none.tcl</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#regexp__1</string>
</dict>
</array>
<key>end</key>
<string>(\s+)</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>none.tcl</string>
</dict>
</dict>
</dict>
<dict>
<key>include</key>
<string>#args</string>
</dict>
</array>
</dict>
<key>regexp__1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#braced_lit_re</string>
</dict>
<dict>
<key>begin</key>
<string>((?:(?&lt;!\\)&quot;))</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>string.regexp.tcl</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#regexp__2</string>
</dict>
</array>
<key>end</key>
<string>((?:(?&lt;!\\)&quot;))</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>string.regexp.tcl</string>
</dict>
</dict>
</dict>
<dict>
<key>include</key>
<string>#variable</string>
</dict>
<dict>
<key>match</key>
<string>(\S+)</string>
<key>name</key>
<string>string.regexp.tcl</string>
<key>comment</key>
<string>Handle bare regex pattern.</string>
</dict>
</array>
</dict>
<key>regexp__2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#braced_lit_re</string>
</dict>
<dict>
<key>include</key>
<string>#embedded</string>
</dict>
<dict>
<key>include</key>
<string>#variable</string>
</dict>
<dict>
<key>match</key>
<string>(\\&quot;|[^\x{0022}])</string>
<key>name</key>
<string>string.regexp.tcl</string>
<key>comment</key>
<string>All other quoted text.</string>
</dict>
</array>
</dict>
<key>variable</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>(\$(?:(?:[a-zA-Z0-9_]|::)+(?:\([^\)]+\))?|\{(?:[^\}]*|[^\}\x{0028}]+\([^\}\x{0029}]+\))\}))</string>
<key>name</key>
<string>variable.tcl</string>
</dict>
</array>
</dict>
<key>word_lit__1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#braced_lit</string>
</dict>
<dict>
<key>include</key>
<string>#embedded</string>
</dict>
<dict>
<key>include</key>
<string>#variable</string>
</dict>
<dict>
<key>match</key>
<string>(\\&quot;|[^\x{0022}])</string>
<key>name</key>
<string>string.tcl</string>
<key>comment</key>
<string>All other quoted text.</string>
</dict>
</array>
</dict>
</dict>
</dict>
</plist>
+15 -15
View File
@@ -282,11 +282,11 @@ EVENT lib_event_cycle_60
{ {
# <english> # <english>
#Engraving - CYCLE60 # Engraving - CYCLE60
#CYCLE60(STRING[200] _TEXT, REAL _RTP, REAL _RFP, REAL _SDIS, REAL _DP, REAL _DPR, REAL _PA, REAL _PO, REAL _STA, REAL _CP1, REAL _CP2,REAL _WID, REAL _DF, REAL _FFD, REAL _FFP1, INT _VARI, INT _CODEP,INT _UMODE, INT _GMODE, INT _DMODE, INT _AMODE) # CYCLE60(STRING[200] _TEXT, REAL _RTP, REAL _RFP, REAL _SDIS, REAL _DP, REAL _DPR, REAL _PA, REAL _PO, REAL _STA, REAL _CP1, REAL _CP2,REAL _WID, REAL _DF, REAL _FFD, REAL _FFP1, INT _VARI, INT _CODEP,INT _UMODE, INT _GMODE, INT _DMODE, INT _AMODE)
# <german> # <german>
#Gravurzyklus - CYCLE60 # Gravurzyklus - CYCLE60
#CYCLE60(STRING[200] _TEXT, REAL _RTP, REAL _RFP, REAL _SDIS, REAL _DP, REAL _DPR, REAL _PA, REAL _PO, REAL _STA, REAL _CP1, REAL _CP2,REAL _WID, REAL _DF, REAL _FFD, REAL _FFP1, INT _VARI, INT _CODEP,INT _UMODE, INT _GMODE, INT _DMODE, INT _AMODE) # CYCLE60(STRING[200] _TEXT, REAL _RTP, REAL _RFP, REAL _SDIS, REAL _DP, REAL _DPR, REAL _PA, REAL _PO, REAL _STA, REAL _CP1, REAL _CP2,REAL _WID, REAL _DF, REAL _FFD, REAL _FFP1, INT _VARI, INT _CODEP,INT _UMODE, INT _GMODE, INT _DMODE, INT _AMODE)
UI_LABEL "SAMSON: Gravieren (CYCLE60)" UI_LABEL "SAMSON: Gravieren (CYCLE60)"
UI_HELP "Detailierte Zyklus Beschrieb" "file://${POST_LIB_CURRENT_BMP_DIR}/CYCL60_DE.pdf" UI_HELP "Detailierte Zyklus Beschrieb" "file://${POST_LIB_CURRENT_BMP_DIR}/CYCL60_DE.pdf"
@@ -364,18 +364,18 @@ EVENT lib_event_cycle_60
UI_LABEL "Zeichenabstand, Breite, Winkel _DF" UI_LABEL "Zeichenabstand, Breite, Winkel _DF"
} }
# # <english> # # <english>
# # Text direction # # Text direction
# # <german> # # <german>
# # Textrichtung # # Textrichtung
# #
# PARAM cycle60_engraving_text_direction # PARAM cycle60_engraving_text_direction
# { # {
# TYPE o # TYPE o
# DEFVAL "1-Normal" # DEFVAL "1-Normal"
# OPTIONS "0-Spiegel","1-Normal" # OPTIONS "0-Spiegel","1-Normal"
# UI_LABEL "Text direction" # UI_LABEL "Text direction"
# } # }
# <english> # <english>
# Text orientation # Text orientation
+3
View File
@@ -0,0 +1,3 @@
proc myProc {arg {opt 1}} {
}