Fix the stupid 2

This commit is contained in:
relt-1
2023-09-28 11:02:10 +02:00
parent 78ef63e24d
commit 894e28d620
27 changed files with 929 additions and 135 deletions

View File

@@ -83,32 +83,31 @@ def ConvertStrToHtml(rawmarkdown : str):
dollarsnippet = rawmarkdown[i+2:]
if dollarsnippet.startswith("SMALL"):
dollarname = "SMALL"
#closelist.append("SMALL")
#rawmarkdown = rawmarkdown[:i]+"<small style=\"position:relative; top:8px; margin:0px;\">"+rawmarkdown[i+7:]
i+=5
elif dollarsnippet.startswith("FRAME"):
dollarname = "FRAME"
#closelist.append("FRAME")
#rawmarkdown = rawmarkdown[:i]+"<div class=\"framed\"markdown=\"1\"><div class=\"framedinside\" markdown=\"1\">"+rawmarkdown[i+7:]
i+=5
elif dollarsnippet.startswith("INLINEFRAME"):
dollarname = "INLINEFRAME"
#closelist.append("INLINEFRAME")
#rawmarkdown = rawmarkdown[:i]+"<div class=\"inlineframed\" markdown=\"1\"><div class=\"inlineframedinside\" markdown=\"1\">"+rawmarkdown[i+13:]
i+=11
elif dollarsnippet.startswith("COMMENT"):
dollarname = "COMMENT"
i+=7
beginningdollar = i+2
indentlevel += 1
i+=2
elif rawmarkdown[i:i+2] == "_$":
indentlevel -= 1
if indentlevel == 0 and beginningdollar != -1:
snippet = ConvertStrToHtml(rawmarkdown[beginningdollar:i].strip()).strip()
snippet = ""
if dollarname != "COMMENT":
snippet = ConvertStrToHtml(rawmarkdown[beginningdollar:i].strip()).strip()
if dollarname == "SMALL":
snippet = "<small style=\"position:relative; top:8px; margin:0px;\">"+snippet.strip().replace("<p>","").replace("</p>","")+"</small>"
elif dollarname == "FRAME":
snippet = "<div class=\"framed\"markdown=\"1\"><div class=\"framedinside\" markdown=\"1\">"+snippet+"</div></div>"
snippet = "<div class=\"framed\"><div class=\"framedinside\">"+snippet+"</div></div>"
elif dollarname == "INLINEFRAME":
snippet = "<div class=\"inlineframed\"markdown=\"1\"><div class=\"inlineframedinside\" markdown=\"1\">"+snippet+"</div></div>"
snippet = "<div class=\"inlineframed\"><div class=\"inlineframedinside\">"+snippet+"</div></div>"
rawmarkdown = rawmarkdown[:tocut]+snippet+rawmarkdown[i+2:]
beginningdollar = -1
i = tocut+len(snippet)-3
@@ -123,13 +122,23 @@ def ConvertStrToHtml(rawmarkdown : str):
else:
foundpath = FindFile(link[2:-2]+".md").replace(".md","").replace("\\","/")
rawmarkdown = rawmarkdown.replace(link, "<a href=\"/wiki/"+foundpath+".html\">"+foundpath.split("/")[-1]+"</a>")
embeds = re.findall(r'\{\{[^\{^\}]+\}\}', rawmarkdown)
embeds = re.findall(r'\{\{[^\{\}]+?\}\}', rawmarkdown,re.MULTILINE)
for embed in embeds:
if os.path.exists(os.path.join(src,embed[2:-2]+".embed.md")):
rawmarkdown = rawmarkdown.replace(embed, ConvertToHtml(src+embed[2:-2]+".embed.md"))
path_and_args = embed[2:-2].split("|")
path = path_and_args[0]
if os.path.exists(os.path.join(src,path+".embed.md")):
path = src+path+".embed.md"
else:
foundpath = FindFile(embed[2:-2]+".embed.md").replace("\\","/")
rawmarkdown = rawmarkdown.replace(embed, ConvertToHtml(src+foundpath))
foundpath = FindFile(path+".embed.md").replace("\\","/")
path = src+foundpath
with open(path,"r") as f:
embedcontent = f.read().replace("\r\n","\n").replace("\\}","}")
if len(path_and_args) > 1:
i = 1
for arg in path_and_args[1:]:
embedcontent = embedcontent.replace("$"+str(i)+"$", arg)
i+=1
rawmarkdown = rawmarkdown.replace(embed, ConvertStrToHtml(embedcontent))
links = re.findall(r'\[[^\[^\]]+\]\[[^\[^\]]+\]',rawmarkdown)
for link in links:
name = link[1:].split("]",1)[0]

View File

@@ -473,11 +473,7 @@ th, td
</div>
<h1>QScriptArgs</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<p>QScriptArgs is a handle to a QArgs struct. Is used in <a href="/wiki/QScript/Contributing/API/Structs/QCFunc.html">QCFunc</a>.</p>

View File

@@ -473,11 +473,7 @@ th, td
</div>
<h1>QScriptCallback</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<p>QScriptCallback is used for calling scripting language functions from C++. It is a handle to a QCallback struct.</p>

View File

@@ -473,11 +473,7 @@ th, td
</div>
<h1>QScriptClass</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<p>QScriptClass is a handle to a QClass struct.</p>

View File

@@ -473,11 +473,7 @@ th, td
</div>
<h1>QScriptClassCreator</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<p>QScriptClassCreator is a handle to a QClassCreator struct. It is used for defining <a href="/wiki/QScript/Contributing/API/Structs/QScriptClass.html">QScriptClasses</a>.</p>

View File

@@ -473,11 +473,7 @@ th, td
</div>
<h1>QScriptFunction</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<p>QScriptFunction is a handle to a QFunction which represents a scripting language function.</p>

View File

@@ -473,11 +473,7 @@ th, td
</div>
<h1>QScriptObject</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<p>QScriptObject is a handle to a QObject struct.</p>

View File

@@ -473,10 +473,6 @@ th, td
</div>
<h1>QArgs</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
</div>

View File

@@ -473,10 +473,6 @@ th, td
</div>
<h1>QCallback</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
</div>

View File

@@ -473,10 +473,6 @@ th, td
</div>
<h1>QClass</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
</div>

View File

@@ -473,10 +473,6 @@ th, td
</div>
<h1>QFunction</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
</div>

View File

@@ -473,10 +473,6 @@ th, td
</div>
<h1>QInstance</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
</div>

View File

@@ -473,10 +473,6 @@ th, td
</div>
<h1>QInterface</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
</div>

View File

@@ -473,10 +473,6 @@ th, td
</div>
<h1>QMod</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
</div>

View File

