os/persistentdata/persistentstorage/sqlite3api/TEST/TCL/tcldistribution/tools/eolFix.tcl
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
## Super aggressive EOL-fixer!
sl@0
     2
##
sl@0
     3
##  Will even understand screwed up ones like CRCRLF.
sl@0
     4
##  (found in bad CVS repositories, caused by spacey developers
sl@0
     5
##   abusing CVS)
sl@0
     6
##
sl@0
     7
##  davygrvy@pobox.com    3:41 PM 10/12/2001
sl@0
     8
##
sl@0
     9
sl@0
    10
package provide EOL-fix 1.1
sl@0
    11
sl@0
    12
namespace eval ::EOL {
sl@0
    13
    variable outMode crlf
sl@0
    14
}
sl@0
    15
sl@0
    16
proc EOL::fix {filename {newfilename ""}} {
sl@0
    17
    variable outMode
sl@0
    18
sl@0
    19
    if {![file exists $filename]} { return }
sl@0
    20
    puts "EOL Fixing: $filename"
sl@0
    21
sl@0
    22
    file rename ${filename} ${filename}.o
sl@0
    23
    set fhnd [open ${filename}.o r]
sl@0
    24
sl@0
    25
    if {$newfilename != ""} {
sl@0
    26
	set newfhnd [open ${newfilename} w]
sl@0
    27
    } else {
sl@0
    28
	set newfhnd [open ${filename} w]
sl@0
    29
    }
sl@0
    30
sl@0
    31
    fconfigure $newfhnd -translation [list auto $outMode]
sl@0
    32
    seek $fhnd 0 end
sl@0
    33
    set theEnd [tell $fhnd]
sl@0
    34
    seek $fhnd 0 start
sl@0
    35
sl@0
    36
    fconfigure $fhnd -translation binary -buffersize $theEnd
sl@0
    37
    set rawFile [read $fhnd $theEnd]
sl@0
    38
    close $fhnd
sl@0
    39
sl@0
    40
    regsub -all {(\r)|(\r){1,2}(\n)} $rawFile "\n" rawFile
sl@0
    41
sl@0
    42
    set lineList [split $rawFile \n]
sl@0
    43
sl@0
    44
    foreach line $lineList {
sl@0
    45
	puts $newfhnd $line
sl@0
    46
    }
sl@0
    47
sl@0
    48
    close $newfhnd
sl@0
    49
    file delete ${filename}.o
sl@0
    50
}
sl@0
    51
sl@0
    52
proc EOL::fixall {args} {
sl@0
    53
    if {[llength $args] == 0} {
sl@0
    54
	puts stderr "no files to fix"
sl@0
    55
	exit 1
sl@0
    56
    } else {
sl@0
    57
	set cmd [lreplace $args -1 -1 glob -nocomplain]
sl@0
    58
    }
sl@0
    59
sl@0
    60
    foreach f [eval $cmd] {
sl@0
    61
	if {[file isfile $f]} {fix $f}
sl@0
    62
    }
sl@0
    63
}
sl@0
    64
sl@0
    65
if {$tcl_interactive == 0 && $argc > 0} {
sl@0
    66
    if {[string index [lindex $argv 0] 0] == "-"} {
sl@0
    67
	switch -- [lindex $argv 0] {
sl@0
    68
	    -cr   { set ::EOL::outMode cr }
sl@0
    69
	    -crlf { set ::EOL::outMode crlf }
sl@0
    70
	    -lf   { set ::EOL::outMode lf }
sl@0
    71
	    default { puts stderr "improper mode switch" ; exit 1 }
sl@0
    72
        }
sl@0
    73
	set argv [lrange $argv 1 end]
sl@0
    74
    }
sl@0
    75
    eval EOL::fixall $argv
sl@0
    76
} else {
sl@0
    77
    return
sl@0
    78
}