| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870 |
- //
- // HttpHandlers+Scopes.swift
- // Swifter
- //
- // Copyright © 2014-2016 Damian Kołakowski. All rights reserved.
- //
- import Foundation
- public func scopes(_ scope: @escaping Closure) -> ((HttpRequest) -> HttpResponse) {
- return { r in
- ScopesBuffer[Process.tid] = ""
- scope()
- return .raw(200, "OK", ["Content-Type": "text/html"], {
- try? $0.write([UInt8](("<!DOCTYPE html>" + (ScopesBuffer[Process.tid] ?? "")).utf8))
- })
- }
- }
- public typealias Closure = () -> Void
- public var idd: String? = nil
- public var dir: String? = nil
- public var rel: String? = nil
- public var rev: String? = nil
- public var alt: String? = nil
- public var forr: String? = nil
- public var src: String? = nil
- public var type: String? = nil
- public var href: String? = nil
- public var text: String? = nil
- public var abbr: String? = nil
- public var size: String? = nil
- public var face: String? = nil
- public var char: String? = nil
- public var cite: String? = nil
- public var span: String? = nil
- public var data: String? = nil
- public var axis: String? = nil
- public var Name: String? = nil
- public var name: String? = nil
- public var code: String? = nil
- public var link: String? = nil
- public var lang: String? = nil
- public var cols: String? = nil
- public var rows: String? = nil
- public var ismap: String? = nil
- public var shape: String? = nil
- public var style: String? = nil
- public var alink: String? = nil
- public var width: String? = nil
- public var rules: String? = nil
- public var align: String? = nil
- public var frame: String? = nil
- public var vlink: String? = nil
- public var deferr: String? = nil
- public var color: String? = nil
- public var media: String? = nil
- public var title: String? = nil
- public var scope: String? = nil
- public var classs: String? = nil
- public var value: String? = nil
- public var clear: String? = nil
- public var start: String? = nil
- public var label: String? = nil
- public var action: String? = nil
- public var height: String? = nil
- public var method: String? = nil
- public var acceptt: String? = nil
- public var object: String? = nil
- public var scheme: String? = nil
- public var coords: String? = nil
- public var usemap: String? = nil
- public var onblur: String? = nil
- public var nohref: String? = nil
- public var nowrap: String? = nil
- public var hspace: String? = nil
- public var border: String? = nil
- public var valign: String? = nil
- public var vspace: String? = nil
- public var onload: String? = nil
- public var target: String? = nil
- public var prompt: String? = nil
- public var onfocus: String? = nil
- public var enctype: String? = nil
- public var onclick: String? = nil
- public var onkeyup: String? = nil
- public var profile: String? = nil
- public var version: String? = nil
- public var onreset: String? = nil
- public var charset: String? = nil
- public var standby: String? = nil
- public var colspan: String? = nil
- public var charoff: String? = nil
- public var classid: String? = nil
- public var compact: String? = nil
- public var declare: String? = nil
- public var rowspan: String? = nil
- public var checked: String? = nil
- public var archive: String? = nil
- public var bgcolor: String? = nil
- public var content: String? = nil
- public var noshade: String? = nil
- public var summary: String? = nil
- public var headers: String? = nil
- public var onselect: String? = nil
- public var readonly: String? = nil
- public var tabindex: String? = nil
- public var onchange: String? = nil
- public var noresize: String? = nil
- public var disabled: String? = nil
- public var longdesc: String? = nil
- public var codebase: String? = nil
- public var language: String? = nil
- public var datetime: String? = nil
- public var selected: String? = nil
- public var hreflang: String? = nil
- public var onsubmit: String? = nil
- public var multiple: String? = nil
- public var onunload: String? = nil
- public var codetype: String? = nil
- public var scrolling: String? = nil
- public var onkeydown: String? = nil
- public var maxlength: String? = nil
- public var valuetype: String? = nil
- public var accesskey: String? = nil
- public var onmouseup: String? = nil
- public var autofocus: String? = nil
- public var onkeypress: String? = nil
- public var ondblclick: String? = nil
- public var onmouseout: String? = nil
- public var httpEquiv: String? = nil
- public var background: String? = nil
- public var onmousemove: String? = nil
- public var onmouseover: String? = nil
- public var cellpadding: String? = nil
- public var onmousedown: String? = nil
- public var frameborder: String? = nil
- public var marginwidth: String? = nil
- public var cellspacing: String? = nil
- public var placeholder: String? = nil
- public var marginheight: String? = nil
- public var acceptCharset: String? = nil
- public var inner: String? = nil
- public func a(_ c: Closure) { element("a", c) }
- public func b(_ c: Closure) { element("b", c) }
- public func i(_ c: Closure) { element("i", c) }
- public func p(_ c: Closure) { element("p", c) }
- public func q(_ c: Closure) { element("q", c) }
- public func s(_ c: Closure) { element("s", c) }
- public func u(_ c: Closure) { element("u", c) }
- public func br(_ c: Closure) { element("br", c) }
- public func dd(_ c: Closure) { element("dd", c) }
- public func dl(_ c: Closure) { element("dl", c) }
- public func dt(_ c: Closure) { element("dt", c) }
- public func em(_ c: Closure) { element("em", c) }
- public func hr(_ c: Closure) { element("hr", c) }
- public func li(_ c: Closure) { element("li", c) }
- public func ol(_ c: Closure) { element("ol", c) }
- public func rp(_ c: Closure) { element("rp", c) }
- public func rt(_ c: Closure) { element("rt", c) }
- public func td(_ c: Closure) { element("td", c) }
- public func th(_ c: Closure) { element("th", c) }
- public func tr(_ c: Closure) { element("tr", c) }
- public func tt(_ c: Closure) { element("tt", c) }
- public func ul(_ c: Closure) { element("ul", c) }
- public func ul<T: Sequence>(_ collection: T, _ c: @escaping (T.Iterator.Element) -> Void) {
- element("ul", {
- for item in collection {
- c(item)
- }
- })
- }
- public func h1(_ c: Closure) { element("h1", c) }
- public func h2(_ c: Closure) { element("h2", c) }
- public func h3(_ c: Closure) { element("h3", c) }
- public func h4(_ c: Closure) { element("h4", c) }
- public func h5(_ c: Closure) { element("h5", c) }
- public func h6(_ c: Closure) { element("h6", c) }
- public func bdi(_ c: Closure) { element("bdi", c) }
- public func bdo(_ c: Closure) { element("bdo", c) }
- public func big(_ c: Closure) { element("big", c) }
- public func col(_ c: Closure) { element("col", c) }
- public func del(_ c: Closure) { element("del", c) }
- public func dfn(_ c: Closure) { element("dfn", c) }
- public func dir(_ c: Closure) { element("dir", c) }
- public func div(_ c: Closure) { element("div", c) }
- public func img(_ c: Closure) { element("img", c) }
- public func ins(_ c: Closure) { element("ins", c) }
- public func kbd(_ c: Closure) { element("kbd", c) }
- public func map(_ c: Closure) { element("map", c) }
- public func nav(_ c: Closure) { element("nav", c) }
- public func pre(_ c: Closure) { element("pre", c) }
- public func rtc(_ c: Closure) { element("rtc", c) }
- public func sub(_ c: Closure) { element("sub", c) }
- public func sup(_ c: Closure) { element("sup", c) }
- public func varr(_ c: Closure) { element("var", c) }
- public func wbr(_ c: Closure) { element("wbr", c) }
- public func xmp(_ c: Closure) { element("xmp", c) }
- public func abbr(_ c: Closure) { element("abbr", c) }
- public func area(_ c: Closure) { element("area", c) }
- public func base(_ c: Closure) { element("base", c) }
- public func body(_ c: Closure) { element("body", c) }
- public func cite(_ c: Closure) { element("cite", c) }
- public func code(_ c: Closure) { element("code", c) }
- public func data(_ c: Closure) { element("data", c) }
- public func font(_ c: Closure) { element("font", c) }
- public func form(_ c: Closure) { element("form", c) }
- public func head(_ c: Closure) { element("head", c) }
- public func html(_ c: Closure) { element("html", c) }
- public func link(_ c: Closure) { element("link", c) }
- public func main(_ c: Closure) { element("main", c) }
- public func mark(_ c: Closure) { element("mark", c) }
- public func menu(_ c: Closure) { element("menu", c) }
- public func meta(_ c: Closure) { element("meta", c) }
- public func nobr(_ c: Closure) { element("nobr", c) }
- public func ruby(_ c: Closure) { element("ruby", c) }
- public func samp(_ c: Closure) { element("samp", c) }
- public func span(_ c: Closure) { element("span", c) }
- public func time(_ c: Closure) { element("time", c) }
- public func aside(_ c: Closure) { element("aside", c) }
- public func audio(_ c: Closure) { element("audio", c) }
- public func blink(_ c: Closure) { element("blink", c) }
- public func embed(_ c: Closure) { element("embed", c) }
- public func frame(_ c: Closure) { element("frame", c) }
- public func image(_ c: Closure) { element("image", c) }
- public func input(_ c: Closure) { element("input", c) }
- public func label(_ c: Closure) { element("label", c) }
- public func meter(_ c: Closure) { element("meter", c) }
- public func param(_ c: Closure) { element("param", c) }
- public func small(_ c: Closure) { element("small", c) }
- public func style(_ c: Closure) { element("style", c) }
- public func table(_ c: Closure) { element("table", c) }
- public func table<T: Sequence>(_ collection: T, c: @escaping (T.Iterator.Element) -> Void) {
- element("table", {
- for item in collection {
- c(item)
- }
- })
- }
- public func tbody(_ c: Closure) { element("tbody", c) }
- public func tbody<T: Sequence>(_ collection: T, c: @escaping (T.Iterator.Element) -> Void) {
- element("tbody", {
- for item in collection {
- c(item)
- }
- })
- }
- public func tfoot(_ c: Closure) { element("tfoot", c) }
- public func thead(_ c: Closure) { element("thead", c) }
- public func title(_ c: Closure) { element("title", c) }
- public func track(_ c: Closure) { element("track", c) }
- public func video(_ c: Closure) { element("video", c) }
- public func applet(_ c: Closure) { element("applet", c) }
- public func button(_ c: Closure) { element("button", c) }
- public func canvas(_ c: Closure) { element("canvas", c) }
- public func center(_ c: Closure) { element("center", c) }
- public func dialog(_ c: Closure) { element("dialog", c) }
- public func figure(_ c: Closure) { element("figure", c) }
- public func footer(_ c: Closure) { element("footer", c) }
- public func header(_ c: Closure) { element("header", c) }
- public func hgroup(_ c: Closure) { element("hgroup", c) }
- public func iframe(_ c: Closure) { element("iframe", c) }
- public func keygen(_ c: Closure) { element("keygen", c) }
- public func legend(_ c: Closure) { element("legend", c) }
- public func object(_ c: Closure) { element("object", c) }
- public func option(_ c: Closure) { element("option", c) }
- public func output(_ c: Closure) { element("output", c) }
- public func script(_ c: Closure) { element("script", c) }
- public func select(_ c: Closure) { element("select", c) }
- public func shadow(_ c: Closure) { element("shadow", c) }
- public func source(_ c: Closure) { element("source", c) }
- public func spacer(_ c: Closure) { element("spacer", c) }
- public func strike(_ c: Closure) { element("strike", c) }
- public func strong(_ c: Closure) { element("strong", c) }
- public func acronym(_ c: Closure) { element("acronym", c) }
- public func address(_ c: Closure) { element("address", c) }
- public func article(_ c: Closure) { element("article", c) }
- public func bgsound(_ c: Closure) { element("bgsound", c) }
- public func caption(_ c: Closure) { element("caption", c) }
- public func command(_ c: Closure) { element("command", c) }
- public func content(_ c: Closure) { element("content", c) }
- public func details(_ c: Closure) { element("details", c) }
- public func elementt(_ c: Closure) { element("element", c) }
- public func isindex(_ c: Closure) { element("isindex", c) }
- public func listing(_ c: Closure) { element("listing", c) }
- public func marquee(_ c: Closure) { element("marquee", c) }
- public func noembed(_ c: Closure) { element("noembed", c) }
- public func picture(_ c: Closure) { element("picture", c) }
- public func section(_ c: Closure) { element("section", c) }
- public func summary(_ c: Closure) { element("summary", c) }
- public func basefont(_ c: Closure) { element("basefont", c) }
- public func colgroup(_ c: Closure) { element("colgroup", c) }
- public func datalist(_ c: Closure) { element("datalist", c) }
- public func fieldset(_ c: Closure) { element("fieldset", c) }
- public func frameset(_ c: Closure) { element("frameset", c) }
- public func menuitem(_ c: Closure) { element("menuitem", c) }
- public func multicol(_ c: Closure) { element("multicol", c) }
- public func noframes(_ c: Closure) { element("noframes", c) }
- public func noscript(_ c: Closure) { element("noscript", c) }
- public func optgroup(_ c: Closure) { element("optgroup", c) }
- public func progress(_ c: Closure) { element("progress", c) }
- public func template(_ c: Closure) { element("template", c) }
- public func textarea(_ c: Closure) { element("textarea", c) }
- public func plaintext(_ c: Closure) { element("plaintext", c) }
- public func javascript(_ c: Closure) { element("script", ["type": "text/javascript"], c) }
- public func blockquote(_ c: Closure) { element("blockquote", c) }
- public func figcaption(_ c: Closure) { element("figcaption", c) }
- public func stylesheet(_ c: Closure) { element("link", ["rel": "stylesheet", "type": "text/css"], c) }
- public func element(_ node: String, _ c: Closure) { evaluate(node, [:], c) }
- public func element(_ node: String, _ attrs: [String: String?] = [:], _ c: Closure) { evaluate(node, attrs, c) }
- var ScopesBuffer = [UInt64: String]()
- private func evaluate(_ node: String, _ attrs: [String: String?] = [:], _ c: Closure) {
-
- // Push the attributes.
-
- let stackid = idd
- let stackdir = dir
- let stackrel = rel
- let stackrev = rev
- let stackalt = alt
- let stackfor = forr
- let stacksrc = src
- let stacktype = type
- let stackhref = href
- let stacktext = text
- let stackabbr = abbr
- let stacksize = size
- let stackface = face
- let stackchar = char
- let stackcite = cite
- let stackspan = span
- let stackdata = data
- let stackaxis = axis
- let stackName = Name
- let stackname = name
- let stackcode = code
- let stacklink = link
- let stacklang = lang
- let stackcols = cols
- let stackrows = rows
- let stackismap = ismap
- let stackshape = shape
- let stackstyle = style
- let stackalink = alink
- let stackwidth = width
- let stackrules = rules
- let stackalign = align
- let stackframe = frame
- let stackvlink = vlink
- let stackdefer = deferr
- let stackcolor = color
- let stackmedia = media
- let stacktitle = title
- let stackscope = scope
- let stackclass = classs
- let stackvalue = value
- let stackclear = clear
- let stackstart = start
- let stacklabel = label
- let stackaction = action
- let stackheight = height
- let stackmethod = method
- let stackaccept = acceptt
- let stackobject = object
- let stackscheme = scheme
- let stackcoords = coords
- let stackusemap = usemap
- let stackonblur = onblur
- let stacknohref = nohref
- let stacknowrap = nowrap
- let stackhspace = hspace
- let stackborder = border
- let stackvalign = valign
- let stackvspace = vspace
- let stackonload = onload
- let stacktarget = target
- let stackprompt = prompt
- let stackonfocus = onfocus
- let stackenctype = enctype
- let stackonclick = onclick
- let stackonkeyup = onkeyup
- let stackprofile = profile
- let stackversion = version
- let stackonreset = onreset
- let stackcharset = charset
- let stackstandby = standby
- let stackcolspan = colspan
- let stackcharoff = charoff
- let stackclassid = classid
- let stackcompact = compact
- let stackdeclare = declare
- let stackrowspan = rowspan
- let stackchecked = checked
- let stackarchive = archive
- let stackbgcolor = bgcolor
- let stackcontent = content
- let stacknoshade = noshade
- let stacksummary = summary
- let stackheaders = headers
- let stackonselect = onselect
- let stackreadonly = readonly
- let stacktabindex = tabindex
- let stackonchange = onchange
- let stacknoresize = noresize
- let stackdisabled = disabled
- let stacklongdesc = longdesc
- let stackcodebase = codebase
- let stacklanguage = language
- let stackdatetime = datetime
- let stackselected = selected
- let stackhreflang = hreflang
- let stackonsubmit = onsubmit
- let stackmultiple = multiple
- let stackonunload = onunload
- let stackcodetype = codetype
- let stackscrolling = scrolling
- let stackonkeydown = onkeydown
- let stackmaxlength = maxlength
- let stackvaluetype = valuetype
- let stackaccesskey = accesskey
- let stackonmouseup = onmouseup
- let stackonkeypress = onkeypress
- let stackondblclick = ondblclick
- let stackonmouseout = onmouseout
- let stackhttpEquiv = httpEquiv
- let stackbackground = background
- let stackonmousemove = onmousemove
- let stackonmouseover = onmouseover
- let stackcellpadding = cellpadding
- let stackonmousedown = onmousedown
- let stackframeborder = frameborder
- let stackmarginwidth = marginwidth
- let stackcellspacing = cellspacing
- let stackplaceholder = placeholder
- let stackmarginheight = marginheight
- let stackacceptCharset = acceptCharset
- let stackinner = inner
-
- // Reset the values before a nested scope evalutation.
-
- idd = nil
- dir = nil
- rel = nil
- rev = nil
- alt = nil
- forr = nil
- src = nil
- type = nil
- href = nil
- text = nil
- abbr = nil
- size = nil
- face = nil
- char = nil
- cite = nil
- span = nil
- data = nil
- axis = nil
- Name = nil
- name = nil
- code = nil
- link = nil
- lang = nil
- cols = nil
- rows = nil
- ismap = nil
- shape = nil
- style = nil
- alink = nil
- width = nil
- rules = nil
- align = nil
- frame = nil
- vlink = nil
- deferr = nil
- color = nil
- media = nil
- title = nil
- scope = nil
- classs = nil
- value = nil
- clear = nil
- start = nil
- label = nil
- action = nil
- height = nil
- method = nil
- acceptt = nil
- object = nil
- scheme = nil
- coords = nil
- usemap = nil
- onblur = nil
- nohref = nil
- nowrap = nil
- hspace = nil
- border = nil
- valign = nil
- vspace = nil
- onload = nil
- target = nil
- prompt = nil
- onfocus = nil
- enctype = nil
- onclick = nil
- onkeyup = nil
- profile = nil
- version = nil
- onreset = nil
- charset = nil
- standby = nil
- colspan = nil
- charoff = nil
- classid = nil
- compact = nil
- declare = nil
- rowspan = nil
- checked = nil
- archive = nil
- bgcolor = nil
- content = nil
- noshade = nil
- summary = nil
- headers = nil
- onselect = nil
- readonly = nil
- tabindex = nil
- onchange = nil
- noresize = nil
- disabled = nil
- longdesc = nil
- codebase = nil
- language = nil
- datetime = nil
- selected = nil
- hreflang = nil
- onsubmit = nil
- multiple = nil
- onunload = nil
- codetype = nil
- scrolling = nil
- onkeydown = nil
- maxlength = nil
- valuetype = nil
- accesskey = nil
- onmouseup = nil
- onkeypress = nil
- ondblclick = nil
- onmouseout = nil
- httpEquiv = nil
- background = nil
- onmousemove = nil
- onmouseover = nil
- cellpadding = nil
- onmousedown = nil
- frameborder = nil
- placeholder = nil
- marginwidth = nil
- cellspacing = nil
- marginheight = nil
- acceptCharset = nil
- inner = nil
-
- ScopesBuffer[Process.tid] = (ScopesBuffer[Process.tid] ?? "") + "<" + node
-
- // Save the current output before the nested scope evalutation.
-
- var output = ScopesBuffer[Process.tid] ?? ""
-
- // Clear the output buffer for the evalutation.
-
- ScopesBuffer[Process.tid] = ""
-
- // Evaluate the nested scope.
-
- c()
-
- // Render attributes set by the evalutation.
-
- var mergedAttributes = [String: String?]()
-
- if let idd = idd { mergedAttributes["id"] = idd }
- if let dir = dir { mergedAttributes["dir"] = dir }
- if let rel = rel { mergedAttributes["rel"] = rel }
- if let rev = rev { mergedAttributes["rev"] = rev }
- if let alt = alt { mergedAttributes["alt"] = alt }
- if let forr = forr { mergedAttributes["for"] = forr }
- if let src = src { mergedAttributes["src"] = src }
- if let type = type { mergedAttributes["type"] = type }
- if let href = href { mergedAttributes["href"] = href }
- if let text = text { mergedAttributes["text"] = text }
- if let abbr = abbr { mergedAttributes["abbr"] = abbr }
- if let size = size { mergedAttributes["size"] = size }
- if let face = face { mergedAttributes["face"] = face }
- if let char = char { mergedAttributes["char"] = char }
- if let cite = cite { mergedAttributes["cite"] = cite }
- if let span = span { mergedAttributes["span"] = span }
- if let data = data { mergedAttributes["data"] = data }
- if let axis = axis { mergedAttributes["axis"] = axis }
- if let Name = Name { mergedAttributes["Name"] = Name }
- if let name = name { mergedAttributes["name"] = name }
- if let code = code { mergedAttributes["code"] = code }
- if let link = link { mergedAttributes["link"] = link }
- if let lang = lang { mergedAttributes["lang"] = lang }
- if let cols = cols { mergedAttributes["cols"] = cols }
- if let rows = rows { mergedAttributes["rows"] = rows }
- if let ismap = ismap { mergedAttributes["ismap"] = ismap }
- if let shape = shape { mergedAttributes["shape"] = shape }
- if let style = style { mergedAttributes["style"] = style }
- if let alink = alink { mergedAttributes["alink"] = alink }
- if let width = width { mergedAttributes["width"] = width }
- if let rules = rules { mergedAttributes["rules"] = rules }
- if let align = align { mergedAttributes["align"] = align }
- if let frame = frame { mergedAttributes["frame"] = frame }
- if let vlink = vlink { mergedAttributes["vlink"] = vlink }
- if let deferr = deferr { mergedAttributes["defer"] = deferr }
- if let color = color { mergedAttributes["color"] = color }
- if let media = media { mergedAttributes["media"] = media }
- if let title = title { mergedAttributes["title"] = title }
- if let scope = scope { mergedAttributes["scope"] = scope }
- if let classs = classs { mergedAttributes["class"] = classs }
- if let value = value { mergedAttributes["value"] = value }
- if let clear = clear { mergedAttributes["clear"] = clear }
- if let start = start { mergedAttributes["start"] = start }
- if let label = label { mergedAttributes["label"] = label }
- if let action = action { mergedAttributes["action"] = action }
- if let height = height { mergedAttributes["height"] = height }
- if let method = method { mergedAttributes["method"] = method }
- if let acceptt = acceptt { mergedAttributes["accept"] = acceptt }
- if let object = object { mergedAttributes["object"] = object }
- if let scheme = scheme { mergedAttributes["scheme"] = scheme }
- if let coords = coords { mergedAttributes["coords"] = coords }
- if let usemap = usemap { mergedAttributes["usemap"] = usemap }
- if let onblur = onblur { mergedAttributes["onblur"] = onblur }
- if let nohref = nohref { mergedAttributes["nohref"] = nohref }
- if let nowrap = nowrap { mergedAttributes["nowrap"] = nowrap }
- if let hspace = hspace { mergedAttributes["hspace"] = hspace }
- if let border = border { mergedAttributes["border"] = border }
- if let valign = valign { mergedAttributes["valign"] = valign }
- if let vspace = vspace { mergedAttributes["vspace"] = vspace }
- if let onload = onload { mergedAttributes["onload"] = onload }
- if let target = target { mergedAttributes["target"] = target }
- if let prompt = prompt { mergedAttributes["prompt"] = prompt }
- if let onfocus = onfocus { mergedAttributes["onfocus"] = onfocus }
- if let enctype = enctype { mergedAttributes["enctype"] = enctype }
- if let onclick = onclick { mergedAttributes["onclick"] = onclick }
- if let onkeyup = onkeyup { mergedAttributes["onkeyup"] = onkeyup }
- if let profile = profile { mergedAttributes["profile"] = profile }
- if let version = version { mergedAttributes["version"] = version }
- if let onreset = onreset { mergedAttributes["onreset"] = onreset }
- if let charset = charset { mergedAttributes["charset"] = charset }
- if let standby = standby { mergedAttributes["standby"] = standby }
- if let colspan = colspan { mergedAttributes["colspan"] = colspan }
- if let charoff = charoff { mergedAttributes["charoff"] = charoff }
- if let classid = classid { mergedAttributes["classid"] = classid }
- if let compact = compact { mergedAttributes["compact"] = compact }
- if let declare = declare { mergedAttributes["declare"] = declare }
- if let rowspan = rowspan { mergedAttributes["rowspan"] = rowspan }
- if let checked = checked { mergedAttributes["checked"] = checked }
- if let archive = archive { mergedAttributes["archive"] = archive }
- if let bgcolor = bgcolor { mergedAttributes["bgcolor"] = bgcolor }
- if let content = content { mergedAttributes["content"] = content }
- if let noshade = noshade { mergedAttributes["noshade"] = noshade }
- if let summary = summary { mergedAttributes["summary"] = summary }
- if let headers = headers { mergedAttributes["headers"] = headers }
- if let onselect = onselect { mergedAttributes["onselect"] = onselect }
- if let readonly = readonly { mergedAttributes["readonly"] = readonly }
- if let tabindex = tabindex { mergedAttributes["tabindex"] = tabindex }
- if let onchange = onchange { mergedAttributes["onchange"] = onchange }
- if let noresize = noresize { mergedAttributes["noresize"] = noresize }
- if let disabled = disabled { mergedAttributes["disabled"] = disabled }
- if let longdesc = longdesc { mergedAttributes["longdesc"] = longdesc }
- if let codebase = codebase { mergedAttributes["codebase"] = codebase }
- if let language = language { mergedAttributes["language"] = language }
- if let datetime = datetime { mergedAttributes["datetime"] = datetime }
- if let selected = selected { mergedAttributes["selected"] = selected }
- if let hreflang = hreflang { mergedAttributes["hreflang"] = hreflang }
- if let onsubmit = onsubmit { mergedAttributes["onsubmit"] = onsubmit }
- if let multiple = multiple { mergedAttributes["multiple"] = multiple }
- if let onunload = onunload { mergedAttributes["onunload"] = onunload }
- if let codetype = codetype { mergedAttributes["codetype"] = codetype }
- if let scrolling = scrolling { mergedAttributes["scrolling"] = scrolling }
- if let onkeydown = onkeydown { mergedAttributes["onkeydown"] = onkeydown }
- if let maxlength = maxlength { mergedAttributes["maxlength"] = maxlength }
- if let valuetype = valuetype { mergedAttributes["valuetype"] = valuetype }
- if let accesskey = accesskey { mergedAttributes["accesskey"] = accesskey }
- if let onmouseup = onmouseup { mergedAttributes["onmouseup"] = onmouseup }
- if let onkeypress = onkeypress { mergedAttributes["onkeypress"] = onkeypress }
- if let ondblclick = ondblclick { mergedAttributes["ondblclick"] = ondblclick }
- if let onmouseout = onmouseout { mergedAttributes["onmouseout"] = onmouseout }
- if let httpEquiv = httpEquiv { mergedAttributes["http-equiv"] = httpEquiv }
- if let background = background { mergedAttributes["background"] = background }
- if let onmousemove = onmousemove { mergedAttributes["onmousemove"] = onmousemove }
- if let onmouseover = onmouseover { mergedAttributes["onmouseover"] = onmouseover }
- if let cellpadding = cellpadding { mergedAttributes["cellpadding"] = cellpadding }
- if let onmousedown = onmousedown { mergedAttributes["onmousedown"] = onmousedown }
- if let frameborder = frameborder { mergedAttributes["frameborder"] = frameborder }
- if let marginwidth = marginwidth { mergedAttributes["marginwidth"] = marginwidth }
- if let cellspacing = cellspacing { mergedAttributes["cellspacing"] = cellspacing }
- if let placeholder = placeholder { mergedAttributes["placeholder"] = placeholder }
- if let marginheight = marginheight { mergedAttributes["marginheight"] = marginheight }
- if let acceptCharset = acceptCharset { mergedAttributes["accept-charset"] = acceptCharset }
-
- for item in attrs.enumerated() {
- mergedAttributes.updateValue(item.element.1, forKey: item.element.0)
- }
-
- output = output + mergedAttributes.reduce("") { result, item in
- if let value = item.value {
- return result + " \(item.key)=\"\(value)\""
- } else {
- return result
- }
- }
-
- if let inner = inner {
- ScopesBuffer[Process.tid] = output + ">" + (inner) + "</" + node + ">"
- } else {
- let current = ScopesBuffer[Process.tid] ?? ""
- ScopesBuffer[Process.tid] = output + ">" + current + "</" + node + ">"
- }
-
- // Pop the attributes.
-
- idd = stackid
- dir = stackdir
- rel = stackrel
- rev = stackrev
- alt = stackalt
- forr = stackfor
- src = stacksrc
- type = stacktype
- href = stackhref
- text = stacktext
- abbr = stackabbr
- size = stacksize
- face = stackface
- char = stackchar
- cite = stackcite
- span = stackspan
- data = stackdata
- axis = stackaxis
- Name = stackName
- name = stackname
- code = stackcode
- link = stacklink
- lang = stacklang
- cols = stackcols
- rows = stackrows
- ismap = stackismap
- shape = stackshape
- style = stackstyle
- alink = stackalink
- width = stackwidth
- rules = stackrules
- align = stackalign
- frame = stackframe
- vlink = stackvlink
- deferr = stackdefer
- color = stackcolor
- media = stackmedia
- title = stacktitle
- scope = stackscope
- classs = stackclass
- value = stackvalue
- clear = stackclear
- start = stackstart
- label = stacklabel
- action = stackaction
- height = stackheight
- method = stackmethod
- acceptt = stackaccept
- object = stackobject
- scheme = stackscheme
- coords = stackcoords
- usemap = stackusemap
- onblur = stackonblur
- nohref = stacknohref
- nowrap = stacknowrap
- hspace = stackhspace
- border = stackborder
- valign = stackvalign
- vspace = stackvspace
- onload = stackonload
- target = stacktarget
- prompt = stackprompt
- onfocus = stackonfocus
- enctype = stackenctype
- onclick = stackonclick
- onkeyup = stackonkeyup
- profile = stackprofile
- version = stackversion
- onreset = stackonreset
- charset = stackcharset
- standby = stackstandby
- colspan = stackcolspan
- charoff = stackcharoff
- classid = stackclassid
- compact = stackcompact
- declare = stackdeclare
- rowspan = stackrowspan
- checked = stackchecked
- archive = stackarchive
- bgcolor = stackbgcolor
- content = stackcontent
- noshade = stacknoshade
- summary = stacksummary
- headers = stackheaders
- onselect = stackonselect
- readonly = stackreadonly
- tabindex = stacktabindex
- onchange = stackonchange
- noresize = stacknoresize
- disabled = stackdisabled
- longdesc = stacklongdesc
- codebase = stackcodebase
- language = stacklanguage
- datetime = stackdatetime
- selected = stackselected
- hreflang = stackhreflang
- onsubmit = stackonsubmit
- multiple = stackmultiple
- onunload = stackonunload
- codetype = stackcodetype
- scrolling = stackscrolling
- onkeydown = stackonkeydown
- maxlength = stackmaxlength
- valuetype = stackvaluetype
- accesskey = stackaccesskey
- onmouseup = stackonmouseup
- onkeypress = stackonkeypress
- ondblclick = stackondblclick
- onmouseout = stackonmouseout
- httpEquiv = stackhttpEquiv
- background = stackbackground
- onmousemove = stackonmousemove
- onmouseover = stackonmouseover
- cellpadding = stackcellpadding
- onmousedown = stackonmousedown
- frameborder = stackframeborder
- placeholder = stackplaceholder
- marginwidth = stackmarginwidth
- cellspacing = stackcellspacing
- marginheight = stackmarginheight
- acceptCharset = stackacceptCharset
-
- inner = stackinner
- }
|