Skip to content

Commit

Permalink
fill in localities in conjoined bibliographic cross-references: #700
Browse files Browse the repository at this point in the history
  • Loading branch information
opoudjis committed Jan 8, 2024
1 parent 254770b commit 95777dc
Show file tree
Hide file tree
Showing 8 changed files with 208 additions and 100 deletions.
81 changes: 81 additions & 0 deletions lib/metanorma/standoc/basicdoc.rng
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,89 @@
<ref name="pagebreak"/>
<ref name="hr"/>
<ref name="bookmark"/>
<ref name="amend"/>
</choice>
</define>
<define name="amend">
<element name="amend">
<ref name="AmendType"/>
</element>
</define>
<define name="AmendType">
<optional>
<attribute name="id">
<data type="ID"/>
</attribute>
</optional>
<attribute name="change">
<choice>
<value>add</value>
<value>modify</value>
<value>delete</value>
<value>replace</value>
</choice>
</attribute>
<optional>
<attribute name="path"/>
</optional>
<optional>
<attribute name="path_end"/>
</optional>
<optional>
<attribute name="title"/>
</optional>
<optional>
<element name="location">
<zeroOrMore>
<choice>
<ref name="locality"/>
<ref name="localityStack"/>
</choice>
</zeroOrMore>
</element>
</optional>
<optional>
<element name="description">
<zeroOrMore>
<ref name="BasicBlock"/>
</zeroOrMore>
</element>
</optional>
<optional>
<element name="newcontent">
<optional>
<attribute name="id">
<data type="ID"/>
</attribute>
</optional>
<zeroOrMore>
<ref name="BasicBlock"/>
</zeroOrMore>
</element>
</optional>
<zeroOrMore>
<ref name="classification"/>
</zeroOrMore>
<zeroOrMore>
<ref name="contributor"/>
</zeroOrMore>
</define>
<define name="classification">
<element name="classification">
<ref name="classification_tag"/>
<ref name="classification_value"/>
</element>
</define>
<define name="classification_tag">
<element name="tag">
<text/>
</element>
</define>
<define name="classification_value">
<element name="value">
<text/>
</element>
</define>
<define name="paragraph">
<element name="p">
<ref name="ParagraphType"/>
Expand Down
45 changes: 44 additions & 1 deletion lib/metanorma/standoc/biblio-standoc.rng
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,42 @@
-->
<include href="biblio.rng">
<define name="BibData">
<ref name="BibliographicItem"/>
<ref name="StandardBibliographicItem"/>
<optional>
<ref name="ext"/>
</optional>
</define>
<define name="docrelation">
<element name="relation">
<attribute name="type">
<ref name="DocRelationType"/>
</attribute>
<optional>
<element name="description">
<ref name="FormattedString"/>
</element>
</optional>
<element name="bibitem">
<ref name="StandardReducedBibliographicItem"/>
</element>
<choice>
<zeroOrMore>
<ref name="locality"/>
</zeroOrMore>
<zeroOrMore>
<ref name="localityStack"/>
</zeroOrMore>
</choice>
<choice>
<zeroOrMore>
<ref name="sourceLocality"/>
</zeroOrMore>
<zeroOrMore>
<ref name="sourceLocalityStack"/>
</zeroOrMore>
</choice>
</element>
</define>
</include>
<define name="ext">
<element name="ext">
Expand Down Expand Up @@ -161,4 +192,16 @@
</optional>
</element>
</define>
<define name="StandardBibliographicItem">
<ref name="BibliographicItem"/>
<zeroOrMore>
<ref name="amend"/>
</zeroOrMore>
</define>
<define name="StandardReducedBibliographicItem">
<ref name="ReducedBibliographicItem"/>
<zeroOrMore>
<ref name="amend"/>
</zeroOrMore>
</define>
</grammar>
11 changes: 11 additions & 0 deletions lib/metanorma/standoc/biblio.rng
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,9 @@
</element>
</define>
<define name="FullNameType">
<optional>
<ref name="name_abbreviation"/>
</optional>
<choice>
<group>
<zeroOrMore>
Expand All @@ -266,6 +269,11 @@
<ref name="variantname"/>
</zeroOrMore>
</define>
<define name="name_abbreviation">
<element name="abbreviation">
<ref name="LocalizedString"/>
</element>
</define>
<define name="prefix">
<element name="prefix">
<ref name="LocalizedString"/>
Expand Down Expand Up @@ -870,6 +878,9 @@
<optional>
<ref name="validity"/>
</optional>
<optional>
<ref name="depiction"/>
</optional>
</define>
<define name="btitle">
<element name="title">
Expand Down
24 changes: 22 additions & 2 deletions lib/metanorma/standoc/cleanup_xref.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ module Metanorma
module Standoc
module Cleanup
# extending localities to cover ISO referencing
CONN_REGEX_STR = "(?<conn>and|or|from|to)!".freeze

