Files
cjk-autospace/rules/golden-vectors.schema.json
T

268 lines
8.2 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://juzhen.dev/schemas/golden-vectors.schema.json",
"title": "Juzhen shared rules golden vectors",
"type": "object",
"additionalProperties": false,
"required": [ "schemaVersion", "rulesetVersion", "vectors" ],
"properties": {
"$schema": { "type": "string" },
"schemaVersion": { "const": 1 },
"rulesetVersion": {
"type": "string",
"pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"
},
"vectors": {
"type": "array",
"minItems": 20,
"items": {
"oneOf": [
{ "$ref": "#/$defs/languageVector" },
{ "$ref": "#/$defs/punctuationClassVector" },
{ "$ref": "#/$defs/punctuationStyleVector" },
{ "$ref": "#/$defs/punctuationAdjacencyVector" },
{ "$ref": "#/$defs/spacingVector" },
{ "$ref": "#/$defs/ivsAtomVector" },
{ "$ref": "#/$defs/jinzeVector" },
{ "$ref": "#/$defs/orphanVector" }
]
}
}
},
"$defs": {
"id": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"punctuationClass": {
"enum": [ "stop", "pause", "open", "close", "middle", "liga" ]
},
"style": {
"enum": [ "quanjiao", "kaiming", "banjiao" ]
},
"atoms": {
"type": "array",
"minItems": 1,
"items": { "type": "string", "minLength": 1 }
},
"languageVector": {
"type": "object",
"additionalProperties": false,
"required": [ "id", "category", "input", "expected" ],
"properties": {
"id": { "$ref": "#/$defs/id" },
"category": { "const": "language-classification" },
"input": {
"type": "object",
"additionalProperties": false,
"required": [ "lang" ],
"properties": {
"lang": { "type": "string" }
}
},
"expected": {
"type": "object",
"additionalProperties": false,
"required": [ "langClass" ],
"properties": {
"langClass": { "enum": [ "zh-Hans", "zh-Hant", "ja", "other" ] }
}
}
}
},
"punctuationClassVector": {
"type": "object",
"additionalProperties": false,
"required": [ "id", "category", "input", "expected" ],
"properties": {
"id": { "$ref": "#/$defs/id" },
"category": { "const": "punctuation-classification" },
"input": {
"type": "object",
"additionalProperties": false,
"required": [ "character" ],
"properties": {
"character": { "type": "string", "minLength": 1 }
}
},
"expected": {
"type": "object",
"additionalProperties": false,
"required": [ "punctuationClass" ],
"properties": {
"punctuationClass": {
"oneOf": [ { "$ref": "#/$defs/punctuationClass" }, { "type": "null" } ]
}
}
}
}
},
"punctuationStyleVector": {
"type": "object",
"additionalProperties": false,
"required": [ "id", "category", "input", "expected" ],
"properties": {
"id": { "$ref": "#/$defs/id" },
"category": { "const": "punctuation-style" },
"input": {
"type": "object",
"additionalProperties": false,
"required": [ "style", "punctuationClass" ],
"properties": {
"style": { "$ref": "#/$defs/style" },
"punctuationClass": { "$ref": "#/$defs/punctuationClass" }
}
},
"expected": {
"type": "object",
"additionalProperties": false,
"required": [ "halfWidth" ],
"properties": {
"halfWidth": { "type": "boolean" }
}
}
}
},
"punctuationAdjacencyVector": {
"type": "object",
"additionalProperties": false,
"required": [ "id", "category", "input", "expected" ],
"properties": {
"id": { "$ref": "#/$defs/id" },
"category": { "const": "punctuation-adjacency" },
"input": {
"type": "object",
"additionalProperties": false,
"required": [ "left", "right" ],
"properties": {
"left": { "$ref": "#/$defs/punctuationClass" },
"right": { "$ref": "#/$defs/punctuationClass" }
}
},
"expected": {
"type": "object",
"additionalProperties": false,
"required": [ "squeezeLeft", "squeezeRight" ],
"properties": {
"squeezeLeft": { "type": "boolean" },
"squeezeRight": { "type": "boolean" }
}
}
}
},
"spacingVector": {
"type": "object",
"additionalProperties": false,
"required": [ "id", "category", "input", "expected" ],
"properties": {
"id": { "$ref": "#/$defs/id" },
"category": { "const": "spacing" },
"input": {
"type": "object",
"additionalProperties": false,
"required": [ "text" ],
"properties": {
"text": { "type": "string" }
}
},
"expected": {
"type": "object",
"additionalProperties": false,
"required": [ "managedGaps", "normalizedText" ],
"properties": {
"managedGaps": { "type": "integer", "minimum": 0 },
"normalizedText": { "type": "string" },
"gapEm": { "const": 0.25 },
"authorSpaceDisposition": {
"enum": [ "remove-and-use-managed-gap", "remove-without-gap" ]
}
}
}
}
},
"ivsAtomVector": {
"type": "object",
"additionalProperties": false,
"required": [ "id", "category", "input", "expected" ],
"properties": {
"id": { "$ref": "#/$defs/id" },
"category": { "const": "ivs-atom" },
"input": {
"type": "object",
"additionalProperties": false,
"required": [ "text" ],
"properties": {
"text": { "type": "string", "minLength": 1 }
}
},
"expected": {
"type": "object",
"additionalProperties": false,
"required": [ "atoms" ],
"properties": {
"atoms": { "$ref": "#/$defs/atoms" }
}
}
}
},
"jinzeVector": {
"type": "object",
"additionalProperties": false,
"required": [ "id", "category", "input", "expected" ],
"properties": {
"id": { "$ref": "#/$defs/id" },
"category": { "const": "jinze" },
"input": {
"type": "object",
"additionalProperties": false,
"required": [ "left", "right" ],
"properties": {
"left": { "type": "string", "minLength": 1 },
"right": { "type": "string", "minLength": 1 }
}
},
"expected": {
"type": "object",
"additionalProperties": false,
"required": [ "prohibitedBreak" ],
"properties": {
"prohibitedBreak": { "type": "boolean" },
"reason": { "enum": [ "before-stop", "before-close", "after-open" ] },
"atoms": { "$ref": "#/$defs/atoms" }
}
}
}
},
"orphanVector": {
"type": "object",
"additionalProperties": false,
"required": [ "id", "category", "input", "expected" ],
"properties": {
"id": { "$ref": "#/$defs/id" },
"category": { "const": "orphan" },
"input": {
"type": "object",
"additionalProperties": false,
"required": [ "text", "minimum" ],
"properties": {
"text": { "type": "string", "minLength": 1 },
"minimum": { "type": "integer", "minimum": 1 }
}
},
"expected": {
"type": "object",
"additionalProperties": false,
"required": [ "meaningfulCjkCount", "protectedSuffix" ],
"properties": {
"meaningfulCjkCount": { "type": "integer", "minimum": 0 },
"protectedSuffix": {
"oneOf": [ { "type": "string" }, { "type": "null" } ]
},
"atoms": { "$ref": "#/$defs/atoms" }
}
}
}
}
}
}