@@ -473,10 +473,6 @@ th, td
</div>
<h1>QModule</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
</div>

View File

@@ -473,10 +473,6 @@ th, td
</div>
<h1>QObject</h1>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
<div class="framed"><div class="framedinside"><p>This page has NO CONTENT! You should write some by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div>
</div>

View File

@@ -490,8 +490,6 @@ th, td
<hr />
<div class="framed"markdown="1"><div class="framedinside"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown2.html">Next -></a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown2.html">Next -></a></p></div></div>
<div class="framed"><div class="framedinside"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown2.html">Next -></a></p></div></div>
</div>

View File

@@ -484,8 +484,6 @@ Same thing with changing the class after it has been created. I have added a _fi
<hr />
<div class="framed"markdown="1"><div class="framedinside"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown1.html">&lt;- Prev</a> | <a href="/wiki/QScript/Contributing/Rundown/QScriptRundown3.html">Next -></a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown1.html">&lt;- Prev</a> | <a href="/wiki/QScript/Contributing/Rundown/QScriptRundown3.html">Next -></a></p></div></div>
<div class="framed"><div class="framedinside"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown1.html">&lt;- Prev</a> | <a href="/wiki/QScript/Contributing/Rundown/QScriptRundown3.html">Next -></a></p></div></div>
</div>

View File

@@ -589,8 +589,6 @@ We can take advantage of that by first checking if the <code>QFunction</code> <c
<hr />
<div class="framed"markdown="1"><div class="framedinside"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown2.html">&lt;- Prev</a> | <a href="/wiki/QScript/Contributing/Rundown/QScriptRundown4.html">Next -></a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown2.html">&lt;- Prev</a> | <a href="/wiki/QScript/Contributing/Rundown/QScriptRundown4.html">Next -></a></p></div></div>
<div class="framed"><div class="framedinside"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown2.html">&lt;- Prev</a> | <a href="/wiki/QScript/Contributing/Rundown/QScriptRundown4.html">Next -></a></p></div></div>
</div>

View File

@@ -492,8 +492,6 @@ th, td
<hr />
<div class="framed"markdown="1"><div class="framedinside"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown3.html">&lt;- Prev</a> | <a href="/wiki/QScript/Contributing/Rundown/QScriptRundown5.html">Next -></a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown3.html">&lt;- Prev</a> | <a href="/wiki/QScript/Contributing/Rundown/QScriptRundown5.html">Next -></a></p></div></div>
<div class="framed"><div class="framedinside"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown3.html">&lt;- Prev</a> | <a href="/wiki/QScript/Contributing/Rundown/QScriptRundown5.html">Next -></a></p></div></div>
</div>

View File

@@ -513,8 +513,6 @@ After each module is loaded (at <code>PostInit()</code>), QScript will call <cod
<hr />
<div class="framed"markdown="1"><div class="framedinside"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown4.html">&lt;- Prev</a> | <a href="/wiki/QScript/Contributing/Rundown/QScriptRundown6.html">Next -></a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown4.html">&lt;- Prev</a> | <a href="/wiki/QScript/Contributing/Rundown/QScriptRundown6.html">Next -></a></p></div></div>
<div class="framed"><div class="framedinside"><p><a href="/wiki/QScript/Contributing/Rundown/QScriptRundown4.html">&lt;- Prev</a> | <a href="/wiki/QScript/Contributing/Rundown/QScriptRundown6.html">Next -></a></p></div></div>
</div>

View File

