File: svg-id-cleanup.rb

package info (click to toggle)
ruby-kramdown-rfc2629 1.7.29-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 524 kB
  • sloc: ruby: 3,907; makefile: 4
file content (39 lines) | stat: -rw-r--r-- 1,195 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
require 'rexml/document'

SVG_NAMESPACES = {"svg"=>"http://www.w3.org/2000/svg",
                  "xlink"=>"http://www.w3.org/1999/xlink"}

def svg_id_cleanup(d)
  gensym = "gensym000"

  REXML::XPath.each(d.root, "//svg:svg", SVG_NAMESPACES) do |x|
    gensym = gensym.succ
    # warn "*** SVG"
    # warn "*** SVG: #{x.to_s.size}"
    found_as_id = Set[]
    found_as_href = Set[]
    REXML::XPath.each(x, ".//*[@id]", SVG_NAMESPACES) do |y|
      # warn "*** ID: #{y}"
      name = y.attributes["id"]
      if found_as_id === name
        warn "*** duplicate ID #{name}"
      end
      found_as_id.add(name)
      y.attributes["id"] = "#{name}-#{gensym}"
    end
    REXML::XPath.each(x, ".//*[@xlink:href]", SVG_NAMESPACES) do |y|
      # warn "*** HREF: #{y}"
      name = y.attributes["href"]
      name1 = name[1..-1]
      if !found_as_id === name1
        warn "*** unknown HREF #{name}"
      end
      found_as_href.add(name1)
      y.attributes["xlink:href"] = "#{name}-#{gensym}"
    end
    found_as_id -= found_as_href
    warn "*** warning: unused ID: #{found_as_id.to_a.join(", ")}" unless found_as_id.empty?
  end
rescue => detail
  warn "*** Can't clean SVG: #{detail}"
end