From: SourceForge.net <no...@so...> - 2007-02-21 07:53:55
|
Bugs item #1664900, was opened at 2007-02-21 07:37 Message generated for change (Comment added) made by kpouer You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100588&aid=1664900&group_id=588 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: text area and syntax packages Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Marcelo Vanzin (vanza) Assigned to: Nobody/Anonymous (nobody) Summary: Auto-indent breaks if previous line is a single line indent Initial Comment: Damn I hate these small summary fields. I also hate the auto-inserted word-wrap in these text fields, BTW. </rant> Anyway, this might be a dupe of some of the other several auto-indent bugs, but I took some time to look at this one and have a good idea of what's going on (though I haven't looked at how to fix it just yet). The problem is with a piece of code like this, for example (in a mode like C or Java): if (foo) bar; for (;;) { As soon as you hit "{" the line will be indented to the same level as "bar;", which is wrong. This is because in JEditBuffer.java:getIdealIndentForLine(), "oldIndent" is initialized to the indent size of the last non-empty line. In this case this is wrong, since the last non-empty line is at a different indent level than the current indent line. The code needs to check what's the auto-indent level for the next line after the last non-empty line, instead of just using the same indent level. ---------------------------------------------------------------------- >Comment By: Matthieu Casanova (kpouer) Date: 2007-02-21 08:53 Message: Logged In: YES user_id=285591 Originator: NO You're right there is probably something to do with this OpenBracketIndentRule that clear the list because checking the empty line between bar; and for(;;) works, but if you don't have an empty line and just have this if(foo) bar; for(;;) when typing the { the fix will not work ---------------------------------------------------------------------- Comment By: Marcelo Vanzin (vanza) Date: 2007-02-21 08:28 Message: Logged In: YES user_id=75113 Originator: YES A little more debugging and it seems the problem is in a different place... The first indent rule (which matches the mode's indentNextLine property for the prevPrevLineIndex) is correctly adding a "decrease" action to the action list. The next rule, though, an OpenBracketIndentRule, is clearing the action list (OpenBracketIndentRule:61), so the line doesn't get "de-indented" as it should. Well, now it's time to try to understand what that code means. ---------------------------------------------------------------------- Comment By: Marcelo Vanzin (vanza) Date: 2007-02-21 07:38 Message: Logged In: YES user_id=75113 Originator: YES Of course "bar;" should be indented one level up for all that to make sense. Have I mentioned how much I love the way this text field works? ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100588&aid=1664900&group_id=588 |