// Feeping Creaturism // // Douglas Thrift // // $Id$ #include "Jargon.hpp" #include "Matcher.hpp" Jargon::Jargon(const ext::String& path, const ext::String& jargon, bool include, const ext::String& relative) : include(include), 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) + "()"); 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"); } 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 { std::string line; std::getline(pin, line); 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; }