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 evaluating s. 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 object

  • globals - a globals dictionary

  • locals - extra local variables used when evaluating Sage code in x.

  • 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): If combine_all is True 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:

A MathJaxExpr

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><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}3</script></html>
sage: MathJax().eval(type(3), mode='inline')  # py2
<html><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}\verb|<type|\phantom{\verb!x!}\verb|'sage.rings.integer.Integer'>|</script></html>
sage: MathJax().eval(type(3), mode='inline')  # py3
<html><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}\verb|<class|\phantom{\verb!x!}\verb|'sage.rings.integer.Integer'>|</script></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)

Construct a HTML fragment

INPUT:

  • obj – anything. An object for which you want a HTML representation.

  • concatenate – if True, combine HTML representations of elements of the container obj

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.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, default True). If True, turn on pretty printing; if False, 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'