LOCALITY_REGEX_STR = <<~REGEXP.freeze
^(((?<conn>and|or|from|to)!)?
^((#{CONN_REGEX_STR})?
(?<locality>section|clause|part|paragraph|chapter|page|line|
table|annex|figure|example|note|formula|list|time|anchor|
locality:[^ \\t\\n\\r:,;=]+)(\\s+|=)
Expand All @@ -15,6 +17,15 @@ module Cleanup
LOCALITY_RE = Regexp.new(LOCALITY_REGEX_STR.gsub(/\s/, ""),
Regexp::IGNORECASE | Regexp::MULTILINE)

LOCALITY_REGEX_VALUE_ONLY_STR = <<~REGEXP.freeze
^(?<conn0>(#{CONN_REGEX_STR}))
(?!whole|title|locality:)
(?<value>[^=,;:\\t\\n\\r]+)
(?<punct>[,;\\t\\n\\r]|$)
REGEXP
LOCALITY_VAL_ONLY_RE = Regexp.new(LOCALITY_REGEX_VALUE_ONLY_STR
.gsub(/\s/, ""), Regexp::IGNORECASE | Regexp::MULTILINE)

def tq(text)
text.sub(/^"/, "").sub(/"$/, "")
end
Expand All @@ -33,13 +44,22 @@ def extract_localities1(elem, text)
b = elem.add_child("<localityStack/>").first if LOCALITY_RE.match text
while (m = LOCALITY_RE.match text)
add_locality(b, m)
text = m[:text]
text = extract_localities_update_text(m)
b = elem.add_child("<localityStack/>").first if m[:punct] == ";"
end
fill_in_eref_connectives(elem)
elem.add_child(text) if text
end

# clause=3;and!5 => clause=3;and!clause=5
def extract_localities_update_text(match)
ret = match[:text]
if LOCALITY_VAL_ONLY_RE.match?(ret) && match[:punct] == ";"
ret.sub!(%r{^(#{CONN_REGEX_STR})}o, "\\1#{match[:locality]}=")
end
ret
end

def add_locality(stack, match)
stack.children.empty? && match[:conn] and
stack["connective"] = match[:conn]
Expand Down
74 changes: 10 additions & 64 deletions lib/metanorma/standoc/isodoc.rng
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,19 @@
these elements; we just want one namespace for any child grammars
of this.
-->
<!-- VERSION v1.2.9 -->
<!-- VERSION v1.2.12 -->
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<include href="reqt.rng"/>
<include href="basicdoc.rng">
<define name="amend">
<element name="amend">
<ref name="BlockAttributes"/>
<ref name="AmendType"/>
<zeroOrMore>
<ref name="autonumber"/>
</zeroOrMore>
</element>
</define>
<define name="admonition">
<element name="admonition">
<attribute name="type">
Expand Down Expand Up @@ -2319,69 +2328,6 @@
<ref name="CitationType"/>
</element>
</define>
<define name="amend">
<element name="amend">
<optional>
<attribute name="id">
<data type="ID"/>
</attribute>
</optional>
<attribute name="change">
<choice>
<value>add</value>
<value>modify</value>
<value>delete</value>
<value>replace</value>
</choice>
</attribute>
<optional>
<attribute name="path"/>
</optional>
<optional>
<attribute name="path_end"/>
</optional>
<optional>
<attribute name="title"/>
</optional>
<ref name="BlockAttributes"/>
<optional>
<element name="location">
<zeroOrMore>
<ref name="locality"/>
</zeroOrMore>
</element>
</optional>
<zeroOrMore>
<ref name="autonumber"/>
</zeroOrMore>
<optional>
<element name="description">
<zeroOrMore>
<ref name="BasicBlock"/>
</zeroOrMore>
</element>
</optional>
<optional>
<element name="newcontent">
<optional>
<attribute name="id">
<data type="ID"/>
</attribute>
</optional>
<zeroOrMore>
<ref name="BasicBlock"/>
</zeroOrMore>
</element>
</optional>
<optional>
<element name="description">
<zeroOrMore>
<ref name="BasicBlock"/>
</zeroOrMore>
</element>
</optional>
</element>
</define>
<define name="autonumber">
<element name="autonumber">
<attribute name="type">
Expand Down
16 changes: 0 additions & 16 deletions lib/metanorma/standoc/reqt.rng
Original file line number Diff line number Diff line change
Expand Up @@ -207,20 +207,4 @@
<value>permission</value>
</choice>
</define>
<define name="classification">
<element name="classification">
<ref name="classification_tag"/>
<ref name="classification_value"/>
</element>
</define>
<define name="classification_tag">
<element name="tag">
<text/>
</element>
</define>
<define name="classification_value">
<element name="value">
<text/>
</element>
</define>
</grammar>
23 changes: 23 additions & 0 deletions spec/metanorma/inline_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -642,6 +642,7 @@
<<ref1,clause=3;and!clause=5>>
<<ref1,clause=3;or!clause=5,text>>
<<ref1,from!clause=3;to!clause=5;and!clause=8;to!clause=10>>
<<ref1,from!clause=3;to!5;and!8;to!10>>
[bibliography]
== Bibliography
Expand Down Expand Up @@ -746,6 +747,28 @@
</locality>
</localityStack>
</eref>
<eref type="inline" bibitemid="ref1" citeas="XYZ">
<localityStack connective="from">
<locality type="clause">
<referenceFrom>3</referenceFrom>
</locality>
</localityStack>
<localityStack connective="and">
<locality type="clause">
<referenceFrom>5</referenceFrom>
</locality>
</localityStack>
<localityStack connective="and">
<locality type="clause">
<referenceFrom>8</referenceFrom>
</locality>
</localityStack>
<localityStack connective="and">
<locality type="clause">
<referenceFrom>10</referenceFrom>
</locality>
</localityStack>
</eref>
</p>
</clause>
</sections>
Expand Down
Loading

0 comments on commit 95777dc

Please sign in to comment.