From f00f16aa68d56cc3a4092c9d06d6061216a97f91 Mon Sep 17 00:00:00 2001 From: James Ball Date: Mon, 17 Nov 2025 16:14:14 -0800 Subject: [PATCH 1/3] Add tests for norm rules with Unicode character sequences inside norm rules. Signed-off-by: James Ball --- tests/norm-rule/expected/test-norm-rules.adoc | 5 ++++- tests/norm-rule/expected/test-norm-rules.html | 7 ++++++- tests/norm-rule/expected/test-norm-rules.json | 15 ++++++++++++++- tests/norm-rule/expected/test-norm-rules.xlsx | Bin 8121 -> 8174 bytes tests/norm-rule/expected/test-norm-tags.json | 4 +++- tests/norm-rule/test.adoc | 9 ++++++++- tests/norm-rule/test.yaml | 2 ++ 7 files changed, 37 insertions(+), 5 deletions(-) diff --git a/tests/norm-rule/expected/test-norm-rules.adoc b/tests/norm-rule/expected/test-norm-rules.adoc index cdc2f9c..58bd9b2 100644 --- a/tests/norm-rule/expected/test-norm-rules.adoc +++ b/tests/norm-rule/expected/test-norm-rules.adoc @@ -10,7 +10,10 @@ | A few words | Rule Summary | extension | Rule Kind | [Zicsr, ABC] | Rule Instances -| inside inline a| link:test.html#norm:inline[norm:inline] +| inside > > inline a| link:test.html#norm:inline[norm:inline] + +.1+| infinity +| abc ∞ def a| link:test.html#norm:infinity[norm:infinity] .1+| no_tag | Normative rule without tag/tags | Rule Summary diff --git a/tests/norm-rule/expected/test-norm-rules.html b/tests/norm-rule/expected/test-norm-rules.html index 701e47f..c3348b6 100644 --- a/tests/norm-rule/expected/test-norm-rules.html +++ b/tests/norm-rule/expected/test-norm-rules.html @@ -123,9 +123,14 @@

my-chapter_name

