Scripts 'make_dist' and 'test' ready
This commit is contained in:
parent
ddb9c68e82
commit
49ac3f53fc
12
README.md
12
README.md
|
@ -40,11 +40,19 @@ Enter the repo:
|
||||||
|
|
||||||
Inside, do the tests:
|
Inside, do the tests:
|
||||||
|
|
||||||
sh scripts/test.sh
|
pandoc lua scripts/test.lua
|
||||||
|
|
||||||
For other kind of tests, do:
|
For other kind of tests, do:
|
||||||
|
|
||||||
sh scripts/test.sh -h
|
pandoc lua scripts/test.lua -h
|
||||||
|
|
||||||
|
For other scripts, do:
|
||||||
|
|
||||||
|
pandoc lua scripts/SCRIPT
|
||||||
|
|
||||||
|
For example, do:
|
||||||
|
|
||||||
|
pandoc lua scripts/make_dist.lua
|
||||||
|
|
||||||
Contribute!
|
Contribute!
|
||||||
|
|
||||||
|
|
|
@ -6258,6 +6258,105 @@ do
|
||||||
package.preload[module_name] = nil
|
package.preload[module_name] = nil
|
||||||
end
|
end
|
||||||
local fnl = mod
|
local fnl = mod
|
||||||
|
|
||||||
|
------------------------------------ MODS ------------------------------------
|
||||||
|
|
||||||
|
-- Tries popen
|
||||||
|
-- @param ... string: Chunks for popen
|
||||||
|
-- @return boolean, string: Status and output of popen
|
||||||
|
function io.try(...)
|
||||||
|
local cmd = table.concat({...}, " ") .. " 2>&1"
|
||||||
|
local handle = io.popen(cmd)
|
||||||
|
local output = handle:read("*a")
|
||||||
|
local status = (handle:close() ~= nil and true or false)
|
||||||
|
return status, output
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Gets OS short name
|
||||||
|
-- It is just intented to know if it is Linux, macOS or Windows.
|
||||||
|
-- @return string: "linux" or "macos" or "windows"
|
||||||
|
function os.uname()
|
||||||
|
local status, output = io.try("uname")
|
||||||
|
if status then
|
||||||
|
output = output:gsub(" .*", ""):lower()
|
||||||
|
if output ~= "linux" then
|
||||||
|
return "macos"
|
||||||
|
end
|
||||||
|
return "linux"
|
||||||
|
end
|
||||||
|
return "windows"
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Checks if OS is windows
|
||||||
|
-- @return boolean: Windows or not
|
||||||
|
function os.iswin()
|
||||||
|
return os.uname() == "windows"
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Checks if OS is Unix
|
||||||
|
-- @return boolean: Unix or not
|
||||||
|
function os.isunix()
|
||||||
|
return os.uname() ~= "windows"
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Changes newlines so everything is in one line
|
||||||
|
-- @return string: String with formatted newlines as literal "\n"
|
||||||
|
function string:linearize()
|
||||||
|
return self:gsub("\n", "\\\\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Checks if string is empty
|
||||||
|
-- @return boolean: Empty or not
|
||||||
|
function string:isempty()
|
||||||
|
return self == ''
|
||||||
|
end
|
||||||
|
|
||||||
|
function string:lstrip()
|
||||||
|
return self:gsub("^%s+", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
function string:rstrip()
|
||||||
|
return self:gsub("%s+$", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
function string:strip()
|
||||||
|
return self:lstrip():rstrip()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- The following are heavily influenced by Python pathlib
|
||||||
|
-- Check: https://docs.python.org/3/library/pathlib.html
|
||||||
|
|
||||||
|
-- Checks if string is a file or directory
|
||||||
|
-- @return boolean: Exists or not
|
||||||
|
function string:exists()
|
||||||
|
return os.rename(self, self) ~= nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Checks if string is a file
|
||||||
|
-- @return boolean: File or not
|
||||||
|
function string:isfile()
|
||||||
|
if self:exists() then
|
||||||
|
return io.open(self, "a+") ~= nil
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Checks if string is a directory
|
||||||
|
-- @return boolean: Directory or not
|
||||||
|
function string:isdir()
|
||||||
|
if self:exists() then
|
||||||
|
return io.open(self, "a+") == nil
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Reads file content
|
||||||
|
-- @return string or nil: File content or nil
|
||||||
|
function string:read_text()
|
||||||
|
if self:exists() then
|
||||||
|
return io.open(self):read("*a")
|
||||||
|
end
|
||||||
|
end
|
||||||
----------------------------------- NATURAL -----------------------------------
|
----------------------------------- NATURAL -----------------------------------
|
||||||
|
|
||||||
local nat = {}
|
local nat = {}
|
||||||
|
@ -6265,29 +6364,8 @@ local nat = {}
|
||||||
function nat.get(str)
|
function nat.get(str)
|
||||||
return str
|
return str
|
||||||
end
|
end
|
||||||
|
|
||||||
----------------------------------- LITERATE ----------------------------------
|
----------------------------------- LITERATE ----------------------------------
|
||||||
|
|
||||||
-- Types functions extensions
|
|
||||||
|
|
||||||
-- Changes newlines so everything is in one line
|
|
||||||
function string:linearize()
|
|
||||||
return self:gsub("\n", "\\\\n")
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Checks if is empty
|
|
||||||
function string:isempty()
|
|
||||||
return self == ''
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Checks if is directory
|
|
||||||
function string:isdir()
|
|
||||||
if self ~= "." and os.rename(self, self) == nil then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Variable for all literate stuff
|
-- Variable for all literate stuff
|
||||||
local lit = {}
|
local lit = {}
|
||||||
|
|
||||||
|
@ -6331,6 +6409,7 @@ function lit.checkmetatype(type, meta, key)
|
||||||
local err = ""
|
local err = ""
|
||||||
if type ~= mtype then
|
if type ~= mtype then
|
||||||
if type == "path" then
|
if type == "path" then
|
||||||
|
-- TODO
|
||||||
if not(pandoc.path.directory(mval):isdir()) then
|
if not(pandoc.path.directory(mval):isdir()) then
|
||||||
err = "Invalid path '" .. mval .. "' in key '" .. key .. "'"
|
err = "Invalid path '" .. mval .. "' in key '" .. key .. "'"
|
||||||
end
|
end
|
||||||
|
@ -6448,7 +6527,6 @@ function lit.puts(msg, kind)
|
||||||
end
|
end
|
||||||
|
|
||||||
function lit.parseyaml(rawyaml)
|
function lit.parseyaml(rawyaml)
|
||||||
-- TODO: avoid popen?
|
|
||||||
local yaml = io.popen("pandoc -t json <<<\"" .. rawyaml .. "\" 2>&1")
|
local yaml = io.popen("pandoc -t json <<<\"" .. rawyaml .. "\" 2>&1")
|
||||||
if yaml:read("*l"):sub(1, 1) == "{" then
|
if yaml:read("*l"):sub(1, 1) == "{" then
|
||||||
yaml = pandoc.read(rawyaml).meta
|
yaml = pandoc.read(rawyaml).meta
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
-- Adds Lua custom extensions
|
||||||
|
require "../src/extensions"
|
||||||
|
|
||||||
|
function make_dist()
|
||||||
|
-- Variables
|
||||||
|
local name = "lin.lua"
|
||||||
|
local dist = pandoc.path.join({"dist", name})
|
||||||
|
local license = string.strip([[
|
||||||
|
Computable Pandoc & Fennel Bundle:
|
||||||
|
A Pandoc filter for literate and natural programming
|
||||||
|
Computable Pandoc:
|
||||||
|
(C) 2023 perro hi@perrotuerto.blog
|
||||||
|
License: GPLv3 https://git.cuates.net/perro/computable-pandoc/src/branch/no-masters/LICENSE.txt
|
||||||
|
Source: https://git.cuates.net/perro/computable-pandoc
|
||||||
|
Fennel:
|
||||||
|
(C) 2016-2023 Calvin Rose and contributors
|
||||||
|
License: MIT License https://git.sr.ht/~technomancy/fennel/tree/main/item/LICENSE
|
||||||
|
Source: https://sr.ht/~technomancy/fennel or https://github.com/bakpakin/Fennel/issues
|
||||||
|
Website: https://fennel-lang.org
|
||||||
|
]])
|
||||||
|
|
||||||
|
function chomp(str, without)
|
||||||
|
local without = without or false
|
||||||
|
str = string.read_text(str):strip()
|
||||||
|
str = str:gsub('\n+--[^\n]+\nrequire "extensions"', "")
|
||||||
|
if without then
|
||||||
|
return str:gsub("\n[^\n]+$", "")
|
||||||
|
end
|
||||||
|
return "\n" .. str .. "\n"
|
||||||
|
end
|
||||||
|
|
||||||
|
local ext = chomp("src/extensions.lua")
|
||||||
|
local pan = chomp("src/pandoc.lua")
|
||||||
|
local fnl = chomp("opt/fennel.lua", true)
|
||||||
|
local nat = chomp("src/natural.lua", true)
|
||||||
|
local lit = chomp("src/literate.lua", true)
|
||||||
|
|
||||||
|
-- Bundles Fennel and Computable Pandoc
|
||||||
|
file = io.open(dist, "w")
|
||||||
|
file:write("--[[\n", license, "\n]]--\n")
|
||||||
|
file:write(fnl, "\nlocal fnl = mod\n", ext, nat, lit, pan)
|
||||||
|
file:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
make_dist()
|
|
@ -1,26 +0,0 @@
|
||||||
# Makes distribution release
|
|
||||||
|
|
||||||
# Variables
|
|
||||||
NAME="lin.lua"
|
|
||||||
DIST=dist/$NAME
|
|
||||||
LICENSE="--[[
|
|
||||||
Computable Pandoc & Fennel Bundle:
|
|
||||||
A Pandoc filter for literate and natural programming
|
|
||||||
Computable Pandoc:
|
|
||||||
(C) 2023 perro hi@perrotuerto.blog
|
|
||||||
License: GPLv3 https://git.cuates.net/perro/computable-pandoc/src/branch/no-masters/LICENSE.txt
|
|
||||||
Source: https://git.cuates.net/perro/computable-pandoc
|
|
||||||
Fennel:
|
|
||||||
(C) 2016-2023 Calvin Rose and contributors
|
|
||||||
License: MIT License https://git.sr.ht/~technomancy/fennel/tree/main/item/LICENSE
|
|
||||||
Source: https://sr.ht/~technomancy/fennel or https://github.com/bakpakin/Fennel/issues
|
|
||||||
Website: https://fennel-lang.org
|
|
||||||
]]--"
|
|
||||||
|
|
||||||
# Bundles Fennel and computable Pandoc
|
|
||||||
(echo "$LICENSE") > $DIST
|
|
||||||
head -n -1 opt/fennel.lua >> $DIST
|
|
||||||
echo "local fnl = mod" >> $DIST
|
|
||||||
head -n -1 src/natural.lua >> $DIST
|
|
||||||
head -n -1 src/literate.lua >> $DIST
|
|
||||||
cat src/pandoc.lua >> $DIST
|
|
|
@ -0,0 +1,108 @@
|
||||||
|
-- Adds Lua custom extensions
|
||||||
|
require "../src/extensions"
|
||||||
|
require "../scripts/make_dist"
|
||||||
|
|
||||||
|
-- Variables
|
||||||
|
local filter = "-L dist/lin.lua"
|
||||||
|
local verbose = ""
|
||||||
|
local trace = ""
|
||||||
|
local files = {}
|
||||||
|
local cmds = {
|
||||||
|
["unix"] = {
|
||||||
|
["pandoc"] = "pandoc ",
|
||||||
|
["clear"] = "clear ",
|
||||||
|
["ls"] = "ls ",
|
||||||
|
},
|
||||||
|
["win"] = {
|
||||||
|
["pandoc"] = "pandoc.exe ",
|
||||||
|
["clear"] = "cls ",
|
||||||
|
["ls"] = "dir ",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Prints help
|
||||||
|
local function help()
|
||||||
|
local cmd = " pandoc lua script/test.lua"
|
||||||
|
print(table.concat({
|
||||||
|
"Usage:",
|
||||||
|
cmd .. " [OPTIONS] [FILES]",
|
||||||
|
"Options",
|
||||||
|
" -V --verbose Prints verbose debbuging output",
|
||||||
|
" -t --trace Prints diagnostic output tracing parser progress",
|
||||||
|
" -h --help Prints this help",
|
||||||
|
"Examples:",
|
||||||
|
cmd .. " Tests for 'tests/*.*",
|
||||||
|
cmd .. " -V Verbose tests for 'tests/*.*'",
|
||||||
|
cmd .. " -t Tests and tracing for 'tests/*.*'",
|
||||||
|
cmd .. " tests/fail* Tests for 'tests/fail*'",
|
||||||
|
cmd .. " -Vt tests/fail* Verbose tests and tracing for 'tests/fail*'",
|
||||||
|
cmd .. " -h Display this help",
|
||||||
|
}, "\n"))
|
||||||
|
os.exit()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Gets command according to OS
|
||||||
|
local function getcmd(str)
|
||||||
|
local system = (os.isunix() and "unix" or "win")
|
||||||
|
return cmds[system][str]
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Obtains result as "pass" | "fail" | "diff" (AST doesn't match)
|
||||||
|
local function getresult(file, f, v, t)
|
||||||
|
local tmp, name = "tmp.json", pandoc.path.filename(file)
|
||||||
|
local json = pandoc.path.join({"tests", "asts", name .. ".json"})
|
||||||
|
local ok, out = io.try(getcmd("pandoc"), f, v, t, "-t json", "-o", tmp, file)
|
||||||
|
local json1, json2 = tmp:read_text(), json:read_text()
|
||||||
|
os.remove("tmp.json")
|
||||||
|
if (ok and json2 == nil) or (ok and json1 == json2) then
|
||||||
|
return "pass", out:strip()
|
||||||
|
elseif ok and json1 ~= json2 then
|
||||||
|
return "diff", out:strip()
|
||||||
|
else
|
||||||
|
return "fail", out:strip()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Parses args
|
||||||
|
for _, a in ipairs(arg) do
|
||||||
|
if a:match("^-.*h.*") then
|
||||||
|
help()
|
||||||
|
elseif a == "-V" or a == "--verbose" then
|
||||||
|
verbose = "--verbose"
|
||||||
|
elseif a == "-t" or a == "--trace" then
|
||||||
|
trace = "--trace"
|
||||||
|
elseif a == "-Vt" or a == "-tV" then
|
||||||
|
verbose = "--verbose"
|
||||||
|
trace = "--trace"
|
||||||
|
elseif a:match("^-") == nil then
|
||||||
|
table.insert(files, pandoc.path.normalize(a))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Default files
|
||||||
|
if #files == 0 then
|
||||||
|
for file in io.popen(getcmd("ls") .. "tests"):lines() do
|
||||||
|
if file ~= "asts" then
|
||||||
|
table.insert(files, pandoc.path.join({"tests", file}))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Makes distribution bundle
|
||||||
|
make_dist()
|
||||||
|
|
||||||
|
-- Clears terminal
|
||||||
|
os.execute(getcmd("clear"))
|
||||||
|
print "🐾 Starting tests"
|
||||||
|
|
||||||
|
-- Does tests
|
||||||
|
for _, file in ipairs(files) do
|
||||||
|
local expectation = pandoc.path.filename(file):gsub("%W.+$", "")
|
||||||
|
local result, output = getresult(file, filter, verbose, trace)
|
||||||
|
print("⚗️ " .. file .. ":")
|
||||||
|
print(" Expect: " .. expectation)
|
||||||
|
print(" Result: " .. result)
|
||||||
|
if #verbose > 0 or #trace > 0 then
|
||||||
|
print(output)
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,71 +0,0 @@
|
||||||
# Makes tests
|
|
||||||
|
|
||||||
# Variables
|
|
||||||
FILTER=dist/lin.lua
|
|
||||||
FILES="tests/*.md"
|
|
||||||
VERBOSE=""
|
|
||||||
AST=false
|
|
||||||
CMD="sh $0"
|
|
||||||
|
|
||||||
# Prints help
|
|
||||||
echo_help () {
|
|
||||||
echo "Usage:"
|
|
||||||
echo " $CMD [-vah] [FILES]"
|
|
||||||
echo "Examples:"
|
|
||||||
echo " $CMD Tests for 'tests/*.md'"
|
|
||||||
echo " $CMD -v Verbose tests for 'tests/*.md'"
|
|
||||||
echo " $CMD -a Tests and AST for 'tests/*.md'"
|
|
||||||
echo " $CMD tests/fail* Tests for 'tests/fail*'"
|
|
||||||
echo " $CMD -va tests/fail* Verbose tests and AST for 'tests/fail*'"
|
|
||||||
echo " $CMD -h Display this help"
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
# Obtains result as "pass" | "fail" | "diff" (AST doesn't match)
|
|
||||||
get_result () {
|
|
||||||
result=$([[ $1 -ne 0 ]] && echo "fail" || echo "pass")
|
|
||||||
if [ -f $2.json ]; then
|
|
||||||
diff1=$(cat tmp.json | jq)
|
|
||||||
diff2=$(cat $2.json | jq)
|
|
||||||
difference=$(diff <( printf '%s\n' "$diff1" ) <( printf '%s\n' "$diff2" ))
|
|
||||||
result=$([[ $? -eq 0 ]] && echo "pass" || echo "diff")
|
|
||||||
fi
|
|
||||||
echo $result
|
|
||||||
}
|
|
||||||
|
|
||||||
# Checks options
|
|
||||||
while getopts ':vah' opt; do
|
|
||||||
case "$opt" in
|
|
||||||
v) VERBOSE="--verbose" ; shift ;;
|
|
||||||
a) AST=true ; shift ;;
|
|
||||||
h) echo_help ;;
|
|
||||||
?) echo "ERROR: only -v, -a or -h is allowed" ; exit 1 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# Checks for files
|
|
||||||
if [ $# -ne 0 ]; then
|
|
||||||
for file in $*; do
|
|
||||||
if [ ! -f $file ]; then
|
|
||||||
echo "ERROR: '$file' is not a file; do '$CMD -h' for more info" ; exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
FILES=$*
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Makes distribution bundle
|
|
||||||
sh scripts/make_dist.sh
|
|
||||||
|
|
||||||
# Does tests
|
|
||||||
clear && echo "🐾 Starting tests"
|
|
||||||
for file in $FILES; do
|
|
||||||
echo "⚗️ $file:"
|
|
||||||
expectation=${file:6:4}
|
|
||||||
ast=$(pandoc $VERBOSE -L $FILTER -t json -o tmp.json $file)
|
|
||||||
result=$(get_result $? $file)
|
|
||||||
echo " Expect: $expectation"
|
|
||||||
echo " Result: $result"
|
|
||||||
[ "$VERBOSE" = "--verbose" ] && echo -e "$ast"
|
|
||||||
[ "$AST" = true ] && pandoc -L $FILTER -t native $file
|
|
||||||
rm tmp.json
|
|
||||||
done
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
------------------------------------ MODS ------------------------------------
|
||||||
|
|
||||||
|
-- Tries popen
|
||||||
|
-- @param ... string: Chunks for popen
|
||||||
|
-- @return boolean, string: Status and output of popen
|
||||||
|
function io.try(...)
|
||||||
|
local cmd = table.concat({...}, " ") .. " 2>&1"
|
||||||
|
local handle = io.popen(cmd)
|
||||||
|
local output = handle:read("*a")
|
||||||
|
local status = (handle:close() ~= nil and true or false)
|
||||||
|
return status, output
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Gets OS short name
|
||||||
|
-- It is just intented to know if it is Linux, macOS or Windows.
|
||||||
|
-- @return string: "linux" or "macos" or "windows"
|
||||||
|
function os.uname()
|
||||||
|
local status, output = io.try("uname")
|
||||||
|
if status then
|
||||||
|
output = output:gsub(" .*", ""):lower()
|
||||||
|
if output ~= "linux" then
|
||||||
|
return "macos"
|
||||||
|
end
|
||||||
|
return "linux"
|
||||||
|
end
|
||||||
|
return "windows"
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Checks if OS is windows
|
||||||
|
-- @return boolean: Windows or not
|
||||||
|
function os.iswin()
|
||||||
|
return os.uname() == "windows"
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Checks if OS is Unix
|
||||||
|
-- @return boolean: Unix or not
|
||||||
|
function os.isunix()
|
||||||
|
return os.uname() ~= "windows"
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Changes newlines so everything is in one line
|
||||||
|
-- @return string: String with formatted newlines as literal "\n"
|
||||||
|
function string:linearize()
|
||||||
|
return self:gsub("\n", "\\\\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Checks if string is empty
|
||||||
|
-- @return boolean: Empty or not
|
||||||
|
function string:isempty()
|
||||||
|
return self == ''
|
||||||
|
end
|
||||||
|
|
||||||
|
function string:lstrip()
|
||||||
|
return self:gsub("^%s+", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
function string:rstrip()
|
||||||
|
return self:gsub("%s+$", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
function string:strip()
|
||||||
|
return self:lstrip():rstrip()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- The following are heavily influenced by Python pathlib
|
||||||
|
-- Check: https://docs.python.org/3/library/pathlib.html
|
||||||
|
|
||||||
|
-- Checks if string is a file or directory
|
||||||
|
-- @return boolean: Exists or not
|
||||||
|
function string:exists()
|
||||||
|
return os.rename(self, self) ~= nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Checks if string is a file
|
||||||
|
-- @return boolean: File or not
|
||||||
|
function string:isfile()
|
||||||
|
if self:exists() then
|
||||||
|
return io.open(self, "a+") ~= nil
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Checks if string is a directory
|
||||||
|
-- @return boolean: Directory or not
|
||||||
|
function string:isdir()
|
||||||
|
if self:exists() then
|
||||||
|
return io.open(self, "a+") == nil
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Reads file content
|
||||||
|
-- @return string or nil: File content or nil
|
||||||
|
function string:read_text()
|
||||||
|
if self:exists() then
|
||||||
|
return io.open(self):read("*a")
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,24 +1,7 @@
|
||||||
----------------------------------- LITERATE ----------------------------------
|
----------------------------------- LITERATE ----------------------------------
|
||||||
|
|
||||||
-- Types functions extensions
|
-- Adds Lua custom extensions
|
||||||
|
require "extensions"
|
||||||
-- Changes newlines so everything is in one line
|
|
||||||
function string:linearize()
|
|
||||||
return self:gsub("\n", "\\\\n")
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Checks if is empty
|
|
||||||
function string:isempty()
|
|
||||||
return self == ''
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Checks if is directory
|
|
||||||
function string:isdir()
|
|
||||||
if self ~= "." and os.rename(self, self) == nil then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Variable for all literate stuff
|
-- Variable for all literate stuff
|
||||||
local lit = {}
|
local lit = {}
|
||||||
|
@ -63,6 +46,7 @@ function lit.checkmetatype(type, meta, key)
|
||||||
local err = ""
|
local err = ""
|
||||||
if type ~= mtype then
|
if type ~= mtype then
|
||||||
if type == "path" then
|
if type == "path" then
|
||||||
|
-- TODO
|
||||||
if not(pandoc.path.directory(mval):isdir()) then
|
if not(pandoc.path.directory(mval):isdir()) then
|
||||||
err = "Invalid path '" .. mval .. "' in key '" .. key .. "'"
|
err = "Invalid path '" .. mval .. "' in key '" .. key .. "'"
|
||||||
end
|
end
|
||||||
|
@ -180,7 +164,6 @@ function lit.puts(msg, kind)
|
||||||
end
|
end
|
||||||
|
|
||||||
function lit.parseyaml(rawyaml)
|
function lit.parseyaml(rawyaml)
|
||||||
-- TODO: avoid popen?
|
|
||||||
local yaml = io.popen("pandoc -t json <<<\"" .. rawyaml .. "\" 2>&1")
|
local yaml = io.popen("pandoc -t json <<<\"" .. rawyaml .. "\" 2>&1")
|
||||||
if yaml:read("*l"):sub(1, 1) == "{" then
|
if yaml:read("*l"):sub(1, 1) == "{" then
|
||||||
yaml = pandoc.read(rawyaml).meta
|
yaml = pandoc.read(rawyaml).meta
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
----------------------------------- NATURAL -----------------------------------
|
----------------------------------- NATURAL -----------------------------------
|
||||||
|
|
||||||
|
-- Adds Lua custom extensions
|
||||||
|
require "extensions"
|
||||||
|
|
||||||
local nat = {}
|
local nat = {}
|
||||||
|
|
||||||
function nat.get(str)
|
function nat.get(str)
|
||||||
|
|
Loading…
Reference in New Issue