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