| 1 | #!/usr/bin/env python2
|
| 2 | """
|
| 3 | html_lib.py
|
| 4 |
|
| 5 | Shared between HTML processors.
|
| 6 |
|
| 7 | TODO: Write a "pull parser" API!
|
| 8 | """
|
| 9 | from __future__ import print_function
|
| 10 |
|
| 11 | import cgi
|
| 12 | import re
|
| 13 |
|
| 14 |
|
| 15 | def AttrsToString(attrs):
|
| 16 | if not attrs:
|
| 17 | return ''
|
| 18 |
|
| 19 | # Important: there's a leading space here.
|
| 20 | # TODO: Change href="$help:command" to href="help.html#command"
|
| 21 | return ''.join(' %s="%s"' % (k, cgi.escape(v)) for (k, v) in attrs)
|
| 22 |
|
| 23 |
|
| 24 | def PrettyHref(s, preserve_anchor_case=False):
|
| 25 | """
|
| 26 | Turn arbitrary heading text into a clickable href with no special characters.
|
| 27 |
|
| 28 | This is modelled after what github does. It makes everything lower case.
|
| 29 | """
|
| 30 | # Split by whitespace or hyphen
|
| 31 | words = re.split(r'[\s\-]+', s)
|
| 32 |
|
| 33 | # Keep only alphanumeric
|
| 34 | keep = [''.join(re.findall(r'\w+', w)) for w in words]
|
| 35 |
|
| 36 | # Join with - and lowercase. And then remove empty words, unlike Github.
|
| 37 | # This is SIMILAR to what Github does, but there's no need to be 100%
|
| 38 | # compatible.
|
| 39 |
|
| 40 | pretty = '-'.join(p for p in keep if p)
|
| 41 | if not preserve_anchor_case:
|
| 42 | pretty = pretty.lower()
|
| 43 | return pretty
|