~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/rio.py

  • Committer: Martin Pool
  • Date: 2006-02-22 07:05:44 UTC
  • mto: This revision was merged to the branch mainline in revision 1569.
  • Revision ID: mbp@sourcefrog.net-20060222070544-f7808ac1678c0ec8
rio files are always externalized in utf-8.  test this.

Show diffs side-by-side

added added

removed removed

Lines of Context:
88
88
        """Append a name and value to the stanza."""
89
89
        assert valid_tag(tag), \
90
90
            ("invalid tag %r" % tag)
91
 
        if isinstance(value, (str, unicode)):
 
91
        if isinstance(value, str):
 
92
            value = unicode(value)
 
93
        elif isinstance(value, unicode):
92
94
            pass
93
95
        ## elif isinstance(value, (int, long)):
94
96
        ##    value = str(value)           # XXX: python2.4 without L-suffix
124
126
        return iter(self.items)
125
127
 
126
128
    def to_lines(self):
127
 
        """Generate sequence of lines for external version of this file."""
 
129
        """Generate sequence of lines for external version of this file.
 
130
        
 
131
        The lines are always utf-8 encoded strings.
 
132
        """
128
133
        if not self.items:
129
134
            # max() complains if sequence is empty
130
135
            return []
131
136
        result = []
132
137
        for tag, value in self.items:
133
 
            assert isinstance(value, (str, unicode))
 
138
            assert isinstance(tag, str)
 
139
            assert isinstance(value, unicode)
134
140
            if value == '':
135
141
                result.append(tag + ': \n')
136
142
            elif '\n' in value:
137
143
                # don't want splitlines behaviour on empty lines
138
144
                val_lines = value.split('\n')
139
 
                result.append(tag + ': ' + val_lines[0] + '\n')
 
145
                result.append(tag + ': ' + val_lines[0].encode('utf-8') + '\n')
140
146
                for line in val_lines[1:]:
141
 
                    result.append('\t' + line + '\n')
 
147
                    result.append('\t' + line.encode('utf-8') + '\n')
142
148
            else:
143
 
                result.append(tag + ': ' + value + '\n')
 
149
                result.append(tag + ': ' + value.encode('utf-8') + '\n')
144
150
        return result
145
151
 
146
152
    def to_string(self):
196
202
 
197
203
    Only the stanza lines and the trailing blank (if any) are consumed
198
204
    from the line_iter.
 
205
 
 
206
    The raw lines must be in utf-8 encoding.
199
207
    """
200
208
    items = []
201
209
    stanza = Stanza()
206
214
            break       # end of file
207
215
        if line == '\n':
208
216
            break       # end of stanza
 
217
        line = line.decode('utf-8')
209
218
        assert line[-1] == '\n'
210
219
        real_l = line
211
220
        if line[0] == '\t': # continues previous value