From 50083503cf581fde0a664b4a41b3754ea3f05f79 Mon Sep 17 00:00:00 2001 From: pupbrained Date: Sun, 16 Jun 2024 00:13:15 -0400 Subject: [PATCH] blwegh --- .clang-format | 8 +- .clang-tidy | 1 + include/ctre.hpp | 6956 +++++------ include/rfl/AddStructName.hpp | 8 +- include/rfl/AllOf.hpp | 7 +- include/rfl/AnyOf.hpp | 20 +- include/rfl/Attribute.hpp | 30 +- include/rfl/Box.hpp | 7 +- include/rfl/Description.hpp | 44 +- include/rfl/Field.hpp | 30 +- include/rfl/Flatten.hpp | 15 +- include/rfl/Literal.hpp | 46 +- include/rfl/MetaField.hpp | 3 +- include/rfl/NamedTuple.hpp | 258 +- include/rfl/OneOf.hpp | 21 +- include/rfl/PatternValidator.hpp | 6 +- include/rfl/Processors.hpp | 7 +- include/rfl/Ref.hpp | 7 +- include/rfl/Rename.hpp | 30 +- include/rfl/Result.hpp | 56 +- include/rfl/SnakeCaseToCamelCase.hpp | 8 +- include/rfl/SnakeCaseToPascalCase.hpp | 8 +- include/rfl/TaggedUnion.hpp | 85 +- include/rfl/Timestamp.hpp | 3 +- include/rfl/Validator.hpp | 44 +- include/rfl/Variant.hpp | 28 +- include/rfl/as.hpp | 6 +- include/rfl/bson/Parser.hpp | 17 +- include/rfl/bson/Reader.hpp | 46 +- include/rfl/bson/Writer.hpp | 127 +- include/rfl/bson/load.hpp | 4 +- include/rfl/bson/read.hpp | 2 +- include/rfl/bson/write.hpp | 24 +- include/rfl/cbor/Parser.hpp | 35 +- include/rfl/cbor/Reader.hpp | 50 +- include/rfl/cbor/Writer.hpp | 52 +- include/rfl/cbor/load.hpp | 4 +- include/rfl/cbor/read.hpp | 9 +- include/rfl/cbor/write.hpp | 25 +- include/rfl/comparisons.hpp | 82 +- include/rfl/define_literal.hpp | 3 +- include/rfl/define_named_tuple.hpp | 3 +- include/rfl/define_tagged_union.hpp | 4 +- include/rfl/enums.hpp | 22 +- include/rfl/extract_discriminators.hpp | 3 +- include/rfl/field_names_t.hpp | 4 +- include/rfl/flexbuf/Reader.hpp | 55 +- include/rfl/flexbuf/Writer.hpp | 65 +- include/rfl/flexbuf/load.hpp | 4 +- include/rfl/flexbuf/read.hpp | 2 +- include/rfl/flexbuf/write.hpp | 4 +- include/rfl/from_named_tuple.hpp | 11 +- include/rfl/get.hpp | 4 +- include/rfl/internal/Field.hpp | 3 +- include/rfl/internal/Getter.hpp | 52 +- include/rfl/internal/Memoization.hpp | 8 +- include/rfl/internal/Skip.hpp | 37 +- include/rfl/internal/StringLiteral.hpp | 18 +- include/rfl/internal/VisitTree.hpp | 3 +- .../internal/bind_fake_object_to_tuple.hpp | 10272 ++++++++-------- include/rfl/internal/bind_to_tuple.hpp | 10200 ++++++++------- .../copy_flattened_tuple_to_named_tuple.hpp | 17 +- include/rfl/internal/define_literal.hpp | 14 +- include/rfl/internal/define_named_tuple.hpp | 14 +- include/rfl/internal/define_tagged_union.hpp | 62 +- include/rfl/internal/define_variant.hpp | 12 +- include/rfl/internal/enums/Names.hpp | 86 +- .../rfl/internal/enums/StringConverter.hpp | 31 +- include/rfl/internal/enums/get_enum_names.hpp | 61 +- include/rfl/internal/enums/is_flag_enum.hpp | 7 +- include/rfl/internal/enums/is_scoped_enum.hpp | 5 +- .../rfl/internal/extract_discriminators.hpp | 7 +- include/rfl/internal/field_tuple_t.hpp | 3 +- include/rfl/internal/field_type.hpp | 33 +- include/rfl/internal/find_index.hpp | 3 +- .../rfl/internal/flattened_ptr_tuple_t.hpp | 4 +- include/rfl/internal/flattened_tuple_t.hpp | 3 +- include/rfl/internal/get_field_names.hpp | 33 +- include/rfl/internal/get_meta_fields.hpp | 12 +- include/rfl/internal/get_type_name.hpp | 18 +- include/rfl/internal/has_fields.hpp | 16 +- .../rfl/internal/has_reflection_method_v.hpp | 6 +- .../rfl/internal/has_reflection_type_v.hpp | 3 +- include/rfl/internal/has_tag_v.hpp | 3 +- .../rfl/internal/has_to_class_method_v.hpp | 6 +- include/rfl/internal/is_array.hpp | 3 +- include/rfl/internal/is_attribute.hpp | 2 +- include/rfl/internal/is_basic_type.hpp | 9 +- include/rfl/internal/is_description.hpp | 2 +- include/rfl/internal/is_field.hpp | 3 +- include/rfl/internal/is_flatten_field.hpp | 2 +- include/rfl/internal/is_literal.hpp | 3 +- include/rfl/internal/is_named_tuple.hpp | 2 +- include/rfl/internal/is_no_optionals_v.hpp | 2 +- include/rfl/internal/is_pattern.hpp | 3 +- include/rfl/internal/is_rename.hpp | 3 +- include/rfl/internal/is_skip.hpp | 6 +- include/rfl/internal/is_validator.hpp | 2 +- include/rfl/internal/is_variant.hpp | 3 +- include/rfl/internal/make_tag.hpp | 6 +- .../internal/move_and_flatten_field_tuple.hpp | 12 +- .../move_field_tuple_to_named_tuple.hpp | 3 +- .../rfl/internal/move_from_named_tuple.hpp | 50 +- include/rfl/internal/move_from_tuple.hpp | 58 +- .../rfl/internal/no_duplicate_field_names.hpp | 6 +- .../rfl/internal/nt_to_ptr_named_tuple.hpp | 9 +- include/rfl/internal/num_fields.hpp | 64 +- include/rfl/internal/processed_t.hpp | 5 +- include/rfl/internal/ptr_named_tuple_t.hpp | 3 +- include/rfl/internal/remove_fields.hpp | 74 +- include/rfl/internal/remove_namespaces.hpp | 2 +- include/rfl/internal/remove_ptrs_tup.hpp | 3 +- include/rfl/internal/strings/join.hpp | 10 +- include/rfl/internal/strings/replace_all.hpp | 7 +- include/rfl/internal/tag_t.hpp | 3 +- .../rfl/internal/to_flattened_ptr_tuple.hpp | 15 +- include/rfl/internal/to_ptr_field_tuple.hpp | 2 +- include/rfl/internal/to_ptr_named_tuple.hpp | 13 +- include/rfl/internal/to_std_array.hpp | 21 +- include/rfl/internal/transform_snake_case.hpp | 20 +- include/rfl/internal/wrap_in_fields.hpp | 23 +- include/rfl/io/load_string.hpp | 10 +- include/rfl/io/save_bytes.hpp | 7 +- include/rfl/io/save_string.hpp | 7 +- include/rfl/json/Reader.hpp | 29 +- include/rfl/json/Writer.hpp | 65 +- include/rfl/json/load.hpp | 4 +- include/rfl/json/read.hpp | 11 +- include/rfl/json/save.hpp | 10 +- include/rfl/json/schema/JSONSchema.hpp | 7 +- include/rfl/json/schema/Type.hpp | 40 +- include/rfl/json/to_schema.hpp | 216 +- include/rfl/json/write.hpp | 15 +- include/rfl/make_named_tuple.hpp | 4 +- include/rfl/msgpack/Parser.hpp | 42 +- include/rfl/msgpack/Reader.hpp | 50 +- include/rfl/msgpack/Writer.hpp | 47 +- include/rfl/msgpack/load.hpp | 4 +- include/rfl/msgpack/read.hpp | 3 +- include/rfl/named_tuple_t.hpp | 12 +- include/rfl/parsing/ArrayReader.hpp | 28 +- include/rfl/parsing/CustomParser.hpp | 27 +- include/rfl/parsing/FieldVariantParser.hpp | 43 +- include/rfl/parsing/FieldVariantReader.hpp | 35 +- include/rfl/parsing/IsReader.hpp | 39 +- include/rfl/parsing/IsWriter.hpp | 48 +- include/rfl/parsing/MapParser.hpp | 66 +- include/rfl/parsing/MapReader.hpp | 44 +- include/rfl/parsing/NamedTupleParser.hpp | 114 +- include/rfl/parsing/Parent.hpp | 16 +- include/rfl/parsing/Parser_array.hpp | 42 +- include/rfl/parsing/Parser_box.hpp | 28 +- include/rfl/parsing/Parser_c_array.hpp | 19 +- include/rfl/parsing/Parser_default.hpp | 125 +- include/rfl/parsing/Parser_map_like.hpp | 8 +- include/rfl/parsing/Parser_named_tuple.hpp | 14 +- include/rfl/parsing/Parser_optional.hpp | 28 +- include/rfl/parsing/Parser_pair.hpp | 40 +- include/rfl/parsing/Parser_ptr.hpp | 24 +- include/rfl/parsing/Parser_ref.hpp | 28 +- .../rfl/parsing/Parser_reference_wrapper.hpp | 30 +- include/rfl/parsing/Parser_rename.hpp | 39 +- include/rfl/parsing/Parser_result.hpp | 24 +- include/rfl/parsing/Parser_rfl_array.hpp | 13 +- include/rfl/parsing/Parser_rfl_variant.hpp | 35 +- include/rfl/parsing/Parser_shared_ptr.hpp | 31 +- include/rfl/parsing/Parser_skip.hpp | 69 +- include/rfl/parsing/Parser_string_view.hpp | 25 +- include/rfl/parsing/Parser_tagged_union.hpp | 118 +- include/rfl/parsing/Parser_tuple.hpp | 14 +- include/rfl/parsing/Parser_unique_ptr.hpp | 32 +- include/rfl/parsing/Parser_variant.hpp | 54 +- include/rfl/parsing/Parser_vector_like.hpp | 33 +- include/rfl/parsing/Parser_wstring.hpp | 13 +- include/rfl/parsing/TupleParser.hpp | 68 +- include/rfl/parsing/TupleReader.hpp | 56 +- include/rfl/parsing/VectorParser.hpp | 51 +- include/rfl/parsing/VectorReader.hpp | 10 +- include/rfl/parsing/ViewReader.hpp | 80 +- include/rfl/parsing/is_map_like.hpp | 2 +- .../rfl/parsing/is_map_like_not_multimap.hpp | 3 +- include/rfl/parsing/is_required.hpp | 9 +- include/rfl/parsing/is_set_like.hpp | 2 +- .../rfl/parsing/is_tagged_union_wrapper.hpp | 13 +- include/rfl/parsing/is_vector_like.hpp | 2 +- include/rfl/parsing/is_view_reader.hpp | 5 +- include/rfl/parsing/schema/Type.hpp | 40 +- include/rfl/parsing/schema/ValidationType.hpp | 22 +- include/rfl/parsing/schema/make.hpp | 4 +- include/rfl/parsing/supports_attributes.hpp | 22 +- .../rfl/parsing/to_single_error_message.hpp | 13 +- include/rfl/patterns.hpp | 22 +- include/rfl/remove_fields.hpp | 4 +- include/rfl/replace.hpp | 24 +- include/rfl/toml/Reader.hpp | 37 +- include/rfl/toml/Writer.hpp | 59 +- include/rfl/toml/load.hpp | 4 +- include/rfl/toml/read.hpp | 6 +- include/rfl/visit.hpp | 22 +- include/rfl/xml/Parser.hpp | 21 +- include/rfl/xml/Reader.hpp | 79 +- include/rfl/xml/Writer.hpp | 96 +- include/rfl/xml/load.hpp | 4 +- include/rfl/xml/read.hpp | 11 +- include/rfl/xml/save.hpp | 4 +- include/rfl/xml/write.hpp | 36 +- include/rfl/yaml/Reader.hpp | 33 +- include/rfl/yaml/Writer.hpp | 65 +- include/rfl/yaml/load.hpp | 4 +- include/rfl/yaml/read.hpp | 9 +- include/rfl/yaml/write.hpp | 8 +- include/util/macros.h | 22 +- include/util/numtypes.h | 107 +- include/util/result.h | 162 +- include/yyjson.h | 2267 ++-- meson.build | 28 +- src/config/config.cpp | 45 +- src/config/config.h | 30 +- src/config/weather.cpp | 57 +- src/config/weather.h | 17 +- src/main.cpp | 4 +- src/os/linux.cpp | 53 +- src/os/macos.cpp | 3 +- src/os/macos/bridge.mm | 55 +- 224 files changed, 16150 insertions(+), 19488 deletions(-) diff --git a/.clang-format b/.clang-format index 2093ef7..dcb75a6 100644 --- a/.clang-format +++ b/.clang-format @@ -5,18 +5,20 @@ AlignConsecutiveDeclarations: true AllowShortBlocksOnASingleLine: Always AllowShortCompoundRequirementOnASingleLine: true AllowShortEnumsOnASingleLine: true -AllowShortFunctionsOnASingleLine: true +AllowShortFunctionsOnASingleLine: All AllowShortLoopsOnASingleLine: true BasedOnStyle: Chromium BinPackArguments: false BinPackParameters: false ColumnLimit: 100 +ConstructorInitializerIndentWidth: 2 +ContinuationIndentWidth: 2 +Cpp11BracedListStyle: false FixNamespaceComments: false IndentAccessModifiers: false IndentExternBlock: Indent -IndentPPDirectives: BeforeHash +IndentWidth: 2 NamespaceIndentation: All -SkipMacroDefinitionBody: true SpaceBeforeCpp11BracedList: true SpacesBeforeTrailingComments: 1 diff --git a/.clang-tidy b/.clang-tidy index 9518fbd..7a11fae 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,3 +1,4 @@ +# noinspection SpellCheckingInspection Checks: > *, -abseil-*, diff --git a/include/ctre.hpp b/include/ctre.hpp index 132ee4a..5dfda90 100644 --- a/include/ctre.hpp +++ b/include/ctre.hpp @@ -246,27 +246,24 @@ namespace ctll { uint8_t length; }; - constexpr length_value_t length_and_value_of_utf8_code_point( - uint8_t first_unit - ) noexcept { + constexpr length_value_t length_and_value_of_utf8_code_point(uint8_t first_unit) noexcept { if ((first_unit & 0b1000'0000) == 0b0000'0000) - return {static_cast(first_unit), 1}; + return { static_cast(first_unit), 1 }; else if ((first_unit & 0b1110'0000) == 0b1100'0000) - return {static_cast(first_unit & 0b0001'1111), 2}; + return { static_cast(first_unit & 0b0001'1111), 2 }; else if ((first_unit & 0b1111'0000) == 0b1110'0000) - return {static_cast(first_unit & 0b0000'1111), 3}; + return { static_cast(first_unit & 0b0000'1111), 3 }; else if ((first_unit & 0b1111'1000) == 0b1111'0000) - return {static_cast(first_unit & 0b0000'0111), 4}; + return { static_cast(first_unit & 0b0000'0111), 4 }; else if ((first_unit & 0b1111'1100) == 0b1111'1000) - return {static_cast(first_unit & 0b0000'0011), 5}; + return { static_cast(first_unit & 0b0000'0011), 5 }; else if ((first_unit & 0b1111'1100) == 0b1111'1100) - return {static_cast(first_unit & 0b0000'0001), 6}; + return { static_cast(first_unit & 0b0000'0001), 6 }; else - return {0, 0}; + return { 0, 0 }; } - constexpr char32_t - value_of_trailing_utf8_code_point(uint8_t unit, bool& correct) noexcept { + constexpr char32_t value_of_trailing_utf8_code_point(uint8_t unit, bool& correct) noexcept { if ((unit & 0b1100'0000) == 0b1000'0000) return unit & 0b0011'1111; else { @@ -275,13 +272,11 @@ namespace ctll { } } - constexpr length_value_t length_and_value_of_utf16_code_point( - uint16_t first_unit - ) noexcept { + constexpr length_value_t length_and_value_of_utf16_code_point(uint16_t first_unit) noexcept { if ((first_unit & 0b1111110000000000) == 0b1101'1000'0000'0000) - return {static_cast(first_unit & 0b0000001111111111), 2}; + return { static_cast(first_unit & 0b0000001111111111), 2 }; else - return {first_unit, 1}; + return { first_unit, 1 }; } struct construct_from_pointer_t {}; @@ -291,47 +286,43 @@ namespace ctll { template struct fixed_string { char32_t content[N] = {}; - size_t real_size {0}; - bool correct_flag {true}; + size_t real_size { 0 }; + bool correct_flag { true }; template constexpr fixed_string(construct_from_pointer_t, const T* input) noexcept { if constexpr (std::is_same_v) { #ifdef CTRE_STRING_IS_UTF8 - size_t out {0}; - for (size_t i {0}; i < N; ++i) { - if ((i == (N - 1)) && (input[i] == 0)) break; + size_t out { 0 }; + for (size_t i { 0 }; i < N; ++i) { + if ((i == (N - 1)) && (input[i] == 0)) + break; length_value_t info = length_and_value_of_utf8_code_point(input[i]); switch (info.length) { case 6: if (++i < N) info.value = - (info.value << 6) | - value_of_trailing_utf8_code_point(input[i], correct_flag); + (info.value << 6) | value_of_trailing_utf8_code_point(input[i], correct_flag); [[fallthrough]]; case 5: if (++i < N) info.value = - (info.value << 6) | - value_of_trailing_utf8_code_point(input[i], correct_flag); + (info.value << 6) | value_of_trailing_utf8_code_point(input[i], correct_flag); [[fallthrough]]; case 4: if (++i < N) info.value = - (info.value << 6) | - value_of_trailing_utf8_code_point(input[i], correct_flag); + (info.value << 6) | value_of_trailing_utf8_code_point(input[i], correct_flag); [[fallthrough]]; case 3: if (++i < N) info.value = - (info.value << 6) | - value_of_trailing_utf8_code_point(input[i], correct_flag); + (info.value << 6) | value_of_trailing_utf8_code_point(input[i], correct_flag); [[fallthrough]]; case 2: if (++i < N) info.value = - (info.value << 6) | - value_of_trailing_utf8_code_point(input[i], correct_flag); + (info.value << 6) | value_of_trailing_utf8_code_point(input[i], correct_flag); [[fallthrough]]; case 1: content[out++] = static_cast(info.value); @@ -343,48 +334,45 @@ namespace ctll { } } #else - for (size_t i {0}; i < N; ++i) { + for (size_t i { 0 }; i < N; ++i) { content[i] = static_cast(input[i]); - if ((i == (N - 1)) && (input[i] == 0)) break; + if ((i == (N - 1)) && (input[i] == 0)) + break; real_size++; } #endif #if __cpp_char8_t } else if constexpr (std::is_same_v) { - size_t out {0}; - for (size_t i {0}; i < N; ++i) { - if ((i == (N - 1)) && (input[i] == 0)) break; + size_t out { 0 }; + for (size_t i { 0 }; i < N; ++i) { + if ((i == (N - 1)) && (input[i] == 0)) + break; length_value_t info = length_and_value_of_utf8_code_point(input[i]); switch (info.length) { case 6: if (++i < N) info.value = - (info.value << 6) | - value_of_trailing_utf8_code_point(input[i], correct_flag); + (info.value << 6) | value_of_trailing_utf8_code_point(input[i], correct_flag); [[fallthrough]]; case 5: if (++i < N) info.value = - (info.value << 6) | - value_of_trailing_utf8_code_point(input[i], correct_flag); + (info.value << 6) | value_of_trailing_utf8_code_point(input[i], correct_flag); [[fallthrough]]; case 4: if (++i < N) info.value = - (info.value << 6) | - value_of_trailing_utf8_code_point(input[i], correct_flag); + (info.value << 6) | value_of_trailing_utf8_code_point(input[i], correct_flag); [[fallthrough]]; case 3: if (++i < N) info.value = - (info.value << 6) | - value_of_trailing_utf8_code_point(input[i], correct_flag); + (info.value << 6) | value_of_trailing_utf8_code_point(input[i], correct_flag); [[fallthrough]]; case 2: if (++i < N) info.value = - (info.value << 6) | - value_of_trailing_utf8_code_point(input[i], correct_flag); + (info.value << 6) | value_of_trailing_utf8_code_point(input[i], correct_flag); [[fallthrough]]; case 1: content[out++] = static_cast(info.value); @@ -397,31 +385,31 @@ namespace ctll { } #endif } else if constexpr (std::is_same_v) { - size_t out {0}; - for (size_t i {0}; i < N; ++i) { + size_t out { 0 }; + for (size_t i { 0 }; i < N; ++i) { length_value_t info = length_and_value_of_utf16_code_point(input[i]); if (info.length == 2) { if (++i < N) { if ((input[i] & 0b1111'1100'0000'0000) == 0b1101'1100'0000'0000) { content[out++] = - ((info.value << 10) | (input[i] & 0b0000'0011'1111'1111)) + - 0x10000; + ((info.value << 10) | (input[i] & 0b0000'0011'1111'1111)) + 0x10000; } else { correct_flag = false; break; } } } else { - if ((i == (N - 1)) && (input[i] == 0)) break; + if ((i == (N - 1)) && (input[i] == 0)) + break; content[out++] = info.value; } } real_size = out; - } else if constexpr (std::is_same_v || - std::is_same_v) { - for (size_t i {0}; i < N; ++i) { + } else if constexpr (std::is_same_v || std::is_same_v) { + for (size_t i { 0 }; i < N; ++i) { content[i] = static_cast(input[i]); - if ((i == (N - 1)) && (input[i] == 0)) break; + if ((i == (N - 1)) && (input[i] == 0)) + break; real_size++; } } @@ -429,13 +417,13 @@ namespace ctll { template constexpr fixed_string(const std::array& in) noexcept - : fixed_string {construct_from_pointer, in.data()} {} + : fixed_string { construct_from_pointer, in.data() } {} template constexpr fixed_string(const T (&input)[N + 1]) noexcept - : fixed_string {construct_from_pointer, input} {} + : fixed_string { construct_from_pointer, input } {} constexpr fixed_string(const fixed_string& other) noexcept { - for (size_t i {0}; i < N; ++i) { content[i] = other.content[i]; } + for (size_t i { 0 }; i < N; ++i) { content[i] = other.content[i]; } real_size = other.real_size; correct_flag = other.correct_flag; } @@ -443,25 +431,25 @@ namespace ctll { constexpr size_t size() const noexcept { return real_size; } constexpr const char32_t* begin() const noexcept { return content; } constexpr const char32_t* end() const noexcept { return content + size(); } - constexpr char32_t operator[](size_t i) const noexcept { - return content[i]; - } + constexpr char32_t operator[](size_t i) const noexcept { return content[i]; } template constexpr bool is_same_as(const fixed_string& rhs) const noexcept { - if (real_size != rhs.size()) return false; - for (size_t i {0}; i != real_size; ++i) { - if (content[i] != rhs[i]) return false; + if (real_size != rhs.size()) + return false; + for (size_t i { 0 }; i != real_size; ++i) { + if (content[i] != rhs[i]) + return false; } return true; } constexpr operator std::basic_string_view() const noexcept { - return std::basic_string_view {content, size()}; + return std::basic_string_view { content, size() }; } }; template <> class fixed_string<0> { - static constexpr char32_t empty[1] = {0}; + static constexpr char32_t empty[1] = { 0 }; public: template @@ -473,8 +461,8 @@ namespace ctll { constexpr const char32_t* begin() const noexcept { return empty; } constexpr const char32_t* end() const noexcept { return empty + size(); } constexpr char32_t operator[](size_t) const noexcept { return 0; } - constexpr operator std::basic_string_view() const noexcept { - return std::basic_string_view {empty, 0}; + constexpr operator std::basic_string_view() const noexcept { + return std::basic_string_view { empty, 0 }; } }; @@ -583,8 +571,7 @@ namespace ctll { // concat two lists together left to right template - constexpr auto concat(list, list) noexcept - -> list { + constexpr auto concat(list, list) noexcept -> list { return {}; } @@ -611,12 +598,11 @@ namespace ctll { template constexpr auto pop_and_get_front(list, T = T()) noexcept - -> list_pop_pair> { + -> list_pop_pair> { return {}; } template - constexpr auto pop_and_get_front(empty_list, T = T()) noexcept - -> list_pop_pair { + constexpr auto pop_and_get_front(empty_list, T = T()) noexcept -> list_pop_pair { return {}; } @@ -634,15 +620,13 @@ namespace ctll { template struct rotate_item { template - friend constexpr auto operator+(list, rotate_item) noexcept - -> list { + friend constexpr auto operator+(list, rotate_item) noexcept -> list { return {}; } }; template - constexpr auto rotate(list) - -> decltype((list<> {} + ... + rotate_item {})) { + constexpr auto rotate(list) -> decltype((list<> {} + ... + rotate_item {})) { return {}; } @@ -656,8 +640,7 @@ namespace ctll { template struct wrapper { template - friend constexpr auto operator+(list, wrapper) - -> list; + friend constexpr auto operator+(list, wrapper) -> list; }; static constexpr auto check(T) { return std::true_type {}; } @@ -804,9 +787,7 @@ namespace ctll { template ::value>> constexpr inline neg_set(term) noexcept; #else - template < - auto V, - typename = std::enable_if_t> + template > constexpr inline neg_set(term) noexcept; #endif }; @@ -828,9 +809,7 @@ namespace ctll { // from the terminal => pop_input template static constexpr auto rule(Expected, term) - -> std::enable_if_t< - std::is_constructible_v>, - ctll::pop_input>; + -> std::enable_if_t>, ctll::pop_input>; // empty stack and empty input means we are accepting static constexpr auto rule(empty_stack_symbol, epsilon) -> ctll::accept; @@ -865,13 +844,11 @@ namespace ctll { using Actions::apply; // allow empty_subject to exists template - constexpr static auto apply(Action, term, empty_subject) - -> empty_subject { + constexpr static auto apply(Action, term, empty_subject) -> empty_subject { return {}; } template - constexpr static auto apply(Action, epsilon, empty_subject) - -> empty_subject { + constexpr static auto apply(Action, epsilon, empty_subject) -> empty_subject { return {}; } }; @@ -906,17 +883,17 @@ namespace ctll { #if CTLL_CNTTP_COMPILER_CHECK template < - typename Grammar, - ctll::fixed_string input, - typename ActionSelector = empty_actions, - bool IgnoreUnknownActions = false> + typename Grammar, + ctll::fixed_string input, + typename ActionSelector = empty_actions, + bool IgnoreUnknownActions = false> struct parser { // in c++20 #else template < - typename Grammar, - const auto& input, - typename ActionSelector = empty_actions, - bool IgnoreUnknownActions = false> + typename Grammar, + const auto& input, + typename ActionSelector = empty_actions, + bool IgnoreUnknownActions = false> struct parser { #endif @@ -930,19 +907,15 @@ namespace ctll { static constexpr auto _input = input; // everyone else #endif - using Actions = ctll::conditional< - IgnoreUnknownActions, - ignore_unknown, - identity>; + using Actions = ctll:: + conditional, identity>; using grammar = augment_grammar; template struct results { static constexpr bool is_correct = Decision == decision::accept; - constexpr inline CTLL_FORCE_INLINE operator bool() const noexcept { - return is_correct; - } + constexpr inline CTLL_FORCE_INLINE operator bool() const noexcept { return is_correct; } #ifdef __GNUC__ // workaround to GCC bug #if CTLL_CNTTP_COMPILER_CHECK @@ -961,7 +934,7 @@ namespace ctll { if constexpr (Decision == decision::undecided) { // parse for current char (RPos) with previous stack and subject :) return parser:: - template decide({}, {}); + template decide({}, {}); } else { // if there is decision already => just push it to the end of fold // expression @@ -974,9 +947,7 @@ namespace ctll { static constexpr auto get_current_term() noexcept { if constexpr (Pos < input.size()) { constexpr auto value = input[Pos]; - if constexpr (value <= static_cast( - (std::numeric_limits::max)() - )) { + if constexpr (value <= static_cast((std::numeric_limits::max)())) { return term(value)> {}; } else { return term {}; @@ -994,9 +965,7 @@ namespace ctll { return epsilon {}; } else if constexpr ((Pos - 1) < input.size()) { constexpr auto value = input[Pos - 1]; - if constexpr (value <= static_cast( - (std::numeric_limits::max)() - )) { + if constexpr (value <= static_cast((std::numeric_limits::max)())) { return term(value)> {}; } else { return term {}; @@ -1007,108 +976,76 @@ namespace ctll { } // if rule is accept => return true and subject template - static constexpr auto - move(ctll::accept, Terminal, Stack, Subject) noexcept { - return typename parser< - Grammar, _input, ActionSelector, IgnoreUnknownActions>:: - template results(); + static constexpr auto move(ctll::accept, Terminal, Stack, Subject) noexcept { + return typename parser:: + template results(); } // if rule is reject => return false and subject template - static constexpr auto - move(ctll::reject, Terminal, Stack, Subject) noexcept { - return typename parser< - Grammar, _input, ActionSelector, IgnoreUnknownActions>:: - template results(); + static constexpr auto move(ctll::reject, Terminal, Stack, Subject) noexcept { + return typename parser:: + template results(); } // if rule is pop_input => move to next character template - static constexpr auto - move(ctll::pop_input, Terminal, Stack, Subject) noexcept { - return typename parser< - Grammar, _input, ActionSelector, IgnoreUnknownActions>:: - template results(); + static constexpr auto move(ctll::pop_input, Terminal, Stack, Subject) noexcept { + return typename parser:: + template results(); } // if rule is string => push it to the front of stack - template < - size_t Pos, - typename... Content, - typename Terminal, - typename Stack, - typename Subject> - static constexpr auto move( - push string, - Terminal, - Stack stack, - Subject subject - ) noexcept { + template + static constexpr auto + move(push string, Terminal, Stack stack, Subject subject) noexcept { return decide(push_front(string, stack), subject); } // if rule is epsilon (empty string) => continue template - static constexpr auto - move(epsilon, Terminal, Stack stack, Subject subject) noexcept { + static constexpr auto move(epsilon, Terminal, Stack stack, Subject subject) noexcept { return decide(stack, subject); } // if rule is string with current character at the beginning (term) => // move to next character and push string without the character (quick // LL(1)) - template < - size_t Pos, - auto V, - typename... Content, - typename Stack, - typename Subject> - static constexpr auto - move(push, Content...>, term, Stack stack, Subject) noexcept { + template + static constexpr auto move(push, Content...>, term, Stack stack, Subject) noexcept { constexpr auto local_input = input; - return typename parser< - Grammar, local_input, ActionSelector, IgnoreUnknownActions>:: - template results< - Pos + 1, decltype(push_front(list(), stack)), Subject, - decision::undecided>(); + return typename parser:: + template results< + Pos + 1, + decltype(push_front(list(), stack)), + Subject, + decision::undecided>(); } // if rule is string with any character at the beginning (compatible with // current term) => move to next character and push string without the // character (quick LL(1)) - template < - size_t Pos, - auto V, - typename... Content, - auto T, - typename Stack, - typename Subject> - static constexpr auto - move(push, term, Stack stack, Subject) noexcept { + template + static constexpr auto move(push, term, Stack stack, Subject) noexcept { constexpr auto local_input = input; - return typename parser< - Grammar, local_input, ActionSelector, IgnoreUnknownActions>:: - template results< - Pos + 1, decltype(push_front(list(), stack)), Subject, - decision::undecided>(); + return typename parser:: + template results< + Pos + 1, + decltype(push_front(list(), stack)), + Subject, + decision::undecided>(); } // decide if we need to take action or move template - static constexpr auto - decide(Stack previous_stack, Subject previous_subject) noexcept { + static constexpr auto decide(Stack previous_stack, Subject previous_subject) noexcept { // each call means we pop something from stack - auto top_symbol = - decltype(ctll::front(previous_stack, empty_stack_symbol()))(); + auto top_symbol = decltype(ctll::front(previous_stack, empty_stack_symbol()))(); // gcc pedantic warning [[maybe_unused]] auto stack = decltype(ctll::pop_front(previous_stack))(); // in case top_symbol is action type (apply it on previous subject and get // new one) if constexpr (std::is_base_of_v) { - auto subject = Actions::apply( - top_symbol, get_previous_term(), previous_subject - ); + auto subject = Actions::apply(top_symbol, get_previous_term(), previous_subject); // in case that semantic action is error => reject input if constexpr (std::is_same_v) { - return typename parser< - Grammar, _input, ActionSelector, IgnoreUnknownActions>:: - template results(); + return typename parser:: + template results(); } else { return decide(stack, subject); } @@ -1122,22 +1059,19 @@ namespace ctll { // trampolines with folded expression template - static constexpr auto - trampoline_decide(Subject, std::index_sequence) noexcept { + static constexpr auto trampoline_decide(Subject, std::index_sequence) noexcept { // parse everything for first char and than for next and next ... // Pos+1 is needed as we want to finish calculation with epsilons on stack auto v = - (decide<0, typename grammar::start_stack, Subject>({}, {}) + ... + - index_placeholder()); + (decide<0, typename grammar::start_stack, Subject>({}, {}) + ... + + index_placeholder()); return v; } template static constexpr auto trampoline_decide(Subject subject = {}) noexcept { // there will be no recursion, just sequence long as the input - return trampoline_decide( - subject, std::make_index_sequence() - ); + return trampoline_decide(subject, std::make_index_sequence()); } template @@ -1294,1250 +1228,982 @@ namespace ctre { // (q)LL1 function: using _others = ctll::neg_set< - '!', - '$', - '\x28', - '\x29', - '*', - '+', - ',', - '-', - '.', - '/', - ':', - '<', - '=', - '>', - '?', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - '[', - '\\', - '0', - '\"', - ']', - '^', - '_', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - '\x7B', - '|', - '\x7D', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9'>; + '!', + '$', + '\x28', + '\x29', + '*', + '+', + ',', + '-', + '.', + '/', + ':', + '<', + '=', + '>', + '?', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + '[', + '\\', + '0', + '\"', + ']', + '^', + '_', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + '\x7B', + '|', + '\x7D', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9'>; static constexpr auto rule(s, ctll::term<'\\'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(s, ctll::term<'['>) - -> ctll::push; - static constexpr auto rule(s, ctll::term<'\x28'>) -> ctll::push< - ctll::anything, - prepare_capture, - block, - repeat, - string2, - content2>; + -> ctll::push; + static constexpr auto rule(s, ctll::term<'\x28'>) + -> ctll::push; static constexpr auto rule(s, ctll::term<'^'>) - -> ctll:: - push; + -> ctll::push; static constexpr auto rule(s, ctll::term<'$'>) - -> ctll:: - push; - static constexpr auto - rule(s, ctll::set<'!', ',', '/', ':', '<', '0', '-', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', ']', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll:: - push; - static constexpr auto rule( - s, - _others - ) -> ctll::push; - static constexpr auto rule(s, ctll::term<'.'>) -> ctll::push< - ctll::anything, - push_character_anything, - repeat, - string2, - content2>; + -> ctll::push; + static constexpr auto rule(s, ctll::set<'!', ',', '/', ':', '<', '0', '-', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', ']', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; + static constexpr auto rule(s, _others) + -> ctll::push; + static constexpr auto rule(s, ctll::term<'.'>) + -> ctll::push; static constexpr auto rule(s, ctll::term<'|'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(s, ctll::epsilon) -> ctll::push; - static constexpr auto - rule(s, ctll::set<'\x29', '*', '+', '?', '\x7B', '\x7D'>) - -> ctll::reject; + static constexpr auto rule(s, ctll::set<'\x29', '*', '+', '?', '\x7B', '\x7D'>) -> ctll::reject; - static constexpr auto rule(a, ctll::term<'\\'>) -> ctll::push< - ctll::anything, - backslash, - repeat, - string2, - content2, - make_alternate>; + static constexpr auto rule(a, ctll::term<'\\'>) + -> ctll::push; static constexpr auto rule(a, ctll::term<'['>) - -> ctll:: - push; - static constexpr auto rule(a, ctll::term<'\x28'>) -> ctll::push< + -> ctll::push; + static constexpr auto rule(a, ctll::term<'\x28'>) + -> ctll:: + push; + static constexpr auto rule(a, ctll::term<'^'>) + -> ctll::push; + static constexpr auto rule(a, ctll::term<'$'>) + -> ctll::push; + static constexpr auto rule(a, ctll::set<'!', ',', '/', ':', '<', '0', '-', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', ']', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; + static constexpr auto rule(a, _others) + -> ctll::push; + static constexpr auto rule(a, ctll::term<'.'>) + -> ctll:: + push; + static constexpr auto rule(a, ctll::term<'\x29'>) -> ctll::push; + static constexpr auto rule(a, ctll::epsilon) -> ctll::push; + static constexpr auto rule(a, ctll::set<'*', '+', '?', '\x7B', '|', '\x7D'>) -> ctll::reject; + + static constexpr auto rule(b, ctll::term<','>) -> ctll::push; + static constexpr auto rule(b, ctll::term<'\x7D'>) -> ctll::push; + + static constexpr auto rule(backslash, ctll::term<'d'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'h'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'H'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'V'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'D'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'N'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'S'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'W'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'s'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'v'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'w'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::set<'1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'g'>) + -> ctll::push, m>; + static constexpr auto rule(backslash, ctll::term<'p'>) + -> ctll:: + push, property_name, ctll::term<'\x7D'>, make_property>; + static constexpr auto rule(backslash, ctll::term<'P'>) -> ctll::push< + ctll::anything, + ctll::term<'\x7B'>, + property_name, + ctll::term<'\x7D'>, + make_property_negative>; + static constexpr auto rule(backslash, ctll::term<'u'>) -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'x'>) -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'A'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'z'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'Z'>) + -> ctll::push; + static constexpr auto + rule(backslash, ctll::set<'$', '\x28', '\x29', '*', '+', '-', '.', '/', '<', '>', '?', '[', '\\', '\"', ']', '^', '\x7B', '|', '\x7D'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'a'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'e'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'f'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'n'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'0'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'r'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'t'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'B'>) + -> ctll::push; + static constexpr auto rule(backslash, ctll::term<'b'>) + -> ctll::push; + + static constexpr auto rule(backslash_range, ctll::term<'u'>) -> ctll::push; + static constexpr auto rule(backslash_range, ctll::term<'x'>) -> ctll::push; + static constexpr auto + rule(backslash_range, ctll::set<'$', '\x28', '\x29', '*', '+', '-', '.', '/', '<', '>', '?', '[', '\\', '\"', ']', '^', '\x7B', '|', '\x7D'>) + -> ctll::push; + static constexpr auto rule(backslash_range, ctll::term<'a'>) + -> ctll::push; + static constexpr auto rule(backslash_range, ctll::term<'e'>) + -> ctll::push; + static constexpr auto rule(backslash_range, ctll::term<'f'>) + -> ctll::push; + static constexpr auto rule(backslash_range, ctll::term<'n'>) + -> ctll::push; + static constexpr auto rule(backslash_range, ctll::term<'0'>) + -> ctll::push; + static constexpr auto rule(backslash_range, ctll::term<'r'>) + -> ctll::push; + static constexpr auto rule(backslash_range, ctll::term<'t'>) + -> ctll::push; + + static constexpr auto rule(block, ctll::term<'\\'>) -> ctll::push< ctll::anything, - prepare_capture, - block, + backslash, repeat, string2, content2, - make_alternate>; - static constexpr auto rule(a, ctll::term<'^'>) -> ctll::push< - ctll::anything, - push_assert_begin, - repeat, - string2, - content2, - make_alternate>; - static constexpr auto rule(a, ctll::term<'$'>) -> ctll::push< - ctll::anything, - push_assert_end, - repeat, - string2, - content2, - make_alternate>; - static constexpr auto - rule(a, ctll::set<'!', ',', '/', ':', '<', '0', '-', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', ']', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push< - ctll::anything, - push_character, - repeat, - string2, - content2, - make_alternate>; - static constexpr auto rule(a, _others) -> ctll::push< - ctll::anything, - push_character, - repeat, - string2, - content2, - make_alternate>; - static constexpr auto rule(a, ctll::term<'.'>) -> ctll::push< - ctll::anything, - push_character_anything, - repeat, - string2, - content2, - make_alternate>; - static constexpr auto rule(a, ctll::term<'\x29'>) - -> ctll::push; - static constexpr auto rule(a, ctll::epsilon) - -> ctll::push; - static constexpr auto rule(a, ctll::set<'*', '+', '?', '\x7B', '|', '\x7D'>) - -> ctll::reject; - - static constexpr auto rule(b, ctll::term<','>) - -> ctll::push; - static constexpr auto rule(b, ctll::term<'\x7D'>) - -> ctll::push; - - static constexpr auto rule(backslash, ctll::term<'d'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'h'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'H'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'V'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'D'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'N'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'S'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'W'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'s'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'v'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'w'>) - -> ctll::push; - static constexpr auto - rule(backslash, ctll::set<'1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'g'>) - -> ctll::push, m>; - static constexpr auto rule(backslash, ctll::term<'p'>) - -> ctll::push< - ctll::anything, - ctll::term<'\x7B'>, - property_name, - ctll::term<'\x7D'>, - make_property>; - static constexpr auto rule(backslash, ctll::term<'P'>) - -> ctll::push< - ctll::anything, - ctll::term<'\x7B'>, - property_name, - ctll::term<'\x7D'>, - make_property_negative>; - static constexpr auto rule(backslash, ctll::term<'u'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'x'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'A'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'z'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'Z'>) - -> ctll::push; - static constexpr auto - rule(backslash, ctll::set<'$', '\x28', '\x29', '*', '+', '-', '.', '/', '<', '>', '?', '[', '\\', '\"', ']', '^', '\x7B', '|', '\x7D'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'a'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'e'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'f'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'n'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'0'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'r'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'t'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'B'>) - -> ctll::push; - static constexpr auto rule(backslash, ctll::term<'b'>) - -> ctll::push; - - static constexpr auto rule(backslash_range, ctll::term<'u'>) - -> ctll::push; - static constexpr auto rule(backslash_range, ctll::term<'x'>) - -> ctll::push; - static constexpr auto - rule(backslash_range, ctll::set<'$', '\x28', '\x29', '*', '+', '-', '.', '/', '<', '>', '?', '[', '\\', '\"', ']', '^', '\x7B', '|', '\x7D'>) - -> ctll::push; - static constexpr auto rule(backslash_range, ctll::term<'a'>) - -> ctll::push; - static constexpr auto rule(backslash_range, ctll::term<'e'>) - -> ctll::push; - static constexpr auto rule(backslash_range, ctll::term<'f'>) - -> ctll::push; - static constexpr auto rule(backslash_range, ctll::term<'n'>) - -> ctll::push; - static constexpr auto rule(backslash_range, ctll::term<'0'>) - -> ctll::push; - static constexpr auto rule(backslash_range, ctll::term<'r'>) - -> ctll::push; - static constexpr auto rule(backslash_range, ctll::term<'t'>) - -> ctll::push; - - static constexpr auto rule(block, ctll::term<'\\'>) -> ctll::push< + make_capture, + ctll::term<'\x29'>>; + static constexpr auto rule(block, ctll::term<'['>) + -> ctll::push>; + static constexpr auto rule(block, ctll::term<'?'>) -> ctll::push; + static constexpr auto rule(block, ctll::term<'\x28'>) -> ctll::push< ctll::anything, - backslash, + prepare_capture, + block, repeat, string2, content2, make_capture, ctll::term<'\x29'>>; - static constexpr auto rule(block, ctll::term<'['>) -> ctll::push< - ctll::anything, - c, - repeat, - string2, - content2, - make_capture, - ctll::term<'\x29'>>; - static constexpr auto rule(block, ctll::term<'?'>) - -> ctll::push; - static constexpr auto rule(block, ctll::term<'\x28'>) - -> ctll::push< - ctll::anything, - prepare_capture, - block, - repeat, - string2, - content2, - make_capture, - ctll::term<'\x29'>>; static constexpr auto rule(block, ctll::term<'^'>) -> ctll::push< - ctll::anything, - push_assert_begin, - repeat, - string2, - content2, - make_capture, - ctll::term<'\x29'>>; + ctll::anything, + push_assert_begin, + repeat, + string2, + content2, + make_capture, + ctll::term<'\x29'>>; static constexpr auto rule(block, ctll::term<'$'>) -> ctll::push< - ctll::anything, - push_assert_end, - repeat, - string2, - content2, - make_capture, - ctll::term<'\x29'>>; - static constexpr auto - rule(block, ctll::set<'!', ',', '/', ':', '<', '0', '-', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', ']', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push< - ctll::anything, - push_character, - repeat, - string2, - content2, - make_capture, - ctll::term<'\x29'>>; + ctll::anything, + push_assert_end, + repeat, + string2, + content2, + make_capture, + ctll::term<'\x29'>>; + static constexpr auto rule(block, ctll::set<'!', ',', '/', ':', '<', '0', '-', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', ']', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push< + ctll::anything, + push_character, + repeat, + string2, + content2, + make_capture, + ctll::term<'\x29'>>; static constexpr auto rule(block, _others) -> ctll::push< - ctll::anything, - push_character, - repeat, - string2, - content2, - make_capture, - ctll::term<'\x29'>>; - static constexpr auto rule(block, ctll::term<'.'>) - -> ctll::push< - ctll::anything, - push_character_anything, - repeat, - string2, - content2, - make_capture, - ctll::term<'\x29'>>; - static constexpr auto rule(block, ctll::term<'|'>) -> ctll::push< - ctll::anything, - push_empty, - content, - make_alternate, - make_capture, - ctll::term<'\x29'>>; + ctll::anything, + push_character, + repeat, + string2, + content2, + make_capture, + ctll::term<'\x29'>>; + static constexpr auto rule(block, ctll::term<'.'>) -> ctll::push< + ctll::anything, + push_character_anything, + repeat, + string2, + content2, + make_capture, + ctll::term<'\x29'>>; + static constexpr auto rule(block, ctll::term<'|'>) + -> ctll:: + push>; static constexpr auto rule(block, ctll::term<'\x29'>) - -> ctll::push; - static constexpr auto rule(block, ctll::set<'*', '+', '\x7B', '\x7D'>) - -> ctll::reject; + -> ctll::push; + static constexpr auto rule(block, ctll::set<'*', '+', '\x7B', '\x7D'>) -> ctll::reject; - static constexpr auto rule(block_name2, ctll::set<'>', '\x7D'>) - -> ctll::epsilon; - static constexpr auto rule(block_name2, ctll::set<'0', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) -> ctll:: - push; + static constexpr auto rule(block_name2, ctll::set<'>', '\x7D'>) -> ctll::epsilon; + static constexpr auto rule(block_name2, ctll::set<'0', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; static constexpr auto rule(c, ctll::term<'['>) -> ctll::push< - ctll::anything, - ctll::term<':'>, - i, - range, - set_start, - set2b, - set_make, - ctll::term<']'>>; - static constexpr auto rule(c, ctll::term<'\\'>) -> ctll::push< - ctll::anything, - e, - set_start, - set2b, - set_make, - ctll::term<']'>>; - static constexpr auto - rule(c, ctll::set<'!', '0', '$', '\x28', '\x29', '*', '+', ',', '.', '/', ':', '<', '=', '>', '?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '\x7B', '|', '\x7D', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push< - ctll::anything, - push_character, - range, - set_start, - set2b, - set_make, - ctll::term<']'>>; - static constexpr auto rule(c, _others) -> ctll::push< - ctll::anything, - push_character, - range, - set_start, - set2b, - set_make, - ctll::term<']'>>; + ctll::anything, + ctll::term<':'>, + i, + range, + set_start, + set2b, + set_make, + ctll::term<']'>>; + static constexpr auto rule(c, ctll::term<'\\'>) + -> ctll::push>; + static constexpr auto rule(c, ctll::set<'!', '0', '$', '\x28', '\x29', '*', '+', ',', '.', '/', ':', '<', '=', '>', '?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '\x7B', '|', '\x7D', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll:: + push>; + static constexpr auto rule(c, _others) + -> ctll:: + push>; static constexpr auto rule(c, ctll::term<'^'>) - -> ctll:: - push>; + -> ctll::push>; static constexpr auto rule(c, ctll::set<'-', ']'>) -> ctll::reject; - static constexpr auto rule(class_named_name, ctll::term<'x'>) - -> ctll::push< - ctll::anything, - ctll::term<'d'>, - ctll::term<'i'>, - ctll::term<'g'>, - ctll::term<'i'>, - ctll::term<'t'>, - class_named_xdigit>; - static constexpr auto rule(class_named_name, ctll::term<'d'>) - -> ctll::push< - ctll::anything, - ctll::term<'i'>, - ctll::term<'g'>, - ctll::term<'i'>, - ctll::term<'t'>, - class_named_digit>; - static constexpr auto rule(class_named_name, ctll::term<'b'>) - -> ctll::push< - ctll::anything, - ctll::term<'l'>, - ctll::term<'a'>, - ctll::term<'n'>, - ctll::term<'k'>, - class_named_blank>; - static constexpr auto rule(class_named_name, ctll::term<'c'>) - -> ctll::push< - ctll::anything, - ctll::term<'n'>, - ctll::term<'t'>, - ctll::term<'r'>, - ctll::term<'l'>, - class_named_cntrl>; + static constexpr auto rule(class_named_name, ctll::term<'x'>) -> ctll::push< + ctll::anything, + ctll::term<'d'>, + ctll::term<'i'>, + ctll::term<'g'>, + ctll::term<'i'>, + ctll::term<'t'>, + class_named_xdigit>; + static constexpr auto rule(class_named_name, ctll::term<'d'>) -> ctll::push< + ctll::anything, + ctll::term<'i'>, + ctll::term<'g'>, + ctll::term<'i'>, + ctll::term<'t'>, + class_named_digit>; + static constexpr auto rule(class_named_name, ctll::term<'b'>) -> ctll::push< + ctll::anything, + ctll::term<'l'>, + ctll::term<'a'>, + ctll::term<'n'>, + ctll::term<'k'>, + class_named_blank>; + static constexpr auto rule(class_named_name, ctll::term<'c'>) -> ctll::push< + ctll::anything, + ctll::term<'n'>, + ctll::term<'t'>, + ctll::term<'r'>, + ctll::term<'l'>, + class_named_cntrl>; static constexpr auto rule(class_named_name, ctll::term<'w'>) - -> ctll::push< - ctll::anything, - ctll::term<'o'>, - ctll::term<'r'>, - ctll::term<'d'>, - class_named_word>; - static constexpr auto rule(class_named_name, ctll::term<'l'>) - -> ctll::push< - ctll::anything, - ctll::term<'o'>, - ctll::term<'w'>, - ctll::term<'e'>, - ctll::term<'r'>, - class_named_lower>; - static constexpr auto rule(class_named_name, ctll::term<'s'>) - -> ctll::push< - ctll::anything, - ctll::term<'p'>, - ctll::term<'a'>, - ctll::term<'c'>, - ctll::term<'e'>, - class_named_space>; - static constexpr auto rule(class_named_name, ctll::term<'u'>) - -> ctll::push< - ctll::anything, - ctll::term<'p'>, - ctll::term<'p'>, - ctll::term<'e'>, - ctll::term<'r'>, - class_named_upper>; - static constexpr auto rule(class_named_name, ctll::term<'g'>) - -> ctll::push< - ctll::anything, - ctll::term<'r'>, - ctll::term<'a'>, - ctll::term<'p'>, - ctll::term<'h'>, - class_named_graph>; - static constexpr auto rule(class_named_name, ctll::term<'a'>) - -> ctll::push; - static constexpr auto rule(class_named_name, ctll::term<'p'>) - -> ctll::push; + -> ctll:: + push, ctll::term<'r'>, ctll::term<'d'>, class_named_word>; + static constexpr auto rule(class_named_name, ctll::term<'l'>) -> ctll::push< + ctll::anything, + ctll::term<'o'>, + ctll::term<'w'>, + ctll::term<'e'>, + ctll::term<'r'>, + class_named_lower>; + static constexpr auto rule(class_named_name, ctll::term<'s'>) -> ctll::push< + ctll::anything, + ctll::term<'p'>, + ctll::term<'a'>, + ctll::term<'c'>, + ctll::term<'e'>, + class_named_space>; + static constexpr auto rule(class_named_name, ctll::term<'u'>) -> ctll::push< + ctll::anything, + ctll::term<'p'>, + ctll::term<'p'>, + ctll::term<'e'>, + ctll::term<'r'>, + class_named_upper>; + static constexpr auto rule(class_named_name, ctll::term<'g'>) -> ctll::push< + ctll::anything, + ctll::term<'r'>, + ctll::term<'a'>, + ctll::term<'p'>, + ctll::term<'h'>, + class_named_graph>; + static constexpr auto rule(class_named_name, ctll::term<'a'>) -> ctll::push; + static constexpr auto rule(class_named_name, ctll::term<'p'>) -> ctll::push; static constexpr auto rule(content2, ctll::term<'\x29'>) -> ctll::epsilon; static constexpr auto rule(content2, ctll::epsilon) -> ctll::epsilon; - static constexpr auto rule(content2, ctll::term<'|'>) - -> ctll::push; + static constexpr auto rule(content2, ctll::term<'|'>) -> ctll::push; static constexpr auto rule(content, ctll::term<'\\'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(content, ctll::term<'['>) - -> ctll::push; - static constexpr auto rule(content, ctll::term<'\x28'>) -> ctll::push< - ctll::anything, - prepare_capture, - block, - repeat, - string2, - content2>; + -> ctll::push; + static constexpr auto rule(content, ctll::term<'\x28'>) + -> ctll::push; static constexpr auto rule(content, ctll::term<'^'>) - -> ctll:: - push; + -> ctll::push; static constexpr auto rule(content, ctll::term<'$'>) - -> ctll:: - push; - static constexpr auto - rule(content, ctll::set<'!', ',', '/', ':', '<', '0', '-', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', ']', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll:: - push; - static constexpr auto rule( - content, - _others - ) -> ctll::push; + -> ctll::push; + static constexpr auto rule(content, ctll::set<'!', ',', '/', ':', '<', '0', '-', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', ']', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; + static constexpr auto rule(content, _others) + -> ctll::push; static constexpr auto rule(content, ctll::term<'.'>) - -> ctll::push< - ctll::anything, - push_character_anything, - repeat, - string2, - content2>; - static constexpr auto - rule(content, ctll::set<'\x29', '*', '+', '?', '\x7B', '|', '\x7D'>) - -> ctll::reject; + -> ctll::push; + static constexpr auto rule(content, ctll::set<'\x29', '*', '+', '?', '\x7B', '|', '\x7D'>) + -> ctll::reject; static constexpr auto rule(content_in_capture, ctll::term<'\\'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(content_in_capture, ctll::term<'['>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(content_in_capture, ctll::term<'\x28'>) - -> ctll::push< - ctll::anything, - prepare_capture, - block, - repeat, - string2, - content2>; + -> ctll::push; static constexpr auto rule(content_in_capture, ctll::term<'^'>) - -> ctll:: - push; + -> ctll::push; static constexpr auto rule(content_in_capture, ctll::term<'$'>) - -> ctll:: - push; + -> ctll::push; static constexpr auto - rule(content_in_capture, ctll::set<'!', ',', '/', ':', '<', '0', '-', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', ']', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll:: - push; - static constexpr auto rule( - content_in_capture, - _others - ) -> ctll::push; + rule(content_in_capture, ctll::set<'!', ',', '/', ':', '<', '0', '-', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', ']', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; + static constexpr auto rule(content_in_capture, _others) + -> ctll::push; static constexpr auto rule(content_in_capture, ctll::term<'.'>) - -> ctll::push< - ctll::anything, - push_character_anything, - repeat, - string2, - content2>; + -> ctll::push; static constexpr auto rule(content_in_capture, ctll::term<'|'>) - -> ctll::push; - static constexpr auto rule(content_in_capture, ctll::term<'\x29'>) - -> ctll::push; - static constexpr auto - rule(content_in_capture, ctll::set<'*', '+', '?', '\x7B', '\x7D'>) - -> ctll::reject; + -> ctll::push; + static constexpr auto rule(content_in_capture, ctll::term<'\x29'>) -> ctll::push; + static constexpr auto rule(content_in_capture, ctll::set<'*', '+', '?', '\x7B', '\x7D'>) + -> ctll::reject; static constexpr auto rule(d, ctll::term<'i'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(d, ctll::term<'c'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(d, ctll::term<'m'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(d, ctll::term<'s'>) - -> ctll::push; - static constexpr auto rule(d, ctll::term<'<'>) - -> ctll::push; - static constexpr auto rule(d, ctll::term<':'>) -> ctll::push< - ctll::anything, - reset_capture, - content_in_capture, - ctll::term<'\x29'>>; + -> ctll::push; + static constexpr auto rule(d, ctll::term<'<'>) -> ctll::push; + static constexpr auto rule(d, ctll::term<':'>) + -> ctll::push>; static constexpr auto rule(d, ctll::term<'>'>) -> ctll::push< - ctll::anything, - reset_capture, - start_atomic, - content_in_capture, - make_atomic, - ctll::term<'\x29'>>; + ctll::anything, + reset_capture, + start_atomic, + content_in_capture, + make_atomic, + ctll::term<'\x29'>>; static constexpr auto rule(d, ctll::term<'!'>) -> ctll::push< - ctll::anything, - reset_capture, - start_lookahead_negative, - content_in_capture, - look_finish, - ctll::term<'\x29'>>; + ctll::anything, + reset_capture, + start_lookahead_negative, + content_in_capture, + look_finish, + ctll::term<'\x29'>>; static constexpr auto rule(d, ctll::term<'='>) -> ctll::push< - ctll::anything, - reset_capture, - start_lookahead_positive, - content_in_capture, - look_finish, - ctll::term<'\x29'>>; + ctll::anything, + reset_capture, + start_lookahead_positive, + content_in_capture, + look_finish, + ctll::term<'\x29'>>; - static constexpr auto rule(e, ctll::term<'d'>) - -> ctll::push; + static constexpr auto rule(e, ctll::term<'d'>) -> ctll::push; static constexpr auto rule(e, ctll::term<'h'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(e, ctll::term<'H'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(e, ctll::term<'V'>) - -> ctll::push; - static constexpr auto rule(e, ctll::term<'D'>) - -> ctll::push; - static constexpr auto rule(e, ctll::term<'N'>) - -> ctll::push; - static constexpr auto rule(e, ctll::term<'S'>) - -> ctll::push; - static constexpr auto rule(e, ctll::term<'W'>) - -> ctll::push; - static constexpr auto rule(e, ctll::term<'s'>) - -> ctll::push; + -> ctll::push; + static constexpr auto rule(e, ctll::term<'D'>) -> ctll::push; + static constexpr auto rule(e, ctll::term<'N'>) -> ctll::push; + static constexpr auto rule(e, ctll::term<'S'>) -> ctll::push; + static constexpr auto rule(e, ctll::term<'W'>) -> ctll::push; + static constexpr auto rule(e, ctll::term<'s'>) -> ctll::push; static constexpr auto rule(e, ctll::term<'v'>) - -> ctll::push; - static constexpr auto rule(e, ctll::term<'w'>) - -> ctll::push; - static constexpr auto rule(e, ctll::term<'p'>) -> ctll::push< - ctll::anything, - ctll::term<'\x7B'>, - property_name, - ctll::term<'\x7D'>, - make_property>; + -> ctll::push; + static constexpr auto rule(e, ctll::term<'w'>) -> ctll::push; + static constexpr auto rule(e, ctll::term<'p'>) + -> ctll:: + push, property_name, ctll::term<'\x7D'>, make_property>; static constexpr auto rule(e, ctll::term<'P'>) -> ctll::push< - ctll::anything, - ctll::term<'\x7B'>, - property_name, - ctll::term<'\x7D'>, - make_property_negative>; - static constexpr auto rule(e, ctll::term<'u'>) - -> ctll::push; - static constexpr auto rule(e, ctll::term<'x'>) - -> ctll::push; + ctll::anything, + ctll::term<'\x7B'>, + property_name, + ctll::term<'\x7D'>, + make_property_negative>; + static constexpr auto rule(e, ctll::term<'u'>) -> ctll::push; + static constexpr auto rule(e, ctll::term<'x'>) -> ctll::push; static constexpr auto - rule(e, ctll::set<'$', '\x28', '\x29', '*', '+', '-', '.', '/', '<', '>', '?', '[', '\\', '\"', ']', '^', '\x7B', '|', '\x7D'>) - -> ctll::push; + rule(e, ctll::set<'$', '\x28', '\x29', '*', '+', '-', '.', '/', '<', '>', '?', '[', '\\', '\"', ']', '^', '\x7B', '|', '\x7D'>) + -> ctll::push; static constexpr auto rule(e, ctll::term<'a'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(e, ctll::term<'e'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(e, ctll::term<'f'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(e, ctll::term<'n'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(e, ctll::term<'0'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(e, ctll::term<'r'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(e, ctll::term<'t'>) - -> ctll::push; + -> ctll::push; - static constexpr auto rule(f, ctll::term<'d'>) - -> ctll::push; + static constexpr auto rule(f, ctll::term<'d'>) -> ctll::push; static constexpr auto rule(f, ctll::term<'h'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(f, ctll::term<'H'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(f, ctll::term<'V'>) - -> ctll::push; - static constexpr auto rule(f, ctll::term<'D'>) - -> ctll::push; - static constexpr auto rule(f, ctll::term<'N'>) - -> ctll::push; - static constexpr auto rule(f, ctll::term<'S'>) - -> ctll::push; - static constexpr auto rule(f, ctll::term<'W'>) - -> ctll::push; - static constexpr auto rule(f, ctll::term<'s'>) - -> ctll::push; + -> ctll::push; + static constexpr auto rule(f, ctll::term<'D'>) -> ctll::push; + static constexpr auto rule(f, ctll::term<'N'>) -> ctll::push; + static constexpr auto rule(f, ctll::term<'S'>) -> ctll::push; + static constexpr auto rule(f, ctll::term<'W'>) -> ctll::push; + static constexpr auto rule(f, ctll::term<'s'>) -> ctll::push; static constexpr auto rule(f, ctll::term<'v'>) - -> ctll::push; - static constexpr auto rule(f, ctll::term<'w'>) - -> ctll::push; - static constexpr auto rule(f, ctll::term<'p'>) -> ctll::push< - ctll::anything, - ctll::term<'\x7B'>, - property_name, - ctll::term<'\x7D'>, - make_property>; + -> ctll::push; + static constexpr auto rule(f, ctll::term<'w'>) -> ctll::push; + static constexpr auto rule(f, ctll::term<'p'>) + -> ctll:: + push, property_name, ctll::term<'\x7D'>, make_property>; static constexpr auto rule(f, ctll::term<'P'>) -> ctll::push< - ctll::anything, - ctll::term<'\x7B'>, - property_name, - ctll::term<'\x7D'>, - make_property_negative>; - static constexpr auto rule(f, ctll::term<'u'>) - -> ctll::push; - static constexpr auto rule(f, ctll::term<'x'>) - -> ctll::push; + ctll::anything, + ctll::term<'\x7B'>, + property_name, + ctll::term<'\x7D'>, + make_property_negative>; + static constexpr auto rule(f, ctll::term<'u'>) -> ctll::push; + static constexpr auto rule(f, ctll::term<'x'>) -> ctll::push; static constexpr auto - rule(f, ctll::set<'$', '\x28', '\x29', '*', '+', '-', '.', '/', '<', '>', '?', '[', '\\', '\"', ']', '^', '\x7B', '|', '\x7D'>) - -> ctll::push; + rule(f, ctll::set<'$', '\x28', '\x29', '*', '+', '-', '.', '/', '<', '>', '?', '[', '\\', '\"', ']', '^', '\x7B', '|', '\x7D'>) + -> ctll::push; static constexpr auto rule(f, ctll::term<'a'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(f, ctll::term<'e'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(f, ctll::term<'f'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(f, ctll::term<'n'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(f, ctll::term<'0'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(f, ctll::term<'r'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(f, ctll::term<'t'>) - -> ctll::push; + -> ctll::push; - static constexpr auto rule(g, ctll::term<'s'>) -> ctll::push< - ctll::anything, - ctll::term<'c'>, - ctll::term<'i'>, - ctll::term<'i'>, - class_named_ascii>; - static constexpr auto rule(g, ctll::term<'l'>) - -> ctll::push; + static constexpr auto rule(g, ctll::term<'s'>) + -> ctll:: + push, ctll::term<'i'>, ctll::term<'i'>, class_named_ascii>; + static constexpr auto rule(g, ctll::term<'l'>) -> ctll::push; - static constexpr auto rule(h, ctll::term<'r'>) -> ctll::push< - ctll::anything, - ctll::term<'i'>, - ctll::term<'n'>, - ctll::term<'t'>, - class_named_print>; - static constexpr auto rule(h, ctll::term<'u'>) -> ctll::push< - ctll::anything, - ctll::term<'n'>, - ctll::term<'c'>, - ctll::term<'t'>, - class_named_punct>; + static constexpr auto rule(h, ctll::term<'r'>) + -> ctll:: + push, ctll::term<'n'>, ctll::term<'t'>, class_named_print>; + static constexpr auto rule(h, ctll::term<'u'>) + -> ctll:: + push, ctll::term<'c'>, ctll::term<'t'>, class_named_punct>; - static constexpr auto rule(hexdec_repeat, ctll::term<'\x7D'>) - -> ctll::epsilon; + static constexpr auto rule(hexdec_repeat, ctll::term<'\x7D'>) -> ctll::epsilon; static constexpr auto - rule(hexdec_repeat, ctll::set<'0', 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push; + rule(hexdec_repeat, ctll::set<'0', 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; static constexpr auto rule(i, ctll::term<'^'>) -> ctll::push< - ctll::anything, - class_named_name, - negate_class_named, - ctll::term<':'>, - ctll::term<']'>>; + ctll::anything, + class_named_name, + negate_class_named, + ctll::term<':'>, + ctll::term<']'>>; static constexpr auto rule(i, ctll::term<'x'>) -> ctll::push< - ctll::anything, - ctll::term<'d'>, - ctll::term<'i'>, - ctll::term<'g'>, - ctll::term<'i'>, - ctll::term<'t'>, - class_named_xdigit, - ctll::term<':'>, - ctll::term<']'>>; + ctll::anything, + ctll::term<'d'>, + ctll::term<'i'>, + ctll::term<'g'>, + ctll::term<'i'>, + ctll::term<'t'>, + class_named_xdigit, + ctll::term<':'>, + ctll::term<']'>>; static constexpr auto rule(i, ctll::term<'d'>) -> ctll::push< - ctll::anything, - ctll::term<'i'>, - ctll::term<'g'>, - ctll::term<'i'>, - ctll::term<'t'>, - class_named_digit, - ctll::term<':'>, - ctll::term<']'>>; + ctll::anything, + ctll::term<'i'>, + ctll::term<'g'>, + ctll::term<'i'>, + ctll::term<'t'>, + class_named_digit, + ctll::term<':'>, + ctll::term<']'>>; static constexpr auto rule(i, ctll::term<'b'>) -> ctll::push< - ctll::anything, - ctll::term<'l'>, - ctll::term<'a'>, - ctll::term<'n'>, - ctll::term<'k'>, - class_named_blank, - ctll::term<':'>, - ctll::term<']'>>; + ctll::anything, + ctll::term<'l'>, + ctll::term<'a'>, + ctll::term<'n'>, + ctll::term<'k'>, + class_named_blank, + ctll::term<':'>, + ctll::term<']'>>; static constexpr auto rule(i, ctll::term<'c'>) -> ctll::push< - ctll::anything, - ctll::term<'n'>, - ctll::term<'t'>, - ctll::term<'r'>, - ctll::term<'l'>, - class_named_cntrl, - ctll::term<':'>, - ctll::term<']'>>; + ctll::anything, + ctll::term<'n'>, + ctll::term<'t'>, + ctll::term<'r'>, + ctll::term<'l'>, + class_named_cntrl, + ctll::term<':'>, + ctll::term<']'>>; static constexpr auto rule(i, ctll::term<'w'>) -> ctll::push< - ctll::anything, - ctll::term<'o'>, - ctll::term<'r'>, - ctll::term<'d'>, - class_named_word, - ctll::term<':'>, - ctll::term<']'>>; + ctll::anything, + ctll::term<'o'>, + ctll::term<'r'>, + ctll::term<'d'>, + class_named_word, + ctll::term<':'>, + ctll::term<']'>>; static constexpr auto rule(i, ctll::term<'l'>) -> ctll::push< - ctll::anything, - ctll::term<'o'>, - ctll::term<'w'>, - ctll::term<'e'>, - ctll::term<'r'>, - class_named_lower, - ctll::term<':'>, - ctll::term<']'>>; + ctll::anything, + ctll::term<'o'>, + ctll::term<'w'>, + ctll::term<'e'>, + ctll::term<'r'>, + class_named_lower, + ctll::term<':'>, + ctll::term<']'>>; static constexpr auto rule(i, ctll::term<'s'>) -> ctll::push< - ctll::anything, - ctll::term<'p'>, - ctll::term<'a'>, - ctll::term<'c'>, - ctll::term<'e'>, - class_named_space, - ctll::term<':'>, - ctll::term<']'>>; + ctll::anything, + ctll::term<'p'>, + ctll::term<'a'>, + ctll::term<'c'>, + ctll::term<'e'>, + class_named_space, + ctll::term<':'>, + ctll::term<']'>>; static constexpr auto rule(i, ctll::term<'u'>) -> ctll::push< - ctll::anything, - ctll::term<'p'>, - ctll::term<'p'>, - ctll::term<'e'>, - ctll::term<'r'>, - class_named_upper, - ctll::term<':'>, - ctll::term<']'>>; + ctll::anything, + ctll::term<'p'>, + ctll::term<'p'>, + ctll::term<'e'>, + ctll::term<'r'>, + class_named_upper, + ctll::term<':'>, + ctll::term<']'>>; static constexpr auto rule(i, ctll::term<'g'>) -> ctll::push< - ctll::anything, - ctll::term<'r'>, - ctll::term<'a'>, - ctll::term<'p'>, - ctll::term<'h'>, - class_named_graph, - ctll::term<':'>, - ctll::term<']'>>; + ctll::anything, + ctll::term<'r'>, + ctll::term<'a'>, + ctll::term<'p'>, + ctll::term<'h'>, + class_named_graph, + ctll::term<':'>, + ctll::term<']'>>; static constexpr auto rule(i, ctll::term<'a'>) - -> ctll::push, ctll::term<']'>>; + -> ctll::push, ctll::term<']'>>; static constexpr auto rule(i, ctll::term<'p'>) - -> ctll::push, ctll::term<']'>>; + -> ctll::push, ctll::term<']'>>; static constexpr auto rule(j, ctll::term<'\\'>) - -> ctll::push; - static constexpr auto - rule(j, ctll::set<'!', '$', '\x28', '\x29', '*', '+', ',', '.', '/', ':', '<', '=', '>', '?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', '^', '0', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '\x7B', '|', '\x7D', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push; + -> ctll::push; + static constexpr auto rule(j, ctll::set<'!', '$', '\x28', '\x29', '*', '+', ',', '.', '/', ':', '<', '=', '>', '?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', '^', '0', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '\x7B', '|', '\x7D', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; static constexpr auto rule(j, _others) - -> ctll::push; + -> ctll::push; static constexpr auto rule(j, ctll::set<'-', '[', ']'>) -> ctll::reject; static constexpr auto rule(k, ctll::term<'\x7B'>) -> ctll::push< - create_hexdec, - ctll::anything, - ctll::set< - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f'>, - push_hexdec, - hexdec_repeat, - ctll::term<'\x7D'>, - finish_hexdec>; + create_hexdec, + ctll::anything, + ctll::set< + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f'>, + push_hexdec, + hexdec_repeat, + ctll::term<'\x7D'>, + finish_hexdec>; static constexpr auto - rule(k, ctll::set<'0', 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push< - create_hexdec, - ctll::anything, - push_hexdec, - ctll::set< - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f'>, - push_hexdec, - ctll::set< - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f'>, - push_hexdec, - ctll::set< - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f'>, - push_hexdec, - finish_hexdec>; + rule(k, ctll::set<'0', 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push< + create_hexdec, + ctll::anything, + push_hexdec, + ctll::set< + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f'>, + push_hexdec, + ctll::set< + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f'>, + push_hexdec, + ctll::set< + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f'>, + push_hexdec, + finish_hexdec>; static constexpr auto rule(l, ctll::term<'\x7B'>) -> ctll::push< - create_hexdec, - ctll::anything, - ctll::set< - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f'>, - push_hexdec, - hexdec_repeat, - ctll::term<'\x7D'>, - finish_hexdec>; + create_hexdec, + ctll::anything, + ctll::set< + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f'>, + push_hexdec, + hexdec_repeat, + ctll::term<'\x7D'>, + finish_hexdec>; static constexpr auto - rule(l, ctll::set<'0', 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push< - create_hexdec, - ctll::anything, - push_hexdec, - ctll::set< - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f'>, - push_hexdec, - finish_hexdec>; + rule(l, ctll::set<'0', 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push< + create_hexdec, + ctll::anything, + push_hexdec, + ctll::set< + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f'>, + push_hexdec, + finish_hexdec>; - static constexpr auto - rule(m, ctll::set<'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push< - ctll::anything, - create_number, - number2, - ctll::term<'\x7D'>, - make_back_reference>; + static constexpr auto rule(m, ctll::set<'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll:: + push, make_back_reference>; static constexpr auto rule(m, ctll::term<'-'>) - -> ctll::push< - ctll::anything, - number, - ctll::term<'\x7D'>, - make_relative_back_reference>; + -> ctll::push, make_relative_back_reference>; static constexpr auto rule(m, ctll::set<'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'>) - -> ctll::push< - ctll::anything, - push_name, - block_name2, - ctll::term<'\x7D'>, - make_back_reference>; + -> ctll:: + push, make_back_reference>; static constexpr auto - rule(mod, ctll::set<'!', '$', '\x28', '\x29', ',', '-', '.', '/', '0', ':', '<', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', '\"', ']', '^', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '|', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::epsilon; + rule(mod, ctll::set<'!', '$', '\x28', '\x29', ',', '-', '.', '/', '0', ':', '<', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', '\"', ']', '^', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '|', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::epsilon; static constexpr auto rule(mod, ctll::epsilon) -> ctll::epsilon; static constexpr auto rule(mod, _others) -> ctll::epsilon; - static constexpr auto rule(mod, ctll::term<'?'>) - -> ctll::push; - static constexpr auto rule(mod, ctll::term<'+'>) - -> ctll::push; - static constexpr auto rule(mod, ctll::set<'*', '\x7B', '\x7D'>) - -> ctll::reject; + static constexpr auto rule(mod, ctll::term<'?'>) -> ctll::push; + static constexpr auto rule(mod, ctll::term<'+'>) -> ctll::push; + static constexpr auto rule(mod, ctll::set<'*', '\x7B', '\x7D'>) -> ctll::reject; static constexpr auto rule(mode_switch2, ctll::term<'i'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(mode_switch2, ctll::term<'c'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(mode_switch2, ctll::term<'m'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(mode_switch2, ctll::term<'s'>) - -> ctll::push; - static constexpr auto rule(mode_switch2, ctll::term<'\x29'>) - -> ctll::push; + -> ctll::push; + static constexpr auto rule(mode_switch2, ctll::term<'\x29'>) -> ctll::push; - static constexpr auto - rule(n, ctll::set<'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push< - ctll::anything, - create_number, - number2, - repeat_ab, - ctll::term<'\x7D'>, - mod>; + static constexpr auto rule(n, ctll::set<'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push, mod>; static constexpr auto rule(n, ctll::term<'\x7D'>) - -> ctll::push; + -> ctll::push; - static constexpr auto rule(number2, ctll::set<',', '\x7D'>) - -> ctll::epsilon; - static constexpr auto - rule(number2, ctll::set<'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push; + static constexpr auto rule(number2, ctll::set<',', '\x7D'>) -> ctll::epsilon; + static constexpr auto rule(number2, ctll::set<'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; - static constexpr auto - rule(number, ctll::set<'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push; + static constexpr auto rule(number, ctll::set<'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; static constexpr auto rule(o, ctll::set<'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'>) - -> ctll::push< - ctll::anything, - push_name, - block_name2, - ctll::term<'>'>, - content_in_capture, - make_capture_with_name, - ctll::term<'\x29'>>; - static constexpr auto rule(o, ctll::term<'!'>) - -> ctll::push< - ctll::anything, - reset_capture, - start_lookbehind_negative, - content_in_capture, - look_finish, - ctll::term<'\x29'>>; - static constexpr auto rule(o, ctll::term<'='>) - -> ctll::push< - ctll::anything, - reset_capture, - start_lookbehind_positive, - content_in_capture, - look_finish, - ctll::term<'\x29'>>; + -> ctll::push< + ctll::anything, + push_name, + block_name2, + ctll::term<'>'>, + content_in_capture, + make_capture_with_name, + ctll::term<'\x29'>>; + static constexpr auto rule(o, ctll::term<'!'>) -> ctll::push< + ctll::anything, + reset_capture, + start_lookbehind_negative, + content_in_capture, + look_finish, + ctll::term<'\x29'>>; + static constexpr auto rule(o, ctll::term<'='>) -> ctll::push< + ctll::anything, + reset_capture, + start_lookbehind_positive, + content_in_capture, + look_finish, + ctll::term<'\x29'>>; - static constexpr auto rule(p, ctll::term<'p'>) -> ctll::push< - ctll::anything, - ctll::term<'h'>, - ctll::term<'a'>, - class_named_alpha>; - static constexpr auto rule(p, ctll::term<'n'>) -> ctll::push< - ctll::anything, - ctll::term<'u'>, - ctll::term<'m'>, - class_named_alnum>; + static constexpr auto rule(p, ctll::term<'p'>) + -> ctll::push, ctll::term<'a'>, class_named_alpha>; + static constexpr auto rule(p, ctll::term<'n'>) + -> ctll::push, ctll::term<'m'>, class_named_alnum>; - static constexpr auto rule(property_name2, ctll::term<'\x7D'>) - -> ctll::epsilon; + static constexpr auto rule(property_name2, ctll::term<'\x7D'>) -> ctll::epsilon; static constexpr auto rule(property_name2, ctll::term<'='>) - -> ctll::push; - static constexpr auto - rule(property_name2, ctll::set<'0', '.', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push; + -> ctll::push; + static constexpr auto rule(property_name2, ctll::set<'0', '.', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; static constexpr auto rule(property_name, ctll::set<'0', '.', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push; + -> ctll::push; - static constexpr auto rule(property_value2, ctll::term<'\x7D'>) - -> ctll::epsilon; - static constexpr auto - rule(property_value2, ctll::set<'0', '.', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push; + static constexpr auto rule(property_value2, ctll::term<'\x7D'>) -> ctll::epsilon; + static constexpr auto rule(property_value2, ctll::set<'0', '.', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; - static constexpr auto - rule(property_value, ctll::set<'0', '.', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push; + static constexpr auto rule(property_value, ctll::set<'0', '.', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; static constexpr auto rule(range, ctll::set<'!', '$', '\x28', '\x29', '*', '+', ',', '.', '/', '0', ':', '<', '=', '>', '?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', '\"', ']', '^', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '\x7B', '|', '\x7D', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::epsilon; + -> ctll::epsilon; static constexpr auto rule(range, ctll::epsilon) -> ctll::epsilon; static constexpr auto rule(range, _others) -> ctll::epsilon; - static constexpr auto rule(range, ctll::term<'-'>) - -> ctll::push; + static constexpr auto rule(range, ctll::term<'-'>) -> ctll::push; static constexpr auto rule(repeat, ctll::set<'!', '$', '\x28', '\x29', ',', '-', '.', '/', '0', ':', '<', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', '\"', ']', '^', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '|', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::epsilon; + -> ctll::epsilon; static constexpr auto rule(repeat, ctll::epsilon) -> ctll::epsilon; static constexpr auto rule(repeat, _others) -> ctll::epsilon; static constexpr auto rule(repeat, ctll::term<'?'>) - -> ctll::push; - static constexpr auto rule(repeat, ctll::term<'\x7B'>) - -> ctll::push; + -> ctll::push; + static constexpr auto rule(repeat, ctll::term<'\x7B'>) -> ctll::push; static constexpr auto rule(repeat, ctll::term<'+'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(repeat, ctll::term<'*'>) - -> ctll::push; + -> ctll::push; static constexpr auto rule(repeat, ctll::term<'\x7D'>) -> ctll::reject; static constexpr auto rule(set2a, ctll::term<']'>) -> ctll::epsilon; static constexpr auto rule(set2a, ctll::term<'['>) - -> ctll:: - push, i, range, set_start, set2b>; + -> ctll::push, i, range, set_start, set2b>; static constexpr auto rule(set2a, ctll::term<'\\'>) - -> ctll::push; - static constexpr auto rule(set2a, ctll::set<'!', '$', '\x28', '\x29', '*', '+', ',', '.', '/', ':', '<', '=', '>', '?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', '^', '0', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '\x7B', '|', '\x7D', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; + static constexpr auto + rule(set2a, ctll::set<'!', '$', '\x28', '\x29', '*', '+', ',', '.', '/', ':', '<', '=', '>', '?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', '^', '0', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '\x7B', '|', '\x7D', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) -> ctll::push; static constexpr auto rule(set2a, _others) - -> ctll::push; + -> ctll::push; static constexpr auto rule(set2a, ctll::term<'-'>) -> ctll::reject; static constexpr auto rule(set2b, ctll::term<']'>) -> ctll::epsilon; static constexpr auto rule(set2b, ctll::term<'['>) - -> ctll:: - push, i, range, set_combine, set2b>; + -> ctll::push, i, range, set_combine, set2b>; static constexpr auto rule(set2b, ctll::term<'\\'>) - -> ctll::push; - static constexpr auto rule(set2b, ctll::set<'!', '$', '\x28', '\x29', '*', '+', ',', '.', '/', ':', '<', '=', '>', '?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', '^', '0', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '\x7B', '|', '\x7D', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll:: - push; - static constexpr auto rule( - set2b, - _others - ) -> ctll::push; + -> ctll::push; + static constexpr auto + rule(set2b, ctll::set<'!', '$', '\x28', '\x29', '*', '+', ',', '.', '/', ':', '<', '=', '>', '?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', '^', '0', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '\x7B', '|', '\x7D', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; + static constexpr auto rule(set2b, _others) + -> ctll::push; static constexpr auto rule(set2b, ctll::term<'-'>) -> ctll::reject; - static constexpr auto rule(string2, ctll::set<'\x29', '|'>) - -> ctll::epsilon; + static constexpr auto rule(string2, ctll::set<'\x29', '|'>) -> ctll::epsilon; static constexpr auto rule(string2, ctll::epsilon) -> ctll::epsilon; static constexpr auto rule(string2, ctll::term<'\\'>) - -> ctll:: - push; + -> ctll::push; static constexpr auto rule(string2, ctll::term<'['>) - -> ctll::push; - static constexpr auto rule(string2, ctll::term<'\x28'>) -> ctll::push< - ctll::anything, - prepare_capture, - block, - repeat, - string2, - make_sequence>; - static constexpr auto rule(string2, ctll::term<'^'>) -> ctll::push< - ctll::anything, - push_assert_begin, - repeat, - string2, - make_sequence>; - static constexpr auto rule(string2, ctll::term<'$'>) -> ctll::push< - ctll::anything, - push_assert_end, - repeat, - string2, - make_sequence>; - static constexpr auto - rule(string2, ctll::set<'!', ',', '/', ':', '<', '0', '-', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', ']', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) - -> ctll::push< - ctll::anything, - push_character, - repeat, - string2, - make_sequence>; - static constexpr auto rule( - string2, - _others - ) -> ctll:: - push; + -> ctll::push; + static constexpr auto rule(string2, ctll::term<'\x28'>) + -> ctll::push; + static constexpr auto rule(string2, ctll::term<'^'>) + -> ctll::push; + static constexpr auto rule(string2, ctll::term<'$'>) + -> ctll::push; + static constexpr auto rule(string2, ctll::set<'!', ',', '/', ':', '<', '0', '-', '=', '>', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\"', ']', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9'>) + -> ctll::push; + static constexpr auto rule(string2, _others) + -> ctll::push; static constexpr auto rule(string2, ctll::term<'.'>) - -> ctll::push< - ctll::anything, - push_character_anything, - repeat, - string2, - make_sequence>; - static constexpr auto - rule(string2, ctll::set<'*', '+', '?', '\x7B', '\x7D'>) -> ctll::reject; + -> ctll::push; + static constexpr auto rule(string2, ctll::set<'*', '+', '?', '\x7B', '\x7D'>) -> ctll::reject; }; } // namespace ctre @@ -2617,18 +2283,10 @@ namespace ctre { constexpr flags(const flags&) = default; constexpr flags(flags&&) = default; - constexpr CTRE_FORCE_INLINE flags(ctre::singleline v) noexcept { - set_flag(v); - } - constexpr CTRE_FORCE_INLINE flags(ctre::multiline v) noexcept { - set_flag(v); - } - constexpr CTRE_FORCE_INLINE flags(ctre::case_sensitive v) noexcept { - set_flag(v); - } - constexpr CTRE_FORCE_INLINE flags(ctre::case_insensitive v) noexcept { - set_flag(v); - } + constexpr CTRE_FORCE_INLINE flags(ctre::singleline v) noexcept { set_flag(v); } + constexpr CTRE_FORCE_INLINE flags(ctre::multiline v) noexcept { set_flag(v); } + constexpr CTRE_FORCE_INLINE flags(ctre::case_sensitive v) noexcept { set_flag(v); } + constexpr CTRE_FORCE_INLINE flags(ctre::case_insensitive v) noexcept { set_flag(v); } template constexpr CTRE_FORCE_INLINE flags(ctll::list) noexcept { @@ -2641,31 +2299,24 @@ namespace ctre { return f; } - constexpr friend CTRE_FORCE_INLINE auto - operator+(flags f, pcre::mode_case_sensitive) noexcept { + constexpr friend CTRE_FORCE_INLINE auto operator+(flags f, pcre::mode_case_sensitive) noexcept { f.case_insensitive = false; return f; } - constexpr friend CTRE_FORCE_INLINE auto - operator+(flags f, pcre::mode_singleline) noexcept { + constexpr friend CTRE_FORCE_INLINE auto operator+(flags f, pcre::mode_singleline) noexcept { f.multiline = false; return f; } - constexpr friend CTRE_FORCE_INLINE auto - operator+(flags f, pcre::mode_multiline) noexcept { + constexpr friend CTRE_FORCE_INLINE auto operator+(flags f, pcre::mode_multiline) noexcept { f.multiline = true; return f; } - constexpr CTRE_FORCE_INLINE void set_flag(ctre::singleline) noexcept { - multiline = false; - } + constexpr CTRE_FORCE_INLINE void set_flag(ctre::singleline) noexcept { multiline = false; } - constexpr CTRE_FORCE_INLINE void set_flag(ctre::multiline) noexcept { - multiline = true; - } + constexpr CTRE_FORCE_INLINE void set_flag(ctre::multiline) noexcept { multiline = true; } constexpr CTRE_FORCE_INLINE void set_flag(ctre::case_insensitive) noexcept { case_insensitive = true; @@ -2681,23 +2332,17 @@ namespace ctre { return f; } - constexpr CTRE_FORCE_INLINE auto - consumed_something(flags f, bool condition = true) { - if (condition) f.block_empty_match = false; + constexpr CTRE_FORCE_INLINE auto consumed_something(flags f, bool condition = true) { + if (condition) + f.block_empty_match = false; return f; } - constexpr CTRE_FORCE_INLINE bool cannot_be_empty_match(flags f) { - return f.block_empty_match; - } + constexpr CTRE_FORCE_INLINE bool cannot_be_empty_match(flags f) { return f.block_empty_match; } - constexpr CTRE_FORCE_INLINE bool multiline_mode(flags f) { - return f.multiline; - } + constexpr CTRE_FORCE_INLINE bool multiline_mode(flags f) { return f.multiline; } - constexpr CTRE_FORCE_INLINE bool is_case_insensitive(flags f) { - return f.case_insensitive; - } + constexpr CTRE_FORCE_INLINE bool is_case_insensitive(flags f) { return f.case_insensitive; } } // namespace ctre @@ -2718,15 +2363,14 @@ namespace ctre { public: template - static inline constexpr bool value = - decltype(test(std::declval()))(); + static inline constexpr bool value = decltype(test(std::declval()))(); }; template constexpr CTRE_FORCE_INLINE bool is_ascii_alpha(T v) { return ( - (v >= static_cast('a') && v <= static_cast('z')) || - (v >= static_cast('A') && v <= static_cast('Z')) + (v >= static_cast('a') && v <= static_cast('z')) || + (v >= static_cast('A') && v <= static_cast('Z')) ); } @@ -2743,8 +2387,7 @@ namespace ctre { template struct character { template - CTRE_FORCE_INLINE static constexpr bool - match_char(CharT value, const flags& f) noexcept { + CTRE_FORCE_INLINE static constexpr bool match_char(CharT value, const flags& f) noexcept { if constexpr (is_ascii_alpha(V)) { if (is_case_insensitive(f)) { if (value == (V ^ static_cast(0x20))) { @@ -2759,8 +2402,7 @@ namespace ctre { template struct negative_set { template - CTRE_FORCE_INLINE static constexpr bool - match_char(CharT value, const flags& f) noexcept { + CTRE_FORCE_INLINE static constexpr bool match_char(CharT value, const flags& f) noexcept { return !(Content::match_char(value, f) || ... || false); } }; @@ -2768,8 +2410,7 @@ namespace ctre { template struct set { template - CTRE_FORCE_INLINE static constexpr bool - match_char(CharT value, const flags& f) noexcept { + CTRE_FORCE_INLINE static constexpr bool match_char(CharT value, const flags& f) noexcept { return (Content::match_char(value, f) || ... || false); } }; @@ -2780,8 +2421,7 @@ namespace ctre { template struct negate { template - CTRE_FORCE_INLINE static constexpr bool - match_char(CharT value, const flags& f) noexcept { + CTRE_FORCE_INLINE static constexpr bool match_char(CharT value, const flags& f) noexcept { return !(Content::match_char(value, f) || ... || false); } }; @@ -2789,18 +2429,15 @@ namespace ctre { template struct char_range { template - CTRE_FORCE_INLINE static constexpr bool - match_char(CharT value, const flags& f) noexcept { - if constexpr (is_ascii_alpha_lowercase(A) && - is_ascii_alpha_lowercase(B)) { + CTRE_FORCE_INLINE static constexpr bool match_char(CharT value, const flags& f) noexcept { + if constexpr (is_ascii_alpha_lowercase(A) && is_ascii_alpha_lowercase(B)) { if (is_case_insensitive(f)) { if (value >= (A ^ static_cast(0x20)) && value <= (B ^ static_cast(0x20))) { return true; // } } - } else if constexpr (is_ascii_alpha_uppercase(A) && - is_ascii_alpha_uppercase(B)) { + } else if constexpr (is_ascii_alpha_uppercase(A) && is_ascii_alpha_uppercase(B)) { if (is_case_insensitive(f)) { if (value >= (A ^ static_cast(0x20)) && value <= (B ^ static_cast(0x20))) { @@ -2812,86 +2449,81 @@ namespace ctre { } }; using word_chars = - set, - char_range<'a', 'z'>, - char_range<'0', '9'>, - character<'_'>>; + set, char_range<'a', 'z'>, char_range<'0', '9'>, character<'_'>>; using space_chars = enumeration<' ', '\t', '\n', '\v', '\f', '\r'>; using vertical_space_chars = enumeration< - char {0x000A}, // Linefeed (LF) - char {0x000B}, // Vertical tab (VT) - char {0x000C}, // Form feed (FF) - char {0x000D}, // Carriage return (CR) - char32_t {0x0085}, // Next line (NEL) - char32_t {0x2028}, // Line separator - char32_t {0x2029} // Paragraph separator - >; + char { 0x000A }, // Linefeed (LF) + char { 0x000B }, // Vertical tab (VT) + char { 0x000C }, // Form feed (FF) + char { 0x000D }, // Carriage return (CR) + char32_t { 0x0085 }, // Next line (NEL) + char32_t { 0x2028 }, // Line separator + char32_t { 0x2029 } // Paragraph separator + >; using horizontal_space_chars = enumeration< - char {0x0009}, // Horizontal tab (HT) - char {0x0020}, // Space - char32_t {0x00A0}, // Non-break space - char32_t {0x1680}, // Ogham space mark - char32_t {0x180E}, // Mongolian vowel separator - char32_t {0x2000}, // En quad - char32_t {0x2001}, // Em quad - char32_t {0x2002}, // En space - char32_t {0x2003}, // Em space - char32_t {0x2004}, // Three-per-em space - char32_t {0x2005}, // Four-per-em space - char32_t {0x2006}, // Six-per-em space - char32_t {0x2007}, // Figure space - char32_t {0x2008}, // Punctuation space - char32_t {0x2009}, // Thin space - char32_t {0x200A}, // Hair space - char32_t {0x202F}, // Narrow no-break space - char32_t {0x205F}, // Medium mathematical space - char32_t {0x3000} // Ideographic space - >; + char { 0x0009 }, // Horizontal tab (HT) + char { 0x0020 }, // Space + char32_t { 0x00A0 }, // Non-break space + char32_t { 0x1680 }, // Ogham space mark + char32_t { 0x180E }, // Mongolian vowel separator + char32_t { 0x2000 }, // En quad + char32_t { 0x2001 }, // Em quad + char32_t { 0x2002 }, // En space + char32_t { 0x2003 }, // Em space + char32_t { 0x2004 }, // Three-per-em space + char32_t { 0x2005 }, // Four-per-em space + char32_t { 0x2006 }, // Six-per-em space + char32_t { 0x2007 }, // Figure space + char32_t { 0x2008 }, // Punctuation space + char32_t { 0x2009 }, // Thin space + char32_t { 0x200A }, // Hair space + char32_t { 0x202F }, // Narrow no-break space + char32_t { 0x205F }, // Medium mathematical space + char32_t { 0x3000 } // Ideographic space + >; - using alphanum_chars = - set, char_range<'a', 'z'>, char_range<'0', '9'>>; + using alphanum_chars = set, char_range<'a', 'z'>, char_range<'0', '9'>>; using alpha_chars = set, char_range<'a', 'z'>>; - using xdigit_chars = - set, char_range<'a', 'f'>, char_range<'0', '9'>>; + using xdigit_chars = set, char_range<'a', 'f'>, char_range<'0', '9'>>; using punct_chars = enumeration< - '!', - '"', - '#', - '$', - '%', - '&', - '\'', - '(', - ')', - '*', - '+', - ',', - '-', - '.', - '/', - ':', - ';', - '<', - '=', - '>', - '?', - '@', - '[', - '\\', - ']', - '^', - '_', - '`', - '{', - '|', - '}', - '~'>; + '!', + '"', + '#', + '$', + '%', + '&', + '\'', + '(', + ')', + '*', + '+', + ',', + '-', + '.', + '/', + ':', + ';', + '<', + '=', + '>', + '?', + '@', + '[', + '\\', + ']', + '^', + '_', + '`', + '{', + '|', + '}', + '~'>; using digit_chars = char_range<'0', '9'>; @@ -3083,7 +2715,7 @@ namespace uni { namespace detail { enum class binary_prop; - constexpr int propnamecomp(std::string_view sa, std::string_view sb); + constexpr int propnamecomp(std::string_view sa, std::string_view sb); constexpr binary_prop binary_prop_from_string(std::string_view s); template @@ -3126,11 +2758,9 @@ namespace ctre { struct property; template - using make_binary_property = - binary_property, Type>; + using make_binary_property = binary_property, Type>; template - using make_property = - property, Type, Value>; + using make_property = property, Type, Value>; // unicode TS#18 level 1.2 general_category template @@ -3160,7 +2790,8 @@ namespace ctre { template inline static constexpr bool match_char(CharT c, const flags&) noexcept { for (uni::script sc : uni::cp_script_extensions(c)) { - if (sc == Script) return true; + if (sc == Script) + return true; } return false; } @@ -3186,8 +2817,7 @@ namespace ctre { template // Make it always a template as propnamecomp isn't // defined yet - constexpr property_type property_type_from_name(std::string_view str - ) noexcept { + constexpr property_type property_type_from_name(std::string_view str) noexcept { using namespace std::string_view_literals; if (uni::detail::propnamecomp(str, "script"sv) == 0 || uni::detail::propnamecomp(str, "sc"sv) == 0) { @@ -3214,9 +2844,8 @@ namespace ctre { template struct property_builder { - static constexpr char name[sizeof...(Name)] {static_cast(Name)...}; - static constexpr property_type type = - property_type_from_name(get_string_view(name)); + static constexpr char name[sizeof...(Name)] { static_cast(Name)... }; + static constexpr property_type type = property_type_from_name(get_string_view(name)); using helper = property_type_builder; @@ -3232,9 +2861,8 @@ namespace ctre { struct property_type_builder { template static constexpr auto get() { - constexpr char value[sizeof...(Value)] {static_cast(Value)...}; - constexpr auto sc = - uni::detail::script_from_string(get_string_view(value)); + constexpr char value[sizeof...(Value)] { static_cast(Value)... }; + constexpr auto sc = uni::detail::script_from_string(get_string_view(value)); if constexpr (uni::detail::is_unknown(sc)) { return ctll::reject {}; } else { @@ -3247,9 +2875,8 @@ namespace ctre { struct property_type_builder { template static constexpr auto get() { - constexpr char value[sizeof...(Value)] {static_cast(Value)...}; - constexpr auto sc = - uni::detail::script_from_string(get_string_view(value)); + constexpr char value[sizeof...(Value)] { static_cast(Value)... }; + constexpr auto sc = uni::detail::script_from_string(get_string_view(value)); if constexpr (uni::detail::is_unknown(sc)) { return ctll::reject {}; } else { @@ -3262,7 +2889,7 @@ namespace ctre { struct property_type_builder { template static constexpr auto get() { - constexpr char value[sizeof...(Value)] {static_cast(Value)...}; + constexpr char value[sizeof...(Value)] { static_cast(Value)... }; constexpr auto age = uni::detail::age_from_string(get_string_view(value)); if constexpr (uni::detail::is_unassigned(age)) { return ctll::reject {}; @@ -3276,9 +2903,8 @@ namespace ctre { struct property_type_builder { template static constexpr auto get() { - constexpr char value[sizeof...(Value)] {static_cast(Value)...}; - constexpr auto block = - uni::detail::block_from_string(get_string_view(value)); + constexpr char value[sizeof...(Value)] { static_cast(Value)... }; + constexpr auto block = uni::detail::block_from_string(get_string_view(value)); if constexpr (uni::detail::is_unknown(block)) { return ctll::reject {}; } else { @@ -3298,13 +2924,13 @@ namespace ctre { auto convert_to_capture(ctll::list) -> capture; template auto convert_to_named_capture(ctll::list) - -> capture_with_name; + -> capture_with_name; template < - template - typename CycleType, - size_t A, - size_t B, - typename... Content> + template + typename CycleType, + size_t A, + size_t B, + typename... Content> auto convert_to_repeat(ctll::list) -> CycleType; template