-
Notifications
You must be signed in to change notification settings - Fork 0
/
txtlib.py
131 lines (119 loc) · 4.43 KB
/
txtlib.py
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/usr/bin/python3
"""
from newapi import txtlib
# txtlib.get_one_temp_params( text, templates=[], lowers=False )
# alltemp = txtlib.get_all_temps_params( text, templates=[], lowers=False )
# for tab in alltemp: for namestrip, params in tab.keys():
# ---
from newapi import txtlib
# temps = txtlib.extract_templates_and_params(text)
# for temp in temps: name, namestrip, params, template = temp['name'], temp['namestrip'], temp['params'], temp['item']
"""
# from newapi import printe
import wikitextparser as wtp
def extract_templates_and_params(text):
# ---
result = []
# ---
parsed = wtp.parse(text)
templates = parsed.templates
arguments = 'arguments'
# ---
for template in templates:
# ---
params = {}
for param in getattr(template, arguments):
value = str(param.value) # mwpfh needs upcast to str
key = str(param.name)
key = key.strip()
params[key] = value
# ---
name = template.name.strip()
# ---
# print('=====')
# ---
name = str(template.normal_name()).strip()
pa_item = template.string
# printe.output( "<<lightyellow>> pa_item: %s" % pa_item )
# ---
namestrip = name
# ---
ficrt = {
'name': f"قالب:{name}",
'namestrip': namestrip,
'params': params,
'item': pa_item,
}
# ---
result.append(ficrt)
# ---
return result
def get_one_temp_params(text, tempname="", templates=[], lowers=False, get_all_temps=False):
ingr = extract_templates_and_params(text)
# ---
temps = templates
# ---
if tempname:
temps.append(tempname)
# ---
temps = [x.replace("قالب:", "").replace("Template:", "").replace('_', ' ').strip() for x in temps]
# ---
if lowers:
temps = [x.lower() for x in temps]
# ---
named = {}
# ---
if get_all_temps:
named = []
# ---
for temp in ingr:
# ---
name, namestrip, params, template = temp['name'], temp['namestrip'], temp['params'], temp['item']
# ---
if lowers:
namestrip = namestrip.lower()
# ---
if namestrip in temps:
if not get_all_temps:
return params
# ---
# print("te:%s, namestrip:%s" % (te,namestrip) )
# ---
tabe = {
namestrip: params
}
named.append(tabe)
# ---
return named
def get_all_temps_params(text, templates=[], lowers=False):
tab = get_one_temp_params(text, templates=templates, lowers=lowers, get_all_temps=True)
return tab
# ---
test_text = '''
{{ص.م/صورة مضاعفة ويكي بيانات|معرف ويكي بيانات={{{معرف ويكي بيانات|}}}
| صورة1 ={{{علم|{{{flag|{{{صورة علم|}}}}}}}}}
| تعليق1 ={{#لو:{{قيمة ويكي بيانات|معرف ويكي بيانات={{{معرف ويكي بيانات|}}}|{{{وصف العلم|{{{flagcaption|}}}}}}|خاصية=P163|rank=best}}|{{قيمة ويكي بيانات|معرف ويكي بيانات={{{معرف ويكي بيانات|}}}|{{{وصف العلم|{{{flagcaption|}}}}}}|خاصية=P163|rank=best}}|{{فصع}}}}
| عرض1 ={{{عرض العلم|{{{flagsize|125}}}}}}
| صورة2 ={{{motto|{{{شعار|}}}}}}
| تعليق2 ={{#لو:{{قيمة ويكي بيانات|معرف ويكي بيانات={{{معرف ويكي بيانات|}}}|{{{تعليق الشعار|{{{وصف الشعار|}}}}}}|خاصية=P237|rank=best}}|{{قيمة ويكي بيانات|معرف ويكي بيانات={{{معرف ويكي بيانات|}}}|{{{تعليق الشعار|{{{وصف الشعار|}}}}}}|خاصية=P237|rank=best}}|{{فصع}}}}
| عرض2 = {{{عرض الشعار|125}}}
| خاصية1 =P41
| خاصية2 ={{#لو:{{#خاصية:P94}}|P94|P154}}
|خلفية={{{خلفية|}}}
}}
{{ourworldindatamirror|https://owidm.wmcloud.org/grapher/cancer-death-rates?tab=map {{Webarchive}}}}
'''
# ---
if __name__ == '__main__':
# ---
# ---
ingr = extract_templates_and_params(test_text)
for temp in ingr:
# ---
name, namestrip, params, template = temp['name'], temp['namestrip'], temp['params'], temp['item']
# ---
print("-----------------------------")
print(f"name: {name}")
print(f"namestrip: {namestrip}")
print(f"params: {params}")
print(f"template: {template}")