From a3d3b206eb2e58da4e00d07576e32c5bd9acbf69 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Sun, 25 Jun 2017 21:50:47 +0000
Subject: latexindent (25jun17)

git-svn-id: svn://tug.org/texlive/trunk@44695 c570f23f-e606-0410-a88d-b1316a301751
---
 .../latexindent/LatexIndent/FileExtension.pm       | 49 +++++++++++++++++++++-
 .../latexindent/LatexIndent/GetYamlSettings.pm     | 33 ++++++++++++++-
 .../scripts/latexindent/LatexIndent/LogFile.pm     | 15 +++++--
 .../scripts/latexindent/LatexIndent/Version.pm     | 24 +++++++++++
 .../scripts/latexindent/defaultSettings.yaml       |  2 +-
 .../texmf-dist/scripts/latexindent/latexindent.pl  |  3 +-
 6 files changed, 118 insertions(+), 8 deletions(-)
 create mode 100644 Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm

(limited to 'Master/texmf-dist/scripts/latexindent')

diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/FileExtension.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/FileExtension.pm
index 131c5c011eb..c2f6d0fcf3f 100644
--- a/Master/texmf-dist/scripts/latexindent/LatexIndent/FileExtension.pm
+++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/FileExtension.pm
@@ -22,6 +22,7 @@ use open ':std', ':encoding(UTF-8)';
 use File::Basename; # to get the filename and directory path
 use Exporter qw/import/;
 use LatexIndent::GetYamlSettings qw/%masterSettings/;
