Mercurial > hg > config
comparison python/html2flux.py @ 294:a0d830fd8a42
refactor this bad boy
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Sat, 11 May 2013 03:49:06 -0700 |
| parents | 45b970048ae2 |
| children | ee3c1b65d6d1 |
comparison
equal
deleted
inserted
replaced
| 293:45b970048ae2 | 294:a0d830fd8a42 |
|---|---|
| 14 ('submenu name': [('program label', 'command'), | 14 ('submenu name': [('program label', 'command'), |
| 15 ('another program label', 'command2')]) | 15 ('another program label', 'command2')]) |
| 16 """ | 16 """ |
| 17 | 17 |
| 18 import optparse | 18 import optparse |
| 19 import os | |
| 19 import sys | 20 import sys |
| 20 from lxml import etree | 21 from lxml import etree |
| 21 from lsex import lsex # local import | 22 from lsex import lsex # local import |
| 22 | 23 |
| 23 # available executables | 24 # available executables |
| 25 | 26 |
| 26 def readmenu(dl, output, top=True): | 27 def readmenu(dl, output, top=True): |
| 27 | 28 |
| 28 menu_items = [] | 29 menu_items = [] |
| 29 name = None # menu name | 30 name = None # menu name |
| 31 firstchild = True | |
| 32 label = None | |
| 30 for child in dl.iterchildren(): | 33 for child in dl.iterchildren(): |
| 31 | 34 |
| 32 if not top and child.tag == 'a': | 35 if not top and child.tag == 'a' and firstchild: |
| 33 # TODO: better way of labeling this! | 36 # TODO: better way of labeling this! |
| 34 print >> output, '[submenu] (%s)' % child.text | 37 name = child.text.strip() |
| 35 | 38 |
| 36 if child.tag == 'dt': | 39 if child.tag == 'dt': |
| 37 # item label | 40 # item label |
| 38 label = ' '.join([i.strip() for i in child.itertext() if i.strip()]) | 41 label = ' '.join([i.strip() for i in child.itertext() if i.strip()]) |
| 39 if child.tag == 'dd': | 42 if child.tag == 'dd': |
| 43 # command | |
| 40 command = ' '.join([i.strip() for i in child.itertext() if i.strip()]) | 44 command = ' '.join([i.strip() for i in child.itertext() if i.strip()]) |
| 45 # TODO: classes | |
| 41 executable = command.split()[0] | 46 executable = command.split()[0] |
| 42 if executable in executables or os.path.isabs(executable): | 47 if executable in executables or os.path.isabs(executable): |
| 43 print >> output, '[exec] (%s) {%s}' % (label, command) | 48 menu_items.append((label, command)) |
| 44 | 49 |
| 50 # submenu | |
| 45 if child.tag == 'dl': | 51 if child.tag == 'dl': |
| 46 printmenu(child, output, top=False) | 52 menu_items.append(readmenu(child, output, top=False)) |
| 53 | |
| 54 return (name, menu_items) | |
| 55 | |
| 56 def printflux(name, menu, output, top=True): | |
| 57 """ | |
| 58 - output: file-like object for writing | |
| 59 """ | |
| 60 name = name or '' | |
| 61 print >> output, '[submenu] (%s)' % name | |
| 62 for name, item in menu: | |
| 63 if isinstance(item, basestring): | |
| 64 # command | |
| 65 print >> output, '[exec] (%s) {%s}' % (name, item) | |
| 66 else: | |
| 67 # submenu | |
| 68 printflux(name, item, output, top=False) | |
| 47 if not top: | 69 if not top: |
| 48 print >> output, '[end]' | 70 print >> output, '[end]' |
| 49 | 71 |
| 50 def printmenu(dl, output): | 72 def printmenu(dl, output): |
| 51 """ | 73 name, menu = readmenu(dl, output) |
| 52 - output: file-like object for writing | 74 printflux(name, menu, output) |
| 53 """ | |
| 54 menu = readmenu(dl, output) | |
| 55 | 75 |
| 56 def main(args=sys.argv[1:]): | 76 def main(args=sys.argv[1:]): |
| 57 """command line interface""" | 77 """command line interface""" |
| 58 | 78 |
| 59 # parse command line option | 79 # parse command line option |