@@ -477,13 +477,11 @@ th, td
<p>I figured that it may be easiest to just go through the function seciton by section.</p>
<div class="inlineframed"markdown="1"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<p><div class="codehilite"></p>
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="codehilite">
<pre><span></span><code><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">luaL_newstate</span><span class="p">();</span>
</code></pre>
</div>
<hr />
@@ -492,7 +490,7 @@ th, td
<br />
<div class="inlineframed"markdown="1"><div class="inlineframedinside" markdown="1"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="codehilite">
<pre><span></span><code><span class="n">QInstance</span><span class="o">*</span><span class="w"> </span><span class="n">ins</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QInstance</span><span class="p">();</span>
@@ -507,7 +505,7 @@ th, td
<br />
<div class="inlineframed"markdown="1"><div class="inlineframedinside" markdown="1"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="codehilite">
<pre><span></span><code><span class="n">luaL_openlibs</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
@@ -518,7 +516,7 @@ th, td
<p>Which is:</p>
<div class="inlineframed"markdown="1"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">lua/linit.c</small></p>
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">lua/linit.c</small></p>
<div class="codehilite">
<pre><span></span><code><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">luaL_Reg</span><span class="w"> </span><span class="n">loadedlibs</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
@@ -541,14 +539,13 @@ th, td
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</code></pre>
</div>
<hr />
<p>You can notice that it does not include every library, thats because QScript values safety and stability. Some libraries allow for bad things to happen, like unrestricted file access.</p></div></div></div></div>
<p><p>You can notice that it does not include every library, thats because QScript values safety and stability. Some libraries allow for bad things to happen, like unrestricted file access.</p></div></div></p></div></div>
<div class="inlineframed"markdown="1"><div class="inlineframedinside" markdown="1"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="codehilite">
<pre><span></span><code><span class="n">luaL_newmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_OBJECT&quot;</span><span class="p">);</span>
@@ -563,7 +560,7 @@ th, td
<p>Here the QSCRIPT_OBJECT metatable starts being defined and here is where things start to get a little wild.<br />
The Lua_QScript_Index function is responsible for getting a value or method from the QObject.</p>
<div class="inlineframed"markdown="1"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="codehilite">
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Index</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
@@ -608,7 +605,6 @@ The Lua_QScript_Index function is responsible for getting a value or method from
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</code></pre>
</div>
<hr />
@@ -651,19 +647,15 @@ It searches first through the values, and then the methods. If any one is found,
<p>You can notice that it can store multiple types, and there is not even a separate variable that says which one it is!<br />
The reason, is that we already have that variable... it's the metatable!</p>
<p>We already know if the userdata has a specific metatable, that the pointer stored in the userdata is what we want.</p></div></div></div></div>
<p><p>We already know if the userdata has a specific metatable, that the pointer stored in the userdata is what we want.</p></div></div></p></div></div>
<br />
In fact, here are all the Lua functions that get included.
<br />
<hr />
<br />
<div class="inlineframed"markdown="1"><div class="inlineframedinside" markdown="1"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="codehilite">
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_New_Index</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
@@ -701,6 +693,422 @@ In fact, here are all the Lua functions that get included.
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</code></pre>
</div></div></div>
</div>
<hr />
<p>This sets a value in the QObject. It checks if the value accessed actually exists in the object, and if so, sets the objects value to the given one.</p></div></div>
<br />
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="codehilite">
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Object</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">luaclass</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="n">luaclass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_checkudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">&quot;QSCRIPT_CLASS&quot;</span><span class="p">)))</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">QClass</span><span class="o">*</span><span class="w"> </span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">luaclass</span><span class="o">-&gt;</span><span class="n">cls</span><span class="p">;</span>
<span class="w"> </span><span class="n">QObject</span><span class="o">*</span><span class="w"> </span><span class="n">obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QObject</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">QObject</span><span class="p">)</span><span class="o">+</span><span class="n">cls</span><span class="o">-&gt;</span><span class="n">vars_count</span><span class="o">*</span><span class="k">sizeof</span><span class="p">(</span><span class="n">QValue</span><span class="p">));</span>
<span class="w"> </span><span class="n">obj</span><span class="o">-&gt;</span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cls</span><span class="p">;</span>
<span class="w"> </span><span class="n">g_pQScript</span><span class="o">-&gt;</span><span class="n">InitializeObject</span><span class="p">((</span><span class="n">QScriptObject</span><span class="p">)</span><span class="n">obj</span><span class="p">);</span>
<span class="w"> </span><span class="p">((</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="p">)))</span><span class="o">-&gt;</span><span class="n">obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">obj</span><span class="p">;</span>
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_OBJECT&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
</code></pre>
</div>
<hr />
<p><code>object()</code> createa a new object from the passed class. It initializes it and returns it to Lua.</p></div></div>
<br />
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="codehilite">
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Class</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">parentluaclass</span><span class="p">;</span>
<span class="w"> </span><span class="n">QClass</span><span class="o">*</span><span class="w"> </span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_gettop</span><span class="p">(</span><span class="n">L</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_gettop</span><span class="p">(</span><span class="n">L</span><span class="p">)</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="n">parentluaclass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_checkudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_CLASS&quot;</span><span class="p">)))</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here</span>
<span class="w"> </span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">parentluaclass</span><span class="o">-&gt;</span><span class="n">cls</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">luaclass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="p">));</span>
<span class="w"> </span><span class="n">luaclass</span><span class="o">-&gt;</span><span class="n">creator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QClassCreator</span><span class="p">();</span>
<span class="w"> </span><span class="n">QClassCreator</span><span class="o">*</span><span class="w"> </span><span class="n">child</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">luaclass</span><span class="o">-&gt;</span><span class="n">creator</span><span class="p">;</span>
<span class="w"> </span><span class="n">child</span><span class="o">-&gt;</span><span class="n">parent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cls</span><span class="p">;</span>
<span class="w"> </span><span class="n">child</span><span class="o">-&gt;</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_CLASS_CREATOR&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
</code></pre>
</div>
<hr />
<p><code>class()</code> creates a new class creator. It takes an optional class as the parent class and returns a new QClassCreator struct.</p></div></div>
<br />
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="codehilite">
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Class_Creator_NewIndex</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">luaclass</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="n">luaclass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_checkudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_CLASS_CREATOR&quot;</span><span class="p">)))</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here</span>
<span class="w"> </span><span class="n">QClassCreator</span><span class="o">*</span><span class="w"> </span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">luaclass</span><span class="o">-&gt;</span><span class="n">creator</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isfunction</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">QClassCreatorMethod</span><span class="o">*</span><span class="w"> </span><span class="n">meth</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QClassCreatorMethod</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">QClassCreatorMethod</span><span class="p">));</span>
<span class="w"> </span><span class="n">lua_pushvalue</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="n">QCallback</span><span class="o">*</span><span class="w"> </span><span class="n">callback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QCallback</span><span class="p">();</span>
<span class="w"> </span><span class="n">callback</span><span class="o">-&gt;</span><span class="n">callback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_ref</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">LUA_REGISTRYINDEX</span><span class="p">);</span>
<span class="w"> </span><span class="n">callback</span><span class="o">-&gt;</span><span class="n">lang</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">current_interface</span><span class="p">;</span>
<span class="w"> </span><span class="n">callback</span><span class="o">-&gt;</span><span class="n">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">L</span><span class="p">;</span>
<span class="w"> </span><span class="n">callback</span><span class="o">-&gt;</span><span class="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">meth</span><span class="o">-&gt;</span><span class="n">scripting_func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">callback</span><span class="p">;</span>
<span class="w"> </span><span class="n">meth</span><span class="o">-&gt;</span><span class="n">is_scripting</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tostring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
<span class="w"> </span><span class="n">meth</span><span class="o">-&gt;</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">char</span><span class="p">[</span><span class="n">strlen</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">];</span>
<span class="w"> </span><span class="n">strcpy</span><span class="p">(</span><span class="k">const_cast</span><span class="o">&lt;</span><span class="kt">char</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">meth</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">),</span><span class="w"> </span><span class="n">name</span><span class="p">);</span>
<span class="w"> </span><span class="n">meth</span><span class="o">-&gt;</span><span class="n">is_private</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="p">;</span>
<span class="w"> </span><span class="n">meth</span><span class="o">-&gt;</span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">meth</span><span class="o">-&gt;</span><span class="n">params_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">cls</span><span class="o">-&gt;</span><span class="n">methods</span><span class="p">.</span><span class="n">AddToTail</span><span class="p">(</span><span class="n">meth</span><span class="p">);</span>
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">QVar</span><span class="o">*</span><span class="w"> </span><span class="n">var</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QVar</span><span class="p">();</span>
<span class="w"> </span><span class="n">var</span><span class="o">-&gt;</span><span class="n">is_private</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="p">;</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tostring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
<span class="w"> </span><span class="n">var</span><span class="o">-&gt;</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">char</span><span class="p">[</span><span class="n">strlen</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">];</span>
<span class="w"> </span><span class="n">strcpy</span><span class="p">(</span><span class="k">const_cast</span><span class="o">&lt;</span><span class="kt">char</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">var</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">),</span><span class="w"> </span><span class="n">name</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">var</span><span class="o">-&gt;</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_String</span><span class="p">;</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">str</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tolstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<span class="w"> </span><span class="n">var</span><span class="o">-&gt;</span><span class="n">size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="o">&lt;&lt;</span><span class="n">Qlog2</span><span class="p">(</span><span class="n">strlen</span><span class="p">(</span><span class="n">str</span><span class="p">));</span>
<span class="w"> </span><span class="n">var</span><span class="o">-&gt;</span><span class="n">defaultval</span><span class="p">.</span><span class="n">value_modifiable_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="n">var</span><span class="o">-&gt;</span><span class="n">size</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="n">strcpy</span><span class="p">(</span><span class="n">var</span><span class="o">-&gt;</span><span class="n">defaultval</span><span class="p">.</span><span class="n">value_modifiable_string</span><span class="p">,</span><span class="w"> </span><span class="n">str</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isinteger</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">var</span><span class="o">-&gt;</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Int</span><span class="p">;</span>
<span class="w"> </span><span class="n">var</span><span class="o">-&gt;</span><span class="n">defaultval</span><span class="p">.</span><span class="n">value_int</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tointeger</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isnumber</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">var</span><span class="o">-&gt;</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Float</span><span class="p">;</span>
<span class="w"> </span><span class="n">var</span><span class="o">-&gt;</span><span class="n">defaultval</span><span class="p">.</span><span class="n">value_float</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tonumber</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isboolean</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">var</span><span class="o">-&gt;</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Bool</span><span class="p">;</span>
<span class="w"> </span><span class="n">var</span><span class="o">-&gt;</span><span class="n">defaultval</span><span class="p">.</span><span class="n">value_bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">bool</span><span class="p">)</span><span class="n">lua_toboolean</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">var</span><span class="o">-&gt;</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_None</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">cls</span><span class="o">-&gt;</span><span class="n">vars</span><span class="p">.</span><span class="n">AddToTail</span><span class="p">(</span><span class="n">var</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</code></pre>
</div>
<hr />
<p>Creates a variable or function in the <code>QClassCreator</code> struct.</p></div></div>
<br />
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="codehilite">
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Finish</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">luaclass</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="n">luaclass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_checkudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_CLASS_CREATOR&quot;</span><span class="p">)))</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here</span>
<span class="w"> </span><span class="n">QClassCreator</span><span class="o">*</span><span class="w"> </span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">luaclass</span><span class="o">-&gt;</span><span class="n">creator</span><span class="p">;</span>
<span class="w"> </span><span class="n">luaclass</span><span class="o">-&gt;</span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QClass</span><span class="o">*</span><span class="p">)</span><span class="n">g_pQScript</span><span class="o">-&gt;</span><span class="n">FinishClass</span><span class="p">((</span><span class="n">QScriptClassCreator</span><span class="p">)</span><span class="n">cls</span><span class="p">);</span>
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_CLASS&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre>
</div>
<hr />
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div></div></div>
<p><br /></p>
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="codehilite">
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Export</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">lua_Debug</span><span class="w"> </span><span class="n">dbg</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_getstack</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">dbg</span><span class="p">))</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here, function can only be executed in global context</span>
<span class="w"> </span><span class="n">QInstance</span><span class="o">*</span><span class="w"> </span><span class="n">ins</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QInstance</span><span class="o">*</span><span class="p">)</span><span class="n">lua_touserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">lua_upvalueindex</span><span class="p">(</span><span class="mi">1</span><span class="p">));</span>
<span class="w"> </span><span class="n">QFunction</span><span class="o">*</span><span class="w"> </span><span class="n">func</span><span class="p">;</span>
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">usr</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">usr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_testudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_OBJECT&quot;</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">lua_pushglobaltable</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
<span class="w"> </span><span class="n">lua_pushnil</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">lua_next</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="mi">-2</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span><span class="w"> </span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="p">(</span><span class="n">usr</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_testudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_OBJECT&quot;</span><span class="p">)))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">QExport</span><span class="o">*</span><span class="w"> </span><span class="n">exp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QExport</span><span class="p">();</span>
<span class="w"> </span><span class="n">exp</span><span class="o">-&gt;</span><span class="n">obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">usr</span><span class="o">-&gt;</span><span class="n">obj</span><span class="p">;</span>
<span class="w"> </span><span class="n">exp</span><span class="o">-&gt;</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QExport_Object</span><span class="p">;</span>
<span class="w"> </span><span class="n">exp</span><span class="o">-&gt;</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tostring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-2</span><span class="p">);</span>
<span class="w"> </span><span class="n">ins</span><span class="o">-&gt;</span><span class="n">exports</span><span class="p">.</span><span class="n">AddToTail</span><span class="p">(</span><span class="n">exp</span><span class="p">);</span>
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="c1">// TODO : error here, must be a global variable</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">usr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_testudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_CLASS&quot;</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">lua_pushglobaltable</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
<span class="w"> </span><span class="n">lua_pushnil</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">lua_next</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-2</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="p">(</span><span class="n">usr</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_testudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_CLASS&quot;</span><span class="p">)))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">QExport</span><span class="o">*</span><span class="w"> </span><span class="n">exp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QExport</span><span class="p">();</span>
<span class="w"> </span><span class="n">exp</span><span class="o">-&gt;</span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">usr</span><span class="o">-&gt;</span><span class="n">cls</span><span class="p">;</span>
<span class="w"> </span><span class="n">exp</span><span class="o">-&gt;</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QExport_Class</span><span class="p">;</span>
<span class="w"> </span><span class="n">exp</span><span class="o">-&gt;</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tostring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-2</span><span class="p">);</span>
<span class="w"> </span><span class="n">ins</span><span class="o">-&gt;</span><span class="n">exports</span><span class="p">.</span><span class="n">AddToTail</span><span class="p">(</span><span class="n">exp</span><span class="p">);</span>
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="c1">// TODO : error here, must be a global variable</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isfunction</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">lua_pushglobaltable</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
<span class="w"> </span><span class="n">lua_pushnil</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">lua_next</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-2</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isfunction</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">lua_rawequal</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QFunction</span><span class="p">();</span>
<span class="w"> </span><span class="n">func</span><span class="o">-&gt;</span><span class="n">always_zero</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">func</span><span class="o">-&gt;</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QFunction_Scripting</span><span class="p">;</span>
<span class="w"> </span><span class="n">QCallback</span><span class="o">*</span><span class="w"> </span><span class="n">callback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QCallback</span><span class="p">();</span>
<span class="w"> </span><span class="n">lua_pushvalue</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="n">callback</span><span class="o">-&gt;</span><span class="n">callback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_ref</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">LUA_REGISTRYINDEX</span><span class="p">);</span>
<span class="w"> </span><span class="n">callback</span><span class="o">-&gt;</span><span class="n">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">L</span><span class="p">;</span>
<span class="w"> </span><span class="n">callback</span><span class="o">-&gt;</span><span class="n">lang</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">current_interface</span><span class="p">;</span>
<span class="w"> </span><span class="n">callback</span><span class="o">-&gt;</span><span class="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">func</span><span class="o">-&gt;</span><span class="n">func_scripting</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">callback</span><span class="p">;</span>
<span class="w"> </span><span class="n">QExport</span><span class="o">*</span><span class="w"> </span><span class="n">exp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QExport</span><span class="p">();</span>
<span class="w"> </span><span class="n">exp</span><span class="o">-&gt;</span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">func</span><span class="p">;</span>
<span class="w"> </span><span class="n">exp</span><span class="o">-&gt;</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QExport_Function</span><span class="p">;</span>
<span class="w"> </span><span class="n">exp</span><span class="o">-&gt;</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tostring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-2</span><span class="p">);</span>
<span class="w"> </span><span class="n">ins</span><span class="o">-&gt;</span><span class="n">exports</span><span class="p">.</span><span class="n">AddToTail</span><span class="p">(</span><span class="n">exp</span><span class="p">);</span>
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="c1">// TODO : error here, must be a global variable</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="c1">// TODO : error here, must be a QObject, QClass or QFunction</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre>
</div>
<hr />
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div></div></div>
<p><br /></p>
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="codehilite">
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Import</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">lua_Debug</span><span class="w"> </span><span class="n">dbg</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_getstack</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">dbg</span><span class="p">))</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here, function can only be executed in global context</span>
<span class="w"> </span><span class="n">QMod</span><span class="o">*</span><span class="w"> </span><span class="n">mod</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QMod</span><span class="o">*</span><span class="p">)</span><span class="n">lua_touserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">lua_upvalueindex</span><span class="p">(</span><span class="mi">1</span><span class="p">));</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">path</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">luaL_checkstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">)))</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here, string is required</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">IsValidPath</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here, nuh uh</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">mod</span><span class="o">-&gt;</span><span class="n">instances</span><span class="p">.</span><span class="n">Defined</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">mod</span><span class="o">-&gt;</span><span class="n">instances</span><span class="p">[</span><span class="n">path</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">g_pQScript</span><span class="o">-&gt;</span><span class="n">LoadFile</span><span class="p">(</span><span class="n">path</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">QInstance</span><span class="o">*</span><span class="w"> </span><span class="n">inst</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mod</span><span class="o">-&gt;</span><span class="n">instances</span><span class="p">[</span><span class="n">path</span><span class="p">];</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">inst</span><span class="p">)</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here, most likely a import loop or bad path</span>
<span class="w"> </span><span class="n">CUtlVector</span><span class="o">&lt;</span><span class="n">QExport</span><span class="o">*&gt;*</span><span class="w"> </span><span class="n">exports</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">mod</span><span class="o">-&gt;</span><span class="n">instances</span><span class="p">[</span><span class="n">path</span><span class="p">]</span><span class="o">-&gt;</span><span class="n">exports</span><span class="p">;</span>
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span>
<span class="w"> </span><span class="n">lua_createtable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">exports</span><span class="o">-&gt;</span><span class="n">Count</span><span class="p">());</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">exports</span><span class="o">-&gt;</span><span class="n">Count</span><span class="p">();</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">QExport</span><span class="o">*</span><span class="w"> </span><span class="n">qexport</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">exports</span><span class="o">-&gt;</span><span class="n">Element</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="w"> </span><span class="n">lua_pushstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">qexport</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">);</span>
<span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">qexport</span><span class="o">-&gt;</span><span class="n">type</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QExport_Object</span><span class="p">:</span>
<span class="w"> </span><span class="n">ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="p">));</span>
<span class="w"> </span><span class="n">ud</span><span class="o">-&gt;</span><span class="n">obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">qexport</span><span class="o">-&gt;</span><span class="n">obj</span><span class="p">;</span>
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_OBJECT&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QExport_Class</span><span class="p">:</span>
<span class="w"> </span><span class="n">ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="p">));</span>
<span class="w"> </span><span class="n">ud</span><span class="o">-&gt;</span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">qexport</span><span class="o">-&gt;</span><span class="n">cls</span><span class="p">;</span>
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_CLASS&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QExport_Function</span><span class="p">:</span>
<span class="w"> </span><span class="n">ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="p">));</span>
<span class="w"> </span><span class="n">ud</span><span class="o">-&gt;</span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">qexport</span><span class="o">-&gt;</span><span class="n">func</span><span class="p">;</span>
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_FUNCTION&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">lua_settable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-3</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
</code></pre>
</div>
<hr />
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div></div></div>
<p><br /></p>
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
<div class="codehilite">
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Function_Call</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">usr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_checkudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">&quot;QSCRIPT_FUNCTION&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">usr</span><span class="p">)</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">QFunction</span><span class="o">*</span><span class="w"> </span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">usr</span><span class="o">-&gt;</span><span class="n">func</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">func</span><span class="o">-&gt;</span><span class="n">always_zero</span><span class="p">)</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">QArgs</span><span class="o">*</span><span class="w"> </span><span class="n">args</span><span class="p">;</span>
<span class="w"> </span><span class="n">QReturn</span><span class="w"> </span><span class="n">ret</span><span class="p">;</span>
<span class="w"> </span><span class="n">lua_remove</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_gettop</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
<span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">func</span><span class="o">-&gt;</span><span class="n">type</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QFunction_Module</span><span class="p">:</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">LuaActualCallback</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">func</span><span class="p">);</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QFunction_Native</span><span class="p">:</span>
<span class="w"> </span><span class="n">Warning</span><span class="p">(</span><span class="s">&quot;Calling QFunction_Native is unsuppported in Lua yet (you can add it if you want at line %i in file luainterface.cpp)</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">__LINE__</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QFunction_Scripting</span><span class="p">:</span>
<span class="w"> </span><span class="n">args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QArgs</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="n">count</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">QArg</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">QArgs</span><span class="p">));</span>
<span class="w"> </span><span class="n">args</span><span class="o">-&gt;</span><span class="n">count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">count</span><span class="p">;</span>
<span class="w"> </span><span class="n">args</span><span class="o">-&gt;</span><span class="n">self</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">count</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">nusr</span><span class="p">;</span>
<span class="w"> </span><span class="k">union</span><span class="w"> </span><span class="nc">QValue</span><span class="w"> </span><span class="n">val</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isinteger</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">args</span><span class="o">-&gt;</span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Int</span><span class="p">;</span>
<span class="w"> </span><span class="n">val</span><span class="p">.</span><span class="n">value_int</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tointeger</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isnumber</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">args</span><span class="o">-&gt;</span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Float</span><span class="p">;</span>
<span class="w"> </span><span class="n">val</span><span class="p">.</span><span class="n">value_float</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="p">)</span><span class="n">lua_tonumber</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isboolean</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">args</span><span class="o">-&gt;</span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Bool</span><span class="p">;</span>
<span class="w"> </span><span class="n">val</span><span class="p">.</span><span class="n">value_bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_toboolean</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">args</span><span class="o">-&gt;</span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_String</span><span class="p">;</span>
<span class="w"> </span><span class="n">val</span><span class="p">.</span><span class="n">value_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tolstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isfunction</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">args</span><span class="o">-&gt;</span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Function</span><span class="p">;</span>
<span class="w"> </span><span class="n">QCallback</span><span class="o">*</span><span class="w"> </span><span class="n">callback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QCallback</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">QCallback</span><span class="p">));</span>
<span class="w"> </span><span class="n">lua_pushvalue</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="n">callback</span><span class="o">-&gt;</span><span class="n">callback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_ref</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">LUA_REGISTRYINDEX</span><span class="p">);</span>
<span class="w"> </span><span class="n">callback</span><span class="o">-&gt;</span><span class="n">lang</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">current_interface</span><span class="p">;</span>
<span class="w"> </span><span class="n">callback</span><span class="o">-&gt;</span><span class="n">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">L</span><span class="p">;</span>
<span class="w"> </span><span class="n">QFunction</span><span class="o">*</span><span class="w"> </span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QFunction</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">QFunction</span><span class="p">));</span>
<span class="w"> </span><span class="n">func</span><span class="o">-&gt;</span><span class="n">always_zero</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">func</span><span class="o">-&gt;</span><span class="n">func_scripting</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">callback</span><span class="p">;</span>
<span class="w"> </span><span class="n">func</span><span class="o">-&gt;</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QFunction_Scripting</span><span class="p">;</span>
<span class="w"> </span><span class="n">val</span><span class="p">.</span><span class="n">value_function</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QScriptFunction</span><span class="p">)</span><span class="n">func</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">nusr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_testudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_OBJECT&quot;</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">args</span><span class="o">-&gt;</span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Object</span><span class="p">;</span>
<span class="w"> </span><span class="n">val</span><span class="p">.</span><span class="n">value_object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QScriptObject</span><span class="p">)</span><span class="n">nusr</span><span class="o">-&gt;</span><span class="n">obj</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">args</span><span class="o">-&gt;</span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">val</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">val</span><span class="p">;</span>
<span class="w"> </span><span class="k">continue</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">QReturn</span><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">((</span><span class="n">IBaseScriptingInterface</span><span class="o">*</span><span class="p">)</span><span class="n">func</span><span class="o">-&gt;</span><span class="n">func_scripting</span><span class="o">-&gt;</span><span class="n">lang</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">CallCallback</span><span class="p">(</span><span class="n">func</span><span class="o">-&gt;</span><span class="n">func_scripting</span><span class="p">,</span><span class="w"> </span><span class="n">args</span><span class="p">);</span>
<span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">ret</span><span class="p">.</span><span class="n">type</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QType_Bool</span><span class="p">:</span>
<span class="w"> </span><span class="n">lua_pushboolean</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">ret</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">value_bool</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QType_Float</span><span class="p">:</span>
<span class="w"> </span><span class="n">lua_pushnumber</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">ret</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">value_float</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QType_String</span><span class="p">:</span>
<span class="w"> </span><span class="n">lua_pushstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">ret</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">value_string</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QType_Int</span><span class="p">:</span>
<span class="w"> </span><span class="n">lua_pushinteger</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">ret</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">value_int</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QType_Object</span><span class="p">:</span>
<span class="w"> </span><span class="p">((</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="p">)))</span><span class="o">-&gt;</span><span class="n">obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QObject</span><span class="o">*</span><span class="p">)</span><span class="n">ret</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">value_object</span><span class="p">;</span>
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;QSCRIPT_OBJECT&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="k">default</span><span class="o">:</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QFunction_Void</span><span class="p">:</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre>
</div>
<hr />
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div></div></div>
</div>

