Mercurial > hg
annotate i18n/hggettext @ 50404:64cdd80d6909
branching: merge stable into default
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Fri, 24 Mar 2023 10:43:47 +0100 |
parents | 6000f5b25c9b |
children | f4733654f144 |
rev | line source |
---|---|
45830
c102b704edb5
global: use python3 in shebangs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
45763
diff
changeset
|
1 #!/usr/bin/env python3 |
8542
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 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
45830
diff
changeset
|
5 # Copyright 2009 Olivia Mackall <olivia@selenic.com> and others |
8542
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 |
29170
2516bba643e7
py3: make i18n/hggettext use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
12823
diff
changeset
|
23 |
2516bba643e7
py3: make i18n/hggettext use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
12823
diff
changeset
|
24 import inspect |
2516bba643e7
py3: make i18n/hggettext use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
12823
diff
changeset
|
25 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
|
26 import re |
29170
2516bba643e7
py3: make i18n/hggettext use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
12823
diff
changeset
|
27 import sys |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
28 |
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 def escape(s): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
31 # The order is important, the backslash must be escaped first |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
32 # since the other replacements introduce new backslashes |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
33 # themselves. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
34 s = s.replace('\\', '\\\\') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
35 s = s.replace('\n', '\\n') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
36 s = s.replace('\r', '\\r') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
37 s = s.replace('\t', '\\t') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
38 s = s.replace('"', '\\"') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
39 return s |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
40 |
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 def normalize(s): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
43 # 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
|
44 # 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
|
45 lines = s.split('\n') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
46 if len(lines) == 1: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
47 s = '"' + escape(s) + '"' |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
48 else: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
49 if not lines[-1]: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
50 del lines[-1] |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
51 lines[-1] = lines[-1] + '\n' |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
52 lines = map(escape, lines) |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
53 lineterm = '\\n"\n"' |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
54 s = '""\n"' + lineterm.join(lines) + '"' |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
55 return s |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
56 |
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 def poentry(path, lineno, s): |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
59 return ( |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
60 '#: %s:%d\n' % (path, lineno) |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
61 + 'msgid %s\n' % normalize(s) |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
62 + 'msgstr ""\n' |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
63 ) |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
64 |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
65 |
33817
726dd73df3b9
i18n: ignore doctest part to avoid warning at "make update-pot"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33815
diff
changeset
|
66 doctestre = re.compile(r'^ +>>> ', re.MULTILINE) |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
67 |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
68 |
38815
617ae7e33a65
i18n: format warning of hggettext in standard compiler error style
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
36948
diff
changeset
|
69 def offset(src, doc, name, lineno, default): |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
70 """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
|
71 # 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
|
72 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
|
73 if m: |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
74 doc = doc[: m.start()] |
33817
726dd73df3b9
i18n: ignore doctest part to avoid warning at "make update-pot"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33815
diff
changeset
|
75 |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
76 # Backslashes in doc appear doubled in src. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
77 end = src.find(doc.replace('\\', '\\\\')) |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
78 if end == -1: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
79 # This can happen if the docstring contains unnecessary escape |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
80 # sequences such as \" in a triple-quoted string. The problem |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
81 # is that \" is turned into " and so doc wont appear in src. |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
82 sys.stderr.write( |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
83 "%s:%d:warning:" |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
84 " unknown docstr offset, assuming %d lines\n" |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
85 % (name, lineno, default) |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
86 ) |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
87 return default |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
88 else: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
89 return src.count('\n', 0, end) |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
90 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
91 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
92 def importpath(path): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
93 """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
|
94 if path.endswith('.py'): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
95 path = path[:-3] |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
96 if path.endswith('/__init__'): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
97 path = path[:-9] |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
98 path = path.replace('/', '.') |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
99 mod = __import__(path) |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
100 for comp in path.split('.')[1:]: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
101 mod = getattr(mod, comp) |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
102 return mod |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
103 |
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 def docstrings(path): |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
106 """Extract docstrings from path. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
107 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
108 This respects the Mercurial cmdtable/table convention and will |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
109 only extract docstrings from functions mentioned in these tables. |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
110 """ |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
111 mod = importpath(path) |
33819
d5ef17608159
i18n: ignore docstring for modules under mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33818
diff
changeset
|
112 if not path.startswith('mercurial/') and mod.__doc__: |
36948
0585337ea787
cleanup: fix some latent open(path).read() et al calls we previously missed
Augie Fackler <augie@google.com>
parents:
33819
diff
changeset
|
113 with open(path) as fobj: |
0585337ea787
cleanup: fix some latent open(path).read() et al calls we previously missed
Augie Fackler <augie@google.com>
parents:
33819
diff
changeset
|
114 src = fobj.read() |
38815
617ae7e33a65
i18n: format warning of hggettext in standard compiler error style
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
36948
diff
changeset
|
115 lineno = 1 + offset(src, mod.__doc__, path, 1, 7) |
29171
de28dedd1ff1
py3: make i18n/hggettext use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29170
diff
changeset
|
116 print(poentry(path, lineno, mod.__doc__)) |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
117 |
12823
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
10263
diff
changeset
|
118 functions = list(getattr(mod, 'i18nfunctions', [])) |
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
10263
diff
changeset
|
119 functions = [(f, True) for f in functions] |
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
10263
diff
changeset
|
120 |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
121 cmdtable = getattr(mod, 'cmdtable', {}) |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
122 if not cmdtable: |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
123 # Maybe we are processing mercurial.commands? |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
124 cmdtable = getattr(mod, 'table', {}) |
45763
bea8cf87bef3
py3: hggettext
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
43691
diff
changeset
|
125 functions.extend((c[0], False) for c in cmdtable.values()) |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
126 |
12823
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
10263
diff
changeset
|
127 for func, rstrip in functions: |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
128 if func.__doc__: |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
129 docobj = func # this might be a proxy to provide formatted 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
|
130 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
|
131 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
|
132 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
|
133 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
|
134 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
|
135 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
|
136 |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
137 src = inspect.getsource(func) |
29720
041fecbb588a
i18n: use inspect.getsourcelines() to obtain lineno from func or class
Yuya Nishihara <yuya@tcha.org>
parents:
29171
diff
changeset
|
138 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
|
139 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
|
140 origdoc = getattr(docobj, '_origdoc', '') |
12823
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
10263
diff
changeset
|
141 if rstrip: |
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
10263
diff
changeset
|
142 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
|
143 origdoc = origdoc.rstrip() |
97ee669f1f6d
i18n: make hggettext use original docstring to compute offset
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33621
diff
changeset
|
144 if origdoc: |
38815
617ae7e33a65
i18n: format warning of hggettext in standard compiler error style
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
36948
diff
changeset
|
145 lineno += offset(src, origdoc, actualpath, lineno, 1) |
33815
97ee669f1f6d
i18n: make hggettext use original docstring to compute offset
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33621
diff
changeset
|
146 else: |
38815
617ae7e33a65
i18n: format warning of hggettext in standard compiler error style
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
36948
diff
changeset
|
147 lineno += offset(src, doc, actualpath, lineno, 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
|
148 print(poentry(actualpath, lineno, doc)) |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
149 |
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
150 |
9539
c904e76e3834
help: move help topics from mercurial/help.py to help/*.txt
Martin Geisler <mg@lazybytes.net>
parents:
8626
diff
changeset
|
151 def rawtext(path): |
36948
0585337ea787
cleanup: fix some latent open(path).read() et al calls we previously missed
Augie Fackler <augie@google.com>
parents:
33819
diff
changeset
|
152 with open(path) as f: |
0585337ea787
cleanup: fix some latent open(path).read() et al calls we previously missed
Augie Fackler <augie@google.com>
parents:
33819
diff
changeset
|
153 src = f.read() |
29171
de28dedd1ff1
py3: make i18n/hggettext use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29170
diff
changeset
|
154 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
|
155 |
c904e76e3834
help: move help topics from mercurial/help.py to help/*.txt
Martin Geisler <mg@lazybytes.net>
parents:
8626
diff
changeset
|
156 |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
157 if __name__ == "__main__": |
8626
1fc1c77d4863
hggettext: ensure correct Mercurial is imported
Martin Geisler <mg@lazybytes.net>
parents:
8542
diff
changeset
|
158 # 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
|
159 # 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
|
160 # accidentally import and extract strings from a Mercurial |
1fc1c77d4863
hggettext: ensure correct Mercurial is imported
Martin Geisler <mg@lazybytes.net>
parents:
8542
diff
changeset
|
161 # installation mentioned in PYTHONPATH. |
1fc1c77d4863
hggettext: ensure correct Mercurial is imported
Martin Geisler <mg@lazybytes.net>
parents:
8542
diff
changeset
|
162 sys.path.insert(0, os.getcwd()) |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
163 from mercurial import demandimport |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
164 |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38815
diff
changeset
|
165 demandimport.enable() |
8542
de150a942ec8
i18n: accurately generate hg.pot
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
166 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
|
167 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
|
168 rawtext(path) |
c904e76e3834
help: move help topics from mercurial/help.py to help/*.txt
Martin Geisler <mg@lazybytes.net>
parents:
8626
diff
changeset
|
169 else: |
c904e76e3834
help: move help topics from mercurial/help.py to help/*.txt
Martin Geisler <mg@lazybytes.net>
parents:
8626
diff
changeset
|
170 docstrings(path) |