Edgewall Software

Ticket #1513: TranslatedPages-fix-links.diff

File TranslatedPages-fix-links.diff, 4.0 KB (added by cboos, 17 months ago)

More generic fix, detects the prefix

  • translatedpages/translatedpages.py

    diff -r 3d365b4aed70 -r cc5d84d7e577 translatedpages/translatedpages.py
    a b  
    5959    def __init__(self): 
    6060        self.languages_page_version = 0 
    6161        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>.+?)') + '$') 
    6265 
    6366    def _parse_languages_list(self, text): 
    6467        langs = {} 
     
    9497        self._update_languages() 
    9598        return self.languages.get(lang_code, lang_code) 
    9699 
    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() 
    100111        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) 
    102116 
    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): 
    114118        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); 
    116120            for subpage in sorted(WikiSystem(self.env).get_pages(tr)): 
    117121                if(subpage == tr): 
    118122                    yield l 
    119123 
    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)) 
    123128 
    124     def _get_current_lang_link(self, lang_code): 
     129    def _get_current_lang_entry(self, lang_code): 
    125130        return u"  * '''%s'''" % self._get_language_name(lang_code) 
    126131 
    127132    def expand_macro(self, formatter, name, args): 
     
    134139        args, kw = parse_args(args) 
    135140 
    136141        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) 
    138143 
    139144        lang_link_list = [] 
    140         for translation in self._get_translations(base_page_name): 
     145        for translation in self._get_translations(prefix, base_page_name): 
    141146            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) 
    143148            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) 
    145151 
    146152        baselink="" 
    147153        if lang_code != self.BASE_LANG and 'revision' in kw: