update lua doc to html generator
authorRobin Gareus <robin@gareus.org>
Wed, 6 Apr 2016 15:01:53 +0000 (17:01 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 6 Apr 2016 15:03:34 +0000 (17:03 +0200)
tools/fmt-luadoc.php
tools/update_luadoc.sh [new file with mode: 0755]

index bfb6b81ae57eb28bbc28624a6f01cbf1546c0186..712c8b0887196d1dbfdf661144154fabfe20224e 100755 (executable)
@@ -125,6 +125,15 @@ function luafn2class ($lua) {
        return substr ($lua, 0, strrpos ($lua, ':'));
 }
 
+function luafn2name ($lua) {
+       $fn = strrpos ($lua, ':');
+       if ($fn !== 0 && strlen($lua) > $fn + 1) {
+               return substr ($lua, $fn + 1);
+       }
+       my_die ('invalid class prefix: '. $name);
+}
+
+
 function checkclass ($b) {
        global $classlist;
        if (!isset ($classlist[luafn2class ($b['lua'])])) {
@@ -249,6 +258,26 @@ foreach ($doc as $b) {
                        'ret'  => arg2lua (datatype ($b['ldec']))
                );
                break;
+       case "Static C Function":
+               checkclass ($b);
+               if (strpos ($b['lua'], 'ARDOUR:DataType:') === 0) {
+                       # special case ARDOUR:DataType convenience c'tor
+                       $args = array ();
+                       $ret = array (luafn2class ($b['lua']) => 0);
+                       $canon = 'ARDOUR::LuaAPI::datatype_ctor_'.strtolower (luafn2name ($b['lua'])).'(lua_State*)';
+               } else {
+                       my_die ('unhandled Static C: ' . print_r($b, true));
+               }
+               $classlist[luafn2class ($b['lua'])]['func'][] = array (
+                       'bind' => $b,
+                       'name' => $b['lua'],
+                       'args' => $args,
+                       'ret'  => $ret,
+                       'ref'  => false,
+                       'ext'  => false,
+                       'cand' => $canon
+               );
+               break;
        case "C Function":
                # we required C functions to be in a class namespace
        case "Ext C Function":
@@ -257,9 +286,8 @@ foreach ($doc as $b) {
                $ret = array ('...' => 0);
                $ns = luafn2class ($b['lua']);
                $cls = $classlist[$ns];
-               ## std::Vector std::List types
                if (preg_match ('/.*<([^>]*)[ ]*>/', $cls['ldec'], $templ)) {
-                       // XXX -> move to C-source
+                       # std::vector, std::list types
                        switch (stripclass($ns, $b['lua'])) {
                        case 'add':
                                #$args = array (array ('LuaTable {'.$templ[1].'}' => 0));
@@ -278,6 +306,7 @@ foreach ($doc as $b) {
                                break;
                        }
                } else if (strpos ($cls['type'], ' Array') !== false) {
+                       # catches  C:FloatArray, C:IntArray
                        $templ = preg_replace ('/[&*]*$/', '', $cls['ldec']);
                        switch (stripclass($ns, $b['lua'])) {
                        case 'array':
diff --git a/tools/update_luadoc.sh b/tools/update_luadoc.sh
new file mode 100755 (executable)
index 0000000..0948276
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh
+## ardour needs to be configured with  --luadoc and build should be up-to date.
+
+cd `dirname $0`
+set -e
+test -f ../libs/ardour/ardour/ardour.h
+test -e ../gtk2_ardour/arluadoc
+test -e ../build/gtk2_ardour/luadoc
+
+# generate ../doc/luadoc.json.gz
+../gtk2_ardour/arluadoc
+
+# generate ../doc/ardourapi.json.gz
+./doxy2json/ardourdoc.sh
+
+php fmt-luadoc.php > /tmp/luadoc.html
+# ^^ needs manual copy to ardour-manual
+ls -l /tmp/luadoc.html