1# -*- coding: utf-8 -*-
2# cython: language_level=3, always_allow_keywords=True
3
4
5from ll.xist import xsc, sims
6from ll.xist.ns import html, meta, chars
7
8
9xmlns = "http://www.amk.ca/qel/"
10
11
12class title(xsc.Element):
13	xmlns = xmlns
14	model = sims.NoElements()
15
16	def convert(self, converter):
17		e = html.h1(self.content)
18
19		return e.convert(converter)
20
21
22class editor(xsc.Element):
23	xmlns = xmlns
24	model = sims.NoElements()
25
26	def convert(self, converter):
27		e = html.h2(self.content)
28
29		return e.convert(converter)
30
31
32class description(xsc.Element):
33	xmlns = xmlns
34	model = sims.NoElements()
35
36	def convert(self, converter):
37		e = html.div(self.content, class_="description")
38
39		return e.convert(converter)
40
41
42class note(xsc.Element):
43	xmlns = xmlns
44	model = sims.NoElements()
45
46	def convert(self, converter):
47		e = html.div(self.content, class_="note")
48
49		return e.convert(converter)
50
51
52class foreign(xsc.Element):
53	xmlns = xmlns
54	model = sims.NoElements()
55
56	def convert(self, converter):
57		e = html.em(self.content)
58
59		return e.convert(converter)
60
61
62class author(xsc.Element):
63	xmlns = xmlns
64	model = sims.NoElements()
65
66	def convert(self, converter):
67		e = self.content
68
69		return e.convert(converter)
70
71
72class source(xsc.Element):
73	xmlns = xmlns
74	model = sims.NoElements()
75
76	def convert(self, converter):
77		e = self.content
78
79		return e.convert(converter)
80
81
82class quotation(xsc.Element):
83	xmlns = xmlns
84	model = sims.Elements(author, source, note)
85
86	class Attrs(xsc.Element.Attrs):
87		class date(xsc.TextAttr): pass
88		class id(xsc.IDAttr): pass
89
90	def convert(self, converter):
91		content = xsc.Frag()
92		authors = xsc.Frag()
93		sources = xsc.Frag()
94		for child in self:
95			if isinstance(child, author):
96				authors.append(child)
97			elif isinstance(child, source):
98				sources.append(child)
99			else:
100				content.append(child)
101		if authors:
102			if sources:
103				footer = html.div(authors, " ", chars.mdash(), " ", sources, class_="source")
104			else:
105				footer = html.div(authors, class_="source")
106		else:
107			if sources:
108				footer = html.div(sources, class_="source")
109			else:
110				footer = None
111		e = html.div(content, footer, class_="quotation")
112
113		return e.convert(converter)
114
115
116class quotations(xsc.Element):
117	xmlns = xmlns
118	model = sims.Elements(title, editor, description, quotation)
119
120	def convert(self, converter):
121		with xsc.build():
122			with xsc.Frag() as e:
123				+html.DocTypeXHTML10transitional()
124				with html.html():
125					with html.head():
126						+meta.contenttype()
127						+html.title(self[title][0].content)
128						+meta.stylesheet(href="root:python-quotes.css")
129					+html.body(
130						self[title],
131						self[editor],
132						self[description],
133						self[quotation]
134					)
135
136		return e.convert(converter)
137
138
139class p(xsc.Element):
140	xmlns = xmlns
141
142	def convert(self, converter):
143		e = html.p(self.content)
144		return e.convert(converter)
145
146
147class cite(xsc.Element):
148	xmlns = xmlns
149
150	def convert(self, converter):
151		e = html.cite(self.content)
152
153		return e.convert(converter)
154
155
156class em(xsc.Element):
157	xmlns = xmlns
158
159	def convert(self, converter):
160		e = html.em(self.content)
161		return e.convert(converter)
162
163
164class pre(xsc.Element):
165	xmlns = xmlns
166
167	def convert(self, converter):
168		e = html.pre(self.content)
169		return e.convert(converter)
170
171
172class code(xsc.Element):
173	xmlns = xmlns
174
175	def convert(self, converter):
176		e = html.code(self.content)
177		return e.convert(converter)
178
179
180class br(xsc.Element):
181	xmlns = xmlns
182
183	def convert(self, converter):
184		e = html.br()
185
186		return e.convert(converter)
187