1
+
1
2
# -*- coding: utf-8 -*-
2
3
#
3
4
# Copyright (C) 2011-2024 Mitar <mitar.trac@tnode.com>
6
7
# This software is licensed as described in the file COPYING, which
7
8
# you should have received as part of this distribution.
8
9
9
- from trac .core import Component , implements
10
+ from trac .core import *
10
11
from trac .mimeview .api import IHTMLPreviewRenderer
11
12
from trac .util .html import Markup , html as tag
12
13
from trac .web .chrome import ITemplateProvider , add_script
13
14
from trac .wiki .api import IWikiMacroProvider
15
+ from trac .wiki import IWikiSyntaxProvider
14
16
15
- MATHJAX_URL = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js'
16
-
17
+ MATHJAX_URL = 'mathjax/MathJax/MathJax.js'
18
+ # Install MathJax 2.7.9 locally:
19
+ # wget https://github.com/mathjax/MathJax/archive/3b461438246adfcf67690795fcc0ae6dc4e335fe.zip
20
+ # unpack into TracMathJax-0.1.7-py2.7.egg/mathjax/htdocs/MathJax
21
+ # restart server
17
22
18
23
class MathJaxPlugin (Component ):
19
24
"""Renders mathematical equations using MathJax library.
@@ -28,13 +33,13 @@ class MathJaxPlugin(Component):
28
33
}}}
29
34
}}}
30
35
"""
31
-
32
- implements (IHTMLPreviewRenderer , ITemplateProvider , IWikiMacroProvider )
36
+ implements (IHTMLPreviewRenderer , ITemplateProvider , IWikiMacroProvider , IWikiSyntaxProvider )
33
37
34
38
# IWikiMacroProvider methods
35
39
36
40
def get_macros (self ):
37
- yield 'math'
41
+ return ('latex' , 'Latex' , 'LaTeX' , 'math' )
42
+ #yield 'math'
38
43
39
44
def get_macro_description (self , name ):
40
45
return self .__doc__
@@ -46,7 +51,7 @@ def expand_macro(self, formatter, name, content, args=None):
46
51
# We access this internals directly because it is not possible to
47
52
# use add_script with full/absolute URL (trac:#10369).
48
53
req .chrome .get ('scripts' )[- 1 ]['href' ] = \
49
- MATHJAX_URL + '?delayStartupUntil=configured '
54
+ MATHJAX_URL + '?delayStartupUntil=onload '
50
55
# We load configuration afterwards, as we have delay it with
51
56
# delayStartupUntil and we call MathJax.Hub.Configured here. We do
52
57
# this because having text/x-mathjax-config config blocks outside
@@ -62,7 +67,7 @@ def expand_macro(self, formatter, name, content, args=None):
62
67
else : # Called as processor
63
68
element = tag .div
64
69
return Markup (element (content , class_ = 'trac-mathjax' ,
65
- style = 'display:none' ))
70
+ style = 'display:none' ))
66
71
67
72
# IHTMLPreviewRenderer methods
68
73
@@ -79,3 +84,21 @@ def get_templates_dirs(self):
79
84
def get_htdocs_dirs (self ):
80
85
from pkg_resources import resource_filename
81
86
return [('mathjax' , resource_filename (__name__ , 'htdocs' ))]
87
+
88
+ # IWikiSyntaxProvider methos
89
+
90
+ def get_link_resolvers (self ):
91
+ return
92
+
93
+ def get_wiki_syntax (self ):
94
+ yield (r"(?P<delim>\\\(|\$\$|\\\[)(?P<math>.*?)(\\\)|\$\$|\\\])" , self ._format_regex_math )
95
+
96
+ def _format_regex_math (self , formatter , ns , match ):
97
+ self .env .log .debug ('formatter: %s ns: %s' % (formatter , ns ))
98
+ maths = match .group ('math' )
99
+ delim = match .group ('delim' )
100
+ if delim == "\(" :
101
+ argg = None
102
+ else :
103
+ argg = { 'delim' : delim }
104
+ return self .expand_macro (formatter , ns , maths , argg )
0 commit comments