From: Shlomy R. <sre...@gm...> - 2010-10-23 06:49:55
|
Hi, I created a small plugin named FoldTools, which is supposed to provide several features related to folding modes. One of the features is something I found very useful - a "Composite" fold handler which combines several folding modes. For example, a "comment" folding mode, which folds all multi-line comments, with a "custom" folding mode that folds all code blocks (lines between '{' and '}' for example). Combining both, I can fold comments and blocks together in a buffer. This works well if the combined folding modes do not conflict. However, there's a small detail that is missing to make the combined mode work well. There are two types of folding modes: 1. Modes where the fold level of line 'n' depends only on the content of line 'n'. (e.g. indent folding mode) 2. Modes where the fold level of line 'n' depends on the content of line 'n' and on the fold level of line 'n-1'. In order to combine several folding modes, the Composite fold handler must know which type is each of the combined folding modes. Due to the fact that each of the existing folding modes is meant to be used "standalone", the Composite fold handler should only use the difference between the value that each mode provides for the current line and some value that is provided for the previous line. For modes of type (1) above, this should be value returned by the mode for the previous line. For (2), this should be the value that was returned by the Composite fold handler for the previous line. Currently I keep a fixed map in the plugin, for all known folding modes, that indicates which type each mode is. But to make this more generic, it would be useful for a FoldHandler to also return this information. What do you think about adding another method to FoldHandler - a boolean "isContextSensitive()" or "dependsOnPreviousLine()"? Then I can remove this fixed map and can make sure it works correctly with future modes. Thanks, Shlomy |