View File

@@ -525,8 +525,6 @@ th, td
<hr />
<div class="framed"markdown="1"><div class="framedinside"><p><a href="/wiki/QScript/Lua/Intro.html">&lt;- Prev</a> | <a href="/wiki/QScript/Lua/Objects.html">Next -></a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p><a href="/wiki/QScript/Lua/Intro.html">&lt;- Prev</a> | <a href="/wiki/QScript/Lua/Objects.html">Next -></a></p></div></div>
<div class="framed"><div class="framedinside"><p><a href="/wiki/QScript/Lua/Intro.html">&lt;- Prev</a> | <a href="/wiki/QScript/Lua/Objects.html">Next -></a></p></div></div>
</div>

View File

@@ -506,8 +506,6 @@ th, td
<hr />
<div class="framed"markdown="1"><div class="framedinside"><p><a href="/wiki/QScript/Lua/Objects.html">&lt;- Prev</a> | <a href="/wiki/QScript/Lua/Imports.html">Next -></a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p><a href="/wiki/QScript/Lua/Objects.html">&lt;- Prev</a> | <a href="/wiki/QScript/Lua/Imports.html">Next -></a></p></div></div>
<div class="framed"><div class="framedinside"><p><a href="/wiki/QScript/Lua/Objects.html">&lt;- Prev</a> | <a href="/wiki/QScript/Lua/Imports.html">Next -></a></p></div></div>
</div>

