Scite Simple Template

lua-users home
wiki

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

		end

		-- fill template with values

		res = res..string.gsub(template, "(<%d+>)", function(p) return values[p] end)

	end

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:


command.name.33.*=Templatization!

command.mode.33.*=subsystem:lua,savebefore:no,groupundo

command.shortcut.33.*=Alt+Shift+T

command.33.*=dofile $(SciteDefaultHome)/lua/templatization.lua

--Philippe


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