<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<head>
    <title>Reference</title>
    <link rel="stylesheet" href="../ldoc.css" type="text/css" />
</head>
<body>

<div id="container">

<div id="product">
	<div id="product_logo"></div>
	<div id="product_name"><big><b></b></big></div>
	<div id="product_description"></div>
</div> <!-- id="product" -->


<div id="main">


<!-- Menu -->

<div id="navigation">
<br/>
<h1>MDK</h1>


<ul>
  <li><a href="../index.html">Index</a></li>
</ul>



<h2>Source</h2>
<ul class="nowrap">
  <li><a href="../source/LICENSE.lua.html">LICENSE.lua</a></li>
  <li><strong>aliasmgr.lua</strong></li>
  <li><a href="../source/chyron.lua.html">chyron.lua</a></li>
  <li><a href="../source/demontools.lua.html">demontools.lua</a></li>
  <li><a href="../source/echofile.lua.html">echofile.lua</a></li>
  <li><a href="../source/emco.lua.html">emco.lua</a></li>
  <li><a href="../source/figlet.lua.html">figlet.lua</a></li>
  <li><a href="../source/ftext.lua.html">ftext.lua</a></li>
  <li><a href="../source/gradientmaker.lua.html">gradientmaker.lua</a></li>
  <li><a href="../source/loggingconsole.lua.html">loggingconsole.lua</a></li>
  <li><a href="../source/loginator.lua.html">loginator.lua</a></li>
  <li><a href="../source/mastermindsolver.lua.html">mastermindsolver.lua</a></li>
  <li><a href="../source/revisionator.lua.html">revisionator.lua</a></li>
  <li><a href="../source/schema.lua.html">schema.lua</a></li>
  <li><a href="../source/sortbox.lua.html">sortbox.lua</a></li>
  <li><a href="../source/spinbox.lua.html">spinbox.lua</a></li>
  <li><a href="../source/sug.lua.html">sug.lua</a></li>
  <li><a href="../source/ftext_spec.lua.html">ftext_spec.lua</a></li>
  <li><a href="../source/textgauge.lua.html">textgauge.lua</a></li>
  <li><a href="../source/timergauge.lua.html">timergauge.lua</a></li>
</ul>
<h2>Modules</h2>
<ul class="nowrap">
  <li><a href="../modules/demontools.html">demontools</a></li>
  <li><a href="../modules/echofile.html">echofile</a></li>
  <li><a href="../modules/figlet.html">figlet</a></li>
  <li><a href="../modules/ftext.html">ftext</a></li>
  <li><a href="../modules/GradientMaker.html">GradientMaker</a></li>
</ul>
<h2>Classes</h2>
<ul class="nowrap">
  <li><a href="../classes/aliasmgr.html">aliasmgr</a></li>
  <li><a href="../classes/Chyron.html">Chyron</a></li>
  <li><a href="../classes/EMCO.html">EMCO</a></li>
  <li><a href="../classes/LoggingConsole.html">LoggingConsole</a></li>
  <li><a href="../classes/Loginator.html">Loginator</a></li>
  <li><a href="../classes/MasterMindSolver.html">MasterMindSolver</a></li>
  <li><a href="../classes/revisionator.html">revisionator</a></li>
  <li><a href="../classes/SortBox.html">SortBox</a></li>
  <li><a href="../classes/spinbox.html">spinbox</a></li>
  <li><a href="../classes/SUG.html">SUG</a></li>
  <li><a href="../classes/TextGauge.html">TextGauge</a></li>
  <li><a href="../classes/TimerGauge.html">TimerGauge</a></li>
</ul>

</div>

<div id="content">

    <h2>aliasmgr.lua</h2>
<pre>
<span class="comment">--- Alias Manager
</span><span class="comment">-- @classmod aliasmgr
</span><span class="comment">-- @author Damian Monogue &lt;demonnic@gmail.com&gt;
</span><span class="comment">-- @copyright 2022 Damian Monogue
</span><span class="comment">-- @license MIT, see LICENSE.lua
</span><span class="keyword">local</span> aliasmgr = {}
aliasmgr.__index = aliasmgr

<a id="10"></a><span class="comment">--- Creates a new alias manager
</span><span class="keyword">function</span> aliasmgr:<span class="function-name">new</span>()
  <span class="keyword">local</span> mgr = {
    aliases = {}
  }
  <span class="global">setmetatable</span>(mgr, self)
  <span class="keyword">return</span> mgr
<span class="keyword">end</span>

<span class="keyword">local</span> <span class="keyword">function</span> <span class="function-name">argError</span>(funcName, argument, expected, actual)
  <span class="keyword">local</span> msg = <span class="global">string</span>.<span class="function-name">format</span>(<span class="string">"%s: %s as %s expected, got %s"</span>, funcName, argument, expected, actual)
  <span class="function-name">printError</span>(msg, <span class="keyword">true</span>, <span class="keyword">true</span>)
