| OLD | NEW |
| (Empty) |
| 1 part of petitparser.json; | |
| 2 | |
| 3 /// JSON grammar. | |
| 4 class JsonGrammar extends GrammarParser { | |
| 5 JsonGrammar() : super(const JsonGrammarDefinition()); | |
| 6 } | |
| 7 | |
| 8 /// JSON grammar definition. | |
| 9 class JsonGrammarDefinition extends GrammarDefinition { | |
| 10 const JsonGrammarDefinition(); | |
| 11 | |
| 12 start() => ref(value).end(); | |
| 13 token(p) => p.flatten().trim(); | |
| 14 | |
| 15 array() => ref(token, char('[')) | |
| 16 & ref(elements).optional() | |
| 17 & ref(token, char(']')); | |
| 18 elements() => ref(value).separatedBy(ref(token, char(',')), includeSeparators:
false); | |
| 19 members() => ref(pair).separatedBy(ref(token, char(',')), includeSeparators: f
alse); | |
| 20 object() => ref(token, char('{')) | |
| 21 & ref(members).optional() | |
| 22 & ref(token, char('}')); | |
| 23 pair() => ref(stringToken) | |
| 24 & ref(token, char(':')) | |
| 25 & ref(value); | |
| 26 value() => ref(stringToken) | |
| 27 | ref(numberToken) | |
| 28 | ref(object) | |
| 29 | ref(array) | |
| 30 | ref(trueToken) | |
| 31 | ref(falseToken) | |
| 32 | ref(nullToken); | |
| 33 | |
| 34 trueToken() => ref(token, string('true')); | |
| 35 falseToken() => ref(token, string('false')); | |
| 36 nullToken() => ref(token, string('null')); | |
| 37 stringToken() => ref(token, ref(stringPrimitive)); | |
| 38 numberToken() => ref(token, ref(numberPrimitive)); | |
| 39 | |
| 40 characterPrimitive() => ref(characterNormal) | |
| 41 | ref(characterEscape) | |
| 42 | ref(characterUnicode); | |
| 43 characterNormal() => pattern('^"\\'); | |
| 44 characterEscape() => char('\\') | |
| 45 & pattern(new List.from(jsonEscapeChars.keys).join()); | |
| 46 characterUnicode() => string('\\u') | |
| 47 & pattern("0-9A-Fa-f").times(4); | |
| 48 numberPrimitive() => char('-').optional() | |
| 49 & char('0').or(digit().plus()) | |
| 50 & char('.').seq(digit().plus()).optional() | |
| 51 & pattern('eE').seq(pattern('-+').optional()).seq(digit().plus()).optional
(); | |
| 52 stringPrimitive() => char('"') | |
| 53 & ref(characterPrimitive).star() | |
| 54 & char('"'); | |
| 55 | |
| 56 } | |
| 57 | |
| 58 const jsonEscapeChars = const { | |
| 59 '\\': '\\', | |
| 60 '/': '/', | |
| 61 '"': '"', | |
| 62 'b': '\b', | |
| 63 'f': '\f', | |
| 64 'n': '\n', | |
| 65 'r': '\r', | |
| 66 't': '\t' | |
| 67 }; | |
| OLD | NEW |