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 341 by douglas, 2004-12-15T00:32:00-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 <        //
12 < }
13 >        if (segments.IsEmpty()) return;
14  
15 < ios::PrintWriter& operator<<(ios::PrintWriter& pout, const Cleaner& cleaner)
16 < {
17 <        _foreach (ext::Vector<Segment>, segment, cleaner.segments)
15 >        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 >
36 >        ext::Stack<ext::Vector<Segment>::Iterator> opens;
37 >
38 >        _mforeach (ext::Vector<Segment>, segment, segments) switch (segment->tag)
39 >        {
40 >        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                  switch (segment->type)
56                  {
57                  case TEXT:
58 <                        pout << segment->text;
58 >                        api::Cerr << "TEXT";
59  
60                          break;
61                  case TAG:
62 <                        pout << segment->tag;
62 >                        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                  }
80 +
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          }
96  
97          return pout;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines