Updated HTML docs

This commit is contained in:
Evennia docbuilder action 2022-06-22 06:30:53 +00:00
parent bd82579bfa
commit 70b4caedb6
105 changed files with 2389 additions and 2138 deletions

View file

@ -1295,6 +1295,8 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">basetype_setup</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">at_account_creation</span><span class="p">()</span>
<span class="c1"># initialize Attribute/TagProperties</span>
<span class="bp">self</span><span class="o">.</span><span class="n">init_evennia_properties</span><span class="p">()</span>
<span class="n">permissions</span> <span class="o">=</span> <span class="p">[</span><span class="n">settings</span><span class="o">.</span><span class="n">PERMISSION_ACCOUNT_DEFAULT</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_createdict&quot;</span><span class="p">):</span>

View file

@ -492,9 +492,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="s2">&quot;permanent&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_dep</span><span class="p">(</span>
<span class="s2">&quot;obj.cmdset.add() kwarg &#39;permanent&#39; has changed name to &#39;persistent&#39;.&quot;</span>
<span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_dep</span><span class="p">(</span><span class="s2">&quot;obj.cmdset.add() kwarg &#39;permanent&#39; has changed name to &#39;persistent&#39;.&quot;</span><span class="p">)</span>
<span class="n">persistent</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;permanent&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="n">persistent</span> <span class="ow">is</span> <span class="kc">False</span> <span class="k">else</span> <span class="n">persistent</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">cmdset</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">or</span> <span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="n">cmdset</span><span class="p">,</span> <span class="n">CmdSet</span><span class="p">)):</span>

View file

@ -2261,11 +2261,13 @@
<span class="n">old_typeclass_path</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">typeclass_path</span>
<span class="k">if</span> <span class="n">reset</span><span class="p">:</span>
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span><span class="p">(</span><span class="s2">&quot;|yNote that this will reset the object back to its typeclass&#39; default state, &quot;</span>
<span class="s2">&quot;removing any custom locks/perms/attributes etc that may have been added &quot;</span>
<span class="s2">&quot;by an explicit create_object call. Use `update` or type/force instead in order &quot;</span>
<span class="s2">&quot;to keep such data. &quot;</span>
<span class="s2">&quot;Continue [Y]/N?|n&quot;</span><span class="p">)</span>
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span>
<span class="s2">&quot;|yNote that this will reset the object back to its typeclass&#39; default state, &quot;</span>
<span class="s2">&quot;removing any custom locks/perms/attributes etc that may have been added &quot;</span>
<span class="s2">&quot;by an explicit create_object call. Use `update` or type/force instead in order &quot;</span>
<span class="s2">&quot;to keep such data. &quot;</span>
<span class="s2">&quot;Continue [Y]/N?|n&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">answer</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;N&quot;</span><span class="p">,</span> <span class="s2">&quot;NO&quot;</span><span class="p">):</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Aborted.&quot;</span><span class="p">)</span>
<span class="k">return</span>
@ -2774,7 +2776,7 @@
<span class="k">return</span>
<span class="k">if</span> <span class="n">ndb_attr</span> <span class="ow">and</span> <span class="n">ndb_attr</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot; </span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_attribute</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span> <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">ndb_attr</span><span class="p">)</span>
<span class="p">)</span></div>
@ -3515,7 +3517,7 @@
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">msgs</span><span class="p">))</span>
<span class="k">if</span> <span class="s2">&quot;delete&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="n">script</span> <span class="ow">and</span> <span class="n">script</span><span class="o">.</span><span class="n">pk</span><span class="p">:</span>
<span class="n">ScriptEvMore</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="p">[</span><span class="n">script</span><span class="p">],</span> <span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">)</span>
<span class="n">ScriptEvMore</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="p">[</span><span class="n">script</span><span class="p">],</span> <span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Script was deleted automatically.&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>

View file

@ -328,7 +328,7 @@
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">channels</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;Multiple possible channel matches/alias for &quot;</span>
<span class="s2">&quot;&#39;</span><span class="si">{channelname}</span><span class="s2">&#39;:</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">channels</span><span class="p">)</span>
<span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">channelname</span><span class="si">}</span><span class="s2">&#39;:</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">channels</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">channels</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>

View file

@ -100,9 +100,24 @@
<span class="n">rid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">id</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdLook</span><span class="p">(),</span> <span class="s2">&quot;here&quot;</span><span class="p">,</span> <span class="s2">&quot;Room(#</span><span class="si">{}</span><span class="s2">)</span><span class="se">\n</span><span class="s2">room_desc&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">rid</span><span class="p">))</span></div>
<div class="viewcode-block" id="TestGeneral.test_look_no_location"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_look_no_location">[docs]</a> <span class="k">def</span> <span class="nf">test_look_no_location</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdLook</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;You have no location to look at!&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_look_nonexisting"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_look_nonexisting">[docs]</a> <span class="k">def</span> <span class="nf">test_look_nonexisting</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdLook</span><span class="p">(),</span> <span class="s2">&quot;yellow sign&quot;</span><span class="p">,</span> <span class="s2">&quot;Could not find &#39;yellow sign&#39;.&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_home"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_home">[docs]</a> <span class="k">def</span> <span class="nf">test_home</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdHome</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;You are already home&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_go_home"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_go_home">[docs]</a> <span class="k">def</span> <span class="nf">test_go_home</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">(),</span> <span class="s2">&quot;/quiet Room2&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdHome</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;There&#39;s no place like home&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_no_home"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_no_home">[docs]</a> <span class="k">def</span> <span class="nf">test_no_home</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">home</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdHome</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;You have no home&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_inventory"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_inventory">[docs]</a> <span class="k">def</span> <span class="nf">test_inventory</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdInventory</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;You are not carrying anything.&quot;</span><span class="p">)</span></div>
@ -132,6 +147,11 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;testalias&quot;</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;account&quot;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="s2">&quot;testaliasedstring3&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;testalias&quot;</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;object&quot;</span><span class="p">))</span></div>
<div class="viewcode-block" id="TestGeneral.test_nick_list"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_nick_list">[docs]</a> <span class="k">def</span> <span class="nf">test_nick_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdNick</span><span class="p">(),</span> <span class="s2">&quot;/list&quot;</span><span class="p">,</span> <span class="s2">&quot;No nicks defined.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdNick</span><span class="p">(),</span> <span class="s2">&quot;test1 = Hello&quot;</span><span class="p">,</span> <span class="s2">&quot;Inputline-nick &#39;test1&#39; mapped to &#39;Hello&#39;.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdNick</span><span class="p">(),</span> <span class="s2">&quot;/list&quot;</span><span class="p">,</span> <span class="s2">&quot;Defined Nicks:&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_get_and_drop"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_get_and_drop">[docs]</a> <span class="k">def</span> <span class="nf">test_get_and_drop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdGet</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;You pick up Obj.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdDrop</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;You drop Obj.&quot;</span><span class="p">)</span></div>
@ -1316,7 +1336,8 @@
<span class="s2">&quot;Obj2 = evennia.objects.objects.DefaultExit&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj2 changed typeclass from evennia.objects.objects.DefaultObject &quot;</span>
<span class="s2">&quot;to evennia.objects.objects.DefaultExit.&quot;</span><span class="p">,</span>
<span class="n">cmdstring</span><span class="o">=</span><span class="s2">&quot;swap&quot;</span><span class="p">,</span> <span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;yes&quot;</span><span class="p">],</span>
<span class="n">cmdstring</span><span class="o">=</span><span class="s2">&quot;swap&quot;</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;yes&quot;</span><span class="p">],</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span> <span class="s2">&quot;/list Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;Core typeclasses&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
@ -1353,7 +1374,7 @@
<span class="s2">&quot;/reset/force Obj=evennia.objects.objects.DefaultObject&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj updated its existing typeclass (evennia.objects.objects.DefaultObject).</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;All object creation hooks were run. All old attributes where deleted before the swap.&quot;</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;yes&quot;</span><span class="p">]</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;yes&quot;</span><span class="p">],</span>
<span class="p">)</span>
<span class="kn">from</span> <span class="nn">evennia.prototypes.prototypes</span> <span class="kn">import</span> <span class="n">homogenize_prototype</span>
@ -1380,7 +1401,7 @@
<span class="s2">&quot;typeclasses.objects.Object.</span><span class="se">\n</span><span class="s2">Only the at_object_creation hook was run &quot;</span>
<span class="s2">&quot;(update mode). Attributes set before swap were not removed</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;(use `swap` or `type/reset` to clear all). Prototype &#39;replaced_obj&#39; was &quot;</span>
<span class="s2">&quot;successfully applied over the object type.&quot;</span>
<span class="s2">&quot;successfully applied over the object type.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj1</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="o">==</span> <span class="s2">&quot;protdesc&quot;</span></div>

View file

