Skip to content

Commit

Permalink
remove template recognize and optimize escaping behaviour
Browse files Browse the repository at this point in the history
1. Now string templates will only be colored in assignment of usages and inside StringTemplate and TemplateApply.
2. Support 3-octal encoding.
3. Better detection for invalid strings.
  • Loading branch information
shigma committed Nov 10, 2018
1 parent 236141f commit 4fa3e82
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 14 deletions.
74 changes: 64 additions & 10 deletions WolframLanguage.sublime-syntax
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@ variables:
Catalan|Degree|E|EulerGamma|Glaisher|GoldenAngle|GoldenRatio|I|Khinchin|MachinePrecision|Pi
)\b
named_characters: AAcute|ABar|ACup|ADoubleDot|AE|AGrave|AHat|Aleph|AliasDelimiter|AliasIndicator|AlignmentMarker|Alpha|AltKey|And|Angle|Angstrom|AquariusSign|AriesSign|ARing|AscendingEllipsis|ATilde|AutoLeftMatch|AutoOperand|AutoPlaceholder|AutoRightMatch|AutoSpace|Backslash|BeamedEighthNote|BeamedSixteenthNote|Because|Bet|Beta|BlackBishop|BlackKing|BlackKnight|BlackPawn|BlackQueen|BlackRook|Breve|Bullet|CAcute|CancerSign|Cap|CapitalAAcute|CapitalABar|CapitalACup|CapitalADoubleDot|CapitalAE|CapitalAGrave|CapitalAHat|CapitalAlpha|CapitalARing|CapitalATilde|CapitalBeta|CapitalCAcute|CapitalCCedilla|CapitalCHacek|CapitalChi|CapitalDelta|CapitalDHacek|CapitalDifferentialD|CapitalDigamma|CapitalEAcute|CapitalEBar|CapitalECup|CapitalEDoubleDot|CapitalEGrave|CapitalEHacek|CapitalEHat|CapitalEpsilon|CapitalEta|CapitalEth|CapitalGamma|CapitalIAcute|CapitalICup|CapitalIDoubleDot|CapitalIGrave|CapitalIHat|CapitalIota|CapitalKappa|CapitalKoppa|CapitalLambda|CapitalLSlash|CapitalMu|CapitalNHacek|CapitalNTilde|CapitalNu|CapitalOAcute|CapitalODoubleAcute|CapitalODoubleDot|CapitalOE|CapitalOGrave|CapitalOHat|CapitalOmega|CapitalOmicron|CapitalOSlash|CapitalOTilde|CapitalPhi|CapitalPi|CapitalPsi|CapitalRHacek|CapitalRho|CapitalSampi|CapitalSHacek|CapitalSigma|CapitalStigma|CapitalTau|CapitalTHacek|CapitalTheta|CapitalThorn|CapitalUAcute|CapitalUDoubleAcute|CapitalUDoubleDot|CapitalUGrave|CapitalUHat|CapitalUpsilon|CapitalURing|CapitalXi|CapitalYAcute|CapitalZeta|CapitalZHacek|CapricornSign|CCedilla|Cedilla|CenterDot|CenterEllipsis|Cent|CHacek|CheckedBox|Checkmark|Chi|CircleDot|CircleMinus|CirclePlus|CircleTimes|ClockwiseContourIntegral|CloseCurlyDoubleQuote|CloseCurlyQuote|CloverLeaf|ClubSuit|Colon|CommandKey|Conditioned|Congruent|Conjugate|ConjugateTranspose|ConstantC|Continuation|ContourIntegral|ControlKey|Coproduct|Copyright|CounterClockwiseContourIntegral|Cross|CupCap|Cup|CurlyCapitalUpsilon|CurlyEpsilon|CurlyKappa|CurlyPhi|CurlyPi|CurlyRho|CurlyTheta|Currency|Dagger|Dalet|Dash|Degree|DeleteKey|Del|Delta|DescendingEllipsis|DHacek|Diameter|Diamond|DiamondSuit|DifferenceDelta|DifferentialD|Digamma|DirectedEdge|DiscreteRatio|DiscreteShift|DiscretionaryHyphen|DiscretionaryLineSeparator|DiscretionaryPageBreakAbove|DiscretionaryPageBreakBelow|DiscretionaryParagraphSeparator|Distributed|Divides|Divide|DotEqual|DotlessI|DotlessJ|DottedSquare|DoubleContourIntegral|DoubleDagger|DoubledGamma|DoubleDot|DoubleDownArrow|DoubledPi|DoubleLeftArrow|DoubleLeftRightArrow|DoubleLeftTee|DoubleLongLeftArrow|DoubleLongLeftRightArrow|DoubleLongRightArrow|DoublePrime|DoubleRightArrow|DoubleRightTee|DoubleStruckA|DoubleStruckB|DoubleStruckC|DoubleStruckCapitalA|DoubleStruckCapitalB|DoubleStruckCapitalC|DoubleStruckCapitalD|DoubleStruckCapitalE|DoubleStruckCapitalF|DoubleStruckCapitalG|DoubleStruckCapitalH|DoubleStruckCapitalI|DoubleStruckCapitalJ|DoubleStruckCapitalK|DoubleStruckCapitalL|DoubleStruckCapitalM|DoubleStruckCapitalN|DoubleStruckCapitalO|DoubleStruckCapitalP|DoubleStruckCapitalQ|DoubleStruckCapitalR|DoubleStruckCapitalS|DoubleStruckCapitalT|DoubleStruckCapitalU|DoubleStruckCapitalV|DoubleStruckCapitalW|DoubleStruckCapitalX|DoubleStruckCapitalY|DoubleStruckCapitalZ|DoubleStruckD|DoubleStruckE|DoubleStruckEight|DoubleStruckF|DoubleStruckFive|DoubleStruckFour|DoubleStruckG|DoubleStruckH|DoubleStruckI|DoubleStruckJ|DoubleStruckK|DoubleStruckL|DoubleStruckM|DoubleStruckN|DoubleStruckNine|DoubleStruckO|DoubleStruckOne|DoubleStruckP|DoubleStruckQ|DoubleStruckR|DoubleStruckS|DoubleStruckSeven|DoubleStruckSix|DoubleStruckT|DoubleStruckThree|DoubleStruckTwo|DoubleStruckU|DoubleStruckV|DoubleStruckW|DoubleStruckX|DoubleStruckY|DoubleStruckZ|DoubleStruckZero|DoubleUpArrow|DoubleUpDownArrow|DoubleVerticalBar|DownArrowBar|DownArrow|DownArrowUpArrow|DownBreve|DownExclamation|DownLeftRightVector|DownLeftTeeVector|DownLeftVector|DownLeftVectorBar|DownPointer|DownQuestion|DownRightTeeVector|DownRightVector|DownRightVectorBar|DownTeeArrow|DownTee|EAcute|Earth|EBar|ECup|EDoubleDot|EGrave|EHacek|EHat|EighthNote|Element|Ellipsis|EmptyCircle|EmptyDiamond|EmptyDownTriangle|EmptyRectangle|EmptySet|EmptySmallCircle|EmptySmallSquare|EmptySquare|EmptyUpTriangle|EmptyVerySmallSquare|EnterKey|EntityEnd|EntityStart|Epsilon|Equal|EqualTilde|Equilibrium|Equivalent|ErrorIndicator|EscapeKey|Eta|Eth|Euro|Exists|ExponentialE|FiLigature|FilledCircle|FilledDiamond|FilledDownTriangle|FilledLeftTriangle|FilledRectangle|FilledRightTriangle|FilledSmallCircle|FilledSmallSquare|FilledSquare|FilledUpTriangle|FilledVerySmallSquare|FinalSigma|FirstPage|FivePointedStar|Flat|FlLigature|Florin|ForAll|FormalA|FormalAlpha|FormalB|FormalBeta|FormalC|FormalCapitalA|FormalCapitalAlpha|FormalCapitalB|FormalCapitalBeta|FormalCapitalC|FormalCapitalChi|FormalCapitalD|FormalCapitalDelta|FormalCapitalDigamma|FormalCapitalE|FormalCapitalEpsilon|FormalCapitalEta|FormalCapitalF|FormalCapitalG|FormalCapitalGamma|FormalCapitalH|FormalCapitalI|FormalCapitalIota|FormalCapitalJ|FormalCapitalK|FormalCapitalKappa|FormalCapitalKoppa|FormalCapitalL|FormalCapitalLambda|FormalCapitalM|FormalCapitalMu|FormalCapitalN|FormalCapitalNu|FormalCapitalO|FormalCapitalOmega|FormalCapitalOmicron|FormalCapitalP|FormalCapitalPhi|FormalCapitalPi|FormalCapitalPsi|FormalCapitalQ|FormalCapitalR|FormalCapitalRho|FormalCapitalS|FormalCapitalSampi|FormalCapitalSigma|FormalCapitalStigma|FormalCapitalT|FormalCapitalTau|FormalCapitalTheta|FormalCapitalU|FormalCapitalUpsilon|FormalCapitalV|FormalCapitalW|FormalCapitalX|FormalCapitalXi|FormalCapitalY|FormalCapitalZ|FormalCapitalZeta|FormalChi|FormalCurlyCapitalUpsilon|FormalCurlyEpsilon|FormalCurlyKappa|FormalCurlyPhi|FormalCurlyPi|FormalCurlyRho|FormalCurlyTheta|FormalD|FormalDelta|FormalDigamma|FormalE|FormalEpsilon|FormalEta|FormalF|FormalFinalSigma|FormalG|FormalGamma|FormalH|FormalI|FormalIota|FormalJ|FormalK|FormalKappa|FormalKoppa|FormalL|FormalLambda|FormalM|FormalMu|FormalN|FormalNu|FormalO|FormalOmega|FormalOmicron|FormalP|FormalPhi|FormalPi|FormalPsi|FormalQ|FormalR|FormalRho|FormalS|FormalSampi|FormalSigma|FormalStigma|FormalT|FormalTau|FormalTheta|FormalU|FormalUpsilon|FormalV|FormalW|FormalX|FormalXi|FormalY|FormalZ|FormalZeta|FreakedSmiley|Function|Gamma|GeminiSign|Gimel|GothicA|GothicB|GothicC|GothicCapitalA|GothicCapitalB|GothicCapitalC|GothicCapitalD|GothicCapitalE|GothicCapitalF|GothicCapitalG|GothicCapitalH|GothicCapitalI|GothicCapitalJ|GothicCapitalK|GothicCapitalL|GothicCapitalM|GothicCapitalN|GothicCapitalO|GothicCapitalP|GothicCapitalQ|GothicCapitalR|GothicCapitalS|GothicCapitalT|GothicCapitalU|GothicCapitalV|GothicCapitalW|GothicCapitalX|GothicCapitalY|GothicCapitalZ|GothicD|GothicE|GothicEight|GothicF|GothicFive|GothicFour|GothicG|GothicH|GothicI|GothicJ|GothicK|GothicL|GothicM|GothicN|GothicNine|GothicO|GothicOne|GothicP|GothicQ|GothicR|GothicS|GothicSeven|GothicSix|GothicT|GothicThree|GothicTwo|GothicU|GothicV|GothicW|GothicX|GothicY|GothicZ|GothicZero|GrayCircle|GraySquare|GreaterEqualLess|GreaterEqual|GreaterFullEqual|GreaterGreater|GreaterLess|GreaterSlantEqual|GreaterTilde|Hacek|HappySmiley|HBar|HeartSuit|HermitianConjugate|HorizontalLine|HumpDownHump|HumpEqual|Hyphen|IAcute|ICup|IDoubleDot|IGrave|IHat|ImaginaryI|ImaginaryJ|ImplicitPlus|Implies|IndentingNewLine|Infinity|Integral|Intersection|InvisibleApplication|InvisibleComma|InvisiblePostfixScriptBase|InvisiblePrefixScriptBase|InvisibleSpace|InvisibleTimes|Iota|Jupiter|Kappa|KernelIcon|Koppa|Lambda|LastPage|LeftAngleBracket|LeftArrowBar|LeftArrow|LeftArrowRightArrow|LeftAssociation|LeftBracketingBar|LeftCeiling|LeftDoubleBracket|LeftDoubleBracketingBar|LeftDownTeeVector|LeftDownVectorBar|LeftDownVector|LeftFloor|LeftGuillemet|LeftModified|LeftPointer|LeftRightArrow|LeftRightVector|LeftSkeleton|LeftTee|LeftTeeArrow|LeftTeeVector|LeftTriangle|LeftTriangleBar|LeftTriangleEqual|LeftUpDownVector|LeftUpTeeVector|LeftUpVector|LeftUpVectorBar|LeftVector|LeftVectorBar|LeoSign|LessEqual|LessEqualGreater|LessFullEqual|LessGreater|LessLess|LessSlantEqual|LessTilde|LetterSpace|LibraSign|LightBulb|LineSeparator|LongDash|LongEqual|LongLeftArrow|LongLeftRightArrow|LongRightArrow|LowerLeftArrow|LowerRightArrow|LSlash|Mars|MathematicaIcon|MeasuredAngle|MediumSpace|Mercury|Mho|Micro|MinusPlus|Mu|Nand|Natural|NegativeMediumSpace|NegativeThickSpace|NegativeThinSpace|NegativeVeryThinSpace|Neptune|NestedGreaterGreater|NestedLessLess|NeutralSmiley|NewLine|NHacek|NoBreak|NonBreakingSpace|Nor|NotCongruent|NotCupCap|NotDoubleVerticalBar|NotElement|NotEqual|NotEqualTilde|NotExists|NotGreater|NotGreaterEqual|NotGreaterFullEqual|NotGreaterGreater|NotGreaterLess|NotGreaterSlantEqual|NotGreaterTilde|NotHumpDownHump|NotHumpEqual|NotLeftTriangle|NotLeftTriangleBar|NotLeftTriangleEqual|NotLessEqual|NotLessFullEqual|NotLessGreater|NotLess|NotLessLess|NotLessSlantEqual|NotLessTilde|Not|NotNestedGreaterGreater|NotNestedLessLess|NotPrecedes|NotPrecedesEqual|NotPrecedesSlantEqual|NotPrecedesTilde|NotReverseElement|NotRightTriangle|NotRightTriangleBar|NotRightTriangleEqual|NotSquareSubset|NotSquareSubsetEqual|NotSquareSuperset|NotSquareSupersetEqual|NotSubset|NotSubsetEqual|NotSucceeds|NotSucceedsEqual|NotSucceedsSlantEqual|NotSucceedsTilde|NotSuperset|NotSupersetEqual|NotTilde|NotTildeEqual|NotTildeFullEqual|NotTildeTilde|NotVerticalBar|NTilde|Nu|Null|NumberSign|OAcute|ODoubleAcute|ODoubleDot|OE|OGrave|OHat|Omega|Omicron|OpenCurlyDoubleQuote|OpenCurlyQuote|OptionKey|Or|OSlash|OTilde|OverBrace|OverBracket|OverParenthesis|Paragraph|ParagraphSeparator|PartialD|PermutationProduct|Phi|Pi|Piecewise|PiscesSign|Placeholder|PlusMinus|Pluto|Precedes|PrecedesEqual|PrecedesSlantEqual|PrecedesTilde|Prime|Product|Proportion|Proportional|Psi|QuarterNote|RawAmpersand|RawAt|RawBackquote|RawBackslash|RawColon|RawComma|RawDash|RawDollar|RawDot|RawDoubleQuote|RawEqual|RawEscape|RawExclamation|RawGreater|RawLeftBrace|RawLeftBracket|RawLeftParenthesis|RawLess|RawNumberSign|RawPercent|RawPlus|RawQuestion|RawQuote|RawReturn|RawRightBrace|RawRightBracket|RawRightParenthesis|RawSemicolon|RawSlash|RawSpace|RawStar|RawTab|RawTilde|RawUnderscore|RawVerticalBar|RawWedge|RegisteredTrademark|ReturnIndicator|ReturnKey|ReverseDoublePrime|ReverseElement|ReverseEquilibrium|ReversePrime|ReverseUpEquilibrium|RHacek|Rho|RightAngle|RightAngleBracket|RightArrow|RightArrowBar|RightArrowLeftArrow|RightAssociation|RightBracketingBar|RightCeiling|RightDoubleBracket|RightDoubleBracketingBar|RightDownTeeVector|RightDownVector|RightDownVectorBar|RightFloor|RightGuillemet|RightModified|RightPointer|RightSkeleton|RightTee|RightTeeArrow|RightTeeVector|RightTriangle|RightTriangleBar|RightTriangleEqual|RightUpDownVector|RightUpTeeVector|RightUpVector|RightUpVectorBar|RightVector|RightVectorBar|RoundImplies|RoundSpaceIndicator|Rule|RuleDelayed|SadSmiley|SagittariusSign|Sampi|Saturn|ScorpioSign|ScriptA|ScriptB|ScriptC|ScriptCapitalA|ScriptCapitalB|ScriptCapitalC|ScriptCapitalD|ScriptCapitalE|ScriptCapitalF|ScriptCapitalG|ScriptCapitalH|ScriptCapitalI|ScriptCapitalJ|ScriptCapitalK|ScriptCapitalL|ScriptCapitalM|ScriptCapitalN|ScriptCapitalO|ScriptCapitalP|ScriptCapitalQ|ScriptCapitalR|ScriptCapitalS|ScriptCapitalT|ScriptCapitalU|ScriptCapitalV|ScriptCapitalW|ScriptCapitalX|ScriptCapitalY|ScriptCapitalZ|ScriptD|ScriptDotlessI|ScriptDotlessJ|ScriptE|ScriptEight|ScriptF|ScriptFive|ScriptFour|ScriptG|ScriptH|ScriptI|ScriptJ|ScriptK|ScriptL|ScriptM|ScriptN|ScriptNine|ScriptO|ScriptOne|ScriptP|ScriptQ|ScriptR|ScriptS|ScriptSeven|ScriptSix|ScriptT|ScriptThree|ScriptTwo|ScriptU|ScriptV|ScriptW|ScriptX|ScriptY|ScriptZ|ScriptZero|Section|SelectionPlaceholder|SHacek|Sharp|ShortDownArrow|ShortLeftArrow|ShortRightArrow|ShortUpArrow|Sigma|SixPointedStar|SkeletonIndicator|SmallCircle|SpaceIndicator|SpaceKey|SpadeSuit|SpanFromAbove|SpanFromBoth|SpanFromLeft|SphericalAngle|Sqrt|Square|SquareIntersection|SquareSubset|SquareSubsetEqual|SquareSuperset|SquareSupersetEqual|SquareUnion|Star|Sterling|Stigma|Subset|SubsetEqual|Succeeds|SucceedsEqual|SucceedsSlantEqual|SucceedsTilde|SuchThat|Sum|Superset|SupersetEqual|SystemEnterKey|SystemsModelDelay|SZ|TabKey|Tau|TaurusSign|TensorProduct|TensorWedge|THacek|Therefore|Theta|ThickSpace|ThinSpace|Thorn|Tilde|TildeEqual|TildeFullEqual|TildeTilde|Times|Trademark|Transpose|TripleDot|UAcute|UDoubleAcute|UDoubleDot|UGrave|UHat|UnderBrace|UnderBracket|UnderParenthesis|UndirectedEdge|Union|UnionPlus|UpArrow|UpArrowBar|UpArrowDownArrow|UpDownArrow|UpEquilibrium|UpperLeftArrow|UpperRightArrow|UpPointer|Upsilon|UpTee|UpTeeArrow|Uranus|URing|Vee|Venus|VerticalBar|VerticalEllipsis|VerticalLine|VerticalSeparator|VerticalTilde|VeryThinSpace|VirgoSign|WarningSign|WatchIcon|Wedge|WeierstrassP|WhiteBishop|WhiteKing|WhiteKnight|WhitePawn|WhiteQueen|WhiteRook|Wolf|WolframLanguageLogo|WolframLanguageLogoCircle|Xi|Xnor|Xor|YAcute|YDoubleDot|Yen|Zeta|ZHacek
scoping_functions: Block|Module|With|Function

