tokenizers

Форк
0
/
rust_doc.py 
99 строк · 2.5 Кб
1
from docutils import nodes
2

3
import sphinx
4
from sphinx.locale import _
5

6
from conf import rust_version
7

8
logger = sphinx.util.logging.getLogger(__name__)
9

10

11
class RustRef:
12
    def __call__(self, name, rawtext, text, lineno, inliner, options={}, content=[]):
13
        doctype = name.split("_")[1]
14
        parts = text.split("::")
15

16
        if text.startswith("~"):
17
            title = parts[-1]
18
            parts[0] = parts[0][1:]
19
        else:
20
            content = text
21
        link = self.base_link()
22

23
        if doctype == "struct":
24
            l, title = self.make_struct_link(parts, title)
25
        if doctype == "func":
26
            l, title = self.make_func_link(parts, title)
27
        if doctype == "meth":
28
            l, title = self.make_meth_link(parts, title)
29
        if doctype == "trait":
30
            l, title = self.make_trait_link(parts, title)
31
        link += l
32

33
        node = nodes.reference(internal=False, refuri=link, text=title)
34
        wrapper = nodes.literal(classes=["xref"])
35
        wrapper += node
36

37
        return [wrapper], []
38

39
    def base_link(self):
40
        return f"https://docs.rs/tokenizers/{rust_version}"
41

42
    def make_struct_link(self, parts, title):
43
        link = ""
44
        struct_name = parts[-1]
45
        path = parts[:-1]
46

47
        for p in path:
48
            link += f"/{p}"
49
        link += f"/struct.{struct_name}.html"
50

51
        return link, title
52

53
    def make_func_link(self, parts, title):
54
        link = ""
55
        fn_name = parts[-1]
56

57
        path = parts[:-1]
58
        for p in path:
59
            link += f"/{p}"
60
        link += f"/fn.{fn_name}.html"
61

62
        return link, title
63

64
    def make_meth_link(self, parts, title):
65
        meth_name = parts[-1]
66
        if meth_name.endswith("()"):
67
            meth_name = meth_name[:-2]
68

69
        link, title = self.make_struct_link(parts[:-1], title)
70
        link += f"#method.{meth_name}"
71

72
        if not title.endswith(")"):
73
            title += "()"
74

75
        return link, title
76

77
    def make_trait_link(self, parts, title):
78
        link = ""
79
        trait_name = parts[-1]
80

81
        path = parts[:-1]
82
        for p in path:
83
            link += f"/{p}"
84
        link += f"/trait.{trait_name}.html"
85

86
        return link, title
87

88

89
def setup(app):
90
    app.add_role("rust_struct", RustRef())
91
    app.add_role("rust_func", RustRef())
92
    app.add_role("rust_meth", RustRef())
93
    app.add_role("rust_trait", RustRef())
94

95
    return {
96
        "version": "0.1",
97
        "parallel_read_safe": True,
98
        "parallel_write_safe": True,
99
    }
100

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.