| 36 | | WIKI_LINK = re.compile(r'(?:wiki:)?(.+)') |
| 37 | | TICKET_LINK = re.compile(r'(?:#(\d+))|(?:ticket:(\d+))') |
| 38 | | REPORT_LINK = re.compile(r'(?:{(\d+)})|(?:report:(\d+))') |
| 39 | | CHANGESET_LINK = re.compile(r'(?:\[(\d+)\])|(?:changeset:(\d+))') |
| 40 | | FILE_LINK = re.compile(r'(?:browser|repos|source):([^#]+)#?(.*)') |
| 41 | | |
| 42 | | def _wikipage(href, args): |
| 43 | | return href.wiki(args[0]) |
| 44 | | |
| 45 | | def _ticket(href, args): |
| 46 | | return href.ticket(args[0]) |
| 47 | | |
| 48 | | def _report(href, args): |
| 49 | | return href.report(args[0]) |
| 50 | | |
| 51 | | def _changeset(href, args): |
| 52 | | return href.changeset(int(args[0])) |
| 53 | | |
| 54 | | def _browser(href, args): |
| 55 | | path = args[0] |
| 56 | | rev = len(args) == 2 and args[1] or '' |
| 57 | | return href.browser(path, rev=rev) |
| 58 | | |
| 59 | | # TracLink REs and callback functions |
| 60 | | LINKS = [(TICKET_LINK, _ticket), |
| 61 | | (REPORT_LINK, _report), |
| 62 | | (CHANGESET_LINK, _changeset), |
| 63 | | (FILE_LINK, _browser), |
| 64 | | (WIKI_LINK, _wikipage)] |
| 65 | | |
| 89 | | def trac_get_reference(rawtext, link, text): |
| 90 | | for (pattern, function) in LINKS: |
| 91 | | m = pattern.match(link) |
| 92 | | if m: |
| 93 | | g = filter(None, m.groups()) |
| 94 | | missing = 0 |
| 95 | | if not text: |
| 96 | | text = g[0] |
| 97 | | if pattern == WIKI_LINK: |
| 98 | | pagename = re.search(r'^[^\#]+',g[0]) |
| 99 | | if not WikiSystem(self.env).has_page(pagename.group()): |
| 100 | | missing = 1 |
| 101 | | text = text + "?" |
| 102 | | uri = function(req.href, g) |
| 103 | | reference = nodes.reference(rawtext, text) |
| | 60 | def trac_get_reference(rawtext, target, text): |
| | 61 | link = wiki_to_link(target, self.env, req) |
| | 62 | if isinstance(link, Element): |
| | 63 | uri = link.attr['href'] |
| | 64 | if uri: |
| | 65 | reference = nodes.reference(rawtext, text or target) |