View File

@@ -503,8 +503,6 @@ th, td
<hr />
<div class="framed"markdown="1"><div class="framedinside"><p><a href="/wiki/QScript/Lua/Exports.html">&lt;- Prev</a> | <a href="/wiki/QScript/Tutorial/Chapter1.html">Go back to the QScript Tutorial</a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p><a href="/wiki/QScript/Lua/Exports.html">&lt;- Prev</a> | <a href="/wiki/QScript/Tutorial/Chapter1.html">Go back to the QScript Tutorial</a></p></div></div>
<div class="framed"><div class="framedinside"><p><a href="/wiki/QScript/Lua/Exports.html">&lt;- Prev</a> | <a href="/wiki/QScript/Tutorial/Chapter1.html">Go back to the QScript Tutorial</a></p></div></div>
</div>

View File

@@ -494,8 +494,6 @@ th, td
<hr />
<div class="framed"markdown="1"><div class="framedinside"><p><a href="/wiki/QScript/Lua/Classes.html">&lt;- Prev</a> | <a href="/wiki/QScript/Lua/Exports.html">Next -></a></p></div></div>
<div class="framed"markdown="1"><div class="framedinside" markdown="1"><p><a href="/wiki/QScript/Lua/Classes.html">&lt;- Prev</a> | <a href="/wiki/QScript/Lua/Exports.html">Next -></a></p></div></div>
<div class="framed"><div class="framedinside"><p><a href="/wiki/QScript/Lua/Classes.html">&lt;- Prev</a> | <a href="/wiki/QScript/Lua/Exports.html">Next -></a></p></div></div>
</div>

