Scite Comment Box

lua-users home
wiki

A script that allows you to comment code (configured for php / cpp, but easy adaptable to other languages I think). Place following text in a file:

--~ Welcome, reader



--~ This script is used to comment parts of a text in a nicely formatted box.

--~ It is quite configurable (try different settings, experiment!), and I tried

--~ to add some comments in the whole script, to make it a bit more understandable.

--~ Anyhow, if you have any comments, please mail to jerous gmail com

--~ Have fun!

--~ ]erous.



--~ to use, make sure this script is loaded, add following in the userproperties

--~ and press F11 when done!

--~ command.name.3.*=Box-comment

--~ command.3.*=comment_type1

--~ command.subsystem.3.*=3

--~ command.mode.3.*=savebefore:no

--~ command.shortcut.3.*=F11



--~ char(s) indicating start of comment for 1 line

com_start_char = '|  '

com_end_char = '|'

--~ char(s) indicating commentblock

com_block_start_char = '/*\\'

com_block_end_char = '*/'

--~ character to use at the top line

com_topline_char = '_'

--~ character to use at the ending line

com_endline_char = '_'

--~ add following lines to the front/end of the commentbox

--~ as an array; e.g. com_add_to_front = {"Author: ]erous", "Date: today"}

com_add_to_front = {"Commented on "..os.date("%d-%m-%yT%H:%M:%S"), "By Me", ""}

com_add_to_end = {}





--~ create a comment box for the currently selected text

--~ if no text is selected, the current line will be 'box-commented'

function comment_type1()

--~ 	retrieve selected region...

	p1=editor:LineFromPosition(editor.SelectionStart);

	p2=editor:LineFromPosition(editor.SelectionEnd);

	

--~ 	if nothing selected, then take the line we are working on

	if p1==p2 then

		p2=p1+1

	end

	

--~ 	read the lines in the selection to an array

--~ 	 + add some new text to start and end (view config up here)

	lines = read_lines(p1,p2)

	

--~ 	get the length of the longest line

	max_str_len=get_longest_line(lines)+1



--~ 	create the start and endstrings

	header_len=(max_str_len+string.len(com_start_char..com_end_char)-string.len(com_block_start_char))/string.len(com_topline_char)

	footer_len=(max_str_len+string.len(com_start_char..com_end_char)-string.len(com_block_end_char))/string.len(com_endline_char)

	str_header = com_block_start_char..string.rep(com_topline_char, header_len).."\n"

	str_footer = string.rep(com_endline_char, footer_len)..com_block_end_char

	

--~ 	format the text...

	text = format_text(lines, max_str_len)

	

--~ 	... and add the header and footer

	text=str_header..text..str_footer

	

--~ 	and replace!

	editor:ReplaceSel(text)

--~ 	print(text)

end



--~ format the text, by adding com_start_char and com_end_char to respectively front and end

--~ and formatting it nicely

--~  lines: array containing the lines (without carriage returns etc)

--~  max_str_len: length of the longest line

--~  return: string formatted text

function format_text(lines, max_str_len)

	ret = ""

	

	for i=1,table.getn(lines) do

		ret=ret..com_start_char

                    ..lines[i]

                    ..string.rep(" ", string.len(str_header)-string.len(lines[i]..com_end_char..com_start_char)-1)

                    ..com_end_char.."\n"

	end

	

	return ret

end





--~ read the lines from the current selection

--~ and add some stuff to the front and end

--~  *_line: the lines from which the selection respectively starts and ends

--~  return: table containing all lines to be displayed, with returns removed, and tabs replaced by spaces

function read_lines(start_line, end_line)

	local ret = {}

	

--~ 	add things to add to the front

	for i=1,table.getn(com_add_to_front) do

		table.insert(ret,table.getn(ret)+1,com_add_to_front[i])

	end

	

--~ 	add the text

	for i=start_line,end_line-1 do

		line=editor:GetLine(i)

		

--~ 		remove returns, and replace tabs by the userdefined nr of spaces

		line=string.gsub(line, "\n", "")

		line=string.gsub(line, "\r", "")

		line=string.gsub(line, "\t", string.rep(" ", props['tabsize']))

		

		table.insert(ret,table.getn(ret)+1,line)

	end

	

--~ 	add things to add to the end

	for i=1,table.getn(com_add_to_end) do

		table.insert(ret,table.getn(ret)+1,com_add_to_end[i])

	end

	

	return ret

end



--~ retrieve the length of the longest line

--~  lines: array containing the lines to get longest line from

--~  return: int containing the length; -1 if failed

function get_longest_line(lines)

	max=-1

	

	for i=1,table.getn(lines) do

		if (string.len(lines[i])>max) then

			max=string.len(lines[i])

		end

	end

	

	return max

end 


RecentChanges · preferences
edit · history
Last edited February 28, 2008 5:35 pm GMT (diff)