metanorma-ietf 2.0.10 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.github/workflows/macos.yml +8 -0
 - data/.github/workflows/ubuntu.yml +8 -1
 - data/.github/workflows/windows.yml +8 -0
 - data/Gemfile +1 -1
 - data/lib/asciidoctor/ietf/biblio.rng +36 -6
 - data/lib/asciidoctor/ietf/blocks.rb +7 -5
 - data/lib/asciidoctor/ietf/converter.rb +3 -13
 - data/lib/asciidoctor/ietf/ietf.rng +8 -2
 - data/lib/asciidoctor/ietf/isodoc.rng +444 -1
 - data/lib/asciidoctor/ietf/reqt.rng +23 -0
 - data/lib/isodoc/ietf/blocks.rb +21 -10
 - data/lib/isodoc/ietf/front.rb +13 -9
 - data/lib/isodoc/ietf/inline.rb +6 -2
 - data/lib/isodoc/ietf/metadata.rb +9 -17
 - data/lib/isodoc/ietf/references.rb +3 -11
 - data/lib/isodoc/ietf/reqt.rb +5 -0
 - data/lib/isodoc/ietf/rfc_convert.rb +14 -3
 - data/lib/isodoc/ietf/section.rb +16 -1
 - data/lib/isodoc/ietf/table.rb +2 -2
 - data/lib/isodoc/ietf/terms.rb +0 -13
 - data/lib/isodoc/ietf/xref.rb +20 -0
 - data/lib/metanorma/ietf/processor.rb +16 -8
 - data/lib/metanorma/ietf/version.rb +1 -1
 - data/metanorma-ietf.gemspec +2 -2
 - metadata +11 -11
 
| 
         @@ -30,9 +30,22 @@ 
     | 
|
| 
       30 
30 
     | 
    
         
             
                    <data type="boolean"/>
         
     | 
| 
       31 
31 
     | 
    
         
             
                  </attribute>
         
     | 
| 
       32 
32 
     | 
    
         
             
                </optional>
         
     | 
| 
      
 33 
     | 
    
         
            +
                <optional>
         
     | 
| 
      
 34 
     | 
    
         
            +
                  <attribute name="number"/>
         
     | 
| 
      
 35 
     | 
    
         
            +
                </optional>
         
     | 
| 
       33 
36 
     | 
    
         
             
                <optional>
         
     | 
| 
       34 
37 
     | 
    
         
             
                  <attribute name="subsequence"/>
         
     | 
| 
       35 
38 
     | 
    
         
             
                </optional>
         
     | 
| 
      
 39 
     | 
    
         
            +
                <optional>
         
     | 
| 
      
 40 
     | 
    
         
            +
                  <attribute name="keep-with-next">
         
     | 
| 
      
 41 
     | 
    
         
            +
                    <data type="boolean"/>
         
     | 
| 
      
 42 
     | 
    
         
            +
                  </attribute>
         
     | 
| 
      
 43 
     | 
    
         
            +
                </optional>
         
     | 
| 
      
 44 
     | 
    
         
            +
                <optional>
         
     | 
| 
      
 45 
     | 
    
         
            +
                  <attribute name="keep-lines-together">
         
     | 
| 
      
 46 
     | 
    
         
            +
                    <data type="boolean"/>
         
     | 
| 
      
 47 
     | 
    
         
            +
                  </attribute>
         
     | 
| 
      
 48 
     | 
    
         
            +
                </optional>
         
     | 
| 
       36 
49 
     | 
    
         
             
                <attribute name="id">
         
     | 
| 
       37 
50 
     | 
    
         
             
                  <data type="ID"/>
         
     | 
| 
       38 
51 
     | 
    
         
             
                </attribute>
         
     | 
| 
         @@ -141,6 +154,16 @@ 
     | 
|
| 
       141 
154 
     | 
    
         
             
                    <data type="boolean"/>
         
     | 
| 
       142 
155 
     | 
    
         
             
                  </attribute>
         
     | 
| 
       143 
156 
     | 
    
         
             
                </optional>
         
     | 
| 
      
 157 
     | 
    
         
            +
                <optional>
         
     | 
| 
      
 158 
     | 
    
         
            +
                  <attribute name="keep-with-next">
         
     | 
| 
      
 159 
     | 
    
         
            +
                    <data type="boolean"/>
         
     | 
| 
      
 160 
     | 
    
         
            +
                  </attribute>
         
     | 
| 
      
 161 
     | 
    
         
            +
                </optional>
         
     | 
| 
      
 162 
     | 
    
         
            +
                <optional>
         
     | 
| 
      
 163 
     | 
    
         
            +
                  <attribute name="keep-lines-together">
         
     | 
| 
      
 164 
     | 
    
         
            +
                    <data type="boolean"/>
         
     | 
| 
      
 165 
     | 
    
         
            +
                  </attribute>
         
     | 
| 
      
 166 
     | 
    
         
            +
                </optional>
         
     | 
| 
       144 
167 
     | 
    
         
             
                <oneOrMore>
         
     | 
| 
       145 
168 
     | 
    
         
             
                  <ref name="BasicBlock"/>
         
     | 
| 
       146 
169 
     | 
    
         
             
                </oneOrMore>
         
     | 
    
        data/lib/isodoc/ietf/blocks.rb
    CHANGED
    
    | 
         @@ -1,8 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module IsoDoc::Ietf
         
     | 
| 
       2 
2 
     | 
    
         
             
              class RfcConvert < ::IsoDoc::Convert
         
     | 
| 
       3 
3 
     | 
    
         
             
                def para_attrs(node)
         
     | 
| 
       4 
     | 
    
         
            -
                  { keepWithNext: node[" 
     | 
| 
       5 
     | 
    
         
            -
                    keepWithPrevious: node[" 
     | 
| 
      
 4 
     | 
    
         
            +
                  { keepWithNext: node["keep-with-next"],
         
     | 
| 
      
 5 
     | 
    
         
            +
                    keepWithPrevious: node["keep-with-previous"],
         
     | 
| 
       6 
6 
     | 
    
         
             
                    anchor: node["id"] }
         
     | 
| 
       7 
7 
     | 
    
         
             
                end
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
         @@ -56,23 +56,25 @@ module IsoDoc::Ietf 
     | 
|
| 
       56 
56 
     | 
    
         
             
                  end
         
     | 
| 
       57 
57 
     | 
    
         
             
                end
         
     | 
| 
       58 
58 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
                def  
     | 
| 
      
 59 
     | 
    
         
            +
                def dl_attrs(node)
         
     | 
| 
       60 
60 
     | 
    
         
             
                  attr_code(anchor: node["id"],
         
     | 
| 
       61 
61 
     | 
    
         
             
                            newline: node["newline"],
         
     | 
| 
       62 
62 
     | 
    
         
             
                            indent: node["indent"],
         
     | 
| 
       63 
63 
     | 
    
         
             
                            spacing: node["spacing"])
         
     | 
| 
       64 
64 
     | 
    
         
             
                end
         
     | 
| 
       65 
65 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
      
 66 
     | 
    
         
            +
                def dt_parse(dt, term)
         
     | 
| 
       67 
67 
     | 
    
         
             
                  if dt.elements.empty?
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
      
 68 
     | 
    
         
            +
                    term << dt.text
         
     | 
| 
       69 
69 
     | 
    
         
             
                  else
         
     | 
| 
       70 
70 
     | 
    
         
             
                    dt.children.each { |n| parse(n, term) }
         
     | 
| 
       71 
71 
     | 
    
         
             
                  end
         
     | 
| 
       72 
72 
     | 
    
         
             
                end
         
     | 
| 
       73 
73 
     | 
    
         | 
| 
       74 
74 
     | 
    
         
             
                def note_label(node)
         
     | 
| 
       75 
     | 
    
         
            -
                   
     | 
| 
      
 75 
     | 
    
         
            +
                  n = @xrefs.get[node["id"]]
         
     | 
| 
      
 76 
     | 
    
         
            +
                  return l10n("#{@note_lbl}: ") if n.nil? || n[:label].nil? || n[:label].empty?
         
     | 
| 
      
 77 
     | 
    
         
            +
                  l10n("#{@note_lbl} #{n[:label]}: ")
         
     | 
| 
       76 
78 
     | 
    
         
             
                end
         
     | 
| 
       77 
79 
     | 
    
         | 
| 
       78 
80 
     | 
    
         
             
                def note_parse(node, out)
         
     | 
| 
         @@ -94,7 +96,7 @@ module IsoDoc::Ietf 
     | 
|
| 
       94 
96 
     | 
    
         
             
                end
         
     | 
| 
       95 
97 
     | 
    
         | 
| 
       96 
98 
     | 
    
         
             
                def example_label(node, div, name)
         
     | 
| 
       97 
     | 
    
         
            -
                  n =  
     | 
| 
      
 99 
     | 
    
         
            +
                  n = @xrefs.get[node["id"]]
         
     | 
| 
       98 
100 
     | 
    
         
             
                  div.t **attr_code(anchor: node["id"], keepWithNext: "true") do |p|
         
     | 
| 
       99 
101 
     | 
    
         
             
                    lbl = (n.nil? || n[:label].nil? || n[:label].empty?) ? @example_lbl :
         
     | 
| 
       100 
102 
     | 
    
         
             
                      l10n("#{@example_lbl} #{n[:label]}")
         
     | 
| 
         @@ -112,8 +114,8 @@ module IsoDoc::Ietf 
     | 
|
| 
       112 
114 
     | 
    
         
             
                    div.sourcecode **attr_code(type: node["lang"], name: node["filename"],
         
     | 
| 
       113 
115 
     | 
    
         
             
                                               markers: node["markers"],
         
     | 
| 
       114 
116 
     | 
    
         
             
                                               src: node["src"]) do |s|
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
      
 117 
     | 
    
         
            +
                                                 node.children.each { |x| parse(x, s) unless x.name == "name" }
         
     | 
| 
      
 118 
     | 
    
         
            +
                                               end
         
     | 
| 
       117 
119 
     | 
    
         
             
                  end
         
     | 
| 
       118 
120 
     | 
    
         
             
                end
         
     | 
| 
       119 
121 
     | 
    
         | 
| 
         @@ -144,12 +146,21 @@ module IsoDoc::Ietf 
     | 
|
| 
       144 
146 
     | 
    
         
             
                def formula_parse1(node, out)
         
     | 
| 
       145 
147 
     | 
    
         
             
                  out.t **attr_code(anchor: node["id"]) do |p|
         
     | 
| 
       146 
148 
     | 
    
         
             
                    parse(node.at(ns("./stem")), p)
         
     | 
| 
       147 
     | 
    
         
            -
                    lbl = anchor(node['id'], :label, false)
         
     | 
| 
      
 149 
     | 
    
         
            +
                    lbl = @xrefs.anchor(node['id'], :label, false)
         
     | 
| 
       148 
150 
     | 
    
         
             
                    lbl.nil? or
         
     | 
| 
       149 
151 
     | 
    
         
             
                      p << "    (#{lbl})"
         
     | 
| 
       150 
152 
     | 
    
         
             
                  end
         
     | 
| 
       151 
153 
     | 
    
         
             
                end
         
     | 
| 
       152 
154 
     | 
    
         | 
| 
      
 155 
     | 
    
         
            +
                def formula_parse(node, out)
         
     | 
| 
      
 156 
     | 
    
         
            +
                  formula_parse1(node, out)
         
     | 
| 
      
 157 
     | 
    
         
            +
                  formula_where(node.at(ns("./dl")), out)
         
     | 
| 
      
 158 
     | 
    
         
            +
                  node.children.each do |n|
         
     | 
| 
      
 159 
     | 
    
         
            +
                    next if %w(stem dl).include? n.name
         
     | 
| 
      
 160 
     | 
    
         
            +
                    parse(n, out)
         
     | 
| 
      
 161 
     | 
    
         
            +
                  end
         
     | 
| 
      
 162 
     | 
    
         
            +
                end
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
       153 
164 
     | 
    
         
             
                def quote_attribution(node)
         
     | 
| 
       154 
165 
     | 
    
         
             
                  author = node&.at(ns("./author"))&.text
         
     | 
| 
       155 
166 
     | 
    
         
             
                  source = node&.at(ns("./source/@uri"))&.text
         
     | 
    
        data/lib/isodoc/ietf/front.rb
    CHANGED
    
    | 
         @@ -19,16 +19,20 @@ module IsoDoc::Ietf 
     | 
|
| 
       19 
19 
     | 
    
         
             
                end
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                def info(isoxml, out)
         
     | 
| 
       22 
     | 
    
         
            -
                  @meta.keywords isoxml, out
         
     | 
| 
       23 
22 
     | 
    
         
             
                  @meta.areas isoxml, out
         
     | 
| 
       24 
23 
     | 
    
         
             
                  super
         
     | 
| 
       25 
24 
     | 
    
         
             
                end
         
     | 
| 
       26 
25 
     | 
    
         | 
| 
      
 26 
     | 
    
         
            +
                def output_if_translit(text)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  return nil if text.nil?
         
     | 
| 
      
 28 
     | 
    
         
            +
                  text.transliterate != text ? text.transliterate : nil
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       27 
31 
     | 
    
         
             
                def title(isoxml, front)
         
     | 
| 
       28 
32 
     | 
    
         
             
                  title = @meta.get[:doctitle] or return
         
     | 
| 
       29 
33 
     | 
    
         
             
                  front.title title, **attr_code(abbrev: @meta.get[:docabbrev],
         
     | 
| 
       30 
     | 
    
         
            -
                                                 ascii: @meta.get[:docascii] ||
         
     | 
| 
       31 
     | 
    
         
            -
                                                 title 
     | 
| 
      
 34 
     | 
    
         
            +
                                                 ascii: (@meta.get[:docascii] ||
         
     | 
| 
      
 35 
     | 
    
         
            +
                                                 output_if_translit(title)))
         
     | 
| 
       32 
36 
     | 
    
         
             
                end
         
     | 
| 
       33 
37 
     | 
    
         | 
| 
       34 
38 
     | 
    
         
             
                def seriesinfo(isoxml, front)
         
     | 
| 
         @@ -38,7 +42,7 @@ module IsoDoc::Ietf 
     | 
|
| 
       38 
42 
     | 
    
         | 
| 
       39 
43 
     | 
    
         
             
                def seriesinfo_attr(isoxml)
         
     | 
| 
       40 
44 
     | 
    
         
             
                  attr_code(value: @meta.get[:docnumber] || "",
         
     | 
| 
       41 
     | 
    
         
            -
                            asciiValue: @meta.get[:docnumber] 
     | 
| 
      
 45 
     | 
    
         
            +
                            asciiValue: output_if_translit(@meta.get[:docnumber]),
         
     | 
| 
       42 
46 
     | 
    
         
             
                            status: @meta.get[:stage],
         
     | 
| 
       43 
47 
     | 
    
         
             
                            stream: isoxml&.at(ns("//bibdata/series[@type = 'stream']/"\
         
     | 
| 
       44 
48 
     | 
    
         
             
                                                  "title"))&.text)
         
     | 
| 
         @@ -83,9 +87,9 @@ module IsoDoc::Ietf 
     | 
|
| 
       83 
87 
     | 
    
         | 
| 
       84 
88 
     | 
    
         
             
                def pers_author_attrs1(ret, full, init, c)
         
     | 
| 
       85 
89 
     | 
    
         
             
                  full and ret.merge!(attr_code(
         
     | 
| 
       86 
     | 
    
         
            -
                    asciiFullname: full 
     | 
| 
       87 
     | 
    
         
            -
                    asciiInitials: init 
     | 
| 
       88 
     | 
    
         
            -
                    asciiSurname: c&.at(ns("./surname")) 
     | 
| 
      
 90 
     | 
    
         
            +
                    asciiFullname: output_if_translit(full),
         
     | 
| 
      
 91 
     | 
    
         
            +
                    asciiInitials: output_if_translit(init),
         
     | 
| 
      
 92 
     | 
    
         
            +
                    asciiSurname: output_if_translit(c&.at(ns("./surname")))))
         
     | 
| 
       89 
93 
     | 
    
         
             
                  ret
         
     | 
| 
       90 
94 
     | 
    
         
             
                end
         
     | 
| 
       91 
95 
     | 
    
         | 
| 
         @@ -114,8 +118,8 @@ module IsoDoc::Ietf 
     | 
|
| 
       114 
118 
     | 
    
         
             
                def organization(org, out, show)
         
     | 
| 
       115 
119 
     | 
    
         
             
                  name = org.at(ns("./name"))&.text
         
     | 
| 
       116 
120 
     | 
    
         
             
                  out.organization name, **attr_code(
         
     | 
| 
       117 
     | 
    
         
            -
                    showOnFrontPage: show&.text, ascii: name 
     | 
| 
       118 
     | 
    
         
            -
                    asciiAbbrev: org 
     | 
| 
      
 121 
     | 
    
         
            +
                    showOnFrontPage: show&.text, ascii: output_if_translit(name),
         
     | 
| 
      
 122 
     | 
    
         
            +
                    asciiAbbrev: output_if_translit(org.at(ns("./abbreviation"))),
         
     | 
| 
       119 
123 
     | 
    
         
             
                    abbrev: org.at(ns("./abbreviation")))
         
     | 
| 
       120 
124 
     | 
    
         
             
                end
         
     | 
| 
       121 
125 
     | 
    
         | 
    
        data/lib/isodoc/ietf/inline.rb
    CHANGED
    
    | 
         @@ -120,11 +120,15 @@ module IsoDoc::Ietf 
     | 
|
| 
       120 
120 
     | 
    
         | 
| 
       121 
121 
     | 
    
         
             
                def eref_parse(node, out)
         
     | 
| 
       122 
122 
     | 
    
         
             
                  linkend = node.children.reject { |c| %w{locality localityStack}.include? c.name }
         
     | 
| 
      
 123 
     | 
    
         
            +
                  relative = node["relative"] ||
         
     | 
| 
      
 124 
     | 
    
         
            +
                    node.at(ns(".//locality[@type = 'anchor']/referenceFrom"))&.text || ""
         
     | 
| 
       123 
125 
     | 
    
         
             
                  section = eref_clause(node.xpath(ns("./locality | ./localityStack")), nil) || ""
         
     | 
| 
      
 126 
     | 
    
         
            +
                  section = "" if relative.empty?
         
     | 
| 
       124 
127 
     | 
    
         
             
                  out.relref **attr_code(target: node["bibitemid"], section: section,
         
     | 
| 
      
 128 
     | 
    
         
            +
                                         relative: relative,
         
     | 
| 
       125 
129 
     | 
    
         
             
                                         displayFormat: node["displayFormat"]) do |l|
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
      
 130 
     | 
    
         
            +
                                           linkend.each { |n| parse(n, l) }
         
     | 
| 
      
 131 
     | 
    
         
            +
                                         end
         
     | 
| 
       128 
132 
     | 
    
         
             
                end
         
     | 
| 
       129 
133 
     | 
    
         | 
| 
       130 
134 
     | 
    
         
             
                def eref_clause(refs, target)
         
     | 
    
        data/lib/isodoc/ietf/metadata.rb
    CHANGED
    
    | 
         @@ -19,14 +19,6 @@ module IsoDoc 
     | 
|
| 
       19 
19 
     | 
    
         
             
                    # = item describedby convertedfrom alternate
         
     | 
| 
       20 
20 
     | 
    
         
             
                  end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
                  def keywords(isoxml, _out)
         
     | 
| 
       23 
     | 
    
         
            -
                    ret = []
         
     | 
| 
       24 
     | 
    
         
            -
                    isoxml.xpath(ns("//bibdata/keyword")).each do |kw|
         
     | 
| 
       25 
     | 
    
         
            -
                      ret << kw.text
         
     | 
| 
       26 
     | 
    
         
            -
                    end
         
     | 
| 
       27 
     | 
    
         
            -
                    set(:keywords, ret)
         
     | 
| 
       28 
     | 
    
         
            -
                  end
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
22 
     | 
    
         
             
                  def areas(isoxml, _out)
         
     | 
| 
       31 
23 
     | 
    
         
             
                    ret = []
         
     | 
| 
       32 
24 
     | 
    
         
             
                    isoxml.xpath(ns("//bibdata/ext/area")).each do |kw|
         
     | 
| 
         @@ -45,18 +37,18 @@ module IsoDoc 
     | 
|
| 
       45 
37 
     | 
    
         
             
                    wg(xml)
         
     | 
| 
       46 
38 
     | 
    
         
             
                  end
         
     | 
| 
       47 
39 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
      
 40 
     | 
    
         
            +
                  def wg(xml)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    workgroups = []
         
     | 
| 
      
 42 
     | 
    
         
            +
                    xml.xpath(ns("//bibdata/ext/editorialgroup/workgroup")).each do |wg|
         
     | 
| 
      
 43 
     | 
    
         
            +
                      workgroups << wg.text
         
     | 
| 
       52 
44 
     | 
    
         
             
                    end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
      
 45 
     | 
    
         
            +
                    set(:wg, workgroups)
         
     | 
| 
       54 
46 
     | 
    
         
             
                  end
         
     | 
| 
       55 
47 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
      
 48 
     | 
    
         
            +
                  def doctype(isoxml, _out)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    super
         
     | 
| 
      
 50 
     | 
    
         
            +
                    set(:doctype, "Rfc") if get[:doctype].nil?
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
       60 
52 
     | 
    
         
             
                end
         
     | 
| 
       61 
53 
     | 
    
         
             
              end
         
     | 
| 
       62 
54 
     | 
    
         
             
            end
         
     | 
| 
         @@ -50,8 +50,9 @@ module IsoDoc::Ietf 
     | 
|
| 
       50 
50 
     | 
    
         
             
                      r.format nil, **attr_code(target: u.text, type: u["type"])
         
     | 
| 
       51 
51 
     | 
    
         
             
                    end
         
     | 
| 
       52 
52 
     | 
    
         
             
                    docidentifiers = b.xpath(ns("./docidentifier"))
         
     | 
| 
       53 
     | 
    
         
            -
                    id = bibitem_ref_code(b) 
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
      
 53 
     | 
    
         
            +
                    id = render_identifier(bibitem_ref_code(b))
         
     | 
| 
      
 54 
     | 
    
         
            +
                    !id[1].nil? and id[1] != "(NO ID)" and
         
     | 
| 
      
 55 
     | 
    
         
            +
                      r.refcontent id[1]
         
     | 
| 
       55 
56 
     | 
    
         
             
                    docidentifiers&.each do |u|
         
     | 
| 
       56 
57 
     | 
    
         
             
                      if %w(DOI IETF).include? u["type"]
         
     | 
| 
       57 
58 
     | 
    
         
             
                        r.seriesInfo nil, **attr_code(value: u.text, name: u["type"])
         
     | 
| 
         @@ -67,15 +68,6 @@ module IsoDoc::Ietf 
     | 
|
| 
       67 
68 
     | 
    
         
             
                  end
         
     | 
| 
       68 
69 
     | 
    
         
             
                end
         
     | 
| 
       69 
70 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
                def bibitem_ref_code(b)
         
     | 
| 
       71 
     | 
    
         
            -
                  id =  b.at(ns("./docidentifier[not(@type = 'DOI' or @type = 'metanorma' "\
         
     | 
| 
       72 
     | 
    
         
            -
                                "or @type = 'ISSN' or @type = 'ISBN' or @type = 'IETF')]"))
         
     | 
| 
       73 
     | 
    
         
            -
                  return id if id
         
     | 
| 
       74 
     | 
    
         
            -
                  id = Nokogiri::XML::Node.new("docidentifier", b.document)
         
     | 
| 
       75 
     | 
    
         
            -
                  id << "(NO ID)"
         
     | 
| 
       76 
     | 
    
         
            -
                  id
         
     | 
| 
       77 
     | 
    
         
            -
                end
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
71 
     | 
    
         
             
                def relaton_to_author(b, f)
         
     | 
| 
       80 
72 
     | 
    
         
             
                  auths = b.xpath(ns("./contributor[xmlns:role/@type = 'author' or "\
         
     | 
| 
       81 
73 
     | 
    
         
             
                                     "xmlns:role/@type = 'editor']"))
         
     | 
    
        data/lib/isodoc/ietf/reqt.rb
    CHANGED
    
    | 
         @@ -1,5 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module IsoDoc::Ietf
         
     | 
| 
       2 
2 
     | 
    
         
             
              class RfcConvert < ::IsoDoc::Convert
         
     | 
| 
      
 3 
     | 
    
         
            +
                def recommendation_labels(node)
         
     | 
| 
      
 4 
     | 
    
         
            +
                  [node.at(ns("./label")), node.at(ns("./title")), 
         
     | 
| 
      
 5 
     | 
    
         
            +
                   @xrefs.anchor(node['id'], :label, false)]
         
     | 
| 
      
 6 
     | 
    
         
            +
                end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
       3 
8 
     | 
    
         
             
                def recommendation_name(node, out, type)
         
     | 
| 
       4 
9 
     | 
    
         
             
                  label, title, lbl = recommendation_labels(node)
         
     | 
| 
       5 
10 
     | 
    
         
             
                  out.t **{ keepWithNext: "true" }  do |b|
         
     | 
| 
         @@ -9,11 +9,12 @@ require_relative "./cleanup" 
     | 
|
| 
       9 
9 
     | 
    
         
             
            require_relative "./footnotes"
         
     | 
| 
       10 
10 
     | 
    
         
             
            require_relative "./references"
         
     | 
| 
       11 
11 
     | 
    
         
             
            require_relative "./section"
         
     | 
| 
      
 12 
     | 
    
         
            +
            require_relative "./xref"
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
            module IsoDoc::Ietf
         
     | 
| 
       14 
15 
     | 
    
         
             
              class RfcConvert < ::IsoDoc::Convert
         
     | 
| 
       15 
16 
     | 
    
         
             
                def convert1(docxml, filename, dir)
         
     | 
| 
       16 
     | 
    
         
            -
                   
     | 
| 
      
 17 
     | 
    
         
            +
                  @xrefs.parse docxml
         
     | 
| 
       17 
18 
     | 
    
         
             
                  info docxml, nil
         
     | 
| 
       18 
19 
     | 
    
         
             
                  xml = noko do |xml|
         
     | 
| 
       19 
20 
     | 
    
         
             
                    xml.rfc **attr_code(rfc_attributes(docxml)) do |html|
         
     | 
| 
         @@ -30,6 +31,10 @@ module IsoDoc::Ietf 
     | 
|
| 
       30 
31 
     | 
    
         
             
                  @meta = Metadata.new(lang, script, labels)
         
     | 
| 
       31 
32 
     | 
    
         
             
                end
         
     | 
| 
       32 
33 
     | 
    
         | 
| 
      
 34 
     | 
    
         
            +
                def xref_init(lang, script, klass, labels, options)
         
     | 
| 
      
 35 
     | 
    
         
            +
                    @xrefs = Xref.new(lang, script, klass, labels, options)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
       33 
38 
     | 
    
         
             
                def extract_delims(text)
         
     | 
| 
       34 
39 
     | 
    
         
             
                  @openmathdelim = "$$"
         
     | 
| 
       35 
40 
     | 
    
         
             
                  @closemathdelim = "$$"
         
     | 
| 
         @@ -50,10 +55,15 @@ module IsoDoc::Ietf 
     | 
|
| 
       50 
55 
     | 
    
         
             
                  end
         
     | 
| 
       51 
56 
     | 
    
         
             
                end
         
     | 
| 
       52 
57 
     | 
    
         | 
| 
      
 58 
     | 
    
         
            +
                 def textcleanup(docxml)
         
     | 
| 
      
 59 
     | 
    
         
            +
                  passthrough_cleanup(docxml)
         
     | 
| 
      
 60 
     | 
    
         
            +
                 end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
       53 
62 
     | 
    
         
             
                def postprocess(result, filename, dir)
         
     | 
| 
       54 
     | 
    
         
            -
                  result = from_xhtml(cleanup(to_xhtml(result))) 
     | 
| 
      
 63 
     | 
    
         
            +
                  result = from_xhtml(cleanup(to_xhtml(textcleanup(result)))).
         
     | 
| 
      
 64 
     | 
    
         
            +
                    sub(/<!DOCTYPE[^>]+>\n/, "").
         
     | 
| 
       55 
65 
     | 
    
         
             
                    sub(/(<rfc[^<]+? )lang="[^"]+"/, "\\1")
         
     | 
| 
       56 
     | 
    
         
            -
                  File.open( 
     | 
| 
      
 66 
     | 
    
         
            +
                  File.open(filename, "w:UTF-8") { |f| f.write(result) }
         
     | 
| 
       57 
67 
     | 
    
         
             
                  @files_to_delete.each { |f| FileUtils.rm_rf f }
         
     | 
| 
       58 
68 
     | 
    
         
             
                end
         
     | 
| 
       59 
69 
     | 
    
         | 
| 
         @@ -66,6 +76,7 @@ module IsoDoc::Ietf 
     | 
|
| 
       66 
76 
     | 
    
         
             
                  super
         
     | 
| 
       67 
77 
     | 
    
         
             
                  @xinclude = options[:use_xinclude] == "true"
         
     | 
| 
       68 
78 
     | 
    
         
             
                  @format = :rfc
         
     | 
| 
      
 79 
     | 
    
         
            +
                  @suffix = "rfc.xml"
         
     | 
| 
       69 
80 
     | 
    
         
             
                end
         
     | 
| 
       70 
81 
     | 
    
         
             
              end
         
     | 
| 
       71 
82 
     | 
    
         
             
            end
         
     | 
    
        data/lib/isodoc/ietf/section.rb
    CHANGED
    
    | 
         @@ -60,7 +60,8 @@ module IsoDoc::Ietf 
     | 
|
| 
       60 
60 
     | 
    
         
             
                  {
         
     | 
| 
       61 
61 
     | 
    
         
             
                    docName:        @meta.get[:doctype] == "Internet Draft" ? @meta.get[:docnumber] : nil,
         
     | 
| 
       62 
62 
     | 
    
         
             
                    number:         @meta.get[:doctype].casecmp?("rfc") ? @meta.get[:docnumber] : nil,
         
     | 
| 
       63 
     | 
    
         
            -
                    category:        
     | 
| 
      
 63 
     | 
    
         
            +
                    category:       series2category(
         
     | 
| 
      
 64 
     | 
    
         
            +
                      docxml&.at(ns("//bibdata/series[@type = 'intended']/title"))&.text),
         
     | 
| 
       64 
65 
     | 
    
         
             
                    ipr:            docxml&.at(ns("//bibdata/ext/ipr"))&.text,
         
     | 
| 
       65 
66 
     | 
    
         
             
                    obsoletes:      obs,
         
     | 
| 
       66 
67 
     | 
    
         
             
                    updates:        upd,
         
     | 
| 
         @@ -78,6 +79,20 @@ module IsoDoc::Ietf 
     | 
|
| 
       78 
79 
     | 
    
         
             
                  }
         
     | 
| 
       79 
80 
     | 
    
         
             
                end
         
     | 
| 
       80 
81 
     | 
    
         | 
| 
      
 82 
     | 
    
         
            +
                def series2category(series)
         
     | 
| 
      
 83 
     | 
    
         
            +
                  case series&.downcase
         
     | 
| 
      
 84 
     | 
    
         
            +
                  when "standard", "std" then "std"
         
     | 
| 
      
 85 
     | 
    
         
            +
                  when "informational", "info" then "info"
         
     | 
| 
      
 86 
     | 
    
         
            +
                  when "experimental", "exp" then "exp"
         
     | 
| 
      
 87 
     | 
    
         
            +
                  when "bcp" then "bcp"
         
     | 
| 
      
 88 
     | 
    
         
            +
                  when "fyi", "info" then "info"
         
     | 
| 
      
 89 
     | 
    
         
            +
                  when "full-standard" then "std"
         
     | 
| 
      
 90 
     | 
    
         
            +
                  when "historic" then "historic"
         
     | 
| 
      
 91 
     | 
    
         
            +
                  else
         
     | 
| 
      
 92 
     | 
    
         
            +
                    "std"
         
     | 
| 
      
 93 
     | 
    
         
            +
                  end
         
     | 
| 
      
 94 
     | 
    
         
            +
                end
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
       81 
96 
     | 
    
         
             
                def xpath_comma(xpath)
         
     | 
| 
       82 
97 
     | 
    
         
             
                  return nil if xpath.empty?
         
     | 
| 
       83 
98 
     | 
    
         
             
                  xpath.map { |x| x.text }.join(", ")
         
     | 
    
        data/lib/isodoc/ietf/table.rb
    CHANGED
    
    | 
         @@ -1,12 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module IsoDoc::Ietf
         
     | 
| 
       2 
2 
     | 
    
         
             
              class RfcConvert < ::IsoDoc::Convert
         
     | 
| 
       3 
     | 
    
         
            -
                def  
     | 
| 
      
 3 
     | 
    
         
            +
                def table_attrs(node)
         
     | 
| 
       4 
4 
     | 
    
         
             
                  attr_code(anchor: node["id"], align: node["align"])
         
     | 
| 
       5 
5 
     | 
    
         
             
                end
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                def table_parse(node, out)
         
     | 
| 
       8 
8 
     | 
    
         
             
                  @in_table = true
         
     | 
| 
       9 
     | 
    
         
            -
                  out.table ** 
     | 
| 
      
 9 
     | 
    
         
            +
                  out.table **table_attrs(node) do |t|
         
     | 
| 
       10 
10 
     | 
    
         
             
                    table_title_parse(node, out)
         
     | 
| 
       11 
11 
     | 
    
         
             
                    thead_parse(node, t)
         
     | 
| 
       12 
12 
     | 
    
         
             
                    tbody_parse(node, t)
         
     | 
    
        data/lib/isodoc/ietf/terms.rb
    CHANGED
    
    | 
         @@ -48,18 +48,5 @@ module IsoDoc::Ietf 
     | 
|
| 
       48 
48 
     | 
    
         | 
| 
       49 
49 
     | 
    
         
             
                def termdocsource_parse(_node, _out)
         
     | 
| 
       50 
50 
     | 
    
         
             
                end
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
                def termnote_anchor_names(docxml)
         
     | 
| 
       53 
     | 
    
         
            -
                  docxml.xpath(ns("//term[descendant::termnote]")).each do |t|
         
     | 
| 
       54 
     | 
    
         
            -
                    c = Counter.new
         
     | 
| 
       55 
     | 
    
         
            -
                    notes = t.xpath(ns(".//termnote"))
         
     | 
| 
       56 
     | 
    
         
            -
                    notes.each do |n|
         
     | 
| 
       57 
     | 
    
         
            -
                      next if n["id"].nil? || n["id"].empty?
         
     | 
| 
       58 
     | 
    
         
            -
                      idx = notes.size == 1 ? "" : " #{c.increment(n).print}"
         
     | 
| 
       59 
     | 
    
         
            -
                      @anchors[n["id"]] =
         
     | 
| 
       60 
     | 
    
         
            -
                        anchor_struct(idx, n, @note_xref_lbl, "note", false)
         
     | 
| 
       61 
     | 
    
         
            -
                    end
         
     | 
| 
       62 
     | 
    
         
            -
                  end
         
     | 
| 
       63 
     | 
    
         
            -
                end
         
     | 
| 
       64 
51 
     | 
    
         
             
              end
         
     | 
| 
       65 
52 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "isodoc"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module IsoDoc
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Ietf
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Xref < IsoDoc::Xref
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def termnote_anchor_names(docxml)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    docxml.xpath(ns("//term[descendant::termnote]")).each do |t|
         
     | 
| 
      
 8 
     | 
    
         
            +
                      c = IsoDoc::XrefGen::Counter.new
         
     | 
| 
      
 9 
     | 
    
         
            +
                      notes = t.xpath(ns(".//termnote"))
         
     | 
| 
      
 10 
     | 
    
         
            +
                      notes.each do |n|
         
     | 
| 
      
 11 
     | 
    
         
            +
                        next if n["id"].nil? || n["id"].empty?
         
     | 
| 
      
 12 
     | 
    
         
            +
                        idx = notes.size == 1 ? "" : " #{c.increment(n).print}"
         
     | 
| 
      
 13 
     | 
    
         
            +
                        @anchors[n["id"]] =
         
     | 
| 
      
 14 
     | 
    
         
            +
                          anchor_struct(idx, n, @labels["note_xref"], "note", false)
         
     | 
| 
      
 15 
     | 
    
         
            +
                      end
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -48,14 +48,19 @@ module Metanorma 
     | 
|
| 
       48 
48 
     | 
    
         
             
                    nil
         
     | 
| 
       49 
49 
     | 
    
         
             
                  end
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
      
 51 
     | 
    
         
            +
                  def use_presentation_xml(ext)
         
     | 
| 
      
 52 
     | 
    
         
            +
                    false
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
       51 
55 
     | 
    
         
             
                  def xml2rfc_present?
         
     | 
| 
       52 
56 
     | 
    
         
             
                    !which("xml2rfc").nil?
         
     | 
| 
       53 
57 
     | 
    
         
             
                  end
         
     | 
| 
       54 
58 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
                  def output(isodoc_node, outname, format, options={})
         
     | 
| 
      
 59 
     | 
    
         
            +
                  def output(isodoc_node, inname, outname, format, options={})
         
     | 
| 
       56 
60 
     | 
    
         
             
                    case format
         
     | 
| 
       57 
61 
     | 
    
         
             
                    when :rfc
         
     | 
| 
       58 
     | 
    
         
            -
                       
     | 
| 
      
 62 
     | 
    
         
            +
                      outname ||= inname.sub(/\.xml$/, ".rfc.xml")
         
     | 
| 
      
 63 
     | 
    
         
            +
                      IsoDoc::Ietf::RfcConvert.new(options).convert(inname, isodoc_node, nil, outname)
         
     | 
| 
       59 
64 
     | 
    
         
             
                      @done_rfc = true
         
     | 
| 
       60 
65 
     | 
    
         | 
| 
       61 
66 
     | 
    
         
             
                    when :txt
         
     | 
| 
         @@ -64,9 +69,10 @@ module Metanorma 
     | 
|
| 
       64 
69 
     | 
    
         
             
                        return
         
     | 
| 
       65 
70 
     | 
    
         
             
                      end
         
     | 
| 
       66 
71 
     | 
    
         | 
| 
       67 
     | 
    
         
            -
                      rfcname =  
     | 
| 
       68 
     | 
    
         
            -
                      output(isodoc_node,  
     | 
| 
      
 72 
     | 
    
         
            +
                      rfcname = inname.sub(/\.xml$/, ".rfc.xml")
         
     | 
| 
      
 73 
     | 
    
         
            +
                      output(isodoc_node, inname, rfcname, :rfc, options) unless @done_rfc
         
     | 
| 
       69 
74 
     | 
    
         | 
| 
      
 75 
     | 
    
         
            +
                      outname ||= inname.sub(/\.xml$/, ".txt")
         
     | 
| 
       70 
76 
     | 
    
         
             
                      system("xml2rfc --text #{rfcname} -o #{outname}")
         
     | 
| 
       71 
77 
     | 
    
         | 
| 
       72 
78 
     | 
    
         
             
                    when :pdf
         
     | 
| 
         @@ -75,9 +81,10 @@ module Metanorma 
     | 
|
| 
       75 
81 
     | 
    
         
             
                        return
         
     | 
| 
       76 
82 
     | 
    
         
             
                      end
         
     | 
| 
       77 
83 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
                      rfcname =  
     | 
| 
       79 
     | 
    
         
            -
                      output(isodoc_node,  
     | 
| 
      
 84 
     | 
    
         
            +
                      rfcname = inname.sub(/\.xml$/, ".rfc.xml")
         
     | 
| 
      
 85 
     | 
    
         
            +
                      output(isodoc_node, inname, rfcname, :rfc, options) unless @done_rfc
         
     | 
| 
       80 
86 
     | 
    
         | 
| 
      
 87 
     | 
    
         
            +
                      outname ||= inname.sub(/\.xml$/, ".pdf")
         
     | 
| 
       81 
88 
     | 
    
         
             
                      system("xml2rfc --pdf #{rfcname} -o #{outname}")
         
     | 
| 
       82 
89 
     | 
    
         | 
| 
       83 
90 
     | 
    
         
             
                    when :html
         
     | 
| 
         @@ -86,9 +93,10 @@ module Metanorma 
     | 
|
| 
       86 
93 
     | 
    
         
             
                        return
         
     | 
| 
       87 
94 
     | 
    
         
             
                      end
         
     | 
| 
       88 
95 
     | 
    
         | 
| 
       89 
     | 
    
         
            -
                      rfcname =  
     | 
| 
       90 
     | 
    
         
            -
                      output(isodoc_node,  
     | 
| 
      
 96 
     | 
    
         
            +
                      rfcname = inname.sub(/\.xml$/, ".rfc.xml")
         
     | 
| 
      
 97 
     | 
    
         
            +
                      output(isodoc_node, inname, rfcname, :rfc, options) unless @done_rfc
         
     | 
| 
       91 
98 
     | 
    
         | 
| 
      
 99 
     | 
    
         
            +
                      outname ||= inname.sub(/\.xml$/, ".html")
         
     | 
| 
       92 
100 
     | 
    
         
             
                      system("xml2rfc --html #{rfcname} -o #{outname}")
         
     | 
| 
       93 
101 
     | 
    
         | 
| 
       94 
102 
     | 
    
         
             
                    else
         
     |