// Generated by contracts/punctuation/generate.py; edit policy.json instead. #pragma once #include #include namespace metasequoia::punctuation_contract { inline constexpr int version = 1; struct Mapping { char input; const char *output; }; struct AlternatingMapping { char input; const char *opening; const char *closing; }; inline constexpr std::array simple = {{ {',', ","}, {'.', "。"}, {'?', "?"}, {'!', "!"}, {';', ";"}, {':', ":"}, {'(', "("}, {')', ")"}, {'[', "【"}, {']', "】"}, {'\\', "、"}, {'`', "·"}, {'$', "¥"}, {'^', "……"}, {'_', "——"}, }}; inline constexpr std::array alternating = {{ {'"', "“", "”"}, {'\'', "‘", "’"}, }}; inline constexpr char nested_opening_input = '<'; inline constexpr char nested_closing_input = '>'; inline constexpr char nested_opening[] = "《"; inline constexpr char nested_opening_inner[] = "〈"; inline constexpr char nested_closing[] = "》"; inline constexpr char nested_closing_inner[] = "〉"; constexpr bool is_supported(char input) { for (const auto &mapping : simple) if (mapping.input == input) return true; for (const auto &mapping : alternating) if (mapping.input == input) return true; return input == nested_opening_input || input == nested_closing_input; } constexpr const char *simple_output(char input) { for (const auto &mapping : simple) if (mapping.input == input) return mapping.output; return nullptr; } constexpr const AlternatingMapping *alternating_mapping(char input) { for (const auto &mapping : alternating) if (mapping.input == input) return &mapping; return nullptr; } } // namespace metasequoia::punctuation_contract