4 # WARNING: this script can't find files included in a different directory
11 def read_pipe (command):
13 pipe = os.popen (command)
16 print "pipe failed: %(command)s" % locals ()
20 optlist, texi_files = getopt.getopt(sys.argv[1:],'no:d:b:i:l:',['skeleton', 'gettext'])
21 process_includes = not ('-n', '') in optlist # -n don't process @include's in texinfo files
23 make_gettext = ('--gettext', '') in optlist # --gettext generate a node list from a Texinfo source
24 make_skeleton = ('--skeleton', '') in optlist # --skeleton extract the node tree from a Texinfo source
26 output_file = 'doc.pot'
29 head_committish = read_pipe ('git-rev-parse HEAD')
30 intro_blurb = '''@c -*- coding: utf-8; mode: texinfo%(doclang)s -*-
31 @c This file is part of %(topfile)s
33 Translation of GIT committish: %(head_committish)s
34 When revising a translation, copy the HEAD committish of the
35 version that you are working on. See TRANSLATION for details.
41 When you actually translate this file, please remove these lines as
42 well as all `UNTRANSLATED NODE: IGNORE ME' lines.
46 if x[0] == '-o': # -o NAME set PO output file name to NAME
48 elif x[0] == '-d': # -d DIR set working directory to DIR
50 elif x[0] == '-b': # -b BLURB set blurb written at each node to BLURB
52 elif x[0] == '-i': # -i BLURB set blurb written at beginning of each file to BLURB
54 elif x[0] == '-l': # -l ISOLANG set documentlanguage to ISOLANG
55 doclang = '; documentlanguage: ' + x[1]
58 def process_texi (texifilename, i_blurb, n_blurb, write_skeleton, topfile, output_file=None):
60 f = open (texifilename, 'r')
65 g = open (os.path.basename (texifilename), 'w')
67 subst.update (locals ())
68 g.write (i_blurb % subst)
69 tutu = re.findall (r"""^(\*) +([^:
71 ]*?$|^@(include|menu|end menu|node|(?:unnumbered|appendix)(?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|(?:major|chap|(?:sub){0,2})heading) *([^
73 ]*?$|@(rglos){(.+?)}""", texifile, re.M)
77 g.write ('* ' + item[1] + '::\n')
78 elif output_file and item[4] == 'rglos':
79 output_file.write ('_(r"' + item[5] + '") # @rglos in ' + texifilename + '\n')
81 g.write ('@' + item[2] + ' ' + item[3] + '\n')
85 if not item[2] in ('include', 'menu', 'end menu'):
87 output_file.write ('_(r"' + item[3].strip () + '") # @' + item[2] + \
88 ' in ' + texifilename + '\n')
91 elif item[2] == 'include':
92 includes.append(item[3])
96 toto = re.findall (r"""^@(include|node|(?:unnumbered|appendix)(?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|(?:major|chap|(?:sub){0,2})heading) *([^
98 ]*?$|@(rglos){(.+?)}""", texifile, re.M)
100 if item[0] == 'include':
101 includes.append(item[1])
102 elif item[2] == 'rglos':
103 output_file.write ('# @rglos in ' + texifilename + '\n_(r"' + item[3] + '")\n')
105 output_file.write ('# @' + item[0] + ' in ' + texifilename + '\n_(r"' + item[1].strip () + '")\n')
107 dir = os.path.dirname (texifilename)
108 for item in includes:
109 process_texi (os.path.join (dir, item.strip ()), i_blurb, n_blurb, write_skeleton, topfile, output_file)
110 except IOError, (errno, strerror):
111 print "I/O error(%s): %s: %s" % (errno, texifilename, strerror)
114 if intro_blurb != '':
115 intro_blurb += '\n\n'
117 node_blurb = '\n' + node_blurb + '\n\n'
119 node_list_filename = 'node_list'
120 node_list = open (node_list_filename, 'w')
121 node_list.write ('# -*- coding: utf-8 -*-\n')
122 for texi_file in texi_files:
123 process_texi (texi_file, intro_blurb, node_blurb, make_skeleton, os.path.basename (texi_file), node_list)
124 for word in ('Up:', 'Next:', 'Previous:', 'Appendix ', 'Footnotes', 'Table of Contents'):
125 node_list.write ('_(r"' + word + '")\n')
127 os.system ('xgettext -c -L Python --no-location -o ' + output_file + ' ' + node_list_filename)
129 for texi_file in texi_files:
130 process_texi (texi_file, intro_blurb, node_blurb, make_skeleton, os.path.basename (texi_file))