12e5b6d6dSopenharmony_ci// Copyright (C) 2018 and later: Unicode, Inc. and others.
22e5b6d6dSopenharmony_ci// License & terms of use: http://www.unicode.org/copyright.html
32e5b6d6dSopenharmony_ci
42e5b6d6dSopenharmony_ci{
52e5b6d6dSopenharmony_ci    "$id": "http://unicode.org/icu-filter-schema",
62e5b6d6dSopenharmony_ci    "$schema": "http://json-schema.org/draft-04/schema#",
72e5b6d6dSopenharmony_ci    "description": "JSON Schema for an ICU data filter file",
82e5b6d6dSopenharmony_ci    "type": "object",
92e5b6d6dSopenharmony_ci    "properties": {
102e5b6d6dSopenharmony_ci        "strategy": {
112e5b6d6dSopenharmony_ci            "type": "string",
122e5b6d6dSopenharmony_ci            "enum": ["additive", "subtractive"]
132e5b6d6dSopenharmony_ci        },
142e5b6d6dSopenharmony_ci        "localeFilter": { "$ref": "#/definitions/filter" },
152e5b6d6dSopenharmony_ci        "featureFilters": {
162e5b6d6dSopenharmony_ci            "type": "object",
172e5b6d6dSopenharmony_ci            "additionalProperties": {
182e5b6d6dSopenharmony_ci                "oneOf": [
192e5b6d6dSopenharmony_ci                    { "$ref": "#/definitions/filter" },
202e5b6d6dSopenharmony_ci                    {
212e5b6d6dSopenharmony_ci                        "type": "string",
222e5b6d6dSopenharmony_ci                        "enum": ["include", "exclude"]
232e5b6d6dSopenharmony_ci                    }
242e5b6d6dSopenharmony_ci                ]
252e5b6d6dSopenharmony_ci            }
262e5b6d6dSopenharmony_ci        },
272e5b6d6dSopenharmony_ci        "resourceFilters": {
282e5b6d6dSopenharmony_ci            "type": "array",
292e5b6d6dSopenharmony_ci            "items": {
302e5b6d6dSopenharmony_ci                "type": "object",
312e5b6d6dSopenharmony_ci                "properties": {
322e5b6d6dSopenharmony_ci                    "categories": {
332e5b6d6dSopenharmony_ci                        "type": "array",
342e5b6d6dSopenharmony_ci                        "items": { "type": "string" }
352e5b6d6dSopenharmony_ci                    },
362e5b6d6dSopenharmony_ci                    "files": { "$ref": "#/definitions/filter" },
372e5b6d6dSopenharmony_ci                    "rules": {
382e5b6d6dSopenharmony_ci                        "type": "array",
392e5b6d6dSopenharmony_ci                        "items": {
402e5b6d6dSopenharmony_ci                            "type": "string",
412e5b6d6dSopenharmony_ci                            "pattern": "^[+-]/[\\S]*$"
422e5b6d6dSopenharmony_ci                        }
432e5b6d6dSopenharmony_ci                    }
442e5b6d6dSopenharmony_ci                },
452e5b6d6dSopenharmony_ci                "required": ["categories", "rules"],
462e5b6d6dSopenharmony_ci                "additionalProperties": false
472e5b6d6dSopenharmony_ci            }
482e5b6d6dSopenharmony_ci        },
492e5b6d6dSopenharmony_ci        "fileReplacements": {
502e5b6d6dSopenharmony_ci            "type": "object",
512e5b6d6dSopenharmony_ci            "properties": {
522e5b6d6dSopenharmony_ci                "directory": {
532e5b6d6dSopenharmony_ci                    "type": "string",
542e5b6d6dSopenharmony_ci                    "pattern": "^(\\$SRC|\\$FILTERS|\\$CWD|/$|/[^/]+)(/[^/]+)*$"
552e5b6d6dSopenharmony_ci                },
562e5b6d6dSopenharmony_ci                "replacements": {
572e5b6d6dSopenharmony_ci                    "type": "array",
582e5b6d6dSopenharmony_ci                    "items": {
592e5b6d6dSopenharmony_ci                        "oneOf": [
602e5b6d6dSopenharmony_ci                            { "type": "string" },
612e5b6d6dSopenharmony_ci                            {
622e5b6d6dSopenharmony_ci                                "type": "object",
632e5b6d6dSopenharmony_ci                                "properties": {
642e5b6d6dSopenharmony_ci                                    "src": { "type": "string" },
652e5b6d6dSopenharmony_ci                                    "dest": { "type": "string" }
662e5b6d6dSopenharmony_ci                                },
672e5b6d6dSopenharmony_ci                                "additionalProperties": false,
682e5b6d6dSopenharmony_ci                                "required": ["src", "dest"]
692e5b6d6dSopenharmony_ci                            }
702e5b6d6dSopenharmony_ci                        ]
712e5b6d6dSopenharmony_ci                    }
722e5b6d6dSopenharmony_ci                }
732e5b6d6dSopenharmony_ci            },
742e5b6d6dSopenharmony_ci            "additionalProperties": false,
752e5b6d6dSopenharmony_ci            "required": ["directory", "replacements"]
762e5b6d6dSopenharmony_ci        },
772e5b6d6dSopenharmony_ci        "collationUCAData": {
782e5b6d6dSopenharmony_ci            "type": "string",
792e5b6d6dSopenharmony_ci            "enum": ["unihan", "implicithan"]
802e5b6d6dSopenharmony_ci        },
812e5b6d6dSopenharmony_ci        "usePoolBundle": {
822e5b6d6dSopenharmony_ci            "type": "boolean"
832e5b6d6dSopenharmony_ci        }
842e5b6d6dSopenharmony_ci    },
852e5b6d6dSopenharmony_ci    "additionalProperties": false,
862e5b6d6dSopenharmony_ci    "definitions": {
872e5b6d6dSopenharmony_ci        "filter": {
882e5b6d6dSopenharmony_ci            "type": "object",
892e5b6d6dSopenharmony_ci            "oneOf": [
902e5b6d6dSopenharmony_ci                {
912e5b6d6dSopenharmony_ci                    "properties": {
922e5b6d6dSopenharmony_ci                        "filterType": {
932e5b6d6dSopenharmony_ci                            "$ref": "#/definitions/includeExcludeFilterTypes"
942e5b6d6dSopenharmony_ci                        },
952e5b6d6dSopenharmony_ci                        "whitelist": { "$ref": "#/definitions/stringList" }
962e5b6d6dSopenharmony_ci                    },
972e5b6d6dSopenharmony_ci                    "required": ["whitelist"],
982e5b6d6dSopenharmony_ci                    "additionalProperties": false
992e5b6d6dSopenharmony_ci                },
1002e5b6d6dSopenharmony_ci                {
1012e5b6d6dSopenharmony_ci                    "properties": {
1022e5b6d6dSopenharmony_ci                        "filterType": {
1032e5b6d6dSopenharmony_ci                            "$ref": "#/definitions/includeExcludeFilterTypes"
1042e5b6d6dSopenharmony_ci                        },
1052e5b6d6dSopenharmony_ci                        "blacklist": { "$ref": "#/definitions/stringList" }
1062e5b6d6dSopenharmony_ci                    },
1072e5b6d6dSopenharmony_ci                    "required": ["blacklist"],
1082e5b6d6dSopenharmony_ci                    "additionalProperties": false
1092e5b6d6dSopenharmony_ci                },
1102e5b6d6dSopenharmony_ci                {
1112e5b6d6dSopenharmony_ci                    "properties": {
1122e5b6d6dSopenharmony_ci                        "filterType": {
1132e5b6d6dSopenharmony_ci                            "$ref": "#/definitions/includeExcludeFilterTypes"
1142e5b6d6dSopenharmony_ci                        },
1152e5b6d6dSopenharmony_ci                        "includelist": { "$ref": "#/definitions/stringList" }
1162e5b6d6dSopenharmony_ci                    },
1172e5b6d6dSopenharmony_ci                    "required": ["includelist"],
1182e5b6d6dSopenharmony_ci                    "additionalProperties": false
1192e5b6d6dSopenharmony_ci                },
1202e5b6d6dSopenharmony_ci                {
1212e5b6d6dSopenharmony_ci                    "properties": {
1222e5b6d6dSopenharmony_ci                        "filterType": {
1232e5b6d6dSopenharmony_ci                            "$ref": "#/definitions/includeExcludeFilterTypes"
1242e5b6d6dSopenharmony_ci                        },
1252e5b6d6dSopenharmony_ci                        "excludelist": { "$ref": "#/definitions/stringList" }
1262e5b6d6dSopenharmony_ci                    },
1272e5b6d6dSopenharmony_ci                    "required": ["excludelist"],
1282e5b6d6dSopenharmony_ci                    "additionalProperties": false
1292e5b6d6dSopenharmony_ci                },
1302e5b6d6dSopenharmony_ci                {
1312e5b6d6dSopenharmony_ci                    "properties": {
1322e5b6d6dSopenharmony_ci                        "filterType": {
1332e5b6d6dSopenharmony_ci                            "type": "string",
1342e5b6d6dSopenharmony_ci                            "enum": ["exclude"]
1352e5b6d6dSopenharmony_ci                        }
1362e5b6d6dSopenharmony_ci                    },
1372e5b6d6dSopenharmony_ci                    "required": ["filterType"],
1382e5b6d6dSopenharmony_ci                    "additionalProperties": false
1392e5b6d6dSopenharmony_ci                },
1402e5b6d6dSopenharmony_ci                {
1412e5b6d6dSopenharmony_ci                    "properties": {
1422e5b6d6dSopenharmony_ci                        "filterType": {
1432e5b6d6dSopenharmony_ci                            "type": "string",
1442e5b6d6dSopenharmony_ci                            "enum": ["locale"]
1452e5b6d6dSopenharmony_ci                        },
1462e5b6d6dSopenharmony_ci                        "includeChildren": {
1472e5b6d6dSopenharmony_ci                            "type": "boolean"
1482e5b6d6dSopenharmony_ci                        },
1492e5b6d6dSopenharmony_ci                        "includeScripts": {
1502e5b6d6dSopenharmony_ci                            "type": "boolean"
1512e5b6d6dSopenharmony_ci                        },
1522e5b6d6dSopenharmony_ci                        "whitelist": { "$ref": "#/definitions/stringList" }
1532e5b6d6dSopenharmony_ci                    },
1542e5b6d6dSopenharmony_ci                    "required": ["filterType", "whitelist"],
1552e5b6d6dSopenharmony_ci                    "additionalProperties": false
1562e5b6d6dSopenharmony_ci                },
1572e5b6d6dSopenharmony_ci                {
1582e5b6d6dSopenharmony_ci                    "properties": {
1592e5b6d6dSopenharmony_ci                        "filterType": {
1602e5b6d6dSopenharmony_ci                            "type": "string",
1612e5b6d6dSopenharmony_ci                            "enum": ["locale"]
1622e5b6d6dSopenharmony_ci                        },
1632e5b6d6dSopenharmony_ci                        "includeChildren": {
1642e5b6d6dSopenharmony_ci                            "type": "boolean"
1652e5b6d6dSopenharmony_ci                        },
1662e5b6d6dSopenharmony_ci                        "includeScripts": {
1672e5b6d6dSopenharmony_ci                            "type": "boolean"
1682e5b6d6dSopenharmony_ci                        },
1692e5b6d6dSopenharmony_ci                        "includelist": { "$ref": "#/definitions/stringList" }
1702e5b6d6dSopenharmony_ci                    },
1712e5b6d6dSopenharmony_ci                    "required": ["filterType", "includelist"],
1722e5b6d6dSopenharmony_ci                    "additionalProperties": false
1732e5b6d6dSopenharmony_ci                },
1742e5b6d6dSopenharmony_ci                {
1752e5b6d6dSopenharmony_ci                    "properties": {
1762e5b6d6dSopenharmony_ci                        "filterType": {
1772e5b6d6dSopenharmony_ci                            "type": "string",
1782e5b6d6dSopenharmony_ci                            "enum": ["union"]
1792e5b6d6dSopenharmony_ci                        },
1802e5b6d6dSopenharmony_ci                        "unionOf": {
1812e5b6d6dSopenharmony_ci                            "type": "array",
1822e5b6d6dSopenharmony_ci                            "items": { "$ref": "#/definitions/filter" }
1832e5b6d6dSopenharmony_ci                        }
1842e5b6d6dSopenharmony_ci                    },
1852e5b6d6dSopenharmony_ci                    "required": ["filterType", "unionOf"],
1862e5b6d6dSopenharmony_ci                    "additionalProperties": false
1872e5b6d6dSopenharmony_ci                }
1882e5b6d6dSopenharmony_ci            ]
1892e5b6d6dSopenharmony_ci        },
1902e5b6d6dSopenharmony_ci        "includeExcludeFilterTypes": {
1912e5b6d6dSopenharmony_ci            "type": "string",
1922e5b6d6dSopenharmony_ci            "enum": [
1932e5b6d6dSopenharmony_ci                "language",
1942e5b6d6dSopenharmony_ci                "regex"
1952e5b6d6dSopenharmony_ci            ]
1962e5b6d6dSopenharmony_ci        },
1972e5b6d6dSopenharmony_ci        "stringList": {
1982e5b6d6dSopenharmony_ci            "type": "array",
1992e5b6d6dSopenharmony_ci            "items": {
2002e5b6d6dSopenharmony_ci                "type": "string"
2012e5b6d6dSopenharmony_ci            },
2022e5b6d6dSopenharmony_ci            "minItems": 1,
2032e5b6d6dSopenharmony_ci            "uniqueItems": true
2042e5b6d6dSopenharmony_ci        }
2052e5b6d6dSopenharmony_ci    }
2062e5b6d6dSopenharmony_ci}
207