ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/Iffy/Cleaner.cpp
(Generate patch)

Comparing Iffy/Cleaner.cpp (file contents):
Revision 284 by Douglas Thrift, 2004-11-18T16:37:13-08:00 vs.
Revision 298 by douglas, 2004-12-11T23:10:30-08:00

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines