ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/Iffy/Iffy.cpp
Revision: 288
Committed: 2004-12-09T22:47:17-08:00 (20 years, 6 months ago) by douglas
File size: 2072 byte(s)
Log Message:
Hrm, not getting anywhere yet, but sort of figuring out what's wrong.

File Contents

# User Rev Content
1 Douglas Thrift 275 // Iffy
2     //
3     // Douglas Thrift
4     //
5     // $Id$
6    
7 Douglas Thrift 284 #include "Cleaner.hpp"
8 Douglas Thrift 276 #include "Matcher.hpp"
9 Douglas Thrift 275
10 Douglas Thrift 276 #include <menes-api/exename.hpp>
11     #include <menes-api/files.hpp>
12 Douglas Thrift 275 #include <menes-app/application.hpp>
13 Douglas Thrift 277 #include <menes-ext/stack.hpp>
14 Douglas Thrift 275
15     struct IffyCommand : public app::Application
16     {
17     virtual int Run(const app::ArgumentList& args)
18     {
19 Douglas Thrift 276 Iffy::program = api::GetExecutablePath().GetName();
20    
21     ext::String in("-"), out("-");
22    
23     for (size_t index(0); index < args.GetSize(); ++index)
24     {
25     Matcher matcher;
26    
27     if (args[index] == "-D")
28     {
29     if (!Iffy::debug) Iffy::debug = true;
30     }
31     else if (args[index] == matcher("^-in=(.+)$"))
32     {
33     in = matcher[1];
34     }
35     else if (args[index] == matcher("^-out=(.+)$"))
36     {
37     out = matcher[1];
38     }
39     else
40     {
41     api::Cout << "Usage: " << Iffy::program << " [-in=in] [-out=out] [-D]\n";
42    
43     return 1;
44     }
45     }
46    
47     Iffy(in, out);
48    
49 Douglas Thrift 275 return 0;
50     }
51     } iffy;
52 Douglas Thrift 276
53     Iffy::Iffy(const ext::String& in, const ext::String& out)
54     {
55     if (in == "-" && out == "-")
56     {
57     iffy(api::Cin, api::Cout);
58     }
59     else if (in == "-")
60     {
61     api::FileWriter fout(out);
62    
63     iffy(api::Cin, fout);
64     }
65     else if (out == "-")
66     {
67     api::FileReader fin(in);
68    
69     iffy(fin, api::Cout);
70     }
71     else
72     {
73     api::FileReader fin(in);
74     api::FileWriter fout(out);
75    
76     iffy(fin, fout);
77     }
78     }
79    
80     ext::String Iffy::program;
81     bool Iffy::debug(false);
82    
83     void Iffy::iffy(ios::Reader& in, ios::Writer& out)
84     {
85     ext::String segment;
86 Douglas Thrift 281 bool text(false);
87 Douglas Thrift 284 Cleaner cleaner;
88 Douglas Thrift 276
89 Douglas Thrift 281 while (read(in, segment, (text = !text))) if (text)
90 Douglas Thrift 276 {
91 Douglas Thrift 284 cleaner.insert(segment);
92 Douglas Thrift 276 }
93     else
94     {
95 Douglas Thrift 281 Matcher matcher;
96    
97     if (segment == matcher("^!--( \\(\\d{1,2}:\\d{2}:\\d{2} [AP]M\\))--$"))
98     {
99 Douglas Thrift 284 cleaner.insert(matcher[1]);
100 Douglas Thrift 281
101     continue;
102     }
103    
104 Douglas Thrift 276 Tag tag(segment);
105    
106     if (tag == "br") tag = STANDALONE;
107    
108 Douglas Thrift 284 cleaner.insert(tag);
109     }
110 Douglas Thrift 276
111 Douglas Thrift 284 cleaner.clean();
112 Douglas Thrift 277
113 Douglas Thrift 284 ios::FormatWriter fout(out);
114 Douglas Thrift 277
115 Douglas Thrift 284 fout << cleaner;
116 Douglas Thrift 276 }
117    
118     bool Iffy::read(ios::Reader& in, ext::String& segment, bool text)
119     {
120     segment.Clear();
121    
122 douglas 288 utf8_t atom;
123 Douglas Thrift 276
124     while (in.Get(atom))
125     {
126     if (atom == (text ? '<' : '>')) return true;
127    
128     segment.InsertLast(atom);
129     }
130    
131     return !segment.IsEmpty();
132     }

Properties

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