Repository files navigation

MathDOM - handling terms through a MathML DOM in Python
-------------------------------------------------------
I'd be really glad to hear if this is useful. And maybe you have an idea how
to make it better. :) Just send me an email:
Stefan Behnel <scoder@users.sourceforge.net>
See LICENSE file for licensing.
You can find the latest version at
http://mathdom.sourceforge.net
What is MathDOM?
----------------
Terms, there and back again.
The package comprises parsers for a subset of Content MathML 2.0 and infix
terms (using pyparsing [1]). It provides access to the term tree through a DOM
(based on PyXML/4DOM [2]) or, preferably, the ElementTree API on top of lxml
[3] and allows serialization to Content MathML and literal terms in infix,
prefix and postfix notation. It supports subclassable input/output filters,
e.g. for Python terms.
If you want to test it, run 'examples/infix.py'.
A quick example:
----------------
>>> from mathml.lmathdom import MathDOM # use lxml implementation
>>> doc = MathDOM.fromString("+2^x+4*-5i/6", "infix_term") # parse infix term
>>> [ n.value() for n in doc.xpath(u'//math:cn[@type="integer"]') ] # find integers
[2, 4, 6]
>>> for apply_tag in doc.xpath(u'//math:apply[math:plus]'): # replace '+' with '-'
... apply_tag.set_operator(u'minus')
>>> from mathml.utils import pyterm # register Python term builder
>>> doc.serialize("python") # serialize to Python term
u'2 ** x - 4 * (-5j) / 6'
Simple, isn't it ?
Current status:
---------------
MathDOM 0.7 is now in a stable state. There have not been any bug reports for
quite a while. Future enhancements may regard the compatibility of the two
implementations (PyXML and lxml). They will likely come closer based on the
ElementTree API.
Regarding lxml:
---------------
The lxml based implementation shares most of the code with the PyXML one, but
replaces the DOM implementation with a patched version of lxml [3], an XML API
similar to ElementTree [4], implemented on top of libxml2 [5]. That makes it
much faster than the pure Python implementation (just try test/test.py for a
comparison) and it supports more XML features, like XSLT and XInclude.
MathDOM 0.7 should work out-of-the-box with lxml 0.9 and better. Get it from
http://codespeak.net/lxml/
PyXML vs. lxml:
---------------
MathDOM's mathml package includes two main modules: mathdom and lmathdom. The
first depends on PyXML and the second on lxml. It is one of the goals of
MathDOM to keep both APIs as close as possible, but since lxml's ElementTree
API is very different in spirit from PyXML's DOM, there will always be
differences. If you want your code to be portable between both (e.g. to use
the mathdom module as a fallback in Jython), please try to avoid the XML
specific APIs as much as possible and prefer the methods that are defined by
the MathDOM implementation. Both implementations share a subset of the
ElementTree API. If you need a specific feature that both lxml and PyXML
support, but that is accessed differently in both MathDOM APIs, feel free to
discuss this on the MathDOM mailing list as a request for API enhancement.
The files:
----------
* Installation:
setup.py - distutils, try "python setup.py install"
* Examples are in "examples/":
examples/infix.py - example: read a term, write out MathML, infix,
prefix, postfix representations
-> START HERE if you want to figure out how
things work.
examples/dom.py - example: read a term, do some DOM stuff
examples/ldom.py - example: read a term, do some lxml/xpath stuff
* The actual package source is in "mathml/":
mathml/mathdom.py - the DOM implemention
mathml/lmathdom.py - the lxml implemention (supports XSLT, RelaxNG, etc.)
mathml/xmlterm.py - SAX generator for the termparser AST
mathml/termparser.py - parser for literal infix terms
mathml/termbuilder.py - serializer for literal terms,
framework for output converters
* Extensions are in "mathml/utils/":
mathml/utils/pyterm.py - a Python term serializer and parser
mathml/utils/sqlterm.py - a preliminary SQL term serializer
mathml/utils/mathmlc2p.xsl
mathml/utils/ctop.xsl - XSLT converters: Content MathML -> Presentation MathML
mathml/utils/sax_pmathml.py
- PyMathML [6] integration through the SAX interface
* PyMathML [6] is in "mathml/pmathml/"
For convenience, PyMathML [6] is included in MathDOM. PyMathML is a
renderer for Presentational MathML, written by Gustavo Carneiro and
distributed under the terms of the LGPL (if you can't accept that,
don't use it!). For questions regarding PyMathML, please contact the
PyMathML project at SourceForge. I do not maintain that package!
If you want to use PyMathML with MathDOM, take a look at
mathml/utils/sax_pmathml.py
References
----------
[1] pyparsing: http://pyparsing.sf.net/
[2] PyXML: http://pyxml.sf.net/
[3] lxml: http://codespeak.net/lxml/
[4] ElementTree: http://effbot.org/zone/element-index.htm
[5] libxml2: http://xmlsoft.org/
[6] PyMathML: http://pymathml.sf.net/
Have fun!

About

A port of mathdom from Python 2 to Python 3.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

MathDOM - handling terms through a MathML DOM in Python
-------------------------------------------------------
I'd be really glad to hear if this is useful. And maybe you have an idea how
to make it better. :) Just send me an email:
Stefan Behnel <scoder@users.sourceforge.net>
See LICENSE file for licensing.
You can find the latest version at
http://mathdom.sourceforge.net
What is MathDOM?
----------------
Terms, there and back again.
The package comprises parsers for a subset of Content MathML 2.0 and infix
terms (using pyparsing [1]). It provides access to the term tree through a DOM
(based on PyXML/4DOM [2]) or, preferably, the ElementTree API on top of lxml
[3] and allows serialization to Content MathML and literal terms in infix,
prefix and postfix notation. It supports subclassable input/output filters,
e.g. for Python terms.
If you want to test it, run 'examples/infix.py'.
A quick example:
----------------
>>> from mathml.lmathdom import MathDOM # use lxml implementation
>>> doc = MathDOM.fromString("+2^x+4*-5i/6", "infix_term") # parse infix term
>>> [ n.value() for n in doc.xpath(u'//math:cn[@type="integer"]') ] # find integers
[2, 4, 6]
>>> for apply_tag in doc.xpath(u'//math:apply[math:plus]'): # replace '+' with '-'
... apply_tag.set_operator(u'minus')
>>> from mathml.utils import pyterm # register Python term builder
>>> doc.serialize("python") # serialize to Python term
u'2 ** x - 4 * (-5j) / 6'
Simple, isn't it ?
Current status:
---------------
MathDOM 0.7 is now in a stable state. There have not been any bug reports for
quite a while. Future enhancements may regard the compatibility of the two
implementations (PyXML and lxml). They will likely come closer based on the
ElementTree API.
Regarding lxml:
---------------
The lxml based implementation shares most of the code with the PyXML one, but
replaces the DOM implementation with a patched version of lxml [3], an XML API
similar to ElementTree [4], implemented on top of libxml2 [5]. That makes it
much faster than the pure Python implementation (just try test/test.py for a
comparison) and it supports more XML features, like XSLT and XInclude.
MathDOM 0.7 should work out-of-the-box with lxml 0.9 and better. Get it from
http://codespeak.net/lxml/
PyXML vs. lxml:
---------------
MathDOM's mathml package includes two main modules: mathdom and lmathdom. The
first depends on PyXML and the second on lxml. It is one of the goals of
MathDOM to keep both APIs as close as possible, but since lxml's ElementTree
API is very different in spirit from PyXML's DOM, there will always be
differences. If you want your code to be portable between both (e.g. to use
the mathdom module as a fallback in Jython), please try to avoid the XML
specific APIs as much as possible and prefer the methods that are defined by
the MathDOM implementation. Both implementations share a subset of the
ElementTree API. If you need a specific feature that both lxml and PyXML
support, but that is accessed differently in both MathDOM APIs, feel free to
discuss this on the MathDOM mailing list as a request for API enhancement.
The files:
----------
* Installation:
setup.py - distutils, try "python setup.py install"
* Examples are in "examples/":
examples/infix.py - example: read a term, write out MathML, infix,
prefix, postfix representations
-> START HERE if you want to figure out how
things work.
examples/dom.py - example: read a term, do some DOM stuff
examples/ldom.py - example: read a term, do some lxml/xpath stuff
* The actual package source is in "mathml/":
mathml/mathdom.py - the DOM implemention
mathml/lmathdom.py - the lxml implemention (supports XSLT, RelaxNG, etc.)
mathml/xmlterm.py - SAX generator for the termparser AST
mathml/termparser.py - parser for literal infix terms
mathml/termbuilder.py - serializer for literal terms,
framework for output converters
* Extensions are in "mathml/utils/":
mathml/utils/pyterm.py - a Python term serializer and parser
mathml/utils/sqlterm.py - a preliminary SQL term serializer
mathml/utils/mathmlc2p.xsl
mathml/utils/ctop.xsl - XSLT converters: Content MathML -> Presentation MathML
mathml/utils/sax_pmathml.py
- PyMathML [6] integration through the SAX interface
* PyMathML [6] is in "mathml/pmathml/"
For convenience, PyMathML [6] is included in MathDOM. PyMathML is a
renderer for Presentational MathML, written by Gustavo Carneiro and
distributed under the terms of the LGPL (if you can't accept that,
don't use it!). For questions regarding PyMathML, please contact the
PyMathML project at SourceForge. I do not maintain that package!
If you want to use PyMathML with MathDOM, take a look at
mathml/utils/sax_pmathml.py
References
----------
[1] pyparsing: http://pyparsing.sf.net/
[2] PyXML: http://pyxml.sf.net/
[3] lxml: http://codespeak.net/lxml/
[4] ElementTree: http://effbot.org/zone/element-index.htm
[5] libxml2: http://xmlsoft.org/
[6] PyMathML: http://pymathml.sf.net/
Have fun!

About

A port of mathdom from Python 2 to Python 3.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MathDOM - handling terms through a MathML DOM in Python
-------------------------------------------------------
I'd be really glad to hear if this is useful. And maybe you have an idea how
to make it better. :) Just send me an email:
Stefan Behnel <scoder@users.sourceforge.net>
See LICENSE file for licensing.
You can find the latest version at
http://mathdom.sourceforge.net
What is MathDOM?
----------------
Terms, there and back again.
The package comprises parsers for a subset of Content MathML 2.0 and infix
terms (using pyparsing [1]). It provides access to the term tree through a DOM
(based on PyXML/4DOM [2]) or, preferably, the ElementTree API on top of lxml
[3] and allows serialization to Content MathML and literal terms in infix,
prefix and postfix notation. It supports subclassable input/output filters,
e.g. for Python terms.
If you want to test it, run 'examples/infix.py'.
A quick example:
----------------
>>> from mathml.lmathdom import MathDOM # use lxml implementation
>>> doc = MathDOM.fromString("+2^x+4*-5i/6", "infix_term") # parse infix term
>>> [ n.value() for n in doc.xpath(u'//math:cn[@type="integer"]') ] # find integers
[2, 4, 6]
>>> for apply_tag in doc.xpath(u'//math:apply[math:plus]'): # replace '+' with '-'
... apply_tag.set_operator(u'minus')
>>> from mathml.utils import pyterm # register Python term builder
>>> doc.serialize("python") # serialize to Python term
u'2 ** x - 4 * (-5j) / 6'
Simple, isn't it ?
Current status:
---------------
MathDOM 0.7 is now in a stable state. There have not been any bug reports for
quite a while. Future enhancements may regard the compatibility of the two
implementations (PyXML and lxml). They will likely come closer based on the
ElementTree API.
Regarding lxml:
---------------
The lxml based implementation shares most of the code with the PyXML one, but
replaces the DOM implementation with a patched version of lxml [3], an XML API
similar to ElementTree [4], implemented on top of libxml2 [5]. That makes it
much faster than the pure Python implementation (just try test/test.py for a
comparison) and it supports more XML features, like XSLT and XInclude.
MathDOM 0.7 should work out-of-the-box with lxml 0.9 and better. Get it from
http://codespeak.net/lxml/
PyXML vs. lxml:
---------------
MathDOM's mathml package includes two main modules: mathdom and lmathdom. The
first depends on PyXML and the second on lxml. It is one of the goals of
MathDOM to keep both APIs as close as possible, but since lxml's ElementTree
API is very different in spirit from PyXML's DOM, there will always be
differences. If you want your code to be portable between both (e.g. to use
the mathdom module as a fallback in Jython), please try to avoid the XML
specific APIs as much as possible and prefer the methods that are defined by
the MathDOM implementation. Both implementations share a subset of the
ElementTree API. If you need a specific feature that both lxml and PyXML
support, but that is accessed differently in both MathDOM APIs, feel free to
discuss this on the MathDOM mailing list as a request for API enhancement.
The files:
----------
* Installation:
setup.py - distutils, try "python setup.py install"
* Examples are in "examples/":
examples/infix.py - example: read a term, write out MathML, infix,
prefix, postfix representations
-> START HERE if you want to figure out how
things work.
examples/dom.py - example: read a term, do some DOM stuff
examples/ldom.py - example: read a term, do some lxml/xpath stuff
* The actual package source is in "mathml/":
mathml/mathdom.py - the DOM implemention
mathml/lmathdom.py - the lxml implemention (supports XSLT, RelaxNG, etc.)
mathml/xmlterm.py - SAX generator for the termparser AST
mathml/termparser.py - parser for literal infix terms
mathml/termbuilder.py - serializer for literal terms,
framework for output converters
* Extensions are in "mathml/utils/":
mathml/utils/pyterm.py - a Python term serializer and parser
mathml/utils/sqlterm.py - a preliminary SQL term serializer
mathml/utils/mathmlc2p.xsl
mathml/utils/ctop.xsl - XSLT converters: Content MathML -> Presentation MathML
mathml/utils/sax_pmathml.py
- PyMathML [6] integration through the SAX interface
* PyMathML [6] is in "mathml/pmathml/"
For convenience, PyMathML [6] is included in MathDOM. PyMathML is a
renderer for Presentational MathML, written by Gustavo Carneiro and
distributed under the terms of the LGPL (if you can't accept that,
don't use it!). For questions regarding PyMathML, please contact the
PyMathML project at SourceForge. I do not maintain that package!
If you want to use PyMathML with MathDOM, take a look at
mathml/utils/sax_pmathml.py
References
----------
[1] pyparsing: http://pyparsing.sf.net/
[2] PyXML: http://pyxml.sf.net/
[3] lxml: http://codespeak.net/lxml/
[4] ElementTree: http://effbot.org/zone/element-index.htm
[5] libxml2: http://xmlsoft.org/
[6] PyMathML: http://pymathml.sf.net/
Have fun!

About

A port of mathdom from Python 2 to Python 3.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MathDOM - handling terms through a MathML DOM in Python
-------------------------------------------------------
I'd be really glad to hear if this is useful. And maybe you have an idea how
to make it better. :) Just send me an email:
Stefan Behnel <scoder@users.sourceforge.net>
See LICENSE file for licensing.
You can find the latest version at
http://mathdom.sourceforge.net
What is MathDOM?
----------------
Terms, there and back again.
The package comprises parsers for a subset of Content MathML 2.0 and infix
terms (using pyparsing [1]). It provides access to the term tree through a DOM
(based on PyXML/4DOM [2]) or, preferably, the ElementTree API on top of lxml
[3] and allows serialization to Content MathML and literal terms in infix,
prefix and postfix notation. It supports subclassable input/output filters,
e.g. for Python terms.
If you want to test it, run 'examples/infix.py'.
A quick example:
----------------
>>> from mathml.lmathdom import MathDOM # use lxml implementation
>>> doc = MathDOM.fromString("+2^x+4*-5i/6", "infix_term") # parse infix term
>>> [ n.value() for n in doc.xpath(u'//math:cn[@type="integer"]') ] # find integers
[2, 4, 6]
>>> for apply_tag in doc.xpath(u'//math:apply[math:plus]'): # replace '+' with '-'
... apply_tag.set_operator(u'minus')
>>> from mathml.utils import pyterm # register Python term builder
>>> doc.serialize("python") # serialize to Python term
u'2 ** x - 4 * (-5j) / 6'
Simple, isn't it ?
Current status:
---------------
MathDOM 0.7 is now in a stable state. There have not been any bug reports for
quite a while. Future enhancements may regard the compatibility of the two
implementations (PyXML and lxml). They will likely come closer based on the
ElementTree API.
Regarding lxml:
---------------
The lxml based implementation shares most of the code with the PyXML one, but
replaces the DOM implementation with a patched version of lxml [3], an XML API
similar to ElementTree [4], implemented on top of libxml2 [5]. That makes it
much faster than the pure Python implementation (just try test/test.py for a
comparison) and it supports more XML features, like XSLT and XInclude.
MathDOM 0.7 should work out-of-the-box with lxml 0.9 and better. Get it from
http://codespeak.net/lxml/
PyXML vs. lxml:
---------------
MathDOM's mathml package includes two main modules: mathdom and lmathdom. The
first depends on PyXML and the second on lxml. It is one of the goals of
MathDOM to keep both APIs as close as possible, but since lxml's ElementTree
API is very different in spirit from PyXML's DOM, there will always be
differences. If you want your code to be portable between both (e.g. to use
the mathdom module as a fallback in Jython), please try to avoid the XML
specific APIs as much as possible and prefer the methods that are defined by
the MathDOM implementation. Both implementations share a subset of the
ElementTree API. If you need a specific feature that both lxml and PyXML
support, but that is accessed differently in both MathDOM APIs, feel free to
discuss this on the MathDOM mailing list as a request for API enhancement.
The files:
----------
* Installation:
setup.py - distutils, try "python setup.py install"
* Examples are in "examples/":
examples/infix.py - example: read a term, write out MathML, infix,
prefix, postfix representations
-> START HERE if you want to figure out how
things work.
examples/dom.py - example: read a term, do some DOM stuff
examples/ldom.py - example: read a term, do some lxml/xpath stuff
* The actual package source is in "mathml/":
mathml/mathdom.py - the DOM implemention
mathml/lmathdom.py - the lxml implemention (supports XSLT, RelaxNG, etc.)
mathml/xmlterm.py - SAX generator for the termparser AST
mathml/termparser.py - parser for literal infix terms
mathml/termbuilder.py - serializer for literal terms,
framework for output converters
* Extensions are in "mathml/utils/":
mathml/utils/pyterm.py - a Python term serializer and parser
mathml/utils/sqlterm.py - a preliminary SQL term serializer
mathml/utils/mathmlc2p.xsl
mathml/utils/ctop.xsl - XSLT converters: Content MathML -> Presentation MathML
mathml/utils/sax_pmathml.py
- PyMathML [6] integration through the SAX interface
* PyMathML [6] is in "mathml/pmathml/"
For convenience, PyMathML [6] is included in MathDOM. PyMathML is a
renderer for Presentational MathML, written by Gustavo Carneiro and
distributed under the terms of the LGPL (if you can't accept that,
don't use it!). For questions regarding PyMathML, please contact the
PyMathML project at SourceForge. I do not maintain that package!
If you want to use PyMathML with MathDOM, take a look at
mathml/utils/sax_pmathml.py
References
----------
[1] pyparsing: http://pyparsing.sf.net/
[2] PyXML: http://pyxml.sf.net/
[3] lxml: http://codespeak.net/lxml/
[4] ElementTree: http://effbot.org/zone/element-index.htm
[5] libxml2: http://xmlsoft.org/
[6] PyMathML: http://pymathml.sf.net/
Have fun!

About

A port of mathdom from Python 2 to Python 3.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

MathDOM - handling terms through a MathML DOM in Python
-------------------------------------------------------
I'd be really glad to hear if this is useful. And maybe you have an idea how
to make it better. :) Just send me an email:
Stefan Behnel <scoder@users.sourceforge.net>
See LICENSE file for licensing.
You can find the latest version at
http://mathdom.sourceforge.net
What is MathDOM?
----------------
Terms, there and back again.
The package comprises parsers for a subset of Content MathML 2.0 and infix
terms (using pyparsing [1]). It provides access to the term tree through a DOM
(based on PyXML/4DOM [2]) or, preferably, the ElementTree API on top of lxml
[3] and allows serialization to Content MathML and literal terms in infix,
prefix and postfix notation. It supports subclassable input/output filters,
e.g. for Python terms.
If you want to test it, run 'examples/infix.py'.
A quick example:
----------------
>>> from mathml.lmathdom import MathDOM # use lxml implementation
>>> doc = MathDOM.fromString("+2^x+4*-5i/6", "infix_term") # parse infix term
>>> [ n.value() for n in doc.xpath(u'//math:cn[@type="integer"]') ] # find integers
[2, 4, 6]
>>> for apply_tag in doc.xpath(u'//math:apply[math:plus]'): # replace '+' with '-'
... apply_tag.set_operator(u'minus')
>>> from mathml.utils import pyterm # register Python term builder
>>> doc.serialize("python") # serialize to Python term
u'2 ** x - 4 * (-5j) / 6'
Simple, isn't it ?
Current status:
---------------
MathDOM 0.7 is now in a stable state. There have not been any bug reports for
quite a while. Future enhancements may regard the compatibility of the two
implementations (PyXML and lxml). They will likely come closer based on the
ElementTree API.
Regarding lxml:
---------------
The lxml based implementation shares most of the code with the PyXML one, but
replaces the DOM implementation with a patched version of lxml [3], an XML API
similar to ElementTree [4], implemented on top of libxml2 [5]. That makes it
much faster than the pure Python implementation (just try test/test.py for a
comparison) and it supports more XML features, like XSLT and XInclude.
MathDOM 0.7 should work out-of-the-box with lxml 0.9 and better. Get it from
http://codespeak.net/lxml/
PyXML vs. lxml:
---------------
MathDOM's mathml package includes two main modules: mathdom and lmathdom. The
first depends on PyXML and the second on lxml. It is one of the goals of
MathDOM to keep both APIs as close as possible, but since lxml's ElementTree
API is very different in spirit from PyXML's DOM, there will always be
differences. If you want your code to be portable between both (e.g. to use
the mathdom module as a fallback in Jython), please try to avoid the XML
specific APIs as much as possible and prefer the methods that are defined by
the MathDOM implementation. Both implementations share a subset of the
ElementTree API. If you need a specific feature that both lxml and PyXML
support, but that is accessed differently in both MathDOM APIs, feel free to
discuss this on the MathDOM mailing list as a request for API enhancement.
The files:
----------
* Installation:
setup.py - distutils, try "python setup.py install"
* Examples are in "examples/":
examples/infix.py - example: read a term, write out MathML, infix,
prefix, postfix representations
-> START HERE if you want to figure out how
things work.
examples/dom.py - example: read a term, do some DOM stuff
examples/ldom.py - example: read a term, do some lxml/xpath stuff
* The actual package source is in "mathml/":
mathml/mathdom.py - the DOM implemention
mathml/lmathdom.py - the lxml implemention (supports XSLT, RelaxNG, etc.)
mathml/xmlterm.py - SAX generator for the termparser AST
mathml/termparser.py - parser for literal infix terms
mathml/termbuilder.py - serializer for literal terms,
framework for output converters
* Extensions are in "mathml/utils/":
mathml/utils/pyterm.py - a Python term serializer and parser
mathml/utils/sqlterm.py - a preliminary SQL term serializer
mathml/utils/mathmlc2p.xsl
mathml/utils/ctop.xsl - XSLT converters: Content MathML -> Presentation MathML
mathml/utils/sax_pmathml.py
- PyMathML [6] integration through the SAX interface
* PyMathML [6] is in "mathml/pmathml/"
For convenience, PyMathML [6] is included in MathDOM. PyMathML is a
renderer for Presentational MathML, written by Gustavo Carneiro and
distributed under the terms of the LGPL (if you can't accept that,
don't use it!). For questions regarding PyMathML, please contact the
PyMathML project at SourceForge. I do not maintain that package!
If you want to use PyMathML with MathDOM, take a look at
mathml/utils/sax_pmathml.py
References
----------
[1] pyparsing: http://pyparsing.sf.net/
[2] PyXML: http://pyxml.sf.net/
[3] lxml: http://codespeak.net/lxml/
[4] ElementTree: http://effbot.org/zone/element-index.htm
[5] libxml2: http://xmlsoft.org/
[6] PyMathML: http://pymathml.sf.net/
Have fun!

About

A port of mathdom from Python 2 to Python 3.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MathDOM - handling terms through a MathML DOM in Python
-------------------------------------------------------
I'd be really glad to hear if this is useful. And maybe you have an idea how
to make it better. :) Just send me an email:
Stefan Behnel <scoder@users.sourceforge.net>
See LICENSE file for licensing.
You can find the latest version at
http://mathdom.sourceforge.net
What is MathDOM?
----------------
Terms, there and back again.
The package comprises parsers for a subset of Content MathML 2.0 and infix
terms (using pyparsing [1]). It provides access to the term tree through a DOM
(based on PyXML/4DOM [2]) or, preferably, the ElementTree API on top of lxml
[3] and allows serialization to Content MathML and literal terms in infix,
prefix and postfix notation. It supports subclassable input/output filters,
e.g. for Python terms.
If you want to test it, run 'examples/infix.py'.
A quick example:
----------------
>>> from mathml.lmathdom import MathDOM # use lxml implementation
>>> doc = MathDOM.fromString("+2^x+4*-5i/6", "infix_term") # parse infix term
>>> [ n.value() for n in doc.xpath(u'//math:cn[@type="integer"]') ] # find integers
[2, 4, 6]
>>> for apply_tag in doc.xpath(u'//math:apply[math:plus]'): # replace '+' with '-'
... apply_tag.set_operator(u'minus')
>>> from mathml.utils import pyterm # register Python term builder
>>> doc.serialize("python") # serialize to Python term
u'2 ** x - 4 * (-5j) / 6'
Simple, isn't it ?
Current status:
---------------
MathDOM 0.7 is now in a stable state. There have not been any bug reports for
quite a while. Future enhancements may regard the compatibility of the two
implementations (PyXML and lxml). They will likely come closer based on the
ElementTree API.
Regarding lxml:
---------------
The lxml based implementation shares most of the code with the PyXML one, but
replaces the DOM implementation with a patched version of lxml [3], an XML API
similar to ElementTree [4], implemented on top of libxml2 [5]. That makes it
much faster than the pure Python implementation (just try test/test.py for a
comparison) and it supports more XML features, like XSLT and XInclude.
MathDOM 0.7 should work out-of-the-box with lxml 0.9 and better. Get it from
http://codespeak.net/lxml/
PyXML vs. lxml:
---------------
MathDOM's mathml package includes two main modules: mathdom and lmathdom. The
first depends on PyXML and the second on lxml. It is one of the goals of
MathDOM to keep both APIs as close as possible, but since lxml's ElementTree
API is very different in spirit from PyXML's DOM, there will always be
differences. If you want your code to be portable between both (e.g. to use
the mathdom module as a fallback in Jython), please try to avoid the XML
specific APIs as much as possible and prefer the methods that are defined by
the MathDOM implementation. Both implementations share a subset of the
ElementTree API. If you need a specific feature that both lxml and PyXML
support, but that is accessed differently in both MathDOM APIs, feel free to
discuss this on the MathDOM mailing list as a request for API enhancement.
The files:
----------
* Installation:
setup.py - distutils, try "python setup.py install"
* Examples are in "examples/":
examples/infix.py - example: read a term, write out MathML, infix,
prefix, postfix representations
-> START HERE if you want to figure out how
things work.
examples/dom.py - example: read a term, do some DOM stuff
examples/ldom.py - example: read a term, do some lxml/xpath stuff
* The actual package source is in "mathml/":
mathml/mathdom.py - the DOM implemention
mathml/lmathdom.py - the lxml implemention (supports XSLT, RelaxNG, etc.)
mathml/xmlterm.py - SAX generator for the termparser AST
mathml/termparser.py - parser for literal infix terms
mathml/termbuilder.py - serializer for literal terms,
framework for output converters
* Extensions are in "mathml/utils/":
mathml/utils/pyterm.py - a Python term serializer and parser
mathml/utils/sqlterm.py - a preliminary SQL term serializer
mathml/utils/mathmlc2p.xsl
mathml/utils/ctop.xsl - XSLT converters: Content MathML -> Presentation MathML
mathml/utils/sax_pmathml.py
- PyMathML [6] integration through the SAX interface
* PyMathML [6] is in "mathml/pmathml/"
For convenience, PyMathML [6] is included in MathDOM. PyMathML is a
renderer for Presentational MathML, written by Gustavo Carneiro and
distributed under the terms of the LGPL (if you can't accept that,
don't use it!). For questions regarding PyMathML, please contact the
PyMathML project at SourceForge. I do not maintain that package!
If you want to use PyMathML with MathDOM, take a look at
mathml/utils/sax_pmathml.py
References
----------
[1] pyparsing: http://pyparsing.sf.net/
[2] PyXML: http://pyxml.sf.net/
[3] lxml: http://codespeak.net/lxml/
[4] ElementTree: http://effbot.org/zone/element-index.htm
[5] libxml2: http://xmlsoft.org/
[6] PyMathML: http://pymathml.sf.net/
Have fun!

About

A port of mathdom from Python 2 to Python 3.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MathDOM - handling terms through a MathML DOM in Python
-------------------------------------------------------
I'd be really glad to hear if this is useful. And maybe you have an idea how
to make it better. :) Just send me an email:
Stefan Behnel <scoder@users.sourceforge.net>
See LICENSE file for licensing.
You can find the latest version at
http://mathdom.sourceforge.net
What is MathDOM?
----------------
Terms, there and back again.
The package comprises parsers for a subset of Content MathML 2.0 and infix
terms (using pyparsing [1]). It provides access to the term tree through a DOM
(based on PyXML/4DOM [2]) or, preferably, the ElementTree API on top of lxml
[3] and allows serialization to Content MathML and literal terms in infix,
prefix and postfix notation. It supports subclassable input/output filters,
e.g. for Python terms.
If you want to test it, run 'examples/infix.py'.
A quick example:
----------------
>>> from mathml.lmathdom import MathDOM # use lxml implementation
>>> doc = MathDOM.fromString("+2^x+4*-5i/6", "infix_term") # parse infix term
>>> [ n.value() for n in doc.xpath(u'//math:cn[@type="integer"]') ] # find integers
[2, 4, 6]
>>> for apply_tag in doc.xpath(u'//math:apply[math:plus]'): # replace '+' with '-'
... apply_tag.set_operator(u'minus')
>>> from mathml.utils import pyterm # register Python term builder
>>> doc.serialize("python") # serialize to Python term
u'2 ** x - 4 * (-5j) / 6'
Simple, isn't it ?
Current status:
---------------
MathDOM 0.7 is now in a stable state. There have not been any bug reports for
quite a while. Future enhancements may regard the compatibility of the two
implementations (PyXML and lxml). They will likely come closer based on the
ElementTree API.
Regarding lxml:
---------------
The lxml based implementation shares most of the code with the PyXML one, but
replaces the DOM implementation with a patched version of lxml [3], an XML API
similar to ElementTree [4], implemented on top of libxml2 [5]. That makes it
much faster than the pure Python implementation (just try test/test.py for a
comparison) and it supports more XML features, like XSLT and XInclude.
MathDOM 0.7 should work out-of-the-box with lxml 0.9 and better. Get it from
http://codespeak.net/lxml/
PyXML vs. lxml:
---------------
MathDOM's mathml package includes two main modules: mathdom and lmathdom. The
first depends on PyXML and the second on lxml. It is one of the goals of
MathDOM to keep both APIs as close as possible, but since lxml's ElementTree
API is very different in spirit from PyXML's DOM, there will always be
differences. If you want your code to be portable between both (e.g. to use
the mathdom module as a fallback in Jython), please try to avoid the XML
specific APIs as much as possible and prefer the methods that are defined by
the MathDOM implementation. Both implementations share a subset of the
ElementTree API. If you need a specific feature that both lxml and PyXML
support, but that is accessed differently in both MathDOM APIs, feel free to
discuss this on the MathDOM mailing list as a request for API enhancement.
The files:
----------
* Installation:
setup.py - distutils, try "python setup.py install"
* Examples are in "examples/":
examples/infix.py - example: read a term, write out MathML, infix,
prefix, postfix representations
-> START HERE if you want to figure out how
things work.
examples/dom.py - example: read a term, do some DOM stuff
examples/ldom.py - example: read a term, do some lxml/xpath stuff
* The actual package source is in "mathml/":
mathml/mathdom.py - the DOM implemention
mathml/lmathdom.py - the lxml implemention (supports XSLT, RelaxNG, etc.)
mathml/xmlterm.py - SAX generator for the termparser AST
mathml/termparser.py - parser for literal infix terms
mathml/termbuilder.py - serializer for literal terms,
framework for output converters
* Extensions are in "mathml/utils/":
mathml/utils/pyterm.py - a Python term serializer and parser
mathml/utils/sqlterm.py - a preliminary SQL term serializer
mathml/utils/mathmlc2p.xsl
mathml/utils/ctop.xsl - XSLT converters: Content MathML -> Presentation MathML
mathml/utils/sax_pmathml.py
- PyMathML [6] integration through the SAX interface
* PyMathML [6] is in "mathml/pmathml/"
For convenience, PyMathML [6] is included in MathDOM. PyMathML is a
renderer for Presentational MathML, written by Gustavo Carneiro and
distributed under the terms of the LGPL (if you can't accept that,
don't use it!). For questions regarding PyMathML, please contact the
PyMathML project at SourceForge. I do not maintain that package!
If you want to use PyMathML with MathDOM, take a look at
mathml/utils/sax_pmathml.py
References
----------
[1] pyparsing: http://pyparsing.sf.net/
[2] PyXML: http://pyxml.sf.net/
[3] lxml: http://codespeak.net/lxml/
[4] ElementTree: http://effbot.org/zone/element-index.htm
[5] libxml2: http://xmlsoft.org/
[6] PyMathML: http://pymathml.sf.net/
Have fun!

About

A port of mathdom from Python 2 to Python 3.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

MathDOM - handling terms through a MathML DOM in Python
-------------------------------------------------------
I'd be really glad to hear if this is useful. And maybe you have an idea how
to make it better. :) Just send me an email:
Stefan Behnel <scoder@users.sourceforge.net>
See LICENSE file for licensing.
You can find the latest version at
http://mathdom.sourceforge.net
What is MathDOM?
----------------
Terms, there and back again.
The package comprises parsers for a subset of Content MathML 2.0 and infix
terms (using pyparsing [1]). It provides access to the term tree through a DOM
(based on PyXML/4DOM [2]) or, preferably, the ElementTree API on top of lxml
[3] and allows serialization to Content MathML and literal terms in infix,
prefix and postfix notation. It supports subclassable input/output filters,
e.g. for Python terms.
If you want to test it, run 'examples/infix.py'.
A quick example:
----------------
>>> from mathml.lmathdom import MathDOM # use lxml implementation
>>> doc = MathDOM.fromString("+2^x+4*-5i/6", "infix_term") # parse infix term
>>> [ n.value() for n in doc.xpath(u'//math:cn[@type="integer"]') ] # find integers
[2, 4, 6]
>>> for apply_tag in doc.xpath(u'//math:apply[math:plus]'): # replace '+' with '-'
... apply_tag.set_operator(u'minus')
>>> from mathml.utils import pyterm # register Python term builder
>>> doc.serialize("python") # serialize to Python term
u'2 ** x - 4 * (-5j) / 6'
Simple, isn't it ?
Current status:
---------------
MathDOM 0.7 is now in a stable state. There have not been any bug reports for
quite a while. Future enhancements may regard the compatibility of the two
implementations (PyXML and lxml). They will likely come closer based on the
ElementTree API.
Regarding lxml:
---------------
The lxml based implementation shares most of the code with the PyXML one, but
replaces the DOM implementation with a patched version of lxml [3], an XML API
similar to ElementTree [4], implemented on top of libxml2 [5]. That makes it
much faster than the pure Python implementation (just try test/test.py for a
comparison) and it supports more XML features, like XSLT and XInclude.
MathDOM 0.7 should work out-of-the-box with lxml 0.9 and better. Get it from
http://codespeak.net/lxml/
PyXML vs. lxml:
---------------
MathDOM's mathml package includes two main modules: mathdom and lmathdom. The
first depends on PyXML and the second on lxml. It is one of the goals of
MathDOM to keep both APIs as close as possible, but since lxml's ElementTree
API is very different in spirit from PyXML's DOM, there will always be
differences. If you want your code to be portable between both (e.g. to use
the mathdom module as a fallback in Jython), please try to avoid the XML
specific APIs as much as possible and prefer the methods that are defined by
the MathDOM implementation. Both implementations share a subset of the
ElementTree API. If you need a specific feature that both lxml and PyXML
support, but that is accessed differently in both MathDOM APIs, feel free to
discuss this on the MathDOM mailing list as a request for API enhancement.
The files:
----------
* Installation:
setup.py - distutils, try "python setup.py install"
* Examples are in "examples/":
examples/infix.py - example: read a term, write out MathML, infix,
prefix, postfix representations
-> START HERE if you want to figure out how
things work.
examples/dom.py - example: read a term, do some DOM stuff
examples/ldom.py - example: read a term, do some lxml/xpath stuff
* The actual package source is in "mathml/":
mathml/mathdom.py - the DOM implemention
mathml/lmathdom.py - the lxml implemention (supports XSLT, RelaxNG, etc.)
mathml/xmlterm.py - SAX generator for the termparser AST
mathml/termparser.py - parser for literal infix terms
mathml/termbuilder.py - serializer for literal terms,
framework for output converters
* Extensions are in "mathml/utils/":
mathml/utils/pyterm.py - a Python term serializer and parser
mathml/utils/sqlterm.py - a preliminary SQL term serializer
mathml/utils/mathmlc2p.xsl
mathml/utils/ctop.xsl - XSLT converters: Content MathML -> Presentation MathML
mathml/utils/sax_pmathml.py
- PyMathML [6] integration through the SAX interface
* PyMathML [6] is in "mathml/pmathml/"
For convenience, PyMathML [6] is included in MathDOM. PyMathML is a
renderer for Presentational MathML, written by Gustavo Carneiro and
distributed under the terms of the LGPL (if you can't accept that,
don't use it!). For questions regarding PyMathML, please contact the
PyMathML project at SourceForge. I do not maintain that package!
If you want to use PyMathML with MathDOM, take a look at
mathml/utils/sax_pmathml.py
References
----------
[1] pyparsing: http://pyparsing.sf.net/
[2] PyXML: http://pyxml.sf.net/
[3] lxml: http://codespeak.net/lxml/
[4] ElementTree: http://effbot.org/zone/element-index.htm
[5] libxml2: http://xmlsoft.org/
[6] PyMathML: http://pymathml.sf.net/
Have fun!

About

A port of mathdom from Python 2 to Python 3.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages