|
Tomcat example source code file (lineends.pl)
The Tomcat lineends.pl source code#!/usr/local/bin/perl # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Heuristically converts line endings to the current OS's preferred format # # All existing line endings must be identical (e.g. lf's only, or even # the accedental cr.cr.lf sequence.) If some lines end lf, and others as # cr.lf, the file is presumed binary. If the cr character appears anywhere # except prefixed to an lf, the file is presumed binary. If there is no # change in the resulting file size, or the file is binary, the conversion # is discarded. # # Todo: Handle NULL stdin characters gracefully. # use IO::File; use File::Find; # The ignore list is '-' seperated, with this leading hyphen and # trailing hyphens in ever concatinated list below. $ignore = "-"; # Image formats $ignore .= "gif-jpg-jpeg-png-ico-bmp-"; # Archive formats $ignore .= "tar-gz-z-zip-jar-war-bz2-tgz-"; # Many document formats $ignore .= "eps-psd-pdf-ai-"; # Some encodings $ignore .= "ucs2-ucs4-"; # Some binary objects $ignore .= "class-so-dll-exe-obj-a-o-lo-slo-sl-dylib-"; # Some build env files $ignore .= "mcp-xdc-ncb-opt-pdb-ilk-sbr-"; $preservedate = 1; $forceending = 0; $givenpaths = 0; $notnative = 0; while (defined @ARGV[0]) { if (@ARGV[0] eq '--touch') { $preservedate = 0; } elsif (@ARGV[0] eq '--nocr') { $notnative = -1; } elsif (@ARGV[0] eq '--cr') { $notnative = 1; } elsif (@ARGV[0] eq '--force') { $forceending = 1; } elsif (@ARGV[0] eq '--FORCE') { $forceending = 2; } elsif (@ARGV[0] =~ m/^-/) { die "What is " . @ARGV[0] . " supposed to mean?\n\n" . "Syntax:\t$0 [option()s] [path(s)]\n\n" . <<'OUTCH' Where: paths specifies the top level directory to convert (default of '.') options are; --cr keep/add one ^M --nocr remove ^M's --touch the datestamp (default: keeps date/attribs) --force mismatched corrections (unbalanced ^M's) --FORCE all files regardless of file name! OUTCH } else { find(\&totxt, @ARGV[0]); print "scanned " . @ARGV[0] . "\n"; $givenpaths = 1; } shift @ARGV; } if (!$givenpaths) { find(\&totxt, '.'); print "did .\n"; } sub totxt { $oname = $_; $tname = '.#' . $_; if (!-f) { return; } @exts = split /\./; if ($forceending < 2) { while ($#exts && ($ext = pop(@exts))) { if ($ignore =~ m|-$ext-|i) { return; } } } @ostat = stat($oname); $srcfl = new IO::File $oname, "r" or die; $dstfl = new IO::File $tname, "w" or die; binmode $srcfl; if ($notnative) { binmode $dstfl; } undef $t; while (<$srcfl>) { if (s/(\r*)\n$/\n/) { $n = length $1; if (!defined $t) { $t = $n; } if (!$forceending && (($n != $t) || m/\r/)) { print "mismatch in " .$oname. ":" .$n. " expected " .$t. "\n"; undef $t; last; } elsif ($notnative > 0) { s/\n$/\r\n/; } } print $dstfl $_; } if (defined $t && (tell $srcfl == tell $dstfl)) { undef $t; } undef $srcfl; undef $dstfl; if (defined $t) { unlink $oname or die; rename $tname, $oname or die; @anames = ($oname); if ($preservedate) { utime $ostat[9], $ostat[9], @anames; } chmod $ostat[2] & 07777, @anames; chown $ostat[5], $ostat[6], @anames; print "Converted file " . $oname . " to text in " . $File::Find::dir . "\n"; } else { unlink $tname or die; } } Other Tomcat examples (source code examples)Here is a short list of links related to this Tomcat lineends.pl source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.