From 6a1645d499e26ab02b365dd4b93da771815d8c0d Mon Sep 17 00:00:00 2001
From: Marius <mariausol@gmail.com>
Date: Sat, 17 Sep 2011 17:20:13 +0300
Subject: beta 2011.09.17 15:56

---
 scripts/context/lua/mtx-scite.lua | 337 ++++++++++++++++++++++----------------
 1 file changed, 197 insertions(+), 140 deletions(-)

(limited to 'scripts')

diff --git a/scripts/context/lua/mtx-scite.lua b/scripts/context/lua/mtx-scite.lua
index 0ac09b017..c969f209e 100644
--- a/scripts/context/lua/mtx-scite.lua
+++ b/scripts/context/lua/mtx-scite.lua
@@ -6,17 +6,22 @@ if not modules then modules = { } end modules ['mtx-scite'] = {
     license   = "see context related readme files"
 }
 
--- todo: append to global properties else order of loading problem
--- linux problem ... files are under root protection so we need --install
+local P, R, S, C, Ct, Cf, Cc, Cg = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Ct, lpeg.Cf, lpeg.Cc, lpeg.Cg
+local lpegmatch = lpeg.match
+local format, lower, gmatch = string.format, string.lower, string.gmatch
+
+-- local helpinfo = [[
+-- --start [--verbose]   start scite
+-- --test                report what will happen
+-- ]]
 
 local helpinfo = [[
---start [--verbose]   start scite
---test                report what will happen
+--words             convert spell-*.txt into spell-*.lua
 ]]
 
 local application = logs.application {
     name     = "mtx-scite",
-    banner   = "Scite Startup Script 1.00",
+    banner   = "Scite Helper Script 1.00",
     helpinfo = helpinfo,
 }
 
@@ -25,148 +30,200 @@ local report = application.report
 scripts       = scripts       or { }
 scripts.scite = scripts.scite or { }
 
-local scitesignals = { "scite-context.rme", "context.properties" }
-local screenfont   = "lmtypewriter10-regular.ttf"
+-- todo: append to global properties else order of loading problem
+-- linux problem ... files are under root protection so we need --install
+--
+-- local scitesignals = { "scite-context.rme", "context.properties" }
+-- local screenfont   = "lmtypewriter10-regular.ttf"
 
