update_menu_desc.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. """
  2. @brief Reads menu data from menudata.py and for each command updates
  3. its description (based on interface description).
  4. Updated menu data is printed to stdout.
  5. Support script for wxGUI.
  6. COPYRIGHT: (C) 2008 by the GRASS Development Team
  7. This program is free software under the GNU General Public
  8. License (>=v2). Read the file COPYING that comes with GRASS
  9. for details.
  10. Usage: python update_menu_desc.py
  11. @author Martin Landa <landa.martin gmail.com>
  12. """
  13. import os
  14. import sys
  15. import xml.sax
  16. import xml.sax.handler
  17. HandlerBase=xml.sax.handler.ContentHandler
  18. from xml.sax import make_parser
  19. def read_menudata():
  20. menu = menudata.Data() # get menu data
  21. for mainItem in menu.GetMenu()[0]:
  22. print ' (_("%s"), (' % mainItem[0]
  23. for item1 in mainItem[1]:
  24. if len(item1[0]) == 0: # separator
  25. print ' ("","","", ""),'
  26. continue
  27. if len(item1) == 4:
  28. desc = get_description(item1[1:])
  29. print ' (_("%s"),' % item1[0]
  30. if desc and desc != item1[1]:
  31. print ' _("%s"),' % desc
  32. else:
  33. print ' _("%s"),' % item1[1]
  34. print ' "%s",' % item1[2]
  35. print ' "%s"),' % item1[3]
  36. else: # submenu
  37. print ' (_("%s"), (' % item1[0]
  38. for item2 in item1[1]:
  39. if len(item2[0]) == 0: # separator
  40. print ' ("","","", ""),'
  41. continue
  42. desc = get_description(item2[1:])
  43. print ' (_("%s"),' % item2[0]
  44. if desc and desc != item2[1]:
  45. print ' _("%s"),' % desc
  46. else:
  47. print ' _("%s"),' % item2[1]
  48. print ' "%s",' % item2[2]
  49. print ' "%s"),' % item2[3]
  50. print ' )'
  51. print ' ),'
  52. print ' )'
  53. print ' ),'
  54. def get_description(item):
  55. """!Return command desctiption based on interface
  56. description"""
  57. print
  58. desc, type, cmd = item
  59. if type in ("self.OnMenuCmd", "self.RunMenuCmd"):
  60. module = cmd.split(' ')[0]
  61. grass_task = menuform.grassTask()
  62. handler = menuform.processTask(grass_task)
  63. xml.sax.parseString(menuform.getInterfaceDescription(module), handler )
  64. return grass_task.description.replace('"', '\\"')
  65. return None
  66. def main(argv=None):
  67. if argv is None:
  68. argv = sys.argv
  69. if len(argv) != 1:
  70. print >> sys.stderr, __doc__
  71. return 0
  72. ### i18N
  73. import gettext
  74. gettext.install('grasswxpy', os.path.join(os.getenv("GISBASE"), 'locale'), unicode=True)
  75. read_menudata()
  76. return 0
  77. if __name__ == '__main__':
  78. if os.getenv("GISBASE") is None:
  79. print >> sys.stderr, "You must be in GRASS GIS to run this program."
  80. sys.exit(1)
  81. sys.path.append('../gui_modules')
  82. import menudata
  83. import menuform
  84. sys.exit(main())