Scite Simple Template

lua-users home

Apply tabular values to a template text

This Lua script for Scite (see SciteScripts) helps you repeat the same text template to be filled with tabular values.

Say you have several lines of tab separated values. Each line will be split (tab character) into values. Ex:

af	Afghanistan
za	Afrique Du Sud
al	Albanie
dz	Algérie
de	Allemagne
//ad	Andorre
ao	Angola
ai	Anguilla
aq	Antarctique
ag	Antigua
fr	France	SELECTED
zw	Zimbabwe

Now write the template (it can be multiline). It must appear just after your values. Ex:

<option value="<1>" <3>><2></option>

The script will duplicate and fill automatically the template with your values. It is quite simple:

Carefully select the template (from top to bottom) and run the script. The generated text will be inserted after the template. Ex:

<option value="af" >Afghanistan</option>
<option value="za" >Afrique Du Sud</option>
<option value="al" >Albanie</option>
<option value="dz" >Algérie</option>
<option value="de" >Allemagne</option>
<option value="ao" >Angola</option>
<option value="ai" >Anguilla</option>
<option value="aq" >Antarctique</option>
<option value="ag" >Antigua,Et,Barbuda</option>
<option value="fr" SELECTED>France</option>
<option value="zw" >Zimbabwe</option>

If you find it usefull, here's the script :

-- we assume the template definition is the current selection
local template = editor:GetSelText()

-- now duplicate and fill the template
-- for each line before the template definition
local lastline = editor:LineFromPosition(editor.SelectionStart)-1
local res = ""
for index=0,lastline do
	local line = editor:GetLine(index)
	if string.len(line) > 2 and string.sub(line,1,2) ~= "//" then
		-- split tab separated columns
		local values = { ["<0>"] = index+1 }
		local i = 0
		for p in string.gfind(line, "[^\t\r\n]+") do
			i = i+1
			values["<"..i..">"] = p
		-- fill template with values
		res = res..string.gsub(template, "(<%d+>)", function(p) return values[p] end)

-- insert & select generated content
editor:insert(editor.SelectionEnd, res)
editor:SetSel(editor.SelectionEnd, -1)

I like to hit Alt+Shift+T to run the script:*=Templatization!
command.33.*=dofile $(SciteDefaultHome)/lua/templatization.lua


RecentChanges · preferences
edit · history
Last edited August 31, 2006 6:49 pm GMT (diff)