summaryrefslogtreecommitdiffstats
path: root/kate/scripts/script-indent-c-test.js
diff options
context:
space:
mode:
Diffstat (limited to 'kate/scripts/script-indent-c-test.js')
-rw-r--r--kate/scripts/script-indent-c-test.js180
1 files changed, 180 insertions, 0 deletions
diff --git a/kate/scripts/script-indent-c-test.js b/kate/scripts/script-indent-c-test.js
new file mode 100644
index 000000000..5d506ca67
--- /dev/null
+++ b/kate/scripts/script-indent-c-test.js
@@ -0,0 +1,180 @@
+/**KATE
+ *NAME: C style indenter
+ *COPYRIGHT:
+ *Based on work Copyright 2005 by Dominik Haumann
+ *Copyright 2005 by Joseph Wenninger
+ *Here will be the license text, Dominik has to choose
+ * The following line is not empty
+ *
+ *An empty line ends this block
+ *
+ *VERSION: 0.1
+ *ANUNKNOWNKEYWORD: Version has to be in the format major.minor (both numbers)
+ *IGNOREALSO: All keywords, except COPYRIGHT are expected to have their data on one line
+ *UNKNOWN: unknown keywords are simply ignored from the information parser
+ *CURRENTLY_KNOWN_KEYWORDS: NAME,VERSION, COPYRIGHT
+ *INFORMATION: This block has to begin in the first line at the first character position
+ *INFORMATION: It is optional, but at least all files within the kde cvs,
+ *INFORMATION: which are ment for publishing are supposed to have at least the
+ *INFORMATION: COPYRIGHT block
+ *INFORMATION: These files have to be stored as UTF8
+ **/
+
+/*
+function indentChar() // also possible
+{*/
+
+function indentChar(c)
+{
+ var tabWidth = 4;
+ var spaceIndent = true;
+ var indentWidth = 4;
+
+
+ var line = view.cursorLine();
+ var col = view.cursorColumn();
+
+ var textLine = document.textLine( line );
+ var prevLine = document.textLine( line - 1 );
+
+ var prevIndent = prevLine.match(/^\s*/);
+ var addIndent = "";
+
+ function unindent()
+ {
+ // if (
+ }
+
+ // unindent } and {, if not in a comment
+ if ( textLine.search( /^\s*\/\// ) == -1 )
+ {
+ if ( /*textLine.charAt( col-1 )*/ c == '}' || /*textLine.c( col-1 )*/ c == '{')
+ {
+ if ( textLine.search(/^\s\s\s\s/) != -1)
+ {
+ document.removeText( line, 0, line, tabWidth );
+ view.setCursorPositionReal( line, col - tabWidth );
+ }
+ }
+ }
+
+}
+
+
+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;
+}
+
+function indentNewLine()
+{
+ 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 = "";
+ // 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 );
+}
+
+indenter.onchar=indentChar
+indenter.onnewline=indentNewLine \ No newline at end of file