You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/kate/scripts/script-indent-c-newline.js

114 lines
2.9 KiB

var tabWidth = 4;
var spaceIndent = true;
var indentWidth = 4;
var strIndentCharacters = " ";
var strIndentFiller = "";
var intStartLine = view.cursorLine();
var intStartColumn = view.cursorColumn();
var strTextLine = document.textLine( intStartLine );
var strPrevLine = document.textLine( intStartLine - 1 );
var addIndent = "";
function firstNonSpace( _text )
{
for( _i=0; _i < _text.length; _i++ )
{
_ch = _text.charAt( _i );
if( _ch != ' ' && _ch != '\t' )
return _i;
}
return -1;
}
function lastNonSpace( _text )
{
for( _i=_text.length - 1; _i >= 0; _i-- )
{
_ch = _text.charAt( _i );
if( _ch != ' ' && _ch != '\t' )
return _i;
}
return -1;
}
// if previous line ends with a '{' increase indent level
// if ( prevLine.search( /{\s*$/ ) != -1 )
// {
// if ( spaceIndent )
// addIndent = " ";
// else
// addIndent = "\t";
// }
// else
{
var intCurrentLine = intStartLine;
var openParenCount = 0;
var openBraceCount = 0;
label_while:
while ( intCurrentLine > 0 )
{
intCurrentLine--;
strCurrentLine = document.textLine( intCurrentLine );
intLastChar = lastNonSpace( strCurrentLine );
intFirstChar = firstNonSpace( strCurrentLine ) ;
if ( strCurrentLine.search( /\/\// ) == -1 )
{
// look through line backwards for interesting characters
for( intCurrentChar = intLastChar; intCurrentChar >= intFirstChar; --intCurrentChar )
{
ch = strCurrentLine.charAt( intCurrentChar );
switch( ch )
{
case '(': case '[':
if( ++openParenCount > 0 )
break label_while; //return calcIndentInBracket( begin, cur, pos );
break;
case ')': case ']': openParenCount--; break;
case '{':
if( ++openBraceCount > 0 )
break label_while; //return calcIndentInBrace( begin, cur, pos );
break;
case '}': openBraceCount--; lookingForScopeKeywords = false; break;
case ';':
if( openParenCount == 0 )
lookingForScopeKeywords = false;
break;
}
}
}
}
strIndentFiller += strCurrentLine.match(/^\s+/);
if ( strIndentFiller == "null" )
strIndentFiller = "";
debug( "line: " + intCurrentLine);
debug( openParenCount + ", " + openBraceCount);
while( openParenCount > 0 )
{
openParenCount--;
strIndentFiller += strIndentCharacters;
}
while( openBraceCount > 0 )
{
openBraceCount--;
strIndentFiller += strIndentCharacters;
}
}
document.insertText( intStartLine, 0, strIndentFiller );
view.setCursorPositionReal( intStartLine, document.textLine( intStartLine ).length );