unusedsvgs.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import getopt, sys, os, os.path, re, xml.dom.minidom, xml.dom
  2. def usage():
  3. print """
  4. usage:
  5. unusedsvgs.py -f [fzp folder] -s [svg folder]
  6. lists orphan svgs
  7. """
  8. def main():
  9. try:
  10. opts, args = getopt.getopt(sys.argv[1:], "hf:s:", ["help", "fzp", "svg"])
  11. except getopt.GetoptError, err:
  12. # print help information and exit:
  13. print str(err) # will print something like "option -a not recognized"
  14. usage()
  15. return
  16. fzpdir = None
  17. svgdir = None
  18. for o, a in opts:
  19. #print o
  20. #print a
  21. if o in ("-f", "--fzp"):
  22. fzpdir = a
  23. elif o in ("-s", "--svg"):
  24. svgdir = a
  25. elif o in ("-h", "--help"):
  26. usage()
  27. return
  28. else:
  29. print "unhandled option", o
  30. return
  31. if not fzpdir:
  32. print "missing fzp folder argument"
  33. usage()
  34. return
  35. if not svgdir:
  36. print "missing svg folder argument"
  37. usage()
  38. return
  39. svgfiles = {}
  40. for root, dirs, files in os.walk(svgdir, topdown=False):
  41. for filename in files:
  42. if not filename.endswith(".svg"):
  43. continue
  44. basename = os.path.basename(root)
  45. if svgfiles.get(basename) == None:
  46. svgfiles[basename] = []
  47. svgfiles[basename].append(filename)
  48. viewnames = ["iconView", "breadboardView", "schematicView", "pcbView"]
  49. for root, dirs, files in os.walk(fzpdir, topdown=False):
  50. for filename in files:
  51. if not filename.endswith(".fzp"):
  52. continue
  53. fzpFilename = os.path.join(root, filename)
  54. try:
  55. dom = xml.dom.minidom.parse(fzpFilename)
  56. except xml.parsers.expat.ExpatError, err:
  57. print str(err), fzpFilename
  58. continue
  59. fzp = dom.documentElement
  60. for viewname in viewnames:
  61. viewNodes = fzp.getElementsByTagName(viewname)
  62. for viewNode in viewNodes:
  63. layersNodes = viewNode.getElementsByTagName("layers")
  64. for layersNode in layersNodes:
  65. image = layersNode.getAttribute("image")
  66. dn = os.path.dirname(image)
  67. viewFiles = svgfiles.get(dn)
  68. if viewFiles:
  69. fn = os.path.basename(image)
  70. try:
  71. if fn in viewFiles:
  72. print "{0} uses {1}/{2}".format(os.path.basename(root), dn, fn)
  73. viewFiles.remove(fn)
  74. except:
  75. pass
  76. for key in svgfiles.keys():
  77. for name in svgfiles.get(key):
  78. print "unused {0}/{1}".format(key, name)
  79. if __name__ == "__main__":
  80. main()