Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/tcl8.5.2/tools/eolFix.tcl @ 43

Last change on this file since 43 was 25, checked in by landauf, 16 years ago

added tcl to libs

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