<span class="keyword">end</span>

<span class="comment">--- Registers an alias with the alias manager
</span><span class="comment">-- @param name the name for the alias
</span><span class="comment">-- @param regex the regular expression the alias matches against
</span><a id="27"></a><span class="comment">-- @param func The code to run when the alias matches. Can wrap code in [[ ]] or pass an actual function
</span><span class="keyword">function</span> aliasmgr:<span class="function-name">register</span>(name, regex, func)
  <span class="keyword">local</span> funcName = <span class="string">"aliasmgr:register(name, regex, func)"</span>
  <span class="keyword">if</span> func == <span class="keyword">nil</span> <span class="keyword">then</span>
    <span class="function-name">printError</span>(<span class="function-name">f</span><span class="string">"{funcName} takes 3 arguments and you have provided less than that"</span>, <span class="keyword">true</span>, <span class="keyword">true</span>)
  <span class="keyword">end</span>
  <span class="keyword">local</span> nameType = <span class="global">type</span>(name)
  <span class="keyword">if</span> nameType ~= <span class="string">"string"</span> <span class="keyword">then</span>
    <span class="function-name">argError</span>(funcName, <span class="string">"name"</span>, <span class="string">"string"</span>, nameType)
  <span class="keyword">end</span>
  <span class="keyword">local</span> regexType = <span class="global">type</span>(regex)
  <span class="keyword">if</span> regexType ~= <span class="string">"string"</span> <span class="keyword">then</span>
    <span class="function-name">argError</span>(funcName, <span class="string">"regex"</span>, <span class="string">"string"</span>, regexType)
  <span class="keyword">end</span>
  <span class="keyword">local</span> funcType = <span class="global">type</span>(func)
  <span class="keyword">if</span> funcType ~= <span class="string">"string"</span> <span class="keyword">and</span> funcType ~= <span class="string">"function"</span> <span class="keyword">then</span>
    <span class="function-name">argError</span>(funcName, <span class="string">"func"</span>, <span class="string">"string or function"</span>, funcType)
  <span class="keyword">end</span>
  <span class="keyword">local</span> object = {
    regex = regex,
    func = func
  }
  self:<span class="function-name">kill</span>(name)
  <span class="keyword">local</span> ok, err = <span class="global">pcall</span>(tempAlias, regex, func)
  <span class="keyword">if</span> <span class="keyword">not</span> ok <span class="keyword">then</span>
    <span class="keyword">return</span> <span class="keyword">nil</span>, err
  <span class="keyword">end</span>
  object.handlerID = err
  self.aliases[name] = object
  <span class="keyword">return</span> <span class="keyword">true</span>
<span class="keyword">end</span>

<span class="comment">--- Registers an alias with the alias manager. Alias for register
</span><span class="comment">-- @param name the name for the alias
</span><span class="comment">-- @param regex the regular expression the alias matches against
</span><span class="comment">-- @param func The code to run when the alias matches. Can wrap code in [[ ]] or pass an actual function
</span><a id="63"></a><span class="comment">-- @see register
</span><span class="keyword">function</span> aliasmgr:<span class="function-name">add</span>(name, regex, func)
  self:<span class="function-name">register</span>(name, regex, func)
<span class="keyword">end</span>

<span class="comment">--- Disables an alias, but does not delete it so it can be enabled later without being redefined
</span><span class="comment">-- @param name the name of the alias to disable
</span><a id="70"></a><span class="comment">-- @return true if the alias exists and gets disabled, false if it does not exist or is already disabled
</span><span class="keyword">function</span> aliasmgr:<span class="function-name">disable</span>(name)
  <span class="keyword">local</span> funcName = <span class="string">"aliasmgr:disable(name)"</span>
  <span class="keyword">local</span> nameType = <span class="global">type</span>(name)
  <span class="keyword">if</span> nameType ~= <span class="string">"string"</span> <span class="keyword">then</span>
    <span class="function-name">argError</span>(funcName, <span class="string">"name"</span>, <span class="string">"string"</span>, nameType)
  <span class="keyword">end</span>
  <span class="keyword">local</span> object = self.aliases[name]
  <span class="keyword">if</span> <span class="keyword">not</span> object <span class="keyword">or</span> object.handlerID == -<span class="number">1</span> <span class="keyword">then</span>
    <span class="keyword">return</span> <span class="keyword">false</span>
  <span class="keyword">end</span>
  <span class="function-name">killAlias</span>(object.handlerID)
  object.handlerID = -<span class="number">1</span>
  <span class="keyword">return</span> <span class="keyword">true</span>
<span class="keyword">end</span>

<a id="86"></a><span class="comment">--- Disables all aliases registered with the manager
</span><span class="keyword">function</span> aliasmgr:<span class="function-name">disableAll</span>()
  <span class="keyword">local</span> aliases = self.aliases
  <span class="keyword">for</span> name, object <span class="keyword">in</span> <span class="global">pairs</span>(aliases) <span class="keyword">do</span>
    self:<span class="function-name">disable</span>(name)
  <span class="keyword">end</span>
<span class="keyword">end</span>

<span class="comment">--- Enables an alias by name
</span><span class="comment">-- @param name the name of the alias to enable
</span><a id="96"></a><span class="comment">-- @return true if the alias exists and was enabled, false if it does not exist.
</span><span class="keyword">function</span> aliasmgr:<span class="function-name">enable</span>(name)
  <span class="keyword">local</span> funcName = <span class="string">"aliasmgr:enable(name)"</span>
  <span class="keyword">local</span> nameType = <span class="global">type</span>(name)
  <span class="keyword">if</span> nameType ~= <span class="string">"string"</span> <span class="keyword">then</span>
    <span class="function-name">argError</span>(funcName, <span class="string">"name"</span>, <span class="string">"string"</span>, nameType)
  <span class="keyword">end</span>
  <span class="keyword">local</span> object = self.aliases[name]
  <span class="keyword">if</span> <span class="keyword">not</span> object <span class="keyword">then</span>
    <span class="keyword">return</span> <span class="keyword">false</span>
  <span class="keyword">end</span>
  self:<span class="function-name">register</span>(name, object.regex, object.func)
<span class="keyword">end</span>

<a id="110"></a><span class="comment">--- Enables all aliases registered with the manager
</span><span class="keyword">function</span> aliasmgr:<span class="function-name">enableAll</span>()
  <span class="keyword">local</span> aliases = self.aliases
  <span class="keyword">for</span> name,_ <span class="keyword">in</span> <span class="global">pairs</span>(aliases) <span class="keyword">do</span>
    self:<span class="function-name">enable</span>(name)
  <span class="keyword">end</span>
  <span class="keyword">return</span> <span class="keyword">true</span>
<span class="keyword">end</span>

<span class="comment">--- Kill an alias, deleting it from the manager
</span><span class="comment">-- @param name the name of the alias to kill
</span><a id="121"></a><span class="comment">-- @return true if the alias exists and gets deleted, false if the alias does not exist
</span><span class="keyword">function</span> aliasmgr:<span class="function-name">kill</span>(name)
  <span class="keyword">local</span> funcName = <span class="string">"aliasmgr:kill(name)"</span>
  <span class="keyword">local</span> nameType = <span class="global">type</span>(name)
  <span class="keyword">if</span> nameType ~= <span class="string">"string"</span> <span class="keyword">then</span>
    <span class="function-name">argError</span>(funcName, <span class="string">"name"</span>, <span class="string">"string"</span>, nameType)
  <span class="keyword">end</span>
  <span class="keyword">local</span> object = self.aliases[name]
  <span class="keyword">if</span> <span class="keyword">not</span> object <span class="keyword">then</span>
    <span class="keyword">return</span> <span class="keyword">false</span>
  <span class="keyword">end</span>
  self:<span class="function-name">disable</span>(name)
  self.aliases[name] = <span class="keyword">nil</span>
  <span class="keyword">return</span> <span class="keyword">true</span>
<span class="keyword">end</span>

<a id="137"></a><span class="comment">--- Kills all aliases registered with the manager, clearing it out
</span><span class="keyword">function</span> aliasmgr:<span class="function-name">killAll</span>()
  <span class="keyword">local</span> aliases = self.aliases
  <span class="keyword">for</span> name, _ <span class="keyword">in</span> <span class="global">pairs</span>(aliases) <span class="keyword">do</span>
    self:<span class="function-name">kill</span>(name)
  <span class="keyword">end</span>
<span class="keyword">end</span>

<span class="comment">--- Kills an alias, deleting it from the manager
</span><span class="comment">-- @param name the name of the alias to delete
</span><span class="comment">-- @return true if the alias exists and gets deleted, false if the alias does not exist
</span><a id="148"></a><span class="comment">-- @see kill
</span><span class="keyword">function</span> aliasmgr:<span class="function-name">delete</span>(name)
  <span class="keyword">return</span> self:<span class="function-name">kill</span>(name)
<span class="keyword">end</span>

<span class="comment">--- Kills all aliases, deleting them from the manager
</span><a id="154"></a><span class="comment">-- @see killAll
</span><span class="keyword">function</span> aliasmgr:<span class="function-name">deleteAll</span>()
  <span class="keyword">return</span> self:<span class="function-name">killAll</span>()
<span class="keyword">end</span>

<span class="comment">--- Returns the list of aliases and the information being tracked for them
</span><a id="160"></a><span class="comment">-- @return the table of alias information, with names as keys and a table of information as the values.
</span><span class="keyword">function</span> aliasmgr:<span class="function-name">getAliases</span>()
  <span class="keyword">return</span> self.aliases
<span class="keyword">end</span>

<span class="keyword">return</span> aliasmgr</pre>


</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2023-05-29 18:41:27 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
</html>