Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for newer version of Love2D #1

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
This project uses the awesome [love-api][] project, which provides a lua tables representation of the love documention, to generate Haxe wrappers.
To use this project, make sure to checkout the submodule (`git submodule update --init love-api`).

Fair warning, the code is awful, and full of hacks. Oh yeah, and unless you have `mkdir -p`, it won't run. Look, it was easy.
Fair warning, the code is awful, and full of hacks. Look, it was easy.

[love-api]: https://github.com/love2d-community/love-api
59 changes: 52 additions & 7 deletions haxify.lua
Original file line number Diff line number Diff line change
Expand Up @@ -114,22 +114,48 @@ do
value = "Dynamic",
any = "Dynamic",
Variant = "Dynamic",
cdata = "Dynamic",

-- FIXME
["ShaderVariableType"] = "String",
["KeyConstant"] = "String",
["Scancode"] = "String",
}

function typeMap(t)
return map[t] or t
-- FIXME: union types
if string.find(t, " or ") then
return "Dynamic"
else
return map[t] or t
end
end
end

function capitalize(s)
return s:sub(1, 1):upper() .. s:sub(2)
end

do
-- if an identifier begins with a digit,
-- prepend an underscore
local numbers = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}
function correctIdentifier(s)
local firstCh = string.sub(s, 1, 1)

for _, v in ipairs(numbers) do
if v == firstCh then
return "_" .. s
end
end

return s
end
end

-- fix backslashes and doublequotes
function escapeString(s)
return s:gsub("\\", "\\\\"):gsub("\"", "\\\"")
end

function mergeTables(target, src, prefix)
prefix = prefix or ""
for i, v in pairs(src) do
Expand Down Expand Up @@ -235,13 +261,19 @@ function emitMethod(typeName, m, types, multirets)
end

function emitEnum(e, packageName)
local overrideFile = io.open(("overrides/%s.%s.hx"):format(packageName, e.name), "r")
if overrideFile then
local contents = overrideFile:read("*a")
overrideFile:close()
return {[e.name .. ".hx"] = contents}
end

local out = {}
table.insert(out, ("package %s;"):format(packageName))
table.insert(out, "@:enum")
table.insert(out, ("abstract %s (String)\n{"):format(e.name))
table.insert(out, ("enum abstract %s (String)\n{"):format(e.name))

for i, v in ipairs(e.constants) do
table.insert(out, ("\tvar %s = \"%s\";"):format(capitalize(v.name), v.name))
table.insert(out, ("\tvar %s = \"%s\";"):format(correctIdentifier(capitalize(v.name)), escapeString(v.name)))
end

table.insert(out, "}")
Expand All @@ -257,6 +289,13 @@ function emitHeader(out, packageName)
end

function emitType(t, packageName)
local overrideFile = io.open(("overrides/%s.%s.hx"):format(packageName, t.name), "r")
if overrideFile then
local contents = overrideFile:read("*a")
overrideFile:close()
return {[t.name .. ".hx"] = contents}
end

local out = {}
local types = {}
local multirets = {}
Expand Down Expand Up @@ -327,8 +366,14 @@ end

mergeTables(files, emitModule(api, "love"))

local dirSep = package.config:sub(1, 1)
for i, v in pairs(files) do
os.execute("mkdir -p " .. dirname(i))
if dirSep == "/" then -- unix
os.execute("mkdir -p " .. dirname(i))
else -- windows
os.execute("mkdir " .. dirname(i):gsub("/", dirSep))
end

local f = io.open(i, "w")
f:write(v)
f:close()
Expand Down
2 changes: 1 addition & 1 deletion love-api
Submodule love-api updated 144 files
148 changes: 148 additions & 0 deletions overrides/love.keyboard.KeyConstant.hx
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
package love.keyboard;
enum abstract KeyConstant (String)
{
var A = "a";
var B = "b";
var C = "c";
var D = "d";
var E = "e";
var F = "f";
var G = "g";
var H = "h";
var I = "i";
var J = "j";
var K = "k";
var L = "l";
var M = "m";
var N = "n";
var O = "o";
var P = "p";
var Q = "q";
var R = "r";
var S = "s";
var T = "t";
var U = "u";
var V = "v";
var W = "w";
var X = "x";
var Y = "y";
var Z = "z";
var Zero = "0";
var One = "1";
var Two = "2";
var Three = "3";
var Four = "4";
var Five = "5";
var Six = "6";
var Seven = "7";
var Eight = "8";
var Nine = "9";
var Space = "space";
var ExclamationMark = "!";
var DoubleQuote = "\"";
var Hash = "#";
var Dollar = "$";
var Ampersand = "&";
var SingleQuote = "'";
var LeftParenthesis = "(";
var RightParenthesis = ")";
var Asterik = "*";
var Plus = "+";
var Comma = ",";
var Minus = "-";
var Period = ".";
var Slash = "/";
var Colon = ":";
var Semicolon = ";";
var LessThan = "<";
var Equals = "=";
var RightThan = ">";
var QuestionMark = "?";
var At = "@";
var LeftBracket = "[";
var Backslash = "\\";
var RightBracket = "]";
var Caret = "^";
var Underscore = "_";
var GraveAccent = "`";
var Kp0 = "kp0";
var Kp1 = "kp1";
var Kp2 = "kp2";
var Kp3 = "kp3";
var Kp4 = "kp4";
var Kp5 = "kp5";
var Kp6 = "kp6";
var Kp7 = "kp7";
var Kp8 = "kp8";
var Kp9 = "kp9";
var KpPeriod = "kp.";
var KpDivision = "kp/";
var KpMultiply = "kp*";
var KpMinus = "kp-";
var KpPlus = "kp+";
var KpEnter = "kpenter";
var KpEquals = "kp=";
var Up = "up";
var Down = "down";
var Right = "right";
var Left = "left";
var Home = "home";
var End = "end";
var PageUp = "pageup";
var PageDown = "pagedown";
var Insert = "insert";
var Backspace = "backspace";
var Tab = "tab";
var Clear = "clear";
var Return = "return";
var Delete = "delete";
var F1 = "f1";
var F2 = "f2";
var F3 = "f3";
var F4 = "f4";
var F5 = "f5";
var F6 = "f6";
var F7 = "f7";
var F8 = "f8";
var F9 = "f9";
var F10 = "f10";
var F11 = "f11";
var F12 = "f12";
var F13 = "f13";
var F14 = "f14";
var F15 = "f15";
var NumLock = "numlock";
var CapsLock = "capslock";
var ScrolLock = "scrollock";
var RShift = "rshift";
var LShift = "lshift";
var RCtrl = "rctrl";
var LCtrl = "lctrl";
var RAlt = "ralt";
var LAlt = "lalt";
var RMeta = "rmeta";
var LMeta = "lmeta";
var LSuper = "lsuper";
var RSuper = "rsuper";
var Mode = "mode";
var Compose = "compose";
var Pause = "pause";
var Escape = "escape";
var Help = "help";
var Print = "print";
var SysReq = "sysreq";
var Break = "break";
var Menu = "menu";
var Power = "power";
var Euro = "euro";
var Undo = "undo";
var WWW = "www";
var Mail = "mail";
var Calculator = "calculator";
var AppSearch = "appsearch";
var AppHome = "apphome";
var AppBack = "appback";
var AppForward = "appforward";
var AppRefresh = "apprefresh";
var AppBookmarks = "appbookmarks";
}
Loading