Synopsis - Synopsis/PTree/Writer.hh

File: Synopsis/PTree/Writer.hh

     1//
     2// Copyright (C) 2004 Stefan Seefeld
     3// All rights reserved.
     4// Licensed to the public under the terms of the GNU LGPL (>= 2),
     5// see the file COPYING for details.
     6//
     7#ifndef Synopsis_PTree_Writer_hh_
     8#define Synopsis_PTree_Writer_hh_
     9
    10#include <Synopsis/PTree.hh>
    11#include <sstream>
    12
    13namespace Synopsis
    14{
    15namespace PTree
    16{
    17
    18class Writer : private Visitor
    19{
    20public:
    21  Writer(std::ostream &os);
    22
    23  unsigned long write(Node const *);
    24
    25private:
    26
    27  virtual void visit(Atom *);
    28  virtual void visit(List *);
    29  virtual void visit(Brace *);
    30
    31  void newline();
    32
    33  std::ostream &my_os;
    34  size_t        my_indent;
    35  unsigned long my_lines;
    36};
    37
    38inline std::string reify(Node const *p)
    39{
    40  if (!p) return "";
    41  else if (p->is_atom()) return std::string(p->position(), p->length());
    42
    43  std::ostringstream oss;
    44  Writer writer(oss);
    45  writer.write(p);
    46  return oss.str();
    47}
    48
    49}
    50}
    51
    52#endif

Generated on Thu Apr 16 16:28:03 2009 by
synopsis (version devel)