1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ATOM data conversion functions
from util import *
from elemutil import *
from xmlutil import *
# Convert a list of elements to a list of values representing an ATOM entry
def entryElementsToValues(e):
lt = filter(selector((element, "'title")), e)
t = "" if isNil(lt) else elementValue(car(lt))
li = filter(selector((element, "'id")), e)
i = "" if isNil(li) else elementValue(car(li))
lc = filter(selector((element, "'content")), e)
return (t, i, elementValue(car(lc)))
# Convert a list of elements to a list of values representing ATOM entries
def entriesElementsToValues(e):
if isNil(e):
return e
return cons(entryElementsToValues(car(e)), entriesElementsToValues(cdr(e)))
# Convert a list of strings to a list of values representing an ATOM entry
def readATOMEntry(l):
e = readXML(l)
if isNil(e):
return ()
return entryElementsToValues(car(e))
# Convert a list of values representing an ATOM entry to a value
def entryValue(e):
v = elementsToValues((caddr(e),))
return cons(car(e), (cadr(e), cdr(car(v))))
# Return true if a list of strings represents an ATOM feed
def isATOMFeed(l):
if not isXML(l):
return False
return contains(car(l), "<feed") and contains(car(l), "=\"http://www.w3.org/2005/Atom\"")
# Return true if a list of strings represents an ATOM entry
def isATOMEntry(l):
if not isXML(l):
return False
return contains(car(l), "<entry") and not contains(car(l), "<feed") and contains(car(l), "=\"http://www.w3.org/2005/Atom\"")
# Convert a list of strings to a list of values representing an ATOM feed
def readATOMFeed(l):
f = readXML(l)
if isNil(f):
return ()
t = filter(selector((element, "'title")), car(f))
i = filter(selector((element, "'id")), car(f))
e = filter(selector((element, "'entry")), car(f))
if isNil(e):
return (elementValue(car(t)), elementValue(car(i)))
return cons(elementValue(car(t)), cons(elementValue(car(i)), entriesElementsToValues(e)))
# Convert an ATOM feed containing elements to an ATOM feed containing values
def feedValuesLoop(e):
if (isNil(e)):
return e
return cons(entryValue(car(e)), feedValuesLoop(cdr(e)))
def feedValues(e):
return cons(car(e), cons(cadr(e), feedValuesLoop(cddr(e))))
# Convert a list of values representy an ATOM entry to a list of elements
def entryElement(l):
return (element, "'entry", (attribute, "'xmlns", "http://www.w3.org/2005/Atom"),
(element, "'title", (attribute, "'type", "text"), car(l)),
(element, "'id", cadr(l)),
(element, "'content", (attribute, "'type", ("application/xml" if isList(caddr(l)) else "text")), caddr(l)),
(element, "'link", (attribute, "'href", cadr(l))))
# Convert a list of values representing ATOM entries to a list of elements
def entriesElements(l):
if isNil(l):
return l
return cons(entryElement(car(l)), entriesElements(cdr(l)))
# Convert a list of values representing an ATOM entry to an ATOM entry
def writeATOMEntry(l):
return writeXML((entryElement(l),), True)
# Convert a list of values representing an ATOM feed to an ATOM feed
def writeATOMFeed(l):
f = (element, "'feed", (attribute, "'xmlns", "http://www.w3.org/2005/Atom"),
(element, "'title", (attribute, "'type", "text"), car(l)),
(element, "'id", cadr(l)))
if isNil(cddr(l)):
return writeXML((f,), True)
fe = append(f, entriesElements(cddr(l)))
return writeXML((fe,), True)
# Convert an ATOM entry containing a value to an ATOM entry containing an item element
def entryValuesToElements(v):
if isList(caddr(v)):
return cons(car(v), cons(cadr(v), valuesToElements((cons("'item", caddr(v)),))))
return cons(car(v), cons(cadr(v), valuesToElements((("'item", caddr(v)),))))
# Convert an ATOM feed containing values to an ATOM feed containing elements
def feedValuesToElementsLoop(v):
if isNil(v):
return v
return cons(entryValuesToElements(car(v)), feedValuesToElementsLoop(cdr(v)))
def feedValuesToElements(v):
return cons(car(v), cons(cadr(v), feedValuesToElementsLoop(cddr(v))))
|