ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/Iffy/Tag.cpp
Revision: 297
Committed: 2004-12-11T17:38:04-08:00 (20 years, 6 months ago) by douglas
File size: 1683 byte(s)
Log Message:
Probably also more Unicodely correctish, maybe.

File Contents

# Content
1 // Iffy
2 //
3 // Douglas Thrift
4 //
5 // $Id$
6
7 #include "Tag.hpp"
8 #include "Matcher.hpp"
9
10 Tag::Tag(const ext::String& segment) : type(OPEN)
11 {
12 ext::Vector<ext::String> parts(segment.Split(' '));
13
14 _mforeach (ext::Vector<ext::String>, part, parts)
15 {
16 if (part->IsEmpty()) continue;
17
18 if (part == parts.End() - 1 && part->Last() == '/')
19 {
20 type = STANDALONE;
21 *part = part->Substring(0, part->GetSize() - 1);
22 }
23
24 if (part == parts.Begin())
25 {
26 if (part->First() != '/')
27 {
28 name = lower(*part);
29 }
30 else
31 {
32 type = CLOSE;
33 name = lower(part->Substring(1));
34 }
35 }
36
37 if (part != parts.Begin())
38 {
39 Matcher matcher;
40 ext::String name;
41 ios::String value;
42
43 if (*part == matcher("^(.*)=\"(.*)\"$"))
44 {
45 name = matcher[1];
46 value = matcher[2];
47 }
48 else if (*part == matcher("^(.*)=\"(.*)$"))
49 {
50 name = matcher[1];
51 value = matcher[2];
52
53 while (++part != parts.End())
54 {
55 if (part == parts.End() - 1 && *part == matcher("^(.*)\"/$"))
56 {
57 type = STANDALONE;
58
59 value << " " << matcher[1];
60
61 break;
62 }
63 else if (*part == matcher("^(.*)\"$"))
64 {
65 value << " " << matcher[1];
66
67 break;
68 }
69 else value << " " << *part;
70 }
71
72 if (part == parts.End()) --part;
73 }
74 else if (*part == matcher("^(.*)=(.*)$"))
75 {
76 name = matcher[1];
77 value = matcher[2];
78 }
79
80 if (!name.IsEmpty()) attributes << " " << lower(name) << "=\"" << value << "\"";
81 }
82 }
83 }
84
85 ext::String Tag::lower(const ext::String& string)
86 {
87 ext::String lower;
88
89 _foreach (ext::String, atom, string) lower.InsertLast(*atom >= 'A' && *atom <= 'Z' ? ext::CodePoint(*atom + 32) : *atom);
90
91 return lower;
92 }

Properties

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