// Copyright 1998,1999 Zanshin Inc.
// The contents of this file are subject to the Zanshin Public License Version
// 1.0 (the "License"); you may not use this file except in compliance with the
// License. You should have received a copy of the License with Latte; see
// the file COPYING. You may also obtain a copy of the License at
// .
//
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
// for the specific language governing rights and limitations under the
// License.
//
// The Original Code is Latte.
//
// The Initial Developer of the Original Code is Zanshin, Inc.
#include
void
Latte_Visitor::visit_nested(Latte_Nested &nested)
{
nested.nested_obj()->visit(*this);
}
void
Latte_Visitor::visit_group(Latte_Group &group)
{
if (group.empty())
return;
bool set_use_my_wstate = 0;
if (!use_my_wstate) {
use_my_wstate = 1;
my_wstate = group.wstate();
set_use_my_wstate = 1;
}
for (Latte_Group::const_iterator i = group.begin();
i != group.end();
++i) {
const Refcounter &obj = *i;
obj->visit(*this);
}
if (set_use_my_wstate)
use_my_wstate = 0;
}
const Latte_Wstate &
Latte_Visitor::suggest_wstate(const Latte_Wstate &fallback)
{
if (use_my_wstate) {
use_my_wstate = 0;
return my_wstate;
}
return fallback;
}
void
Latte_Visitor::visit_wsnode(Latte_WsNode &wsnode)
{
bool set_use_my_wstate = 0;
if (!use_my_wstate) {
use_my_wstate = 1;
my_wstate = wsnode.wstate();
set_use_my_wstate = 1;
}
wsnode.nested_obj()->visit(*this);
if (set_use_my_wstate)
use_my_wstate = 0;
}
void
Latte_Visitor::visit_list(Latte_List &list)
{
for (Latte_List::const_iterator i = list.begin(); i != list.end(); ++i) {
const Refcounter &obj = *i;
obj->visit(*this);
}
}
void
Latte_Visitor::visit_quote(Latte_Quote "e)
{
if (quote.type() == Latte_Quote::type_quote)
quote.obj()->visit(*this);
}
void
Latte_Stringify::visit_str(Latte_Str &str)
{
if (m_space_separated && m_string.size()) {
const Latte_Wstate &ws = suggest_wstate(str.wstate());
if (ws.spaces() || ws.newlines())
m_string += ' ';
}
m_string += str.str().str();
}
void
Latte_Listify::visit_assignment(Latte_Assignment &obj)
{
m_list->push_back(Refcounter(&obj));
}
void
Latte_Listify::visit_boolean(Latte_Boolean &obj)
{
m_list->push_back(Refcounter(&obj));
}
void
Latte_Listify::visit_closure(Latte_Closure &obj)
{
m_list->push_back(Refcounter(&obj));
}
void
Latte_Listify::visit_group(Latte_Group &obj)
{
m_list->push_back(Refcounter(&obj));
}
void
Latte_Listify::visit_list(Latte_List &obj)
{
m_list->push_back(Refcounter(&obj));
}
void
Latte_Listify::visit_nested(Latte_Nested &obj)
{
m_list->push_back(Refcounter(&obj));
}
void
Latte_Listify::visit_operator(Latte_Operator &obj)
{
m_list->push_back(Refcounter(&obj));
}
void
Latte_Listify::visit_param(Latte_Param &obj)
{
m_list->push_back(Refcounter(&obj));
}
void
Latte_Listify::visit_varref(Latte_VarRef &obj)
{
m_list->push_back(Refcounter(&obj));
}
void
Latte_Listify::visit_wsnode(Latte_WsNode &obj)
{
m_list->push_back(Refcounter(&obj));
}
void
Latte_Listify::visit_str(Latte_Str &obj)
{
m_list->push_back(Refcounter(&obj));
}