evennia/docs/1.0-dev/_modules/evennia/utils/text2html.html
2020-06-15 21:52:33 +02:00

458 lines
No EOL
60 KiB
HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>evennia.utils.text2html &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script>
<script src="../../../_static/doctools.js"></script>
<script src="../../../_static/language_data.js"></script>
<link rel="shortcut icon" href="../../../_static/favicon.ico"/>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for evennia.utils.text2html</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">ANSI -&gt; html converter</span>
<span class="sd">Credit for original idea and implementation</span>
<span class="sd">goes to Muhammad Alkarouri and his</span>
<span class="sd">snippet #577349 on http://code.activestate.com.</span>
<span class="sd">(extensively modified by Griatch 2010)</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">from</span> <span class="nn">html</span> <span class="k">import</span> <span class="n">escape</span> <span class="k">as</span> <span class="n">html_escape</span>
<span class="kn">from</span> <span class="nn">.ansi</span> <span class="k">import</span> <span class="o">*</span>
<span class="c1"># All xterm256 RGB equivalents</span>
<span class="n">XTERM256_FG</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\033</span><span class="s2">[38;5;</span><span class="si">%s</span><span class="s2">m&quot;</span>
<span class="n">XTERM256_BG</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\033</span><span class="s2">[48;5;</span><span class="si">%s</span><span class="s2">m&quot;</span>
<div class="viewcode-block" id="TextToHTMLparser"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser">[docs]</a><span class="k">class</span> <span class="nc">TextToHTMLparser</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This class describes a parser for converting from ANSI to html.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">tabstop</span> <span class="o">=</span> <span class="mi">4</span>
<span class="c1"># mapping html color name &lt;-&gt; ansi code.</span>
<span class="n">hilite</span> <span class="o">=</span> <span class="n">ANSI_HILITE</span>
<span class="n">unhilite</span> <span class="o">=</span> <span class="n">ANSI_UNHILITE</span> <span class="c1"># this will be stripped - there is no css equivalent.</span>
<span class="n">normal</span> <span class="o">=</span> <span class="n">ANSI_NORMAL</span> <span class="c1"># &quot;</span>
<span class="n">underline</span> <span class="o">=</span> <span class="n">ANSI_UNDERLINE</span>
<span class="n">blink</span> <span class="o">=</span> <span class="n">ANSI_BLINK</span>
<span class="n">inverse</span> <span class="o">=</span> <span class="n">ANSI_INVERSE</span> <span class="c1"># this will produce an outline; no obvious css equivalent?</span>
<span class="n">colorcodes</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">(</span><span class="s2">&quot;color-000&quot;</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_BLACK</span><span class="p">),</span> <span class="c1"># pure black</span>
<span class="p">(</span><span class="s2">&quot;color-001&quot;</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_RED</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;color-002&quot;</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_GREEN</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;color-003&quot;</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_YELLOW</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;color-004&quot;</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_BLUE</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;color-005&quot;</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_MAGENTA</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;color-006&quot;</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_CYAN</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;color-007&quot;</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_WHITE</span><span class="p">),</span> <span class="c1"># light grey</span>
<span class="p">(</span><span class="s2">&quot;color-008&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BLACK</span><span class="p">),</span> <span class="c1"># dark grey</span>
<span class="p">(</span><span class="s2">&quot;color-009&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_RED</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;color-010&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_GREEN</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;color-011&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_YELLOW</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;color-012&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BLUE</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;color-013&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_MAGENTA</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;color-014&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_CYAN</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;color-015&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_WHITE</span><span class="p">),</span> <span class="c1"># pure white</span>
<span class="p">]</span> <span class="o">+</span> <span class="p">[(</span><span class="s2">&quot;color-</span><span class="si">%03i</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">16</span><span class="p">),</span> <span class="n">XTERM256_FG</span> <span class="o">%</span> <span class="p">(</span><span class="s2">&quot;</span><span class="si">%i</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">16</span><span class="p">)))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">240</span><span class="p">)]</span>
<span class="n">colorback</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-000&quot;</span><span class="p">,</span> <span class="n">ANSI_BACK_BLACK</span><span class="p">),</span> <span class="c1"># pure black</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-001&quot;</span><span class="p">,</span> <span class="n">ANSI_BACK_RED</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-002&quot;</span><span class="p">,</span> <span class="n">ANSI_BACK_GREEN</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-003&quot;</span><span class="p">,</span> <span class="n">ANSI_BACK_YELLOW</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-004&quot;</span><span class="p">,</span> <span class="n">ANSI_BACK_BLUE</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-005&quot;</span><span class="p">,</span> <span class="n">ANSI_BACK_MAGENTA</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-006&quot;</span><span class="p">,</span> <span class="n">ANSI_BACK_CYAN</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-007&quot;</span><span class="p">,</span> <span class="n">ANSI_BACK_WHITE</span><span class="p">),</span> <span class="c1"># light grey</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-008&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_BLACK</span><span class="p">),</span> <span class="c1"># dark grey</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-009&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_RED</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-010&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_GREEN</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-011&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_YELLOW</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-012&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_BLUE</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-013&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_MAGENTA</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-014&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_CYAN</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;bgcolor-015&quot;</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_WHITE</span><span class="p">),</span> <span class="c1"># pure white</span>
<span class="p">]</span> <span class="o">+</span> <span class="p">[(</span><span class="s2">&quot;bgcolor-</span><span class="si">%03i</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">16</span><span class="p">),</span> <span class="n">XTERM256_BG</span> <span class="o">%</span> <span class="p">(</span><span class="s2">&quot;</span><span class="si">%i</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">16</span><span class="p">)))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">240</span><span class="p">)]</span>
<span class="c1"># make sure to escape [</span>
<span class="c1"># colorcodes = [(c, code.replace(&quot;[&quot;, r&quot;\[&quot;)) for c, code in colorcodes]</span>
<span class="c1"># colorback = [(c, code.replace(&quot;[&quot;, r&quot;\[&quot;)) for c, code in colorback]</span>
<span class="n">fg_colormap</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">((</span><span class="n">code</span><span class="p">,</span> <span class="n">clr</span><span class="p">)</span> <span class="k">for</span> <span class="n">clr</span><span class="p">,</span> <span class="n">code</span> <span class="ow">in</span> <span class="n">colorcodes</span><span class="p">)</span>
<span class="n">bg_colormap</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">((</span><span class="n">code</span><span class="p">,</span> <span class="n">clr</span><span class="p">)</span> <span class="k">for</span> <span class="n">clr</span><span class="p">,</span> <span class="n">code</span> <span class="ow">in</span> <span class="n">colorback</span><span class="p">)</span>
<span class="c1"># create stop markers</span>
<span class="n">fgstop</span> <span class="o">=</span> <span class="s2">&quot;(?:</span><span class="se">\033</span><span class="s2">\[1m|</span><span class="se">\033</span><span class="s2">\[22m){0,1}</span><span class="se">\033</span><span class="s2">\[3[0-8].*?m|</span><span class="se">\033</span><span class="s2">\[0m|$&quot;</span>
<span class="n">bgstop</span> <span class="o">=</span> <span class="s2">&quot;(?:</span><span class="se">\033</span><span class="s2">\[1m|</span><span class="se">\033</span><span class="s2">\[22m){0,1}</span><span class="se">\033</span><span class="s2">\[4[0-8].*?m|</span><span class="se">\033</span><span class="s2">\[0m|$&quot;</span>
<span class="n">bgfgstop</span> <span class="o">=</span> <span class="n">bgstop</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="sa">r</span><span class="s2">&quot;(\s*)&quot;</span> <span class="o">+</span> <span class="n">fgstop</span>
<span class="n">fgstart</span> <span class="o">=</span> <span class="s2">&quot;((?:</span><span class="se">\033</span><span class="s2">\[1m|</span><span class="se">\033</span><span class="s2">\[22m){0,1}</span><span class="se">\033</span><span class="s2">\[3[0-8].*?m)&quot;</span>
<span class="n">bgstart</span> <span class="o">=</span> <span class="s2">&quot;((?:</span><span class="se">\033</span><span class="s2">\[1m|</span><span class="se">\033</span><span class="s2">\[22m){0,1}</span><span class="se">\033</span><span class="s2">\[4[0-8].*?m)&quot;</span>
<span class="n">bgfgstart</span> <span class="o">=</span> <span class="n">bgstart</span> <span class="o">+</span> <span class="sa">r</span><span class="s2">&quot;(\s*)&quot;</span> <span class="o">+</span> <span class="s2">&quot;((?:</span><span class="se">\033</span><span class="s2">\[1m|</span><span class="se">\033</span><span class="s2">\[22m){0,1}</span><span class="se">\033</span><span class="s2">\[[3-4][0-8].*?m){0,1}&quot;</span>
<span class="c1"># extract color markers, tagging the start marker and the text marked</span>
<span class="n">re_fgs</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">fgstart</span> <span class="o">+</span> <span class="s2">&quot;(.*?)(?=&quot;</span> <span class="o">+</span> <span class="n">fgstop</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
<span class="n">re_bgs</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">bgstart</span> <span class="o">+</span> <span class="s2">&quot;(.*?)(?=&quot;</span> <span class="o">+</span> <span class="n">bgstop</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
<span class="n">re_bgfg</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">bgfgstart</span> <span class="o">+</span> <span class="s2">&quot;(.*?)(?=&quot;</span> <span class="o">+</span> <span class="n">bgfgstop</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
<span class="n">re_normal</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">normal</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="sa">r</span><span class="s2">&quot;\[&quot;</span><span class="p">))</span>
<span class="n">re_hilite</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s2">&quot;(?:</span><span class="si">%s</span><span class="s2">)(.*)(?=</span><span class="si">%s</span><span class="s2">|</span><span class="si">%s</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">hilite</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="sa">r</span><span class="s2">&quot;\[&quot;</span><span class="p">),</span> <span class="n">fgstop</span><span class="p">,</span> <span class="n">bgstop</span><span class="p">))</span>
<span class="n">re_unhilite</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s2">&quot;(?:</span><span class="si">%s</span><span class="s2">)(.*)(?=</span><span class="si">%s</span><span class="s2">|</span><span class="si">%s</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">unhilite</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="sa">r</span><span class="s2">&quot;\[&quot;</span><span class="p">),</span> <span class="n">fgstop</span><span class="p">,</span> <span class="n">bgstop</span><span class="p">))</span>
<span class="n">re_uline</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s2">&quot;(?:</span><span class="si">%s</span><span class="s2">)(.*?)(?=</span><span class="si">%s</span><span class="s2">|</span><span class="si">%s</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">underline</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="sa">r</span><span class="s2">&quot;\[&quot;</span><span class="p">),</span> <span class="n">fgstop</span><span class="p">,</span> <span class="n">bgstop</span><span class="p">))</span>
<span class="n">re_blink</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s2">&quot;(?:</span><span class="si">%s</span><span class="s2">)(.*?)(?=</span><span class="si">%s</span><span class="s2">|</span><span class="si">%s</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">blink</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="sa">r</span><span class="s2">&quot;\[&quot;</span><span class="p">),</span> <span class="n">fgstop</span><span class="p">,</span> <span class="n">bgstop</span><span class="p">))</span>
<span class="n">re_inverse</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s2">&quot;(?:</span><span class="si">%s</span><span class="s2">)(.*?)(?=</span><span class="si">%s</span><span class="s2">|</span><span class="si">%s</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">inverse</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="sa">r</span><span class="s2">&quot;\[&quot;</span><span class="p">),</span> <span class="n">fgstop</span><span class="p">,</span> <span class="n">bgstop</span><span class="p">))</span>
<span class="n">re_string</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span>
<span class="sa">r</span><span class="s2">&quot;(?P&lt;htmlchars&gt;[&lt;&amp;&gt;])|(?P&lt;firstspace&gt;(?&lt;=\S) )|(?P&lt;space&gt; [ \t]+)|&quot;</span>
<span class="sa">r</span><span class="s2">&quot;(?P&lt;spacestart&gt;^ )|(?P&lt;lineend&gt;\r\n|\r|\n)&quot;</span><span class="p">,</span>
<span class="n">re</span><span class="o">.</span><span class="n">S</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">M</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">re_dblspace</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot; {2,}&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">M</span><span class="p">)</span>
<span class="n">re_url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span>
<span class="sa">r</span><span class="s1">&#39;((?:ftp|www|https?)\W+(?:(?!\.(?:\s|$)|&amp;\w+;)[^&quot;</span><span class="se">\&#39;</span><span class="s1">,;$*^</span><span class="se">\\</span><span class="s1">()</span><span class="si">{}</span><span class="s1">&lt;&gt;\[\]\s])+)(\.(?:\s|$)|&amp;\w+;|)&#39;</span>
<span class="p">)</span>
<span class="n">re_mxplink</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\|lc(.*?)\|lt(.*?)\|le&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span>
<div class="viewcode-block" id="TextToHTMLparser._sub_bgfg"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser._sub_bgfg">[docs]</a> <span class="k">def</span> <span class="nf">_sub_bgfg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colormatch</span><span class="p">):</span>
<span class="c1"># print(&quot;colormatch.groups()&quot;, colormatch.groups())</span>
<span class="n">bgcode</span><span class="p">,</span> <span class="n">prespace</span><span class="p">,</span> <span class="n">fgcode</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">postspace</span> <span class="o">=</span> <span class="n">colormatch</span><span class="o">.</span><span class="n">groups</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">fgcode</span><span class="p">:</span>
<span class="n">ret</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;&quot;&quot;&lt;span class=&quot;</span><span class="si">%s</span><span class="s2">&quot;&gt;</span><span class="si">%s%s%s</span><span class="s2">&lt;/span&gt;&quot;&quot;&quot;</span> <span class="o">%</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">bgcode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">bgcode</span><span class="p">,</span> <span class="s2">&quot;err&quot;</span><span class="p">)),</span>
<span class="n">prespace</span> <span class="ow">and</span> <span class="s2">&quot;&amp;nbsp;&quot;</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">prespace</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">postspace</span> <span class="ow">and</span> <span class="s2">&quot;&amp;nbsp;&quot;</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">postspace</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">text</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ret</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;&quot;&quot;&lt;span class=&quot;</span><span class="si">%s</span><span class="s2">&quot;&gt;&lt;span class=&quot;</span><span class="si">%s</span><span class="s2">&quot;&gt;</span><span class="si">%s%s%s</span><span class="s2">&lt;/span&gt;&lt;/span&gt;&quot;&quot;&quot;</span> <span class="o">%</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">bgcode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">bgcode</span><span class="p">,</span> <span class="s2">&quot;err&quot;</span><span class="p">)),</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">fgcode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">bg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">fgcode</span><span class="p">,</span> <span class="s2">&quot;err&quot;</span><span class="p">)),</span>
<span class="n">prespace</span> <span class="ow">and</span> <span class="s2">&quot;&amp;nbsp;&quot;</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">prespace</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">postspace</span> <span class="ow">and</span> <span class="s2">&quot;&amp;nbsp;&quot;</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">postspace</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">text</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">ret</span></div>
<div class="viewcode-block" id="TextToHTMLparser._sub_fg"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser._sub_fg">[docs]</a> <span class="k">def</span> <span class="nf">_sub_fg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colormatch</span><span class="p">):</span>
<span class="n">code</span><span class="p">,</span> <span class="n">text</span> <span class="o">=</span> <span class="n">colormatch</span><span class="o">.</span><span class="n">groups</span><span class="p">()</span>
<span class="k">return</span> <span class="sa">r</span><span class="s2">&quot;&quot;&quot;&lt;span class=&quot;</span><span class="si">%s</span><span class="s2">&quot;&gt;</span><span class="si">%s</span><span class="s2">&lt;/span&gt;&quot;&quot;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="s2">&quot;err&quot;</span><span class="p">),</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="TextToHTMLparser._sub_bg"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser._sub_bg">[docs]</a> <span class="k">def</span> <span class="nf">_sub_bg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colormatch</span><span class="p">):</span>
<span class="n">code</span><span class="p">,</span> <span class="n">text</span> <span class="o">=</span> <span class="n">colormatch</span><span class="o">.</span><span class="n">groups</span><span class="p">()</span>
<span class="k">return</span> <span class="sa">r</span><span class="s2">&quot;&quot;&quot;&lt;span class=&quot;</span><span class="si">%s</span><span class="s2">&quot;&gt;</span><span class="si">%s</span><span class="s2">&lt;/span&gt;&quot;&quot;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="s2">&quot;err&quot;</span><span class="p">),</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="TextToHTMLparser.re_color"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.re_color">[docs]</a> <span class="k">def</span> <span class="nf">re_color</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Replace ansi colors with html color class names. Let the</span>
<span class="sd"> client choose how it will display colors, if it wishes to.</span>
<span class="sd"> Args:</span>
<span class="sd"> text (str): the string with color to replace.</span>
<span class="sd"> Returns:</span>
<span class="sd"> text (str): Re-colored text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_bgfg</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_sub_bgfg</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_fgs</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_sub_fg</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_bgs</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_sub_bg</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_normal</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="k">return</span> <span class="n">text</span></div>
<div class="viewcode-block" id="TextToHTMLparser.re_bold"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.re_bold">[docs]</a> <span class="k">def</span> <span class="nf">re_bold</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Clean out superfluous hilights rather than set &lt;strong&gt;to make</span>
<span class="sd"> it match the look of telnet.</span>
<span class="sd"> Args:</span>
<span class="sd"> text (str): Text to process.</span>
<span class="sd"> Returns:</span>
<span class="sd"> text (str): Processed text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_hilite</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;&lt;strong&gt;\1&lt;/strong&gt;&quot;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_unhilite</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\1&quot;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span> <span class="c1"># strip unhilite - there is no equivalent in css.</span></div>
<div class="viewcode-block" id="TextToHTMLparser.re_underline"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.re_underline">[docs]</a> <span class="k">def</span> <span class="nf">re_underline</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Replace ansi underline with html underline class name.</span>
<span class="sd"> Args:</span>
<span class="sd"> text (str): Text to process.</span>
<span class="sd"> Returns:</span>
<span class="sd"> text (str): Processed text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_uline</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;&lt;span class=&quot;underline&quot;&gt;\1&lt;/span&gt;&#39;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="TextToHTMLparser.re_blinking"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.re_blinking">[docs]</a> <span class="k">def</span> <span class="nf">re_blinking</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Replace ansi blink with custom blink css class</span>
<span class="sd"> Args:</span>
<span class="sd"> text (str): Text to process.</span>
<span class="sd"> Returns:</span>
<span class="sd"> text (str): Processed text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_blink</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;&lt;span class=&quot;blink&quot;&gt;\1&lt;/span&gt;&#39;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="TextToHTMLparser.re_inversing"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.re_inversing">[docs]</a> <span class="k">def</span> <span class="nf">re_inversing</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Replace ansi inverse with custom inverse css class</span>
<span class="sd"> Args:</span>
<span class="sd"> text (str): Text to process.</span>
<span class="sd"> Returns:</span>
<span class="sd"> text (str): Processed text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_inverse</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;&lt;span class=&quot;inverse&quot;&gt;\1&lt;/span&gt;&#39;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="TextToHTMLparser.remove_bells"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.remove_bells">[docs]</a> <span class="k">def</span> <span class="nf">remove_bells</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Remove ansi specials</span>
<span class="sd"> Args:</span>
<span class="sd"> text (str): Text to process.</span>
<span class="sd"> Returns:</span>
<span class="sd"> text (str): Processed text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\07</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TextToHTMLparser.remove_backspaces"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.remove_backspaces">[docs]</a> <span class="k">def</span> <span class="nf">remove_backspaces</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Removes special escape sequences</span>
<span class="sd"> Args:</span>
<span class="sd"> text (str): Text to process.</span>
<span class="sd"> Returns:</span>
<span class="sd"> text (str): Processed text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">backspace_or_eol</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;(.\010)|(\033\[K)&quot;</span>
<span class="n">n</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">while</span> <span class="n">n</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">text</span><span class="p">,</span> <span class="n">n</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">subn</span><span class="p">(</span><span class="n">backspace_or_eol</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">return</span> <span class="n">text</span></div>
<div class="viewcode-block" id="TextToHTMLparser.convert_linebreaks"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.convert_linebreaks">[docs]</a> <span class="k">def</span> <span class="nf">convert_linebreaks</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Extra method for cleaning linebreaks</span>
<span class="sd"> Args:</span>
<span class="sd"> text (str): Text to process.</span>
<span class="sd"> Returns:</span>
<span class="sd"> text (str): Processed text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="sa">r</span><span class="s2">&quot;&lt;br&gt;&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TextToHTMLparser.convert_urls"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.convert_urls">[docs]</a> <span class="k">def</span> <span class="nf">convert_urls</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Replace urls (http://...) by valid HTML.</span>
<span class="sd"> Args:</span>
<span class="sd"> text (str): Text to process.</span>
<span class="sd"> Returns:</span>
<span class="sd"> text (str): Processed text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># -&gt; added target to output prevent the web browser from attempting to</span>
<span class="c1"># change pages (and losing our webclient session).</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_url</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;&lt;a href=&quot;\1&quot; target=&quot;_blank&quot;&gt;\1&lt;/a&gt;\2&#39;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="TextToHTMLparser.re_double_space"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.re_double_space">[docs]</a> <span class="k">def</span> <span class="nf">re_double_space</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> HTML will swallow any normal space after the first, so if any slipped</span>
<span class="sd"> through we must make sure to replace them with &quot; &amp;nbsp;&quot;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_dblspace</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sub_dblspace</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="TextToHTMLparser.sub_mxp_links"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.sub_mxp_links">[docs]</a> <span class="k">def</span> <span class="nf">sub_mxp_links</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Helper method to be passed to re.sub,</span>
<span class="sd"> replaces MXP links with HTML code.</span>
<span class="sd"> Args:</span>
<span class="sd"> match (re.Matchobject): Match for substitution.</span>
<span class="sd"> Returns:</span>
<span class="sd"> text (str): Processed text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">cmd</span><span class="p">,</span> <span class="n">text</span> <span class="o">=</span> <span class="p">[</span><span class="n">grp</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&amp;quot;&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">grp</span> <span class="ow">in</span> <span class="n">match</span><span class="o">.</span><span class="n">groups</span><span class="p">()]</span>
<span class="n">val</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;&lt;a id=&quot;mxplink&quot; href=&quot;#&quot; &quot;&quot;&quot;</span>
<span class="sd">&quot;&quot;&quot;onclick=&quot;Evennia.msg(&amp;quot;text&amp;quot;,[&amp;quot;{cmd}&amp;quot;],{{}});&quot;&quot;&quot;</span>
<span class="sd">&quot;&quot;&quot;return false;&quot;&gt;{text}&lt;/a&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">cmd</span><span class="o">=</span><span class="n">cmd</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="n">text</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">val</span></div>
<div class="viewcode-block" id="TextToHTMLparser.sub_text"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.sub_text">[docs]</a> <span class="k">def</span> <span class="nf">sub_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Helper method to be passed to re.sub,</span>
<span class="sd"> for handling all substitutions.</span>
<span class="sd"> Args:</span>
<span class="sd"> match (re.Matchobject): Match for substitution.</span>
<span class="sd"> Returns:</span>
<span class="sd"> text (str): Processed text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">cdict</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">groupdict</span><span class="p">()</span>
<span class="k">if</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">&quot;htmlchars&quot;</span><span class="p">]:</span>
<span class="k">return</span> <span class="n">html_escape</span><span class="p">(</span><span class="n">cdict</span><span class="p">[</span><span class="s2">&quot;htmlchars&quot;</span><span class="p">])</span>
<span class="k">elif</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">&quot;lineend&quot;</span><span class="p">]:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;br&gt;&quot;</span>
<span class="k">elif</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">&quot;firstspace&quot;</span><span class="p">]:</span>
<span class="k">return</span> <span class="s2">&quot; &amp;nbsp;&quot;</span>
<span class="k">elif</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">&quot;space&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tabstop</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="s2">&quot;&amp;nbsp;&quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">tabstop</span>
<span class="k">elif</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">&quot;space&quot;</span><span class="p">]</span> <span class="ow">or</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">&quot;spacestart&quot;</span><span class="p">]:</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">()</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&amp;nbsp;&quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">tabstop</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="s2">&quot;&amp;nbsp;&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">text</span>
<span class="k">return</span> <span class="kc">None</span></div>
<div class="viewcode-block" id="TextToHTMLparser.sub_dblspace"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.sub_dblspace">[docs]</a> <span class="k">def</span> <span class="nf">sub_dblspace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">):</span>
<span class="s2">&quot;clean up double-spaces&quot;</span>
<span class="k">return</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="s2">&quot;&amp;nbsp;&quot;</span> <span class="o">*</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">())</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span></div>
<div class="viewcode-block" id="TextToHTMLparser.parse"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.TextToHTMLparser.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">strip_ansi</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Main access function, converts a text containing ANSI codes</span>
<span class="sd"> into html statements.</span>
<span class="sd"> Args:</span>
<span class="sd"> text (str): Text to process.</span>
<span class="sd"> strip_ansi (bool, optional):</span>
<span class="sd"> Returns:</span>
<span class="sd"> text (str): Parsed text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># parse everything to ansi first</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">parse_ansi</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">strip_ansi</span><span class="o">=</span><span class="n">strip_ansi</span><span class="p">,</span> <span class="n">xterm256</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">mxp</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="c1"># convert all ansi to html</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">re_string</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sub_text</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">re_mxplink</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sub_mxp_links</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_color</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_bold</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_underline</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_blinking</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_inversing</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">remove_bells</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_linebreaks</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">remove_backspaces</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_urls</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_double_space</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="c1"># clean out eventual ansi that was missed</span>
<span class="c1"># result = parse_ansi(result, strip_ansi=True)</span>
<span class="k">return</span> <span class="n">result</span></div></div>
<span class="n">HTML_PARSER</span> <span class="o">=</span> <span class="n">TextToHTMLparser</span><span class="p">()</span>
<span class="c1">#</span>
<span class="c1"># Access function</span>
<span class="c1">#</span>
<div class="viewcode-block" id="parse_html"><a class="viewcode-back" href="../../../api/evennia.utils.html#evennia.utils.text2html.parse_html">[docs]</a><span class="k">def</span> <span class="nf">parse_html</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">strip_ansi</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">parser</span><span class="o">=</span><span class="n">HTML_PARSER</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Parses a string, replace ANSI markup with html</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">strip_ansi</span><span class="o">=</span><span class="n">strip_ansi</span><span class="p">)</span></div>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
<h3>Versions</h3>
<ul>
<li><a href="text2html.html">1.0-dev (develop branch)</a></li>
<li><a href="../../../../0.9.1/index.html">0.9.1 (master branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
</div>
</body>
</html>