ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/Iffy/Cleaner.cpp
Revision: 341
Committed: 2004-12-15T00:32:00-08:00 (20 years, 6 months ago) by douglas
File size: 1614 byte(s)
Log Message:
Right!

File Contents

# User Rev Content
1 douglas 296 // Iffy
2 Douglas Thrift 284 //
3     // Douglas Thrift
4     //
5     // $Id$
6    
7     #include "Cleaner.hpp"
8    
9 douglas 298 #include <menes-ext/stack.hpp>
10    
11 Douglas Thrift 284 void Cleaner::clean()
12     {
13 douglas 341 if (segments.IsEmpty()) return;
14    
15 douglas 294 if (segments.First().type != TAG || segments.First().tag != "html")
16     {
17     Tag tag(OPEN, "html");
18    
19     segments.InsertFirst(tag);
20     }
21    
22     if (segments.Last().type == TEXT)
23     {
24     std::string segment(segments.Last().text);
25    
26     if (segment.find_first_not_of("\r\n") == std::string::npos) segments.RemoveLast();
27     }
28    
29     if (segments.Last().type != TAG || segments.Last().tag != "html")
30     {
31     Tag tag(CLOSE, "html");
32    
33     segments.InsertLast(tag);
34     }
35 Douglas Thrift 284
36 douglas 298 ext::Stack<ext::Vector<Segment>::Iterator> opens;
37    
38     _mforeach (ext::Vector<Segment>, segment, segments) switch (segment->tag)
39 Douglas Thrift 284 {
40 douglas 298 case OPEN:
41     opens.Push(segment);
42     case STANDALONE:
43     break;
44     case CLOSE:
45     if (segment->tag != ext::String(opens.Top()->tag))
46     {
47     // XXX: do stuff
48     }
49    
50     opens.Pop();
51     }
52    
53     /* _foreach (ext::Vector<Segment>, segment, segments)
54     {
55 Douglas Thrift 284 switch (segment->type)
56     {
57     case TEXT:
58 douglas 298 api::Cerr << "TEXT";
59 Douglas Thrift 284
60     break;
61     case TAG:
62 douglas 298 api::Cerr << "TAG ";
63    
64     switch (segment->tag)
65     {
66     case OPEN:
67     api::Cerr << "OPEN\t";
68    
69     break;
70     case CLOSE:
71     api::Cerr << "CLOSE\t";
72    
73     break;
74     case STANDALONE:
75     api::Cerr << "STANDALONE\t";
76     }
77    
78     api::Cerr << ext::String(segment->tag);
79 Douglas Thrift 284 }
80 douglas 298
81     api::Cerr << ios::NewLine;
82     }*/
83     }
84    
85     ios::PrintWriter& operator<<(ios::PrintWriter& pout, const Cleaner& cleaner)
86     {
87     _foreach (ext::Vector<Segment>, segment, cleaner.segments) switch (segment->type)
88     {
89     case TEXT:
90     pout << segment->text;
91    
92     break;
93     case TAG:
94     pout << segment->tag;
95 Douglas Thrift 284 }
96    
97     return pout;
98     }

Properties

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