Mercurial > hg
annotate i18n/hggettext @ 35006:8154119ed236
cat: test output path behvaior when target path does not exist
In the next patch, we will change the behavior of the cat command to create
output file parent directories before attempting to write the output file.
This patch documents the current unfortunate behavior.
Differential Revision: https://phab.mercurial-scm.org/D1331
author | Ryan McElroy <rmcelroy@fb.com> |
---|---|
date | Tue, 07 Nov 2017 13:46:15 -0800 |
parents | d5ef17608159 |
children | 0585337ea787 |
rev | line source |
---|---|
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
2 # |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
3 # hggettext - carefully extract docstrings for Mercurial |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
4 # |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
5 # Copyright 2009 Matt Mackall <mpm@selenic.com> and others |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
6 # |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
7 # This software may be used and distributed according to the terms of the |
10263 | 8 # GNU General Public License version 2 or any later version. |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
9 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
10 # The normalize function is taken from pygettext which is distributed |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
11 # with Python under the Python License, which is GPL compatible. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
12 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
13 """Extract docstrings from Mercurial commands. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
14 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
15 Compared to pygettext, this script knows about the cmdtable and table |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
16 dictionaries used by Mercurial, and will only extract docstrings from |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
17 functions mentioned therein. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
18 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
19 Use xgettext like normal to extract strings marked as translatable and |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
20 join the message cataloges to get the final catalog. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
21 """ |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
22 |
29171
de28dedd1ff1
py3: make i18n/hggettext use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29170
diff
changeset
|
23 from __future__ import absolute_import, print_function |
29170
2516bba643e7
py3: make i18n/hggettext use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
12823
diff
changeset
|
24 |
2516bba643e7
py3: make i18n/hggettext use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
12823
diff
changeset
|
25 import inspect |
2516bba643e7
py3: make i18n/hggettext use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
12823
diff
changeset
|
26 import os |
33817
726dd73df3b9
i18n: ignore doctest part to avoid warning at "make update-pot"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33815
diff
changeset
|
27 import re |
29170
2516bba643e7
py3: make i18n/hggettext use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
12823
diff
changeset
|
28 import sys |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
29 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
30 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
31 def escape(s): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
32 # The order is important, the backslash must be escaped first |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
33 # since the other replacements introduce new backslashes |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
34 # themselves. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
35 s = s.replace('\\', '\\\\') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
36 s = s.replace('\n', '\\n') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
37 s = s.replace('\r', '\\r') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
38 s = s.replace('\t', '\\t') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
39 s = s.replace('"', '\\"') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
40 return s |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
41 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
42 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
43 def normalize(s): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
44 # This converts the various Python string types into a format that |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
45 # is appropriate for .po files, namely much closer to C style. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
46 lines = s.split('\n') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
47 if len(lines) == 1: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
48 s = '"' + escape(s) + '"' |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
49 else: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
50 if not lines[-1]: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
51 del lines[-1] |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
52 lines[-1] = lines[-1] + '\n' |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
53 lines = map(escape, lines) |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
54 lineterm = '\\n"\n"' |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
55 s = '""\n"' + lineterm.join(lines) + '"' |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
56 return s |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
57 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
58 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
59 def poentry(path, lineno, s): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
60 return ('#: %s:%d\n' % (path, lineno) + |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
61 'msgid %s\n' % normalize(s) + |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
62 'msgstr ""\n') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
63 |
33817
726dd73df3b9
i18n: ignore doctest part to avoid warning at "make update-pot"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33815
diff
changeset
|
64 doctestre = re.compile(r'^ +>>> ', re.MULTILINE) |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
65 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
66 def offset(src, doc, name, default): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
67 """Compute offset or issue a warning on stdout.""" |
33817
726dd73df3b9
i18n: ignore doctest part to avoid warning at "make update-pot"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33815
diff
changeset
|
68 # remove doctest part, in order to avoid backslash mismatching |
726dd73df3b9
i18n: ignore doctest part to avoid warning at "make update-pot"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33815
diff
changeset
|
69 m = doctestre.search(doc) |
726dd73df3b9
i18n: ignore doctest part to avoid warning at "make update-pot"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33815
diff
changeset
|
70 if m: |
726dd73df3b9
i18n: ignore doctest part to avoid warning at "make update-pot"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33815
diff
changeset
|
71 doc = doc[:m.start()] |
726dd73df3b9
i18n: ignore doctest part to avoid warning at "make update-pot"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33815
diff
changeset
|
72 |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
73 # Backslashes in doc appear doubled in src. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
74 end = src.find(doc.replace('\\', '\\\\')) |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
75 if end == -1: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
76 # This can happen if the docstring contains unnecessary escape |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
77 # sequences such as \" in a triple-quoted string. The problem |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
78 # is that \" is turned into " and so doc wont appear in src. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
79 sys.stderr.write("warning: unknown offset in %s, assuming %d lines\n" |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
80 % (name, default)) |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
81 return default |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
82 else: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
83 return src.count('\n', 0, end) |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
84 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
85 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
86 def importpath(path): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
87 """Import a path like foo/bar/baz.py and return the baz module.""" |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
88 if path.endswith('.py'): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
89 path = path[:-3] |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
90 if path.endswith('/__init__'): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
91 path = path[:-9] |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
92 path = path.replace('/', '.') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
93 mod = __import__(path) |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
94 for comp in path.split('.')[1:]: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
95 mod = getattr(mod, comp) |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
96 return mod |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
97 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
98 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
99 def docstrings(path): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
100 """Extract docstrings from path. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
101 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
102 This respects the Mercurial cmdtable/table convention and will |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
103 only extract docstrings from functions mentioned in these tables. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
104 """ |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
105 mod = importpath(path) |
33819
d5ef17608159
i18n: ignore docstring for modules under mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33818
diff
changeset
|
106 if not path.startswith('mercurial/') and mod.__doc__: |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
107 src = open(path).read() |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
108 lineno = 1 + offset(src, mod.__doc__, path, 7) |
29171
de28dedd1ff1
py3: make i18n/hggettext use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29170
diff
changeset
|
109 print(poentry(path, lineno, mod.__doc__)) |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
110 |
12823
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
10263
diff
changeset
|
111 functions = list(getattr(mod, 'i18nfunctions', [])) |
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
10263
diff
changeset
|
112 functions = [(f, True) for f in functions] |
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
10263
diff
changeset
|
113 |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
114 cmdtable = getattr(mod, 'cmdtable', {}) |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
115 if not cmdtable: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
116 # Maybe we are processing mercurial.commands? |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
117 cmdtable = getattr(mod, 'table', {}) |
12823
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
10263
diff
changeset
|
118 functions.extend((c[0], False) for c in cmdtable.itervalues()) |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
119 |
12823
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
10263
diff
changeset
|
120 for func, rstrip in functions: |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
121 if func.__doc__: |
33818
ed04d7254a91
i18n: use saved object to get actual function information if available
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33817
diff
changeset
|
122 docobj = func # this might be a proxy to provide formatted doc |
ed04d7254a91
i18n: use saved object to get actual function information if available
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33817
diff
changeset
|
123 func = getattr(func, '_origfunc', func) |
33621
16a175b3681e
i18n: use actual filename, in which function is defined, for hg.pot
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29720
diff
changeset
|
124 funcmod = inspect.getmodule(func) |
16a175b3681e
i18n: use actual filename, in which function is defined, for hg.pot
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29720
diff
changeset
|
125 extra = '' |
16a175b3681e
i18n: use actual filename, in which function is defined, for hg.pot
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29720
diff
changeset
|
126 if funcmod.__package__ == funcmod.__name__: |
16a175b3681e
i18n: use actual filename, in which function is defined, for hg.pot
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29720
diff
changeset
|
127 extra = '/__init__' |
16a175b3681e
i18n: use actual filename, in which function is defined, for hg.pot
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29720
diff
changeset
|
128 actualpath = '%s%s.py' % (funcmod.__name__.replace('.', '/'), extra) |
16a175b3681e
i18n: use actual filename, in which function is defined, for hg.pot
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29720
diff
changeset
|
129 |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
130 src = inspect.getsource(func) |
33621
16a175b3681e
i18n: use actual filename, in which function is defined, for hg.pot
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29720
diff
changeset
|
131 name = "%s.%s" % (actualpath, func.__name__) |
29720
041fecbb588a
i18n: use inspect.getsourcelines() to obtain lineno from func or class
Yuya Nishihara <yuya@tcha.org>
parents:
29171
diff
changeset
|
132 lineno = inspect.getsourcelines(func)[1] |
33818
ed04d7254a91
i18n: use saved object to get actual function information if available
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33817
diff
changeset
|
133 doc = docobj.__doc__ |
ed04d7254a91
i18n: use saved object to get actual function information if available
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33817
diff
changeset
|
134 origdoc = getattr(docobj, '_origdoc', '') |
12823
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
10263
diff
changeset
|
135 if rstrip: |
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
10263
diff
changeset
|
136 doc = doc.rstrip() |
33815
97ee669f1f6d
i18n: make hggettext use original docstring to compute offset
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33621
diff
changeset
|
137 origdoc = origdoc.rstrip() |
97ee669f1f6d
i18n: make hggettext use original docstring to compute offset
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33621
diff
changeset
|
138 if origdoc: |
97ee669f1f6d
i18n: make hggettext use original docstring to compute offset
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33621
diff
changeset
|
139 lineno += offset(src, origdoc, name, 1) |
97ee669f1f6d
i18n: make hggettext use original docstring to compute offset
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33621
diff
changeset
|
140 else: |
97ee669f1f6d
i18n: make hggettext use original docstring to compute offset
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33621
diff
changeset
|
141 lineno += offset(src, doc, name, 1) |
33621
16a175b3681e
i18n: use actual filename, in which function is defined, for hg.pot
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29720
diff
changeset
|
142 print(poentry(actualpath, lineno, doc)) |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
143 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
144 |
9539
c904e76e3834
help: move help topics from mercurial/help.py to help/*.txt
Martin Geisler <mg@lazybytes.net>
parents:
8626
diff
changeset
|
145 def rawtext(path): |
c904e76e3834
help: move help topics from mercurial/help.py to help/*.txt
Martin Geisler <mg@lazybytes.net>
parents:
8626
diff
changeset
|
146 src = open(path).read() |
29171
de28dedd1ff1
py3: make i18n/hggettext use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29170
diff
changeset
|
147 print(poentry(path, 1, src)) |
9539
c904e76e3834
help: move help topics from mercurial/help.py to help/*.txt
Martin Geisler <mg@lazybytes.net>
parents:
8626
diff
changeset
|
148 |
c904e76e3834
help: move help topics from mercurial/help.py to help/*.txt
Martin Geisler <mg@lazybytes.net>
parents:
8626
diff
changeset
|
149 |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
150 if __name__ == "__main__": |
8626
1fc1c77d4863
hggettext: ensure correct Mercurial is imported
Martin Geisler <mg@lazybytes.net>
parents:
8542
diff
changeset
|
151 # It is very important that we import the Mercurial modules from |
1fc1c77d4863
hggettext: ensure correct Mercurial is imported
Martin Geisler <mg@lazybytes.net>
parents:
8542
diff
changeset
|
152 # the source tree where hggettext is executed. Otherwise we might |
1fc1c77d4863
hggettext: ensure correct Mercurial is imported
Martin Geisler <mg@lazybytes.net>
parents:
8542
diff
changeset
|
153 # accidentally import and extract strings from a Mercurial |
1fc1c77d4863
hggettext: ensure correct Mercurial is imported
Martin Geisler <mg@lazybytes.net>
parents:
8542
diff
changeset
|
154 # installation mentioned in PYTHONPATH. |
1fc1c77d4863
hggettext: ensure correct Mercurial is imported
Martin Geisler <mg@lazybytes.net>
parents:
8542
diff
changeset
|
155 sys.path.insert(0, os.getcwd()) |
1fc1c77d4863
hggettext: ensure correct Mercurial is imported
Martin Geisler <mg@lazybytes.net>
parents:
8542
diff
changeset
|
156 from mercurial import demandimport; demandimport.enable() |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
157 for path in sys.argv[1:]: |
9539
c904e76e3834
help: move help topics from mercurial/help.py to help/*.txt
Martin Geisler <mg@lazybytes.net>
parents:
8626
diff
changeset
|
158 if path.endswith('.txt'): |
c904e76e3834
help: move help topics from mercurial/help.py to help/*.txt
Martin Geisler <mg@lazybytes.net>
parents:
8626
diff
changeset
|
159 rawtext(path) |
c904e76e3834
help: move help topics from mercurial/help.py to help/*.txt
Martin Geisler <mg@lazybytes.net>
parents:
8626
diff
changeset
|
160 else: |
c904e76e3834
help: move help topics from mercurial/help.py to help/*.txt
Martin Geisler <mg@lazybytes.net>
parents:
8626
diff
changeset
|
161 docstrings(path) |