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

Comparing SiteMapper/SiteMapper.cpp (file contents):
Revision 559 by douglas, 2005-07-17T04:58:55-07:00 vs.
Revision 637 by douglas, 2005-12-31T21:32:21-08:00

# Line 4 | Line 4
4   //
5   // $Id$
6  
7 < #include <menes/cxx/standard.hh>
7 > #include <cxx/standard.hh>
8  
9 < #include <menes/api/pcre/regex.hpp>
10 < #include <menes/api/exename.hpp>
11 < #include <menes/app/simple.hpp>
9 > #include <api/pcre/regex.hpp>
10 > #include <api/exename.hpp>
11 > #include <app/simple.hpp>
12  
13   #include "SiteMapper.hpp"
14  
15 < int Main(const app::Options& options)
15 > int Main(const app::Options &options)
16   {
17          SiteMapper::program = api::GetExecutablePath().GetName();
18  
# Line 45 | Line 45 | int Main(const app::Options& options)
45          return 0;
46   }
47  
48 < SiteMapper::SiteMapper(const cse::String& siteIndex, const cse::String& siteMap)
48 > SiteMapper::SiteMapper(const cse::String &siteIndex, const cse::String &siteMap)
49   {
50          oldMap(siteMap);
51          newIndex(siteIndex);
# Line 55 | Line 55 | SiteMapper::SiteMapper(const cse::String
55   cse::String SiteMapper::program;
56   bool SiteMapper::debug(false);
57  
58 < void SiteMapper::oldMap(const cse::String& siteMap)
58 > void SiteMapper::oldMap(const cse::String &siteMap)
59   {
60          ext::Handle<xml::Document> document(xml::Parse(siteMap));
61          ext::Handle<xml::Node> list(*document/_B("page")/_B("section")/_B("list"));
# Line 67 | Line 67 | void SiteMapper::oldMap(const cse::Strin
67          oldMap(pages, list);
68   }
69  
70 < void SiteMapper::oldMap(ext::Vector<Page>& pages, xml::Node* list)
70 > void SiteMapper::oldMap(ext::Vector<Page> &pages, xml::Node* list)
71   {
72          xml::NodeSet nodes(*list/_B("item"));
73  
# Line 83 | Line 83 | void SiteMapper::oldMap(ext::Vector<Page
83          }
84   }
85  
86 < void SiteMapper::newIndex(const cse::String& siteIndex)
86 > void SiteMapper::newIndex(const cse::String &siteIndex)
87   {
88          ext::Handle<xml::Document> document(xml::Parse(siteIndex));
89          xml::NodeSet nodes(*document/_B("index")/_B("page"));
# Line 123 | Line 123 | void SiteMapper::newIndex(const cse::Str
123                  else
124                          continue;
125  
126 <                std::multimap<std::string, Page> items;
127 <
128 <                newPages.insert(std::pair<std::string, std::multimap<std::string, Page> >(page.GetAddress(), items)).first->second.insert(std::pair<std::string, Page>(page.GetChildOf(), page));
126 >                newPages[page.GetAddress()][page.GetChildOf()].InsertLast(page);
127          }
128   }
129  
130 < bool SiteMapper::newIndex(ext::Vector<Page>& pages, Page& page)
130 > bool SiteMapper::newIndex(ext::Vector<Page> &pages, Page &page)
131   {
132          _foreach (ext::Vector<Page>, page_, pages)
133          {
# Line 162 | Line 160 | bool SiteMapper::newIndex(ext::Vector<Pa
160          return false;
161   }
162  
163 < void SiteMapper::newMap(const cse::String& siteMap)
163 > void SiteMapper::newMap(const cse::String &siteMap)
164   {
165          _S<api::FileWriter> file(siteMap);
166          _S<ios::FormatWriter> fout(file);
167          _S<xml::TextWriter> xml(file);
168  
169 +        // XXX: xml::TextWriter should have this kind of stuff, no?
170          fout << ios::NewLine << _B("<?xml-stylesheet type=\"text/xsl\" href=\"stylesheets/sitemap.xsl\"?>") << ios::NewLine << _B("<!DOCTYPE page SYSTEM \"stylesheets/page.dtd\">");
171  
172          xml.OutputComment(comment);
# Line 182 | Line 181 | void SiteMapper::newMap(const cse::Strin
181  
182          _foreach (ext::Vector<Page>, page, pages)
183          {
184 <                if (newPages.find(page->GetAddress()) != newPages.end()) newMap(page->GetChildren(), page->GetPath(), newPages.find(page->GetAddress())->second);
184 >                if (newPages.Contains(page->GetAddress()))
185 >                        newMap(page->GetChildren(), page->GetPath(), newPages.Find(page->GetAddress())->Second());
186  
187                  xml << *page;
188          }
189   }
190  
191 < void SiteMapper::newMap(ext::Vector<Page>& pages, const cse::String& childOf, std::multimap<std::string, Page>& newPages)
191 > void SiteMapper::newMap(ext::Vector<Page> &pages, const cse::String &childOf, ext::RedBlackMap<cse::String, ext::Vector<Page>, LessThan> &newPages)
192   {
193 <        _foreach (ext::Vector<Page>, page, pages) newMap(page->GetChildren(), page->GetPath(), newPages);
194 <
195 <        typedef std::multimap<std::string, Page> MultiMap;
193 >        _foreach (ext::Vector<Page>, page, pages)
194 >                newMap(page->GetChildren(), page->GetPath(), newPages);
195  
196 <        _forall (MultiMap::const_iterator, itor, newPages.lower_bound(childOf), newPages.upper_bound(childOf))
196 >        _foreach (ext::Vector<Page>, page, newPages[childOf])
197          {
198 <                api::Cout << _B("Added: ") << itor->second.GetUrl() << ios::NewLine;
198 >                api::Cout << _B("Added: ") << page->GetUrl() << ios::NewLine;
199  
200 <                pages.InsertLast(itor->second);
200 >                pages.InsertLast(*page);
201          }
202  
203 <        newPages.erase(childOf);
203 >        newPages.Remove(childOf);
204   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines