diff --git a/components/prism-keyman.js b/components/prism-keyman.js index 4442c5c542..55f76c96e9 100644 --- a/components/prism-keyman.js +++ b/components/prism-keyman.js @@ -1,14 +1,44 @@ Prism.languages.keyman = { - 'comment': /\bc\s.*/i, - 'function': /\[\s*(?:(?:ALT|CAPS|CTRL|LALT|LCTRL|NCAPS|RALT|RCTRL|SHIFT)\s+)*(?:[TKU]_[\w?]+|".+?"|'.+?')\s*\]/i, // virtual key - 'string': /("|').*?\1/, - 'bold': [ // header statements, system stores and variable system stores - /&(?:baselayout|bitmap|capsalwaysoff|capsononly|copyright|ethnologuecode|hotkey|includecodes|keyboardversion|kmw_embedcss|kmw_embedjs|kmw_helpfile|kmw_helptext|kmw_rtl|language|layer|layoutfile|message|mnemoniclayout|name|oldcharposmatching|platform|shiftfreescaps|targets|version|visualkeyboard|windowslanguages)\b/i, - /\b(?:bitmap|bitmaps|caps always off|caps on only|copyright|hotkey|language|layout|message|name|shift frees caps|version)\b/i - ], - 'keyword': /\b(?:any|baselayout|beep|call|context|deadkey|dk|if|index|layer|notany|nul|outs|platform|reset|return|save|set|store|use)\b/i, // rule keywords - 'atrule': /\b(?:ansi|begin|group|match|nomatch|unicode|using keys)\b/i, // structural keywords - 'number': /\b(?:U\+[\dA-F]+|d\d+|x[\da-f]+|\d+)\b/i, // U+####, x###, d### characters and numbers - 'operator': /[+>\\,()]/, - 'tag': /\$(?:keyman|keymanonly|keymanweb|kmfl|weaver):/i // prefixes + 'comment': { + pattern: /\bc .*/i, + greedy: true + }, + 'string': { + pattern: /"[^"\r\n]*"|'[^'\r\n]*'/, + greedy: true + }, + 'virtual-key': { + pattern: /\[\s*(?:(?:ALT|CAPS|CTRL|LALT|LCTRL|NCAPS|RALT|RCTRL|SHIFT)\s+)*(?:[TKU]_[\w?]+|[A-E]\d\d?|"[^"\r\n]*"|'[^'\r\n]*')\s*\]/i, + greedy: true, + alias: 'function' // alias for styles + }, + + // https://help.keyman.com/developer/language/guide/headers + 'header-keyword': { + pattern: /&\w+/, + alias: 'bold' // alias for styles + }, + 'header-statement': { + pattern: /\b(?:bitmap|bitmaps|caps always off|caps on only|copyright|hotkey|language|layout|message|name|shift frees caps|version)\b/i, + alias: 'bold' // alias for styles + }, + + 'rule-keyword': { + pattern: /\b(?:any|baselayout|beep|call|context|deadkey|dk|if|index|layer|notany|nul|outs|platform|reset|return|save|set|store|use)\b/i, + alias: 'keyword' + }, + 'structural-keyword': { + pattern: /\b(?:ansi|begin|group|match|nomatch|unicode|using keys)\b/i, + alias: 'keyword' + }, + + 'compile-target': { + pattern: /\$(?:keyman|keymanonly|keymanweb|kmfl|weaver):/i, + alias: 'property' + }, + + // U+####, x###, d### characters and numbers + 'number': /\b(?:U\+[\dA-F]+|d\d+|x[\da-f]+|\d+)\b/i, + 'operator': /[+>\\$]|\.\./, + 'punctuation': /[()=,]/ }; diff --git a/components/prism-keyman.min.js b/components/prism-keyman.min.js index fc1587ce0e..749507f544 100644 --- a/components/prism-keyman.min.js +++ b/components/prism-keyman.min.js @@ -1 +1 @@ -Prism.languages.keyman={comment:/\bc\s.*/i,function:/\[\s*(?:(?:ALT|CAPS|CTRL|LALT|LCTRL|NCAPS|RALT|RCTRL|SHIFT)\s+)*(?:[TKU]_[\w?]+|".+?"|'.+?')\s*\]/i,string:/("|').*?\1/,bold:[/&(?:baselayout|bitmap|capsalwaysoff|capsononly|copyright|ethnologuecode|hotkey|includecodes|keyboardversion|kmw_embedcss|kmw_embedjs|kmw_helpfile|kmw_helptext|kmw_rtl|language|layer|layoutfile|message|mnemoniclayout|name|oldcharposmatching|platform|shiftfreescaps|targets|version|visualkeyboard|windowslanguages)\b/i,/\b(?:bitmap|bitmaps|caps always off|caps on only|copyright|hotkey|language|layout|message|name|shift frees caps|version)\b/i],keyword:/\b(?:any|baselayout|beep|call|context|deadkey|dk|if|index|layer|notany|nul|outs|platform|reset|return|save|set|store|use)\b/i,atrule:/\b(?:ansi|begin|group|match|nomatch|unicode|using keys)\b/i,number:/\b(?:U\+[\dA-F]+|d\d+|x[\da-f]+|\d+)\b/i,operator:/[+>\\,()]/,tag:/\$(?:keyman|keymanonly|keymanweb|kmfl|weaver):/i}; \ No newline at end of file +Prism.languages.keyman={comment:{pattern:/\bc .*/i,greedy:!0},string:{pattern:/"[^"\r\n]*"|'[^'\r\n]*'/,greedy:!0},"virtual-key":{pattern:/\[\s*(?:(?:ALT|CAPS|CTRL|LALT|LCTRL|NCAPS|RALT|RCTRL|SHIFT)\s+)*(?:[TKU]_[\w?]+|[A-E]\d\d?|"[^"\r\n]*"|'[^'\r\n]*')\s*\]/i,greedy:!0,alias:"function"},"header-keyword":{pattern:/&\w+/,alias:"bold"},"header-statement":{pattern:/\b(?:bitmap|bitmaps|caps always off|caps on only|copyright|hotkey|language|layout|message|name|shift frees caps|version)\b/i,alias:"bold"},"rule-keyword":{pattern:/\b(?:any|baselayout|beep|call|context|deadkey|dk|if|index|layer|notany|nul|outs|platform|reset|return|save|set|store|use)\b/i,alias:"keyword"},"structural-keyword":{pattern:/\b(?:ansi|begin|group|match|nomatch|unicode|using keys)\b/i,alias:"keyword"},"compile-target":{pattern:/\$(?:keyman|keymanonly|keymanweb|kmfl|weaver):/i,alias:"property"},number:/\b(?:U\+[\dA-F]+|d\d+|x[\da-f]+|\d+)\b/i,operator:/[+>\\$]|\.\./,punctuation:/[()=,]/}; \ No newline at end of file diff --git a/tests/languages/keyman/atrule_feature.test b/tests/languages/keyman/atrule_feature.test deleted file mode 100644 index 1171caf3be..0000000000 --- a/tests/languages/keyman/atrule_feature.test +++ /dev/null @@ -1,15 +0,0 @@ -ansi begin unicode -group using keys -match nomatch - ----------------------------------------------------- - -[ - ["atrule", "ansi"], ["atrule", "begin"], ["atrule", "unicode"], - ["atrule", "group"], ["atrule", "using keys"], - ["atrule", "match"], ["atrule", "nomatch"] -] - ----------------------------------------------------- - -Checks for all structural keywords. \ No newline at end of file diff --git a/tests/languages/keyman/bold_feature.test b/tests/languages/keyman/bold_feature.test deleted file mode 100644 index 58e731c2ce..0000000000 --- a/tests/languages/keyman/bold_feature.test +++ /dev/null @@ -1,59 +0,0 @@ -&baselayout &bitmap &capsononly -&capsalwaysoff &shiftfreescaps -©right ðnologuecode -&hotkey &includecodes -&keyboardversion &kmw_embedcss -&kmw_embedjs &kmw_helpfile -&kmw_helptext &kmw_rtl -&language &layer &layoutfile -&message &mnemoniclayout -&name &oldcharposmatching -&platform &targets &version -&visualkeyboard &windowslanguages - -bitmap -bitmaps -caps on only -caps always off -shift frees caps -copyright -hotkey -language -layout -message -name -version - ----------------------------------------------------- - -[ - ["bold", "&baselayout"], ["bold", "&bitmap"], ["bold", "&capsononly"], - ["bold", "&capsalwaysoff"], ["bold", "&shiftfreescaps"], - ["bold", "©right"], ["bold", "ðnologuecode"], - ["bold", "&hotkey"], ["bold", "&includecodes"], - ["bold", "&keyboardversion"], ["bold", "&kmw_embedcss"], - ["bold", "&kmw_embedjs"], ["bold", "&kmw_helpfile"], - ["bold", "&kmw_helptext"], ["bold", "&kmw_rtl"], - ["bold", "&language"], ["bold", "&layer"], ["bold", "&layoutfile"], - ["bold", "&message"], ["bold", "&mnemoniclayout"], - ["bold", "&name"], ["bold", "&oldcharposmatching"], - ["bold", "&platform"], ["bold", "&targets"], ["bold", "&version"], - ["bold", "&visualkeyboard"], ["bold", "&windowslanguages"], - - ["bold", "bitmap"], - ["bold", "bitmaps"], - ["bold", "caps on only"], - ["bold", "caps always off"], - ["bold", "shift frees caps"], - ["bold", "copyright"], - ["bold", "hotkey"], - ["bold", "language"], - ["bold", "layout"], - ["bold", "message"], - ["bold", "name"], - ["bold", "version"] -] - ----------------------------------------------------- - -Checks for header statements, system stores and variable system stores. \ No newline at end of file diff --git a/tests/languages/keyman/compile-target_feature.test b/tests/languages/keyman/compile-target_feature.test new file mode 100644 index 0000000000..5d0bbc446e --- /dev/null +++ b/tests/languages/keyman/compile-target_feature.test @@ -0,0 +1,27 @@ +$keyman: +$kmfl: +$weaver: +$keymanweb: +$keymanonly: + +c Note: return statement is only supported in .kmx in Keyman 13 +$keymanonly: + 'a' > 'a' return + +---------------------------------------------------- + +[ + ["compile-target", "$keyman:"], + ["compile-target", "$kmfl:"], + ["compile-target", "$weaver:"], + ["compile-target", "$keymanweb:"], + ["compile-target", "$keymanonly:"], + + ["comment", "c Note: return statement is only supported in .kmx in Keyman 13"], + + ["compile-target", "$keymanonly:"], + ["operator", "+"], + ["string", "'a'"], + ["operator", ">"], + ["string", "'a'"], + ["rule-keyword", "return"] +] diff --git a/tests/languages/keyman/function_feature.test b/tests/languages/keyman/function_feature.test deleted file mode 100644 index 3852ade1b2..0000000000 --- a/tests/languages/keyman/function_feature.test +++ /dev/null @@ -1,39 +0,0 @@ -['c'] -["f"] -[K_SEL] -[K_KANJI?15] -[T_SCHWA] -[U_0259] -[CTRL 'a'] -[SHIFT "b"] -[ALT K_C] -[LCTRL T_D] -[RCTRL U_E259] -[LALT K_F] -[RALT K_G] -[CAPS K_H] -[NCAPS K_I] - ----------------------------------------------------- - -[ - ["function", "['c']"], - ["function", "[\"f\"]"], - ["function", "[K_SEL]"], - ["function", "[K_KANJI?15]"], - ["function", "[T_SCHWA]"], - ["function", "[U_0259]"], - ["function", "[CTRL 'a']"], - ["function", "[SHIFT \"b\"]"], - ["function", "[ALT K_C]"], - ["function", "[LCTRL T_D]"], - ["function", "[RCTRL U_E259]"], - ["function", "[LALT K_F]"], - ["function", "[RALT K_G]"], - ["function", "[CAPS K_H]"], - ["function", "[NCAPS K_I]"] -] - ----------------------------------------------------- - -Checks for keys, with all possible modifiers. \ No newline at end of file diff --git a/tests/languages/keyman/header-keyword.test b/tests/languages/keyman/header-keyword.test new file mode 100644 index 0000000000..8dcdf8f6cd --- /dev/null +++ b/tests/languages/keyman/header-keyword.test @@ -0,0 +1,59 @@ +&baselayout +&bitmap +&capsononly +&capsalwaysoff +&shiftfreescaps +©right +ðnologuecode +&hotkey +&includecodes +&keyboardversion +&kmw_embedcss +&kmw_embedjs +&kmw_helpfile +&kmw_helptext +&kmw_rtl +&language +&layer +&layoutfile +&message +&mnemoniclayout +&name +&oldcharposmatching +&platform +&targets +&version +&visualkeyboard +&windowslanguages + +---------------------------------------------------- + +[ + ["header-keyword", "&baselayout"], + ["header-keyword", "&bitmap"], + ["header-keyword", "&capsononly"], + ["header-keyword", "&capsalwaysoff"], + ["header-keyword", "&shiftfreescaps"], + ["header-keyword", "©right"], + ["header-keyword", "ðnologuecode"], + ["header-keyword", "&hotkey"], + ["header-keyword", "&includecodes"], + ["header-keyword", "&keyboardversion"], + ["header-keyword", "&kmw_embedcss"], + ["header-keyword", "&kmw_embedjs"], + ["header-keyword", "&kmw_helpfile"], + ["header-keyword", "&kmw_helptext"], + ["header-keyword", "&kmw_rtl"], + ["header-keyword", "&language"], + ["header-keyword", "&layer"], + ["header-keyword", "&layoutfile"], + ["header-keyword", "&message"], + ["header-keyword", "&mnemoniclayout"], + ["header-keyword", "&name"], + ["header-keyword", "&oldcharposmatching"], + ["header-keyword", "&platform"], + ["header-keyword", "&targets"], + ["header-keyword", "&version"], + ["header-keyword", "&visualkeyboard"], + ["header-keyword", "&windowslanguages"] +] diff --git a/tests/languages/keyman/header-statement.test b/tests/languages/keyman/header-statement.test new file mode 100644 index 0000000000..c6b1043af4 --- /dev/null +++ b/tests/languages/keyman/header-statement.test @@ -0,0 +1,29 @@ +bitmap +bitmaps +caps on only +caps always off +shift frees caps +copyright +hotkey +language +layout +message +name +version + +---------------------------------------------------- + +[ + ["header-statement", "bitmap"], + ["header-statement", "bitmaps"], + ["header-statement", "caps on only"], + ["header-statement", "caps always off"], + ["header-statement", "shift frees caps"], + ["header-statement", "copyright"], + ["header-statement", "hotkey"], + ["header-statement", "language"], + ["header-statement", "layout"], + ["header-statement", "message"], + ["header-statement", "name"], + ["header-statement", "version"] +] diff --git a/tests/languages/keyman/keyword_feature.test b/tests/languages/keyman/keyword_feature.test deleted file mode 100644 index 7bbd2303ee..0000000000 --- a/tests/languages/keyman/keyword_feature.test +++ /dev/null @@ -1,21 +0,0 @@ -any baselayout beep -call context deadkey -dk if index layer -notany nul outs -platform return reset -save set store use - ----------------------------------------------------- - -[ - ["keyword", "any"], ["keyword", "baselayout"], ["keyword", "beep"], - ["keyword", "call"], ["keyword", "context"], ["keyword", "deadkey"], - ["keyword", "dk"], ["keyword", "if"], ["keyword", "index"], ["keyword", "layer"], - ["keyword", "notany"], ["keyword", "nul"], ["keyword", "outs"], - ["keyword", "platform"], ["keyword", "return"], ["keyword", "reset"], - ["keyword", "save"], ["keyword", "set"], ["keyword", "store"], ["keyword", "use"] -] - ----------------------------------------------------- - -Checks for all keywords. \ No newline at end of file diff --git a/tests/languages/keyman/operator_feature.test b/tests/languages/keyman/operator_feature.test index bc439e8597..833a370ba7 100644 --- a/tests/languages/keyman/operator_feature.test +++ b/tests/languages/keyman/operator_feature.test @@ -1,15 +1,17 @@ -+ > -\ , -( ) ++ > \ + +$vowel_a +'a' .. 'z' ---------------------------------------------------- [ - ["operator", "+"], ["operator", ">"], - ["operator", "\\"], ["operator", ","], - ["operator", "("], ["operator", ")"] + ["operator", "+"], ["operator", ">"], ["operator", "\\"], + + ["operator", "$"], "vowel_a\r\n", + ["string", "'a'"], ["operator", ".."], ["string", "'z'"] ] ---------------------------------------------------- -Checks for all operators. \ No newline at end of file +Checks for all operators. diff --git a/tests/languages/keyman/punctuation_feature.test b/tests/languages/keyman/punctuation_feature.test new file mode 100644 index 0000000000..5865966755 --- /dev/null +++ b/tests/languages/keyman/punctuation_feature.test @@ -0,0 +1,9 @@ +( ) +, = + +---------------------------------------------------- + +[ + ["punctuation", "("], ["punctuation", ")"], + ["punctuation", ","], ["punctuation", "="] +] diff --git a/tests/languages/keyman/rule-keyword_feature.test b/tests/languages/keyman/rule-keyword_feature.test new file mode 100644 index 0000000000..f2b3c488cd --- /dev/null +++ b/tests/languages/keyman/rule-keyword_feature.test @@ -0,0 +1,49 @@ +any +baselayout +beep +call +context +deadkey +dk +if +index +layer +notany +nul +outs +platform +reset +return +save +set +store +use + +---------------------------------------------------- + +[ + ["rule-keyword", "any"], + ["rule-keyword", "baselayout"], + ["rule-keyword", "beep"], + ["rule-keyword", "call"], + ["rule-keyword", "context"], + ["rule-keyword", "deadkey"], + ["rule-keyword", "dk"], + ["rule-keyword", "if"], + ["rule-keyword", "index"], + ["rule-keyword", "layer"], + ["rule-keyword", "notany"], + ["rule-keyword", "nul"], + ["rule-keyword", "outs"], + ["rule-keyword", "platform"], + ["rule-keyword", "reset"], + ["rule-keyword", "return"], + ["rule-keyword", "save"], + ["rule-keyword", "set"], + ["rule-keyword", "store"], + ["rule-keyword", "use"] +] + +---------------------------------------------------- + +Checks for all keywords. diff --git a/tests/languages/keyman/structural-keyword_feature.test b/tests/languages/keyman/structural-keyword_feature.test new file mode 100644 index 0000000000..f95e029468 --- /dev/null +++ b/tests/languages/keyman/structural-keyword_feature.test @@ -0,0 +1,23 @@ +ansi +begin +unicode +group +using keys +match +nomatch + +---------------------------------------------------- + +[ + ["structural-keyword", "ansi"], + ["structural-keyword", "begin"], + ["structural-keyword", "unicode"], + ["structural-keyword", "group"], + ["structural-keyword", "using keys"], + ["structural-keyword", "match"], + ["structural-keyword", "nomatch"] +] + +---------------------------------------------------- + +Checks for all structural keywords. diff --git a/tests/languages/keyman/tag_feature.test b/tests/languages/keyman/tag_feature.test deleted file mode 100644 index 2aa760ae32..0000000000 --- a/tests/languages/keyman/tag_feature.test +++ /dev/null @@ -1,19 +0,0 @@ -$keyman: -$kmfl: -$weaver: -$keymanweb: -$keymanonly: - ----------------------------------------------------- - -[ - ["tag", "$keyman:"], - ["tag", "$kmfl:"], - ["tag", "$weaver:"], - ["tag", "$keymanweb:"], - ["tag", "$keymanonly:"] -] - ----------------------------------------------------- - -Checks for all prefixes. \ No newline at end of file diff --git a/tests/languages/keyman/virtual-key_feature.test b/tests/languages/keyman/virtual-key_feature.test new file mode 100644 index 0000000000..8ecf649f8f --- /dev/null +++ b/tests/languages/keyman/virtual-key_feature.test @@ -0,0 +1,43 @@ +['c'] +["f"] +[K_SEL] +[K_KANJI?15] +[T_SCHWA] +[U_0259] +[CTRL 'a'] +[SHIFT "b"] +[ALT K_C] +[LCTRL T_D] +[RCTRL U_E259] +[LALT K_F] +[RALT K_G] +[CAPS K_H] +[NCAPS K_I] +[SHIFT CAPS K_A] +[SHIFT C01] + +---------------------------------------------------- + +[ + ["virtual-key", "['c']"], + ["virtual-key", "[\"f\"]"], + ["virtual-key", "[K_SEL]"], + ["virtual-key", "[K_KANJI?15]"], + ["virtual-key", "[T_SCHWA]"], + ["virtual-key", "[U_0259]"], + ["virtual-key", "[CTRL 'a']"], + ["virtual-key", "[SHIFT \"b\"]"], + ["virtual-key", "[ALT K_C]"], + ["virtual-key", "[LCTRL T_D]"], + ["virtual-key", "[RCTRL U_E259]"], + ["virtual-key", "[LALT K_F]"], + ["virtual-key", "[RALT K_G]"], + ["virtual-key", "[CAPS K_H]"], + ["virtual-key", "[NCAPS K_I]"], + ["virtual-key", "[SHIFT CAPS K_A]"], + ["virtual-key", "[SHIFT C01]"] +] + +---------------------------------------------------- + +Checks for keys, with all possible modifiers.