Exemplo n.º 1
0
 def write_plain(self, text, split=True):
     if self.root_context:
         self.open_ended = True
     if not text:
         return
     if not self.whitespace:
         data = u' '
         self.column += printable_len(data)
         if self.encoding:
             data = data.encode(self.encoding)
         self.stream.write(data)
     self.whitespace = False
     self.indention = False
     spaces = False
     breaks = False
     start = end = 0
     while end <= len(text):
         ch = None
         if end < len(text):
             ch = text[end]
         if spaces:
             if ch != u' ':
                 if start+1 == end and self.column > self.best_width and split:
                     self.write_indent()
                     self.whitespace = False
                     self.indention = False
                 else:
                     data = text[start:end]
                     self.column += printable_len(data)
                     if self.encoding:
                         data = data.encode(self.encoding)
                     self.stream.write(data)
                 start = end
         elif breaks:
             if ch not in u'\n\x85\u2028\u2029':
                 if text[start] == u'\n':
                     self.write_line_break()
                 for br in text[start:end]:
                     if br == u'\n':
                         self.write_line_break()
                     else:
                         self.write_line_break(br)
                 self.write_indent()
                 self.whitespace = False
                 self.indention = False
                 start = end
         else:
             if ch is None or ch in u' \n\x85\u2028\u2029':
                 data = text[start:end]
                 self.column += printable_len(data)
                 if self.encoding:
                     data = data.encode(self.encoding)
                 self.stream.write(data)
                 start = end
         if ch is not None:
             spaces = (ch == u' ')
             breaks = (ch in u'\n\x85\u2028\u2029')
         end += 1
Exemplo n.º 2
0
 def write_folded(self, text):
     hints = self.determine_block_hints(text)
     self.write_indicator(u'>'+hints, True)
     if hints[-1:] == u'+':
         self.open_ended = True
     self.write_line_break()
     leading_space = True
     spaces = False
     breaks = True
     start = end = 0
     while end <= len(text):
         ch = None
         if end < len(text):
             ch = text[end]
         if breaks:
             if ch is None or ch not in u'\n\x85\u2028\u2029':
                 if not leading_space and ch is not None and ch != u' '  \
                         and text[start] == u'\n':
                     self.write_line_break()
                 leading_space = (ch == u' ')
                 for br in text[start:end]:
                     if br == u'\n':
                         self.write_line_break()
                     else:
                         self.write_line_break(br)
                 if ch is not None:
                     self.write_indent()
                 start = end
         elif spaces:
             if ch != u' ':
                 if start+1 == end and self.column > self.best_width:
                     self.write_indent()
                 else:
                     data = text[start:end]
                     # Ygrep modification
                     self.column += printable_len(data)
                     # End Ygrep modification
                     if self.encoding:
                         data = data.encode(self.encoding)
                     self.stream.write(data)
                 start = end
         else:
             if ch is None or ch in u' \n\x85\u2028\u2029':
                 data = text[start:end]
                 
                 self.column += printable_len(data)
                 
                 if self.encoding:
                     data = data.encode(self.encoding)
                 self.stream.write(data)
                 if ch is None:
                     self.write_line_break()
                 start = end
         if ch is not None:
             breaks = (ch in u'\n\x85\u2028\u2029')
             spaces = (ch == u' ')
         end += 1
Exemplo n.º 3
0
 def write_double_quoted(self, text, split=True):
     self.write_indicator(u'"', True)
     start = end = 0
     while end <= len(text):
         ch = None
         if end < len(text):
             ch = text[end]
         # Ygrep: Condition added in order to not escape ANSI color sequences
         if (ch is None or ch in u'"\\\x85\u2028\u2029\uFEFF' \
                 or not (u'\x20' <= ch <= u'\x7E'
                     or (self.allow_unicode
                         and (u'\xA0' <= ch <= u'\uD7FF'
                             or u'\uE000' <= ch <= u'\uFFFD')))) \
         and ch != u'\x1B': # Ygrep modification.
             if start < end:
                 data = text[start:end]
                 self.column += printable_len(data)
                 if self.encoding:
                     data = data.encode(self.encoding)
                 self.stream.write(data)
                 start = end
             if ch is not None:
                 if ch in self.ESCAPE_REPLACEMENTS:
                     data = u'\\'+self.ESCAPE_REPLACEMENTS[ch]
                 elif ch <= u'\xFF':
                     data = u'\\x%02X' % ord(ch)
                 elif ch <= u'\uFFFF':
                     data = u'\\u%04X' % ord(ch)
                 else:
                     data = u'\\U%08X' % ord(ch)
                 self.column += printable_len(data)
                 if self.encoding:
                     data = data.encode(self.encoding)
                 self.stream.write(data)
                 start = end+1
         if 0 < end < len(text)-1 and (ch == u' ' or start >= end)   \
                 and self.column+(end-start) > self.best_width and split:
             data = text[start:end]+u'\\'
             if start < end:
                 start = end
             self.column += printable_len(data)
             if self.encoding:
                 data = data.encode(self.encoding)
             self.stream.write(data)
             self.write_indent()
             self.whitespace = False
             self.indention = False
             if text[start] == u' ':
                 data = u'\\'
                 self.column += printable_len(data)
                 if self.encoding:
                     data = data.encode(self.encoding)
                 self.stream.write(data)
         end += 1
     self.write_indicator(u'"', False)        
Exemplo n.º 4
0
 def write_single_quoted(self, text, split=True):
     self.write_indicator(u'\'', True)
     spaces = False
     breaks = False
     start = end = 0
     while end <= len(text):
         ch = None
         if end < len(text):
             ch = text[end]
         if spaces:
             if ch is None or ch != u' ':
                 if start+1 == end and self.column > self.best_width and split   \
                         and start != 0 and end != len(text):
                     self.write_indent()
                 else:
                     data = text[start:end]
                     self.column += printable_len(data)
                     if self.encoding:
                         data = data.encode(self.encoding)
                     self.stream.write(data)
                 start = end
         elif breaks:
             if ch is None or ch not in u'\n\x85\u2028\u2029':
                 if text[start] == u'\n':
                     self.write_line_break()
                 for br in text[start:end]:
                     if br == u'\n':
                         self.write_line_break()
                     else:
                         self.write_line_break(br)
                 self.write_indent()
                 start = end
         else:
             if ch is None or ch in u' \n\x85\u2028\u2029' or ch == u'\'':
                 if start < end:
                     data = text[start:end]
                     self.column += printable_len(data)
                     if self.encoding:
                         data = data.encode(self.encoding)
                     self.stream.write(data)
                     start = end
         if ch == u'\'':
             data = u'\'\''
             self.column += 2
             if self.encoding:
                 data = data.encode(self.encoding)
             self.stream.write(data)
             start = end + 1
         if ch is not None:
             spaces = (ch == u' ')
             breaks = (ch in u'\n\x85\u2028\u2029')
         end += 1
     self.write_indicator(u'\'', False)