From 7dce0c276afea3806764f5e6849e17d69187ef4b Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Wed, 11 Sep 2013 21:21:51 +0200
Subject: APIDump: Initial implementation of wiki-to-lua conversion
---
MCServer/Plugins/APIDump/main.lua | 88 +++++++++++++++++++++++++++++++++++++--
1 file changed, 85 insertions(+), 3 deletions(-)
diff --git a/MCServer/Plugins/APIDump/main.lua b/MCServer/Plugins/APIDump/main.lua
index c13611d2e..7e888a218 100644
--- a/MCServer/Plugins/APIDump/main.lua
+++ b/MCServer/Plugins/APIDump/main.lua
@@ -27,6 +27,9 @@ function Initialize(Plugin)
-- dump all available API functions and objects:
-- DumpAPITxt();
+ -- DEBUG: Convert the wiki dump into APIDesc
+ ConvertWikiToDesc();
+
-- Dump all available API object in HTML format into a subfolder:
DumpAPIHtml();
@@ -185,12 +188,20 @@ function DumpAPIHtml()
-- Read in the descriptions:
ReadDescriptions(API);
- -- Create the output folder:
- os.execute("mkdir API");
-
-- Create a "class index" file, write each class as a link to that file,
-- then dump class contents into class-specific file
local f = io.open("API/index.html", "w");
+ if (f == nil) then
+ -- Create the output folder
+ os.execute("mkdir API");
+ local err;
+ f, err = io.open("API/index.html", "w");
+ if (f == nil) then
+ LOGINFO("Cannot output HTML API: " .. err);
+ return;
+ end
+ end
+
f:write([[MCServer API - class index
@@ -202,6 +213,8 @@ function DumpAPIHtml()
end
f:write("");
f:close();
+
+ LOG("API subfolder written");
end
@@ -326,3 +339,72 @@ end
+
+-- This function converts the wiki dump, as provided by FakeTruth, into the APIDesc format.
+-- Dump available in forum: http://forum.mc-server.org/showthread.php?tid=1214&pid=9892#pid9892
+-- The dump is expected unpacked as "wikipages/api/*.txt", in the executable folder
+-- Only Windows-style paths are supported for now, since this is a one-time action
+function ConvertWikiToDesc()
+ local fout = io.open("APIDesc.wiki.lua", "w");
+ for filename in io.popen([[dir wikipages\\api\\*.txt /b]]):lines() do
+ -- Read file
+ local fin = io.open("wikipages\\api\\" .. filename, "r");
+ if (fin ~= nil) then
+ -- Read and parse the info from the file
+ local state = 0;
+ local Desc = "";
+ local Constants = {};
+ local Functions = {};
+ for line in fin:lines() do
+ if (line:find("======") ~= nil) then
+ state = 1; -- The following is the class description
+ elseif (line:find("===== Constants") ~= nil) then
+ state = 2; -- The following is the constants description
+ elseif (line:find("===== Functions") ~= nil) then
+ state = 3; -- The following is the functions description
+ elseif (line:find("=====") ~= nil) then
+ state = 4; -- The following is an unknown text, skip it entirely
+ elseif (state == 1) then
+ -- Class description:
+ if (line == "") then
+ line = "
\n
"; -- Replace empty lines with paragraph delimiters
+ end
+ Desc = Desc .. line .. "\n";
+ elseif (state == 2) then
+ -- Constants:
+ local Split = StringSplitAndTrim(line, "|");
+ if (#Split >= 3) then
+ -- Split[1] is always "", because the line starts with a "|"
+ table.insert(Constants, {Name = Split[2], Notes = Split[3]});
+ end
+ elseif (state == 3) then
+ -- Functions:
+ local Split = StringSplitAndTrim(line, "|");
+ if (#Split >= 5) then
+ -- Split[1] is always "", because the line starts with a "|"
+ table.insert(Functions, {Name = Split[2], Params = Split[3], Return = Split[4], Notes = Split[5]});
+ end
+ end
+ end -- for line
+ fin:close();
+
+ -- Write the info into the output file:
+ fout:write(filename:match("[^\.]*") .. " =\n{\tFunctions =\n\t{\n");
+ for i, func in ipairs(Functions) do
+ fout:write("\t\t{ " .. func.Name .. " = { Params = \"" .. func.Params .. "\", Return =\"" ..
+ func.Return .. "\", Desc = \"" .. func.Notes .. "\" },\n"
+ );
+ end
+ fout:write("\t},\n\tConstants =\n\t{\n");
+ for i, cons in ipairs(Constants) do
+ fout:write("\t\t{ " .. cons.Name .. " = { Notes = \"" .. cons.Notes .. "\" },\n");
+ end
+ fout:write("\t},\n},\n\n\n");
+ end -- if fin ~= nil
+ end -- for file
+ fout:close();
+end
+
+
+
+
--
cgit v1.2.3