Sha256: 4e83d8fe70c0e35252fe809174fea69737ff2ca1448a880a23eed6cbd936f67d

Contents?: true

Size: 1.55 KB

Versions: 17

Compression:

Stored size: 1.55 KB

Contents

module Metanorma
  module Standoc
    module Cleanup
      # Indices sort after letter but before any following
      # letter (x, x_m, x_1, xa); we use colon to force that sort order.
      # Numbers sort *after* letters; we use thorn to force that sort order.
      def symbol_key(sym)
        key = sym.dup
        key.traverse do |n|
          n.name == "math" and
            n.replace(grkletters(MathML2AsciiMath.m2a(n.to_xml)))
        end
        ret = Nokogiri::XML(key.to_xml)
        HTMLEntities.new.decode(ret.text.downcase)
          .gsub(/[\[\]{}<>()]/, "").gsub(/\s/m, "")
          .gsub(/[[:punct:]]|[_^]/, ":\\0").gsub(/`/, "")
          .gsub(/[0-9]+/, "รพ\\0")
      end

      def grkletters(text)
        text.gsub(/\b(alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|
                      lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|
                      psi|omega)\b/xi, "&\\1;")
      end

      def extract_symbols_list(dlist)
        dl_out = []
        dlist.xpath("./dt | ./dd").each do |dtd|
          if dtd.name == "dt"
            dl_out << { dt: dtd.remove, key: symbol_key(dtd) }
          else
            dl_out.last[:dd] = dtd.remove
          end
        end
        dl_out
      end

      def symbols_cleanup(docxml)
        docxml.xpath("//definitions/dl").each do |dl|
          dl_out = extract_symbols_list(dl)
          dl_out.sort! { |a, b| a[:key] <=> b[:key] || a[:dt] <=> b[:dt] }
          dl.children = dl_out.map { |d| d[:dt].to_s + d[:dd].to_s }.join("\n")
        end
        docxml
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
metanorma-standoc-2.1.5 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.1.4 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.1.3 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.1.2 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.1.1 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.1.0 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.0.7 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.0.6 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.0.5.3 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.0.5.2 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.0.5.1 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.0.5 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.0.4 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.0.3 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.0.2 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.0.1 lib/metanorma/standoc/cleanup_symbols.rb
metanorma-standoc-2.0.0 lib/metanorma/standoc/cleanup_symbols.rb