5 from django import template as _template
8 register = _template.Library()
11 LATEX_REPLACEMENTS = [
12 ('%', r'\%'), ('>', '$>$'), ('<', '$<$'), (u'\u2026', r'\ldots')]
13 _SUPERSCRIPT_CODEPOINTS = {1: 0x00B9, 2: 0x00B2, 3: 0x00B3}
15 subscript_codepoint = 0x2080 + i
16 superscript_codepoint = _SUPERSCRIPT_CODEPOINTS.get(i, 0x2070 + i)
17 if _sys.version_info >= (3,):
18 subscript = chr(subscript_codepoint)
19 superscript = chr(superscript_codepoint)
21 subscript = unichr(subscript_codepoint)
22 superscript = unichr(superscript_codepoint)
23 LATEX_REPLACEMENTS.extend([
24 (subscript, '$_{{{}}}$'.format(i)),
25 (superscript, '$^{{{}}}$'.format(i)),
27 del i, subscript_codepoint, superscript_codepoint, subscript, superscript
29 LATEX_SPECIALS = { # abbrev -> (latex, nfpa_704:firediamond argument)
30 'OX': (r'\oxidizer', 'oxidizer'),
31 '-W-': (r'\nowater', 'nowater'),
32 'SA': (r'\asphixiant', 'asphixiant'),
33 } # others default to ('{abbrev}', '{abbrev}')
37 def latex_safe(string):
38 for a,b in LATEX_REPLACEMENTS:
39 string = string.replace(a, b)
43 def latex_specials(specials):
44 """Format specials for general LaTeX usage
46 special_abbrevs = set(special.abbrev for special in specials)
48 for abbrev in ['OX', '-W-', 'SA']:
49 if abbrev in special_abbrevs:
50 latex_specials.append(LATEX_SPECIALS[abbrev][0])
51 special_abbrevs.remove(abbrev)
52 if special_abbrevs: # leftovers:
53 special_abbrevs = sorted(special_abbrevs)
54 for abbrev in special_abbrevs:
55 latex_specials.append(
56 LATEX_SPECIALS.get(abbrev, ('{{{}}}'.format(abbrev), None))[0])
57 return '~'.join(latex_specials)
60 def latex_special_args(specials):
61 """Format specials for the NFPA firediamond.
63 special_abbrevs = set(special.abbrev for special in specials)
65 for abbrev in ['OX', '-W-', 'SA']:
66 if abbrev in special_abbrevs:
67 latex_specials.append(LATEX_SPECIALS[abbrev][1])
68 special_abbrevs.remove(abbrev)
69 if special_abbrevs: # leftovers:
70 special_abbrevs = sorted(special_abbrevs)
71 latex_specials.append('special={{{}}}'.format(
72 ','.join(special_abbrevs)))
73 return ', '.join(latex_specials)