string_template_functions: StringTemplate|TemplateApply

nb_code_styles: (Input)

contexts:
Expand Down Expand Up @@ -111,7 +117,7 @@ contexts:
scope: string.quoted.wolfram punctuation.definition.string.begin
push: string

string:
general-string:
- match: \"
scope: string.quoted.wolfram punctuation.definition.string.end
pop: true
Expand All @@ -129,14 +135,38 @@ contexts:
- include: boxed

# escape characters
- match: \\["nrtbf\\]
- match: \\[-"nrtbf()!^%&+_*@`/\\]
scope: constant.character.escape.wolfram
- match: \\\.[0-9A-Fa-f]{2}|\\:[0-9A-Fa-f]{4}
- match: |-
(?x)(
\\[0-7]{3}|
\\\.[0-9A-Fa-f]{2}|
\\:[0-9A-Fa-f]{4}
)
scope: constant.character.encoding.wolfram
- match: \\\[\w+\]
- match: \\\[({{named_characters}})\]
scope: constant.character.built-in.wolfram

# string template
# invalid characters
- match: |-
(?x)(
\\[0-7]{1,2}(?=[^0-7])|
\\\.[0-9A-Fa-f]?(?=[^0-9A-Fa-f])|
\\:[0-9A-Fa-f]{0,3}(?=[^0-9A-Fa-f])
)
scope: invalid.character.encoding.wolfram
- match: \\\[\w+\]
scope: invalid.character.built-in.wolfram
- match: \\[a-zA-Z]
scope: invalid.character.escape.wolfram

string:
- include: general-string
- match: '[\s\S]'
scope: string.quoted.wolfram

templated-string:
- include: general-string
- match: \`\w*\`
scope: variable.parameter.wolfram
- match: <\*
Expand All @@ -149,7 +179,6 @@ contexts:
pop: true
- include: inside-string
- include: expressions

- match: '[\s\S]'
scope: string.quoted.wolfram

Expand All @@ -158,6 +187,14 @@ contexts:
captures:
1: keyword.operator.MessageName.wolfram
2: string.unquoted.wolfram
push:
- match: \s*(:?=)\s*(")
captures:
1: keyword.operator.assignment.wolfram
2: string.quoted.wolfram punctuation.definition.string.begin
push: templated-string
- match: (?=[\s\S])
pop: true
# ENHANCEMENT: infix
- match: (//)\s*({{identifier}})
captures:
Expand Down Expand Up @@ -230,6 +267,21 @@ contexts:
- include: expressions-nopattern

function:
# string template functions
- match: ({{string_template_functions}})\s*(\[)(?=\s*")
captures:
1: variable.function.template.wolfram
2: punctuation.section.brackets.begin.wolfram
push:
- meta_scope: meta.block.wolfram
- match: \"
scope: string.quoted.wolfram punctuation.definition.string.begin
push: templated-string
- match: \]
scope: punctuation.section.brackets.end.wolfram
pop: true
- include: expressions

- match: ({{identifier}})\s*(\[(?!\[))
captures:
1: variable.function.wolfram
Expand All @@ -240,19 +292,21 @@ contexts:
scope: punctuation.section.brackets.end.wolfram
pop: true
- include: expressions

- match: ({{identifier}})(?=\s*(@\*|@{1,3}|\/[@*]))
scope: variable.function.wolfram

variable:
- match: '(?:System`)?({{built_in_functions}})'
scope: variable.function
scope: variable.function.wolfram
- match: '{{identifier}}'
scope: variable.other
scope: variable.other.wolfram
- match: (#[a-zA-Z][[:alnum:]]*|#\d*)
scope: variable.parameter
scope: variable.parameter.wolfram

scoping:
- match: (Block|Module|With|Function)\s*(\[(?!\[))
# scoping functions
- match: ({{scoping_functions}})\s*(\[(?!\[))
captures:
1: variable.function.scoping.wolfram
2: punctuation.section.brackets.begin.wolfram
Expand Down
15 changes: 11 additions & 4 deletions syntax_test_wolfram_language.wl
Original file line number Diff line number Diff line change
Expand Up @@ -187,15 +187,22 @@
"This is\n\a string. (* not a comment *)"
(*^ punctuation.definition.string.begin *)
(* ^^ constant.character.escape *)
(* ^^ string.quoted *)
(* ^^ invalid.character.escape *)
(* ^^^^^^^^^^^^^^^^^^^ string.quoted *)

"\[alpha]"
"\[Alpha] \[alpha]"
(* ^^^^^^^^ constant.character.built-in.wolfram *)
(* ^^^^^^^^ invalid.character.built-in.wolfram *)

"\:123456\.7890"
"\:123456\.7890\12345"
(* ^^^^^^ constant.character.encoding.wolfram *)
(* ^^^^ constant.character.encoding.wolfram *)
(* ^^^^ constant.character.encoding.wolfram *)

"\:1 \.2 \34"
(* ^^^ invalid.character.encoding.wolfram *)
(* ^^^ invalid.character.encoding.wolfram *)
(* ^^^ invalid.character.encoding.wolfram *)

foo::bar = "message"
(* ^^ keyword.operator.MessageName *)
Expand All @@ -209,7 +216,7 @@
"box 1: \!\(x\^2\); box 2: \(y\^3\) "
(* ^ keyword.operator.string-box *)
(* ^^ keyword.operator.x-scriptBox *)
(* ^^^^^^^^ string.quoted *)
(* ^^ constant.character.escape.wolfram *)


(* COMMENTS *)
Expand Down

0 comments on commit 4fa3e82

Please sign in to comment.