+ Ok(())
+ }
+ Token::End => {
+ debug!("print End -> pop End");
+ let print_stack = &mut self.print_stack;
+ assert!(!print_stack.is_empty());
+ print_stack.pop().unwrap();
+ Ok(())
+ }
+ Token::Break(b) => {
+ let top = self.get_top();
+ match top.pbreak {
+ PrintStackBreak::Fits => {
+ debug!("print Break({}) in fitting block", b.blank_space);
+ self.space -= b.blank_space;
+ self.indent(b.blank_space);
+ Ok(())
+ }
+ PrintStackBreak::Broken(Breaks::Consistent) => {
+ debug!("print Break({}+{}) in consistent block",
+ top.offset, b.offset);
+ let ret = self.print_newline(top.offset + b.offset);
+ self.space = self.margin - (top.offset + b.offset);
+ ret
+ }
+ PrintStackBreak::Broken(Breaks::Inconsistent) => {
+ if l > self.space {
+ debug!("print Break({}+{}) w/ newline in inconsistent",
+ top.offset, b.offset);
+ let ret = self.print_newline(top.offset + b.offset);
+ self.space = self.margin - (top.offset + b.offset);
+ ret
+ } else {
+ debug!("print Break({}) w/o newline in inconsistent",
+ b.blank_space);
+ self.indent(b.blank_space);
+ self.space -= b.blank_space;
+ Ok(())
+ }
+ }
+ }
+ }
+ Token::String(ref s, len) => {
+ debug!("print String({})", s);
+ assert_eq!(l, len);
+ // assert!(l <= space);
+ self.space -= len;
+ self.print_str(s)
+ }
+ Token::Eof => {
+ // Eof should never get here.
+ panic!();