-function scripts.scite.start(indeed)
-    local usedsignal, datapath, fullname, workname, userpath, fontpath
-    if os.type == "windows" then
-        workname = "scite.exe"
-        userpath = os.getenv("USERPROFILE") or ""
-        fontpath = os.getenv("SYSTEMROOT")
-        fontpath = (fontpath and file.join(fontpath,"fonts")) or ""
-    else
-        workname = "scite"
-        userpath = os.getenv("HOME") or ""
-        fontpath = ""
-    end
-    local binpaths = file.split_path(os.getenv("PATH")) or file.split_path(os.getenv("path"))
-    for i=1,#scitesignals do
-        local scitesignal = scitesignals[i]
-        local scitepath = resolvers.findfile(scitesignal,"other text files") or ""
-        if scitepath ~= "" then
-            scitepath  = file.dirname(scitepath) -- data
-            if scitepath == "" then
-                scitepath = resolvers.cleanpath(lfs.currentdir())
-            else
-                usedsignal, datapath = scitesignal, scitepath
-                break
-            end
-        end
-    end
-    if not datapath or datapath == "" then
-        report("invalid datapath, maybe you need to regenerate the file database")
-        return false
-    end
-    if not binpaths or #binpaths == 0 then
-        report("invalid binpath")
-        return false
-    end
-    for i=1,#binpaths do
-        local p = file.join(binpaths[i],workname)
-        if lfs.isfile(p) and lfs.attributes(p,"size") > 10000 then -- avoind stub
-            fullname = p
-            break
-        end
-    end
-    if not fullname then
-        report("unable to locate %s",workname)
-        return false
-    end
-    local properties  = dir.glob(file.join(datapath,"*.properties"))
-    local luafiles    = dir.glob(file.join(datapath,"*.lua"))
-    local extrafont   = resolvers.findfile(screenfont,"truetype font") or ""
-    local pragmafound = dir.glob(file.join(datapath,"pragma.properties"))
-    if userpath == "" then
-        report("unable to figure out userpath")
-        return false
-    end
-    local verbose = environment.argument("verbose")
-    local tobecopied, logdata = { }, { }
-    local function check_state(fullname,newpath)
-        local basename = file.basename(fullname)
-        local destination = file.join(newpath,basename)
-        local pa, da = lfs.attributes(fullname), lfs.attributes(destination)
-        if not da then
-            logdata[#logdata+1] = { "new        : %s", basename }
-            tobecopied[#tobecopied+1] = { fullname, destination }
-        elseif pa.modification > da.modification then
-            logdata[#logdata+1] = { "outdated   : %s", basename }
-            tobecopied[#tobecopied+1] = { fullname, destination }
-        else
-            logdata[#logdata+1] = { "up to date : %s", basename }
-        end
-    end
-    for i=1,#properties do
-        check_state(properties[i],userpath)
-    end
-    for i=1,#luafiles do
-        check_state(luafiles[i],userpath)
-    end
-    if fontpath ~= "" then
-        check_state(extrafont,fontpath)
-    end
-    local userpropfile = "SciTEUser.properties"
-    if os.name ~= "windows" then
-        userpropfile = "."  .. userpropfile
+-- function scripts.scite.start(indeed)
+--     local usedsignal, datapath, fullname, workname, userpath, fontpath
+--     if os.type == "windows" then
+--         workname = "scite.exe"
+--         userpath = os.getenv("USERPROFILE") or ""
+--         fontpath = os.getenv("SYSTEMROOT")
+--         fontpath = (fontpath and file.join(fontpath,"fonts")) or ""
+--     else
+--         workname = "scite"
+--         userpath = os.getenv("HOME") or ""
+--         fontpath = ""
+--     end
+--     local binpaths = file.split_path(os.getenv("PATH")) or file.split_path(os.getenv("path"))
+--     for i=1,#scitesignals do
+--         local scitesignal = scitesignals[i]
+--         local scitepath = resolvers.findfile(scitesignal,"other text files") or ""
+--         if scitepath ~= "" then
+--             scitepath  = file.dirname(scitepath) -- data
+--             if scitepath == "" then
+--                 scitepath = resolvers.cleanpath(lfs.currentdir())
+--             else
+--                 usedsignal, datapath = scitesignal, scitepath
+--                 break
+--             end
+--         end
+--     end
+--     if not datapath or datapath == "" then
+--         report("invalid datapath, maybe you need to regenerate the file database")
+--         return false
+--     end
+--     if not binpaths or #binpaths == 0 then
+--         report("invalid binpath")
+--         return false
+--     end
+--     for i=1,#binpaths do
+--         local p = file.join(binpaths[i],workname)
+--         if lfs.isfile(p) and lfs.attributes(p,"size") > 10000 then -- avoind stub
+--             fullname = p
+--             break
+--         end
+--     end
+--     if not fullname then
+--         report("unable to locate %s",workname)
+--         return false
+--     end
+--     local properties  = dir.glob(file.join(datapath,"*.properties"))
+--     local luafiles    = dir.glob(file.join(datapath,"*.lua"))
+--     local extrafont   = resolvers.findfile(screenfont,"truetype font") or ""
+--     local pragmafound = dir.glob(file.join(datapath,"pragma.properties"))
+--     if userpath == "" then
+--         report("unable to figure out userpath")
+--         return false
+--     end
+--     local verbose = environment.argument("verbose")
+--     local tobecopied, logdata = { }, { }
+--     local function check_state(fullname,newpath)
+--         local basename = file.basename(fullname)
+--         local destination = file.join(newpath,basename)
+--         local pa, da = lfs.attributes(fullname), lfs.attributes(destination)
+--         if not da then
+--             logdata[#logdata+1] = { "new        : %s", basename }
+--             tobecopied[#tobecopied+1] = { fullname, destination }
+--         elseif pa.modification > da.modification then
+--             logdata[#logdata+1] = { "outdated   : %s", basename }
+--             tobecopied[#tobecopied+1] = { fullname, destination }
+--         else
+--             logdata[#logdata+1] = { "up to date : %s", basename }
+--         end
+--     end
+--     for i=1,#properties do
+--         check_state(properties[i],userpath)
+--     end
+--     for i=1,#luafiles do
+--         check_state(luafiles[i],userpath)
+--     end
+--     if fontpath ~= "" then
+--         check_state(extrafont,fontpath)
+--     end
+--     local userpropfile = "SciTEUser.properties"
+--     if os.name ~= "windows" then
+--         userpropfile = "."  .. userpropfile
+--     end
+--     local fullpropfile = file.join(userpath,userpropfile)
+--     local userpropdata = io.loaddata(fullpropfile) or ""
+--     local propfiledone = false
+--     if pragmafound then
+--         if userpropdata == "" then
+--             logdata[#logdata+1] = { "error      : no user properties found on '%s'", fullpropfile }
+--         elseif string.find(userpropdata,"import *pragma") then
+--             logdata[#logdata+1] = { "up to date : 'import pragma' in '%s'", userpropfile }
+--         else
+--             logdata[#logdata+1] = { "yet unset  : 'import pragma' in '%s'", userpropfile }
+--             userproperties = userpropdata .. "\n\nimport pragma\n\n"
+--             propfiledone = true
+--         end
+--     else
+--         if string.find(userpropdata,"import *context") then
+--             logdata[#logdata+1] = { "up to date : 'import context' in '%s'", userpropfile }
+--         else
+--             logdata[#logdata+1] = { "yet unset  : 'import context' in '%s'", userpropfile }
+--             userproperties = userpropdata .. "\n\nimport context\n\n"
+--             propfiledone = true
+--         end
+--     end
+--     if not indeed or verbose then
+--         report("used signal: %s", usedsignal)
+--         report("data path  : %s", datapath)
+--         report("full name  : %s", fullname)
+--         report("user path  : %s", userpath)
+--         report("extra font : %s", extrafont)
+--     end
+--     if #logdata > 0 then
+--         report("")
+--         for k=1,#logdata do
+--             local v = logdata[k]
+--             report(v[1],v[2])
+--         end
+--     end
+--     if indeed then
+--         if #tobecopied > 0 then
+--             report("warning    : copying updated files")
+--             for i=1,#tobecopied do
+--                 local what = tobecopied[i]
+--                 report("copying    : '%s' => '%s'",what[1],what[2])
+--                 file.copy(what[1],what[2])
+--             end
+--         end
+--         if propfiledone then
+--             report("saving     : '%s'",userpropfile)
+--             io.savedata(fullpropfile,userpropdata)
+--         end
+--         os.launch(fullname)
+--     end
+-- end
+
+-- local splitter = (Cf(Ct("") * (Cg(C(R("az","AZ","\127\255")^1) * Cc(true)) + P(1))^1,rawset) )^0
+--
+-- local function splitwords(words)
+--     return lpegmatch(splitter,words) -- or just split and tohash
+-- end
+
+local function splitwords(words)
+    local w = { }
+    for s in string.gmatch(words,"[a-zA-Z\127-255]+") do
+        w[lower(s)] = s
     end
-    local fullpropfile = file.join(userpath,userpropfile)
-    local userpropdata = io.loaddata(fullpropfile) or ""
-    local propfiledone = false
-    if pragmafound then
-        if userpropdata == "" then
-            logdata[#logdata+1] = { "error      : no user properties found on '%s'", fullpropfile }
-        elseif string.find(userpropdata,"import *pragma") then
-            logdata[#logdata+1] = { "up to date : 'import pragma' in '%s'", userpropfile }
-        else
-            logdata[#logdata+1] = { "yet unset  : 'import pragma' in '%s'", userpropfile }
-            userproperties = userpropdata .. "\n\nimport pragma\n\n"
-            propfiledone = true
-        end
-    else
-        if string.find(userpropdata,"import *context") then
-            logdata[#logdata+1] = { "up to date : 'import context' in '%s'", userpropfile }
+    return w
+end
+
+-- maybe: lowerkey = UpperWhatever
+
+function scripts.scite.words()
+    for i=1,#environment.files do
+        local tag = environment.files[i]
+        local tag = string.match(tag,"spell%-(..)%.") or tag
+        local txtname = format("spell-%s.txt",tag)
+        local luaname = format("spell-%s.lua",tag)
+        local lucname = format("spell-%s.luc",tag)
+        if lfs.isfile(txtname) then
+            report("loading %s",txtname)
+            local olddata = io.loaddata(txtname) or ""
+            local newdata = {
+                words  = splitwords(olddata),
+            --  words  = olddata,
+                source = oldname,
+            }
+            report("saving %s",luaname)
+            io.savedata(luaname,table.serialize(newdata,true))
+            report("compiling %s",lucname)
+            os.execute(format("luac -s -o %s %s",lucname,luaname))
         else
-            logdata[#logdata+1] = { "yet unset  : 'import context' in '%s'", userpropfile }
-            userproperties = userpropdata .. "\n\nimport context\n\n"
-            propfiledone = true
+            report("no data file %s",txtname)
         end
     end
-    if not indeed or verbose then
-        report("used signal: %s", usedsignal)
-        report("data path  : %s", datapath)
-        report("full name  : %s", fullname)
-        report("user path  : %s", userpath)
-        report("extra font : %s", extrafont)
-    end
-    if #logdata > 0 then
-        report("")
-        for k=1,#logdata do
-            local v = logdata[k]
-            report(v[1],v[2])
-        end
-    end
-    if indeed then
-        if #tobecopied > 0 then
-            report("warning    : copying updated files")
-            for i=1,#tobecopied do
-                local what = tobecopied[i]
-                report("copying    : '%s' => '%s'",what[1],what[2])
-                file.copy(what[1],what[2])
-            end
-        end
-        if propfiledone then
-            report("saving     : '%s'",userpropfile)
-            io.savedata(fullpropfile,userpropdata)
-        end
-        os.launch(fullname)
-    end
+    report("you need to move the lua files to lexers/data")
 end
 
-if environment.argument("start") then
-    scripts.scite.start(true)
-elseif environment.argument("test") then
-    scripts.scite.start()
+-- if environment.argument("start") then
+--     scripts.scite.start(true)
+-- elseif environment.argument("test") then
+--     scripts.scite.start()
+-- else
+--     application.help()
+-- end
+
+if environment.argument("words") then
+    scripts.scite.words()
 else
     application.help()
 end
+
-- 
cgit v1.2.3