Wrap procedure comments
tony
The most recent version of this code can be found in the compilation of text-editing code posted here.
#pragma TextEncoding = "UTF-8"
#pragma rtGlobals=3
#pragma IndependentModule = WrapText
#pragma version=1.01
// If your lengthy procedure comments often end up looking a bit like
// this, you
// may find this code snippet useful. To use, copy, wrapScrap(), paste.
menu "Edit"
"Comment wrap clipboard/4", /Q, WrapText#wrapScrap()
"Unwrap clipboard/5", /Q, WrapText#unwrapScrap()
end
function wrapScrap()
putscraptext commentWrap(getscraptext(), 72)
end
function unwrapScrap()
putscraptext commentUnwrap(getscraptext())
end
// returns string wrapped at V_wrap characters, commented,
// and indented to match indent at start of s_in.
function /T commentWrap(s_in, v_wrap)
string s_in
variable v_wrap
string s_out="", s_char=""
s_in=replacestring("\t", s_in, " ")
// try to guess how far we want to indent comment
variable indent=0
for(indent=0;indent<25;indent+=1)
if(!stringmatch(s_in[indent], " "))
break
endif
endfor
s_in=replacestring("//", s_in, " ")
s_in=replacestring("\r", s_in, " ")
// condense whitespace
variable len
do
len=strlen(s_in)
s_in=replacestring(" ", s_in, " ")
while(strlen(s_in)!=len)
variable i=0,j=0,k=0
// i is character count in s_in
// j is character count in current line of s_out
do
s_char=s_in[i]
i+=1
if(j==0)
for(k=0;k<indent;k+=1,j+=1)
s_out+=" "
endfor
s_out+="// "
j+=3
if (!stringmatch(s_char, " "))
s_out+=s_char
j+=1
endif
elseif (j>v_wrap)
if(!stringmatch(s_char, " "))
do
j-=1
if (stringmatch(s_out[strlen(s_out)-(v_wrap+1-j)], " "))
break
endif
while(j>indent+3)
if(j>indent+3)
s_out=s_out[0,strlen(s_out)-(v_wrap+1-j)]
i-=(v_wrap+1-j)
endif
endif
s_out+="\r"
j=0
else
s_out+=s_char
j+=1
endif
while(i<len)
s_out=replacestring(" ", s_out, "\t")
return s_out
end
// returns unwrapped string with comment indicators removed
function /T commentUnwrap(s)
string s
s=replacestring("\t", s, " ")
s=replacestring("//", s, "")
s=replacestring("\r\r", s, "<$$> ")
s=replacestring("\r", s, " ")
s=replacestring("<$$>", s, "\r\r")
// condense whitespace
variable len
do
len=strlen(s)
s=replacestring(" ", s, " ")
while(strlen(s)!=len)
do
len=strlen(s)
s=replacestring("\r ", s, "\r")
while(strlen(s)!=len)
do
s[0,0]=selectstring(stringmatch (s[0]," "), s[0], "")
while(strlen(s) && stringmatch(s[0], " "))
return s
end
#pragma rtGlobals=3
#pragma IndependentModule = WrapText
#pragma version=1.01
// If your lengthy procedure comments often end up looking a bit like
// this, you
// may find this code snippet useful. To use, copy, wrapScrap(), paste.
menu "Edit"
"Comment wrap clipboard/4", /Q, WrapText#wrapScrap()
"Unwrap clipboard/5", /Q, WrapText#unwrapScrap()
end
function wrapScrap()
putscraptext commentWrap(getscraptext(), 72)
end
function unwrapScrap()
putscraptext commentUnwrap(getscraptext())
end
// returns string wrapped at V_wrap characters, commented,
// and indented to match indent at start of s_in.
function /T commentWrap(s_in, v_wrap)
string s_in
variable v_wrap
string s_out="", s_char=""
s_in=replacestring("\t", s_in, " ")
// try to guess how far we want to indent comment
variable indent=0
for(indent=0;indent<25;indent+=1)
if(!stringmatch(s_in[indent], " "))
break
endif
endfor
s_in=replacestring("//", s_in, " ")
s_in=replacestring("\r", s_in, " ")
// condense whitespace
variable len
do
len=strlen(s_in)
s_in=replacestring(" ", s_in, " ")
while(strlen(s_in)!=len)
variable i=0,j=0,k=0
// i is character count in s_in
// j is character count in current line of s_out
do
s_char=s_in[i]
i+=1
if(j==0)
for(k=0;k<indent;k+=1,j+=1)
s_out+=" "
endfor
s_out+="// "
j+=3
if (!stringmatch(s_char, " "))
s_out+=s_char
j+=1
endif
elseif (j>v_wrap)
if(!stringmatch(s_char, " "))
do
j-=1
if (stringmatch(s_out[strlen(s_out)-(v_wrap+1-j)], " "))
break
endif
while(j>indent+3)
if(j>indent+3)
s_out=s_out[0,strlen(s_out)-(v_wrap+1-j)]
i-=(v_wrap+1-j)
endif
endif
s_out+="\r"
j=0
else
s_out+=s_char
j+=1
endif
while(i<len)
s_out=replacestring(" ", s_out, "\t")
return s_out
end
// returns unwrapped string with comment indicators removed
function /T commentUnwrap(s)
string s
s=replacestring("\t", s, " ")
s=replacestring("//", s, "")
s=replacestring("\r\r", s, "<$$> ")
s=replacestring("\r", s, " ")
s=replacestring("<$$>", s, "\r\r")
// condense whitespace
variable len
do
len=strlen(s)
s=replacestring(" ", s, " ")
while(strlen(s)!=len)
do
len=strlen(s)
s=replacestring("\r ", s, "\r")
while(strlen(s)!=len)
do
s[0,0]=selectstring(stringmatch (s[0]," "), s[0], "")
while(strlen(s) && stringmatch(s[0], " "))
return s
end
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More
--Jim Prouty
Software Engineer, WaveMetrics, Inc.
August 26, 2017 at 02:00 pm - Permalink
DisplayHelpTopic "Menu Definition Syntax"
for details.I should have pointed out that I did include a shortcut - command-4 - which should be edited to avoid conflict with other user-defined shortcuts.
I use this as an independent module so that it works regardless of whether procedure is compiled.
One use is for taking unwrapped text from outside of Igor and pasting as a comment.
Don't forget that there are also keyboard shortcuts for commenting and decommenting, but these won't wrap the text for you.
August 27, 2017 at 07:22 am - Permalink