From 84b25a9a057741bc3c665b8834115813400f9fbc Mon Sep 17 00:00:00 2001 From: Rebecca Turner Date: Wed, 17 Sep 2014 17:38:19 -0700 Subject: [PATCH] Add a new strict JSON highlighter --- ftyperc | 2 +- json.jsf | 259 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 260 insertions(+), 1 deletion(-) create mode 100644 json.jsf diff --git a/ftyperc b/ftyperc index 812c688..f10eea1 100644 --- a/ftyperc +++ b/ftyperc @@ -543,7 +543,7 @@ JSON *.json -autoindent --syntax js +-syntax json -smarthome -smartbacks diff --git a/json.jsf b/json.jsf new file mode 100644 index 0000000..5d70909 --- /dev/null +++ b/json.jsf @@ -0,0 +1,259 @@ +# JSON highlighter per json.org + +# Written by Rebecca Turner (@ReBecaOrg) + +# Define colors + +=Idle +=Comma +=PairSep +=Bracket magenta +=Brace magenta +=Number cyan +=String cyan +=StringEscape cyan bold +=Boolean cyan +=Null cyan + +=Bad red bold inverse # Syntax errors detected by the highlighter + +=ERROR bold yellow bg_red # Errors in the highlighter itself + +:json Idle + * end noeat call=.value() + " \t\n" json + +:end Idle + * endBAD noeat + " \t\n" end + +:endBAD Bad + * end + +.subr value + +:value Idle + * valueBAD noeat + "\"" end noeat call=.string() + "-0-9" end noeat call=.number() + "tfn" end noeat call=.bareword() + "{" end noeat call=.object() + "[" end noeat call=.array() + +:valueBAD Bad + * value + +:end Idle + * NULL noeat return + +.end + +.subr object + +:object Brace + * objectBAD noeat + "{" maybeempty + +:objectBAD ERROR + * end + +:maybeempty Brace + * key noeat + "}" end recolor=-1 + +:key Idle + * keyBAD noeat + "\"" pairsep noeat call=.string() + " \t\n" key + +:keyBAD Bad + * key + +:pairsep PairSep + * pairsepBAD noeat + ":" value + " \t\n" pairsep + +:pairsepBAD Bad + * pairsep + +:value Idle + * nextpair noeat call=.value() + " \t\n" value + +:nextpair Comma + * nextpairBAD noeat + "}" end recolor=-1 + "," key + " \t\n" nextpair + +:nextpairBAD Bad + * nextpair + +:end Brace + * NULL noeat return +.end + +.subr array + +:array Bracket + * arrayBAD noeat + "[" maybeempty + +:arrayBAD ERROR + * end + +:maybeempty Bracket + * value noeat + "]" end recolor=-1 + +:value Idle + * nextvalue noeat call=.value() + " \t\n" value + +:nextvalue Comma + * nextvalueBAD noeat + "]" end recolor=-1 + "," value + " \t\n" nextvalue + +:nextvalueBAD Bad + * nextvalue + +:end Bracket + * NULL noeat return + +.end + +.subr string + +:string String + * stringBAD noeat + "\"" body + +:stringBAD ERROR + * end + +:body String + * body + "\"" end + "\\" escape recolor=-1 + +:escape StringEscape + * escapeBAD recolor=-2 noeat + "\"/bfnrt\\" body + "u" unicode1 + +:escapeBAD Bad + * body + +:unicode1 StringEscape + * unicodeBAD recolor=-3 noeat + "0-9a-fA-F" unicode2 + +:unicode2 StringEscape + * unicodeBAD recolor=-4 noeat + "0-9a-fA-F" unicode3 + +:unicode3 StringEscape + * unicodeBAD recolor=-5 noeat + "0-9a-fA-F" unicode4 + +:unicode4 StringEscape + * unicodeBAD recolor=-6 noeat + "0-9a-fA-F" body + +:unicodeBAD Bad + * body + +:end Idle + * NULL noeat return + +.end + +.subr bareword + +:bareword Idle + * body noeat mark buffer + +:body Bad + * end noeat markend strings + "true" boolean + "false" boolean + "null" null + +done + "truefalsn" body + +:boolean Boolean + * end noeat + +:null Null + * end noeat + +:end Idle + * NULL noeat return + +.end + +.subr number + +:number Number + * numberBAD + "0-9" numberA noeat + "-" numberA + +:numberBAD ERROR + * end + +:numberA Number + "0" decimalpoint + "1-9" integer + +:integer Number + * end noeat + "0-9" integer + "." decimalpoint + "eE" exponentpart + +:decimalpoint Number + * end + "0-9" decimalpointBAD + "eE" exponentpart + "." decimalpart + +:decimalpointBAD Bad + * end + +:decimalpart Number + * decimalpartBAD + "0-9" decimalpartA + +:decimalpartBAD Bad + * end + +:decimalpartA Number + * end noeat + "0-9" decimalpartA + "eE" exponentpart + +:exponentpart Number + * exponentpartBAD + "-+" exponentpartA + "0-9" exponentpartB + +:exponentpartBAD Bad + * end + +:exponentpartA Number + * exponentpartBAD + "0-9" exponentpartB + +:exponentpartB Number + * end noeat + "0-9" exponentpartB + +:end Idle + * NULL noeat return + +.end