--- FeepingCreaturism/Jargon.cpp 2004/09/06 08:58:43 223 +++ FeepingCreaturism/Jargon.cpp 2004/09/15 00:42:21 254 @@ -5,18 +5,41 @@ // $Id$ #include "Jargon.hpp" +#include "Matcher.hpp" -Jargon::Jargon(const ext::String& path, bool include) +Jargon::Jargon(const ext::String& path, const ext::String& jargon, bool include, + const ext::String& relative) : include(include), + args(1, FeepingCreaturism::program) { - std::vector args(1, FeepingCreaturism::program); - + args.push_back("-m"); + args.push_back("-p"); + args.push_back("jargon"); + args.push_back("\"" + jargon + "\""); args.push_back("-p"); args.push_back("include"); args.push_back(lexical_cast(include) + "()"); - args.push_back(path); + + if (!relative.IsEmpty()) + { + args.push_back("-p"); + args.push_back("relative"); + args.push_back("\"" + relative + "\""); + } + + args.push_back(path + "/" + jargon); args.push_back("jargon.xsl"); +} - redi::ipstream pin("/usr/local/bin/Xalan", args); +ios::PrintWriter& operator<<(ios::PrintWriter& pout, const Jargon& jargon) +{ + redi::ipstream pin("/usr/local/bin/Xalan", jargon.args); + + if (jargon.include) + { + std::string ignore; + + std::getline(pin, ignore); + } do { @@ -24,7 +47,16 @@ Jargon::Jargon(const ext::String& path, std::getline(pin, line); - buffer << line << '\n'; + while (jargon.include && line.find(" xmlns=") != std::string::npos) + { + std::string::size_type position(line.find(" xmlns=")); + + line.replace(position, 37, ""); + } + + pout << line << "\n"; } while (pin.good()); + + return pout; }