Rule Instances - inside inline + inside > &gt; inline norm:inline + + infinity + abc &#x221e; def + norm:infinity + no_tag Normative rule without tag/tags diff --git a/tests/norm-rule/expected/test-norm-rules.json b/tests/norm-rule/expected/test-norm-rules.json index 7b1b92d..7f29ce2 100644 --- a/tests/norm-rule/expected/test-norm-rules.json +++ b/tests/norm-rule/expected/test-norm-rules.json @@ -13,7 +13,20 @@ "tags": [ { "name": "norm:inline", - "text": "inside inline", + "text": "inside > &gt; inline", + "tag_filename": "/build/test-norm-tags.json", + "stds_doc_url": "test.html" + } + ] + }, + { + "name": "infinity", + "def_filename": "tests/norm-rule/test.yaml", + "chapter_name": "my-chapter_name", + "tags": [ + { + "name": "norm:infinity", + "text": "abc &#x221e; def", "tag_filename": "/build/test-norm-tags.json", "stds_doc_url": "test.html" } diff --git a/tests/norm-rule/expected/test-norm-rules.xlsx b/tests/norm-rule/expected/test-norm-rules.xlsx index b291e9a7af62ddadc2b70bd06d6785eaa292faba..a6e9235032b2bf39b2f47644d0213b103580da90 100644 GIT binary patch delta 3315 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 puN21(yLjY`J1YIp7<)mSrXVk`r3urCvUDntbU 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 > inline# outside inline. + +Infinity inside [#norm:infinity]#abc ∞ def# outside. + +// Define macro for Unicode greater-than-or-equal-to symbol. +:ge: ≥ + +Trying the {ge} macro. // SHOULD ALWAYS FAIL - Can't put inline tag at end of line. Before bad inline [#norm:bad-inline-1]# diff --git a/tests/norm-rule/test.yaml b/tests/norm-rule/test.yaml index 637cf53..2a85735 100644 --- a/tests/norm-rule/test.yaml +++ b/tests/norm-rule/test.yaml @@ -13,6 +13,8 @@ normative_rule_definitions: kind: extension instances: [Zicsr, ABC] tag: "norm:inline" + - name: infinity + tag: "norm:infinity" - name: no_tag summary: Normative rule without tag/tags - name: inline-with-hash From fed1ff3d4ae18a575855a8ad52546eae97542f0c Mon Sep 17 00:00:00 2001 From: James Ball Date: Fri, 21 Nov 2025 12:43:57 -0800 Subject: [PATCH 2/3] Convert adoc in tags to HTML for everything except adoc macro calls (e.g., 100 {le} 200). Signed-off-by: James Ball --- tests/norm-rule/expected/test-norm-rules.adoc | 46 ++++-- tests/norm-rule/expected/test-norm-rules.html | 73 ++++++++-- tests/norm-rule/expected/test-norm-rules.json | 132 ++++++++++++++++-- tests/norm-rule/expected/test-norm-rules.xlsx | Bin 8174 -> 8504 bytes tests/norm-rule/expected/test-norm-tags.json | 29 +++- tests/norm-rule/test.adoc | 36 +++-- tests/norm-rule/test.yaml | 22 ++- tools/create_normative_rules.rb | 118 ++++++++++++++-- 8 files changed, 392 insertions(+), 64 deletions(-) diff --git a/tests/norm-rule/expected/test-norm-rules.adoc b/tests/norm-rule/expected/test-norm-rules.adoc index 58bd9b2..743b53b 100644 --- a/tests/norm-rule/expected/test-norm-rules.adoc +++ b/tests/norm-rule/expected/test-norm-rules.adoc @@ -4,19 +4,16 @@ [cols="20%,60%,20%"] |=== -| Rule Name | Rule Description | Description Location +| Rule Name | Rule Description | Origin of Description .4+| inline -| A few words | Rule Summary -| extension | Rule Kind +| A few words | Rule's 'summary' property +| extension | Rule's 'kind' property | [Zicsr, ABC] | Rule Instances -| inside > &gt; inline a| link:test.html#norm:inline[norm:inline] - -.1+| infinity -| abc &#x221e; def a| link:test.html#norm:infinity[norm:infinity] +| inside inline a| link:test.html#norm:inline[norm:inline] .1+| no_tag -| Normative rule without tag/tags | Rule Summary +| Normative rule without tag/tags | Rule's 'summary' property .1+| inline-with-hash | includes a hash # symbol. a| link:test.html#norm:inline-with-hash[norm:inline-with-hash] @@ -24,7 +21,7 @@ .2+| paragraph-with-a-really-wide-rule-name | Here's a description. It's got 2 lines. - | Rule Description + | Rule's 'description' property | Paragraph without inline anchors a| link:test.html#norm:paragraph:no-inline-anchors[norm:paragraph:no-inline-anchors] .1+| inline-anchors-in-paragraph-entire @@ -42,6 +39,33 @@ It's got 2 lines. .1+| double_tags | This paragraph has two tags but we only ever get a tag for norm:def. a| link:test.html#norm:def[norm:def] +.1+| superscript +| xyz 2^32^ 123 a| link:test.html#norm:superscript[norm:superscript] + +.1+| subscript +| xyz X~i~ 123 a| link:test.html#norm:subscript[norm:subscript] + +.1+| inline-underline +| ABC [.underline]#inside tag# GHI a| link:test.html#norm:inline-underline[norm:inline-underline] + +.1+| paragraph-underline +| Paragraph underlined outside. a| link:test.html#norm:paragraph-underline[norm:paragraph-underline] + +.1+| unicode_name +| ABC &ge; DEF a| link:test.html#norm:unicode_name[norm:unicode_name] + +.1+| unicode_decimal_value +| ABC &#8805; DEF a| link:test.html#norm:unicode_decimal_value[norm:unicode_decimal_value] + +.1+| unicode_hexadecimal_value +| ABC &#x2265; DEF a| link:test.html#norm:unicode_hexadecimal_value[norm:unicode_hexadecimal_value] + +.1+| unicode_char +| ABC ≥ DEF a| link:test.html#norm:unicode_char[norm:unicode_char] + +.1+| macro_call +| 200 {ge} 100 a| link:test.html#norm:macro_call[norm:macro_call] + .1+| table1 | === WITH anchor @@ -161,8 +185,8 @@ Paragraph 3 a| link:test.html#norm:admonition:anchors-in-notes:entire-note[norm: | Paragraph Z a| link:test.html#norm:admonition:only-anchors-in-notes:note3[norm:admonition:only-anchors-in-notes:note3] .5+| admon5 -| One line description | Rule Description -| parameter | Rule Kind +| One line description | Rule's 'description' property +| parameter | Rule's 'kind' property | [MY_PARAMETER] | Rule Instances | Paragraph 1 a| link:test.html#norm:admonition:anchors-in-notes:note1[norm:admonition:anchors-in-notes:note1] | Paragraph 3 a| link:test.html#norm:admonition:anchors-in-notes:note3[norm:admonition:anchors-in-notes:note3] diff --git a/tests/norm-rule/expected/test-norm-rules.html b/tests/norm-rule/expected/test-norm-rules.html index c3348b6..9673034 100644 --- a/tests/norm-rule/expected/test-norm-rules.html +++ b/tests/norm-rule/expected/test-norm-rules.html @@ -5,6 +5,9 @@ Normative Rules per Chapter