HTML Fragments¶
This module defines a HTML fragment class, which holds a piece of HTML. This is primarily used in browser-based notebooks, though it might be useful for creating static pages as well.
This module defines MathJax
, an object of which performs the task of
producing an HTML representation of any object. The produced HTML is
renderable in a browser-based notebook with the help of MathJax.
- class sage.misc.html.HTMLFragmentFactory¶
Bases:
sage.structure.sage_object.SageObject
- eval(s, locals=None)¶
Evaluate embedded <sage> tags
INPUT:
s
– string.globals
– dictionary. The global variables when evaluatings
. Default: the current global variables.
OUTPUT:
A
HtmlFragment
instance.EXAMPLES:
sage: a = 123 sage: html.eval('<sage>a</sage>') <script type="math/tex">123</script> sage: html.eval('<sage>a</sage>', locals={'a': 456}) <script type="math/tex">456</script>
- iframe(url, height=400, width=800)¶
Generate an iframe HTML fragment
INPUT:
url
– string. A url, either with or without URI scheme (defaults to “http”), or an absolute file path.height
– the number of pixels for the page height. Defaults to 400.width
– the number of pixels for the page width. Defaults to 800.
OUTPUT:
A
HtmlFragment
instance.EXAMPLES:
sage: pretty_print(html.iframe("sagemath.org")) <iframe height="400" width="800" src="http://sagemath.org"></iframe> sage: pretty_print(html.iframe("http://sagemath.org",30,40)) <iframe height="30" width="40" src="http://sagemath.org"></iframe> sage: pretty_print(html.iframe("https://sagemath.org",30)) <iframe height="30" width="800" src="https://sagemath.org"></iframe> sage: pretty_print(html.iframe("/home/admin/0/data/filename")) <iframe height="400" width="800" src="file:///home/admin/0/data/filename"></iframe> sage: pretty_print(html.iframe('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA' ....: 'AUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBA' ....: 'AO9TXL0Y4OHwAAAABJRU5ErkJggg=="')) <iframe height="400" width="800" src="http://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==""></iframe>
- class sage.misc.html.HtmlFragment¶
Bases:
str
,sage.structure.sage_object.SageObject
A HTML fragment.
This is a piece of HTML, usually not a complete document. For example, just a
<div>...</div>
piece and not the entire<html>...</html>
.EXAMPLES:
sage: from sage.misc.html import HtmlFragment sage: HtmlFragment('<b>test</b>') <b>test</b>
- _rich_repr_(display_manager, **kwds)¶
Rich Output Magic Method
See
sage.repl.rich_output
for details.EXAMPLES:
sage: from sage.repl.rich_output import get_display_manager sage: dm = get_display_manager() sage: h = sage.misc.html.HtmlFragment('<b>old</b>') sage: h._rich_repr_(dm) # the doctest backend does not support html OutputPlainText container
- class sage.misc.html.MathJax¶
Bases:
object
Render LaTeX input using MathJax. This returns a
MathJaxExpr
.EXAMPLES:
sage: from sage.misc.html import MathJax sage: MathJax()(3) <html><script type="math/tex; mode=display">\newcommand{\Bold}[1]{\mathbf{#1}}3</script></html> sage: MathJax()(ZZ) <html><script type="math/tex; mode=display">\newcommand{\Bold}[1]{\mathbf{#1}}\Bold{Z}</script></html>
- eval(x, globals=None, locals=None, mode='display', combine_all=False)¶
Render LaTeX input using MathJax. This returns a
MathJaxExpr
.INPUT:
x
- a Sage objectglobals
- a globals dictionarylocals
- extra local variables used when evaluating Sage code inx
.mode
- string (optional, default'display'
):'display'
for displaymath,'inline'
for inline math, or'plain'
for just the LaTeX code without the surrounding html and script tags.
combine_all
- boolean (Default:False
): Ifcombine_all
isTrue
and the input is a tuple, then it does not return a tuple and instead returns a string with all the elements separated by a single space.
OUTPUT:
EXAMPLES:
sage: from sage.misc.html import MathJax sage: MathJax().eval(3, mode='display') <html><script type="math/tex; mode=display">\newcommand{\Bold}[1]{\mathbf{#1}}3</script></html> sage: MathJax().eval(3, mode='inline') <html>\(\newcommand{\Bold}[1]{\mathbf{#1}}3\)</html> sage: MathJax().eval(type(3), mode='inline') <html>\(\newcommand{\Bold}[1]{\mathbf{#1}}\verb|<class|\verb| |\verb|'sage.rings.integer.Integer'>|\)</html>
- class sage.misc.html.MathJaxExpr(y)¶
Bases:
object
An arbitrary MathJax expression that can be nicely concatenated.
EXAMPLES:
sage: from sage.misc.html import MathJaxExpr sage: MathJaxExpr("a^{2}") + MathJaxExpr("x^{-1}") a^{2}x^{-1}
- sage.misc.html.html(obj, concatenate=True, strict=False)¶
Construct a HTML fragment
INPUT:
obj
– anything. An object for which you want an HTML representation.concatenate
– ifTrue
, combine HTML representations of elements of the containerobj
strict
– ifTrue
, construct an HTML representation ofobj
even ifobj
is a string
OUTPUT:
A
HtmlFragment
instance.EXAMPLES:
sage: h = html('<hr>'); pretty_print(h) <hr> sage: type(h) <class 'sage.misc.html.HtmlFragment'> sage: html(1/2) <html><script type="math/tex; mode=display">\newcommand{\Bold}[1]{\mathbf{#1}}\frac{1}{2}</script></html> sage: html('<a href="http://sagemath.org">sagemath</a>') <a href="http://sagemath.org">sagemath</a> sage: html('<a href="http://sagemath.org">sagemath</a>', strict=True) <html>\[\newcommand{\Bold}[1]{\mathbf{#1}}\verb|<a|\verb| |\verb|href="http://sagemath.org">sagemath</a>|\]</html>
- sage.misc.html.math_parse(s)¶
Replace TeX-
$
with Mathjax equations.Turn the HTML-ish string s that can have $$ and $’s in it into pure HTML. See below for a precise definition of what this means.
INPUT:
s
– a string
OUTPUT:
A
HtmlFragment
instance.Do the following:
Replace all
$ text $
's by<script type="math/tex"> text </script>
Replace all
$$ text $$
's by<script type="math/tex; mode=display"> text </script>
Replace all
\ $
's by$
's. Note that in the above two cases nothing is done if the$
is preceeded by a backslash.Replace all
\[ text \]
's by<script type="math/tex; mode=display"> text </script>
EXAMPLES:
sage: pretty_print(sage.misc.html.math_parse('This is $2+2$.')) This is <script type="math/tex">2+2</script>. sage: pretty_print(sage.misc.html.math_parse('This is $$2+2$$.')) This is <script type="math/tex; mode=display">2+2</script>. sage: pretty_print(sage.misc.html.math_parse('This is \\[2+2\\].')) This is <script type="math/tex; mode=display">2+2</script>. sage: pretty_print(sage.misc.html.math_parse(r'This is \[2+2\].')) This is <script type="math/tex; mode=display">2+2</script>.
- sage.misc.html.pretty_print_default(enable=True)¶
Enable or disable default pretty printing.
Pretty printing means rendering things in HTML and by MathJax so that a browser-based frontend can render real math.
This function is pretty useless without the notebook, it should not be in the global namespace.
INPUT:
enable
– bool (optional, defaultTrue
). IfTrue
, turn on pretty printing; ifFalse
, turn it off.
EXAMPLES:
sage: pretty_print_default(True) sage: 'foo' # the doctest backend does not support html 'foo' sage: pretty_print_default(False) sage: 'foo' 'foo'