text: #!/usr/bin/python
  '''
  Extract _("...") strings for translation and convert to Qt4 stringdefs so that
  they can be picked up by Qt linguist.
  '''
  from subprocess import Popen, PIPE
  import glob
  import operator
  import os
  import sys
  
  OUT_CPP="qt/trustplusstrings.cpp"
  EMPTY=['""']
  
  def parse_po(text):
      """
      Parse 'po' format produced by xgettext.
      Return a list of (msgid,msgstr) tuples.
      """
      messages = []
      msgid = []
      msgstr = []
      in_msgid = False
      in_msgstr = False
  
      for line in text.split('\n'):
          line = line.rstrip('\r')
          if line.startswith('msgid '):
              if in_msgstr:
                  messages.append((msgid, msgstr))
                  in_msgstr = False
              # message start
              in_msgid = True
  
              msgid = [line[6:]]
          elif line.startswith('msgstr '):
              in_msgid = False
              in_msgstr = True
              msgstr = [line[7:]]
          elif line.startswith('"'):
              if in_msgid:
                  msgid.append(line)
              if in_msgstr:
                  msgstr.append(line)
  
      if in_msgstr:
          messages.append((msgid, msgstr))
  
      return messages
  
  files = sys.argv[1:]
  
  # xgettext -n --keyword=_ $FILES
  XGETTEXT=os.getenv('XGETTEXT', 'xgettext')
  child = Popen([XGETTEXT,'--output=-','-n','--keyword=_'] + files, stdout=PIPE)
  (out, err) = child.communicate()
  
  messages = parse_po(out)
  
  f = open(OUT_CPP, 'w')
  f.write("""
  
  #include <QtGlobal>
  
  // Automatically generated by extract_strings.py
  #ifdef __GNUC__
  #define UNUSED __attribute__((unused))
  #else
  #define UNUSED
  #endif
  """)
  f.write('static const char UNUSED *trustplus_strings[] = {\n')
  messages.sort(key=operator.itemgetter(0))
  for (msgid, msgstr) in messages:
      if msgid != EMPTY:
          f.write('QT_TRANSLATE_NOOP("trustplus-core", %s),\n' % ('\n'.join(msgid)))
  f.write('};\n')
  f.close()
  