File: genperf.py

package info (click to toggle)
gumbo-parser 0.13.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 1,900 kB
  • sloc: ansic: 30,496; cpp: 3,836; python: 890; makefile: 93; sh: 15
file content (30 lines) | stat: -rw-r--r-- 858 bytes parent folder | download
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(
    r"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(
    r"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)))))