copper1svg.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # usage:
  2. # copper1svg.py -d [svg folder]
  3. # adds a <g id="copper1"> if there isn't one found already.
  4. import getopt, sys, os, os.path, re, xml.dom.minidom, xml.dom
  5. def usage():
  6. print """
  7. usage:
  8. copper1svg.py -d [svg folder]
  9. adds a <g id="copper1"> if there isn't one found already.
  10. """
  11. def main():
  12. try:
  13. opts, args = getopt.getopt(sys.argv[1:], "hd:", ["help", "directory"])
  14. except getopt.GetoptError, err:
  15. # print help information and exit:
  16. print str(err) # will print something like "option -a not recognized"
  17. usage()
  18. sys.exit(2)
  19. dir = None
  20. for o, a in opts:
  21. #print o
  22. #print a
  23. if o in ("-d", "--directory"):
  24. dir = a
  25. elif o in ("-h", "--help"):
  26. usage()
  27. sys.exit(2)
  28. else:
  29. assert False, "unhandled option"
  30. if(not(dir)):
  31. usage()
  32. sys.exit(2)
  33. for root, dirs, files in os.walk(dir, topdown=False):
  34. for filename in files:
  35. if not filename.endswith(".svg"):
  36. continue
  37. svgFilename = os.path.join(root, filename)
  38. try:
  39. dom = xml.dom.minidom.parse(svgFilename)
  40. except xml.parsers.expat.ExpatError, err:
  41. print str(err), svgFilename
  42. continue
  43. svg = dom.documentElement
  44. gNodes = svg.getElementsByTagName("g")
  45. copper1 = None
  46. copper0 = None
  47. for g in gNodes:
  48. if g.getAttribute("id") == "copper1":
  49. copper1 = g
  50. if g.getAttribute("id") == "copper0":
  51. copper0 = g
  52. if copper1:
  53. continue
  54. if not copper0:
  55. print "copper0 not found in", svgFilename
  56. continue
  57. print "adding copper1 to", svgFilename
  58. copper1 = dom.createElement("g")
  59. copper1.setAttribute("id", "copper1")
  60. copper0.parentNode.insertBefore(copper1, copper0)
  61. copper1.appendChild(copper0)
  62. outfile = open(svgFilename, 'wb')
  63. s = dom.toxml("UTF-8")
  64. # s = re.sub('\s*\n\s*\n', '', s) # ghosts of removed (and unlinked) nodes seem to generate newlines, so tighten up the xml
  65. outfile.write(s)
  66. outfile.flush()
  67. outfile.close()
  68. if __name__ == "__main__":
  69. main()