|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file:
-- http://anggtwu.net/LUA/PercPush1.lua.html
-- http://anggtwu.net/LUA/PercPush1.lua
-- (find-angg "LUA/PercPush1.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- (defun e () (interactive) (find-angg "LUA/PercPush1.lua"))
-- Used in:
-- (c2m241exprsp 7 "percpush")
-- (c2m241exprsa "percpush")
require "Show2" -- (find-angg "LUA/Show2.lua")
require "Stack1" -- (find-angg "LUA/Stack1.lua")
defs.percpush = [=[
\def\undcolor#1#2{{\color{#1}\underbrace{\color{black}#2}{}}}
\def\unda#1{\undcolor{black}{#1}}
\def\undb#1{\undcolor{orange}{#1}}
]=]
table.addentries(Stack.__index, {
popn = function (s,n)
local r = HTable {}
for i=#s-n+1,#s do table.insert(r, s[i]) end
s:dropn(n)
return r
end,
perccount = function (s,str) return #(str:gsub("[^%%]", "")) end,
perc_u = function (s,a) return format(" \\unda{%s}{} ", a) end,
perc_b = function (s,a) return format(" \\undb{%s}{} ", a) end,
percsubst0 = function (s,fmt)
local n=0
local f = function (c) n=n+1; return format("[%d:%s]", n, c) end
return (fmt:gsub("%%(.)", f))
end,
percsubst1 = function (s,fmt,L)
local n=0
local f = function (c)
n=n+1
return s["perc_"..c](s, L[n])
end
return (fmt:gsub("%%(.)", f))
end,
percpush = function (s,fmt)
local n = s:perccount(fmt)
if n==0 then s:push(fmt); return s end
local L = s:popn(n)
s:push(s:percsubst1(fmt, L))
return s
end,
})
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "PercPush1.lua"
s = Stack.new()
= s:push(10):push(20):push(30):push(40):push(50):push(60):push(70)
= s:popn(2)
= s
= s:perccount"foo%abarplic%bcc"
= s:percsubst0 "foo%abarplic%bcc"
= s:percsubst1("foo%ubarplic%ucc", {20, 30})
= s
= s:percpush("a")
= s:percpush("b%uc%ud")
percdo = function (bigstr)
local s = Stack.new()
for _,w in ipairs(split(bitrim(bigstr))) do s:percpush(w) end
return s[1]
end
= percdo [=[ a b f(%u,%u) c %u+%u ]=]
= percdo [=[ a b f(%u,%u) c %u+%u ]=] :show({em=1})
= percdo [=[ f a b %b(%u,%u) c %u+%u ]=] :show({em=1})
= Show.bigstr
= Show.log
* (etv)
--]==]
-- Local Variables:
-- coding: utf-8-unix
-- End: