anchor.diff:      Repr#yaml_repr.docs.
   
   %% -------------------------------------------------------------------
  +%% Presentation details.
  +%% -------------------------------------------------------------------
  +
  +get_pres_details(Token) ->
  +    Line   = ?TOKEN_LINE(Token),
  +    Column = ?TOKEN_COLUMN(Token),
  +    [{line, Line}, {column, Column}].
  +
  +%% -------------------------------------------------------------------
  +%% Node informations.
  +%% -------------------------------------------------------------------
  +
  +node_line(Node) ->
  +    case node_pres(Node) of
  +        undefined -> undefined;
  +        Pres      -> proplists:get_value(line, Pres)
  +    end.
  +
  +node_column(Node) ->
  +    case node_pres(Node) of
  +        undefined -> undefined;
  +        Pres      -> proplists:get_value(column, Pres)
  +    end.
  +
  +node_pres(Node) when
  +  is_record(Node, yaml_seq) orelse
  +  is_record(Node, yaml_map) orelse
  +  is_record(Node, yaml_str) orelse
  +  is_record(Node, yaml_null) orelse
  +  is_record(Node, yaml_bool) orelse
  +  is_record(Node, yaml_int) orelse
  +  is_record(Node, yaml_timestamp) orelse
  +  is_record(Node, yaml_erlang_atom) orelse
  +  is_record(Node, yaml_erlang_fun) ->
  +    ?NODE_PRES(Node);
  +node_pres(Node) when is_tuple(Node) ->
  +    %% For user-defined nodes, we call the module responsible for it.
  +    Mod = ?NODE_MOD(Node),
  +    try
  +        Mod:node_pres(Node)
  +    catch
  +        error:undef ->
  +            undefined
  +    end.
  +
  +%% -------------------------------------------------------------------
   %% Representation.
   %% -------------------------------------------------------------------
   
   represent(Repr, #yaml_doc_start{}) ->
       %% Prepare a document node.
  -    Doc = #yaml_document{},
  +    Doc = #yaml_doc{},
       Repr1 = Repr#yaml_repr{
         current_doc = [Doc]
       },
  
positive.code:                     throw(Error)
              end
      end,
      Ret = Mod:represent_token(Repr, undefined, Token),
      handle_represent_return(Repr, Doc, Ret);
  
  represent(#yaml_repr{current_doc = [{Mod, _, _} = Node | Doc]} = Repr, Token) ->
      %% This token continues a node. We call the current node's module to
      %% handle it.
      Ret = Mod:represent_token(Repr, Node, Token),
      handle_represent_return(Repr, Doc, Ret).
  
  find_matching_mod(Repr, [Mod | Rest], Token) ->
      case Mod:matches(Repr, Token) of
          true  -> Mod;
          false -> find_matching_mod(Repr, Rest, Token)
      end;
  find_matching_mod(_, [], Token) ->
      Error = #yaml_parser_error{
        name   = unrecognized_tag,
        token  = Token,
        text   = "No module found to handle token~n",
        line   = ?TOKEN_LINE(Token),
        column = ?TOKEN_COLUMN(Token)
      },
      throw(Error).
  
  represent_parent(#yaml_repr{docs = Docs, docs_count = Count} = Repr,
    [#yaml_document{} = Doc], Root) ->
      %% This node is the root of the document.
      Doc1 = Doc#yaml_document{
        root = Root
      },
      Repr1 = Repr#yaml_repr{
  
negative.code:     file/2,
      next_chunk/3,
      next_chunk/2,
      last_chunk/2,
      get_pres_details/1,
      node_line/1,
      node_column/1
    ]).
  
  -define(CORE_SCHEMA_MODS, [
      yaml_node_null,
      yaml_node_bool,
      yaml_node_int,
      yaml_node_str,
      yaml_node_seq,
      yaml_node_map
  