59
59
//! line (which it can't) and so naturally place the content on its own line to
60
60
//! avoid combining it with other lines and making matters even worse.
61
61
62
- pub use self :: PrintStackBreak :: * ;
63
- pub use self :: Breaks :: * ;
64
- pub use self :: Token :: * ;
65
-
66
62
use std:: io;
67
63
use std:: string;
68
64
use std:: iter:: repeat;
@@ -87,7 +83,7 @@ pub struct BeginToken {
87
83
88
84
#[ derive( Clone ) ]
89
85
pub enum Token {
90
- String ( string :: String , int ) ,
86
+ String ( String , int ) ,
91
87
Break ( BreakToken ) ,
92
88
Begin ( BeginToken ) ,
93
89
End ,
@@ -96,12 +92,15 @@ pub enum Token {
96
92
97
93
impl Token {
98
94
pub fn is_eof ( & self ) -> bool {
99
- match * self { Eof => true , _ => false }
95
+ match * self {
96
+ Token :: Eof => true ,
97
+ _ => false ,
98
+ }
100
99
}
101
100
102
101
pub fn is_hardbreak_tok ( & self ) -> bool {
103
102
match * self {
104
- Break ( BreakToken {
103
+ Token :: Break ( BreakToken {
105
104
offset : 0 ,
106
105
blank_space : bs
107
106
} ) if bs == SIZE_INFINITY =>
@@ -112,22 +111,22 @@ impl Token {
112
111
}
113
112
}
114
113
115
- pub fn tok_str ( t : Token ) -> string :: String {
116
- match t {
117
- String ( s, len) => return format ! ( "STR({},{})" , s, len) ,
118
- Break ( _) => return "BREAK" . to_string ( ) ,
119
- Begin ( _) => return "BEGIN" . to_string ( ) ,
120
- End => return "END" . to_string ( ) ,
121
- Eof => return "EOF" . to_string ( )
114
+ pub fn tok_str ( token : & Token ) -> String {
115
+ match * token {
116
+ Token :: String ( ref s, len) => format ! ( "STR({},{})" , s, len) ,
117
+ Token :: Break ( _) => "BREAK" . to_string ( ) ,
118
+ Token :: Begin ( _) => "BEGIN" . to_string ( ) ,
119
+ Token :: End => "END" . to_string ( ) ,
120
+ Token :: Eof => "EOF" . to_string ( )
122
121
}
123
122
}
124
123
125
- pub fn buf_str ( toks : Vec < Token > ,
126
- szs : Vec < int > ,
124
+ pub fn buf_str ( toks : & [ Token ] ,
125
+ szs : & [ int ] ,
127
126
left : uint ,
128
127
right : uint ,
129
128
lim : uint )
130
- -> string :: String {
129
+ -> String {
131
130
let n = toks. len ( ) ;
132
131
assert_eq ! ( n, szs. len( ) ) ;
133
132
let mut i = left;
@@ -140,7 +139,7 @@ pub fn buf_str(toks: Vec<Token>,
140
139
}
141
140
s. push_str ( & format ! ( "{}={}" ,
142
141
szs[ i] ,
143
- tok_str( toks[ i] . clone ( ) ) ) [ ] ) ;
142
+ tok_str( & toks[ i] ) ) [ ] ) ;
144
143
i += 1 u;
145
144
i %= n;
146
145
}
@@ -167,7 +166,7 @@ pub fn mk_printer(out: Box<io::Writer+'static>, linewidth: uint) -> Printer {
167
166
// fall behind.
168
167
let n: uint = 3 * linewidth;
169
168
debug ! ( "mk_printer {}" , linewidth) ;
170
- let token: Vec < Token > = repeat ( Eof ) . take ( n) . collect ( ) ;
169
+ let token: Vec < Token > = repeat ( Token :: Eof ) . take ( n) . collect ( ) ;
171
170
let size: Vec < int > = repeat ( 0 i) . take ( n) . collect ( ) ;
172
171
let scan_stack: Vec < uint > = repeat ( 0 u) . take ( n) . collect ( ) ;
173
172
Printer {
@@ -312,10 +311,10 @@ impl Printer {
312
311
pub fn replace_last_token ( & mut self , t : Token ) {
313
312
self . token [ self . right ] = t;
314
313
}
315
- pub fn pretty_print ( & mut self , t : Token ) -> io:: IoResult < ( ) > {
314
+ pub fn pretty_print ( & mut self , token : Token ) -> io:: IoResult < ( ) > {
316
315
debug ! ( "pp ~[{},{}]" , self . left, self . right) ;
317
- match t {
318
- Eof => {
316
+ match token {
317
+ Token :: Eof => {
319
318
if !self . scan_stack_empty {
320
319
self . check_stack ( 0 ) ;
321
320
let left = self . token [ self . left ] . clone ( ) ;
@@ -325,7 +324,7 @@ impl Printer {
325
324
self . indent ( 0 ) ;
326
325
Ok ( ( ) )
327
326
}
328
- Begin ( b) => {
327
+ Token :: Begin ( b) => {
329
328
if self . scan_stack_empty {
330
329
self . left_total = 1 ;
331
330
self . right_total = 1 ;
@@ -334,27 +333,27 @@ impl Printer {
334
333
} else { self . advance_right ( ) ; }
335
334
debug ! ( "pp Begin({})/buffer ~[{},{}]" ,
336
335
b. offset, self . left, self . right) ;
337
- self . token [ self . right ] = t ;
336
+ self . token [ self . right ] = token ;
338
337
self . size [ self . right ] = -self . right_total ;
339
338
let right = self . right ;
340
339
self . scan_push ( right) ;
341
340
Ok ( ( ) )
342
341
}
343
- End => {
342
+ Token :: End => {
344
343
if self . scan_stack_empty {
345
344
debug ! ( "pp End/print ~[{},{}]" , self . left, self . right) ;
346
- self . print ( t , 0 )
345
+ self . print ( token , 0 )
347
346
} else {
348
347
debug ! ( "pp End/buffer ~[{},{}]" , self . left, self . right) ;
349
348
self . advance_right ( ) ;
350
- self . token [ self . right ] = t ;
349
+ self . token [ self . right ] = token ;
351
350
self . size [ self . right ] = -1 ;
352
351
let right = self . right ;
353
352
self . scan_push ( right) ;
354
353
Ok ( ( ) )
355
354
}
356
355
}
357
- Break ( b) => {
356
+ Token :: Break ( b) => {
358
357
if self . scan_stack_empty {
359
358
self . left_total = 1 ;
360
359
self . right_total = 1 ;
@@ -366,21 +365,21 @@ impl Printer {
366
365
self . check_stack ( 0 ) ;
367
366
let right = self . right ;
368
367
self . scan_push ( right) ;
369
- self . token [ self . right ] = t ;
368
+ self . token [ self . right ] = token ;
370
369
self . size [ self . right ] = -self . right_total ;
371
370
self . right_total += b. blank_space ;
372
371
Ok ( ( ) )
373
372
}
374
- String ( ref s, len) => {
373
+ Token :: String ( ref s, len) => {
375
374
if self . scan_stack_empty {
376
375
debug ! ( "pp String('{}')/print ~[{},{}]" ,
377
376
* s, self . left, self . right) ;
378
- self . print ( t . clone ( ) , len)
377
+ self . print ( token . clone ( ) , len)
379
378
} else {
380
379
debug ! ( "pp String('{}')/buffer ~[{},{}]" ,
381
380
* s, self . left, self . right) ;
382
381
self . advance_right ( ) ;
383
- self . token [ self . right ] = t . clone ( ) ;
382
+ self . token [ self . right ] = token . clone ( ) ;
384
383
self . size [ self . right ] = len;
385
384
self . right_total += len;
386
385
self . check_stream ( )
@@ -456,8 +455,8 @@ impl Printer {
456
455
if l >= 0 {
457
456
let ret = self . print ( x. clone ( ) , l) ;
458
457
match x {
459
- Break ( b) => self . left_total += b. blank_space ,
460
- String ( _, len) => {
458
+ Token :: Break ( b) => self . left_total += b. blank_space ,
459
+ Token :: String ( _, len) => {
461
460
assert_eq ! ( len, l) ; self . left_total += len;
462
461
}
463
462
_ => ( )
@@ -478,14 +477,14 @@ impl Printer {
478
477
if !self . scan_stack_empty {
479
478
let x = self . scan_top ( ) ;
480
479
match self . token [ x] {
481
- Begin ( _) => {
480
+ Token :: Begin ( _) => {
482
481
if k > 0 {
483
482
let popped = self . scan_pop ( ) ;
484
483
self . size [ popped] = self . size [ x] + self . right_total ;
485
484
self . check_stack ( k - 1 ) ;
486
485
}
487
486
}
488
- End => {
487
+ Token :: End => {
489
488
// paper says + not =, but that makes no sense.
490
489
let popped = self . scan_pop ( ) ;
491
490
self . size [ popped] = 1 ;
@@ -520,7 +519,7 @@ impl Printer {
520
519
} else {
521
520
PrintStackElem {
522
521
offset : 0 ,
523
- pbreak : Broken ( Inconsistent )
522
+ pbreak : PrintStackBreak :: Broken ( Breaks :: Inconsistent )
524
523
}
525
524
}
526
525
}
@@ -531,56 +530,56 @@ impl Printer {
531
530
}
532
531
write ! ( self . out, "{}" , s)
533
532
}
534
- pub fn print ( & mut self , x : Token , l : int ) -> io:: IoResult < ( ) > {
535
- debug ! ( "print {} {} (remaining line space={})" , tok_str( x . clone ( ) ) , l,
533
+ pub fn print ( & mut self , token : Token , l : int ) -> io:: IoResult < ( ) > {
534
+ debug ! ( "print {} {} (remaining line space={})" , tok_str( & token ) , l,
536
535
self . space) ;
537
- debug ! ( "{}" , buf_str( self . token. clone ( ) ,
538
- self . size. clone ( ) ,
536
+ debug ! ( "{}" , buf_str( & self . token[ ] ,
537
+ & self . size[ ] ,
539
538
self . left,
540
539
self . right,
541
540
6 ) ) ;
542
- match x {
543
- Begin ( b) => {
541
+ match token {
542
+ Token :: Begin ( b) => {
544
543
if l > self . space {
545
544
let col = self . margin - self . space + b. offset ;
546
545
debug ! ( "print Begin -> push broken block at col {}" , col) ;
547
546
self . print_stack . push ( PrintStackElem {
548
547
offset : col,
549
- pbreak : Broken ( b. breaks )
548
+ pbreak : PrintStackBreak :: Broken ( b. breaks )
550
549
} ) ;
551
550
} else {
552
551
debug ! ( "print Begin -> push fitting block" ) ;
553
552
self . print_stack . push ( PrintStackElem {
554
553
offset : 0 ,
555
- pbreak : Fits
554
+ pbreak : PrintStackBreak :: Fits
556
555
} ) ;
557
556
}
558
557
Ok ( ( ) )
559
558
}
560
- End => {
559
+ Token :: End => {
561
560
debug ! ( "print End -> pop End" ) ;
562
561
let print_stack = & mut self . print_stack ;
563
562
assert ! ( ( print_stack. len( ) != 0 u) ) ;
564
563
print_stack. pop ( ) . unwrap ( ) ;
565
564
Ok ( ( ) )
566
565
}
567
- Break ( b) => {
566
+ Token :: Break ( b) => {
568
567
let top = self . get_top ( ) ;
569
568
match top. pbreak {
570
- Fits => {
569
+ PrintStackBreak :: Fits => {
571
570
debug ! ( "print Break({}) in fitting block" , b. blank_space) ;
572
571
self . space -= b. blank_space ;
573
572
self . indent ( b. blank_space ) ;
574
573
Ok ( ( ) )
575
574
}
576
- Broken ( Consistent ) => {
575
+ PrintStackBreak :: Broken ( Breaks :: Consistent ) => {
577
576
debug ! ( "print Break({}+{}) in consistent block" ,
578
577
top. offset, b. offset) ;
579
578
let ret = self . print_newline ( top. offset + b. offset ) ;
580
579
self . space = self . margin - ( top. offset + b. offset ) ;
581
580
ret
582
581
}
583
- Broken ( Inconsistent ) => {
582
+ PrintStackBreak :: Broken ( Breaks :: Inconsistent ) => {
584
583
if l > self . space {
585
584
debug ! ( "print Break({}+{}) w/ newline in inconsistent" ,
586
585
top. offset, b. offset) ;
@@ -597,14 +596,14 @@ impl Printer {
597
596
}
598
597
}
599
598
}
600
- String ( s, len) => {
599
+ Token :: String ( s, len) => {
601
600
debug ! ( "print String({})" , s) ;
602
601
assert_eq ! ( l, len) ;
603
602
// assert!(l <= space);
604
603
self . space -= len;
605
604
self . print_str ( & s[ ] )
606
605
}
607
- Eof => {
606
+ Token :: Eof => {
608
607
// Eof should never get here.
609
608
panic ! ( ) ;
610
609
}
@@ -616,41 +615,45 @@ impl Printer {
616
615
//
617
616
// "raw box"
618
617
pub fn rbox ( p : & mut Printer , indent : uint , b : Breaks ) -> io:: IoResult < ( ) > {
619
- p. pretty_print ( Begin ( BeginToken {
618
+ p. pretty_print ( Token :: Begin ( BeginToken {
620
619
offset : indent as int ,
621
620
breaks : b
622
621
} ) )
623
622
}
624
623
625
624
pub fn ibox ( p : & mut Printer , indent : uint ) -> io:: IoResult < ( ) > {
626
- rbox ( p, indent, Inconsistent )
625
+ rbox ( p, indent, Breaks :: Inconsistent )
627
626
}
628
627
629
628
pub fn cbox ( p : & mut Printer , indent : uint ) -> io:: IoResult < ( ) > {
630
- rbox ( p, indent, Consistent )
629
+ rbox ( p, indent, Breaks :: Consistent )
631
630
}
632
631
633
632
pub fn break_offset ( p : & mut Printer , n : uint , off : int ) -> io:: IoResult < ( ) > {
634
- p. pretty_print ( Break ( BreakToken {
633
+ p. pretty_print ( Token :: Break ( BreakToken {
635
634
offset : off,
636
635
blank_space : n as int
637
636
} ) )
638
637
}
639
638
640
- pub fn end ( p : & mut Printer ) -> io:: IoResult < ( ) > { p. pretty_print ( End ) }
639
+ pub fn end ( p : & mut Printer ) -> io:: IoResult < ( ) > {
640
+ p. pretty_print ( Token :: End )
641
+ }
641
642
642
- pub fn eof ( p : & mut Printer ) -> io:: IoResult < ( ) > { p. pretty_print ( Eof ) }
643
+ pub fn eof ( p : & mut Printer ) -> io:: IoResult < ( ) > {
644
+ p. pretty_print ( Token :: Eof )
645
+ }
643
646
644
647
pub fn word ( p : & mut Printer , wrd : & str ) -> io:: IoResult < ( ) > {
645
- p. pretty_print ( String ( /* bad */ wrd. to_string ( ) , wrd. len ( ) as int ) )
648
+ p. pretty_print ( Token :: String ( /* bad */ wrd. to_string ( ) , wrd. len ( ) as int ) )
646
649
}
647
650
648
651
pub fn huge_word ( p : & mut Printer , wrd : & str ) -> io:: IoResult < ( ) > {
649
- p. pretty_print ( String ( /* bad */ wrd. to_string ( ) , SIZE_INFINITY ) )
652
+ p. pretty_print ( Token :: String ( /* bad */ wrd. to_string ( ) , SIZE_INFINITY ) )
650
653
}
651
654
652
655
pub fn zero_word ( p : & mut Printer , wrd : & str ) -> io:: IoResult < ( ) > {
653
- p. pretty_print ( String ( /* bad */ wrd. to_string ( ) , 0 ) )
656
+ p. pretty_print ( Token :: String ( /* bad */ wrd. to_string ( ) , 0 ) )
654
657
}
655
658
656
659
pub fn spaces ( p : & mut Printer , n : uint ) -> io:: IoResult < ( ) > {
@@ -670,7 +673,9 @@ pub fn hardbreak(p: &mut Printer) -> io::IoResult<()> {
670
673
}
671
674
672
675
pub fn hardbreak_tok_offset ( off : int ) -> Token {
673
- Break ( BreakToken { offset : off, blank_space : SIZE_INFINITY } )
676
+ Token :: Break ( BreakToken { offset : off, blank_space : SIZE_INFINITY } )
674
677
}
675
678
676
- pub fn hardbreak_tok ( ) -> Token { return hardbreak_tok_offset ( 0 ) ; }
679
+ pub fn hardbreak_tok ( ) -> Token {
680
+ hardbreak_tok_offset ( 0 )
681
+ }
0 commit comments