View File

@@ -224,4 +224,459 @@ int Lua_QScript_New_Index(lua_State* L)
}
```
---
This sets a value in the QObject. It checks if the value accessed actually exists in the object, and if so, sets the objects value to the given one.
_$
<br />
$_INLINEFRAME
$_SMALL luainterface/luainterface.cpp _$
```cpp
int Lua_QScript_Object(lua_State* L)
{
Lua_Userdata* luaclass;
if(!(luaclass = (Lua_Userdata*)luaL_checkudata(L,1,"QSCRIPT_CLASS")))
return 0;
QClass* cls = luaclass->cls;
QObject* obj = (QObject*)malloc(sizeof(QObject)+cls->vars_count*sizeof(QValue));
obj->cls = cls;
g_pQScript->InitializeObject((QScriptObject)obj);
((Lua_Userdata*)lua_newuserdata(L, sizeof(Lua_Userdata)))->obj = obj;
luaL_setmetatable(L, "QSCRIPT_OBJECT");
return 1;
}
```
---
`object()` createa a new object from the passed class. It initializes it and returns it to Lua.
_$
<br />
$_INLINEFRAME
$_SMALL luainterface/luainterface.cpp _$
```cpp
int Lua_QScript_Class(lua_State* L)
{
Lua_Userdata* parentluaclass;
QClass* cls = 0;
if (lua_gettop(L) == 0)
return 0; // TODO : error here
if (lua_gettop(L) > 0)
{
if (!(parentluaclass = (Lua_Userdata*)luaL_checkudata(L, 1, "QSCRIPT_CLASS")))
return 0; // TODO : error here
cls = parentluaclass->cls;
}
Lua_Userdata* luaclass = (Lua_Userdata*)lua_newuserdata(L, sizeof(Lua_Userdata));
luaclass->creator = new QClassCreator();
QClassCreator* child = luaclass->creator;
child->parent = cls;
child->name = 0;
luaL_setmetatable(L, "QSCRIPT_CLASS_CREATOR");
return 1;
}
```
---
`class()` creates a new class creator. It takes an optional class as the parent class and returns a new QClassCreator struct.
_$
<br />
$_INLINEFRAME
$_SMALL luainterface/luainterface.cpp _$
```cpp
int Lua_QScript_Class_Creator_NewIndex(lua_State* L)
{
Lua_Userdata* luaclass;
if (!(luaclass = (Lua_Userdata*)luaL_checkudata(L, 1, "QSCRIPT_CLASS_CREATOR")))
return 0; // TODO : error here
QClassCreator* cls = luaclass->creator;
if (lua_isfunction(L, 3))
{
QClassCreatorMethod* meth = (QClassCreatorMethod*)lua_newuserdata(L, sizeof(QClassCreatorMethod));
lua_pushvalue(L, 3);
QCallback* callback = new QCallback();
callback->callback = (void*)luaL_ref(L, LUA_REGISTRYINDEX);
callback->lang = current_interface;
callback->env = L;
callback->object = 0;
meth->scripting_func = callback;
meth->is_scripting = true;
const char* name = lua_tostring(L, 2);
meth->name = new char[strlen(name)+1];
strcpy(const_cast<char*>(meth->name), name);
meth->is_private = false;
meth->params = 0;
meth->params_count = 0;
cls->methods.AddToTail(meth);
lua_pop(L, 1);
return 0;
}
else
{
QVar* var = new QVar();
var->is_private = false;
const char* name = lua_tostring(L, 2);
var->name = new char[strlen(name)+1];
strcpy(const_cast<char*>(var->name), name);
if (lua_isstring(L, -1))
{
var->type = QType_String;
const char* str = lua_tolstring(L, 3, 0);
var->size = 1<<Qlog2(strlen(str));
var->defaultval.value_modifiable_string = (char*)malloc(var->size+1);
strcpy(var->defaultval.value_modifiable_string, str);
}
else if (lua_isinteger(L, -1))
{
var->type = QType_Int;
var->defaultval.value_int = lua_tointeger(L, 3);
}
else if (lua_isnumber(L, -1))
{
var->type = QType_Float;
var->defaultval.value_float = lua_tonumber(L, 3);
}
else if (lua_isboolean(L, -1))
{
var->type = QType_Bool;
var->defaultval.value_bool = (bool)lua_toboolean(L, 3);
}
else
{
var->type = QType_None;
}
cls->vars.AddToTail(var);
return 0;
}
}
```
---
Creates a variable or function in the `QClassCreator` struct.
_$
<br />
$_INLINEFRAME
$_SMALL luainterface/luainterface.cpp _$
```cpp
int Lua_QScript_Finish(lua_State* L)
{
Lua_Userdata* luaclass;
if (!(luaclass = (Lua_Userdata*)luaL_checkudata(L, 1, "QSCRIPT_CLASS_CREATOR")))
return 0; // TODO : error here
QClassCreator* cls = luaclass->creator;
luaclass->cls = (QClass*)g_pQScript->FinishClass((QScriptClassCreator)cls);
luaL_setmetatable(L, "QSCRIPT_CLASS");
return 0;
}
```
---
{{Stub}}
_$
<br />
$_INLINEFRAME
$_SMALL luainterface/luainterface.cpp _$
```cpp
int Lua_QScript_Export(lua_State* L)
{
lua_Debug dbg;
if (lua_getstack(L, 2, &dbg))
return 0; // TODO : error here, function can only be executed in global context
QInstance* ins = (QInstance*)lua_touserdata(L,lua_upvalueindex(1));
QFunction* func;
Lua_Userdata* usr;
if (usr = (Lua_Userdata*)luaL_testudata(L, 1, "QSCRIPT_OBJECT"))
{
lua_pushglobaltable(L);
lua_pushnil(L);
while (lua_next(L,-2) != 0)
{
if (lua_isuserdata(L, -1) && (usr == (Lua_Userdata*)luaL_testudata(L, -1, "QSCRIPT_OBJECT")))
{
QExport* exp = new QExport();
exp->obj = usr->obj;
exp->type = QExport_Object;
exp->name = lua_tostring(L, -2);
ins->exports.AddToTail(exp);
lua_pop(L, 3);
return 0;
}
lua_pop(L, 1);
}
// TODO : error here, must be a global variable
return 0;
}
else if (usr = (Lua_Userdata*)luaL_testudata(L, 1, "QSCRIPT_CLASS"))
{
lua_pushglobaltable(L);
lua_pushnil(L);
while (lua_next(L, -2) != 0)
{
if (lua_isuserdata(L, -1) && (usr == (Lua_Userdata*)luaL_testudata(L, -1, "QSCRIPT_CLASS")))
{
QExport* exp = new QExport();
exp->cls = usr->cls;
exp->type = QExport_Class;
exp->name = lua_tostring(L, -2);
ins->exports.AddToTail(exp);
lua_pop(L, 3);
return 0;
}
lua_pop(L, 1);
}
// TODO : error here, must be a global variable
return 0;
}
else if (lua_isfunction(L,1))
{
lua_pushglobaltable(L);
lua_pushnil(L);
while (lua_next(L, -2) != 0)
{
if (lua_isfunction(L, -1) && lua_rawequal(L, -1, 1))
{
func = new QFunction();
func->always_zero = 0;
func->type = QFunction_Scripting;
QCallback* callback = new QCallback();
lua_pushvalue(L, 1);
callback->callback = (void*)luaL_ref(L, LUA_REGISTRYINDEX);
callback->env = L;
callback->lang = current_interface;
callback->object = 0;
func->func_scripting = callback;
QExport* exp = new QExport();
exp->func = func;
exp->type = QExport_Function;
exp->name = lua_tostring(L, -2);
ins->exports.AddToTail(exp);
lua_pop(L, 3);
return 0;
}
lua_pop(L, 1);
}
// TODO : error here, must be a global variable
return 0;
}
// TODO : error here, must be a QObject, QClass or QFunction
return 0;
}
```
---
{{Stub}}
_$
<br />
$_INLINEFRAME
$_SMALL luainterface/luainterface.cpp _$
```cpp
int Lua_QScript_Import(lua_State* L)
{
lua_Debug dbg;
if (lua_getstack(L, 2, &dbg))
return 0; // TODO : error here, function can only be executed in global context
QMod* mod = (QMod*)lua_touserdata(L, lua_upvalueindex(1));
const char* path;
if (!(path = luaL_checkstring(L, 1)))
return 0; // TODO : error here, string is required
if (!IsValidPath(path))
return 0; // TODO : error here, nuh uh
if (!mod->instances.Defined(path))
{
mod->instances[path] = 0;
g_pQScript->LoadFile(path);
}
QInstance* inst = mod->instances[path];
if (!inst)
return 0; // TODO : error here, most likely a import loop or bad path
CUtlVector<QExport*>* exports = &mod->instances[path]->exports;
Lua_Userdata* ud;
lua_createtable(L, 0, exports->Count());
for (int i = 0; i < exports->Count(); i++)
{
QExport* qexport = exports->Element(i);
lua_pushstring(L, qexport->name);
switch (qexport->type)
{
case QExport_Object:
ud = (Lua_Userdata*)lua_newuserdata(L, sizeof(Lua_Userdata));
ud->obj = qexport->obj;
luaL_setmetatable(L, "QSCRIPT_OBJECT");
break;
case QExport_Class:
ud = (Lua_Userdata*)lua_newuserdata(L, sizeof(Lua_Userdata));
ud->cls = qexport->cls;
luaL_setmetatable(L, "QSCRIPT_CLASS");
break;
case QExport_Function:
ud = (Lua_Userdata*)lua_newuserdata(L, sizeof(Lua_Userdata));
ud->func = qexport->func;
luaL_setmetatable(L, "QSCRIPT_FUNCTION");
break;
}
lua_settable(L, -3);
}
return 1;
}
```
---
{{Stub}}
_$
<br />
$_INLINEFRAME
$_SMALL luainterface/luainterface.cpp _$
```cpp
int Lua_QScript_Function_Call(lua_State* L)
{
Lua_Userdata* usr = (Lua_Userdata*)luaL_checkudata(L,1,"QSCRIPT_FUNCTION");
if (!usr)
return 0;
QFunction* func = usr->func;
if (func->always_zero)
return 0;
QArgs* args;
QReturn ret;
lua_remove(L, 1);
int count = lua_gettop(L);
switch (func->type)
{
case QFunction_Module:
return LuaActualCallback(L, func);
case QFunction_Native:
Warning("Calling QFunction_Native is unsuppported in Lua yet (you can add it if you want at line %i in file luainterface.cpp)\n", __LINE__);
return 0;
case QFunction_Scripting:
args = (QArgs*)malloc(count * sizeof(QArg) + sizeof(QArgs));
args->count = count;
args->self = 0;
for (int i = 0; i < count; i++)
{
Lua_Userdata* nusr;
union QValue val;
if (lua_isinteger(L, i + 1))
{
args->args[i].type = QType_Int;
val.value_int = lua_tointeger(L, i + 1);
}
else if (lua_isnumber(L, i + 1))
{
args->args[i].type = QType_Float;
val.value_float = (float)lua_tonumber(L, i + 1);
}
else if (lua_isboolean(L, i + 1))
{
args->args[i].type = QType_Bool;
val.value_bool = lua_toboolean(L, i + 1);
}
else if (lua_isstring(L, i + 1))
{
args->args[i].type = QType_String;
val.value_string = lua_tolstring(L, i + 1, 0);
}
else if (lua_isfunction(L, i + 1))
{
args->args[i].type = QType_Function;
QCallback* callback = (QCallback*)malloc(sizeof(QCallback));
lua_pushvalue(L, i + 1);
callback->callback = (void*)luaL_ref(L, LUA_REGISTRYINDEX);
callback->lang = current_interface;
callback->env = L;
QFunction* func = (QFunction*)malloc(sizeof(QFunction));
func->always_zero = 0;
func->func_scripting = callback;
func->type = QFunction_Scripting;
val.value_function = (QScriptFunction)func;
}
else if (nusr = (Lua_Userdata*)luaL_testudata(L, i + 1, "QSCRIPT_OBJECT"))
{
args->args[i].type = QType_Object;
val.value_object = (QScriptObject)nusr->obj;
}
args->args[i].val = val;
continue;
}
QReturn ret = ((IBaseScriptingInterface*)func->func_scripting->lang)->CallCallback(func->func_scripting, args);
switch (ret.type)
{
case QType_Bool:
lua_pushboolean(L, ret.value.value_bool);
return 1;
case QType_Float:
lua_pushnumber(L, ret.value.value_float);
return 1;
case QType_String:
lua_pushstring(L, ret.value.value_string);
return 1;
case QType_Int:
lua_pushinteger(L, ret.value.value_int);
return 1;
case QType_Object:
((Lua_Userdata*)lua_newuserdata(L, sizeof(Lua_Userdata)))->obj = (QObject*)ret.value.value_object;
luaL_setmetatable(L, "QSCRIPT_OBJECT");
return 1;
default:
return 0;
}
case QFunction_Void:
return 0;
}
return 0;
}
```
---
{{Stub}}
_$
$_COMMENT
$_INLINEFRAME
$_SMALL luainterface/luainterface.cpp _$
```cpp
```
---
{{Stub}}
_$
$_INLINEFRAME
$_SMALL luainterface/luainterface.cpp _$
```cpp
```
---
{{Stub}}
_$
_$