};
static std::unordered_map<std::string, BuiltinRule> PRIMITIVE_RULES = {
- {"boolean", {"(\"true\" | \"false\") space", {}}},
+ {"boolean", {"(\"true\" | \"false\")", {}}},
{"decimal-part", {"[0-9]{1,16}", {}}},
{"integral-part", {"[0] | [1-9] [0-9]{0,15}", {}}},
- {"number", {"(\"-\"? integral-part) (\".\" decimal-part)? ([eE] [-+]? integral-part)? space", {"integral-part", "decimal-part"}}},
- {"integer", {"(\"-\"? integral-part) space", {"integral-part"}}},
+ {"number", {"(\"-\"? integral-part) (\".\" decimal-part)? ([eE] [-+]? integral-part)?", {"integral-part", "decimal-part"}}},
+ {"integer", {"(\"-\"? integral-part)", {"integral-part"}}},
{"value", {"object | array | string | number | boolean | null", {"object", "array", "string", "number", "boolean", "null"}}},
- {"object", {"\"{\" space ( string \":\" space value (\",\" space string \":\" space value)* )? \"}\" space", {"string", "value"}}},
- {"array", {"\"[\" space ( value (\",\" space value)* )? \"]\" space", {"value"}}},
- {"uuid", {"\"\\\"\" [0-9a-fA-F]{8} \"-\" [0-9a-fA-F]{4} \"-\" [0-9a-fA-F]{4} \"-\" [0-9a-fA-F]{4} \"-\" [0-9a-fA-F]{12} \"\\\"\" space", {}}},
+ {"object", {"\"{\" space ( string \":\" space value (\",\" space string \":\" space value)* )? space \"}\"", {"string", "value"}}},
+ {"array", {"\"[\" space ( value (\",\" space value)* )? space \"]\"", {"value"}}},
+ {"uuid", {"\"\\\"\" [0-9a-fA-F]{8} \"-\" [0-9a-fA-F]{4} \"-\" [0-9a-fA-F]{4} \"-\" [0-9a-fA-F]{4} \"-\" [0-9a-fA-F]{12} \"\\\"\"", {}}},
{"char", {"[^\"\\\\\\x7F\\x00-\\x1F] | [\\\\] ([\"\\\\bfnrt] | \"u\" [0-9a-fA-F]{4})", {}}},
- {"string", {"\"\\\"\" char* \"\\\"\" space", {"char"}}},
- {"null", {"\"null\" space", {}}},
+ {"string", {"\"\\\"\" char* \"\\\"\"", {"char"}}},
+ {"null", {"\"null\"", {}}},
};
static std::unordered_map<std::string, BuiltinRule> STRING_FORMAT_RULES = {
{"date", {"[0-9]{4} \"-\" ( \"0\" [1-9] | \"1\" [0-2] ) \"-\" ( \"0\" [1-9] | [1-2] [0-9] | \"3\" [0-1] )", {}}},
{"time", {"([01] [0-9] | \"2\" [0-3]) \":\" [0-5] [0-9] \":\" [0-5] [0-9] ( \".\" [0-9]{3} )? ( \"Z\" | ( \"+\" | \"-\" ) ( [01] [0-9] | \"2\" [0-3] ) \":\" [0-5] [0-9] )", {}}},
{"date-time", {"date \"T\" time", {"date", "time"}}},
- {"date-string", {"\"\\\"\" date \"\\\"\" space", {"date"}}},
- {"time-string", {"\"\\\"\" time \"\\\"\" space", {"time"}}},
- {"date-time-string", {"\"\\\"\" date-time \"\\\"\" space", {"date-time"}}}
+ {"date-string", {"\"\\\"\" date \"\\\"\"", {"date"}}},
+ {"time-string", {"\"\\\"\" time \"\\\"\"", {"time"}}},
+ {"date-time-string", {"\"\\\"\" date-time \"\\\"\"", {"date-time"}}}
};
static bool is_reserved_name(const std::string & name) {
}
return join_seq();
};
- return _add_rule(name, "\"\\\"\" (" + to_rule(transform()) + ") \"\\\"\" space");
+ return _add_rule(name, "\"\\\"\" (" + to_rule(transform()) + ") \"\\\"\"");
}
/*
Returns a rule that matches a JSON string that is none of the provided strings
not_strings({"a"})
- -> ["] ( [a] char+ | [^"a] char* )? ["] space
+ -> ["] ( [a] char+ | [^"a] char* )? ["]
not_strings({"and", "also"})
- -> ["] ( [a] ([l] ([s] ([o] char+ | [^"o] char*) | [^"s] char*) | [n] ([d] char+ | [^"d] char*) | [^"ln] char*) | [^"a] char* )? ["] space
+ -> ["] ( [a] ([l] ([s] ([o] char+ | [^"o] char*) | [^"s] char*) | [n] ([d] char+ | [^"d] char*) | [^"ln] char*) | [^"a] char* )? ["]
*/
std::string _not_strings(const std::vector<std::string> & strings) {
if (!trie.is_end_of_string) {
out << "?";
}
- out << " [\"] space";
+ out << " [\"]";
return out.str();
}
rule += " )?";
}
- rule += " \"}\" space";
+ rule += " space \"}\"";
return rule;
}
return _add_rule(rule_name, _generate_union_rule(name, schema_types));
}
if (schema.contains("const")) {
- return _add_rule(rule_name, _generate_constant_rule(schema["const"]) + " space");
+ return _add_rule(rule_name, _generate_constant_rule(schema["const"]));
}
if (schema.contains("enum")) {
std::vector<std::string> enum_values;
for (const auto & v : schema["enum"]) {
enum_values.push_back(_generate_constant_rule(v));
}
- return _add_rule(rule_name, "(" + string_join(enum_values, " | ") + ") space");
+ return _add_rule(rule_name, "(" + string_join(enum_values, " | ") + ")");
}
if ((schema_type.is_null() || schema_type == "object")
&& (schema.contains("properties") ||
}
}
if (!enum_intersection.empty()) {
- return _add_rule(rule_name, "(" + string_join(enum_intersection, " | ") + ") space");
+ return _add_rule(rule_name, "(" + string_join(enum_intersection, " | ") + ")");
}
}
return _add_rule(rule_name, _build_object_rule(properties, required, hybrid_name, json()));
}
rule += visit(items[i], name + (name.empty() ? "" : "-") + "tuple-" + std::to_string(i));
}
- rule += " \"]\" space";
+ rule += " space \"]\"";
return _add_rule(rule_name, rule);
}
std::string item_rule_name = visit(items, name + (name.empty() ? "" : "-") + "item");
json max_items_json = schema.contains("maxItems") ? schema["maxItems"] : json();
int max_items = max_items_json.is_number_integer() ? max_items_json.get<int>() : std::numeric_limits<int>::max();
- return _add_rule(rule_name, "\"[\" space " + build_repetition(item_rule_name, min_items, max_items, "\",\" space") + " \"]\" space");
+ return _add_rule(rule_name, "\"[\" space " + build_repetition(item_rule_name, min_items, max_items, "\",\" space") + " space \"]\"");
}
if ((schema_type.is_null() || schema_type == "string") && schema.contains("pattern")) {
return _visit_pattern(schema["pattern"], rule_name);
std::string char_rule = _add_primitive("char", PRIMITIVE_RULES.at("char"));
int min_len = schema.contains("minLength") ? schema["minLength"].get<int>() : 0;
int max_len = schema.contains("maxLength") ? schema["maxLength"].get<int>() : std::numeric_limits<int>::max();
- return _add_rule(rule_name, "\"\\\"\" " + build_repetition(char_rule, min_len, max_len) + " \"\\\"\" space");
+ return _add_rule(rule_name, "\"\\\"\" " + build_repetition(char_rule, min_len, max_len) + " \"\\\"\"");
}
if (schema_type == "integer" && (schema.contains("minimum") || schema.contains("exclusiveMinimum") || schema.contains("maximum") || schema.contains("exclusiveMaximum"))) {
int64_t min_value = std::numeric_limits<int64_t>::min();
std::stringstream out;
out << "(";
build_min_max_int(min_value, max_value, out);
- out << ") space";
+ out << ")";
return _add_rule(rule_name, out.str());
}
if (schema.empty() || schema_type == "object") {
"minimum": 0
})""",
R"""(
- root ::= ([0] | [1-9] [0-9]{0,15}) space
+ root ::= ([0] | [1-9] [0-9]{0,15})
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"minimum": 1
})""",
R"""(
- root ::= ([1-9] [0-9]{0,15}) space
+ root ::= ([1-9] [0-9]{0,15})
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"minimum": 3
})""",
R"""(
- root ::= ([1-2] [0-9]{1,15} | [3-9] [0-9]{0,15}) space
+ root ::= ([1-2] [0-9]{1,15} | [3-9] [0-9]{0,15})
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"minimum": 9
})""",
R"""(
- root ::= ([1-8] [0-9]{1,15} | [9] [0-9]{0,15}) space
+ root ::= ([1-8] [0-9]{1,15} | [9] [0-9]{0,15})
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"minimum": 10
})""",
R"""(
- root ::= ([1] ([0-9]{1,15}) | [2-9] [0-9]{1,15}) space
+ root ::= ([1] ([0-9]{1,15}) | [2-9] [0-9]{1,15})
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"minimum": 25
})""",
R"""(
- root ::= ([1] [0-9]{2,15} | [2] ([0-4] [0-9]{1,14} | [5-9] [0-9]{0,14}) | [3-9] [0-9]{1,15}) space
+ root ::= ([1] [0-9]{2,15} | [2] ([0-4] [0-9]{1,14} | [5-9] [0-9]{0,14}) | [3-9] [0-9]{1,15})
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maximum": 30
})""",
R"""(
- root ::= ("-" [1-9] [0-9]{0,15} | [0-9] | ([1-2] [0-9] | [3] "0")) space
+ root ::= ("-" [1-9] [0-9]{0,15} | [0-9] | ([1-2] [0-9] | [3] "0"))
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"minimum": -5
})""",
R"""(
- root ::= ("-" ([0-5]) | [0] | [1-9] [0-9]{0,15}) space
+ root ::= ("-" ([0-5]) | [0] | [1-9] [0-9]{0,15})
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"minimum": -123
})""",
R"""(
- root ::= ("-" ([0-9] | ([1-8] [0-9] | [9] [0-9]) | "1" ([0-1] [0-9] | [2] [0-3])) | [0] | [1-9] [0-9]{0,15}) space
+ root ::= ("-" ([0-9] | ([1-8] [0-9] | [9] [0-9]) | "1" ([0-1] [0-9] | [2] [0-3])) | [0] | [1-9] [0-9]{0,15})
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maximum": -5
})""",
R"""(
- root ::= ("-" ([0-4] [0-9]{1,15} | [5-9] [0-9]{0,15})) space
+ root ::= ("-" ([0-4] [0-9]{1,15} | [5-9] [0-9]{0,15}))
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maximum": 1
})""",
R"""(
- root ::= ("-" [1-9] [0-9]{0,15} | [0-1]) space
+ root ::= ("-" [1-9] [0-9]{0,15} | [0-1])
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maximum": 100
})""",
R"""(
- root ::= ("-" [1-9] [0-9]{0,15} | [0-9] | ([1-8] [0-9] | [9] [0-9]) | "100") space
+ root ::= ("-" [1-9] [0-9]{0,15} | [0-9] | ([1-8] [0-9] | [9] [0-9]) | "100")
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maximum": 23
})""",
R"""(
- root ::= ([0-9] | ([1] [0-9] | [2] [0-3])) space
+ root ::= ([0-9] | ([1] [0-9] | [2] [0-3]))
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maximum": 300
})""",
R"""(
- root ::= (([1] ([5-9]) | [2-9] [0-9]) | ([1-2] [0-9]{2} | [3] "00")) space
+ root ::= (([1] ([5-9]) | [2-9] [0-9]) | ([1-2] [0-9]{2} | [3] "00"))
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maximum": 30
})""",
R"""(
- root ::= ([5-9] | ([1-2] [0-9] | [3] "0")) space
+ root ::= ([5-9] | ([1-2] [0-9] | [3] "0"))
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maximum": 42
})""",
R"""(
- root ::= ("-" ([0-9] | ([1-8] [0-9] | [9] [0-9]) | "1" ([0-1] [0-9] | [2] [0-3])) | [0-9] | ([1-3] [0-9] | [4] [0-2])) space
+ root ::= ("-" ([0-9] | ([1-8] [0-9] | [9] [0-9]) | "1" ([0-1] [0-9] | [2] [0-3])) | [0-9] | ([1-3] [0-9] | [4] [0-2]))
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maximum": 10
})""",
R"""(
- root ::= ("-" ([0-9] | "10") | [0-9] | "10") space
+ root ::= ("-" ([0-9] | "10") | [0-9] | "10")
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"empty schema (object)",
"{}",
R"""(
- array ::= "[" space ( value ("," space value)* )? "]" space
- boolean ::= ("true" | "false") space
+ array ::= "[" space ( value ("," space value)* )? space "]"
+ boolean ::= ("true" | "false")
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- null ::= "null" space
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- object ::= "{" space ( string ":" space value ("," space string ":" space value)* )? "}" space
+ null ::= "null"
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ object ::= "{" space ( string ":" space value ("," space string ":" space value)* )? space "}"
root ::= object
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
value ::= object | array | string | number | boolean | null
)"""
});
})""",
R"""(
date ::= [0-9]{4} "-" ( "0" [1-9] | "1" [0-2] ) "-" ( "0" [1-9] | [1-2] [0-9] | "3" [0-1] )
- date-string ::= "\"" date "\"" space
+ date-string ::= "\"" date "\""
date-time ::= date "T" time
- date-time-string ::= "\"" date-time "\"" space
- root ::= "[" space tuple-0 "," space uuid "," space tuple-2 "," space tuple-3 "]" space
+ date-time-string ::= "\"" date-time "\""
+ root ::= "[" space tuple-0 "," space uuid "," space tuple-2 "," space tuple-3 space "]"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
time ::= ([01] [0-9] | "2" [0-3]) ":" [0-5] [0-9] ":" [0-5] [0-9] ( "." [0-9]{3} )? ( "Z" | ( "+" | "-" ) ( [01] [0-9] | "2" [0-3] ) ":" [0-5] [0-9] )
- time-string ::= "\"" time "\"" space
+ time-string ::= "\"" time "\""
tuple-0 ::= date-string
tuple-2 ::= time-string
tuple-3 ::= date-time-string
- uuid ::= "\"" [0-9a-fA-F]{8} "-" [0-9a-fA-F]{4} "-" [0-9a-fA-F]{4} "-" [0-9a-fA-F]{4} "-" [0-9a-fA-F]{12} "\"" space
+ uuid ::= "\"" [0-9a-fA-F]{8} "-" [0-9a-fA-F]{4} "-" [0-9a-fA-F]{4} "-" [0-9a-fA-F]{4} "-" [0-9a-fA-F]{12} "\""
)"""
});
})""",
R"""(
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- root ::= "\"" char* "\"" space
+ root ::= "\"" char* "\""
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
})""",
R"""(
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- root ::= "\"" char+ "\"" space
+ root ::= "\"" char+ "\""
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
})""",
R"""(
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- root ::= "\"" char{3,} "\"" space
+ root ::= "\"" char{3,} "\""
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
})""",
R"""(
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- root ::= "\"" char{0,3} "\"" space
+ root ::= "\"" char{0,3} "\""
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
})""",
R"""(
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- root ::= "\"" char{1,4} "\"" space
+ root ::= "\"" char{1,4} "\""
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"type": "boolean"
})""",
R"""(
- root ::= ("true" | "false") space
+ root ::= ("true" | "false")
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
})""",
R"""(
integral-part ::= [0] | [1-9] [0-9]{0,15}
- root ::= ("-"? integral-part) space
+ root ::= ("-"? integral-part)
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"const": "foo"
})""",
R"""(
- root ::= "\"foo\"" space
+ root ::= "\"foo\""
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"const": 123
})""",
R"""(
- root ::= "123" space
+ root ::= "123"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"enum": ["red", "amber", "green", null, 42, ["foo"]]
})""",
R"""(
- root ::= ("\"red\"" | "\"amber\"" | "\"green\"" | "null" | "42" | "[\"foo\"]") space
+ root ::= ("\"red\"" | "\"amber\"" | "\"green\"" | "null" | "42" | "[\"foo\"]")
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
})""",
R"""(
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- root ::= "[" space (string ("," space string)*)? "]" space
+ root ::= "[" space (string ("," space string)*)? space "]"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
)"""
});
"prefixItems": { "type": "string" }
})""",
R"""(
- alternative-0 ::= "[" space (string ("," space string)*)? "]" space
+ alternative-0 ::= "[" space (string ("," space string)*)? space "]"
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- null ::= "null" space
+ null ::= "null"
root ::= alternative-0 | null
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
)"""
});
})""",
R"""(
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- root ::= "[" space string "]" space
+ root ::= "[" space string space "]"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
)"""
});
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- root ::= "[" space string "," space number "]" space
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ root ::= "[" space string "," space number space "]"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
)"""
});
"items": {}
})""",
R"""(
- array ::= "[" space ( value ("," space value)* )? "]" space
- boolean ::= ("true" | "false") space
+ array ::= "[" space ( value ("," space value)* )? space "]"
+ boolean ::= ("true" | "false")
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
item ::= object
- null ::= "null" space
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- object ::= "{" space ( string ":" space value ("," space string ":" space value)* )? "}" space
- root ::= "[" space (item ("," space item)*)? "]" space
+ null ::= "null"
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ object ::= "{" space ( string ":" space value ("," space string ":" space value)* )? space "}"
+ root ::= "[" space (item ("," space item)*)? space "]"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
value ::= object | array | string | number | boolean | null
)"""
});
"prefixItems": { "type": "string" }
})""",
R"""(
- array ::= "[" space ( value ("," space value)* )? "]" space
- boolean ::= ("true" | "false") space
+ array ::= "[" space ( value ("," space value)* )? space "]"
+ boolean ::= ("true" | "false")
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
item ::= object
- null ::= "null" space
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- object ::= "{" space ( string ":" space value ("," space string ":" space value)* )? "}" space
- root ::= "[" space (item ("," space item)*)? "]" space
+ null ::= "null"
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ object ::= "{" space ( string ":" space value ("," space string ":" space value)* )? space "}"
+ root ::= "[" space (item ("," space item)*)? space "]"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
value ::= object | array | string | number | boolean | null
)"""
});
R"""(
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- root ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
+ root ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"minItems": 2
})""",
R"""(
- boolean ::= ("true" | "false") space
- root ::= "[" space boolean ("," space boolean)+ "]" space
+ boolean ::= ("true" | "false")
+ root ::= "[" space boolean ("," space boolean)+ space "]"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maxItems": 0
})""",
R"""(
- boolean ::= ("true" | "false") space
- root ::= "[" space "]" space
+ boolean ::= ("true" | "false")
+ root ::= "[" space space "]"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maxItems": 1
})""",
R"""(
- boolean ::= ("true" | "false") space
- root ::= "[" space boolean? "]" space
+ boolean ::= ("true" | "false")
+ root ::= "[" space boolean? space "]"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maxItems": 2
})""",
R"""(
- boolean ::= ("true" | "false") space
- root ::= "[" space (boolean ("," space boolean)?)? "]" space
+ boolean ::= ("true" | "false")
+ root ::= "[" space (boolean ("," space boolean)?)? space "]"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
})""",
R"""(
decimal-part ::= [0-9]{1,16}
- integer ::= ("-"? integral-part) space
+ integer ::= ("-"? integral-part)
integral-part ::= [0] | [1-9] [0-9]{0,15}
item ::= number | integer
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- root ::= "[" space item ("," space item){2,4} "]" space
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ root ::= "[" space item ("," space item){2,4} space "]"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maxItems": 5
})""",
R"""(
- item ::= ("-" ([0-9] | "1" [0-2]) | [0-9] | ([1-8] [0-9] | [9] [0-9]) | ([1] [0-9]{2} | [2] "0" [0-7])) space
- root ::= "[" space item ("," space item){2,4} "]" space
+ item ::= ("-" ([0-9] | "1" [0-2]) | [0-9] | ([1-8] [0-9] | [9] [0-9]) | ([1] [0-9]{2} | [2] "0" [0-7]))
+ root ::= "[" space item ("," space item){2,4} space "]"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"maxItems": 5
})""",
R"""(
- item ::= (([1] ([2-9]) | [2-9] [0-9]) | ([1] [0-9]{2} | [2] "0" [0-7])) space
- root ::= "[" space item ("," space item){2,4} "]" space
+ item ::= (([1] ([2-9]) | [2-9] [0-9]) | ([1] [0-9]{2} | [2] "0" [0-7]))
+ root ::= "[" space item ("," space item){2,4} space "]"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"pattern": "^abc?d*efg+(hij)?kl$"
})""",
R"""(
- root ::= "\"" ("ab" "c"? "d"* "ef" "g"+ ("hij")? "kl") "\"" space
+ root ::= "\"" ("ab" "c"? "d"* "ef" "g"+ ("hij")? "kl") "\""
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"pattern": "^\\[\\]\\{\\}\\(\\)\\|\\+\\*\\?$"
})""",
R"""(
- root ::= "\"" ("[]{}()|+*?") "\"" space
+ root ::= "\"" ("[]{}()|+*?") "\""
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"pattern": "^\"$"
})""",
R"""(
- root ::= "\"" ("\"") "\"" space
+ root ::= "\"" ("\"") "\""
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"pattern": "^A|B|C|D$"
})""",
R"""(
- root ::= "\"" ("A" | "B" | "C" | "D") "\"" space
+ root ::= "\"" ("A" | "B" | "C" | "D") "\""
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
})""",
R"""(
dot ::= [^\x0A\x0D]
- root ::= "\"" (("(" root-1{1,3} ")")? root-1{3,3} "-" root-1{4,4} " " "a"{3,5} "nd" dot dot dot) "\"" space
+ root ::= "\"" (("(" root-1{1,3} ")")? root-1{3,3} "-" root-1{4,4} " " "a"{3,5} "nd" dot dot dot) "\""
root-1 ::= [0-9]
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
b-kv ::= "\"b\"" space ":" space string
c-kv ::= "\"c\"" space ":" space string
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- root ::= "{" space b-kv "," space c-kv "," space a-kv "}" space
+ root ::= "{" space b-kv "," space c-kv "," space a-kv space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
)"""
});
R"""(
a-kv ::= "\"a\"" space ":" space string
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- root ::= "{" space (a-kv )? "}" space
+ root ::= "{" space (a-kv )? space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
)"""
});
b-rest ::= ( "," space c-kv )?
c-kv ::= "\"c\"" space ":" space string
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- root ::= "{" space (a-kv a-rest | b-kv b-rest | c-kv )? "}" space
+ root ::= "{" space (a-kv a-rest | b-kv b-rest | c-kv )? space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
)"""
});
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
d-kv ::= "\"d\"" space ":" space string
d-rest ::= ( "," space c-kv )?
- root ::= "{" space b-kv "," space a-kv ( "," space ( d-kv d-rest | c-kv ) )? "}" space
+ root ::= "{" space b-kv "," space a-kv ( "," space ( d-kv d-rest | c-kv ) )? space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
)"""
});
})""",
R"""(
additional-kv ::= string ":" space additional-value
- additional-value ::= "[" space (number ("," space number)*)? "]" space
+ additional-value ::= "[" space (number ("," space number)*)? space "]"
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- root ::= "{" space (additional-kv ( "," space additional-kv )* )? "}" space
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ root ::= "{" space (additional-kv ( "," space additional-kv )* )? space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
)"""
});
"additionalProperties": true
})""",
R"""(
- array ::= "[" space ( value ("," space value)* )? "]" space
- boolean ::= ("true" | "false") space
+ array ::= "[" space ( value ("," space value)* )? space "]"
+ boolean ::= ("true" | "false")
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- null ::= "null" space
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- object ::= "{" space ( string ":" space value ("," space string ":" space value)* )? "}" space
+ null ::= "null"
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ object ::= "{" space ( string ":" space value ("," space string ":" space value)* )? space "}"
root ::= object
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
value ::= object | array | string | number | boolean | null
)"""
});
"type": "object"
})""",
R"""(
- array ::= "[" space ( value ("," space value)* )? "]" space
- boolean ::= ("true" | "false") space
+ array ::= "[" space ( value ("," space value)* )? space "]"
+ boolean ::= ("true" | "false")
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- null ::= "null" space
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- object ::= "{" space ( string ":" space value ("," space string ":" space value)* )? "}" space
+ null ::= "null"
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ object ::= "{" space ( string ":" space value ("," space string ":" space value)* )? space "}"
root ::= object
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
value ::= object | array | string | number | boolean | null
)"""
});
"additionalProperties": false
})""",
R"""(
- root ::= "{" space "}" space
+ root ::= "{" space space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
})""",
R"""(
a-kv ::= "\"a\"" space ":" space number
- additional-k ::= ["] ( [a] char+ | [^"a] char* )? ["] space
+ additional-k ::= ["] ( [a] char+ | [^"a] char* )? ["]
additional-kv ::= additional-k ":" space string
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- root ::= "{" space a-kv ( "," space ( additional-kv ( "," space additional-kv )* ) )? "}" space
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ root ::= "{" space a-kv ( "," space ( additional-kv ( "," space additional-kv )* ) )? space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
)"""
});
R"""(
a-kv ::= "\"a\"" space ":" space number
a-rest ::= ( "," space additional-kv )*
- additional-k ::= ["] ( [a] char+ | [^"a] char* )? ["] space
+ additional-k ::= ["] ( [a] char+ | [^"a] char* )? ["]
additional-kv ::= additional-k ":" space number
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- root ::= "{" space (a-kv a-rest | additional-kv ( "," space additional-kv )* )? "}" space
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ root ::= "{" space (a-kv a-rest | additional-kv ( "," space additional-kv )* )? space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"additionalProperties": {"type": "number"}
})""",
R"""(
- additional-k ::= ["] ( [a] ([l] ([s] ([o] char+ | [^"o] char*) | [^"s] char*) | [n] ([d] char+ | [^"d] char*) | [^"ln] char*) | [^"a] char* )? ["] space
+ additional-k ::= ["] ( [a] ([l] ([s] ([o] char+ | [^"o] char*) | [^"s] char*) | [n] ([d] char+ | [^"d] char*) | [^"ln] char*) | [^"a] char* )? ["]
additional-kv ::= additional-k ":" space number
also-kv ::= "\"also\"" space ":" space number
also-rest ::= ( "," space additional-kv )*
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- root ::= "{" space and-kv ( "," space ( also-kv also-rest | additional-kv ( "," space additional-kv )* ) )? "}" space
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ root ::= "{" space and-kv ( "," space ( also-kv also-rest | additional-kv ( "," space additional-kv )* ) )? space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
-rest ::= ( "," space a-kv )? a-rest
a-kv ::= "\"a\"" space ":" space integer
a-rest ::= ( "," space additional-kv )*
- additional-k ::= ["] ( [a] char+ | [^"a] char* ) ["] space
+ additional-k ::= ["] ( [a] char+ | [^"a] char* ) ["]
additional-kv ::= additional-k ":" space integer
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- integer ::= ("-"? integral-part) space
+ integer ::= ("-"? integral-part)
integral-part ::= [0] | [1-9] [0-9]{0,15}
- root ::= ("-"? integral-part) space
- root0 ::= "{" space (-kv -rest | a-kv a-rest | additional-kv ( "," space additional-kv )* )? "}" space
+ root ::= ("-"? integral-part)
+ root0 ::= "{" space (-kv -rest | a-kv a-rest | additional-kv ( "," space additional-kv )* )? space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
a-rest ::= ( "," space aa-kv )? aa-rest
aa-kv ::= "\"aa\"" space ":" space integer
aa-rest ::= ( "," space additional-kv )*
- additional-k ::= ["] ( [a] ([a] char+ | [^"a] char*) | [^"a] char* )? ["] space
+ additional-k ::= ["] ( [a] ([a] char+ | [^"a] char*) | [^"a] char* )? ["]
additional-kv ::= additional-k ":" space integer
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- integer ::= ("-"? integral-part) space
+ integer ::= ("-"? integral-part)
integral-part ::= [0] | [1-9] [0-9]{0,15}
- root ::= "{" space (a-kv a-rest | aa-kv aa-rest | additional-kv ( "," space additional-kv )* )? "}" space
+ root ::= "{" space (a-kv a-rest | aa-kv aa-rest | additional-kv ( "," space additional-kv )* )? space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
ab-rest ::= ( "," space ac-kv )? ac-rest
ac-kv ::= "\"ac\"" space ":" space integer
ac-rest ::= ( "," space additional-kv )*
- additional-k ::= ["] ( [a] ([b] char+ | [c] char+ | [^"bc] char*) | [^"a] char* )? ["] space
+ additional-k ::= ["] ( [a] ([b] char+ | [c] char+ | [^"bc] char*) | [^"a] char* )? ["]
additional-kv ::= additional-k ":" space integer
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- integer ::= ("-"? integral-part) space
+ integer ::= ("-"? integral-part)
integral-part ::= [0] | [1-9] [0-9]{0,15}
- root ::= "{" space (ab-kv ab-rest | ac-kv ac-rest | additional-kv ( "," space additional-kv )* )? "}" space
+ root ::= "{" space (ab-kv ab-rest | ac-kv ac-rest | additional-kv ( "," space additional-kv )* )? space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
})""",
R"""(
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- ref-definitions-foo ::= "{" space ref-definitions-foo-a-kv "}" space
+ ref-definitions-foo ::= "{" space ref-definitions-foo-a-kv space "}"
ref-definitions-foo-a-kv ::= "\"a\"" space ":" space string
root ::= ref-definitions-foo
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
)"""
});
alternative-1 ::= ref-definitions-bar
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- ref-definitions-bar ::= "{" space (ref-definitions-bar-b-kv )? "}" space
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ ref-definitions-bar ::= "{" space (ref-definitions-bar-b-kv )? space "}"
ref-definitions-bar-b-kv ::= "\"b\"" space ":" space number
- ref-definitions-foo ::= "{" space (ref-definitions-foo-a-kv )? "}" space
+ ref-definitions-foo ::= "{" space (ref-definitions-foo-a-kv )? space "}"
ref-definitions-foo-a-kv ::= "\"a\"" space ":" space number
root ::= alternative-0 | alternative-1
space ::= | " " | "\n"{1,2} [ \t]{0,20}
b ::= b-0 | boolean
b-0 ::= string
b-kv ::= "\"b\"" space ":" space b
- boolean ::= ("true" | "false") space
+ boolean ::= ("true" | "false")
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- root ::= "{" space (a-kv a-rest | b-kv )? "}" space
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ root ::= "{" space (a-kv a-rest | b-kv )? space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
)"""
});
d-rest ::= ( "," space c-kv )?
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- root ::= "{" space a-kv "," space b-kv ( "," space ( d-kv d-rest | c-kv ) )? "}" space
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ root ::= "{" space a-kv "," space b-kv ( "," space ( d-kv d-rest | c-kv ) )? space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
}
})""",
R"""(
- root ::= ("\"a\"" | "\"b\"") space
+ root ::= ("\"a\"" | "\"b\"")
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
}
})""",
R"""(
- root ::= ("\"b\"" | "\"c\"") space
+ root ::= ("\"b\"" | "\"c\"")
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
R"""(
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- number- ::= "{" space number-number-kv "}" space
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ number- ::= "{" space number-number-kv space "}"
number-kv ::= "\"number\"" space ":" space number-
- number-number ::= "{" space number-number-root-kv "}" space
+ number-number ::= "{" space number-number-root-kv space "}"
number-number-kv ::= "\"number\"" space ":" space number-number
number-number-root-kv ::= "\"root\"" space ":" space number
- root ::= "{" space number-kv "}" space
+ root ::= "{" space number-kv space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"description only (no type) treated as unconstrained",
R"""({"description": "The 0-based index of the last line to be retrieved (inclusive). If None, read until the end of the file."})""",
R"""(
- array ::= "[" space ( value ("," space value)* )? "]" space
- boolean ::= ("true" | "false") space
+ array ::= "[" space ( value ("," space value)* )? space "]"
+ boolean ::= ("true" | "false")
char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
decimal-part ::= [0-9]{1,16}
integral-part ::= [0] | [1-9] [0-9]{0,15}
- null ::= "null" space
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- object ::= "{" space ( string ":" space value ("," space string ":" space value)* )? "}" space
+ null ::= "null"
+ number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)?
+ object ::= "{" space ( string ":" space value ("," space string ":" space value)* )? space "}"
root ::= value
space ::= | " " | "\n"{1,2} [ \t]{0,20}
- string ::= "\"" char* "\"" space
+ string ::= "\"" char* "\""
value ::= object | array | string | number | boolean | null
)"""
});
"type": "object"
})""",
R"""(
- code ::= "\" \\r \\n \\\" \\\\ \"" space
+ code ::= "\" \\r \\n \\\" \\\\ \""
code-kv ::= "\"code\"" space ":" space code
- root ::= "{" space code-kv "}" space
+ root ::= "{" space code-kv space "}"
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)"""
});
"pattern": "^(?:foo|bar)baz$"
})""",
R"""(
- root ::= "\"" (("foo" | "bar") "baz") "\"" space
+ root ::= "\"" (("foo" | "bar") "baz") "\""
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)""",
});
"pattern": "^(?:(?:ab)+c)?d$"
})""",
R"""(
- root ::= "\"" ((("ab")+ "c")? "d") "\"" space
+ root ::= "\"" ((("ab")+ "c")? "d") "\""
space ::= | " " | "\n"{1,2} [ \t]{0,20}
)""",
});