On 24 Nov 2007, at 16:09, Ian Potter wrote:
Just out of curiosity, where would you want the folding markers in your example?
I wanted to be able to fold an entire chunk of POD as a single entity. So that would be
v =head1 A heading
=head2
^ =cut
Folding to
=head A heading ...
POD starts with any line that commences with =whatever apart from =cut - which marks the end of POD. So it's no good just to fold at '=head1'.
It looks like your regex will give you a start-folding-arrow at '=head2' and a stop-folding-arrow at '=cut' but it sounds like you want folds that start at each '=head' section and end at the following section. The problem is, a line can't be both a beginning and an ending. For example:
if (thing) { doStuff(); } else { doOtherStuff(); }
That will only give you one large folding section. You have to separate the second half from the first if you want two. You could also try to end each fold at the line before each '=head' section, but I don't know how you would go about that.
I don't think you can with the current folding mechanism. My idea was that if I could add assertions to the regexen I could make the start- of-POD pattern match only in a non-POD scope - so it'd only match the first POD directive.
For that use it doesn't have to integrated into the regex engine - it'd be enough to have a scope based condition that a folding pattern could depend upon:
foldingStartMarker = '(^=(?!cut)|/*|({|[|()\s*$)'; foldingStartIfScope = '! markup.directive.comment.block.documentation.perl'; foldingStopMarker = '(^=cut|*/|^\s*(}|]|)))';
But that got me to thinking about regexen for rich text and how a more general mechanism to allow scope assertions in regexen would be a fun thing to have. It'd allow you to do things like searching and replacing only within string literals - for example.