227: def to_zaml(z)
228: num = '[-+]?(0x)?\d+\.?\d*'
229: case
230: when self == ''
231: z.emit('""')
232:
233:
234:
235: when (
236: (self =~ /\A(true|false|yes|no|on|null|off|#{num}(:#{num})*|!|=|~)$/i) or
237: (self =~ /\A\n* /) or
238: (self =~ /[\s:]$/) or
239: (self =~ /^[>|][-+\d]*\s/i) or
240: (self[-1..-1] =~ /\s/) or
241: (self =~ /[\x00-\x08\x0B\x0C\x0E-\x1F\x80-\xFF]/) or
242: (self =~ /[,\[\]\{\}\r\t]|:\s|\s#/) or
243: (self =~ /\A([-:?!#&*'"]|<<|%.+:.)/)
244: )
245: z.emit("\"#{escaped_for_zaml}\"")
246: when self =~ /\n/
247: if self[-1..-1] == "\n" then z.emit('|+') else z.emit('|-') end
248: z.nested { split("\n",-1).each { |line| z.nl; z.emit(line.chomp("\n")) } }
249: else
250: z.emit(self)
251: end
252: end