summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-09-15 21:42:19 +0000
committerKarl Berry <karl@freefriends.org>2018-09-15 21:42:19 +0000
commit21b240fd974a27aad7d7c48cb027718a9e471f5b (patch)
tree85440b7e5cc9b6ca36f33a504377851ed0ac6e19 /Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm
parent6646c4d916203b724973f3d5adbd597577cdb1b4 (diff)
latexindent (15sep18)
git-svn-id: svn://tug.org/texlive/trunk@48673 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm')
-rw-r--r--Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm227
1 files changed, 1 insertions, 226 deletions
diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm
index afa1360369d..2faa53b2920 100644
--- a/Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm
+++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm
@@ -25,7 +25,7 @@ use LatexIndent::TrailingComments qw/$trailingCommentRegExp/;
use LatexIndent::Switches qw/$is_m_switch_active $is_t_switch_active $is_tt_switch_active/;
use LatexIndent::Item qw/$listOfItems/;
use LatexIndent::LogFile qw/$logger/;
-our @EXPORT_OK = qw/modify_line_breaks_body modify_line_breaks_end adjust_line_breaks_end_parent remove_line_breaks_begin text_wrap remove_paragraph_line_breaks construct_paragraph_reg_exp one_sentence_per_line text_wrap_remove_paragraph_line_breaks/;
+our @EXPORT_OK = qw/modify_line_breaks_body modify_line_breaks_end adjust_line_breaks_end_parent remove_line_breaks_begin text_wrap remove_paragraph_line_breaks construct_paragraph_reg_exp text_wrap_remove_paragraph_line_breaks/;
our $paragraphRegExp = q();
@@ -327,230 +327,5 @@ sub remove_paragraph_line_breaks{
}
}
-sub one_sentence_per_line{
- my $self = shift;
-
- return unless ${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{manipulateSentences};
- $logger->trace("*One sentence per line regular expression construction: (see oneSentencePerLine: manipulateSentences)") if $is_t_switch_active;
-
- # sentences FOLLOW
- # sentences FOLLOW
- # sentences FOLLOW
- my $sentencesFollow = q();
-
- while( my ($sentencesFollowEachPart,$yesNo)= each %{${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{sentencesFollow}}){
- if($yesNo){
- if($sentencesFollowEachPart eq "par"){
- $sentencesFollowEachPart = qr/\R?\\par/s;
- } elsif ($sentencesFollowEachPart eq "blankLine"){
- $sentencesFollowEachPart = qr/
- (?:\A(?:$tokens{blanklines}\R)+) # the order of each of these
- | # is important, as (like always) the first
- (?:\G(?:$tokens{blanklines}\R)+) # thing to be matched will
- | # be accepted
- (?:(?:$tokens{blanklines}\h*\R)+)
- |
- \R{2,}
- |
- \G
- /sx;
- } elsif ($sentencesFollowEachPart eq "fullStop"){
- $sentencesFollowEachPart = qr/\./s;
- } elsif ($sentencesFollowEachPart eq "exclamationMark"){
- $sentencesFollowEachPart = qr/\!/s;
- } elsif ($sentencesFollowEachPart eq "questionMark"){
- $sentencesFollowEachPart = qr/\?/s;
- } elsif ($sentencesFollowEachPart eq "rightBrace"){
- $sentencesFollowEachPart = qr/\}/s;
- } elsif ($sentencesFollowEachPart eq "commentOnPreviousLine"){
- $sentencesFollowEachPart = qr/$trailingCommentRegExp\h*\R/s;
- } elsif ($sentencesFollowEachPart eq "other"){
- $sentencesFollowEachPart = qr/$yesNo/;
- }
- $sentencesFollow .= ($sentencesFollow eq '' ? q() : "|").qr/$sentencesFollowEachPart/sx;
- }
- }
- # if blankLine is not active from sentencesFollow then we need to set up the
- # beginning of the string, but make sure that it is *not* followed by a
- # blank line token, or a blank line
- if(!${${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{sentencesFollow}}{blankLine}){
- $sentencesFollow .= ($sentencesFollow eq '' ? q() : "|").
- qr/
- \G
- (?!$tokens{blanklines})
- /sx;
- }
-
- if(${${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{sentencesFollow}}{blankLine}){
- $sentencesFollow = ($sentencesFollow eq '' ? q() : qr/(?:$sentencesFollow)(?:\h|\R)*/sx );
- } else {
- $sentencesFollow = ($sentencesFollow eq '' ? q() : qr/(?:$sentencesFollow)(?:\h*\R?)/sx );
- }
-
-
- $logger->trace("Sentences follow regexp:") if $is_tt_switch_active;
- $logger->trace($sentencesFollow) if $is_tt_switch_active;
-
- # sentences BEGIN with
- # sentences BEGIN with
- # sentences BEGIN with
- my $sentencesBeginWith = q();
-
- while( my ($sentencesBeginWithEachPart,$yesNo)= each %{${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{sentencesBeginWith}}){
- if($yesNo){
- if($sentencesBeginWithEachPart eq "A-Z"){
- $logger->trace("sentence BEGINS with capital letters (see oneSentencePerLine:sentencesBeginWith:A-Z)") if $is_t_switch_active;
- $sentencesBeginWithEachPart = qr/(?!(?:$tokens{blanklines}|$tokens{verbatim}|$tokens{preamble}))[A-Z]/;
- } elsif ($sentencesBeginWithEachPart eq "a-z"){
- $logger->trace("sentence BEGINS with lower-case letters (see oneSentencePerLine:sentencesBeginWith:a-z)") if $is_t_switch_active;
- $sentencesBeginWithEachPart = qr/[a-z]/;
- } elsif ($sentencesBeginWithEachPart eq "other"){
- $logger->trace("sentence BEGINS with other $yesNo (reg exp) (see oneSentencePerLine:sentencesBeginWith:other)") if $is_t_switch_active;
- $sentencesBeginWithEachPart = qr/$yesNo/;
- }
- $sentencesBeginWith .= ($sentencesBeginWith eq "" ? q(): "|" ).$sentencesBeginWithEachPart;
- }
- }
- $sentencesBeginWith = qr/$sentencesBeginWith/;
-
- # sentences END with
- # sentences END with
- # sentences END with
- ${${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{sentencesEndWith}}{basicFullStop} = 0 if ${${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{sentencesEndWith}}{betterFullStop};
- my $sentencesEndWith = q();
-
- while( my ($sentencesEndWithEachPart,$yesNo)= each %{${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{sentencesEndWith}}){
- if($yesNo){
- if($sentencesEndWithEachPart eq "basicFullStop"){
- $logger->trace("sentence ENDS with full stop (see oneSentencePerLine:sentencesEndWith:basicFullStop") if $is_t_switch_active;
- $sentencesEndWithEachPart = qr/\./;
- } elsif($sentencesEndWithEachPart eq "betterFullStop"){
- $logger->trace("sentence ENDS with *better* full stop (see oneSentencePerLine:sentencesEndWith:betterFullStop") if $is_t_switch_active;
- $sentencesEndWithEachPart = qr/(?:\.\)(?!\h*[a-z]))|(?:(?<!(?:(?:e\.g)|(?:i\.e)|(?:etc))))\.(?!(?:[a-z]|[A-Z]|\-|\,|[0-9]))/;
- } elsif ($sentencesEndWithEachPart eq "exclamationMark"){
- $logger->trace("sentence ENDS with exclamation mark (see oneSentencePerLine:sentencesEndWith:exclamationMark)") if $is_t_switch_active;
- $sentencesEndWithEachPart = qr/!/;
- } elsif ($sentencesEndWithEachPart eq "questionMark"){
- $logger->trace("sentence ENDS with question mark (see oneSentencePerLine:sentencesEndWith:questionMark)") if $is_t_switch_active;
- $sentencesEndWithEachPart = qr/\?/;
- } elsif ($sentencesEndWithEachPart eq "other"){
- $logger->trace("sentence ENDS with other $yesNo (reg exp) (see oneSentencePerLine:sentencesEndWith:other)") if $is_t_switch_active;
- $sentencesEndWithEachPart = qr/$yesNo/;
- }
- $sentencesEndWith .= ($sentencesEndWith eq "" ? q(): "|" ).$sentencesEndWithEachPart;
- }
- }
- $sentencesEndWith = qr/$sentencesEndWith/;
-
- # the OVERALL sentence regexp
- # the OVERALL sentence regexp
- # the OVERALL sentence regexp
- $logger->trace("Overall sentences end with regexp:") if $is_tt_switch_active;
- $logger->trace($sentencesEndWith) if $is_tt_switch_active;
-
- $logger->trace("Finding sentences...") if $is_t_switch_active;
-
- my $notWithinSentence = qr/$trailingCommentRegExp/s;
-
- # if
- #
- # modifyLineBreaks
- # oneSentencePerLine
- # sentencesFollow
- # blankLine
- #
- # is set to 0 then we need to *exclude* the $tokens{blanklines} from the sentence routine,
- # otherwise we could begin a sentence with $tokens{blanklines}.
- if(!${${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{sentencesFollow}}{blankLine}){
- $notWithinSentence .= "|".qr/(?:\h*\R?$tokens{blanklines})/s;
- }
-
- # similarly for \par
- if(${${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{sentencesFollow}}{par}){
- $notWithinSentence .= "|".qr/(?:\R?\\par)/s;
- }
-
- # initiate the sentence counter
- my $sentenceCounter;
- my @sentenceStorage;
-
- # make the sentence manipulation
- ${$self}{body} =~ s/((?:$sentencesFollow))
- (\h*)
- (?!$notWithinSentence)
- ((?:$sentencesBeginWith).*?)
- ($sentencesEndWith)/
- my $beginning = $1;
- my $h_space = ($2?$2:q());
- my $middle = $3;
- my $end = $4;
- my $trailingComments = q();
- # remove trailing comments from within the body of the sentence
- while($middle =~ m|$trailingCommentRegExp|){
- $middle =~ s|\h*($trailingCommentRegExp)||s;
- $trailingComments .= $1;
- }
- # remove line breaks from within a sentence
- $middle =~ s|
- (?!\A) # not at the *beginning* of a match
- (\h*)\R # possible horizontal space, then line break
- |$1?$1:" ";|esgx if ${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{removeSentenceLineBreaks};
- $middle =~ s|$tokens{blanklines}\h*\R?|$tokens{blanklines}\n|sg;
- $logger->trace("follows: $beginning") if $is_tt_switch_active;
- $logger->trace("sentence: $middle") if $is_tt_switch_active;
- $logger->trace("ends with: $end") if $is_tt_switch_active;
- # reconstruct the sentence
- $sentenceCounter++;
- push(@sentenceStorage,{id=>$tokens{sentence}.$sentenceCounter.$tokens{endOfToken},value=>$middle.$end});
- $beginning.$h_space.$tokens{sentence}.$sentenceCounter.$tokens{endOfToken}.$trailingComments;
- /xsge;
-
- # loop back through the sentenceStorage and replace with the sentence, adjusting line breaks
- # before and after appropriately
- while( my $sentence = pop @sentenceStorage){
- my $sentenceStorageID = ${$sentence}{id};
- my $sentenceStorageValue = ${$sentence}{value};
-
- # option to text wrap (and option to indent) sentences
- if(${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{textWrapSentences}){
- my $sentenceObj = LatexIndent::Document->new(body=>$sentenceStorageValue,
- name=>"sentence",
- modifyLineBreaksYamlName=>"sentence",
- );
-
- # text wrapping
- $sentenceObj->yaml_get_columns;
- $sentenceObj->text_wrap;
-
- # indentation of sentences
- if(${$sentenceObj}{body} =~ m/
- (.*?) # content of first line
- \R # first line break
- (.*$) # rest of body
- /sx){
- my $bodyFirstLine = $1;
- my $remainingBody = $2;
- my $indentation = ${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{sentenceIndent};
- $logger->trace("first line of sencent: $bodyFirstLine") if $is_tt_switch_active;
- $logger->trace("remaining body (before indentation):\n'$remainingBody'") if($is_tt_switch_active);
-
- # add the indentation to all the body except first line
- $remainingBody =~ s/^/$indentation/mg unless($remainingBody eq ''); # add indentation
- $logger->trace("remaining body (after indentation):\n$remainingBody'") if($is_tt_switch_active);
-
- # put the body back together
- ${$sentenceObj}{body} = $bodyFirstLine."\n".$remainingBody;
- }
- $sentenceStorageValue = ${$sentenceObj}{body};
- };
- # sentence at the very END
- ${$self}{body} =~ s/\h*$sentenceStorageID\h*$/$sentenceStorageValue/s;
- # sentence at the very BEGINNING
- ${$self}{body} =~ s/^$sentenceStorageID\h*\R?/$sentenceStorageValue\n/s;
- # all other sentences
- ${$self}{body} =~ s/\R?\h*$sentenceStorageID\h*\R?/\n$sentenceStorageValue\n/s;
- }
-
-}
1;