summaryrefslogtreecommitdiff
path: root/conlex.lua
diff options
context:
space:
mode:
Diffstat (limited to 'conlex.lua')
-rwxr-xr-xconlex.lua67
1 files changed, 58 insertions, 9 deletions
diff --git a/conlex.lua b/conlex.lua
index afee980..bf3ff8c 100755
--- a/conlex.lua
+++ b/conlex.lua
@@ -1,4 +1,6 @@
#!/usr/bin/env lua5.3
+local lpeg = require'lpeg'
+
local function template(str, args)
return (str:gsub("%%(%w+)%%", args))
end
@@ -74,24 +76,65 @@ function glossors.sanila(text)
table.insert(items, format_def(word, entry))
end
- return items
+ return table.concat(items, "\n")
+end
+
+glossors["vötgil"] = function(text)
+ local words = load_dict "vötgil.tsv"
+ local function norm(s)
+ return s:lower():gsub("Ð","ð"):gsub("Ö","ö"):gsub("0","ö"):gsub("9","ð")
+ end
+
+ local letter = lpeg.R("az","AZ") + lpeg.S"09" + "ö" + "Ö" + 'ð' + 'Ð'
+ local word = (letter*letter*letter) / function (w)
+ return format_def(w, words[norm(w)])
+ end * lpeg.Cp()
+
+ local i = 1
+ local out = ""
+ while i < #text do
+ local item, ni = lpeg.match(word, text, i)
+ if item then
+ out = out .. item
+ i = ni
+ else
+ out = out .. text:sub(i,i)
+ i = i + 1
+ end
+ end
+ return out
end
local function engloss(langue, text)
- local items = glossors[langue](text)
+ local text = glossors[langue](text)
return template([[
<section>%text%</section>
- <section id=place></section>]], {text=table.concat(items, "\n")})
+ <section id=place></section>
+ <section><a href="%path%">&lt; return</a></section>
+ ]], {text=text,path=os.getenv"SCRIPT_NAME"})
end
local function enform()
- return [[
+ local options = {}
+ for k in pairs(glossors) do
+ table.insert(options, template('<option value="%x%" >%x%</option>', {x=k}))
+ end
+ table.sort(options)
+ return template([[
<section>
<form>
<textarea name=q></textarea>
- <button>perform <i>conlation</i></button>
+ <label for=langue>select con-langue:</label>
+ <select name=langue id=langue>
+ %options%
+ </select>
+ <br><button>perform <i>conglossatio</i></button>
</form>
-</section>]]
+</section>
+]], {
+ options=table.concat(options, "\n"),
+
+ })
end
local function response(content)
@@ -101,14 +144,20 @@ local function response(content)
end
local function main()
- local text = nil
+ local langue, text
local qs = os.getenv"QUERY_STRING"
- if qs then text = parse_qs(qs).q end
+ if qs then
+ local pqs = parse_qs(qs)
+ langue = pqs.langue
+ text = pqs.q
+ end
if not text then
response(enform())
+ elseif not glossors[langue] then
+ response("unknown langue "..langue)
else
- response(engloss('sanila', text))
+ response(engloss(langue, text))
end
end