Changeset 315


Ignore:
Timestamp:
12/27/08 14:14:00 (5 years ago)
Author:
xi
Message:

Fixed emitting folded scalars with trailing breaks; Forced emitting of a document end indicator when there is a possibility of ambiguous parsing.

Location:
libyaml/branches/stable
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libyaml/branches/stable/include/yaml.h

    r243 r315  
    16811681    /** If the last character was an indentation character (' ', '-', '?', ':')? */ 
    16821682    int indention; 
     1683    /** If an explicit document end is required? */ 
     1684    int open_ended; 
    16831685 
    16841686    /** Anchor analysis. */ 
  • libyaml/branches/stable/src/emitter.c

    r309 r315  
    586586        if (!first || emitter->canonical) { 
    587587            implicit = 0; 
     588        } 
     589 
     590        if ((event->data.document_start.version_directive || 
     591                    (event->data.document_start.tag_directives.start 
     592                     != event->data.document_start.tag_directives.end)) && 
     593                emitter->open_ended) 
     594        { 
     595            if (!yaml_emitter_write_indicator(emitter, "...", 1, 0, 0)) 
     596                return 0; 
     597            if (!yaml_emitter_write_indent(emitter)) 
     598                return 0; 
    588599        } 
    589600 
     
    639650    else if (event->type == YAML_STREAM_END_EVENT) 
    640651    { 
     652        if (emitter->open_ended) 
     653        { 
     654            if (!yaml_emitter_write_indicator(emitter, "...", 1, 0, 0)) 
     655                return 0; 
     656            if (!yaml_emitter_write_indent(emitter)) 
     657                return 0; 
     658        } 
     659 
    641660        if (!yaml_emitter_flush(emitter)) 
    642661            return 0; 
     
    17661785    emitter->whitespace = is_whitespace; 
    17671786    emitter->indention = (emitter->indention && is_indention); 
     1787    emitter->open_ended = 0; 
    17681788 
    17691789    return 1; 
     
    19031923    emitter->whitespace = 0; 
    19041924    emitter->indention = 0; 
     1925    if (emitter->root_context) 
     1926    { 
     1927        emitter->open_ended = 1; 
     1928    } 
    19051929 
    19061930    return 1; 
     
    21372161    } 
    21382162 
     2163    emitter->open_ended = 0; 
     2164 
    21392165    string.pointer = string.end; 
    21402166    if (string.start == string.pointer) 
     
    21542180        { 
    21552181            chomp_hint = "+"; 
     2182            emitter->open_ended = 1; 
    21562183        } 
    21572184        else 
     
    21632190            { 
    21642191                chomp_hint = "+"; 
     2192                emitter->open_ended = 1; 
    21652193            } 
    21662194        } 
     
    22382266                    k += WIDTH_AT(string, k); 
    22392267                } 
    2240                 if (!IS_BLANK_AT(string, k)) { 
     2268                if (!IS_BLANKZ_AT(string, k)) { 
    22412269                    if (!PUT_BREAK(emitter)) return 0; 
    22422270                } 
Note: See TracChangeset for help on using the changeset viewer.