@ -61,15 +61,33 @@
<span class="sd"> create different types of communication channels.</span>
<span class="sd"> Class-level variables:</span>
<span class="sd"> - `send_to_online_only` (bool, default True) - if set, will only try to</span>
<span class="sd"> send to subscribers that are actually active. This is a useful optimization.</span>
<span class="sd"> - `log_file` (str, default `&quot;channel_{channelname}.log&quot;`). This is the</span>
<span class="sd"> log file to which the channel history will be saved. The `{channelname}` tag</span>
<span class="sd"> will be replaced by the key of the Channel. If an Attribute &#39;log_file&#39;</span>
<span class="sd"> is set, this will be used instead. If this is None and no Attribute is found,</span>
<span class="sd"> no history will be saved.</span>
<span class="sd"> - `channel_prefix_string` (str, default `&quot;[{channelname} ]&quot;`) - this is used</span>
<span class="sd"> as a simple template to get the channel prefix with `.channel_prefix()`.</span>
<span class="sd"> - `send_to_online_only` (bool, default True) - if set, will only try to</span>
<span class="sd"> send to subscribers that are actually active. This is a useful optimization.</span>
<span class="sd"> - `log_file` (str, default `&quot;channel_{channelname}.log&quot;`). This is the</span>
<span class="sd"> log file to which the channel history will be saved. The `{channelname}` tag</span>
<span class="sd"> will be replaced by the key of the Channel. If an Attribute &#39;log_file&#39;</span>
<span class="sd"> is set, this will be used instead. If this is None and no Attribute is found,</span>
<span class="sd"> no history will be saved.</span>
<span class="sd"> - `channel_prefix_string` (str, default `&quot;[{channelname} ]&quot;`) - this is used</span>
<span class="sd"> as a simple template to get the channel prefix with `.channel_prefix()`. It is used</span>
<span class="sd"> in front of every channel message; use `{channelmessage}` token to insert the</span>
<span class="sd"> name of the current channel. Set to `None` if you want no prefix (or want to</span>
<span class="sd"> handle it in a hook during message generation instead.</span>
<span class="sd"> - `channel_msg_nick_pattern`(str, default `&quot;{alias}\\s*?|{alias}\\s+?(?P&lt;arg1&gt;.+?)&quot;) -</span>
<span class="sd"> this is what used when a channel subscriber gets a channel nick assigned to this</span>
<span class="sd"> channel. The nickhandler uses the pattern to pick out this channel&#39;s name from user</span>
<span class="sd"> input. The `{alias}` token will get both the channel&#39;s key and any set/custom aliases</span>
<span class="sd"> per subscriber. You need to allow for an `&lt;arg1&gt;` regex group to catch any message</span>
<span class="sd"> that should be send to the channel. You usually don&#39;t need to change this pattern</span>
<span class="sd"> unless you are changing channel command-style entirely.</span>
<span class="sd"> - `channel_msg_nick_replacement` (str, default `&quot;channel {channelname} = $1&quot;` - this</span>
<span class="sd"> is used by the nickhandler to generate a replacement string once the nickhandler (using</span>
<span class="sd"> the `channel_msg_nick_pattern`) identifies that the channel should be addressed</span>
<span class="sd"> to send a message to it. The `&lt;arg1&gt;` regex pattern match from `channel_msg_nick_pattern`</span>
<span class="sd"> will end up at the `$1` position in the replacement. Together, this allows you do e.g.</span>
<span class="sd"> &#39;public Hello&#39; and have that become a mapping to `channel public = Hello`. By default,</span>
<span class="sd"> the account-level `channel` command is used. If you were to rename that command you must</span>
<span class="sd"> tweak the output to something like `yourchannelcommandname {channelname} = $1`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
@ -100,6 +118,9 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">basetype_setup</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">at_channel_creation</span><span class="p">()</span>
<span class="c1"># initialize Attribute/TagProperties</span>
<span class="bp">self</span><span class="o">.</span><span class="n">init_evennia_properties</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_createdict&quot;</span><span class="p">):</span>
<span class="c1"># this is only set if the channel was created</span>
<span class="c1"># with the utils.create.create_channel function.</span>

View file

@ -370,7 +370,7 @@
<span class="n">callback</span><span class="p">()</span>
<span class="n">seconds</span> <span class="o">=</span> <span class="n">real_seconds_until</span><span class="p">(</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">gametime</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">restart</span><span class="p">(</span><span class="n">interval</span><span class="o">=</span><span class="n">seconds</span><span class="p">)</span></div></div>
<span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="n">interval</span><span class="o">=</span><span class="n">seconds</span><span class="p">,</span> <span class="n">force_restart</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div></div>
</pre></div>
<div class="clearer"></div>

View file

@ -138,7 +138,7 @@
<span class="n">recog02</span> <span class="o">=</span> <span class="s2">&quot;Mr Receiver2&quot;</span>
<span class="n">recog10</span> <span class="o">=</span> <span class="s2">&quot;Mr Sender&quot;</span>
<span class="n">emote</span> <span class="o">=</span> <span class="s1">&#39;With a flair, /me looks at /first and /colliding sdesc-guy. She says &quot;This is a test.&quot;&#39;</span>
<span class="n">case_emote</span> <span class="o">=</span> <span class="s2">&quot;/me looks at /first, then /FIRST, /First and /Colliding twice.&quot;</span>
<span class="n">case_emote</span> <span class="o">=</span> <span class="s2">&quot;/Me looks at /first. Then, /me looks at /FIRST, /First and /Colliding twice.&quot;</span>
<div class="viewcode-block" id="TestRPSystem"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem">[docs]</a><span class="k">class</span> <span class="nc">TestRPSystem</span><span class="p">(</span><span class="n">BaseEvenniaTest</span><span class="p">):</span>
@ -155,41 +155,11 @@
<span class="n">rpsystem</span><span class="o">.</span><span class="n">ContribRPCharacter</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;Receiver2&quot;</span><span class="p">,</span> <span class="n">location</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">room</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestRPSystem.test_ordered_permutation_regex"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_ordered_permutation_regex">[docs]</a> <span class="k">def</span> <span class="nf">test_ordered_permutation_regex</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="n">rpsystem</span><span class="o">.</span><span class="n">ordered_permutation_regex</span><span class="p">(</span><span class="n">sdesc0</span><span class="p">),</span>
<span class="s2">&quot;/[0-9]*-*A</span><span class="se">\\</span><span class="s2"> nice</span><span class="se">\\</span><span class="s2"> sender</span><span class="se">\\</span><span class="s2"> of</span><span class="se">\\</span><span class="s2"> emotes(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*nice</span><span class="se">\\</span><span class="s2"> sender</span><span class="se">\\</span><span class="s2"> of</span><span class="se">\\</span><span class="s2"> emotes(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*A</span><span class="se">\\</span><span class="s2"> nice</span><span class="se">\\</span><span class="s2"> sender</span><span class="se">\\</span><span class="s2"> of(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*sender</span><span class="se">\\</span><span class="s2"> of</span><span class="se">\\</span><span class="s2"> emotes(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*nice</span><span class="se">\\</span><span class="s2"> sender</span><span class="se">\\</span><span class="s2"> of(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*A</span><span class="se">\\</span><span class="s2"> nice</span><span class="se">\\</span><span class="s2"> sender(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*nice</span><span class="se">\\</span><span class="s2"> sender(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*of</span><span class="se">\\</span><span class="s2"> emotes(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*sender</span><span class="se">\\</span><span class="s2"> of(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*A</span><span class="se">\\</span><span class="s2"> nice(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*emotes(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*sender(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*nice(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*of(?=</span><span class="se">\\</span><span class="s2">W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*A(?=</span><span class="se">\\</span><span class="s2">W|$)+&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestRPSystem.test_sdesc_handler"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_sdesc_handler">[docs]</a> <span class="k">def</span> <span class="nf">test_sdesc_handler</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">sdesc0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span> <span class="n">sdesc0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;This is {#324} ignored&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span> <span class="s2">&quot;This is 324 ignored&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;Testing three words&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">get_regex_tuple</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">pattern</span><span class="p">,</span>
<span class="s2">&quot;/[0-9]*-*Testing\ three\ words(?=\W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*Testing\ three(?=\W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*three\ words(?=\W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*Testing(?=\W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*three(?=\W|$)+|&quot;</span>
<span class="s2">&quot;/[0-9]*-*words(?=\W|$)+&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span> <span class="s2">&quot;This is 324 ignored&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestRPSystem.test_recog_handler"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_recog_handler">[docs]</a> <span class="k">def</span> <span class="nf">test_recog_handler</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">sdesc0</span><span class="p">)</span>
@ -198,12 +168,8 @@
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="p">,</span> <span class="n">recog02</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span><span class="p">),</span> <span class="n">recog01</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="p">),</span> <span class="n">recog02</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">get_regex_tuple</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">pattern</span><span class="p">,</span>
<span class="s2">&quot;/[0-9]*-*Mr</span><span class="se">\\</span><span class="s2"> Receiver(?=</span><span class="se">\\</span><span class="s2">W|$)+|/[0-9]*-*Receiver(?=</span><span class="se">\\</span><span class="s2">W|$)+|/[0-9]*-*Mr(?=</span><span class="se">\\</span><span class="s2">W|$)+&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span><span class="p">),</span> <span class="n">sdesc1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span> <span class="p">{</span><span class="s2">&quot;Mr Receiver2&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="p">})</span></div>
@ -240,6 +206,26 @@
<span class="n">result</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestRPSystem.test_get_sdesc"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_get_sdesc">[docs]</a> <span class="k">def</span> <span class="nf">test_get_sdesc</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">looker</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">speaker</span> <span class="c1"># Sender</span>
<span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span> <span class="c1"># Receiver1</span>
<span class="n">looker</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">sdesc0</span><span class="p">)</span> <span class="c1"># A nice sender of emotes</span>
<span class="n">target</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">sdesc1</span><span class="p">)</span> <span class="c1"># The first receiver of emotes.</span>
<span class="c1"># sdesc with no processing</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">looker</span><span class="o">.</span><span class="n">get_sdesc</span><span class="p">(</span><span class="n">target</span><span class="p">),</span> <span class="s2">&quot;The first receiver of emotes.&quot;</span><span class="p">)</span>
<span class="c1"># sdesc with processing</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="n">looker</span><span class="o">.</span><span class="n">get_sdesc</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">process</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="s2">&quot;|bThe first receiver of emotes.|n&quot;</span>
<span class="p">)</span>
<span class="n">looker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">recog01</span><span class="p">)</span> <span class="c1"># Mr Receiver</span>
<span class="c1"># recog with no processing</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">looker</span><span class="o">.</span><span class="n">get_sdesc</span><span class="p">(</span><span class="n">target</span><span class="p">),</span> <span class="s2">&quot;Mr Receiver&quot;</span><span class="p">)</span>
<span class="c1"># recog with processing</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">looker</span><span class="o">.</span><span class="n">get_sdesc</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">process</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="s2">&quot;|mMr Receiver|n&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestRPSystem.test_send_emote"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_send_emote">[docs]</a> <span class="k">def</span> <span class="nf">test_send_emote</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">speaker</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">speaker</span>
<span class="n">receiver1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span>
@ -254,18 +240,18 @@
<span class="n">rpsystem</span><span class="o">.</span><span class="n">send_emote</span><span class="p">(</span><span class="n">speaker</span><span class="p">,</span> <span class="n">receivers</span><span class="p">,</span> <span class="n">emote</span><span class="p">,</span> <span class="n">case_sensitive</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out0</span><span class="p">,</span>
<span class="s2">&quot;With a flair, |bSender|n looks at |bThe first receiver of emotes.|n &quot;</span>
<span class="s2">&quot;With a flair, |mSender|n looks at |bThe first receiver of emotes.|n &quot;</span>
<span class="s1">&#39;and |bAnother nice colliding sdesc-guy for tests|n. She says |w&quot;This is a test.&quot;|n&#39;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out1</span><span class="p">,</span>
<span class="s2">&quot;With a flair, |bA nice sender of emotes|n looks at |bReceiver1|n and &quot;</span>
<span class="s2">&quot;With a flair, |bA nice sender of emotes|n looks at |mReceiver1|n and &quot;</span>
<span class="s1">&#39;|bAnother nice colliding sdesc-guy for tests|n. She says |w&quot;This is a test.&quot;|n&#39;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out2</span><span class="p">,</span>
<span class="s2">&quot;With a flair, |bA nice sender of emotes|n looks at |bThe first &quot;</span>
<span class="s1">&#39;receiver of emotes.|n and |bReceiver2|n. She says |w&quot;This is a test.&quot;|n&#39;</span><span class="p">,</span>
<span class="s1">&#39;receiver of emotes.|n and |mReceiver2|n. She says |w&quot;This is a test.&quot;|n&#39;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestRPSystem.test_send_case_sensitive_emote"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_send_case_sensitive_emote">[docs]</a> <span class="k">def</span> <span class="nf">test_send_case_sensitive_emote</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -283,20 +269,21 @@
<span class="n">rpsystem</span><span class="o">.</span><span class="n">send_emote</span><span class="p">(</span><span class="n">speaker</span><span class="p">,</span> <span class="n">receivers</span><span class="p">,</span> <span class="n">case_emote</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out0</span><span class="p">,</span>
<span class="s2">&quot;|bSender|n looks at |bthe first receiver of emotes.|n, then &quot;</span>
<span class="s2">&quot;|bTHE FIRST RECEIVER OF EMOTES.|n, |bThe first receiver of emotes.|n and &quot;</span>
<span class="s2">&quot;|bAnother nice colliding sdesc-guy for tests|n twice.&quot;</span><span class="p">,</span>
<span class="s2">&quot;|mSender|n looks at |bthe first receiver of emotes.|n. Then, |mSender|n &quot;</span>
<span class="s2">&quot;looks at |bTHE FIRST RECEIVER OF EMOTES.|n, |bThe first receiver of emotes.|n &quot;</span>
<span class="s2">&quot;and |bAnother nice colliding sdesc-guy for tests|n twice.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out1</span><span class="p">,</span>
<span class="s2">&quot;|bA nice sender of emotes|n looks at |bReceiver1|n, then |bReceiver1|n, &quot;</span>
<span class="s2">&quot;|bReceiver1|n and |bAnother nice colliding sdesc-guy for tests|n twice.&quot;</span><span class="p">,</span>
<span class="s2">&quot;|bA nice sender of emotes|n looks at |mReceiver1|n. Then, &quot;</span>
<span class="s2">&quot;|ba nice sender of emotes|n looks at |mReceiver1|n, |mReceiver1|n &quot;</span>
<span class="s2">&quot;and |bAnother nice colliding sdesc-guy for tests|n twice.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out2</span><span class="p">,</span>
<span class="s2">&quot;|bA nice sender of emotes|n looks at |bthe first receiver of emotes.|n, &quot;</span>
<span class="s2">&quot;then |bTHE FIRST RECEIVER OF EMOTES.|n, |bThe first receiver of &quot;</span>
<span class="s2">&quot;emotes.|n and |bReceiver2|n twice.&quot;</span><span class="p">,</span>
<span class="s2">&quot;|bA nice sender of emotes|n looks at |bthe first receiver of emotes.|n. &quot;</span>
<span class="s2">&quot;Then, |ba nice sender of emotes|n looks at |bTHE FIRST RECEIVER OF EMOTES.|n, &quot;</span>
<span class="s2">&quot;|bThe first receiver of emotes.|n and |mReceiver2|n twice.&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestRPSystem.test_rpsearch"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_rpsearch">[docs]</a> <span class="k">def</span> <span class="nf">test_rpsearch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -305,19 +292,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">sdesc2</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">text</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;out0&quot;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s2">&quot;receiver of emotes&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s2">&quot;colliding&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestRPSystem.test_regex_tuple_from_key_alias"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_regex_tuple_from_key_alias">[docs]</a> <span class="k">def</span> <span class="nf">test_regex_tuple_from_key_alias</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;foo bar&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;this thing is a long thing&quot;</span><span class="p">)</span>
<span class="n">t0</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">rpsystem</span><span class="o">.</span><span class="n">regex_tuple_from_key_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="p">)</span>
<span class="n">t1</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">rpsystem</span><span class="o">.</span><span class="n">regex_tuple_from_key_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="p">)</span>
<span class="n">t2</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
<span class="c1"># print(f&quot;t1: {t1 - t0}, t2: {t2 - t1}&quot;)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertLess</span><span class="p">(</span><span class="n">t2</span> <span class="o">-</span> <span class="n">t1</span><span class="p">,</span> <span class="mi">10</span><span class="o">**-</span><span class="mi">4</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="p">(</span><span class="n">Anything</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">key</span><span class="p">))</span></div></div>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s2">&quot;colliding&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestRPSystemCommands"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystemCommands">[docs]</a><span class="k">class</span> <span class="nc">TestRPSystemCommands</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
@ -347,7 +322,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">rpsystem</span><span class="o">.</span><span class="n">CmdRecog</span><span class="p">(),</span>
<span class="s2">&quot;barfoo as friend&quot;</span><span class="p">,</span>
<span class="s2">&quot;Char will now remember BarFoo Character as friend.&quot;</span><span class="p">,</span>
<span class="s2">&quot;You will now remember BarFoo Character as friend.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">rpsystem</span><span class="o">.</span><span class="n">CmdRecog</span><span class="p">(),</span>
@ -358,7 +333,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">rpsystem</span><span class="o">.</span><span class="n">CmdRecog</span><span class="p">(),</span>
<span class="s2">&quot;friend&quot;</span><span class="p">,</span>
<span class="s2">&quot;Char will now know them only as &#39;BarFoo Character&#39;&quot;</span><span class="p">,</span>
<span class="s2">&quot;You will now know them only as &#39;BarFoo Character&#39;&quot;</span><span class="p">,</span>
<span class="n">cmdstring</span><span class="o">=</span><span class="s2">&quot;forget&quot;</span><span class="p">,</span>
<span class="p">)</span></div></div>
</pre></div>

View file

@ -363,7 +363,6 @@
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mult</span> <span class="o">=</span> <span class="mf">0.75</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_values</span><span class="p">(),</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">0.75</span><span class="p">,</span> <span class="mf">4.5</span><span class="p">))</span></div>
<div class="viewcode-block" id="TestTraitStatic.test_delete"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.traits.tests.html#evennia.contrib.rpg.traits.tests.TestTraitStatic.test_delete">[docs]</a> <span class="k">def</span> <span class="nf">test_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Deleting resets to default.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mult</span> <span class="o">=</span> <span class="mf">2.0</span>
@ -404,7 +403,14 @@
<span class="k">def</span> <span class="nf">_get_values</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get (base, mod, mult, value, min, max).&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">base</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mult</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">min</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">max</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">base</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mult</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">value</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">min</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">max</span><span class="p">,</span>
<span class="p">)</span>
<div class="viewcode-block" id="TestTraitCounter.test_init"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.traits.tests.html#evennia.contrib.rpg.traits.tests.TestTraitCounter.test_init">[docs]</a> <span class="k">def</span> <span class="nf">test_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
@ -676,7 +682,14 @@
<span class="k">def</span> <span class="nf">_get_values</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get (base, mod, mult, value, min, max).&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">base</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mult</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">min</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">max</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">base</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mult</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">value</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">min</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">max</span><span class="p">,</span>
<span class="p">)</span>
<div class="viewcode-block" id="TestTraitGauge.test_init"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.traits.tests.html#evennia.contrib.rpg.traits.tests.TestTraitGauge.test_init">[docs]</a> <span class="k">def</span> <span class="nf">test_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>

View file

@ -1190,7 +1190,7 @@
<div class="viewcode-block" id="StaticTrait"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.traits.traits.html#evennia.contrib.rpg.traits.traits.StaticTrait">[docs]</a><span class="k">class</span> <span class="nc">StaticTrait</span><span class="p">(</span><span class="n">Trait</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Static Trait. This is a single value with a modifier, </span>
<span class="sd"> Static Trait. This is a single value with a modifier,</span>
<span class="sd"> multiplier, and no concept of a &#39;current&#39; value or min/max etc.</span>
<span class="sd"> value = (base + mod) * mult</span>
@ -1203,7 +1203,9 @@
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">status</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{value:11}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">value</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">{name:12}</span><span class="s2"> </span><span class="si">{status}</span><span class="s2"> (</span><span class="si">{mod:+3}</span><span class="s2">) (* </span><span class="si">{mult:.2f}</span><span class="s2">)&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span> <span class="n">mult</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mult</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">{name:12}</span><span class="s2"> </span><span class="si">{status}</span><span class="s2"> (</span><span class="si">{mod:+3}</span><span class="s2">) (* </span><span class="si">{mult:.2f}</span><span class="s2">)&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span> <span class="n">mult</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mult</span>
<span class="p">)</span>
<span class="c1"># Helpers</span>
<span class="nd">@property</span>
@ -1231,7 +1233,7 @@
<span class="k">def</span> <span class="nf">mult</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The trait&#39;s multiplier.&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">&quot;mult&quot;</span><span class="p">]</span>
<span class="nd">@mult</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">mult</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">amount</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">):</span>
@ -1364,16 +1366,16 @@
<span class="n">now</span> <span class="o">=</span> <span class="n">time</span><span class="p">()</span>
<span class="n">tdiff</span> <span class="o">=</span> <span class="n">now</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">&quot;last_update&quot;</span><span class="p">]</span>
<span class="n">current</span> <span class="o">+=</span> <span class="n">rate</span> <span class="o">*</span> <span class="n">tdiff</span>
<span class="n">value</span> <span class="o">=</span> <span class="p">(</span><span class="n">current</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">current</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span>
<span class="c1"># we must make sure so we don&#39;t overstep our bounds</span>
<span class="c1"># even if .mod is included</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_passed_ratetarget</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
<span class="n">current</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">&quot;ratetarget&quot;</span><span class="p">]</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span>
<span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">&quot;ratetarget&quot;</span><span class="p">]</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_stop_timer</span><span class="p">()</span>
<span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_within_boundaries</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
<span class="n">current</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_enforce_boundaries</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span>
<span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_enforce_boundaries</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_stop_timer</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">&quot;last_update&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">now</span>
@ -1420,7 +1422,7 @@
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">mult</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">&quot;mult&quot;</span><span class="p">]</span>
<span class="nd">@mult</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">mult</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">amount</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">):</span>
@ -1613,7 +1615,9 @@
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">status</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{value:4}</span><span class="s2"> / </span><span class="si">{base:4}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">value</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">base</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">{name:12}</span><span class="s2"> </span><span class="si">{status}</span><span class="s2"> (</span><span class="si">{mod:+3}</span><span class="s2">) (* </span><span class="si">{mult:.2f}</span><span class="s2">)&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span> <span class="n">mult</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mult</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">{name:12}</span><span class="s2"> </span><span class="si">{status}</span><span class="s2"> (</span><span class="si">{mod:+3}</span><span class="s2">) (* </span><span class="si">{mult:.2f}</span><span class="s2">)&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span> <span class="n">mult</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mult</span>
<span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">base</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -1638,11 +1642,11 @@
<span class="k">if</span> <span class="n">value</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">min</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">min</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">&quot;mod&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">mult</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">&quot;mult&quot;</span><span class="p">]</span>
<span class="nd">@mult</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">mult</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">amount</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">):</span>
@ -1663,7 +1667,7 @@
<span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">&quot;min&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_keys</span><span class="p">[</span><span class="s2">&quot;min&quot;</span><span class="p">]</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">&quot;min&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">mult</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">&quot;min&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">mult</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">max</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -1686,7 +1690,7 @@
<span class="k">def</span> <span class="nf">current</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The `current` value of the gauge.&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_update_current</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_enforce_boundaries</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;current&quot;</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">mult</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_enforce_boundaries</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;current&quot;</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">mult</span><span class="p">))</span>
<span class="p">)</span>
<span class="nd">@current</span><span class="o">.</span><span class="n">setter</span>
@ -1697,7 +1701,7 @@
<span class="nd">@current</span><span class="o">.</span><span class="n">deleter</span>
<span class="k">def</span> <span class="nf">current</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s2">&quot;Resets current back to &#39;full&#39;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">&quot;current&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">mult</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">&quot;current&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">mult</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

View file

@ -54,9 +54,13 @@
<span class="c1"># since we use them (e.g. as command names).</span>
<span class="c1"># Lunr&#39;s default ignore-word list is found here:</span>
<span class="c1"># https://github.com/yeraydiazdiaz/lunr.py/blob/master/lunr/stop_word_filter.py</span>
<span class="n">_LUNR_STOP_WORD_FILTER_EXCEPTIONS</span> <span class="o">=</span> <span class="p">(</span>
<span class="p">[</span><span class="s2">&quot;about&quot;</span><span class="p">,</span> <span class="s2">&quot;might&quot;</span><span class="p">,</span> <span class="s2">&quot;get&quot;</span><span class="p">,</span> <span class="s2">&quot;who&quot;</span><span class="p">,</span> <span class="s2">&quot;say&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">settings</span><span class="o">.</span><span class="n">LUNR_STOP_WORD_FILTER_EXCEPTIONS</span>
<span class="p">)</span>
<span class="n">_LUNR_STOP_WORD_FILTER_EXCEPTIONS</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;about&quot;</span><span class="p">,</span>
<span class="s2">&quot;might&quot;</span><span class="p">,</span>
<span class="s2">&quot;get&quot;</span><span class="p">,</span>
<span class="s2">&quot;who&quot;</span><span class="p">,</span>
<span class="s2">&quot;say&quot;</span><span class="p">,</span>
<span class="p">]</span> <span class="o">+</span> <span class="n">settings</span><span class="o">.</span><span class="n">LUNR_STOP_WORD_FILTER_EXCEPTIONS</span>
<span class="n">_LUNR</span> <span class="o">=</span> <span class="kc">None</span>

View file

@ -515,6 +515,7 @@
<span class="n">category</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">accessing_obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tagkey</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">))</span></div>
<div class="viewcode-block" id="is_ooc"><a class="viewcode-back" href="../../../api/evennia.locks.lockfuncs.html#evennia.locks.lockfuncs.is_ooc">[docs]</a><span class="k">def</span> <span class="nf">is_ooc</span><span class="p">(</span><span class="n">accessing_obj</span><span class="p">,</span> <span class="n">accessed_obj</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Usage:</span>
@ -531,13 +532,14 @@
<span class="n">session</span> <span class="o">=</span> <span class="n">accessed_obj</span><span class="o">.</span><span class="n">session</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">account</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># note-this doesn&#39;t work well</span>
<span class="c1"># for high multisession mode. We may need</span>
<span class="c1"># to change to sessiondb to resolve this</span>
<span class="c1"># for high multisession mode. We may need</span>
<span class="c1"># to change to sessiondb to resolve this</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="ow">not</span> <span class="n">account</span><span class="o">.</span><span class="n">get_puppet</span><span class="p">(</span><span class="n">session</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
<span class="k">return</span> <span class="ow">not</span> <span class="n">session</span><span class="o">.</span><span class="n">get_puppet</span><span class="p">()</span></div>
<div class="viewcode-block" id="objtag"><a class="viewcode-back" href="../../../api/evennia.locks.lockfuncs.html#evennia.locks.lockfuncs.objtag">[docs]</a><span class="k">def</span> <span class="nf">objtag</span><span class="p">(</span><span class="n">accessing_obj</span><span class="p">,</span> <span class="n">accessed_obj</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Usage:</span>

View file

@ -1270,6 +1270,8 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">basetype_setup</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">at_object_creation</span><span class="p">()</span>
<span class="c1"># initialize Attribute/TagProperties</span>
<span class="bp">self</span><span class="o">.</span><span class="n">init_evennia_properties</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_createdict&quot;</span><span class="p">):</span>
<span class="c1"># this will only be set if the utils.create function</span>

View file

@ -570,8 +570,10 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># This will load the prototypes the first time they are searched</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="p">:</span>
<span class="n">loaded</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">load_module_prototypes</span><span class="p">,</span> <span class="s2">&quot;_LOADED&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">loaded</span><span class="p">:</span>
<span class="n">load_module_prototypes</span><span class="p">()</span>
<span class="nb">setattr</span><span class="p">(</span><span class="n">load_module_prototypes</span><span class="p">,</span> <span class="s2">&quot;_LOADED&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="c1"># prototype keys are always in lowecase</span>
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>

View file

@ -442,7 +442,10 @@
<span class="sd"> overriding the call (unused by default).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">basetype_setup</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">at_script_creation</span><span class="p">()</span>
<span class="c1"># initialize Attribute/TagProperties</span>
<span class="bp">self</span><span class="o">.</span><span class="n">init_evennia_properties</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_createdict&quot;</span><span class="p">):</span>
<span class="c1"># this will only be set if the utils.create_script</span>
@ -513,6 +516,14 @@
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">def</span> <span class="nf">basetype_setup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Changes fundamental aspects of the type. Usually changes are made in at_script creation</span>
<span class="sd"> instead.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span>
<span class="k">def</span> <span class="nf">at_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called when the Script is cached in the idmapper. This is usually more reliable</span>

View file

@ -627,9 +627,9 @@
<span class="bp">self</span><span class="o">.</span><span class="n">ticker_pool</span><span class="o">.</span><span class="n">stop</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span>
<span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ticker_storage</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="p">(</span><span class="n">store_key</span><span class="p">,</span> <span class="n">store_key</span><span class="p">)</span>
<span class="k">for</span> <span class="n">store_key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ticker_storage</span>
<span class="k">if</span> <span class="n">store_key</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="n">interval</span>
<span class="p">(</span><span class="n">store_key</span><span class="p">,</span> <span class="n">store_value</span><span class="p">)</span>
<span class="k">for</span> <span class="n">store_key</span><span class="p">,</span> <span class="n">store_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ticker_storage</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="n">store_key</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">!=</span> <span class="n">interval</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ticker_storage</span> <span class="o">=</span> <span class="p">{}</span>

View file

@ -2358,9 +2358,11 @@
<span class="k">if</span> <span class="n">option</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;makemessages&quot;</span><span class="p">,</span> <span class="s2">&quot;compilemessages&quot;</span><span class="p">):</span>
<span class="c1"># some commands don&#39;t require the presence of a game directory to work</span>
<span class="n">need_gamedir</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">if</span> <span class="n">CURRENT_DIR</span> <span class="o">!=</span> <span class="n">EVENNIA_LIB</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;You must stand in the evennia/evennia/ folder (where the &#39;locale/&#39; &quot;</span>
<span class="s2">&quot;folder is located) to run this command.&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">CURRENT_DIR</span> <span class="o">!=</span> <span class="n">EVENNIA_LIB</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span>
<span class="s2">&quot;You must stand in the evennia/evennia/ folder (where the &#39;locale/&#39; &quot;</span>
<span class="s2">&quot;folder is located) to run this command.&quot;</span>
<span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
<span class="k">if</span> <span class="n">option</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;shell&quot;</span><span class="p">,</span> <span class="s2">&quot;check&quot;</span><span class="p">,</span> <span class="s2">&quot;makemigrations&quot;</span><span class="p">,</span> <span class="s2">&quot;createsuperuser&quot;</span><span class="p">,</span> <span class="s2">&quot;shell_plus&quot;</span><span class="p">):</span>

View file

@ -465,6 +465,7 @@
<span class="n">logger</span><span class="o">.</span><span class="n">log_msg</span><span class="p">(</span><span class="s2">&quot;Evennia Server successfully restarted in &#39;reset&#39; mode.&quot;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;shutdown&quot;</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="kn">import</span> <span class="n">ObjectDB</span>
<span class="bp">self</span><span class="o">.</span><span class="n">at_server_cold_start</span><span class="p">()</span>
<span class="c1"># clear eventual lingering session storages</span>
<span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">clear_all_sessids</span><span class="p">()</span>

View file

@ -218,7 +218,7 @@
<span class="n">attrhandler_name</span> <span class="o">=</span> <span class="s2">&quot;attributes&quot;</span>
<div class="viewcode-block" id="AttributeProperty.__init__"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeProperty.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">strattr</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">lockstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<div class="viewcode-block" id="AttributeProperty.__init__"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeProperty.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">strattr</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">lockstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Initialize an Attribute as a property descriptor.</span>
@ -230,12 +230,12 @@
<span class="sd"> lockstring (str): This is not itself useful with the property, but only if</span>
<span class="sd"> using the full AttributeHandler.get(accessing_obj=...) to access the</span>
<span class="sd"> Attribute.</span>
<span class="sd"> autocreate (bool): If an un-found Attr should lead to auto-creating the</span>
<span class="sd"> Attribute (with the default value). If `False`, the property will</span>
<span class="sd"> return the default value until it has been explicitly set. This means</span>
<span class="sd"> less database accesses, but also means the property will have no</span>
<span class="sd"> corresponding Attribute if wanting to access it directly via the</span>
<span class="sd"> AttributeHandler (it will also not show up in `examine`).</span>
<span class="sd"> autocreate (bool): True by default; this means Evennia makes sure to create a new</span>
<span class="sd"> copy of the Attribute (with the default value) whenever a new object with this</span>
<span class="sd"> property is created. If `False`, no Attribute will be created until the property</span>
<span class="sd"> is explicitly assigned a value. This makes it more efficient while it retains</span>
<span class="sd"> its default (there&#39;s no db access), but without an actual Attribute generated,</span>
<span class="sd"> one cannot access it via .db, the AttributeHandler or see it with `examine`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_default</span> <span class="o">=</span> <span class="n">default</span>
@ -260,12 +260,14 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_default</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span>
<span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_default</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span>
<span class="n">strattr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_strattr</span><span class="p">,</span>
<span class="n">raise_exception</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_autocreate</span><span class="p">,</span>
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">at_get</span><span class="p">(</span>
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span>
<span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_default</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span>
<span class="n">strattr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_strattr</span><span class="p">,</span>
<span class="n">raise_exception</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_autocreate</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_autocreate</span><span class="p">:</span>
@ -273,8 +275,7 @@
<span class="bp">self</span><span class="o">.</span><span class="fm">__set__</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_default</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span>
<span class="k">finally</span><span class="p">:</span>
<span class="k">return</span> <span class="n">value</span>
<span class="k">return</span> <span class="n">value</span>
<span class="k">def</span> <span class="fm">__set__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -284,7 +285,7 @@
<span class="p">(</span>
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span>
<span class="n">value</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">at_set</span><span class="p">(</span><span class="n">value</span><span class="p">),</span>
<span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span>
<span class="n">lockstring</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_lockstring</span><span class="p">,</span>
<span class="n">strattr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_strattr</span><span class="p">,</span>
@ -293,10 +294,43 @@
<span class="k">def</span> <span class="fm">__delete__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called when running `del` on the field. Will remove/clear the Attribute.</span>
<span class="sd"> Called when running `del` on the property. Will remove/clear the Attribute. Note that</span>
<span class="sd"> the Attribute will be recreated next retrieval unless the AttributeProperty is also</span>
<span class="sd"> removed in code!</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">))</span></div>
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">)</span>
<div class="viewcode-block" id="AttributeProperty.at_set"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeProperty.at_set">[docs]</a> <span class="k">def</span> <span class="nf">at_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> The value to set is passed through the method. It can be used to customize/validate</span>
<span class="sd"> the input in a custom child class.</span>
<span class="sd"> Args:</span>
<span class="sd"> value (any): The value about to the stored in this Attribute.</span>
<span class="sd"> Returns:</span>
<span class="sd"> any: The value to store.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AttributeError: If the value is invalid to store.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">value</span></div>
<div class="viewcode-block" id="AttributeProperty.at_get"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeProperty.at_get">[docs]</a> <span class="k">def</span> <span class="nf">at_get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> The value returned from the Attribute is passed through this method. It can be used</span>
<span class="sd"> to react to the retrieval or modify the result in some way.</span>
<span class="sd"> Args:</span>
<span class="sd"> value (any): Value returned from the Attribute.</span>
<span class="sd"> Returns:</span>
<span class="sd"> any: The value to return to the caller.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">value</span></div></div>
<div class="viewcode-block" id="NAttributeProperty"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.NAttributeProperty">[docs]</a><span class="k">class</span> <span class="nc">NAttributeProperty</span><span class="p">(</span><span class="n">AttributeProperty</span><span class="p">):</span>

View file

@ -328,7 +328,7 @@
<span class="n">categories</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">category</span><span class="p">)</span> <span class="k">if</span> <span class="n">category</span> <span class="k">else</span> <span class="p">[]</span>
<span class="n">n_keys</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)</span>
<span class="n">n_categories</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">categories</span><span class="p">)</span>
<span class="n">unique_categories</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">categories</span><span class="p">))</span>
<span class="n">unique_categories</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">categories</span><span class="p">)</span>
<span class="n">n_unique_categories</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">unique_categories</span><span class="p">)</span>
<span class="n">dbmodel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">__dbclass__</span><span class="o">.</span><span class="vm">__name__</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>

View file

@ -81,11 +81,12 @@
<span class="kn">from</span> <span class="nn">evennia.typeclasses.attributes</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">Attribute</span><span class="p">,</span>
<span class="n">AttributeHandler</span><span class="p">,</span>
<span class="n">AttributeProperty</span><span class="p">,</span>
<span class="n">ModelAttributeBackend</span><span class="p">,</span>
<span class="n">InMemoryAttributeBackend</span><span class="p">,</span>
<span class="p">)</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.attributes</span> <span class="kn">import</span> <span class="n">DbHolder</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.tags</span> <span class="kn">import</span> <span class="n">Tag</span><span class="p">,</span> <span class="n">TagHandler</span><span class="p">,</span> <span class="n">AliasHandler</span><span class="p">,</span> <span class="n">PermissionHandler</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.tags</span> <span class="kn">import</span> <span class="n">Tag</span><span class="p">,</span> <span class="n">TagHandler</span><span class="p">,</span> <span class="n">AliasHandler</span><span class="p">,</span> <span class="n">PermissionHandler</span><span class="p">,</span> <span class="n">TagProperty</span>
<span class="kn">from</span> <span class="nn">evennia.utils.idmapper.models</span> <span class="kn">import</span> <span class="n">SharedMemoryModel</span><span class="p">,</span> <span class="n">SharedMemoryModelBase</span>
<span class="kn">from</span> <span class="nn">evennia.server.signals</span> <span class="kn">import</span> <span class="n">SIGNAL_TYPED_OBJECT_POST_RENAME</span>
@ -367,6 +368,18 @@
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">set_class_from_typeclass</span><span class="p">(</span><span class="n">typeclass_path</span><span class="o">=</span><span class="n">typeclass_path</span><span class="p">)</span></div>
<div class="viewcode-block" id="TypedObject.init_evennia_properties"><a class="viewcode-back" href="../../../api/evennia.typeclasses.models.html#evennia.typeclasses.models.TypedObject.init_evennia_properties">[docs]</a> <span class="k">def</span> <span class="nf">init_evennia_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called by creation methods; makes sure to initialize Attribute/TagProperties</span>
<span class="sd"> by fetching them once.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">for</span> <span class="n">propkey</span><span class="p">,</span> <span class="n">prop</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="p">,</span> <span class="p">(</span><span class="n">AttributeProperty</span><span class="p">,</span> <span class="n">TagProperty</span><span class="p">)):</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">propkey</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">log_trace</span><span class="p">()</span></div>
<span class="c1"># initialize all handlers in a lazy fashion</span>
<div class="viewcode-block" id="TypedObject.attributes"><a class="viewcode-back" href="../../../api/evennia.typeclasses.models.html#evennia.typeclasses.models.TypedObject.attributes">[docs]</a> <span class="nd">@lazy_property</span>
<span class="k">def</span> <span class="nf">attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

View file

@ -139,6 +139,72 @@
<span class="c1">#</span>
<div class="viewcode-block" id="TagProperty"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.TagProperty">[docs]</a><span class="k">class</span> <span class="nc">TagProperty</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Tag property descriptor. Allows for setting tags on an object as Django-like &#39;fields&#39;</span>
<span class="sd"> on the class level. Since Tags are almost always used for querying, Tags are always</span>
<span class="sd"> created/assigned along with the object. Make sure the property/tagname does not collide</span>
<span class="sd"> with an existing method/property on the class. If it does, you must use tags.add()</span>
<span class="sd"> instead.</span>
<span class="sd"> Example:</span>
<span class="sd"> ::</span>
<span class="sd"> class Character(DefaultCharacter):</span>
<span class="sd"> mytag = TagProperty() # category=None</span>
<span class="sd"> mytag2 = TagProperty(category=&quot;tagcategory&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">taghandler_name</span> <span class="o">=</span> <span class="s2">&quot;tags&quot;</span>
<div class="viewcode-block" id="TagProperty.__init__"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.TagProperty.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_category</span> <span class="o">=</span> <span class="n">category</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">=</span> <span class="n">data</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_key</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span></div>
<span class="k">def</span> <span class="nf">__set_name__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called when descriptor is first assigned to the class (not the instance!).</span>
<span class="sd"> It is called with the name of the field.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_key</span> <span class="o">=</span> <span class="n">name</span>
<span class="k">def</span> <span class="fm">__get__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">,</span> <span class="n">owner</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called when accessing the tag as a property on the instance.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">taghandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span>
<span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="fm">__set__</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">)</span>
<span class="k">def</span> <span class="fm">__set__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">,</span> <span class="n">category</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Assign a new category to the tag. It&#39;s not possible to set &#39;data&#39; this way.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_category</span> <span class="o">=</span> <span class="n">category</span>
<span class="p">(</span>
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">taghandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_data</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">def</span> <span class="fm">__delete__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called when running `del` on the property. Will disconnect the object from</span>
<span class="sd"> the Tag. Note that the tag will be readded on next fetch unless the</span>
<span class="sd"> TagProperty is also removed in code!</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">taghandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">)</span></div>
<div class="viewcode-block" id="TagHandler"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.TagHandler">[docs]</a><span class="k">class</span> <span class="nc">TagHandler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Generic tag-handler. Accessed via TypedObject.tags.</span>
@ -403,7 +469,15 @@
<span class="k">return</span> <span class="n">ret</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">ret</span></div>
<div class="viewcode-block" id="TagHandler.get"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.TagHandler.get">[docs]</a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">return_tagobj</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<div class="viewcode-block" id="TagHandler.get"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.TagHandler.get">[docs]</a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">return_tagobj</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">return_list</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">raise_exception</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get the tag for the given key, category or combination of the two.</span>
@ -418,6 +492,8 @@
<span class="sd"> instead of a string representation of the Tag.</span>
<span class="sd"> return_list (bool, optional): Always return a list, regardless</span>
<span class="sd"> of number of matches.</span>
<span class="sd"> raise_exception (bool, optional): Raise AttributeError if no matches</span>
<span class="sd"> are found.</span>
<span class="sd"> Returns:</span>
<span class="sd"> tags (list): The matches, either string</span>
@ -425,6 +501,9 @@
<span class="sd"> depending on `return_tagobj`. If &#39;default&#39; is set, this</span>
<span class="sd"> will be a list with the default value as its only element.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AttributeError: If finding no matches and `raise_exception` is True.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">ret</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">keystr</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">key</span><span class="p">):</span>
@ -435,9 +514,14 @@
<span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_getcache</span><span class="p">(</span><span class="n">keystr</span><span class="p">,</span> <span class="n">category</span><span class="p">)</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">return_list</span><span class="p">:</span>
<span class="k">return</span> <span class="n">ret</span> <span class="k">if</span> <span class="n">ret</span> <span class="k">else</span> <span class="p">[</span><span class="n">default</span><span class="p">]</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
<span class="k">return</span> <span class="n">ret</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="p">(</span><span class="n">ret</span> <span class="k">if</span> <span class="n">ret</span> <span class="k">else</span> <span class="n">default</span><span class="p">)</span></div>
<span class="k">if</span> <span class="ow">not</span> <span class="n">ret</span><span class="p">:</span>
<span class="k">if</span> <span class="n">raise_exception</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No tags found matching input </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">category</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">return_list</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[</span><span class="n">default</span><span class="p">]</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">default</span>
<span class="k">return</span> <span class="n">ret</span> <span class="k">if</span> <span class="n">return_list</span> <span class="k">else</span> <span class="p">(</span><span class="n">ret</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">ret</span><span class="p">)</span></div>
<div class="viewcode-block" id="TagHandler.remove"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.TagHandler.remove">[docs]</a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -563,6 +647,22 @@
<span class="k">return</span> <span class="s2">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">all</span><span class="p">())</span></div>
<div class="viewcode-block" id="AliasProperty"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.AliasProperty">[docs]</a><span class="k">class</span> <span class="nc">AliasProperty</span><span class="p">(</span><span class="n">TagProperty</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Allows for setting aliases like Django fields:</span>
<span class="sd"> ::</span>
<span class="sd"> class Character(DefaultCharacter):</span>
<span class="sd"> # note that every character will get the alias bob. Make sure</span>
<span class="sd"> # the alias property does not collide with an existing method</span>
<span class="sd"> # or property on the class.</span>
<span class="sd"> bob = AliasProperty()</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">taghandler_name</span> <span class="o">=</span> <span class="s2">&quot;aliases&quot;</span></div>
<div class="viewcode-block" id="AliasHandler"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.AliasHandler">[docs]</a><span class="k">class</span> <span class="nc">AliasHandler</span><span class="p">(</span><span class="n">TagHandler</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A handler for the Alias Tag type.</span>
@ -572,6 +672,21 @@
<span class="n">_tagtype</span> <span class="o">=</span> <span class="s2">&quot;alias&quot;</span></div>
<div class="viewcode-block" id="PermissionProperty"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.PermissionProperty">[docs]</a><span class="k">class</span> <span class="nc">PermissionProperty</span><span class="p">(</span><span class="n">TagProperty</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Allows for setting permissions like Django fields:</span>
<span class="sd"> ::</span>
<span class="sd"> class Character(DefaultCharacter):</span>
<span class="sd"> # note that every character will get this permission! Make</span>
<span class="sd"> # sure it doesn&#39;t collide with an existing method or property.</span>
<span class="sd"> myperm = PermissionProperty()</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">taghandler_name</span> <span class="o">=</span> <span class="s2">&quot;permissions&quot;</span></div>
<div class="viewcode-block" id="PermissionHandler"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.PermissionHandler">[docs]</a><span class="k">class</span> <span class="nc">PermissionHandler</span><span class="p">(</span><span class="n">TagHandler</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A handler for the Permission Tag type.</span>

View file

@ -54,6 +54,7 @@
<span class="kn">from</span> <span class="nn">pickle</span> <span class="kn">import</span> <span class="n">dumps</span>
<span class="kn">from</span> <span class="nn">django.db.utils</span> <span class="kn">import</span> <span class="n">OperationalError</span><span class="p">,</span> <span class="n">ProgrammingError</span>
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">callables_from_module</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
@ -209,7 +210,6 @@
<span class="c1"># store a hash representation of the setup</span>
<span class="n">script</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;_global_script_settings&quot;</span><span class="p">,</span> <span class="n">compare_hash</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;settings_hash&quot;</span><span class="p">)</span>
<span class="n">script</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="k">return</span> <span class="n">script</span>
@ -225,9 +225,16 @@
<span class="c1"># populate self.typeclass_storage</span>
<span class="bp">self</span><span class="o">.</span><span class="n">load_data</span><span class="p">()</span>
<span class="c1"># start registered scripts</span>
<span class="c1"># make sure settings-defined scripts are loaded</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">loaded_data</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_load_script</span><span class="p">(</span><span class="n">key</span><span class="p">)</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">_load_script</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="c1"># start all global scripts</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">script</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_scripts</span><span class="p">():</span>
<span class="n">script</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="k">except</span> <span class="p">(</span><span class="n">OperationalError</span><span class="p">,</span> <span class="n">ProgrammingError</span><span class="p">):</span>
<span class="c1"># this can happen if db is not loaded yet (such as when building docs)</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="GlobalScriptContainer.load_data"><a class="viewcode-back" href="../../../api/evennia.utils.containers.html#evennia.utils.containers.GlobalScriptContainer.load_data">[docs]</a> <span class="k">def</span> <span class="nf">load_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>

View file

@ -65,7 +65,7 @@
<span class="kn">from</span> <span class="nn">collections.abc</span> <span class="kn">import</span> <span class="n">MutableSequence</span><span class="p">,</span> <span class="n">MutableSet</span><span class="p">,</span> <span class="n">MutableMapping</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">pickle</span> <span class="kn">import</span> <span class="n">dumps</span><span class="p">,</span> <span class="n">loads</span>
<span class="kn">from</span> <span class="nn">pickle</span> <span class="kn">import</span> <span class="n">dumps</span><span class="p">,</span> <span class="n">loads</span><span class="p">,</span> <span class="n">UnpicklingError</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">pickle</span> <span class="kn">import</span> <span class="n">dumps</span><span class="p">,</span> <span class="n">loads</span>
<span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="kn">import</span> <span class="n">ObjectDoesNotExist</span>
@ -281,6 +281,9 @@
<span class="k">def</span> <span class="fm">__gt__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">&gt;</span> <span class="n">other</span>
<span class="k">def</span> <span class="fm">__or__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">|</span> <span class="n">other</span>
<span class="nd">@_save</span>
<span class="k">def</span> <span class="fm">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="fm">__setitem__</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_mutables</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
@ -492,7 +495,9 @@
<span class="k">elif</span> <span class="n">tname</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;_SaverOrderedDict&quot;</span><span class="p">,</span> <span class="s2">&quot;OrderedDict&quot;</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OrderedDict</span><span class="p">([(</span><span class="n">_iter</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">_iter</span><span class="p">(</span><span class="n">val</span><span class="p">))</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">items</span><span class="p">()])</span>
<span class="k">elif</span> <span class="n">tname</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;_SaverDefaultDict&quot;</span><span class="p">,</span> <span class="s2">&quot;defaultdict&quot;</span><span class="p">):</span>
<span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span> <span class="p">{</span><span class="n">_iter</span><span class="p">(</span><span class="n">key</span><span class="p">):</span> <span class="n">_iter</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">items</span><span class="p">()})</span>
<span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span>
<span class="n">obj</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span> <span class="p">{</span><span class="n">_iter</span><span class="p">(</span><span class="n">key</span><span class="p">):</span> <span class="n">_iter</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">tname</span> <span class="ow">in</span> <span class="n">_DESERIALIZE_MAPPING</span><span class="p">:</span>
<span class="k">return</span> <span class="n">_DESERIALIZE_MAPPING</span><span class="p">[</span><span class="n">tname</span><span class="p">](</span><span class="n">_iter</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">obj</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
@ -644,7 +649,9 @@
<span class="k">def</span> <span class="nf">process_item</span><span class="p">(</span><span class="n">item</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Recursive processor and identification of data&quot;&quot;&quot;</span>
<span class="n">dtype</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">SafeString</span><span class="p">):</span>
<span class="k">return</span> <span class="n">item</span>
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">tuple</span><span class="p">:</span>
@ -654,7 +661,10 @@
<span class="k">elif</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">_SaverDict</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">dict</span><span class="p">((</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">))</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
<span class="k">elif</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="n">defaultdict</span><span class="p">,</span> <span class="n">_SaverDefaultDict</span><span class="p">):</span>
<span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span> <span class="p">((</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">))</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="o">.</span><span class="n">items</span><span class="p">()))</span>
<span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span>
<span class="n">item</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span>
<span class="p">((</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">))</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="o">.</span><span class="n">items</span><span class="p">()),</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">set</span><span class="p">,</span> <span class="n">_SaverSet</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">set</span><span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="n">OrderedDict</span><span class="p">,</span> <span class="n">_SaverOrderedDict</span><span class="p">):</span>
@ -662,7 +672,20 @@
<span class="k">elif</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="n">deque</span><span class="p">,</span> <span class="n">_SaverDeque</span><span class="p">):</span>
<span class="k">return</span> <span class="n">deque</span><span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s2">&quot;__iter__&quot;</span><span class="p">):</span>
<span class="c1"># not one of the base types</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s2">&quot;__serialize_dbobjs__&quot;</span><span class="p">):</span>
<span class="c1"># Allows custom serialization of any dbobjects embedded in</span>
<span class="c1"># the item that Evennia will otherwise not find (these would</span>
<span class="c1"># otherwise lead to an error). Use the dbserialize helper from</span>
<span class="c1"># this method.</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">item</span><span class="o">.</span><span class="n">__serialize_dbobjs__</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">TypeError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="c1"># we catch typerrors so we can handle both classes (requiring</span>
<span class="c1"># classmethods) and instances</span>
<span class="k">pass</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s2">&quot;__iter__&quot;</span><span class="p">):</span>
<span class="c1"># we try to conserve the iterable class, if not convert to list</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">item</span><span class="o">.</span><span class="vm">__class__</span><span class="p">([</span><span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">])</span>
@ -720,7 +743,10 @@
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">dict</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">dict</span><span class="p">((</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">))</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="n">defaultdict</span><span class="p">:</span>
<span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span> <span class="p">((</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">))</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="o">.</span><span class="n">items</span><span class="p">()))</span>
<span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span>
<span class="n">item</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span>
<span class="p">((</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">))</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="o">.</span><span class="n">items</span><span class="p">()),</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">set</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">set</span><span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="n">OrderedDict</span><span class="p">:</span>
@ -734,6 +760,22 @@
<span class="k">return</span> <span class="n">item</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">)</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[</span><span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s2">&quot;__deserialize_dbobjs__&quot;</span><span class="p">):</span>
<span class="c1"># this allows the object to custom-deserialize any embedded dbobjs</span>
<span class="c1"># that we previously serialized with __serialize_dbobjs__.</span>
<span class="c1"># use the dbunserialize helper in this module.</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">item</span><span class="o">.</span><span class="n">__deserialize_dbobjs__</span><span class="p">()</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">TypeError</span><span class="p">,</span> <span class="n">UnpicklingError</span><span class="p">):</span>
<span class="c1"># handle recoveries both of classes (requiring classmethods</span>
<span class="c1"># or instances. Unpickling errors can happen when re-loading the</span>
<span class="c1"># data from cache (because the hidden entity was already</span>
<span class="c1"># deserialized and stored back on the object, unpickling it</span>
<span class="c1"># again fails). TODO: Maybe one could avoid this retry in a</span>
<span class="c1"># more graceful way?</span>
<span class="k">pass</span>
<span class="k">return</span> <span class="n">item</span>
<span class="k">def</span> <span class="nf">process_tree</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">parent</span><span class="p">):</span>

View file

@ -316,12 +316,13 @@
<span class="kn">from</span> <span class="nn">ast</span> <span class="kn">import</span> <span class="n">literal_eval</span>
<span class="kn">from</span> <span class="nn">fnmatch</span> <span class="kn">import</span> <span class="n">fnmatch</span>
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">ceil</span>
<span class="kn">from</span> <span class="nn">inspect</span> <span class="kn">import</span> <span class="n">isfunction</span><span class="p">,</span> <span class="n">getargspec</span>
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">Command</span><span class="p">,</span> <span class="n">CmdSet</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
<span class="kn">from</span> <span class="nn">evennia.utils.evtable</span> <span class="kn">import</span> <span class="n">EvTable</span>
<span class="kn">from</span> <span class="nn">evennia.utils.evtable</span> <span class="kn">import</span> <span class="n">EvTable</span><span class="p">,</span> <span class="n">EvColumn</span>
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">strip_ansi</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">mod_import</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">pad</span><span class="p">,</span> <span class="n">to_str</span><span class="p">,</span> <span class="n">m_len</span><span class="p">,</span> <span class="n">is_iter</span><span class="p">,</span> <span class="n">dedent</span><span class="p">,</span> <span class="n">crop</span>
<span class="kn">from</span> <span class="nn">evennia.commands</span> <span class="kn">import</span> <span class="n">cmdhandler</span>
@ -1252,7 +1253,6 @@
<span class="sd"> Args:</span>
<span class="sd"> optionlist (list): List of (key, description) tuples for every</span>
<span class="sd"> option related to this node.</span>
<span class="sd"> caller (Object, Account or None, optional): The caller of the node.</span>
<span class="sd"> Returns:</span>
<span class="sd"> options (str): The formatted option display.</span>
@ -1271,7 +1271,7 @@
<span class="n">table</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">desc</span> <span class="ow">in</span> <span class="n">optionlist</span><span class="p">:</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">or</span> <span class="n">desc</span><span class="p">:</span>
<span class="n">desc_string</span> <span class="o">=</span> <span class="s2">&quot;: </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">desc</span> <span class="k">if</span> <span class="n">desc</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="n">desc_string</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;: </span><span class="si">{</span><span class="n">desc</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">desc</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="n">table_width_max</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span>
<span class="n">table_width_max</span><span class="p">,</span>
<span class="nb">max</span><span class="p">(</span><span class="n">m_len</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">key</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">))</span>
@ -1281,42 +1281,31 @@
<span class="n">raw_key</span> <span class="o">=</span> <span class="n">strip_ansi</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="k">if</span> <span class="n">raw_key</span> <span class="o">!=</span> <span class="n">key</span><span class="p">:</span>
<span class="c1"># already decorations in key definition</span>
<span class="n">table</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; |lc</span><span class="si">%s</span><span class="s2">|lt</span><span class="si">%s</span><span class="s2">|le</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">raw_key</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">desc_string</span><span class="p">))</span>
<span class="n">table</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot; |lc</span><span class="si">{</span><span class="n">raw_key</span><span class="si">}</span><span class="s2">|lt</span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">|le</span><span class="si">{</span><span class="n">desc_string</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># add a default white color to key</span>
<span class="n">table</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; |lc</span><span class="si">%s</span><span class="s2">|lt|w</span><span class="si">%s</span><span class="s2">|n|le</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">raw_key</span><span class="p">,</span> <span class="n">raw_key</span><span class="p">,</span> <span class="n">desc_string</span><span class="p">))</span>
<span class="n">ncols</span> <span class="o">=</span> <span class="n">_MAX_TEXT_WIDTH</span> <span class="o">//</span> <span class="n">table_width_max</span> <span class="c1"># number of ncols</span>
<span class="n">table</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot; |lc</span><span class="si">{</span><span class="n">raw_key</span><span class="si">}</span><span class="s2">|lt|w</span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">|n|le</span><span class="si">{</span><span class="n">desc_string</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">ncols</span> <span class="o">=</span> <span class="n">_MAX_TEXT_WIDTH</span> <span class="o">//</span> <span class="n">table_width_max</span> <span class="c1"># number of columns</span>
<span class="k">if</span> <span class="n">ncols</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="c1"># no visible option at all</span>
<span class="c1"># no visible options at all</span>
<span class="k">return</span> <span class="s2">&quot;&quot;</span>
<span class="n">ncols</span> <span class="o">=</span> <span class="n">ncols</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">ncols</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">ncols</span>
<span class="c1"># get the amount of rows needed (start with 4 rows)</span>
<span class="n">nrows</span> <span class="o">=</span> <span class="mi">4</span>
<span class="k">while</span> <span class="n">nrows</span> <span class="o">*</span> <span class="n">ncols</span> <span class="o">&lt;</span> <span class="n">nlist</span><span class="p">:</span>
<span class="n">nrows</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">ncols</span> <span class="o">=</span> <span class="n">nlist</span> <span class="o">//</span> <span class="n">nrows</span> <span class="c1"># number of full columns</span>
<span class="n">nlastcol</span> <span class="o">=</span> <span class="n">nlist</span> <span class="o">%</span> <span class="n">nrows</span> <span class="c1"># number of elements in last column</span>
<span class="n">ncols</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">ncols</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">ncols</span>
<span class="c1"># get the final column count</span>
<span class="n">ncols</span> <span class="o">=</span> <span class="n">ncols</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">nlastcol</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">ncols</span>
<span class="k">if</span> <span class="n">ncols</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="c1"># only extend if longer than one column</span>
<span class="n">table</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="s2">&quot; &quot;</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="n">nrows</span> <span class="o">-</span> <span class="n">nlastcol</span><span class="p">)])</span>
<span class="c1"># minimum number of rows in a column</span>
<span class="n">min_rows</span> <span class="o">=</span> <span class="mi">4</span>
<span class="c1"># build the actual table grid</span>
<span class="n">table</span> <span class="o">=</span> <span class="p">[</span><span class="n">table</span><span class="p">[</span><span class="n">icol</span> <span class="o">*</span> <span class="n">nrows</span> <span class="p">:</span> <span class="p">(</span><span class="n">icol</span> <span class="o">*</span> <span class="n">nrows</span><span class="p">)</span> <span class="o">+</span> <span class="n">nrows</span><span class="p">]</span> <span class="k">for</span> <span class="n">icol</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">ncols</span><span class="p">)]</span>
<span class="c1"># split the items into columns</span>
<span class="n">split</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">min_rows</span><span class="p">,</span> <span class="n">ceil</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="o">/</span> <span class="n">ncols</span><span class="p">))</span>
<span class="n">max_end</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
<span class="n">cols_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">icol</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ncols</span><span class="p">):</span>
<span class="n">start</span> <span class="o">=</span> <span class="n">icol</span> <span class="o">*</span> <span class="n">split</span>
<span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">split</span><span class="p">,</span> <span class="n">max_end</span><span class="p">)</span>
<span class="n">cols_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">EvColumn</span><span class="p">(</span><span class="o">*</span><span class="n">table</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]))</span>
<span class="c1"># adjust the width of each column</span>
<span class="k">for</span> <span class="n">icol</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">table</span><span class="p">)):</span>
<span class="n">col_width</span> <span class="o">=</span> <span class="p">(</span>
<span class="nb">max</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">m_len</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">part</span><span class="o">.</span><span class="n">split</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="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">table</span><span class="p">[</span><span class="n">icol</span><span class="p">])</span> <span class="o">+</span> <span class="n">colsep</span>
<span class="p">)</span>
<span class="n">table</span><span class="p">[</span><span class="n">icol</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">pad</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">col_width</span> <span class="o">+</span> <span class="n">colsep</span><span class="p">,</span> <span class="n">align</span><span class="o">=</span><span class="s2">&quot;l&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">table</span><span class="p">[</span><span class="n">icol</span><span class="p">]]</span>
<span class="c1"># format the table into columns</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">EvTable</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">border</span><span class="o">=</span><span class="s2">&quot;none&quot;</span><span class="p">))</span></div>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">EvTable</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="n">cols_list</span><span class="p">,</span> <span class="n">border</span><span class="o">=</span><span class="s2">&quot;none&quot;</span><span class="p">))</span></div>
<div class="viewcode-block" id="EvMenu.node_formatter"><a class="viewcode-back" href="../../../api/evennia.utils.evmenu.html#evennia.utils.evmenu.EvMenu.node_formatter">[docs]</a> <span class="k">def</span> <span class="nf">node_formatter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nodetext</span><span class="p">,</span> <span class="n">optionstext</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>

View file

@ -64,7 +64,7 @@
<span class="sd"> # use underscore to NOT make the function available as a callable</span>
<span class="sd">def funcname(*args, **kwargs):</span>
<span class="sd"> # this can be accecssed as $funcname(*args, **kwargs)</span>
<span class="sd"> # this can be accessed as $funcname(*args, **kwargs)</span>
<span class="sd"> # it must always accept *args and **kwargs.</span>
<span class="sd"> ...</span>
<span class="sd"> return something</span>
@ -73,7 +73,7 @@
<span class="sd">Usage:</span>
<span class="sd">```python</span>
<span class="sd">from evennia.utils.funcparser</span>
<span class="sd">from evennia.utils.funcparser import FuncParser</span>
<span class="sd">parser = FuncParser(&quot;path.to.module_with_callables&quot;)</span>
<span class="sd">result = parser.parse(&quot;String with $funcname() in it&quot;)</span>
@ -126,8 +126,8 @@
<span class="c1"># state storage</span>
<span class="n">fullstr</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">infuncstr</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">single_quoted</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">double_quoted</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">single_quoted</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">double_quoted</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">current_kwarg</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">open_lparens</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">open_lsquate</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span>
@ -360,8 +360,8 @@
<span class="c1"># parsing state</span>
<span class="n">callstack</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">single_quoted</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">double_quoted</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">single_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">double_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">open_lparens</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># open (</span>
<span class="n">open_lsquare</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># open [</span>
<span class="n">open_lcurly</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># open {</span>
@ -372,6 +372,7 @@
<span class="n">curr_func</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">fullstr</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="c1"># final string</span>
<span class="n">infuncstr</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="c1"># string parts inside the current level of $funcdef (including $)</span>
<span class="n">literal_infuncstr</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">string</span><span class="p">:</span>
@ -415,12 +416,13 @@
<span class="n">curr_func</span><span class="o">.</span><span class="n">open_lcurly</span> <span class="o">=</span> <span class="n">open_lcurly</span>
<span class="n">current_kwarg</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">infuncstr</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">single_quoted</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">double_quoted</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">single_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">double_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">open_lparens</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">open_lsquare</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">open_lcurly</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">exec_return</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">literal_infuncstr</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">callstack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr_func</span><span class="p">)</span>
<span class="c1"># start a new func</span>
@ -443,19 +445,41 @@
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="nb">str</span><span class="p">(</span><span class="n">exec_return</span><span class="p">)</span>
<span class="n">exec_return</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">:</span> <span class="c1"># note that this is the same as &quot;\&#39;&quot;</span>
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s2">&quot;&#39;&quot;</span> <span class="ow">and</span> <span class="n">double_quoted</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span> <span class="c1"># note that this is the same as &quot;\&#39;&quot;</span>
<span class="c1"># a single quote - flip status</span>
<span class="n">single_quoted</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">single_quoted</span>
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="n">char</span>
<span class="k">if</span> <span class="n">single_quoted</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
<span class="n">single_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">elif</span> <span class="n">single_quoted</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">prefix</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">single_quoted</span><span class="p">]</span>
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">prefix</span> <span class="o">+</span> <span class="n">infuncstr</span><span class="p">[</span><span class="n">single_quoted</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:]</span>
<span class="n">single_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="n">char</span>
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">single_quoted</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">infuncstr</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
<span class="n">literal_infuncstr</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">:</span> <span class="c1"># note that this is the same as &#39;\&quot;&#39;</span>
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s1">&#39;&quot;&#39;</span> <span class="ow">and</span> <span class="n">single_quoted</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span> <span class="c1"># note that this is the same as &#39;\&quot;&#39;</span>
<span class="c1"># a double quote = flip status</span>
<span class="n">double_quoted</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">double_quoted</span>
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="n">char</span>
<span class="k">if</span> <span class="n">double_quoted</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
<span class="n">double_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">elif</span> <span class="n">double_quoted</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">prefix</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">double_quoted</span><span class="p">]</span>
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">prefix</span> <span class="o">+</span> <span class="n">infuncstr</span><span class="p">[</span><span class="n">double_quoted</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:]</span>
<span class="n">double_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="n">char</span>
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">double_quoted</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">infuncstr</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
<span class="n">literal_infuncstr</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="n">double_quoted</span> <span class="ow">or</span> <span class="n">single_quoted</span><span class="p">:</span>
<span class="k">if</span> <span class="n">double_quoted</span> <span class="o">&gt;=</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">single_quoted</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
<span class="c1"># inside a string definition - this escapes everything else</span>
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="n">char</span>
<span class="k">continue</span>
@ -519,12 +543,15 @@
<span class="k">else</span><span class="p">:</span>
<span class="n">curr_func</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exec_return</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">literal_infuncstr</span><span class="p">:</span>
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="c1"># store a string instead</span>
<span class="k">if</span> <span class="n">current_kwarg</span><span class="p">:</span>
<span class="n">curr_func</span><span class="o">.</span><span class="n">kwargs</span><span class="p">[</span><span class="n">current_kwarg</span><span class="p">]</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
<span class="n">curr_func</span><span class="o">.</span><span class="n">kwargs</span><span class="p">[</span><span class="n">current_kwarg</span><span class="p">]</span> <span class="o">=</span> <span class="n">infuncstr</span>
<span class="k">elif</span> <span class="n">literal_infuncstr</span> <span class="ow">or</span> <span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
<span class="c1"># don&#39;t store the empty string</span>
<span class="n">curr_func</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
<span class="n">curr_func</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">infuncstr</span><span class="p">)</span>
<span class="c1"># note that at this point either exec_return or infuncstr will</span>
<span class="c1"># be empty. We need to store the full string so we can print</span>
@ -535,6 +562,7 @@
<span class="n">current_kwarg</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">exec_return</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">infuncstr</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">literal_infuncstr</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s2">&quot;)&quot;</span><span class="p">:</span>
<span class="c1"># closing the function list - this means we have a</span>
@ -578,6 +606,7 @@
<span class="k">if</span> <span class="n">return_str</span><span class="p">:</span>
<span class="n">exec_return</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">infuncstr</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">literal_infuncstr</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">continue</span>
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="n">char</span>
@ -1139,7 +1168,7 @@
<span class="sd"> Examples:</span>
<span class="sd"> This can be used by the say or emote hooks to pass actor stance</span>
<span class="sd"> strings. This should usually be combined with the $inflect() callable.</span>
<span class="sd"> strings. This should usually be combined with the $conj() callable.</span>
<span class="sd"> - `With a grin, $you() $conj(jump) at $you(tommy).`</span>
@ -1223,7 +1252,7 @@
<div class="viewcode-block" id="funcparser_callable_pronoun"><a class="viewcode-back" href="../../../api/evennia.utils.funcparser.html#evennia.utils.funcparser.funcparser_callable_pronoun">[docs]</a><span class="k">def</span> <span class="nf">funcparser_callable_pronoun</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">receiver</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">capitalize</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Usage: $prop(word, [options])</span>
<span class="sd"> Usage: $pron(word, [options])</span>
<span class="sd"> Adjust pronouns to the expected form. Pronouns are words you use instead of a</span>
<span class="sd"> proper name, such as &#39;him&#39;, &#39;herself&#39;, &#39;theirs&#39; etc. These look different</span>
@ -1259,7 +1288,7 @@
<span class="sd"> `male`/`female`/`neutral`/`plural` (plural is considered a gender for this purpose).</span>
<span class="sd"> If no `gender` property/callable is found, `neutral` is used as a fallback.</span>
<span class="sd"> The pronoun-type default (if not spefified in call) is `subject pronoun`.</span>
<span class="sd"> The pronoun-type default (if not specified in call) is `subject pronoun`.</span>
<span class="sd"> Args:</span>
<span class="sd"> pronoun (str): Input argument to parsed call. This can be any of the pronouns</span>
@ -1329,7 +1358,7 @@
<span class="n">default_viewpoint</span> <span class="o">=</span> <span class="s2">&quot;2nd person&quot;</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;gender&quot;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">gender</span><span class="p">):</span>
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">caller</span><span class="o">.</span><span class="n">gender</span><span class="p">):</span>
<span class="n">default_gender</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">gender</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">default_gender</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">gender</span>
@ -1357,7 +1386,7 @@
<span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">receiver</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">capitalize</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Usage: $Pron(word) - always maps to a capitalized word.</span>
<span class="sd"> Usage: $Pron(word, [options]) - always maps to a capitalized word.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">funcparser_callable_pronoun</span><span class="p">(</span>

View file

@ -109,7 +109,7 @@
<span class="n">callback</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="n">seconds</span> <span class="o">=</span> <span class="n">real_seconds_until</span><span class="p">(</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">gametime</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">restart</span><span class="p">(</span><span class="n">interval</span><span class="o">=</span><span class="n">seconds</span><span class="p">)</span></div></div>
<span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="n">interval</span><span class="o">=</span><span class="n">seconds</span><span class="p">,</span> <span class="n">force_restart</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div></div>
<span class="c1"># Access functions</span>

View file

@ -92,6 +92,7 @@
<span class="c1"># log call functions (each has legacy aliases)</span>
<div class="viewcode-block" id="log_info"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_info">[docs]</a><span class="k">def</span> <span class="nf">log_info</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Logs any generic debugging/informative info that should appear in the log.</span>
@ -104,6 +105,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<span class="n">info</span> <span class="o">=</span> <span class="n">log_info</span>
<span class="n">log_infomsg</span> <span class="o">=</span> <span class="n">log_info</span>
<span class="n">log_msg</span> <span class="o">=</span> <span class="n">log_info</span>
@ -121,6 +123,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">warn</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<span class="n">warn</span> <span class="o">=</span> <span class="n">log_warn</span>
<span class="n">warning</span> <span class="o">=</span> <span class="n">log_warn</span>
<span class="n">log_warnmsg</span> <span class="o">=</span> <span class="n">log_warn</span>
@ -162,6 +165,7 @@
<span class="k">if</span> <span class="n">msg</span><span class="p">:</span>
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;!!&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<span class="n">log_tracemsg</span> <span class="o">=</span> <span class="n">log_trace</span>
<span class="n">exception</span> <span class="o">=</span> <span class="n">log_trace</span>
<span class="n">critical</span> <span class="o">=</span> <span class="n">log_trace</span>
@ -198,6 +202,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;SS&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<span class="n">sec</span> <span class="o">=</span> <span class="n">log_sec</span>
<span class="n">security</span> <span class="o">=</span> <span class="n">log_sec</span>
<span class="n">log_secmsg</span> <span class="o">=</span> <span class="n">log_sec</span>
@ -216,12 +221,12 @@
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;Server&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<div class="viewcode-block" id="GetLogObserver"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.GetLogObserver">[docs]</a><span class="k">class</span> <span class="nc">GetLogObserver</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets up how the system logs are formatted.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">component_prefix</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">event_levels</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">twisted_logger</span><span class="o">.</span><span class="n">LogLevel</span><span class="o">.</span><span class="n">debug</span><span class="p">:</span> <span class="s2">&quot;??&quot;</span><span class="p">,</span>
@ -249,8 +254,7 @@
<span class="n">event</span><span class="p">[</span><span class="s2">&quot;log_format&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;log_format&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
<span class="n">component_prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">component_prefix</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
<span class="n">log_msg</span> <span class="o">=</span> <span class="n">twisted_logger</span><span class="o">.</span><span class="n">formatEventAsClassicLogText</span><span class="p">(</span>
<span class="n">event</span><span class="p">,</span>
<span class="n">formatTime</span><span class="o">=</span><span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">twisted_logger</span><span class="o">.</span><span class="n">formatTime</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">_TIME_FORMAT</span><span class="p">)</span>
<span class="n">event</span><span class="p">,</span> <span class="n">formatTime</span><span class="o">=</span><span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">twisted_logger</span><span class="o">.</span><span class="n">formatTime</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">_TIME_FORMAT</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">component_prefix</span><span class="si">}{</span><span class="n">log_msg</span><span class="si">}</span><span class="s2">&quot;</span></div>
@ -260,14 +264,15 @@
<span class="c1"># Called by server/portal on startup</span>
<div class="viewcode-block" id="GetPortalLogObserver"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.GetPortalLogObserver">[docs]</a><span class="k">class</span> <span class="nc">GetPortalLogObserver</span><span class="p">(</span><span class="n">GetLogObserver</span><span class="p">):</span>
<span class="n">component_prefix</span> <span class="o">=</span> <span class="s2">&quot;|Portal| &quot;</span></div>
<div class="viewcode-block" id="GetServerLogObserver"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.GetServerLogObserver">[docs]</a><span class="k">class</span> <span class="nc">GetServerLogObserver</span><span class="p">(</span><span class="n">GetLogObserver</span><span class="p">):</span>
<span class="n">component_prefix</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span></div>
<span class="c1"># logging overrides</span>
@ -394,6 +399,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">lastDate</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lastDate</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">toDate</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div></div>
<span class="c1"># Arbitrary file logger</span>

View file

@ -138,7 +138,6 @@
<span class="s2">&quot;evennia.game_template.server.conf.prototypefuncs&quot;</span><span class="p">,</span>
<span class="p">],</span>
<span class="n">BASE_GUEST_TYPECLASS</span><span class="o">=</span><span class="s2">&quot;evennia.accounts.accounts.DefaultGuest&quot;</span><span class="p">,</span>
<span class="c1"># a special setting boolean _TEST_ENVIRONMENT is set by the test runner</span>
<span class="c1"># while the test suite is running.</span>
<span class="p">)</span>

View file

@ -54,11 +54,10 @@
<span class="kn">from</span> <span class="nn">html</span> <span class="kn">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="kn">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>
<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">{}</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">{}</span><span class="s2">m&quot;</span>
<div class="viewcode-block" id="TextToHTMLparser"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.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>
@ -67,188 +66,75 @@
<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="n">style_codes</span> <span class="o">=</span> <span class="p">[</span>
<span class="c1"># non-color style markers</span>
<span class="n">ANSI_NORMAL</span><span class="p">,</span>
<span class="n">ANSI_UNDERLINE</span><span class="p">,</span>
<span class="n">ANSI_HILITE</span><span class="p">,</span>
<span class="n">ANSI_UNHILITE</span><span class="p">,</span>
<span class="n">ANSI_INVERSE</span><span class="p">,</span>
<span class="n">ANSI_BLINK</span><span class="p">,</span>
<span class="n">ANSI_INV_HILITE</span><span class="p">,</span>
<span class="n">ANSI_BLINK_HILITE</span><span class="p">,</span>
<span class="n">ANSI_INV_BLINK</span><span class="p">,</span>
<span class="n">ANSI_INV_BLINK_HILITE</span><span class="p">,</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="n">ansi_color_codes</span> <span class="o">=</span> <span class="p">[</span>
<span class="c1"># Foreground colors</span>
<span class="n">ANSI_BLACK</span><span class="p">,</span>
<span class="n">ANSI_RED</span><span class="p">,</span>
<span class="n">ANSI_GREEN</span><span class="p">,</span>
<span class="n">ANSI_YELLOW</span><span class="p">,</span>
<span class="n">ANSI_BLUE</span><span class="p">,</span>
<span class="n">ANSI_MAGENTA</span><span class="p">,</span>
<span class="n">ANSI_CYAN</span><span class="p">,</span>
<span class="n">ANSI_WHITE</span><span class="p">,</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">xterm_fg_codes</span> <span class="o">=</span> <span class="p">[</span><span class="n">XTERM256_FG</span><span class="o">.</span><span class="n">format</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">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="n">ansi_bg_codes</span> <span class="o">=</span> <span class="p">[</span>
<span class="c1"># Background colors</span>
<span class="n">ANSI_BACK_BLACK</span><span class="p">,</span>
<span class="n">ANSI_BACK_RED</span><span class="p">,</span>
<span class="n">ANSI_BACK_GREEN</span><span class="p">,</span>
<span class="n">ANSI_BACK_YELLOW</span><span class="p">,</span>
<span class="n">ANSI_BACK_BLUE</span><span class="p">,</span>
<span class="n">ANSI_BACK_MAGENTA</span><span class="p">,</span>
<span class="n">ANSI_BACK_CYAN</span><span class="p">,</span>
<span class="n">ANSI_BACK_WHITE</span><span class="p">,</span>
<span class="p">]</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">xterm_bg_codes</span> <span class="o">=</span> <span class="p">[</span><span class="n">XTERM256_BG</span><span class="o">.</span><span class="n">format</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">re_style</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;(</span><span class="si">{}</span><span class="s2">)&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="s2">&quot;|&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="n">style_codes</span> <span class="o">+</span> <span class="n">ansi_color_codes</span> <span class="o">+</span> <span class="n">xterm_fg_codes</span> <span class="o">+</span> <span class="n">ansi_bg_codes</span> <span class="o">+</span> <span class="n">xterm_bg_codes</span>
<span class="p">)</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="p">)</span>
<span class="p">)</span>
<span class="n">colorlist</span> <span class="o">=</span> <span class="p">(</span>
<span class="p">[</span><span class="n">ANSI_UNHILITE</span> <span class="o">+</span> <span class="n">code</span> <span class="k">for</span> <span class="n">code</span> <span class="ow">in</span> <span class="n">ansi_color_codes</span><span class="p">]</span>
<span class="o">+</span> <span class="p">[</span><span class="n">ANSI_HILITE</span> <span class="o">+</span> <span class="n">code</span> <span class="k">for</span> <span class="n">code</span> <span class="ow">in</span> <span class="n">ansi_color_codes</span><span class="p">]</span>
<span class="o">+</span> <span class="n">xterm_fg_codes</span>
<span class="p">)</span>
<span class="n">bglist</span> <span class="o">=</span> <span class="n">ansi_bg_codes</span> <span class="o">+</span> <span class="p">[</span><span class="n">ANSI_HILITE</span> <span class="o">+</span> <span class="n">code</span> <span class="k">for</span> <span class="n">code</span> <span class="ow">in</span> <span class="n">ansi_bg_codes</span><span class="p">]</span> <span class="o">+</span> <span class="n">xterm_bg_codes</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;tab&gt;[\t]+)|(?P&lt;space&gt; +)|&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="sa">r</span><span class="s2">&quot;(?P&lt;htmlchars&gt;[&lt;&amp;&gt;])|(?P&lt;tab&gt;[\t]+)|(?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_invisiblespace</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;( &lt;.*?&gt;)( )&quot;</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;(?&lt;!=&quot;)((?: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>
<span class="n">re_mxpurl</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;\|lu(.*?)\|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>
<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>
<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>
<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 class="viewcode-block" id="TextToHTMLparser.re_color"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.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.text2html.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.text2html.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.text2html.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.text2html.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.text2html.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>
@ -260,7 +146,7 @@
<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>
<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="n">ANSI_BEEP</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.text2html.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>
@ -307,20 +193,6 @@
<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.text2html.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.re_invisible_space"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.re_invisible_space">[docs]</a> <span class="k">def</span> <span class="nf">re_invisible_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"> If two spaces are separated by an invisble html element, they act as a</span>
<span class="sd"> hidden double-space and the last of them should be replaced by &amp;nbsp;</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_invisiblespace</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_invisiblespace</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.text2html.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>
@ -374,27 +246,131 @@
<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;tab&quot;</span><span class="p">]:</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">&quot;tab&quot;</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; &quot;</span> <span class="o">+</span> <span class="s2">&quot;&amp;nbsp;&quot;</span> <span class="o">*</span> <span class="p">(</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="p">))</span>
<span class="k">return</span> <span class="n">text</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">cdict</span><span class="p">[</span><span class="s2">&quot;space&quot;</span><span class="p">]</span>
<span class="n">text</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">)</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="n">text</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</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="n">text</span> <span class="o">=</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">&quot;tab&quot;</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; &quot;</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tabstop</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.text2html.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.format_styles"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.format_styles">[docs]</a> <span class="k">def</span> <span class="nf">format_styles</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"> Takes a string with parsed ANSI codes and replaces them with</span>
<span class="sd"> HTML spans and CSS classes.</span>
<div class="viewcode-block" id="TextToHTMLparser.sub_invisiblespace"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.sub_invisiblespace">[docs]</a> <span class="k">def</span> <span class="nf">sub_invisiblespace</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 invisible spaces&quot;</span>
<span class="k">return</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;&amp;nbsp;&quot;</span></div>
<span class="sd"> Args:</span>
<span class="sd"> text (str): The string to process.</span>
<div class="viewcode-block" id="TextToHTMLparser.handle_single_first_space"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.handle_single_first_space">[docs]</a> <span class="k">def</span> <span class="nf">handle_single_first_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="s2">&quot;Don&#39;t swallow an initial lone space&quot;</span>
<span class="k">if</span> <span class="n">text</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&amp;nbsp;&quot;</span> <span class="o">+</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>
<span class="sd"> Returns:</span>
<span class="sd"> text (str): Processed text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># split out the ANSI codes and clean out any empty items</span>
<span class="n">str_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">substr</span> <span class="k">for</span> <span class="n">substr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_style</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> <span class="k">if</span> <span class="n">substr</span><span class="p">]</span>
<span class="c1"># initialize all the flags and classes</span>
<span class="n">classes</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">clean</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">inverse</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># default color is light grey - unhilite + white</span>
<span class="n">hilight</span> <span class="o">=</span> <span class="n">ANSI_UNHILITE</span>
<span class="n">fg</span> <span class="o">=</span> <span class="n">ANSI_WHITE</span>
<span class="c1"># default bg is black</span>
<span class="n">bg</span> <span class="o">=</span> <span class="n">ANSI_BACK_BLACK</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">substr</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">str_list</span><span class="p">):</span>
<span class="c1"># reset all current styling</span>
<span class="k">if</span> <span class="n">substr</span> <span class="o">==</span> <span class="n">ANSI_NORMAL</span><span class="p">:</span>
<span class="c1"># close any existing span if necessary</span>
<span class="n">str_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;&lt;/span&gt;&quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">clean</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="c1"># reset to defaults</span>
<span class="n">classes</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">clean</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">inverse</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">hilight</span> <span class="o">=</span> <span class="n">ANSI_UNHILITE</span>
<span class="n">fg</span> <span class="o">=</span> <span class="n">ANSI_WHITE</span>
<span class="n">bg</span> <span class="o">=</span> <span class="n">ANSI_BACK_BLACK</span>
<span class="c1"># change color</span>
<span class="k">elif</span> <span class="n">substr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ansi_color_codes</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">xterm_fg_codes</span><span class="p">:</span>
<span class="c1"># erase ANSI code from output</span>
<span class="n">str_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="c1"># set new color</span>
<span class="n">fg</span> <span class="o">=</span> <span class="n">substr</span>
<span class="c1"># change bg color</span>
<span class="k">elif</span> <span class="n">substr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ansi_bg_codes</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">xterm_bg_codes</span><span class="p">:</span>
<span class="c1"># erase ANSI code from output</span>
<span class="n">str_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="c1"># set new bg</span>
<span class="n">bg</span> <span class="o">=</span> <span class="n">substr</span>
<span class="c1"># non-color codes</span>
<span class="k">elif</span> <span class="n">substr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">style_codes</span><span class="p">:</span>
<span class="c1"># erase ANSI code from output</span>
<span class="n">str_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="c1"># hilight codes</span>
<span class="k">if</span> <span class="n">substr</span> <span class="ow">in</span> <span class="p">(</span><span class="n">ANSI_HILITE</span><span class="p">,</span> <span class="n">ANSI_UNHILITE</span><span class="p">,</span> <span class="n">ANSI_INV_HILITE</span><span class="p">,</span> <span class="n">ANSI_INV_BLINK_HILITE</span><span class="p">):</span>
<span class="c1"># set new hilight status</span>
<span class="n">hilight</span> <span class="o">=</span> <span class="n">ANSI_UNHILITE</span> <span class="k">if</span> <span class="n">substr</span> <span class="o">==</span> <span class="n">ANSI_UNHILITE</span> <span class="k">else</span> <span class="n">ANSI_HILITE</span>
<span class="c1"># inversion codes</span>
<span class="k">if</span> <span class="n">substr</span> <span class="ow">in</span> <span class="p">(</span><span class="n">ANSI_INVERSE</span><span class="p">,</span> <span class="n">ANSI_INV_HILITE</span><span class="p">,</span> <span class="n">ANSI_INV_BLINK_HILITE</span><span class="p">):</span>
<span class="n">inverse</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># blink codes</span>
<span class="k">if</span> <span class="p">(</span>
<span class="n">substr</span> <span class="ow">in</span> <span class="p">(</span><span class="n">ANSI_BLINK</span><span class="p">,</span> <span class="n">ANSI_BLINK_HILITE</span><span class="p">,</span> <span class="n">ANSI_INV_BLINK_HILITE</span><span class="p">)</span>
<span class="ow">and</span> <span class="s2">&quot;blink&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">classes</span>
<span class="p">):</span>
<span class="n">classes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;blink&quot;</span><span class="p">)</span>
<span class="c1"># underline</span>
<span class="k">if</span> <span class="n">substr</span> <span class="o">==</span> <span class="n">ANSI_UNDERLINE</span> <span class="ow">and</span> <span class="s2">&quot;underline&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">classes</span><span class="p">:</span>
<span class="n">classes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;underline&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># normal text, add text back to list</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">str_list</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]:</span>
<span class="c1"># prior entry was cleared, which means style change</span>
<span class="c1"># get indices for the fg and bg codes</span>
<span class="n">bg_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bglist</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">bg</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">color_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">colorlist</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">hilight</span> <span class="o">+</span> <span class="n">fg</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="c1"># xterm256 colors don&#39;t have the hilight codes</span>
<span class="n">color_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">colorlist</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">fg</span><span class="p">)</span>
<span class="k">if</span> <span class="n">inverse</span><span class="p">:</span>
<span class="c1"># inverse means swap fg and bg indices</span>
<span class="n">bg_class</span> <span class="o">=</span> <span class="s2">&quot;bgcolor-</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">color_index</span><span class="p">)</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s2">&quot;0&quot;</span><span class="p">))</span>
<span class="n">color_class</span> <span class="o">=</span> <span class="s2">&quot;color-</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">bg_index</span><span class="p">)</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s2">&quot;0&quot;</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># use fg and bg indices for classes</span>
<span class="n">bg_class</span> <span class="o">=</span> <span class="s2">&quot;bgcolor-</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">bg_index</span><span class="p">)</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s2">&quot;0&quot;</span><span class="p">))</span>
<span class="n">color_class</span> <span class="o">=</span> <span class="s2">&quot;color-</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">color_index</span><span class="p">)</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s2">&quot;0&quot;</span><span class="p">))</span>
<span class="c1"># black bg is the default, don&#39;t explicitly style</span>
<span class="k">if</span> <span class="n">bg_class</span> <span class="o">!=</span> <span class="s2">&quot;bgcolor-000&quot;</span><span class="p">:</span>
<span class="n">classes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bg_class</span><span class="p">)</span>
<span class="c1"># light grey text is the default, don&#39;t explicitly style</span>
<span class="k">if</span> <span class="n">color_class</span> <span class="o">!=</span> <span class="s2">&quot;color-007&quot;</span><span class="p">:</span>
<span class="n">classes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">color_class</span><span class="p">)</span>
<span class="c1"># define the new style span</span>
<span class="n">prefix</span> <span class="o">=</span> <span class="s1">&#39;&lt;span class=&quot;</span><span class="si">{}</span><span class="s1">&quot;&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">classes</span><span class="p">))</span>
<span class="c1"># close any prior span</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">clean</span><span class="p">:</span>
<span class="n">prefix</span> <span class="o">=</span> <span class="s2">&quot;&lt;/span&gt;&quot;</span> <span class="o">+</span> <span class="n">prefix</span>
<span class="c1"># add span to output</span>
<span class="n">str_list</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">prefix</span>
<span class="c1"># clean out color classes to easily update next time</span>
<span class="n">classes</span> <span class="o">=</span> <span class="p">[</span><span class="bp">cls</span> <span class="k">for</span> <span class="bp">cls</span> <span class="ow">in</span> <span class="n">classes</span> <span class="k">if</span> <span class="s2">&quot;color&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">cls</span><span class="p">]</span>
<span class="c1"># flag as currently being styled</span>
<span class="n">clean</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># close span if necessary</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">clean</span><span class="p">:</span>
<span class="n">str_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;&lt;/span&gt;&quot;</span><span class="p">)</span>
<span class="c1"># recombine back into string</span>
<span class="k">return</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">str_list</span><span class="p">)</span></div>
<div class="viewcode-block" id="TextToHTMLparser.parse"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.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>
@ -409,25 +385,17 @@
<span class="sd"> text (str): Parsed text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># print(f&quot;incoming text:\n{text}&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="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_mxpurl</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sub_mxp_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_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">format_styles</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="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_invisible_space</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">handle_single_first_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>

View file

@ -2737,6 +2737,7 @@
<span class="o">+</span> <span class="n">excess</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="run_in_main_thread"><a class="viewcode-back" href="../../../api/evennia.utils.utils.html#evennia.commands.default.building.run_in_main_thread">[docs]</a><span class="k">def</span> <span class="nf">run_in_main_thread</span><span class="p">(</span><span class="n">function_or_method</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Force a callable to execute in the main Evennia thread. This is only relevant when</span>