/* * Copyright (C) 2020 Linux Studio Plugins Project * (C) 2020 Vladimir Sadovnikov * * This file is part of lsp-plugins * Created on: 26 окт. 2019 г. * * lsp-plugins is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * lsp-plugins is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with lsp-plugins. If not, see . */ #include namespace lsp { namespace xml { bool is_valid_char(lsp_swchar_t c, xml_version_t version) { if (version == XML_VERSION_1_0) { if ((c >= 0x20) && (c <= 0xd7ff)) return true; if ((c == 0x9) || (c == 0xa) || (c == 0xd)) return true; } else { if ((c >= 1) && (c <= 0xd7ff)) return true; } if ((c >= 0xe000) && (c <= 0xfffd)) return true; return (c >= 0x10000) && (c <= 0x10ffff); } bool is_name_first(lsp_swchar_t c) { if ((c >= 'a') && (c <= 'z')) return true; if ((c >= 'A') && (c <= 'Z')) return true; if ((c == ':') || (c == '_')) return true; if ((c >= 0xc0) && (c <= 0xd6)) return true; if ((c >= 0xd8) && (c <= 0xf6)) return true; if ((c >= 0xf8) && (c <= 0x2ff)) return true; if ((c >= 0x370) && (c <= 0x37d)) return true; if ((c >= 0x37f) && (c <= 0x1fff)) return true; if ((c >= 0x200c) && (c <= 0x200d)) return true; if ((c >= 0x2070) && (c <= 0x218f)) return true; if ((c >= 0x2c00) && (c <= 0x2fef)) return true; if ((c >= 0x3001) && (c <= 0xd7ff)) return true; if ((c >= 0xf900) && (c <= 0xfdcf)) return true; if ((c >= 0xfdf0) && (c <= 0xfffd)) return true; if ((c >= 0x10000) && (c <= 0xeffff)) return true; return false; } bool is_name_next(lsp_swchar_t c) { if ((c >= '0') && (c <= '9')) return true; if ((c == '-') || (c == '.') || (c == 0xb7)) return true; if (is_name_first(c)) return true; if ((c >= 0x300) && (c <= 0x36f)) return true; if ((c >= 0x203f) && (c <= 0x2040)) return true; return false; } bool is_whitespace(lsp_swchar_t c) { switch (c) { case 0x20: case 0x09: case 0x0d: case 0x0a: return true; } return false; } bool is_pubid_char(lsp_swchar_t c) { if ((c >= 'a') && (c <= 'z')) return true; if ((c >= 'A') && (c <= 'Z')) return true; if ((c >= '0') && (c <= '9')) return true; switch (c) { case 0x20: case 0x0d: case 0x0a: case '\'': case '-': case '(': case ')': case '+': case ',': case '.': case '/': case ':': case '=': case '?': case ';': case '!': case '*': case '#': case '@': case '$': case '_': case '%': return true; } return false; } bool is_restricted_char(lsp_swchar_t c, xml_version_t version) { if (version <= XML_VERSION_1_0) return false; if ((c >= 0x01) && (c <= 0x08)) return true; if ((c >= 0x0b) && (c <= 0x0c)) return true; if ((c >= 0x0e) && (c <= 0x1f)) return true; if ((c >= 0x7f) && (c <= 0x84)) return true; if ((c >= 0x86) && (c <= 0x9f)) return true; return false; } bool is_encoding_first(lsp_swchar_t c) { if ((c >= 'a') && (c <= 'z')) return true; if ((c >= 'A') && (c <= 'Z')) return true; return false; } bool is_encoding_next(lsp_swchar_t c) { if (is_encoding_first(c)) return true; if ((c >= '0') && (c <= '9')) return true; return ((c == '_') || (c == '.') || (c == '-')); } } }