Skip to content

Commit

Permalink
Fix return elements
Browse files Browse the repository at this point in the history
  • Loading branch information
Sergey Mashkov committed May 14, 2015
1 parent 77cc651 commit 9e51678
Show file tree
Hide file tree
Showing 3 changed files with 270 additions and 102 deletions.
222 changes: 195 additions & 27 deletions generate/src/main/kotlin/rules.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ val globalSuggestedAttributes = listOf(
"div" to "class",
"input" to "type",
"input" to "name"
).groupBy { it.first }.mapValues { it.getValue().map {it.second} }
).groupBy { it.first }.mapValues { it.getValue().map { it.second } }

val specialTypes = listOf(
"*.class" to AttributeType.STRING_SET
).groupBy { it.first }.mapValues { it.getValue().single().second }

fun specialTypeFor(tagName : String, attributeName : String) : AttributeType? =
fun specialTypeFor(tagName: String, attributeName: String): AttributeType? =
specialTypes[tagName + "." + attributeName] ?: specialTypes["*." + attributeName]

val wellKnownWords = listOf("span", "class", "enabled?", "edit(able)?",
Expand All @@ -33,66 +33,234 @@ val wellKnownWords = listOf("span", "class", "enabled?", "edit(able)?",
).map { Pattern.compile(it, Pattern.CASE_INSENSITIVE) }

val excludeAttributes = listOf("lang$").map { Pattern.compile(it, Pattern.CASE_INSENSITIVE) }
fun isAtrributeExcluded(name : String) = excludeAttributes.any { it.matcher(name).find() }
fun isAtrributeExcluded(name: String) = excludeAttributes.any { it.matcher(name).find() }

val knownTagClasses = """
HTMLCollection
HTMLOptionsCollection
HTMLDocument
HTMLElement
HTMLUnknownElement
HTMLHtmlElement
HTMLHeadElement
HTMLLinkElement
HTMLTitleElement
HTMLMetaElement
HTMLBaseElement
HTMLIsIndexElement
HTMLLinkElement
HTMLMetaElement
HTMLStyleElement
HTMLBodyElement
HTMLHeadingElement
HTMLParagraphElement
HTMLHRElement
HTMLPreElement
HTMLQuoteElement
HTMLOListElement
HTMLUListElement
HTMLLIElement
HTMLDListElement
HTMLDivElement
HTMLAnchorElement
HTMLDataElement
HTMLTimeElement
HTMLSpanElement
HTMLBRElement
HTMLModElement
HTMLIFrameElement
HTMLEmbedElement
HTMLObjectElement
HTMLParamElement
HTMLVideoElement
HTMLAudioElement
HTMLSourceElement
HTMLTrackElement
HTMLMediaElement
HTMLMapElement
HTMLAreaElement
HTMLTableElement
HTMLTableCaptionElement
HTMLTableColElement
HTMLTableSectionElement
HTMLTableRowElement
HTMLTableDataCellElement
HTMLTableHeaderCellElement
HTMLTableCellElement
HTMLFormElement
HTMLLabelElement
HTMLInputElement
HTMLButtonElement
HTMLSelectElement
HTMLDataListElement
HTMLOptGroupElement
HTMLOptionElement
HTMLInputElement
HTMLTextAreaElement
HTMLButtonElement
HTMLLabelElement
HTMLKeygenElement
HTMLOutputElement
HTMLProgressElement
HTMLMeterElement
HTMLFieldSetElement
HTMLLegendElement
HTMLUListElement
HTMLOListElement
HTMLDListElement
HTMLDirectoryElement
HTMLDetailsElement
HTMLMenuElement
HTMLLIElement
HTMLMenuItemElement
HTMLDialogElement
HTMLScriptElement
HTMLTemplateElement
HTMLCanvasElement
HTMLAppletElement
HTMLMarqueeElement
HTMLFrameSetElement
HTMLFrameElement
HTMLAnchorElement
HTMLAreaElement
HTMLBodyElement
HTMLBRElement
HTMLTableCaptionElement
HTMLTableColElement
HTMLDirectoryElement
HTMLDivElement
HTMLDListElement
HTMLEmbedElement
HTMLFontElement
HTMLHeadingElement
HTMLHRElement
HTMLHtmlElement
HTMLIFrameElement
HTMLImageElement
HTMLInputElement
HTMLLegendElement
HTMLLIElement
HTMLLinkElement
HTMLMenuElement
HTMLMetaElement
HTMLObjectElement
HTMLOListElement
HTMLParagraphElement
HTMLParamElement
HTMLPreElement
HTMLScriptElement
HTMLTableElement
HTMLTableSectionElement
HTMLTableCellElement
HTMLTableDataCellElement
HTMLTableRowElement
HTMLUListElement
HTMLElement
HTMLUnknownElement
HTMLHtmlElement
HTMLHeadElement
HTMLTitleElement
HTMLBaseElement
HTMLLinkElement
HTMLMetaElement
HTMLStyleElement
HTMLBodyElement
HTMLHeadingElement
HTMLQuoteElement
HTMLParagraphElement
HTMLHRElement
HTMLPreElement
HTMLQuoteElement
HTMLOListElement
HTMLUListElement
HTMLLIElement
HTMLDListElement
HTMLDivElement
HTMLAnchorElement
HTMLDataElement
HTMLTimeElement
HTMLSpanElement
HTMLBRElement
HTMLBaseFontElement
HTMLFontElement
HTMLHRElement
HTMLModElement
HTMLAnchorElement
HTMLPictureElement
HTMLSourceElement
HTMLImageElement
HTMLIFrameElement
HTMLEmbedElement
HTMLObjectElement
HTMLParamElement
HTMLAppletElement
HTMLVideoElement
HTMLAudioElement
HTMLSourceElement
HTMLTrackElement
HTMLMediaElement
HTMLMapElement
HTMLAreaElement
HTMLScriptElement
HTMLTableElement
HTMLTableCaptionElement
HTMLTableColElement
HTMLTableSectionElement
HTMLTableRowElement
HTMLTableDataCellElement
HTMLTableHeaderCellElement
HTMLTableCellElement
HTMLFormElement
HTMLLabelElement
HTMLInputElement
HTMLButtonElement
HTMLSelectElement
HTMLDataListElement
HTMLOptGroupElement
HTMLOptionElement
HTMLTextAreaElement
HTMLKeygenElement
HTMLOutputElement
HTMLProgressElement
HTMLMeterElement
HTMLFieldSetElement
HTMLLegendElement
HTMLDetailsElement
HTMLMenuElement
HTMLMenuItemElement
HTMLDialogElement
HTMLScriptElement
HTMLTemplateElement
HTMLCanvasElement
HTMLAppletElement
HTMLMarqueeElement
HTMLFrameSetElement
HTMLFrameElement
HTMLAnchorElement
HTMLAreaElement
HTMLBodyElement
HTMLBRElement
HTMLTableCaptionElement
HTMLTableColElement
HTMLDirectoryElement
HTMLDivElement
HTMLDListElement
HTMLEmbedElement
HTMLFontElement
HTMLHeadingElement
HTMLHRElement
HTMLHtmlElement
HTMLIFrameElement
HTMLCanvasElement
""".split("\\s+").toSet()
HTMLImageElement
HTMLInputElement
HTMLLegendElement
HTMLLIElement
HTMLLinkElement
HTMLMenuElement
HTMLMetaElement
HTMLObjectElement
HTMLOListElement
HTMLParagraphElement
HTMLParamElement
HTMLPreElement
HTMLScriptElement
HTMLTableElement
HTMLTableSectionElement
HTMLTableCellElement
HTMLTableDataCellElement
HTMLTableRowElement
HTMLUListElement
""".split("\\s+".toRegex()).toSet()

val replacements = listOf("img" to "image", "h\\d" to "heading", "p" to "paragraph", "a" to "anchor", "blockquote" to "quote", "td" to "TableCell", "tr" to "TableRow", "th" to "TableCol")
val replacements = listOf(
"img" to "image",
"h\\d" to "heading",
"p" to "paragraph",
"a" to "anchor",
"blockquote" to "quote",
"td" to "TableCell",
"tr" to "TableRow",
"th" to "TableCol",
"thead" to "TableSection",
"tbody" to "TableSection",
"tfoot" to "TableSection"
)
4 changes: 2 additions & 2 deletions generate/src/main/kotlin/tagsgen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ private fun <O : Appendable> O.tagAttributeVar(attribute: AttributeInfo): Attrib

fun probeType(htmlClassName : String) : Boolean = htmlClassName in knownTagClasses

fun tagCandidates(tag : TagInfo) = (listOf(tag.safeName) + replacements.map { tag.safeName.replaceAll(it.first, it.second) }).flatMap { listOf(it.capitalize(), it.toUpperCase()) }
fun tagCandidates(tag : TagInfo) = (listOf(tag.safeName) + replacements.map { tag.safeName.replace(it.first.toRegex(), it.second) }).flatMap { listOf(it.capitalize(), it.toUpperCase()) }.distinct()

fun getTagResultClass(tag: TagInfo) =
tagCandidates(tag)
Expand Down Expand Up @@ -165,7 +165,7 @@ fun <O : Appendable> O.htmlTagEnumBuilderMethod(receiver : String, tag : TagInfo
}

fun <O : Appendable> O.indent(stops : Int = 1) {
for (i in stops.indices) {
for (i in 0..stops - 1) {
append(" ")
}
}
Expand Down
Loading

0 comments on commit 9e51678

Please sign in to comment.