forked from PeterFeicht/cppreference-doc
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdevhelp.py
More file actions
80 lines (61 loc) · 2.62 KB
/
devhelp.py
File metadata and controls
80 lines (61 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
'''
Copyright (C) 2013 Povilas Kanapickas <povilas@radix.lt>
Copyright (C) 2018 Monika Kairaityte <monika@kibit.lt>
This file is part of cppreference-doc
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
'''
from lxml import etree
from index_transform.common import IndexTransform
class Index2Devhelp(IndexTransform):
def __init__(self, functions_el):
super().__init__()
self.functions_el = functions_el
def get_mark(self, el):
tag_to_mark = {
'const': 'macro',
'function': 'function',
'constructor': 'function',
'destructor': 'function',
'class': 'class',
'enum': 'enum',
'typedef': 'typedef',
'specialization': 'class',
'overload': 'function',
# devhelp does not support variables in its format
'variable': ''
}
if el.tag in tag_to_mark:
return tag_to_mark[el.tag]
return ''
def process_item_hook(self, el, full_name, full_link):
keyword_el = etree.SubElement(self.functions_el, 'keyword')
keyword_el.set('type', self.get_mark(el))
keyword_el.set('name', full_name)
keyword_el.set('link', full_link)
IndexTransform.process_item_hook(self, el, full_name, full_link)
def transform_devhelp(book_title, book_name, book_base, rel_link, chapters_fn,
in_fn):
root_el = etree.Element('book')
root_el.set('xmlns', 'http://www.devhelp.net/book')
root_el.set('title', book_title)
root_el.set('name', book_name)
root_el.set('base', book_base)
root_el.set('link', rel_link)
root_el.set('version', '2')
root_el.set('language', 'c++')
chapters_tree = etree.parse(chapters_fn)
root_el.append(chapters_tree.getroot())
functions_el = etree.SubElement(root_el, 'functions')
tr = Index2Devhelp(functions_el)
tr.transform_file(in_fn)
return etree.tostring(root_el, pretty_print=True, xml_declaration=True,
encoding='utf-8')