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

Comparing SiteMapper/Page.cpp (file contents):
Revision 128 by Douglas Thrift, 2004-03-23T22:15:08-08:00 vs.
Revision 559 by douglas, 2005-07-17T04:58:55-07:00

# Line 4 | Line 4
4   //
5   // $Id$
6  
7 < #include "Page.hpp"
7 > #include <menes/cxx/standard.hh>
8  
9 < Page::Page(const string& address, const string& path, const string& title)
9 > #include <menes/api/pcre/regex.hpp>
10 >
11 > #include "SiteMapper.hpp"
12 >
13 > void Page::SetUrl(const cse::String& url)
14   {
15 <        setAddress(address);
16 <        setPath(path);
17 <        setTitle(title);
15 >        static api::Pcre::RegEx url_(_B("^http://([^/]+)(/.*)?$"));
16 >
17 >        if (api::Pcre::RegEx::Match match = url_(url))
18 >        {
19 >                address = match[1];
20 >                path = !match[2].IsEmpty() ? match[2] : cse::String(_B("/"));
21 >        }
22 >        else
23 >                throw ext::StringException(url);
24   }
25  
26 < Page::Page(const string& url)
26 > bool Page::operator==(const cse::String& thing)
27   {
28 <        setUrl(url);
28 >        return address == thing || path == thing || title == thing;
29   }
30  
31 < void Page::setUrl(const string& url)
31 > bool Page::operator==(const Page& page) const
32   {
33 <        Matcher matcher("^http://(.+)(/.*)?$");
24 <
25 <        if (url == matcher)
33 >        if (address == page.address)
34          {
35 <                address = matcher[1];
28 <
29 <                if (matcher.size() > 2)
30 <                {
31 <                        path = matcher[2];
32 <                }
33 <                else
34 <                {
35 <                        path = '/';
36 <                }
35 >                return path == page.path || title == page.title;
36          }
37 <        else
37 >
38 >        return false;
39 > }
40 >
41 > xml::TextWriter& operator<<(xml::TextWriter& xml, Page& page)
42 > {
43 >        xml::ScopeElement item(xml, _B("item"));
44 >
45 >        xml.OpenElement(_B("link"));
46 >        xml.SetAttribute(_B("address"), page.GetUrl());
47 >        xml.OutputText(page.title);
48 >        xml.CloseElement();
49 >
50 >        if (!page.children.IsEmpty())
51          {
52 <                cerr << program << ": Page.setUrl(" << url << ") failure.\n";
52 >                xml::ScopeElement list(xml, _B("list"));
53 >
54 >                _foreach (ext::Vector<Page>, child, page.children) xml << *child;
55          }
56 +
57 +        return xml;
58   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines