forked from google/gumbo-parser
-
Notifications
You must be signed in to change notification settings - Fork 0
/
genperf.py
30 lines (23 loc) · 861 Bytes
/
genperf.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
import sys, re
gperf_output = sys.stdin.read()
hash_func = re.search(
"static unsigned int\s+hash\s+\((.*?)\)\s{(.*?)\n}",
gperf_output, re.DOTALL)
if not hash_func:
raise "Failed to detect hash function in GPerf output"
wordlist = re.search(
"wordlist\[\]\s+=\s+{(.*?)}",
gperf_output, re.DOTALL)
if not wordlist:
raise "Failed to detect word list in GPerf output"
def process_wordlist(text):
wordlist = [w.strip().replace('"', '') for w in text.split(',')]
taglist = [
"\tGUMBO_TAG_" + (w.upper().replace('-', '_') if w else 'LAST')
for w in wordlist]
return taglist
print "static unsigned int tag_hash(%s)\n{%s\n}" % (
hash_func.group(1), hash_func.group(2))
print ""
print "static const unsigned char kGumboTagMap[] = {\n%s\n};" % (
',\n'.join(process_wordlist(wordlist.group(1))))