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