Home | History | Annotate | Download | only in qemu
      1 #!/usr/bin/python
      2 
      3 import re
      4 import sys
      5 import getopt
      6 
      7 DX = DY = PX = PY = KX = KY = 0
      8 
      9 _RE_LINE = re.compile("^\s*(?P<keyword>[\w-]+)\s+{\s*$")
     10 _RE_XY = re.compile("^(?P<start>\s*)(?P<xy>[x|y]\s+)(?P<num>\d+)(?P<end>\s*)$")
     11 
     12 def main():
     13   ParseArgs()
     14   ParseInput()
     15 
     16 def Usage():
     17   print >>sys.stderr, """
     18   Usage: %s --dx offset-x-display --dy offset-y-display --px offset-x-phone-buttons --py offset-y-phone-buttons --kx offset-x-keyboard --ky offset-y-keyboard < layout > layout2.
     19 
     20   Unspecified offsets default to 0 (unchanged).
     21   Reads from stdin, outputs to stdout.
     22   Phone buttons: soft-left/top/righ/bottom, home, dpad, dial, power, etc.
     23   Keyboard is the soft keyboard.
     24 
     25   If your shell doesn't let you use negative integers, use _ for minus sign,
     26   i.e. --dx _40 --dy _42 for <-40,-42).
     27   """ % (sys.argv[0])
     28   sys.exit(1)
     29 
     30 def ParseArgs():
     31   global DX, DY, PX, PY, KX, KY
     32   try:
     33     options, args = getopt.getopt(sys.argv[1:], "", ["dx=", "dy=", "px=", "py=", "kx=", "ky="])
     34     for opt, value in options:
     35       if opt in ["--dx"]:
     36         DX = int(value.replace("_", "-"))
     37       elif opt in ["--dy"]:
     38         DY = int(value.replace("_", "-"))
     39       elif opt in ["--px"]:
     40         PX = int(value.replace("_", "-"))
     41       elif opt in ["--py"]:
     42         PY = int(value.replace("_", "-"))
     43       elif opt in ["--kx"]:
     44         KX = int(value.replace("_", "-"))
     45       elif opt in ["--ky"]:
     46         KY = int(value.replace("_", "-"))
     47       else:
     48         Usage()
     49   except getopt.error, msg:
     50     Usage()
     51 
     52 def ParseInput():
     53   global DX, DY, PX, PY, KX, KY
     54 
     55   PHONE = [	"soft-left", "home", "back", "dpad-up", "dpad-down", "dpad-left", "dpad-right", "dpad-center", "phone-dial", "phone-hangup", "power", "volume-up", "volume-down" ]
     56   KEYBOARD = [   "DEL", "CAP", "CAP2", "PERIOD", "ENTER", "ALT", "SYM", "AT", "SPACE", "SLASH", "COMMA", "ALT2" ]
     57 
     58   mode = None
     59   while True:
     60     line = sys.stdin.readline()
     61     if not line:
     62       return
     63     m_line = _RE_LINE.match(line)
     64     if m_line:
     65       keyword = m_line.group("keyword")
     66       if keyword in ["display", "button"]:
     67         mode = keyword
     68         is_phone = False
     69         is_keyboard = False
     70         print >>sys.stderr, "Mode:", mode
     71       else:
     72         if mode == "button" and "{" in line:
     73           is_phone = keyword in PHONE
     74           is_keyboard = (len(keyword) == 1 and keyword.isalnum())
     75           if not is_keyboard:
     76             is_keyboard = keyword in KEYBOARD
     77     elif "}" in line:
     78       is_phone = False
     79       is_keyboard = False
     80       if mode == "display":
     81         mode = None
     82     else:
     83       m_xy = _RE_XY.match(line)
     84       if m_xy:
     85         x = 0
     86         y = 0
     87         if mode == "display":
     88           x = DX
     89           y = DY
     90         elif mode == "button" and is_phone:
     91           x = PX
     92           y = PY
     93         elif mode == "button" and is_keyboard:
     94           x = KX
     95           y = KY
     96         if x or y:
     97           d = m_xy.groupdict()
     98           n = int(d["num"])
     99           if d["xy"].startswith("x"):
    100             n += x
    101           else:
    102             n += y
    103           d["num"] = n
    104           line = "%(start)s%(xy)s%(num)s%(end)s" % d
    105     sys.stdout.write(line)
    106 
    107 
    108 
    109 
    110 if __name__ == "__main__":
    111   main()
    112