summaryrefslogtreecommitdiffstats
path: root/kate/scripts/script-indent-c1-test.lua
diff options
context:
space:
mode:
Diffstat (limited to 'kate/scripts/script-indent-c1-test.lua')
-rw-r--r--kate/scripts/script-indent-c1-test.lua154
1 files changed, 154 insertions, 0 deletions
diff --git a/kate/scripts/script-indent-c1-test.lua b/kate/scripts/script-indent-c1-test.lua
new file mode 100644
index 000000000..d2593b962
--- /dev/null
+++ b/kate/scripts/script-indent-c1-test.lua
@@ -0,0 +1,154 @@
+function indentChar(c)
+ katedebug("LUA indentChar has been called")
+ local tabWidth = 4
+ local spaceIndent = true
+ local indentWidth = 4
+
+ local line=view.cursorLine()
+ local col=view.cursorColumn()
+ local textLine=document.textLine(line)
+ local prevLine=document.textLine(line-1);
+
+ --local prevIndent=prevLine.match("^%s*")
+ --local addIndent=""
+
+
+ -- unindent } and {, if not in a comment
+
+ if not(string.find(textLine,"^%s*//")) then
+ katedebug("no comment")
+ katedebug(c);
+ if (c=="}") or (c=="{") then
+ katedebug("} or { found");
+ if (string.find(textLine,"^%s%s%s%s")) then
+ katedebug("removing one indentation level");
+ document.removeText(line,0,line,tabWidth)
+ view.setCursorPositionReal(line,col-tabWidth)
+ else
+ katedebug("no indentation found");
+ end
+ end
+ else
+ katedebug("in comment");
+ end
+end
+
+
+
+
+
+function indentNewLine()
+ local tabWidth = 4;
+ local spaceIndent = true;
+ local indentWidth = 4;
+
+ local strIndentCharacters = " ";
+ local strIndentFiller = "";
+
+ local intStartLine, intStartColumn= view.cursorPosition();
+
+ local strTextLine = document.textLine( intStartLine );
+ local strPrevLine = document.textLine( intStartLine - 1 );
+
+ local addIndent = "";
+
+
+ local intCurrentLine = intStartLine;
+ local openParenCount = 0;
+ local openBraceCount = 0;
+
+
+
+ function firstNonSpace( text )
+ local pos=string.find(text,"[^%s]")
+ if pos then
+ return pos
+ else
+ return -1
+ end
+ end
+
+ function lastNonSpace (text)
+ local pos=string.find(text,"[^%s]%s*$")
+ if pos then
+ return pos
+ else
+ return -1
+ end
+ end
+
+ local strCurrentLine=""
+ local intCurrentLine=intStartLine
+ katedebug(intStartLine .. "-" .. intStartColumn)
+ function label_while()
+ katedebug("label_while has been entered: intCurrentLine" .. intCurrentLine)
+ while (intCurrentLine>0) do
+ --katedebug("intCurrentLine:" ..intCurrentLine)
+ intCurrentLine=intCurrentLine-1
+ strCurrentLine=document.textLine(intCurrentLine)
+ intLastChar= lastNonSpace(strCurrentLine)
+ intFirstChar=firstNonSpace(strCurrentLine)
+ if not (string.find(strCurrentLine,"//")) then
+ for intCurrentChar=intLastChar,intFirstChar,-1 do
+ ch=string.sub(strCurrentLine,intCurrentChar,intCurrentChar)
+ if (ch=="(") or (ch=="[") then
+ openParenCount=openParenCount+1
+ if (openParenCount>0) then
+ return label_while()
+ end
+ elseif (ch==")") or (ch=="]") then
+ openParenCount=openParenCount-1
+ elseif (ch=="{") then
+ openBraceCount=openBraceCount+1
+ if openBraceCount>0 then
+ return label_while()
+ end
+ elseif (ch=="}") then
+ openBraceCount=openBraceCount-1
+ elseif (ch==";") then
+ if (openParenCount==0) then
+ lookingForScopeKeywords=false
+ end
+ end
+ end
+ end
+ end
+ end
+
+ label_while()
+
+
+
+ katedebug( "line: " .. intCurrentLine)
+ katedebug( openParenCount .. ", " .. openBraceCount)
+
+ local ok,match=pcall(function () return string.sub(strCurrentLine,string.find(strCurrentLine,"^%s+")) end)
+ if ok then
+ katedebug("Line HAD leading whitespaces")
+ strIndentFiller=match
+ else
+ katedebug("Line had NO leading whitespaces")
+ strIndentFiller=""
+ end
+
+
+ while( openParenCount > 0 ) do
+ openParenCount=openParenCount-1
+ strIndentFiller = strIndentFiller .. strIndentCharacters
+ end
+
+ while( openBraceCount > 0 ) do
+ openBraceCount=openBraceCount-1;
+ strIndentFiller = strIndentFiller .. strIndentCharacters
+ end
+
+ document.insertText( intStartLine, 0, strIndentFiller )
+ view.setCursorPositionReal( intStartLine, string.len(document.textLine( intStartLine )))
+end
+
+
+
+
+
+indenter.register(indenter.OnChar,indentChar)
+indenter.register(indenter.OnNewline,indentNewLine) \ No newline at end of file