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