Commit a115d76f authored by Vinicius Jarina's avatar Vinicius Jarina
Browse files

Create gh-pages branch via GitHub

parent d0ee9b2b
......@@ -194,11 +194,11 @@ You can use/instantiate any .NET class without any previous registration or anno
<div class="highlight highlight-csharp"><pre> SomeClass obj = <span class="pl-s">new</span> SomeClass (<span class="pl-s1"><span class="pl-pds">"</span>Param<span class="pl-pds">"</span></span>);
state [<span class="pl-s1"><span class="pl-pds">"</span>obj<span class="pl-pds">"</span></span>] = obj; <span class="pl-c">// Create a global value 'obj' of .NET type SomeClass </span>
-- This could be any .NET <span class="pl-st">object</span>, <span class="pl-k">from</span> BCL or <span class="pl-k">from</span> your assemblies</pre></div>
<span class="pl-c">// This could be any .NET object, from BCL or from your assemblies</span></pre></div>
<p>Using .NET assemblies inside Lua:</p>
<p>To acccess any .NET assembly to create objects, events etc inside Lua you need to ask NLua to use CLR as a Lua package.
<p>To access any .NET assembly to create objects, events etc inside Lua you need to ask NLua to use CLR as a Lua package.
To do this just use the method <code>LoadCLRPackage</code> and use the <code>import</code> function inside your Lua script to load the Assembly.</p>
<div class="highlight highlight-csharp"><pre> state.LoadCLRPackage ();
......@@ -206,6 +206,14 @@ To do this just use the method <code>LoadCLRPackage</code> and use the <code>imp
<span class="pl-s1"> import ('System.Web') <span class="pl-pds">"</span></span>);
<span class="pl-c">// import will load any .NET assembly and they will be available inside the Lua context.</span></pre></div>
<p>Creating .NET objects:
To create object you only need to use the class name with the <code>()</code>.</p>
<div class="highlight highlight-csharp"><pre>state.DoString (@<span class="pl-s1"><span class="pl-pds">"</span></span>
<span class="pl-s1"> obj2 = SomeClass() -- you can suppress default values.</span>
<span class="pl-s1"> client = WebClient()</span>
<span class="pl-s1"> <span class="pl-pds">"</span></span>);</pre></div>
<p>Calling instance methods:
To call instance methods you need to use the <code>:</code> notation, you can call methods from objects passed to Lua or to objects created inside the Lua context.</p>
......@@ -219,7 +227,7 @@ To call instance methods you need to use the <code>:</code> notation, you can ca
You can call static methods using only the class name and the <code>.</code> notation from Lua.</p>
<div class="highlight highlight-csharp"><pre> state.DoString (@<span class="pl-s1"><span class="pl-pds">"</span></span>
<span class="pl-s1"> local res4 = SomeClass:StaticMethod(4)</span>
<span class="pl-s1"> local res4 = SomeClass.StaticMethod(4)</span>
<span class="pl-s1"> <span class="pl-pds">"</span></span>);</pre></div>
<p>Calling properties:
......@@ -231,10 +239,10 @@ You can get (or set) any property using <code>.</code> notation from Lua.</p>
<p>All methods, events or property need to be public available, NLua will fail to call non-public members.</p>
<p>If you are using Xamarin.iOS you need to <a href="http://developer.xamarin.com/guides/ios/advanced_topics/linker/"><code>Preserve</code></a> the class you wan't use inside NLua, otherwise the Linker will remove the class from final binary if the class is not in use.</p>
<p>If you are using Xamarin.iOS you need to <a href="http://developer.xamarin.com/guides/ios/advanced_topics/linker/"><code>Preserve</code></a> the class you want to use inside NLua, otherwise the Linker will remove the class from final binary if the class is not in use.</p>
<h2>
<a id="sendboxing" class="anchor" href="#sendboxing" aria-hidden="true"><span class="octicon octicon-link"></span></a>Sendboxing</h2>
<a id="sandboxing" class="anchor" href="#sandboxing" aria-hidden="true"><span class="octicon octicon-link"></span></a>Sandboxing</h2>
<p>There is many ways to sandbox scripts inside your application. I strongly recomend you to use plain Lua to do your sandbox.
You can re-write the <code>import</code> function before load the user script and if the user try to import a .NET assembly nothing will happen.</p>
......@@ -255,6 +263,7 @@ You can re-write the <code>import</code> function before load the user script an
<li>Added __call method to call Actions/Funcs from Lua as Lua functions.</li>
<li>Fixed <a href="https://github.com/NLua/NLua/issues/116">#116</a> problem accessing base class method</li>
<li>Fixed <a href="https://github.com/NLua/NLua/issues/117">#117</a> problem with same method in class and base class</li>
<li>Fixed <a href="https://github.com/NLua/NLua/issues/125">#125</a> calling methods with params keyword.</li>
</ul>
<h2>
......
{"name":"Nlua","tagline":"NLua is the bind between Lua world and the .NET world.","body":"NLua\r\n========\r\n\r\n\r\n[![Logo](https://secure.gravatar.com/avatar/77ecf0fb9d8419be7715c6e822e66562?s=150)]()\r\n\r\nNLua is a fork project of LuaInterface (from Fábio Mascarenhas/Craig Presti).\r\n\r\n[![Cmd](https://raw.github.com/NLua/NLua/master/NLuaCommand.gif)]()\r\n\r\nExample: using NLua from command line.\r\n\r\nNLua allows the usage of Lua from C#, on Windows, Linux, Mac, iOS , Android, Windows Phone 7 and 8.\r\n\r\nUnity3D support branch: [unity3d](https://github.com/Mervill/Unity3D-NLua) by [Riley G](https://github.com/Mervill/Unity3D-NLua).\r\n\r\n [1]: https://www.dropbox.com/s/w99igtc12uocq4k/NLua.OSX.zip\r\n [2]: http://nvlabs.github.com/cub/download-icon.png (Download for OSX)\r\n\r\n [3]: https://www.dropbox.com/s/s3xte19719446lx/NLua.iOS.zip\r\n [4]: http://nvlabs.github.com/cub/download-icon.png (Download for iOS)\r\n\r\n\r\n [5]: https://www.dropbox.com/s/mjet2sh67e7y6xo/NLua.Android.zip\r\n [6]: http://nvlabs.github.com/cub/download-icon.png (Download for Android)\r\n\r\n [7]: https://www.dropbox.com/s/jkr1pnwvqw6w0r8/NLua.Win32.zip\r\n [8]: http://nvlabs.github.com/cub/download-icon.png (Download for Win32)\r\n\r\n [9]: https://www.dropbox.com/s/xraxkgi2kuwbu4a/NLua.Win64.zip\r\n [10]: http://nvlabs.github.com/cub/download-icon.png (Download for Win64)\r\n \r\n [11]: https://www.dropbox.com/s/do8m3929mf0pwff/NLua.NoPInvoke.zip\r\n [12]: http://nvlabs.github.com/cub/download-icon.png (Download Pure C# - No P/Invoke)\r\n\r\n [13]: https://www.dropbox.com/s/c08wphdmk5o7tdx/NLua.WP7.zip\r\n [14]: http://nvlabs.github.com/cub/download-icon.png (Download for Windows Phone 7)\r\n\r\n [15]: https://www.dropbox.com/s/2pva1tyxpnn7feb/NLua.WPSL8.zip\r\n [16]: http://nvlabs.github.com/cub/download-icon.png (Download for Windows Phone Silverlight 8 (ARM+x86))\r\n \r\n [17]: https://www.dropbox.com/s/nonijkic8216f7l/NLua.WinRT.zip\r\n [18]: http://nvlabs.github.com/cub/download-icon.png (Download for Windows Phone 8 (RT) (ARM+x86))\r\n \r\n [19]: https://dl.dropboxusercontent.com/u/17523659/NLua.Unity3D.zip\r\n [20]: http://nvlabs.github.com/cub/download-icon.png (Download for Unity3D)\r\n \r\n \r\n| | Build Status | Download |\r\n| :------ | ------: | :------: |\r\n| **Linux** | [![Linux](https://travis-ci.org/NLua/NLua.svg?branch=master)](https://travis-ci.org/NLua/NLua) |\r\n| **OSX** | [![OSX](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_OSX)](http://codefoco.zapto.org:8085/job/NLua_OSX/) | [![dwn_osx][2]][1] |\r\n| **iOS** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_iOS)](http://codefoco.zapto.org:8085/view/X/job/NLua_iOS/) | [![dwn_ios][4]][3] |\r\n| **Android** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_Android)](http://codefoco.zapto.org:8085/view/X/job/NLua_Android/) | [![dwn_android][6]][5] |\r\n| **Win32** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_Windows)](http://codefoco.zapto.org:8085/view/X/job/NLua_Windows/) | [![dwn_w32][8]][7] |\r\n| **Win64** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_Win64)](http://codefoco.zapto.org:8085/view/X/job/NLua_Win64/) | [![dwn_w64][10]][9] |\r\n| **.NET Pure C#** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_WinSafe)](http://codefoco.zapto.org:8085/view/X/job/NLua_WinSafe/) | [![dwn_winsafe][12]][11] |\r\n| **WP8 (Silverlight)** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_WPSL8)](http://codefoco.zapto.org:8085/view/X/job/NLua_WinSafe/) | [![dwn_wpsl8][16]][15] |\r\n| **WP8 (WinRT)** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_WPSL8)](http://codefoco.zapto.org:8085/view/X/job/NLua_WP8/) | [![dwn_wp8][18]][17] |\r\n| **Windows Phone 7** | | [![dwn_wp7][14]][13] |\r\n| **Unity3D** | | [![dwn_unity3d][20]][19] |\r\n\r\nExample:\r\nYou can use/instantiate any .NET class without any previous registration or annotation. \r\n```csharp\r\n\tpublic class SomeClass\r\n\t{\r\n\t\tpublic string MyProperty {get; private set;}\r\n\t\t\r\n\t\tpublic SomeClass (string param1 = \"defaulValue\")\r\n\t\t{\r\n\t\t\tMyProperty = param1;\r\n\t\t}\r\n\t\t\r\n\t\tpublic int Func1 ()\r\n\t\t{\r\n\t\t\treturn 32;\r\n\t\t}\r\n\t\t\r\n\t\tpublic string AnotherFunc (int val1, string val2)\r\n\t\t{\r\n\t\t\treturn \"Some String\";\r\n\t\t}\r\n\t\t\r\n\t\tpublic static string StaticMethod (int param)\r\n\t\t{\r\n\t\t\treturn \"Return of Static Method\";\r\n\t\t}\r\n\r\n```\r\n\r\nCreating Lua state:\r\n\r\n```csharp\r\n\tusing NLua;\r\n\t\r\n\tLua state = new Lua ()\r\n\r\n```\r\n\r\nEvaluating simple expressions:\r\n```csharp\r\n\tvar res = state.DoString (\"return 10 + 3*(5 + 2)\")[0] as double;\r\n\t// Lua can return multiple values, for this reason DoString return a array of objects\r\n```\r\n\r\nPassing raw values to the state:\r\n\r\n```csharp\r\n\tdouble val = 12.0;\r\n\tstate [\"x\"] = val; // Create a global value 'x' \r\n\tvar res = state.DoString (\"return 10 + x*(5 + 2)\")[0] as double;\r\n```\r\n\r\n\r\nRetrieving global values:\r\n\r\n```csharp\r\n\tstate.DoString (\"y = 10 + x*(5 + 2)\");\r\n\tvar y = state [\"y\"] as double; -- Retrieve the value of y\r\n```\r\n\r\nRetrieving Lua functions:\r\n\r\n```csharp\r\n\tstate.DoString (@\"\r\n\tfunction ScriptFunc (val1, val2)\r\n\t\tif val1 > val2 then\r\n\t\t\treturn val1 + 1\r\n\t\telse\r\n\t\t\treturn val2 - 1\r\n\t\tend\r\n\tend\r\n\t\");\r\n\tvar scriptFunc = state [\"ScriptFunc\"] as LuaFunction;\r\n\tvar res = (int)scriptFunc.Call (3, 5).First ();\r\n\t// LuaFunction.Call will also return a array of objects, since a Lua function\r\n\t// can return multiple values\r\n```\r\n\r\n##Using the .NET objects.##\r\n\r\nPassing .NET objects to the state:\r\n\r\n```csharp\r\n\tSomeClass obj = new SomeClass (\"Param\");\r\n\tstate [\"obj\"] = obj; // Create a global value 'obj' of .NET type SomeClass \r\n\t-- This could be any .NET object, from BCL or from your assemblies\r\n```\r\n\r\nUsing .NET assemblies inside Lua:\r\n\r\nTo acccess any .NET assembly to create objects, events etc inside Lua you need to ask NLua to use CLR as a Lua package.\r\nTo do this just use the method `LoadCLRPackage` and use the `import` function inside your Lua script to load the Assembly.\r\n\r\n```csharp\r\n\tstate.LoadCLRPackage ();\r\n\tstate.DoString (@\" import ('MyAssembly.exe', 'MyNamespace') \r\n\t\t\t import ('System.Web') \");\r\n\t// import will load any .NET assembly and they will be available inside the Lua context.\r\n```\r\n\r\nCalling instance methods:\r\nTo call instance methods you need to use the `:` notation, you can call methods from objects passed to Lua or to objects created inside the Lua context.\r\n\r\n```csharp\r\n\tstate.DoString (@\"\r\n\tlocal res1 = obj:Func1()\r\n\tlocal res2 = obj2:AnotherFunc (10, 'hello')\r\n\tlocal res3 = client:DownloadString('http://nlua.org')\r\n\t\");\r\n```\r\n\r\nCalling static methods:\r\nYou can call static methods using only the class name and the `.` notation from Lua.\r\n\r\n```csharp\r\n\tstate.DoString (@\"\r\n\tlocal res4 = SomeClass:StaticMethod(4)\r\n\t\");\r\n```\r\n\r\nCalling properties:\r\nYou can get (or set) any property using `.` notation from Lua.\r\n\r\n```csharp\r\n\tstate.DoString (@\"\r\n\tlocal res5 = obj.MyProperty\r\n\t\");\r\n```\r\n\r\nAll methods, events or property need to be public available, NLua will fail to call non-public members.\r\n\r\nIf you are using Xamarin.iOS you need to [`Preserve`](http://developer.xamarin.com/guides/ios/advanced_topics/linker/) the class you wan't use inside NLua, otherwise the Linker will remove the class from final binary if the class is not in use.\r\n\r\n##Sendboxing##\r\n\r\nThere is many ways to sandbox scripts inside your application. I strongly recomend you to use plain Lua to do your sandbox.\r\nYou can re-write the `import` function before load the user script and if the user try to import a .NET assembly nothing will happen.\r\n\r\n```csharp\r\n\tstate.DoString (@\"\r\n\t\timport = function () end\r\n\t\");\r\n```\r\n[Lua-Sandbox user-list](http://lua-users.org/wiki/SandBoxes)\r\n\r\n\r\nCopyright (c) 2014 Vinicius Jarina (viniciusjarina@gmail.com)\r\n\r\nNLua 1.3.2\r\n----------\r\n* Migration to unified Xamarin.iOS (iOS)\r\n* Added __call method to call Actions/Funcs from Lua as Lua functions.\r\n* Fixed [#116](https://github.com/NLua/NLua/issues/116) problem accessing base class method\r\n* Fixed [#117](https://github.com/NLua/NLua/issues/117) problem with same method in class and base class\r\n\r\nNLua 1.3.1\r\n----------\r\n* Added support to WinRT (Windows Phone 8)\r\n* Added support to Unity3D\r\n* Update Lua 5.2.3 with latest patches\r\n* Fixed support to Unicode strings (UTF-8)\r\n* [Fixed x86/x64 issue](https://github.com/NLua/NLua/issues/67). \r\n* [Fixed overload issue](https://github.com/NLua/NLua/issues/103)\r\n* [Fixed support to Debug and DebugHook APIs](https://github.com/NLua/NLua/issues/31)\r\n* [Added support to operators call](https://github.com/NLua/NLua/issues/57)\r\n* [Fixed access to keys with .](https://github.com/NLua/NLua/issues/68)\r\n* [Fixed issue with ValueTypes](https://github.com/NLua/NLua/issues/73)\r\n\r\nNLua 1.3.0\r\n----------\r\n* Update Lua to 5.2.3\r\n* Update to Xamarin components store. (http://components.xamarin.com/view/NLua)\r\n\r\nNLua 1.2.0\r\n----------\r\n* NuGet Package (https://www.nuget.org/packages/NLua/)\r\n* Port to Android 15+ (armeabi, v7a, x86)\r\n* Updated Lua 5.2.2 (patch 7)\r\n* Lot of Bug fixes.\r\n\r\n\r\nNLua 1.1.0\r\n----------\r\n* Port to WP7 (Thanks to Mangatome)\r\n* NLua now using Lua 5.2.2\r\n* Bug fixes.\r\n\r\nNLua 1.0.0\r\n----------\r\n* Forked from LuaInterface 2.0.4\r\n* Added iOS support using KeraLua (C# P/Invoke Lua)\r\n\r\n\r\n>###Help NLua###\r\n>* Contributing\r\n> --------------\r\n> * NLua uses the Mono Code-Style http://www.mono-project.com/Coding_Guidelines .\r\n> * Please, do not change the line-end or re-indent the code.\r\n> * Run the tests before you push.\r\n> * Avoid pushing style changes (unless they are really needed), renaming and move code.\r\n\r\nOld History\r\n-----------\r\nLuaInterface \r\n--------------\r\n\r\nCopyright (c) 2003-2006 Fabio Mascarenhas de Queiroz\r\n\r\nMaintainer: Craig Presti, craig@vastpark.com\r\n\r\nlua51.dll and lua51.exe are Copyright (c) 2005 Tecgraf, PUC-Rio\r\n\r\n\r\nGetting started with NLua:\r\n-------------------------\r\n\r\n* Look at src/TestNLua/TestLua to see an example of usage from C# \r\n(optionally you can run this from inside the NLua solution using the debugger). \r\nAlso provides a good example of how to override .NET methods of Lua and usage of NLua\r\nfrom within your .NET application.\r\n\r\n* Look at samples/testluaform.lua to see examples of how to use \r\n.NET inside Lua\r\n\r\n* More installation and usage instructions in the doc/guide.pdf file.\r\n\r\nWhat's new in LuaInterface 2.0.3\r\n------------------------------\r\n* Fix: Private methods accessible via LuaInterface\r\n* Fix: Method overload lookup failures\r\n* Fix: Lua DoFile memory leaks when file not found (submitted by Paul Moore)\r\n* Fix: Lua Dispose not freeing memory (submitted by Paul Moore)\r\n* Fix: Better support for accessing indexers\r\n* Fix: Parsing error for MBCS characters (qingrui.li)\r\n* Fix: Dispose errors originating from LuaTable, LuaFunction, LuaUserData\r\n* Fix: LuaInterface no longer disposes the state when passed one via the overloaded constructor\r\n* Added: LoadString and LoadFile (submitted by Paul Moore)\r\n* Added: Overloaded DoString\r\n* Added: Lua debugging support (rostermeier)\r\n\r\n\r\nWhat's new in LuaInterface 2.0.1\r\n------------------------------\r\n* Apparently the 2.0 built binaries had an issue for some users, this is just a rebuild with the lua sources pulled into the LuaInterface.zip\r\n\r\nWhat's new in LuaInterface 2.0\r\n------------------------------\r\n* The base lua5.1.2 library is now built as entirely manged code. LuaInterface is now pure CIL\r\n* Various adapters to connect the older x86 version of lua are no longer needed\r\n* Performance fixes contributed by Toby Lawrence, Oliver Nemoz and Craig Presti\r\n\r\nWhat's new in LuaInterface 1.5.3\r\n----------\r\n* Internal lua panics (due to API violations) now throw LuaExceptions into .net\r\n* If .net code throws an exception into Lua and lua does not handle it, the\r\noriginal exception is forwarded back out to .net land.\r\n* Fix bug in the Lua 5.1.1 gmatch C code - it was improperly assuming gmatch\r\nonly works with tables.\r\n\r\nWhat's new in LuaInterface 1.5.2\r\n----------\r\n* Overriding C# methods from Lua is fixed (broken with .net 2.0!)\r\n* Registering static C# functions for Lua is fixed (broken with Lua-5.1.1)\r\n* Rebuilt to fix linking problems with the binaries included in 1.5.1\r\n* RegisterFunction has been leaking things onto the stack \r\n\r\nWhat's new in LuaInterface 1.5.1\r\n----------\r\nFix a serious bug w.r.t. garbage collection - made especially apparent \r\nwith the new lua5.1 switch: If you were *very* unlucky with timing \r\nsometimes Lua would loose track of pointers to CLR functions.\r\n\r\nWhen I added support for static methods, I allowed the user to use either a \r\ncolon or a dot to separate the method from the class name. This was not \r\ncorrect - it broke disambiguation between overloaded static methods. \r\nTherefore, LuaInterface is now more strict: If you want to call a static \r\nmethod, you must use dot to separate the method name from the class name. Of\r\ncourse you can still use a colon if an _instance_ is being used.\r\n\r\nStatic method calls are now much faster (due to better caching).\r\n\r\nWhat's new in LuaInterface 1.5\r\n----------\r\nLuaInterface is now updated to be based on Lua5.1.1. You can either use \r\nyour own build/binaries for Lua5.1.1 or use the version distributed here. \r\n(Lots of thanks to Steffen Itterheim for this work!)\r\n\r\nLuaInterface.Lua no longer has OpenLibs etc... The base mechanism for \r\nlibrary loading for Lua has changed, and we haven't yet broken appart \r\nthe library loading for LuaInterface. Instead, all standard Lua libraries\r\nare automatically loaded at start up.\r\n\r\nFixed a bug where calls of some static methods would reference an \r\ninvalid pointer.\r\n\r\nFixed a bug when strings with embedded null characters are passed in or \r\nout of Lua (Thanks to Daniel N�ri for the report & fix!)\r\n \r\nThe native components in LuaInterface (i.e. Lua51 and the loader) are \r\nboth built as release builds - to prevent problems loading standard \r\nwindows libraries.\r\n\r\nNote: You do not need to download/build lua-5.1.1.zip unless you want to \r\nmodify Lua internals (a built version of lua51.dll is included in the \r\nregular LuaInterface distribution)\r\n\r\nWhat's New in LuaInterface 1.4\r\n----------\r\n\r\nNote: Fabio area of interest has moved off in other directions (hopefully only temporarily).\r\nI've talked with Fabio and he's said he's okay with me doing a new release with various fixes\r\nI've made over the last few months. Changes since 1.3:\r\n\r\nVisual Studio 2005/.Net 2.0 is supported.\r\n\r\nCompat-5.1 is modified to expect backslash as the path seperator.\r\n\r\nLuaInterface will now work correctly with Generic C# classes.\r\n\r\nCLR inner types are now supported.\r\n\r\nFixed a problem where sometimes Lua proxy objects would be associated with the wrong CLR object.\r\n\r\nIf a CLR class has an array accessor, the elements can be accessed using the regular Lua indexing \r\ninterface.\r\n\r\nAdd CLRPackage.lua to the samples directory. This class makes it much easier to automatically \r\nload referenced assemblies. In the next release this loading will be automatic.\r\n\r\nTo see an quick demonstration of LuaInterface, cd into nlua/samples and then \r\ntype: ..\\..\\Built\\debug\\LuaRunner.exe testluaform.lua\r\n\r\nVarious other minor fixes that I've forgotten. I'll keep better track next time.\r\n\r\nNote: LuaInterface is still based on Lua 5.0.2. If someone really wants us to upgrade to Lua 5.1\r\nplease send me a note. In the mean time, I'm also distributing a version of\r\nLua 5.0.2 with an appropriate VS 2005 project file. You do not need to\r\ndownload this file unless you want to modify Lua internals (a built version\r\nof lua50.dll is included in the regular LuaInterface distribution)\r\n\r\nWhat's New in LuaInterface 1.3\r\n----------\r\n\r\nLuaInterface now works with LuaBinaries Release 2 (http://luabinaries.luaforge.net)\r\nand Compat-5.1 Release 3 (http://luaforge.net/projects/compat). The loader DLL is now \r\ncalled luanet.dll, and does not need a nlua.lua file anymore\r\n(just put LuaInterface.dll in the GAC, luanet.dll in your package.cpath, and\r\ndo require\"luanet\").\r\n\r\nFixed a bug in the treatment of the char type (thanks to Ron Scott).\r\n\r\nLuaInterface.dll now has a strong name, and can be put in the GAC (thanks to Ivan Voras).\r\n\r\nYou can now use foreach with instances of LuaTable (thanks to Zachary Landau).\r\n\r\nThere is an alternate form of loading assemblies and importing types (based on an\r\nanonymous contribution in the Lua wiki). Check the _alt files in the samples folder.\r\n\r\n\r\nWhat's New in LuaInterface 1.2.1\r\n--------------------------------\r\n\r\nNow checks if two LuaInterface.Lua instances are trying to share the same Lua state,\r\nand throws an exception if this is the case. Also included readonly clauses in public\r\nmembers of the Lua and ObjectTranslator classes.\r\n\r\nThis version includes the source of LuaInterfaceLoader.dll, with VS.Net 2003 project\r\nfiles.\r\n\r\nWhat's New in LuaInterface 1.2\r\n------------------------------\r\n\r\nLuaInterface now can be loaded as a module, so you can use the lua standalone\r\ninterpreter to run scripts. Thanks to Paul Winwood for this idea and sample code\r\nshowing how to load the CLR from a C++ program. The module is \"nlua\". Make\r\nsure Lua can find nlua.lua, and LuaInterfaceLoader.dll is either in the\r\ncurrent directory or the GAC. The samples now load LuaInterface as a module, in\r\nits own namespace.\r\n\r\nThe get_method_bysig, get_constructor_bysig and make_object were changed: now you\r\npass the *names* of the types to them, instead of the types themselves. E.g:\r\n\r\n get_method_bysig(obj,\"method\",\"System.String\")\r\n\r\ninstead of\r\n\r\n String = import_type(\"System.String\")\r\n get_method_bysig(obj,\"method\",String)\r\n\r\nMake sure the assemblies of the types you are passing have been loaded, or the call\r\nwill fail. The test cases in src/TestLuaInterface/TestLua.cs have examples of the new\r\nfunctions.\r\n","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."}
\ No newline at end of file
{"name":"Nlua","tagline":"NLua is the bind between Lua world and the .NET world.","body":"NLua\r\n========\r\n\r\n\r\n[![Logo](https://secure.gravatar.com/avatar/77ecf0fb9d8419be7715c6e822e66562?s=150)]()\r\n\r\nNLua is a fork project of LuaInterface (from Fábio Mascarenhas/Craig Presti).\r\n\r\n[![Cmd](https://raw.github.com/NLua/NLua/master/NLuaCommand.gif)]()\r\n\r\nExample: using NLua from command line.\r\n\r\nNLua allows the usage of Lua from C#, on Windows, Linux, Mac, iOS , Android, Windows Phone 7 and 8.\r\n\r\nUnity3D support branch: [unity3d](https://github.com/Mervill/Unity3D-NLua) by [Riley G](https://github.com/Mervill/Unity3D-NLua).\r\n\r\n [1]: https://www.dropbox.com/s/w99igtc12uocq4k/NLua.OSX.zip\r\n [2]: http://nvlabs.github.com/cub/download-icon.png (Download for OSX)\r\n\r\n [3]: https://www.dropbox.com/s/s3xte19719446lx/NLua.iOS.zip\r\n [4]: http://nvlabs.github.com/cub/download-icon.png (Download for iOS)\r\n\r\n\r\n [5]: https://www.dropbox.com/s/mjet2sh67e7y6xo/NLua.Android.zip\r\n [6]: http://nvlabs.github.com/cub/download-icon.png (Download for Android)\r\n\r\n [7]: https://www.dropbox.com/s/jkr1pnwvqw6w0r8/NLua.Win32.zip\r\n [8]: http://nvlabs.github.com/cub/download-icon.png (Download for Win32)\r\n\r\n [9]: https://www.dropbox.com/s/xraxkgi2kuwbu4a/NLua.Win64.zip\r\n [10]: http://nvlabs.github.com/cub/download-icon.png (Download for Win64)\r\n \r\n [11]: https://www.dropbox.com/s/do8m3929mf0pwff/NLua.NoPInvoke.zip\r\n [12]: http://nvlabs.github.com/cub/download-icon.png (Download Pure C# - No P/Invoke)\r\n\r\n [13]: https://www.dropbox.com/s/c08wphdmk5o7tdx/NLua.WP7.zip\r\n [14]: http://nvlabs.github.com/cub/download-icon.png (Download for Windows Phone 7)\r\n\r\n [15]: https://www.dropbox.com/s/2pva1tyxpnn7feb/NLua.WPSL8.zip\r\n [16]: http://nvlabs.github.com/cub/download-icon.png (Download for Windows Phone Silverlight 8 (ARM+x86))\r\n \r\n [17]: https://www.dropbox.com/s/nonijkic8216f7l/NLua.WinRT.zip\r\n [18]: http://nvlabs.github.com/cub/download-icon.png (Download for Windows Phone 8 (RT) (ARM+x86))\r\n \r\n [19]: https://dl.dropboxusercontent.com/u/17523659/NLua.Unity3D.zip\r\n [20]: http://nvlabs.github.com/cub/download-icon.png (Download for Unity3D)\r\n \r\n \r\n| | Build Status | Download |\r\n| :------ | ------: | :------: |\r\n| **Linux** | [![Linux](https://travis-ci.org/NLua/NLua.svg?branch=master)](https://travis-ci.org/NLua/NLua) |\r\n| **OSX** | [![OSX](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_OSX)](http://codefoco.zapto.org:8085/job/NLua_OSX/) | [![dwn_osx][2]][1] |\r\n| **iOS** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_iOS)](http://codefoco.zapto.org:8085/view/X/job/NLua_iOS/) | [![dwn_ios][4]][3] |\r\n| **Android** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_Android)](http://codefoco.zapto.org:8085/view/X/job/NLua_Android/) | [![dwn_android][6]][5] |\r\n| **Win32** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_Windows)](http://codefoco.zapto.org:8085/view/X/job/NLua_Windows/) | [![dwn_w32][8]][7] |\r\n| **Win64** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_Win64)](http://codefoco.zapto.org:8085/view/X/job/NLua_Win64/) | [![dwn_w64][10]][9] |\r\n| **.NET Pure C#** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_WinSafe)](http://codefoco.zapto.org:8085/view/X/job/NLua_WinSafe/) | [![dwn_winsafe][12]][11] |\r\n| **WP8 (Silverlight)** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_WPSL8)](http://codefoco.zapto.org:8085/view/X/job/NLua_WinSafe/) | [![dwn_wpsl8][16]][15] |\r\n| **WP8 (WinRT)** | [![Build Status](http://codefoco.zapto.org:8085/buildStatus/icon?job=NLua_WPSL8)](http://codefoco.zapto.org:8085/view/X/job/NLua_WP8/) | [![dwn_wp8][18]][17] |\r\n| **Windows Phone 7** | | [![dwn_wp7][14]][13] |\r\n| **Unity3D** | | [![dwn_unity3d][20]][19] |\r\n\r\nExample:\r\nYou can use/instantiate any .NET class without any previous registration or annotation. \r\n```csharp\r\n\tpublic class SomeClass\r\n\t{\r\n\t\tpublic string MyProperty {get; private set;}\r\n\t\t\r\n\t\tpublic SomeClass (string param1 = \"defaulValue\")\r\n\t\t{\r\n\t\t\tMyProperty = param1;\r\n\t\t}\r\n\t\t\r\n\t\tpublic int Func1 ()\r\n\t\t{\r\n\t\t\treturn 32;\r\n\t\t}\r\n\t\t\r\n\t\tpublic string AnotherFunc (int val1, string val2)\r\n\t\t{\r\n\t\t\treturn \"Some String\";\r\n\t\t}\r\n\t\t\r\n\t\tpublic static string StaticMethod (int param)\r\n\t\t{\r\n\t\t\treturn \"Return of Static Method\";\r\n\t\t}\r\n\r\n```\r\n\r\nCreating Lua state:\r\n\r\n```csharp\r\n\tusing NLua;\r\n\t\r\n\tLua state = new Lua ()\r\n\r\n```\r\n\r\nEvaluating simple expressions:\r\n```csharp\r\n\tvar res = state.DoString (\"return 10 + 3*(5 + 2)\")[0] as double;\r\n\t// Lua can return multiple values, for this reason DoString return a array of objects\r\n```\r\n\r\nPassing raw values to the state:\r\n\r\n```csharp\r\n\tdouble val = 12.0;\r\n\tstate [\"x\"] = val; // Create a global value 'x' \r\n\tvar res = state.DoString (\"return 10 + x*(5 + 2)\")[0] as double;\r\n```\r\n\r\n\r\nRetrieving global values:\r\n\r\n```csharp\r\n\tstate.DoString (\"y = 10 + x*(5 + 2)\");\r\n\tvar y = state [\"y\"] as double; -- Retrieve the value of y\r\n```\r\n\r\nRetrieving Lua functions:\r\n\r\n```csharp\r\n\tstate.DoString (@\"\r\n\tfunction ScriptFunc (val1, val2)\r\n\t\tif val1 > val2 then\r\n\t\t\treturn val1 + 1\r\n\t\telse\r\n\t\t\treturn val2 - 1\r\n\t\tend\r\n\tend\r\n\t\");\r\n\tvar scriptFunc = state [\"ScriptFunc\"] as LuaFunction;\r\n\tvar res = (int)scriptFunc.Call (3, 5).First ();\r\n\t// LuaFunction.Call will also return a array of objects, since a Lua function\r\n\t// can return multiple values\r\n```\r\n\r\n##Using the .NET objects.##\r\n\r\nPassing .NET objects to the state:\r\n\r\n```csharp\r\n\tSomeClass obj = new SomeClass (\"Param\");\r\n\tstate [\"obj\"] = obj; // Create a global value 'obj' of .NET type SomeClass \r\n\t// This could be any .NET object, from BCL or from your assemblies\r\n```\r\n\r\nUsing .NET assemblies inside Lua:\r\n\r\nTo access any .NET assembly to create objects, events etc inside Lua you need to ask NLua to use CLR as a Lua package.\r\nTo do this just use the method `LoadCLRPackage` and use the `import` function inside your Lua script to load the Assembly.\r\n\r\n```csharp\r\n\tstate.LoadCLRPackage ();\r\n\tstate.DoString (@\" import ('MyAssembly.exe', 'MyNamespace') \r\n\t\t\t import ('System.Web') \");\r\n\t// import will load any .NET assembly and they will be available inside the Lua context.\r\n```\r\n\r\nCreating .NET objects:\r\nTo create object you only need to use the class name with the `()`.\r\n\r\n```csharp\r\nstate.DoString (@\"\r\n\t obj2 = SomeClass() -- you can suppress default values.\r\n\t client = WebClient()\r\n\t\");\r\n```\r\n\r\nCalling instance methods:\r\nTo call instance methods you need to use the `:` notation, you can call methods from objects passed to Lua or to objects created inside the Lua context.\r\n\r\n```csharp\r\n\tstate.DoString (@\"\r\n\tlocal res1 = obj:Func1()\r\n\tlocal res2 = obj2:AnotherFunc (10, 'hello')\r\n\tlocal res3 = client:DownloadString('http://nlua.org')\r\n\t\");\r\n```\r\n\r\nCalling static methods:\r\nYou can call static methods using only the class name and the `.` notation from Lua.\r\n\r\n```csharp\r\n\tstate.DoString (@\"\r\n\tlocal res4 = SomeClass.StaticMethod(4)\r\n\t\");\r\n```\r\n\r\nCalling properties:\r\nYou can get (or set) any property using `.` notation from Lua.\r\n\r\n```csharp\r\n\tstate.DoString (@\"\r\n\tlocal res5 = obj.MyProperty\r\n\t\");\r\n```\r\n\r\nAll methods, events or property need to be public available, NLua will fail to call non-public members.\r\n\r\nIf you are using Xamarin.iOS you need to [`Preserve`](http://developer.xamarin.com/guides/ios/advanced_topics/linker/) the class you want to use inside NLua, otherwise the Linker will remove the class from final binary if the class is not in use.\r\n\r\n##Sandboxing##\r\n\r\nThere is many ways to sandbox scripts inside your application. I strongly recomend you to use plain Lua to do your sandbox.\r\nYou can re-write the `import` function before load the user script and if the user try to import a .NET assembly nothing will happen.\r\n\r\n```csharp\r\n\tstate.DoString (@\"\r\n\t\timport = function () end\r\n\t\");\r\n```\r\n[Lua-Sandbox user-list](http://lua-users.org/wiki/SandBoxes)\r\n\r\n\r\nCopyright (c) 2014 Vinicius Jarina (viniciusjarina@gmail.com)\r\n\r\nNLua 1.3.2\r\n----------\r\n\r\n* Migration to unified Xamarin.iOS (iOS)\r\n* Added __call method to call Actions/Funcs from Lua as Lua functions.\r\n* Fixed [#116](https://github.com/NLua/NLua/issues/116) problem accessing base class method\r\n* Fixed [#117](https://github.com/NLua/NLua/issues/117) problem with same method in class and base class\r\n* Fixed [#125](https://github.com/NLua/NLua/issues/125) calling methods with params keyword.\r\n\r\nNLua 1.3.1\r\n----------\r\n* Added support to WinRT (Windows Phone 8)\r\n* Added support to Unity3D\r\n* Update Lua 5.2.3 with latest patches\r\n* Fixed support to Unicode strings (UTF-8)\r\n* [Fixed x86/x64 issue](https://github.com/NLua/NLua/issues/67). \r\n* [Fixed overload issue](https://github.com/NLua/NLua/issues/103)\r\n* [Fixed support to Debug and DebugHook APIs](https://github.com/NLua/NLua/issues/31)\r\n* [Added support to operators call](https://github.com/NLua/NLua/issues/57)\r\n* [Fixed access to keys with .](https://github.com/NLua/NLua/issues/68)\r\n* [Fixed issue with ValueTypes](https://github.com/NLua/NLua/issues/73)\r\n\r\nNLua 1.3.0\r\n----------\r\n* Update Lua to 5.2.3\r\n* Update to Xamarin components store. (http://components.xamarin.com/view/NLua)\r\n\r\nNLua 1.2.0\r\n----------\r\n* NuGet Package (https://www.nuget.org/packages/NLua/)\r\n* Port to Android 15+ (armeabi, v7a, x86)\r\n* Updated Lua 5.2.2 (patch 7)\r\n* Lot of Bug fixes.\r\n\r\n\r\nNLua 1.1.0\r\n----------\r\n* Port to WP7 (Thanks to Mangatome)\r\n* NLua now using Lua 5.2.2\r\n* Bug fixes.\r\n\r\nNLua 1.0.0\r\n----------\r\n* Forked from LuaInterface 2.0.4\r\n* Added iOS support using KeraLua (C# P/Invoke Lua)\r\n\r\n\r\n>###Help NLua###\r\n>* Contributing\r\n> --------------\r\n> * NLua uses the Mono Code-Style http://www.mono-project.com/Coding_Guidelines .\r\n> * Please, do not change the line-end or re-indent the code.\r\n> * Run the tests before you push.\r\n> * Avoid pushing style changes (unless they are really needed), renaming and move code.\r\n\r\nOld History\r\n-----------\r\nLuaInterface \r\n--------------\r\n\r\nCopyright (c) 2003-2006 Fabio Mascarenhas de Queiroz\r\n\r\nMaintainer: Craig Presti, craig@vastpark.com\r\n\r\nlua51.dll and lua51.exe are Copyright (c) 2005 Tecgraf, PUC-Rio\r\n\r\n\r\nGetting started with NLua:\r\n-------------------------\r\n\r\n* Look at src/TestNLua/TestLua to see an example of usage from C# \r\n(optionally you can run this from inside the NLua solution using the debugger). \r\nAlso provides a good example of how to override .NET methods of Lua and usage of NLua\r\nfrom within your .NET application.\r\n\r\n* Look at samples/testluaform.lua to see examples of how to use \r\n.NET inside Lua\r\n\r\n* More installation and usage instructions in the doc/guide.pdf file.\r\n\r\nWhat's new in LuaInterface 2.0.3\r\n------------------------------\r\n* Fix: Private methods accessible via LuaInterface\r\n* Fix: Method overload lookup failures\r\n* Fix: Lua DoFile memory leaks when file not found (submitted by Paul Moore)\r\n* Fix: Lua Dispose not freeing memory (submitted by Paul Moore)\r\n* Fix: Better support for accessing indexers\r\n* Fix: Parsing error for MBCS characters (qingrui.li)\r\n* Fix: Dispose errors originating from LuaTable, LuaFunction, LuaUserData\r\n* Fix: LuaInterface no longer disposes the state when passed one via the overloaded constructor\r\n* Added: LoadString and LoadFile (submitted by Paul Moore)\r\n* Added: Overloaded DoString\r\n* Added: Lua debugging support (rostermeier)\r\n\r\n\r\nWhat's new in LuaInterface 2.0.1\r\n------------------------------\r\n* Apparently the 2.0 built binaries had an issue for some users, this is just a rebuild with the lua sources pulled into the LuaInterface.zip\r\n\r\nWhat's new in LuaInterface 2.0\r\n------------------------------\r\n* The base lua5.1.2 library is now built as entirely manged code. LuaInterface is now pure CIL\r\n* Various adapters to connect the older x86 version of lua are no longer needed\r\n* Performance fixes contributed by Toby Lawrence, Oliver Nemoz and Craig Presti\r\n\r\nWhat's new in LuaInterface 1.5.3\r\n----------\r\n* Internal lua panics (due to API violations) now throw LuaExceptions into .net\r\n* If .net code throws an exception into Lua and lua does not handle it, the\r\noriginal exception is forwarded back out to .net land.\r\n* Fix bug in the Lua 5.1.1 gmatch C code - it was improperly assuming gmatch\r\nonly works with tables.\r\n\r\nWhat's new in LuaInterface 1.5.2\r\n----------\r\n* Overriding C# methods from Lua is fixed (broken with .net 2.0!)\r\n* Registering static C# functions for Lua is fixed (broken with Lua-5.1.1)\r\n* Rebuilt to fix linking problems with the binaries included in 1.5.1\r\n* RegisterFunction has been leaking things onto the stack \r\n\r\nWhat's new in LuaInterface 1.5.1\r\n----------\r\nFix a serious bug w.r.t. garbage collection - made especially apparent \r\nwith the new lua5.1 switch: If you were *very* unlucky with timing \r\nsometimes Lua would loose track of pointers to CLR functions.\r\n\r\nWhen I added support for static methods, I allowed the user to use either a \r\ncolon or a dot to separate the method from the class name. This was not \r\ncorrect - it broke disambiguation between overloaded static methods. \r\nTherefore, LuaInterface is now more strict: If you want to call a static \r\nmethod, you must use dot to separate the method name from the class name. Of\r\ncourse you can still use a colon if an _instance_ is being used.\r\n\r\nStatic method calls are now much faster (due to better caching).\r\n\r\nWhat's new in LuaInterface 1.5\r\n----------\r\nLuaInterface is now updated to be based on Lua5.1.1. You can either use \r\nyour own build/binaries for Lua5.1.1 or use the version distributed here. \r\n(Lots of thanks to Steffen Itterheim for this work!)\r\n\r\nLuaInterface.Lua no longer has OpenLibs etc... The base mechanism for \r\nlibrary loading for Lua has changed, and we haven't yet broken appart \r\nthe library loading for LuaInterface. Instead, all standard Lua libraries\r\nare automatically loaded at start up.\r\n\r\nFixed a bug where calls of some static methods would reference an \r\ninvalid pointer.\r\n\r\nFixed a bug when strings with embedded null characters are passed in or \r\nout of Lua (Thanks to Daniel N�ri for the report & fix!)\r\n \r\nThe native components in LuaInterface (i.e. Lua51 and the loader) are \r\nboth built as release builds - to prevent problems loading standard \r\nwindows libraries.\r\n\r\nNote: You do not need to download/build lua-5.1.1.zip unless you want to \r\nmodify Lua internals (a built version of lua51.dll is included in the \r\nregular LuaInterface distribution)\r\n\r\nWhat's New in LuaInterface 1.4\r\n----------\r\n\r\nNote: Fabio area of interest has moved off in other directions (hopefully only temporarily).\r\nI've talked with Fabio and he's said he's okay with me doing a new release with various fixes\r\nI've made over the last few months. Changes since 1.3:\r\n\r\nVisual Studio 2005/.Net 2.0 is supported.\r\n\r\nCompat-5.1 is modified to expect backslash as the path seperator.\r\n\r\nLuaInterface will now work correctly with Generic C# classes.\r\n\r\nCLR inner types are now supported.\r\n\r\nFixed a problem where sometimes Lua proxy objects would be associated with the wrong CLR object.\r\n\r\nIf a CLR class has an array accessor, the elements can be accessed using the regular Lua indexing \r\ninterface.\r\n\r\nAdd CLRPackage.lua to the samples directory. This class makes it much easier to automatically \r\nload referenced assemblies. In the next release this loading will be automatic.\r\n\r\nTo see an quick demonstration of LuaInterface, cd into nlua/samples and then \r\ntype: ..\\..\\Built\\debug\\LuaRunner.exe testluaform.lua\r\n\r\nVarious other minor fixes that I've forgotten. I'll keep better track next time.\r\n\r\nNote: LuaInterface is still based on Lua 5.0.2. If someone really wants us to upgrade to Lua 5.1\r\nplease send me a note. In the mean time, I'm also distributing a version of\r\nLua 5.0.2 with an appropriate VS 2005 project file. You do not need to\r\ndownload this file unless you want to modify Lua internals (a built version\r\nof lua50.dll is included in the regular LuaInterface distribution)\r\n\r\nWhat's New in LuaInterface 1.3\r\n----------\r\n\r\nLuaInterface now works with LuaBinaries Release 2 (http://luabinaries.luaforge.net)\r\nand Compat-5.1 Release 3 (http://luaforge.net/projects/compat). The loader DLL is now \r\ncalled luanet.dll, and does not need a nlua.lua file anymore\r\n(just put LuaInterface.dll in the GAC, luanet.dll in your package.cpath, and\r\ndo require\"luanet\").\r\n\r\nFixed a bug in the treatment of the char type (thanks to Ron Scott).\r\n\r\nLuaInterface.dll now has a strong name, and can be put in the GAC (thanks to Ivan Voras).\r\n\r\nYou can now use foreach with instances of LuaTable (thanks to Zachary Landau).\r\n\r\nThere is an alternate form of loading assemblies and importing types (based on an\r\nanonymous contribution in the Lua wiki). Check the _alt files in the samples folder.\r\n\r\n\r\nWhat's New in LuaInterface 1.2.1\r\n--------------------------------\r\n\r\nNow checks if two LuaInterface.Lua instances are trying to share the same Lua state,\r\nand throws an exception if this is the case. Also included readonly clauses in public\r\nmembers of the Lua and ObjectTranslator classes.\r\n\r\nThis version includes the source of LuaInterfaceLoader.dll, with VS.Net 2003 project\r\nfiles.\r\n\r\nWhat's New in LuaInterface 1.2\r\n------------------------------\r\n\r\nLuaInterface now can be loaded as a module, so you can use the lua standalone\r\ninterpreter to run scripts. Thanks to Paul Winwood for this idea and sample code\r\nshowing how to load the CLR from a C++ program. The module is \"nlua\". Make\r\nsure Lua can find nlua.lua, and LuaInterfaceLoader.dll is either in the\r\ncurrent directory or the GAC. The samples now load LuaInterface as a module, in\r\nits own namespace.\r\n\r\nThe get_method_bysig, get_constructor_bysig and make_object were changed: now you\r\npass the *names* of the types to them, instead of the types themselves. E.g:\r\n\r\n get_method_bysig(obj,\"method\",\"System.String\")\r\n\r\ninstead of\r\n\r\n String = import_type(\"System.String\")\r\n get_method_bysig(obj,\"method\",String)\r\n\r\nMake sure the assemblies of the types you are passing have been loaded, or the call\r\nwill fail. The test cases in src/TestLuaInterface/TestLua.cs have examples of the new\r\nfunctions.\r\n","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment