ox 2.14.19 → 2.14.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +6 -0
 - data/ext/ox/parse.c +9 -0
 - data/lib/ox/version.rb +1 -1
 - metadata +3 -7
 - data/ext/ox/foo.h +0 -204
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: ad704805993f7e83d3648fdeb4fa906446809025483260884993bf8212253b9f
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 4f48e20996acf5838eeddc914bf2e065330ea5a799020fb587e17afb4ef760c7
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 3c36d1daa249b9f223ab7d084c2a94fd2887d994db22bca332d628a44e4731b6c5f22498bc35c83889f9952c3986c4682bf59e1433343dcabe9486e74827ff64
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: aeba445ec31d7b2e0cf210256a5caf2ba4ea424c8a55229125674354583522a7dfce64c4a40ec949c529d0327735ac8cc62c6543b97ee42bca184222cc86622f
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -2,6 +2,12 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            All changes to the Ox gem are documented here. Releases follow semantic versioning.
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
      
 5 
     | 
    
         
            +
            ## [2.14.20] - 2025-01-12
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            ### Fixed
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            - The instruction encoding attribute is now used to set the encoding in the `:limited` mode.
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       5 
11 
     | 
    
         
             
            ## [2.14.19] - 2024-12-25
         
     | 
| 
       6 
12 
     | 
    
         | 
| 
       7 
13 
     | 
    
         
             
            ### Fixed
         
     | 
    
        data/ext/ox/parse.c
    CHANGED
    
    | 
         @@ -342,6 +342,15 @@ DONE: 
     | 
|
| 
       342 
342 
     | 
    
         
             
                    } else {
         
     | 
| 
       343 
343 
     | 
    
         
             
                        pi->pcb->instruct(pi, target, attrs.head, content_ptr);
         
     | 
| 
       344 
344 
     | 
    
         
             
                    }
         
     | 
| 
      
 345 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 346 
     | 
    
         
            +
                    for (Attr a = attrs.head; a < attrs.tail; a++) {
         
     | 
| 
      
 347 
     | 
    
         
            +
                        if (0 == strcasecmp(a->name, "encoding")) {
         
     | 
| 
      
 348 
     | 
    
         
            +
                            strncpy(pi->options->encoding, a->value, sizeof(pi->options->encoding) - 1);
         
     | 
| 
      
 349 
     | 
    
         
            +
                            pi->options->encoding[sizeof(pi->options->encoding) - 1] = '\0';
         
     | 
| 
      
 350 
     | 
    
         
            +
                            pi->options->rb_enc                                      = rb_enc_find(a->value);
         
     | 
| 
      
 351 
     | 
    
         
            +
                            break;
         
     | 
| 
      
 352 
     | 
    
         
            +
                        }
         
     | 
| 
      
 353 
     | 
    
         
            +
                    }
         
     | 
| 
       345 
354 
     | 
    
         
             
                }
         
     | 
| 
       346 
355 
     | 
    
         
             
                attr_stack_cleanup(&attrs);
         
     | 
| 
       347 
356 
     | 
    
         
             
                if (content_ptr != content) {
         
     | 
    
        data/lib/ox/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: ox
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2.14. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.14.20
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Peter Ohler
         
     | 
| 
       8 
     | 
    
         
            -
            autorequire:
         
     | 
| 
       9 
8 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
9 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 10 
     | 
    
         
            +
            date: 2025-01-12 00:00:00.000000000 Z
         
     | 
| 
       12 
11 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
12 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
13 
     | 
    
         
             
              name: bigdecimal
         
     | 
| 
         @@ -52,7 +51,6 @@ files: 
     | 
|
| 
       52 
51 
     | 
    
         
             
            - ext/ox/err.c
         
     | 
| 
       53 
52 
     | 
    
         
             
            - ext/ox/err.h
         
     | 
| 
       54 
53 
     | 
    
         
             
            - ext/ox/extconf.rb
         
     | 
| 
       55 
     | 
    
         
            -
            - ext/ox/foo.h
         
     | 
| 
       56 
54 
     | 
    
         
             
            - ext/ox/gen_load.c
         
     | 
| 
       57 
55 
     | 
    
         
             
            - ext/ox/hash_load.c
         
     | 
| 
       58 
56 
     | 
    
         
             
            - ext/ox/helper.h
         
     | 
| 
         @@ -100,7 +98,6 @@ metadata: 
     | 
|
| 
       100 
98 
     | 
    
         
             
              homepage_uri: http://www.ohler.com/ox/
         
     | 
| 
       101 
99 
     | 
    
         
             
              source_code_uri: https://github.com/ohler55/ox
         
     | 
| 
       102 
100 
     | 
    
         
             
              rubygems_mfa_required: 'true'
         
     | 
| 
       103 
     | 
    
         
            -
            post_install_message:
         
     | 
| 
       104 
101 
     | 
    
         
             
            rdoc_options:
         
     | 
| 
       105 
102 
     | 
    
         
             
            - "--main"
         
     | 
| 
       106 
103 
     | 
    
         
             
            - README.md
         
     | 
| 
         @@ -125,8 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       125 
122 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       126 
123 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       127 
124 
     | 
    
         
             
            requirements: []
         
     | 
| 
       128 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
       129 
     | 
    
         
            -
            signing_key:
         
     | 
| 
      
 125 
     | 
    
         
            +
            rubygems_version: 3.6.2
         
     | 
| 
       130 
126 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       131 
127 
     | 
    
         
             
            summary: A fast XML parser and object serializer.
         
     | 
| 
       132 
128 
     | 
    
         
             
            test_files: []
         
     | 
    
        data/ext/ox/foo.h
    DELETED
    
    | 
         @@ -1,204 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            /* sax_buf.h
         
     | 
| 
       2 
     | 
    
         
            -
             * Copyright (c) 2011, Peter Ohler
         
     | 
| 
       3 
     | 
    
         
            -
             * All rights reserved.
         
     | 
| 
       4 
     | 
    
         
            -
             */
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            #ifndef OX_SAX_BUF_H
         
     | 
| 
       7 
     | 
    
         
            -
            #define OX_SAX_BUF_H
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            #include <stdio.h>
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
            typedef struct _buf {
         
     | 
| 
       12 
     | 
    
         
            -
                char  base[0x00001000];
         
     | 
| 
       13 
     | 
    
         
            -
                char *head;
         
     | 
| 
       14 
     | 
    
         
            -
                char *end;
         
     | 
| 
       15 
     | 
    
         
            -
                char *tail;
         
     | 
| 
       16 
     | 
    
         
            -
                char *read_end; /* one past last character read */
         
     | 
| 
       17 
     | 
    
         
            -
                char *pro;      /* protection start, buffer can not slide past this point */
         
     | 
| 
       18 
     | 
    
         
            -
                char *str;      /* start of current string being read */
         
     | 
| 
       19 
     | 
    
         
            -
                off_t pos;
         
     | 
| 
       20 
     | 
    
         
            -
                off_t line;
         
     | 
| 
       21 
     | 
    
         
            -
                off_t col;
         
     | 
| 
       22 
     | 
    
         
            -
                off_t pro_pos;
         
     | 
| 
       23 
     | 
    
         
            -
                off_t pro_line;
         
     | 
| 
       24 
     | 
    
         
            -
                off_t pro_col;
         
     | 
| 
       25 
     | 
    
         
            -
                int (*read_func)(struct _buf *buf);
         
     | 
| 
       26 
     | 
    
         
            -
                union {
         
     | 
| 
       27 
     | 
    
         
            -
                    int         fd;
         
     | 
| 
       28 
     | 
    
         
            -
                    VALUE       io;
         
     | 
| 
       29 
     | 
    
         
            -
                    const char *str;
         
     | 
| 
       30 
     | 
    
         
            -
                } in;
         
     | 
| 
       31 
     | 
    
         
            -
                struct _saxDrive *dr;
         
     | 
| 
       32 
     | 
    
         
            -
            } *Buf;
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
            typedef struct _checkPt {
         
     | 
| 
       35 
     | 
    
         
            -
                off_t pro_dif;
         
     | 
| 
       36 
     | 
    
         
            -
                off_t pos;
         
     | 
| 
       37 
     | 
    
         
            -
                off_t line;
         
     | 
| 
       38 
     | 
    
         
            -
                off_t col;
         
     | 
| 
       39 
     | 
    
         
            -
                char  c;
         
     | 
| 
       40 
     | 
    
         
            -
            } *CheckPt;
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
            #define CHECK_PT_INIT {-1, 0, 0, 0, '\0'}
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
            extern void ox_sax_buf_init(Buf buf, VALUE io);
         
     | 
| 
       45 
     | 
    
         
            -
            extern int  ox_sax_buf_read(Buf buf);
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
            static inline char buf_get(Buf buf) {
         
     | 
| 
       48 
     | 
    
         
            -
                // printf("*** drive get from '%s'  from start: %ld  buf: %p  from read_end: %ld\n", buf->tail, buf->tail -
         
     | 
| 
       49 
     | 
    
         
            -
                // buf->head, buf->head, buf->read_end - buf->tail);
         
     | 
| 
       50 
     | 
    
         
            -
                if (buf->read_end <= buf->tail) {
         
     | 
| 
       51 
     | 
    
         
            -
                    if (0 != ox_sax_buf_read(buf)) {
         
     | 
| 
       52 
     | 
    
         
            -
                        return '\0';
         
     | 
| 
       53 
     | 
    
         
            -
                    }
         
     | 
| 
       54 
     | 
    
         
            -
                }
         
     | 
| 
       55 
     | 
    
         
            -
                if ('\n' == *buf->tail) {
         
     | 
| 
       56 
     | 
    
         
            -
                    buf->line++;
         
     | 
| 
       57 
     | 
    
         
            -
                    buf->col = 0;
         
     | 
| 
       58 
     | 
    
         
            -
                } else {
         
     | 
| 
       59 
     | 
    
         
            -
                    buf->col++;
         
     | 
| 
       60 
     | 
    
         
            -
                }
         
     | 
| 
       61 
     | 
    
         
            -
                buf->pos++;
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
                return *buf->tail++;
         
     | 
| 
       64 
     | 
    
         
            -
            }
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
            static inline void buf_backup(Buf buf) {
         
     | 
| 
       67 
     | 
    
         
            -
                buf->tail--;
         
     | 
| 
       68 
     | 
    
         
            -
                buf->col--;
         
     | 
| 
       69 
     | 
    
         
            -
                buf->pos--;
         
     | 
| 
       70 
     | 
    
         
            -
                if (0 >= buf->col) {
         
     | 
| 
       71 
     | 
    
         
            -
                    buf->line--;
         
     | 
| 
       72 
     | 
    
         
            -
                    // allow col to be negative since we never backup twice in a row
         
     | 
| 
       73 
     | 
    
         
            -
                }
         
     | 
| 
       74 
     | 
    
         
            -
            }
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
            static inline void buf_protect(Buf buf) {
         
     | 
| 
       77 
     | 
    
         
            -
                buf->pro      = buf->tail;
         
     | 
| 
       78 
     | 
    
         
            -
                buf->str      = buf->tail;  // can't have str before pro
         
     | 
| 
       79 
     | 
    
         
            -
                buf->pro_pos  = buf->pos;
         
     | 
| 
       80 
     | 
    
         
            -
                buf->pro_line = buf->line;
         
     | 
| 
       81 
     | 
    
         
            -
                buf->pro_col  = buf->col;
         
     | 
| 
       82 
     | 
    
         
            -
            }
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
            static inline void buf_reset(Buf buf) {
         
     | 
| 
       85 
     | 
    
         
            -
                buf->tail = buf->pro;
         
     | 
| 
       86 
     | 
    
         
            -
                buf->pos  = buf->pro_pos;
         
     | 
| 
       87 
     | 
    
         
            -
                buf->line = buf->pro_line;
         
     | 
| 
       88 
     | 
    
         
            -
                buf->col  = buf->pro_col;
         
     | 
| 
       89 
     | 
    
         
            -
            }
         
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
            /* Starts by reading a character so it is safe to use with an empty or
         
     | 
| 
       92 
     | 
    
         
            -
             * compacted buffer.
         
     | 
| 
       93 
     | 
    
         
            -
             */
         
     | 
| 
       94 
     | 
    
         
            -
            static inline char buf_next_non_white(Buf buf) {
         
     | 
| 
       95 
     | 
    
         
            -
                char c;
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
                while ('\0' != (c = buf_get(buf))) {
         
     | 
| 
       98 
     | 
    
         
            -
                    switch (c) {
         
     | 
| 
       99 
     | 
    
         
            -
                    case ' ':
         
     | 
| 
       100 
     | 
    
         
            -
                    case '\t':
         
     | 
| 
       101 
     | 
    
         
            -
                    case '\f':
         
     | 
| 
       102 
     | 
    
         
            -
                    case '\n':
         
     | 
| 
       103 
     | 
    
         
            -
                    case '\r': break;
         
     | 
| 
       104 
     | 
    
         
            -
                    default: return c;
         
     | 
| 
       105 
     | 
    
         
            -
                    }
         
     | 
| 
       106 
     | 
    
         
            -
                }
         
     | 
| 
       107 
     | 
    
         
            -
                return '\0';
         
     | 
| 
       108 
     | 
    
         
            -
            }
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
            /* Starts by reading a character so it is safe to use with an empty or
         
     | 
| 
       111 
     | 
    
         
            -
             * compacted buffer.
         
     | 
| 
       112 
     | 
    
         
            -
             */
         
     | 
| 
       113 
     | 
    
         
            -
            static inline char buf_next_white(Buf buf) {
         
     | 
| 
       114 
     | 
    
         
            -
                char c;
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
                while ('\0' != (c = buf_get(buf))) {
         
     | 
| 
       117 
     | 
    
         
            -
                    switch (c) {
         
     | 
| 
       118 
     | 
    
         
            -
                    case ' ':
         
     | 
| 
       119 
     | 
    
         
            -
                    case '\t':
         
     | 
| 
       120 
     | 
    
         
            -
                    case '\f':
         
     | 
| 
       121 
     | 
    
         
            -
                    case '\n':
         
     | 
| 
       122 
     | 
    
         
            -
                    case '\r':
         
     | 
| 
       123 
     | 
    
         
            -
                    case '\0': return c;
         
     | 
| 
       124 
     | 
    
         
            -
                    default: break;
         
     | 
| 
       125 
     | 
    
         
            -
                    }
         
     | 
| 
       126 
     | 
    
         
            -
                }
         
     | 
| 
       127 
     | 
    
         
            -
                return '\0';
         
     | 
| 
       128 
     | 
    
         
            -
            }
         
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
            static inline void buf_cleanup(Buf buf) {
         
     | 
| 
       131 
     | 
    
         
            -
                if (buf->base != buf->head && 0 != buf->head) {
         
     | 
| 
       132 
     | 
    
         
            -
                    xfree(buf->head);
         
     | 
| 
       133 
     | 
    
         
            -
                    buf->head = 0;
         
     | 
| 
       134 
     | 
    
         
            -
                }
         
     | 
| 
       135 
     | 
    
         
            -
            }
         
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
            static inline int is_white(char c) {
         
     | 
| 
       138 
     | 
    
         
            -
                switch (c) {
         
     | 
| 
       139 
     | 
    
         
            -
                case ' ':
         
     | 
| 
       140 
     | 
    
         
            -
                case '\t':
         
     | 
| 
       141 
     | 
    
         
            -
                case '\f':
         
     | 
| 
       142 
     | 
    
         
            -
                case '\n':
         
     | 
| 
       143 
     | 
    
         
            -
                case '\r': return 1;
         
     | 
| 
       144 
     | 
    
         
            -
                default: break;
         
     | 
| 
       145 
     | 
    
         
            -
                }
         
     | 
| 
       146 
     | 
    
         
            -
                return 0;
         
     | 
| 
       147 
     | 
    
         
            -
            }
         
     | 
| 
       148 
     | 
    
         
            -
             
     | 
| 
       149 
     | 
    
         
            -
            static inline void buf_checkpoint(Buf buf, CheckPt cp) {
         
     | 
| 
       150 
     | 
    
         
            -
                cp->pro_dif = (int)(buf->tail - buf->pro);
         
     | 
| 
       151 
     | 
    
         
            -
                cp->pos     = buf->pos;
         
     | 
| 
       152 
     | 
    
         
            -
                cp->line    = buf->line;
         
     | 
| 
       153 
     | 
    
         
            -
                cp->col     = buf->col;
         
     | 
| 
       154 
     | 
    
         
            -
                cp->c       = *(buf->tail - 1);
         
     | 
| 
       155 
     | 
    
         
            -
            }
         
     | 
| 
       156 
     | 
    
         
            -
             
     | 
| 
       157 
     | 
    
         
            -
            static inline int buf_checkset(CheckPt cp) {
         
     | 
| 
       158 
     | 
    
         
            -
                return (0 <= cp->pro_dif);
         
     | 
| 
       159 
     | 
    
         
            -
            }
         
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
            static inline char buf_checkback(Buf buf, CheckPt cp) {
         
     | 
| 
       162 
     | 
    
         
            -
                buf->tail = buf->pro + cp->pro_dif;
         
     | 
| 
       163 
     | 
    
         
            -
                buf->pos  = cp->pos;
         
     | 
| 
       164 
     | 
    
         
            -
                buf->line = cp->line;
         
     | 
| 
       165 
     | 
    
         
            -
                buf->col  = cp->col;
         
     | 
| 
       166 
     | 
    
         
            -
                return cp->c;
         
     | 
| 
       167 
     | 
    
         
            -
            }
         
     | 
| 
       168 
     | 
    
         
            -
             
     | 
| 
       169 
     | 
    
         
            -
            static inline void buf_collapse_return(char *str) {
         
     | 
| 
       170 
     | 
    
         
            -
                char *s    = str;
         
     | 
| 
       171 
     | 
    
         
            -
                char *back = str;
         
     | 
| 
       172 
     | 
    
         
            -
             
     | 
| 
       173 
     | 
    
         
            -
                for (; '\0' != *s; s++) {
         
     | 
| 
       174 
     | 
    
         
            -
                    if (back != str && '\n' == *s && '\r' == *(back - 1)) {
         
     | 
| 
       175 
     | 
    
         
            -
                        *(back - 1) = '\n';
         
     | 
| 
       176 
     | 
    
         
            -
                    } else {
         
     | 
| 
       177 
     | 
    
         
            -
                        *back++ = *s;
         
     | 
| 
       178 
     | 
    
         
            -
                    }
         
     | 
| 
       179 
     | 
    
         
            -
                }
         
     | 
| 
       180 
     | 
    
         
            -
                *back = '\0';
         
     | 
| 
       181 
     | 
    
         
            -
            }
         
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
       183 
     | 
    
         
            -
            static inline void buf_collapse_white(char *str) {
         
     | 
| 
       184 
     | 
    
         
            -
                char *s    = str;
         
     | 
| 
       185 
     | 
    
         
            -
                char *back = str;
         
     | 
| 
       186 
     | 
    
         
            -
             
     | 
| 
       187 
     | 
    
         
            -
                for (; '\0' != *s; s++) {
         
     | 
| 
       188 
     | 
    
         
            -
                    switch (*s) {
         
     | 
| 
       189 
     | 
    
         
            -
                    case ' ':
         
     | 
| 
       190 
     | 
    
         
            -
                    case '\t':
         
     | 
| 
       191 
     | 
    
         
            -
                    case '\f':
         
     | 
| 
       192 
     | 
    
         
            -
                    case '\n':
         
     | 
| 
       193 
     | 
    
         
            -
                    case '\r':
         
     | 
| 
       194 
     | 
    
         
            -
                        if (back == str || ' ' != *(back - 1)) {
         
     | 
| 
       195 
     | 
    
         
            -
                            *back++ = ' ';
         
     | 
| 
       196 
     | 
    
         
            -
                        }
         
     | 
| 
       197 
     | 
    
         
            -
                        break;
         
     | 
| 
       198 
     | 
    
         
            -
                    default: *back++ = *s; break;
         
     | 
| 
       199 
     | 
    
         
            -
                    }
         
     | 
| 
       200 
     | 
    
         
            -
                }
         
     | 
| 
       201 
     | 
    
         
            -
                *back = '\0';
         
     | 
| 
       202 
     | 
    
         
            -
            }
         
     | 
| 
       203 
     | 
    
         
            -
             
     | 
| 
       204 
     | 
    
         
            -
            #endif /* OX_SAX_BUF_H */
         
     |