diff -r 3d365b4aed70 -r cc5d84d7e577 translatedpages/translatedpages.py
|
a
|
b
|
|
| 59 | 59 | def __init__(self): |
| 60 | 60 | self.languages_page_version = 0 |
| 61 | 61 | self._update_languages() |
| | 62 | self.template_re = re.compile(self.PAGE_CODE \ |
| | 63 | .replace('{lang}', r'(?P<lang>%s)' % self.LANG_REGEXP) \ |
| | 64 | .replace('{page}', r'(?P<page>.+?)') + '$') |
| 62 | 65 | |
| 63 | 66 | def _parse_languages_list(self, text): |
| 64 | 67 | langs = {} |
| … |
… |
|
| 94 | 97 | self._update_languages() |
| 95 | 98 | return self.languages.get(lang_code, lang_code) |
| 96 | 99 | |
| 97 | | def _get_translated_page(self, name, lang_code): |
| 98 | | if lang_code == self.BASE_LANG: |
| 99 | | return name |
| | 100 | def _get_translated_page(self, prefix, name, lang_code): |
| | 101 | if lang_code != self.BASE_LANG: |
| | 102 | name = self.PAGE_CODE.replace('{lang}', lang_code) \ |
| | 103 | .replace('{page}', name) |
| | 104 | return prefix + name |
| | 105 | |
| | 106 | def _get_page_info(self, page_name, specified_name=None): |
| | 107 | m = self.template_re.search(page_name) |
| | 108 | if m: |
| | 109 | page, lang = m.group('page'), m.group('lang') |
| | 110 | prefix = m.start() |
| 100 | 111 | else: |
| 101 | | return self.PAGE_CODE.replace('{lang}',lang_code).replace('{page}', name) |
| | 112 | page = specified_name or page_name[page_name.rfind('/') + 1:] |
| | 113 | lang = self.BASE_LANG |
| | 114 | prefix = page_name.rfind(page) |
| | 115 | return (page_name[:prefix], page, lang) |
| 102 | 116 | |
| 103 | | def _get_page_info(self, page_name): |
| 104 | | regstr = self.PAGE_CODE.replace('{lang}',self.LANG_REGEXP).replace('{page}', '(.+)') |
| 105 | | regres = re.compile(regstr).search(page_name) |
| 106 | | if regres == None: |
| 107 | | return (page_name, self.BASE_LANG) |
| 108 | | if self.PAGE_CODE.find('{page}') > self.PAGE_CODE.find('{lang}'): |
| 109 | | return (regres.group(2), regres.group(1)) |
| 110 | | else: |
| 111 | | return (regres.group(1), regres.group(2)) |
| 112 | | |
| 113 | | def _get_translations(self, base_page_name): |
| | 117 | def _get_translations(self, prefix, base_page_name): |
| 114 | 118 | for l in sorted(self.languages.keys()): |
| 115 | | tr = self._get_translated_page(base_page_name, l); |
| | 119 | tr = self._get_translated_page(prefix, base_page_name, l); |
| 116 | 120 | for subpage in sorted(WikiSystem(self.env).get_pages(tr)): |
| 117 | 121 | if(subpage == tr): |
| 118 | 122 | yield l |
| 119 | 123 | |
| 120 | | def _get_lang_link(self, base_name, lang_code): |
| 121 | | page_name = self._get_translated_page(base_name, lang_code) |
| 122 | | return u" * [wiki:%s %s]" % (page_name, self._get_language_name(lang_code)) |
| | 124 | def _get_lang_link(self, prefix, base_name, lang_code): |
| | 125 | page_name = self._get_translated_page(prefix, base_name, lang_code) |
| | 126 | return u" * [wiki:%s %s]" % (page_name, |
| | 127 | self._get_language_name(lang_code)) |
| 123 | 128 | |
| 124 | | def _get_current_lang_link(self, lang_code): |
| | 129 | def _get_current_lang_entry(self, lang_code): |
| 125 | 130 | return u" * '''%s'''" % self._get_language_name(lang_code) |
| 126 | 131 | |
| 127 | 132 | def expand_macro(self, formatter, name, args): |
| … |
… |
|
| 134 | 139 | args, kw = parse_args(args) |
| 135 | 140 | |
| 136 | 141 | page_name = formatter.context.resource.id |
| 137 | | (base_page_name, lang_code) = self._get_page_info(page_name) |
| | 142 | prefix, base_page_name, lang_code = self._get_page_info(page_name) |
| 138 | 143 | |
| 139 | 144 | lang_link_list = [] |
| 140 | | for translation in self._get_translations(base_page_name): |
| | 145 | for translation in self._get_translations(prefix, base_page_name): |
| 141 | 146 | if translation != lang_code: |
| 142 | | lang_link_list.append(self._get_lang_link(base_page_name, translation)) |
| | 147 | link = self._get_lang_link(prefix, base_page_name, translation) |
| 143 | 148 | else: |
| 144 | | lang_link_list.append(self._get_current_lang_link(lang_code)) |
| | 149 | link = self._get_current_lang_entry(lang_code) |
| | 150 | lang_link_list.append(link) |
| 145 | 151 | |
| 146 | 152 | baselink="" |
| 147 | 153 | if lang_code != self.BASE_LANG and 'revision' in kw: |