]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
add terminals and parse rules for triple-quoted strings
authorAlan T. DeKok <aland@freeradius.org>
Fri, 22 Nov 2024 19:13:43 +0000 (14:13 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 22 Nov 2024 19:13:43 +0000 (14:13 -0500)
src/lib/util/value.c
src/lib/util/value.h

index b586bf3c696bb8e8f2abd9ae1b1f206b0a43be8c..08af6a1f8107fbd3f9ff4da0aa1153bb501a86f9 100644 (file)
@@ -568,6 +568,33 @@ fr_sbuff_parse_rules_t const value_parse_rules_backtick_quoted = {
                L(""), L("\n"), L("\r"), L("`"))
 };
 
+/*
+ *     And triple-quoted versions of the above.
+ */
+fr_sbuff_parse_rules_t const value_parse_rules_double_3quoted = {
+       .escapes = &fr_value_unescape_double,
+       .terminals = &FR_SBUFF_TERMS(
+               L(""), L("\n"), L("\r"), L("\"\"\""))
+};
+
+fr_sbuff_parse_rules_t const value_parse_rules_single_3quoted = {
+       .escapes = &fr_value_unescape_single,
+       .terminals = &FR_SBUFF_TERMS(
+               L(""), L("\n"), L("\r"), L("'''"))
+};
+
+fr_sbuff_parse_rules_t const value_parse_rules_solidus_3quoted = {
+       .escapes = &fr_value_unescape_solidus,
+       .terminals = &FR_SBUFF_TERMS(
+               L(""), L("\n"), L("\r"), L("///"))
+};
+
+fr_sbuff_parse_rules_t const value_parse_rules_backtick_3quoted = {
+       .escapes = &fr_value_unescape_backtick,
+       .terminals = &FR_SBUFF_TERMS(
+               L(""), L("\n"), L("\r"), L("```"))
+};
+
 /** Parse rules for quoted strings
  *
  * These parse rules should be used for internal parsing functions that
@@ -591,6 +618,15 @@ fr_sbuff_parse_rules_t const *value_parse_rules_quoted_char[UINT8_MAX] = {
        ['/']                           = &value_parse_rules_solidus_quoted,
        ['`']                           = &value_parse_rules_backtick_quoted
 };
+
+fr_sbuff_parse_rules_t const *value_parse_rules_3quoted[T_TOKEN_LAST] = {
+       [T_BARE_WORD]                   = &value_parse_rules_bareword_quoted,
+       [T_DOUBLE_QUOTED_STRING]        = &value_parse_rules_double_3quoted,
+       [T_SINGLE_QUOTED_STRING]        = &value_parse_rules_single_3quoted,
+       [T_SOLIDUS_QUOTED_STRING]       = &value_parse_rules_solidus_3quoted,
+       [T_BACK_QUOTED_STRING]          = &value_parse_rules_backtick_3quoted
+};
+
 /* clang-format on */
 /** @} */
 
index 63098a8fae4797052d0315a8ea2b3ab4e4108eeb..208084ca8f3681eb26891d412ffa8b5e1fa2e776 100644 (file)
@@ -466,6 +466,12 @@ extern fr_sbuff_parse_rules_t const value_parse_rules_solidus_quoted;
 extern fr_sbuff_parse_rules_t const value_parse_rules_backtick_quoted;
 extern fr_sbuff_parse_rules_t const *value_parse_rules_quoted[T_TOKEN_LAST];
 extern fr_sbuff_parse_rules_t const *value_parse_rules_quoted_char[UINT8_MAX];
+
+extern fr_sbuff_parse_rules_t const value_parse_rules_double_3quoted;
+extern fr_sbuff_parse_rules_t const value_parse_rules_single_3quoted;
+extern fr_sbuff_parse_rules_t const value_parse_rules_solidus_3quoted;
+extern fr_sbuff_parse_rules_t const value_parse_rules_backtick_3quoted;
+extern fr_sbuff_parse_rules_t const *value_parse_rules_3quoted[T_TOKEN_LAST];
 /** @} */
 
 /** @name Allocation and initialisation functions