Monday, March 16, 2009

Customized Comment In Your Code Editor

Standard code editor allows to create your own kind of comments. Generally, a style of comments depends on your programming style and the company's policies on that.

I prefer to frame changes I make in a code with parentheses in the following style:




// Voytsekhovskiy, Alexey (My company name) (2009/03/16) (#)
//-->
the code as it wasd before my changes
//<--


In order to have such an option in the editor's context menu I changed EditorScripts class as follows:

1. Created a new add-on function

boolean isEmptySelection(str s)
{
;
// delete all special symbols
return strLen(strRem(strRem(strRem(s," "),"\n"),"\r"))>0;
}


2. Changed getSelectedText standard method

// added here the new parameter takeAllIfEmpty
static str getSelectedText(Editor e, boolean takeAllIfEmpty = true)
{
int i;
str text;
str line;
int startLine = e.selectionStartLine()+1;
int endLine = e.selectionEndLine()+1;
int startCol = e.selectionStartCol();
int endCol = e.selectionEndCol();

if (startLine == endLine && startCol == endCol)
{
// added here
//-->
if (!takeAllIfEmpty)
return text;
//<--

e.firstLine();
while (e.moreLines())
{
text += e.getLine()+'\r\n';
e.nextLine();
}
}
else
{
...
(the rest of the method)


3. Created the method which implements this new kind of comments:


// Insert a comment in place of the cursor
// (Example: Developer's name (Your company name) (YYYY/MM/DD) (#))
// //-->
// Your code here as it was before
// //<--
void Comments_BetweenParentheses(Editor e)
{
#define.YourCompanyName("Your company name")
str selText = EditorScripts::getSelectedText(e, false);
str selFirstLine;
int startLine = e.selectionStartLine()+1;
int startCol = e.selectionStartCol();
xppSource xppSource;
;
if(this.isEmptySelection(selText))
{
startLine = e.selectionStartLine()+1;
e.firstSelectedLine();
selFirstLine = e.getLine();

startCol = strLen(selFirstLine) -strLen(strLTrim(selFirstLine));
xppSource = new xppSource(startCol);
e.insertLines(xppSource.indent()+strFmt("// %1 ("+#YourCompanyName+") (%2) (#)", XUserInfo::find(False, curUserId()).name, date2str(today(), 321, 2, 4, 2, 4, 4))+"\n");
e.insertLines(xppSource.indent()+strFmt("//-->\n"));
e.insertLines(selText);
e.insertLines(strFmt(xppSource.indent()+"//<--\n"));
e.gotoLine(startLine+1);
e.gotoCol(startCol+1);
}
else
{
startCol = e.columnNo();
xppSource = new xppSource(startCol);
e.insertLines(strFmt("// %1 ("+#YourCompanyName+") (%2) (#)", XUserInfo::find(False, curUserId()).name, date2str(today(), 321, 2, 4, 2, 4, 4))+"\n");
e.insertLines(xppSource.indent()+strFmt("//-->\n"));
e.insertLines(strFmt(xppSource.indent()+"//<--\n"));
e.gotoLine(e.currentLineNo()-1);
e.gotoCol(50);
e.insertLines(strFmt("\n"+xppSource.indent()));
}
}




So, after compilation you can use the new comments style.



after commenting



Just to be on the safe side I place here the link to the whole project file CommentParentheses.xpo

No comments: