ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/FeepingCreaturism/Jargon.cpp
Revision: 792
Committed: 2006-06-01T23:55:43-07:00 (19 years ago) by douglas
File size: 1345 byte(s)
Log Message:
Woo!

File Contents

# User Rev Content
1 Douglas Thrift 196 // Feeping Creaturism
2     //
3     // Douglas Thrift
4     //
5     // $Id$
6    
7 douglas 792 #include <cxx/standard.hh>
8    
9     #include <api/pcre/regex.hpp>
10    
11 Douglas Thrift 196 #include "Jargon.hpp"
12    
13 douglas 792 Jargon::Jargon(const cse::String &path, const cse::String &jargon, bool include, const cse::String &relative) : include(include)
14 Douglas Thrift 196 {
15 douglas 792 args.InsertLast(_B("--stringparam"));
16     args.InsertLast(_B("jargon"));
17 Douglas Thrift 267 args.InsertLast(jargon);
18 douglas 792 args.InsertLast(_B("--param"));
19     args.InsertLast(("include"));
20     args.InsertLast(_S<ios::String>() << include << _B("()"));
21 Douglas Thrift 225
22     if (!relative.IsEmpty())
23     {
24 douglas 792 args.InsertLast(_B("--stringparam"));
25     args.InsertLast(_B("relative"));
26 Douglas Thrift 267 args.InsertLast(relative);
27 Douglas Thrift 225 }
28 Douglas Thrift 267
29 douglas 792 args.InsertLast(_B("jargon.xsl"));
30     args.InsertLast(_S<ios::String>() << path << _B("/") << jargon);
31 Douglas Thrift 227 }
32 Douglas Thrift 196
33 douglas 792 ios::PrintWriter &operator<<(ios::PrintWriter &output, const Jargon &jargon)
34 Douglas Thrift 227 {
35 douglas 792 _S<api::Process> xslt(_B("/usr/local/bin/xsltproc"), jargon.args);
36 Douglas Thrift 196
37 Douglas Thrift 265 if (jargon.include) ios::ReadLine(*xslt.GetReader());
38 Douglas Thrift 224
39 Douglas Thrift 267 if (jargon.include)
40     {
41 douglas 792 ext::Buffer line;
42     api::Pcre::RegEx matcher(_B("^(.*) xmlns=\"http://www.w3.org/1999/xhtml\"(.*)$"));
43 Douglas Thrift 224
44 Douglas Thrift 267 while (ios::ReadLine(*xslt.GetReader(), line))
45     {
46 douglas 792 while (api::Pcre::RegEx::Match match = matcher(line))
47     line = _S<ios::Buffer>() << match[1] << match[2];
48 Douglas Thrift 267
49 douglas 792 output << line << ios::NewLine;
50 Douglas Thrift 267 }
51     }
52 douglas 792 else
53     ios::ReadToWrite(*xslt.GetReader(), output);
54 Douglas Thrift 267
55 douglas 792 return output;
56 Douglas Thrift 196 }

Properties

Name Value
svn:eol-style native
svn:keywords Id