+use LatexIndent::Switches qw/%switches/;
 our @EXPORT_OK = qw/file_extension_check/;
 
 sub file_extension_check{
@@ -37,7 +38,8 @@ sub file_extension_check{
     my @fileExtensions = sort { $fileExtensionPreference{$a} <=> $fileExtensionPreference{$b} } keys(%fileExtensionPreference);
     
     # get the base file name, allowing for different extensions (possibly no extension)
-    my ($dir, $name, $ext) = fileparse($fileName, @fileExtensions);
+    my ($name, $dir, $ext) = fileparse($fileName, @fileExtensions);
+    ${$self}{baseName} = $name;
 
     # check to make sure given file type is supported
     if( -e $fileName  and !$ext ){
@@ -90,6 +92,51 @@ sub file_extension_check{
     # store the file extension
     ${$self}{fileExtension} = $ext;
 
+    # check to see if -o switch is active
+    if($switches{outputToFile}){
+        
+        $self->logger("Output file check",'heading');
+
+        # the -o file name might begin with a + symbol
+        if($switches{outputToFile} =~ m/^\+(.*)/ and $1 ne "+"){
+            $self->logger("-o switch called with + symbol at the beginning: $switches{outputToFile}");
+            $switches{outputToFile} = ${$self}{baseName}.$1;
+            $self->logger("output file is now: $switches{outputToFile}");
+        }
+
+        my $strippedFileExtension = ${$self}{fileExtension};
+        $strippedFileExtension =~ s/\.//; 
+
+        # grab the name, directory, and extension of the output file
+        my ($name, $dir, $ext) = fileparse($switches{outputToFile}, $strippedFileExtension);
+
+        # if there is no extension, then add the extension from the file to be operated upon
+        if(!$ext){
+            $self->logger("-o switch called with file name without extension: $switches{outputToFile}");
+            $switches{outputToFile} = $name.($name=~m/\.\z/ ? q() : ".").$strippedFileExtension;
+            $self->logger("Updated to $switches{outputToFile} as the file extension of the input file is $strippedFileExtension");
+        }
+
+        # the -o file name might end with ++ in which case we wish to search for existence, 
+        # and then increment accordingly
+        $name =~ s/\.$//;
+        if($name =~ m/\+\+$/){
+            $self->logger("-o switch called with file name ending with ++: $switches{outputToFile}");
+            $name =~ s/\+\+$//;
+            $name = ${$self}{baseName} if ($name eq "");
+            my $outputFileCounter = 0;
+            my $fileName = $name.$outputFileCounter.".".$strippedFileExtension; 
+            $self->logger("will search for exisitence and increment counter, starting with $fileName");
+            while( -e $fileName ){
+                $self->logger("$fileName exists, incrementing counter");
+                $outputFileCounter++;
+                $fileName = $name.$outputFileCounter.".".$strippedFileExtension; 
+            }
+            $self->logger("$fileName does not exist, and will be the output file");
+            $switches{outputToFile} = $fileName;
+        }
+    }
+
     # read the file into the Document body
     my @lines;
     open(MAINFILE, $fileName) or die "Could not open input file, $fileName";
diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm
index e4b5f12c54d..0d51d5837db 100644
--- a/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm
+++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm
@@ -35,7 +35,6 @@ our %previouslyFoundSettings;
 sub readSettings{
   my $self = shift;
   
-  $defaultSettings = YAML::Tiny->new;
   $defaultSettings = YAML::Tiny->read( "$FindBin::RealBin/defaultSettings.yaml" );
   $self->logger("YAML settings read",'heading');
   $self->logger("Reading defaultSettings.yaml from $FindBin::RealBin/defaultSettings.yaml");
@@ -104,11 +103,34 @@ sub readSettings{
   # get information about LOCAL settings, assuming that $readLocalSettings exists
   my $directoryName = dirname (${$self}{fileName});
   
+  my @localSettings;
+
+  # local settings can be called with a + symbol, for example
+  #     -l=+myfile.yaml
+  #     -l "+ myfile.yaml"
+  #     -l=myfile.yaml+
+  # which translates to, respectively
+  #     -l=localSettings.yaml,myfile.yaml
+  #     -l=myfile.yaml,localSettings.yaml
+  # Note: the following is *not allowed*:
+  #     -l+myfile.yaml
+  # and
+  #     -l + myfile.yaml
+  # will *only* load localSettings.yaml, and myfile.yaml will be ignored
+  if($switches{readLocalSettings} =~ m/\+/){
+        $self->logger("+ found in call for -l switch: will add localSettings.yaml");
+
+        # + can be either at the beginning or the end, which determines if where the comma should go
+        my $commaAtBeginning = ($switches{readLocalSettings} =~ m/^\h*\+/ ? q() : ",");
+        my $commaAtEnd = ($switches{readLocalSettings} =~ m/^\h*\+/ ? "," : q());
+        $switches{readLocalSettings} =~ s/\h*\+\h*/$commaAtBeginning."localSettings.yaml".$commaAtEnd/e; 
+        $self->logger("New value of -l switch: $switches{readLocalSettings}");
+  }
+
   # local settings can be separated by ,
   # e.g  
   #     -l = myyaml1.yaml,myyaml2.yaml
   # and in which case, we need to read them all
-  my @localSettings;
   if($switches{readLocalSettings} =~ m/,/){
         $self->logger("Multiple localSettings found, separated by commas:",'heading');
         @localSettings = split(/,/,$switches{readLocalSettings});
@@ -118,6 +140,13 @@ sub readSettings{
 
   # add local settings to the paths, if appropriate
   foreach (@localSettings) {
+    # check for an extension (.yaml)
+    my ($dir, $name, $ext) = fileparse($_, "yaml");
+
+    # if no extension is found, append the current localSetting with .yaml
+    $_ = $_.($_=~m/\.\z/ ? q() : ".")."yaml" if(!$ext);
+
+    # check for existence and non-emptiness
     if ( (-e "$directoryName/$_") and !(-z "$directoryName/$_")) {
         $self->logger("Adding $directoryName/$_ to YAML read paths");
         push(@absPaths,"$directoryName/$_");
diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/LogFile.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/LogFile.pm
index 336ec34c7ad..fb7cb37ed00 100644
--- a/Master/texmf-dist/scripts/latexindent/LatexIndent/LogFile.pm
+++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/LogFile.pm
@@ -18,6 +18,7 @@ use strict;
 use warnings;
 use LatexIndent::GetYamlSettings qw/%masterSettings/;
 use LatexIndent::Switches qw/%switches/;
+use LatexIndent::Version qw/$versionNumber $versionDate/;
 use FindBin; 
 use File::Basename; # to get the filename and directory path
 use Exporter qw/import/;
@@ -41,17 +42,25 @@ sub processSwitches{
     my $self = shift;
 
     # details of the script to log file
-    $self->logger("$FindBin::Script version 3.2, a script to indent .tex files",'heading');
+    $self->logger("$FindBin::Script version $versionNumber, $versionDate, a script to indent .tex files",'heading');
     $self->logger("$FindBin::Script lives here: $FindBin::RealBin/");
 
     # time the script is used
     my $time = localtime();
     $self->logger("$time");
 
+    # -v switch is just to show the version number
+    if($switches{version}) {
+        print $versionNumber,", ",$versionDate,"\n";
+        exit(2);
+    }
+
     if(scalar(@ARGV) < 1 or $switches{showhelp}) {
     print <<ENDQUOTE
-latexindent.pl version 3.2
+latexindent.pl version $versionNumber, $versionDate
 usage: latexindent.pl [options] [file][.tex|.sty|.cls|.bib|...]
+      -v, --version
+          displays the version number and date of release
       -h, --help
           help (see the documentation for detailed instructions and examples)
       -o, --outputfile
@@ -72,7 +81,7 @@ usage: latexindent.pl [options] [file][.tex|.sty|.cls|.bib|...]
                 latexindent.pl -l=some.yaml,another.yaml myfile.tex 
       -d, --onlydefault
           ONLY use defaultSettings.yaml, ignore ALL (yaml) user files
-      -g, --logfile
+      -g, --logfile=<name of log file>
           used to specify the name of logfile (default is indent.log)
       -c, --cruft=<cruft directory> 
           used to specify the location of backup files and indent.log
diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm
new file mode 100644
index 00000000000..1ebfb27171e
--- /dev/null
+++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm
@@ -0,0 +1,24 @@
+package LatexIndent::Version;
+#	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
+#	(at your option) any later version.
+#
+#	This program is distributed in the hope that it will be useful,
+#	but WITHOUT ANY WARRANTY; without even the implied warranty of
+#	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#	GNU General Public License for more details.
+#
+#	See http://www.gnu.org/licenses/.
+#
+#	Chris Hughes, 2017
+#
+#	For all communication, please visit: https://github.com/cmhughes/latexindent.pl
+use strict;
+use warnings;
+use Exporter qw/import/;
+our @EXPORT_OK = qw/$versionNumber $versionDate/;
+
+our $versionNumber = '3.2.1';
+our $versionDate = '2017-06-25';
+1
diff --git a/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml b/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml
index 916efb46dd3..d29c887f2da 100755
--- a/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml
+++ b/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml
@@ -1,4 +1,4 @@
-# defaultSettings.yaml for latexindent.pl, version 3.2, 2017-06-19
+# defaultSettings.yaml for latexindent.pl, version 3.2.1, 2017-06-25
 #                      a script that aims to
 #                      beautify .tex, .sty, .cls files
 #
diff --git a/Master/texmf-dist/scripts/latexindent/latexindent.pl b/Master/texmf-dist/scripts/latexindent/latexindent.pl
index 107d4fab865..e4fc3ea64f6 100755
--- a/Master/texmf-dist/scripts/latexindent/latexindent.pl
+++ b/Master/texmf-dist/scripts/latexindent/latexindent.pl
@@ -1,5 +1,5 @@
 #!/usr/bin/env perl
-#   latexindent.pl, version 3.2, 2017-06-19
+#   latexindent.pl, version 3.2.1, 2017-06-25
 #
 #	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
@@ -30,6 +30,7 @@ use LatexIndent::Document;
 my %switches = (readLocalSettings=>0);
 
 GetOptions (
+    "version|v"=>\$switches{version},
     "silent|s"=>\$switches{silentMode},
     "trace|t"=>\$switches{trace},
     "ttrace|tt"=>\$switches{ttrace},
-- 
cgit v1.2.3