diff options
Diffstat (limited to 'support/latexindent/LatexIndent/ModifyLineBreaks.pm')
-rw-r--r-- | support/latexindent/LatexIndent/ModifyLineBreaks.pm | 471 |
1 files changed, 279 insertions, 192 deletions
diff --git a/support/latexindent/LatexIndent/ModifyLineBreaks.pm b/support/latexindent/LatexIndent/ModifyLineBreaks.pm index 4d3356183b..5d3a915f61 100644 --- a/support/latexindent/LatexIndent/ModifyLineBreaks.pm +++ b/support/latexindent/LatexIndent/ModifyLineBreaks.pm @@ -1,4 +1,5 @@ package LatexIndent::ModifyLineBreaks; + # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or @@ -24,79 +25,101 @@ use LatexIndent::Switches qw/$is_m_switch_active $is_t_switch_active $is_tt_swit use LatexIndent::Item qw/$listOfItems/; use LatexIndent::LogFile qw/$logger/; use LatexIndent::Verbatim qw/%verbatimStorage/; -our @EXPORT_OK = qw/modify_line_breaks_body modify_line_breaks_end modify_line_breaks_end_after adjust_line_breaks_end_parent remove_line_breaks_begin verbatim_modify_line_breaks/; +our @EXPORT_OK + = qw/modify_line_breaks_body modify_line_breaks_end modify_line_breaks_end_after adjust_line_breaks_end_parent remove_line_breaks_begin verbatim_modify_line_breaks/; our $paragraphRegExp = q(); -sub modify_line_breaks_body{ +sub modify_line_breaks_body { my $self = shift; - # + # # Blank line poly-switch notes (==4) # # when BodyStartsOnOwnLine=4 we adopt the following approach: # temporarily change BodyStartsOnOwnLine to -1, make adjustments # temporarily change BodyStartsOnOwnLine to 3, make adjustments # switch BodyStartsOnOwnLine back to 4 - + # add a line break after \begin{statement} if appropriate - my @polySwitchValues = (${$self}{BodyStartsOnOwnLine}==4)?(-1,3):(${$self}{BodyStartsOnOwnLine}); - foreach(@polySwitchValues){ - my $BodyStringLogFile = ${$self}{aliases}{BodyStartsOnOwnLine}||"BodyStartsOnOwnLine"; - if($_>=1 and !${$self}{linebreaksAtEnd}{begin}){ - # if the <begin> statement doesn't finish with a line break, - # then we have different actions based upon the value of BodyStartsOnOwnLine: - # BodyStartsOnOwnLine == 1 just add a new line - # BodyStartsOnOwnLine == 2 add a comment, and then new line - # BodyStartsOnOwnLine == 3 add a blank line, and then new line - if($_==1){ - # modify the begin statement - $logger->trace("Adding a linebreak at the end of begin statement ${$self}{begin} (see $BodyStringLogFile)") if $is_t_switch_active; - ${$self}{begin} .= "\n"; - ${$self}{linebreaksAtEnd}{begin} = 1; - $logger->trace("Removing leading space from body of ${$self}{name} (see $BodyStringLogFile)") if $is_t_switch_active; - ${$self}{body} =~ s/^\h*//; - } elsif($_==2){ - # by default, assume that no trailing comment token is needed - my $trailingCommentToken = q(); - if(${$self}{body} !~ m/^\h*$trailingCommentRegExp/s){ + my @polySwitchValues = ( ${$self}{BodyStartsOnOwnLine} == 4 ) ? ( -1, 3 ) : ( ${$self}{BodyStartsOnOwnLine} ); + foreach (@polySwitchValues) { + my $BodyStringLogFile = ${$self}{aliases}{BodyStartsOnOwnLine} || "BodyStartsOnOwnLine"; + if ( $_ >= 1 and !${$self}{linebreaksAtEnd}{begin} ) { + + # if the <begin> statement doesn't finish with a line break, + # then we have different actions based upon the value of BodyStartsOnOwnLine: + # BodyStartsOnOwnLine == 1 just add a new line + # BodyStartsOnOwnLine == 2 add a comment, and then new line + # BodyStartsOnOwnLine == 3 add a blank line, and then new line + if ( $_ == 1 ) { + # modify the begin statement - $logger->trace("Adding a % at the end of begin ${$self}{begin} followed by a linebreak ($BodyStringLogFile == 2)") if $is_t_switch_active; - $trailingCommentToken = "%".$self->add_comment_symbol; - ${$self}{begin} =~ s/\h*$//; - ${$self}{begin} .= "$trailingCommentToken\n"; + $logger->trace( + "Adding a linebreak at the end of begin statement ${$self}{begin} (see $BodyStringLogFile)") + if $is_t_switch_active; + ${$self}{begin} .= "\n"; ${$self}{linebreaksAtEnd}{begin} = 1; - $logger->trace("Removing leading space from body of ${$self}{name} (see $BodyStringLogFile)") if $is_t_switch_active; - ${$self}{body} =~ s/^\h*//; - } else { - $logger->trace("Even though $BodyStringLogFile == 2, ${$self}{begin} already finishes with a %, so not adding another.") if $is_t_switch_active; + $logger->trace("Removing leading space from body of ${$self}{name} (see $BodyStringLogFile)") + if $is_t_switch_active; + ${$self}{body} =~ s/^\h*//; } - } elsif ($_==3){ - my $trailingCharacterToken = q(); - $logger->trace("Adding a blank line at the end of begin ${$self}{begin} followed by a linebreak ($BodyStringLogFile == 3)") if $is_t_switch_active; - ${$self}{begin} =~ s/\h*$//; - ${$self}{begin} .= (${$mainSettings{modifyLineBreaks}}{preserveBlankLines}?$tokens{blanklines}:"\n")."\n"; - ${$self}{linebreaksAtEnd}{begin} = 1; - $logger->trace("Removing leading space from body of ${$self}{name} (see $BodyStringLogFile)") if $is_t_switch_active; - ${$self}{body} =~ s/^\h*//; - } - } elsif ($_==-1 and ${$self}{linebreaksAtEnd}{begin}){ - # remove line break *after* begin, if appropriate - $self->remove_line_breaks_begin; - } + elsif ( $_ == 2 ) { + + # by default, assume that no trailing comment token is needed + my $trailingCommentToken = q(); + if ( ${$self}{body} !~ m/^\h*$trailingCommentRegExp/s ) { + + # modify the begin statement + $logger->trace( + "Adding a % at the end of begin ${$self}{begin} followed by a linebreak ($BodyStringLogFile == 2)" + ) if $is_t_switch_active; + $trailingCommentToken = "%" . $self->add_comment_symbol; + ${$self}{begin} =~ s/\h*$//; + ${$self}{begin} .= "$trailingCommentToken\n"; + ${$self}{linebreaksAtEnd}{begin} = 1; + $logger->trace("Removing leading space from body of ${$self}{name} (see $BodyStringLogFile)") + if $is_t_switch_active; + ${$self}{body} =~ s/^\h*//; + } + else { + $logger->trace( + "Even though $BodyStringLogFile == 2, ${$self}{begin} already finishes with a %, so not adding another." + ) if $is_t_switch_active; + } + } + elsif ( $_ == 3 ) { + my $trailingCharacterToken = q(); + $logger->trace( + "Adding a blank line at the end of begin ${$self}{begin} followed by a linebreak ($BodyStringLogFile == 3)" + ) if $is_t_switch_active; + ${$self}{begin} =~ s/\h*$//; + ${$self}{begin} + .= ( ${ $mainSettings{modifyLineBreaks} }{preserveBlankLines} ? $tokens{blanklines} : "\n" ) . "\n"; + ${$self}{linebreaksAtEnd}{begin} = 1; + $logger->trace("Removing leading space from body of ${$self}{name} (see $BodyStringLogFile)") + if $is_t_switch_active; + ${$self}{body} =~ s/^\h*//; + } + } + elsif ( $_ == -1 and ${$self}{linebreaksAtEnd}{begin} ) { + + # remove line break *after* begin, if appropriate + $self->remove_line_breaks_begin; + } } } -sub remove_line_breaks_begin{ - my $self = shift; - my $BodyStringLogFile = ${$self}{aliases}{BodyStartsOnOwnLine}||"BodyStartsOnOwnLine"; +sub remove_line_breaks_begin { + my $self = shift; + my $BodyStringLogFile = ${$self}{aliases}{BodyStartsOnOwnLine} || "BodyStartsOnOwnLine"; $logger->trace("Removing linebreak at the end of begin (see $BodyStringLogFile)") if $is_t_switch_active; ${$self}{begin} =~ s/\R*$//sx; ${$self}{linebreaksAtEnd}{begin} = 0; } -sub modify_line_breaks_end{ +sub modify_line_breaks_end { my $self = shift; - # + # # Blank line poly-switch notes (==4) # # when EndStartsOnOwnLine=4 we adopt the following approach: @@ -104,60 +127,77 @@ sub modify_line_breaks_end{ # temporarily change EndStartsOnOwnLine to 3, make adjustments # switch EndStartsOnOwnLine back to 4 # - - my @polySwitchValues =(${$self}{EndStartsOnOwnLine}==4) ?(-1,3):(${$self}{EndStartsOnOwnLine}); - foreach(@polySwitchValues){ + + my @polySwitchValues = ( ${$self}{EndStartsOnOwnLine} == 4 ) ? ( -1, 3 ) : ( ${$self}{EndStartsOnOwnLine} ); + foreach (@polySwitchValues) { + # possibly modify line break *before* \end{statement} - if(defined ${$self}{EndStartsOnOwnLine}){ - my $EndStringLogFile = ${$self}{aliases}{EndStartsOnOwnLine}||"EndStartsOnOwnLine"; - if($_>=1 and !${$self}{linebreaksAtEnd}{body}){ - # if the <body> statement doesn't finish with a line break, - # then we have different actions based upon the value of EndStartsOnOwnLine: - # EndStartsOnOwnLine == 1 just add a new line - # EndStartsOnOwnLine == 2 add a comment, and then new line - # EndStartsOnOwnLine == 3 add a blank line, and then new line - $logger->trace("Adding a linebreak at the end of body (see $EndStringLogFile)") if $is_t_switch_active; - - # by default, assume that no trailing character token is needed - my $trailingCharacterToken = q(); - if($_==2){ - $logger->trace("Adding a % immediately after body of ${$self}{name} ($EndStringLogFile==2)") if $is_t_switch_active; - $trailingCharacterToken = "%".$self->add_comment_symbol; + if ( defined ${$self}{EndStartsOnOwnLine} ) { + my $EndStringLogFile = ${$self}{aliases}{EndStartsOnOwnLine} || "EndStartsOnOwnLine"; + if ( $_ >= 1 and !${$self}{linebreaksAtEnd}{body} ) { + + # if the <body> statement doesn't finish with a line break, + # then we have different actions based upon the value of EndStartsOnOwnLine: + # EndStartsOnOwnLine == 1 just add a new line + # EndStartsOnOwnLine == 2 add a comment, and then new line + # EndStartsOnOwnLine == 3 add a blank line, and then new line + $logger->trace("Adding a linebreak at the end of body (see $EndStringLogFile)") if $is_t_switch_active; + + # by default, assume that no trailing character token is needed + my $trailingCharacterToken = q(); + if ( $_ == 2 ) { + $logger->trace("Adding a % immediately after body of ${$self}{name} ($EndStringLogFile==2)") + if $is_t_switch_active; + $trailingCharacterToken = "%" . $self->add_comment_symbol; ${$self}{body} =~ s/\h*$//s; - } elsif ($_==3) { - $logger->trace("Adding a blank line immediately after body of ${$self}{name} ($EndStringLogFile==3)") if $is_t_switch_active; - $trailingCharacterToken = "\n".(${$mainSettings{modifyLineBreaks}}{preserveBlankLines}?$tokens{blanklines}:q()); + } + elsif ( $_ == 3 ) { + $logger->trace( + "Adding a blank line immediately after body of ${$self}{name} ($EndStringLogFile==3)") + if $is_t_switch_active; + $trailingCharacterToken = "\n" + . ( ${ $mainSettings{modifyLineBreaks} }{preserveBlankLines} ? $tokens{blanklines} : q() ); ${$self}{body} =~ s/\h*$//s; - } - - # modified end statement - if(${$self}{body} =~ m/^\h*$/s and (defined ${$self}{BodyStartsOnOwnLine}) and ${$self}{BodyStartsOnOwnLine} >=1 ){ + } + + # modified end statement + if ( ${$self}{body} =~ m/^\h*$/s + and ( defined ${$self}{BodyStartsOnOwnLine} ) + and ${$self}{BodyStartsOnOwnLine} >= 1 ) + { ${$self}{linebreaksAtEnd}{body} = 0; - } else { + } + else { ${$self}{body} .= "$trailingCharacterToken\n"; ${$self}{linebreaksAtEnd}{body} = 1; - } - } elsif ($_==-1 and ${$self}{linebreaksAtEnd}{body}){ - # remove line break *after* body, if appropriate - - # check to see that body does *not* finish with blank-line-token, - # if so, then don't remove that final line break - if(${$self}{body} !~ m/$tokens{blanklines}$/s){ - $logger->trace("Removing linebreak at the end of body (see $EndStringLogFile)") if $is_t_switch_active; + } + } + elsif ( $_ == -1 and ${$self}{linebreaksAtEnd}{body} ) { + + # remove line break *after* body, if appropriate + + # check to see that body does *not* finish with blank-line-token, + # if so, then don't remove that final line break + if ( ${$self}{body} !~ m/$tokens{blanklines}$/s ) { + $logger->trace("Removing linebreak at the end of body (see $EndStringLogFile)") + if $is_t_switch_active; ${$self}{body} =~ s/\R*$//sx; ${$self}{linebreaksAtEnd}{body} = 0; - } else { - $logger->trace("Blank line token found at end of body (${$self}{name}), see preserveBlankLines, not removing line break before ${$self}{end}") if $is_t_switch_active; - } - } + } + else { + $logger->trace( + "Blank line token found at end of body (${$self}{name}), see preserveBlankLines, not removing line break before ${$self}{end}" + ) if $is_t_switch_active; + } + } } } - } +} -sub modify_line_breaks_end_after{ +sub modify_line_breaks_end_after { my $self = shift; - # + # # Blank line poly-switch notes (==4) # # when EndFinishesWithLineBreak=4 we adopt the following approach: @@ -165,139 +205,186 @@ sub modify_line_breaks_end_after{ # temporarily change EndFinishesWithLineBreak to 3, make adjustments # switch EndFinishesWithLineBreak back to 4 # - my @polySwitchValues =(${$self}{EndFinishesWithLineBreak}==4) ?(-1,3):(${$self}{EndFinishesWithLineBreak}); - foreach(@polySwitchValues){ - last if !(defined $_); - ${$self}{linebreaksAtEnd}{end} = 0 if($_==3 and (defined ${$self}{EndFinishesWithLineBreak} and ${$self}{EndFinishesWithLineBreak}==4)); + my @polySwitchValues + = ( ${$self}{EndFinishesWithLineBreak} == 4 ) ? ( -1, 3 ) : ( ${$self}{EndFinishesWithLineBreak} ); + foreach (@polySwitchValues) { + last if !( defined $_ ); + ${$self}{linebreaksAtEnd}{end} = 0 + if ( $_ == 3 + and ( defined ${$self}{EndFinishesWithLineBreak} and ${$self}{EndFinishesWithLineBreak} == 4 ) ); # possibly modify line break *after* \end{statement} - if(defined $_ and $_>=1 - and !${$self}{linebreaksAtEnd}{end} and ${$self}{end} ne ''){ - # if the <end> statement doesn't finish with a line break, - # then we have different actions based upon the value of EndFinishesWithLineBreak: - # EndFinishesWithLineBreak == 1 just add a new line - # EndFinishesWithLineBreak == 2 add a comment, and then new line - # EndFinishesWithLineBreak == 3 add a blank line, and then new line - my $EndStringLogFile = ${$self}{aliases}{EndFinishesWithLineBreak}||"EndFinishesWithLineBreak"; - if($_==1){ - $logger->trace("Adding a linebreak at the end of ${$self}{end} ($EndStringLogFile==1)") if $is_t_switch_active; - ${$self}{linebreaksAtEnd}{end} = 1; + if ( defined $_ + and $_ >= 1 + and !${$self}{linebreaksAtEnd}{end} + and ${$self}{end} ne '' ) + { + # if the <end> statement doesn't finish with a line break, + # then we have different actions based upon the value of EndFinishesWithLineBreak: + # EndFinishesWithLineBreak == 1 just add a new line + # EndFinishesWithLineBreak == 2 add a comment, and then new line + # EndFinishesWithLineBreak == 3 add a blank line, and then new line + my $EndStringLogFile = ${$self}{aliases}{EndFinishesWithLineBreak} || "EndFinishesWithLineBreak"; + if ( $_ == 1 ) { + $logger->trace("Adding a linebreak at the end of ${$self}{end} ($EndStringLogFile==1)") + if $is_t_switch_active; + ${$self}{linebreaksAtEnd}{end} = 1; - # modified end statement - ${$self}{replacementText} .= "\n"; - } elsif($_==2){ - if(${$self}{endImmediatelyFollowedByComment}){ - # no need to add a % if one already exists - $logger->trace("Even though $EndStringLogFile == 2, ${$self}{end} is immediately followed by a %, so not adding another; not adding line break.") if $is_t_switch_active; - } else { - # otherwise, create a trailing comment, and tack it on - $logger->trace("Adding a % immediately after ${$self}{end} ($EndStringLogFile==2)") if $is_t_switch_active; - my $trailingCommentToken = "%".$self->add_comment_symbol; - ${$self}{end} =~ s/\h*$//s; - ${$self}{replacementText} .= "$trailingCommentToken\n"; - ${$self}{linebreaksAtEnd}{end} = 1; - } - } elsif($_==3){ - $logger->trace("Adding a blank line at the end of ${$self}{end} ($EndStringLogFile==3)") if $is_t_switch_active; + # modified end statement + ${$self}{replacementText} .= "\n"; + } + elsif ( $_ == 2 ) { + if ( ${$self}{endImmediatelyFollowedByComment} ) { + + # no need to add a % if one already exists + $logger->trace( + "Even though $EndStringLogFile == 2, ${$self}{end} is immediately followed by a %, so not adding another; not adding line break." + ) if $is_t_switch_active; + } + else { + # otherwise, create a trailing comment, and tack it on + $logger->trace("Adding a % immediately after ${$self}{end} ($EndStringLogFile==2)") + if $is_t_switch_active; + my $trailingCommentToken = "%" . $self->add_comment_symbol; + ${$self}{end} =~ s/\h*$//s; + ${$self}{replacementText} .= "$trailingCommentToken\n"; ${$self}{linebreaksAtEnd}{end} = 1; + } + } + elsif ( $_ == 3 ) { + $logger->trace("Adding a blank line at the end of ${$self}{end} ($EndStringLogFile==3)") + if $is_t_switch_active; + ${$self}{linebreaksAtEnd}{end} = 1; - # modified end statement - ${$self}{replacementText} .= (${$mainSettings{modifyLineBreaks}}{preserveBlankLines}?$tokens{blanklines}:"\n")."\n"; - } + # modified end statement + ${$self}{replacementText} + .= ( ${ $mainSettings{modifyLineBreaks} }{preserveBlankLines} ? $tokens{blanklines} : "\n" ) . "\n"; + } } } } -sub adjust_line_breaks_end_parent{ +sub adjust_line_breaks_end_parent { + # when a parent object contains a child object, the line break # at the end of the parent object can become messy my $self = shift; # most recent child object - my $child = @{${$self}{children}}[-1]; + my $child = @{ ${$self}{children} }[-1]; # adjust parent linebreaks information - if(${$child}{linebreaksAtEnd}{end} and ${$self}{body} =~ m/${$child}{replacementText}\h*\R*$/s and !${$self}{linebreaksAtEnd}{body}){ - $logger->trace("ID: ${$child}{id}") if($is_t_switch_active); - $logger->trace("${$child}{begin}...${$child}{end} is found at the END of body of parent, ${$self}{name}, avoiding a double line break:") if($is_t_switch_active); - $logger->trace("adjusting ${$self}{name} linebreaksAtEnd{body} to be 1") if($is_t_switch_active); - ${$self}{linebreaksAtEnd}{body}=1; - } - - # the modify line switch can adjust line breaks, so we need another check, + if ( ${$child}{linebreaksAtEnd}{end} + and ${$self}{body} =~ m/${$child}{replacementText}\h*\R*$/s + and !${$self}{linebreaksAtEnd}{body} ) + { + $logger->trace("ID: ${$child}{id}") if ($is_t_switch_active); + $logger->trace( + "${$child}{begin}...${$child}{end} is found at the END of body of parent, ${$self}{name}, avoiding a double line break:" + ) if ($is_t_switch_active); + $logger->trace("adjusting ${$self}{name} linebreaksAtEnd{body} to be 1") if ($is_t_switch_active); + ${$self}{linebreaksAtEnd}{body} = 1; + } + + # the modify line switch can adjust line breaks, so we need another check, # see for example, test-cases/environments/environments-remove-line-breaks-trailing-comments.tex - if(defined ${$child}{linebreaksAtEnd}{body} - and !${$child}{linebreaksAtEnd}{body} - and ${$child}{body} =~ m/\R(?:$trailingCommentRegExp\h*)?$/s ){ + if ( defined ${$child}{linebreaksAtEnd}{body} + and !${$child}{linebreaksAtEnd}{body} + and ${$child}{body} =~ m/\R(?:$trailingCommentRegExp\h*)?$/s ) + { # log file information - $logger->trace("Undisclosed line break at the end of body of ${$child}{name}: '${$child}{end}'") if($is_t_switch_active); - $logger->trace("Adding a linebreak at the end of body for ${$child}{id}") if($is_t_switch_active); - + $logger->trace("Undisclosed line break at the end of body of ${$child}{name}: '${$child}{end}'") + if ($is_t_switch_active); + $logger->trace("Adding a linebreak at the end of body for ${$child}{id}") if ($is_t_switch_active); + # make the adjustments ${$child}{body} .= "\n"; - ${$child}{linebreaksAtEnd}{body}=1; + ${$child}{linebreaksAtEnd}{body} = 1; } } -sub verbatim_modify_line_breaks{ - # verbatim modify line breaks are a bit special, as they happen before +sub verbatim_modify_line_breaks { + + # verbatim modify line breaks are a bit special, as they happen before # any of the main processes have been done - my $self = shift; + my $self = shift; my %input = @_; - while ( my ($key,$child)= each %verbatimStorage){ - if(defined ${$child}{BeginStartsOnOwnLine}){ - my $BeginStringLogFile = ${$child}{aliases}{BeginStartsOnOwnLine}; - $logger->trace("*$BeginStringLogFile is ${$child}{BeginStartsOnOwnLine} for ${$child}{name}") if $is_t_switch_active ; - if (${$child}{BeginStartsOnOwnLine}==-1){ - # VerbatimStartsOnOwnLine = -1 - if(${$self}{body}=~m/^\h*${$child}{id}/m){ - $logger->trace("${$child}{name} begins on its own line, removing leading line break") if $is_t_switch_active ; - ${$self}{body} =~ s/(\R|\h)*${$child}{id}/${$child}{id}/s; + while ( my ( $key, $child ) = each %verbatimStorage ) { + if ( defined ${$child}{BeginStartsOnOwnLine} ) { + my $BeginStringLogFile = ${$child}{aliases}{BeginStartsOnOwnLine}; + $logger->trace("*$BeginStringLogFile is ${$child}{BeginStartsOnOwnLine} for ${$child}{name}") + if $is_t_switch_active; + if ( ${$child}{BeginStartsOnOwnLine} == -1 ) { + + # VerbatimStartsOnOwnLine = -1 + if ( ${$self}{body} =~ m/^\h*${$child}{id}/m ) { + $logger->trace("${$child}{name} begins on its own line, removing leading line break") + if $is_t_switch_active; + ${$self}{body} =~ s/(\R|\h)*${$child}{id}/${$child}{id}/s; + } } - } elsif (${$child}{BeginStartsOnOwnLine}>=1 and ${$self}{body}!~m/^\h*${$child}{id}/m){ - # VerbatimStartsOnOwnLine = 1, 2 or 3 - my $trailingCharacterToken = q(); - if(${$child}{BeginStartsOnOwnLine}==1){ - $logger->trace("Adding a linebreak at the beginning of ${$child}{begin} (see $BeginStringLogFile)") if $is_t_switch_active; - } elsif (${$child}{BeginStartsOnOwnLine}==2){ - $logger->trace("Adding a % at the end of the line that ${$child}{begin} is on, then a linebreak ($BeginStringLogFile == 2)") if $is_t_switch_active; - $trailingCharacterToken = "%".$self->add_comment_symbol; - } elsif (${$child}{BeginStartsOnOwnLine}==3){ - $logger->trace("Adding a blank line at the end of the line that ${$child}{begin} is on, then a linebreak ($BeginStringLogFile == 3)") if $is_t_switch_active; - $trailingCharacterToken = "\n"; + elsif ( ${$child}{BeginStartsOnOwnLine} >= 1 and ${$self}{body} !~ m/^\h*${$child}{id}/m ) { + + # VerbatimStartsOnOwnLine = 1, 2 or 3 + my $trailingCharacterToken = q(); + if ( ${$child}{BeginStartsOnOwnLine} == 1 ) { + $logger->trace("Adding a linebreak at the beginning of ${$child}{begin} (see $BeginStringLogFile)") + if $is_t_switch_active; + } + elsif ( ${$child}{BeginStartsOnOwnLine} == 2 ) { + $logger->trace( + "Adding a % at the end of the line that ${$child}{begin} is on, then a linebreak ($BeginStringLogFile == 2)" + ) if $is_t_switch_active; + $trailingCharacterToken = "%" . $self->add_comment_symbol; + } + elsif ( ${$child}{BeginStartsOnOwnLine} == 3 ) { + $logger->trace( + "Adding a blank line at the end of the line that ${$child}{begin} is on, then a linebreak ($BeginStringLogFile == 3)" + ) if $is_t_switch_active; + $trailingCharacterToken = "\n"; + } + ${$self}{body} =~ s/\h*${$child}{id}/$trailingCharacterToken\n${$child}{id}/s; } - ${$self}{body} =~ s/\h*${$child}{id}/$trailingCharacterToken\n${$child}{id}/s; } - } - - # after text wrap poly-switch check - if ($input{when} eq "afterTextWrap"){ - $logger->trace("*post text wrap poly-switch check for EndFinishesWithLineBreak") if $is_t_switch_active ; - if (defined ${$child}{EndFinishesWithLineBreak} - and ${$child}{EndFinishesWithLineBreak}>=1 - and ${$self}{body} =~m/${$child}{id}\h*\S+/m){ - ${$child}{linebreaksAtEnd}{end} = 1; - - # by default, assume that no trailing comment token is needed - my $trailingCommentToken = q(); - my $lineBreakCharacter = q(); - my $EndStringLogFile = ${$self}{aliases}{EndStartsOnOwnLine}||"EndStartsOnOwnLine"; - - if(${$child}{EndFinishesWithLineBreak}==1){ - $logger->trace("Adding a linebreak at the end of ${$child}{end} (post text wrap $EndStringLogFile==1)") if $is_t_switch_active; - $lineBreakCharacter = "\n"; - } elsif(${$child}{EndFinishesWithLineBreak}==2 and ${$self}{body} !~ m/${$child}{id}\h*$trailingCommentRegExp/s){ - $logger->trace("Adding a % immediately after ${$child}{end} (post text wrap $EndStringLogFile==2)") if $is_t_switch_active; - $trailingCommentToken = "%".$self->add_comment_symbol."\n"; - } elsif(${$child}{EndFinishesWithLineBreak}==3){ - $lineBreakCharacter .= (${$mainSettings{modifyLineBreaks}}{preserveBlankLines}?$tokens{blanklines}:"\n")."\n"; - } - ${$self}{body} =~s/${$child}{id}(\h*)/${$child}{id}$1$trailingCommentToken$lineBreakCharacter/s; + + # after text wrap poly-switch check + if ( $input{when} eq "afterTextWrap" ) { + $logger->trace("*post text wrap poly-switch check for EndFinishesWithLineBreak") if $is_t_switch_active; + if ( defined ${$child}{EndFinishesWithLineBreak} + and ${$child}{EndFinishesWithLineBreak} >= 1 + and ${$self}{body} =~ m/${$child}{id}\h*\S+/m ) + { + ${$child}{linebreaksAtEnd}{end} = 1; + + # by default, assume that no trailing comment token is needed + my $trailingCommentToken = q(); + my $lineBreakCharacter = q(); + my $EndStringLogFile = ${$self}{aliases}{EndStartsOnOwnLine} || "EndStartsOnOwnLine"; + + if ( ${$child}{EndFinishesWithLineBreak} == 1 ) { + $logger->trace( + "Adding a linebreak at the end of ${$child}{end} (post text wrap $EndStringLogFile==1)") + if $is_t_switch_active; + $lineBreakCharacter = "\n"; + } + elsif ( ${$child}{EndFinishesWithLineBreak} == 2 + and ${$self}{body} !~ m/${$child}{id}\h*$trailingCommentRegExp/s ) + { + $logger->trace("Adding a % immediately after ${$child}{end} (post text wrap $EndStringLogFile==2)") + if $is_t_switch_active; + $trailingCommentToken = "%" . $self->add_comment_symbol . "\n"; + } + elsif ( ${$child}{EndFinishesWithLineBreak} == 3 ) { + $lineBreakCharacter + .= ( ${ $mainSettings{modifyLineBreaks} }{preserveBlankLines} ? $tokens{blanklines} : "\n" ) + . "\n"; + } + ${$self}{body} =~ s/${$child}{id}(\h*)/${$child}{id}$1$trailingCommentToken$lineBreakCharacter/s; + } } - } } } |