1from docutils import nodes
2
3def setup(app):
4    app.add_role('bugref', bugref_role)
5    app.add_role('idebugref', idebugref_role)
6    app.add_role('docbugref', docbugref_role)
7
8    return {'version': '0.1'}   # identifies the version of our extension
9
10def bugref_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
11    issue_num = int(text)
12    if issue_num <= 0:
13        msg = inliner.reporter.error(
14            '"%s" is an invalid issue number' % text, line=lineno)
15        prb = inliner.problematic(rawtext, rawtext, msg)
16        return [prb], [msg]
17    node = nodes.reference(rawtext, 'issue ' + str(issue_num), refuri='https://github.com/minizinc/libminizinc/issues/'+str(issue_num))
18    return [node], []
19
20def idebugref_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
21    issue_num = int(text)
22    if issue_num <= 0:
23        msg = inliner.reporter.error(
24            '"%s" is an invalid issue number' % text, line=lineno)
25        prb = inliner.problematic(rawtext, rawtext, msg)
26        return [prb], [msg]
27    node = nodes.reference(rawtext, 'issue ' + str(issue_num), refuri='https://github.com/minizinc/minizincide/issues/'+str(issue_num))
28    return [node], []
29
30def docbugref_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
31    issue_num = int(text)
32    if issue_num <= 0:
33        msg = inliner.reporter.error(
34            '"%s" is an invalid issue number' % text, line=lineno)
35        prb = inliner.problematic(rawtext, rawtext, msg)
36        return [prb], [msg]
37    node = nodes.reference(rawtext, 'issue ' + str(issue_num), refuri='https://github.com/minizinc/minizinc-doc/issues/'+str(issue_num))
38    return [node], []
39
40