@@ -37,7 +37,6 @@ import org.jetbrains.dokka.model.doc.Cite
3737import org.jetbrains.dokka.model.doc.CodeBlock
3838import org.jetbrains.dokka.model.doc.CodeInline
3939import org.jetbrains.dokka.model.doc.CustomDocTag
40- import org.jetbrains.dokka.model.doc.CustomTagWrapper
4140import org.jetbrains.dokka.model.doc.Dd
4241import org.jetbrains.dokka.model.doc.Description
4342import org.jetbrains.dokka.model.doc.Dfn
@@ -162,136 +161,143 @@ class OudsComponentDocumentableTransformer(val context: DokkaContext) : Document
162161 val designGuidelinesRegex = " Design guidelines: (.*)" .toRegex()
163162
164163 return documentation.mapValues { (_, node) ->
165- val nodeChildren = node.children.flatMap { tagWrapper ->
164+ val nodeChildren = node.children.map { tagWrapper ->
166165 if (tagWrapper is Description ) {
167- val tagWrapperRoot = tagWrapper.root
168- .removeDescendant { designVersionRegex.find(it) != null }
169- .removeDescendant { designGuidelinesRegex.find(it) != null }
170-
171166 val version = designVersionRegex.find(tagWrapper.root)?.groupValues?.getOrNull(1 )
172167 val guidelinesBlockquote = tagWrapper.root.firstMemberOfTypeOrNull<BlockQuote > { designGuidelinesRegex.find(it) != null }
173168 val guidelinesAnchor = guidelinesBlockquote?.firstMemberOfTypeOrNull<A >()
174169 val guidelinesText = guidelinesAnchor?.firstMemberOfTypeOrNull<Text >()?.body
175170 val guidelinesHref = guidelinesAnchor?.params[" href" ]
176- val designTagWrapper = if (version != null && guidelinesText != null && guidelinesHref != null ) {
177- getDesignTagWrapper (version, guidelinesText, guidelinesHref)
171+ val designDocTag = if (version != null && guidelinesText != null && guidelinesHref != null ) {
172+ getDesignDocTag (version, guidelinesText, guidelinesHref)
178173 } else {
179174 null
180175 }
181176
182- listOfNotNull(tagWrapper.copy(root = tagWrapperRoot), designTagWrapper)
177+ val tagWrapperRoot = tagWrapper.root
178+ .removeDescendant { designVersionRegex.find(it) != null }
179+ .removeDescendant { designGuidelinesRegex.find(it) != null }
180+ .run { if (designDocTag != null ) addChild(designDocTag) else this }
181+
182+ tagWrapper.copy(root = tagWrapperRoot)
183183 } else {
184- listOf ( tagWrapper)
184+ tagWrapper
185185 }
186186 }
187187 node.copy(children = nodeChildren)
188188 }
189189 }
190190
191- private fun getDesignTagWrapper (version : String , guidelinesText : String , guidelinesHref : String ): CustomTagWrapper {
191+ private fun getDesignDocTag (version : String , guidelinesText : String , guidelinesHref : String ): DocTag {
192192 val guidelinesBody = " <a href=\" $guidelinesHref \" class=\" external\" target=\" _blank\" >$guidelinesText </a>"
193193 val guidelinesParams = mapOf (" content-type" to " html" )
194194
195- return CustomTagWrapper (
196- CustomDocTag (
197- listOf (
198- Table (
199- listOf (
200- Tr (
201- listOf (
202- Td (listOf (Text (" Guidelines" ))),
203- Td (listOf (Text (guidelinesBody, params = guidelinesParams)))
204- )
205- ),
206- Tr (
207- listOf (
208- Td (listOf (Text (" Version" ))),
209- Td (listOf (Text (version)))
210- )
195+ return Div (
196+ listOf (
197+ H4 (listOf (Text (" Design" ))),
198+ Table (
199+ listOf (
200+ Tr (
201+ listOf (
202+ Td (listOf (Text (" Guidelines" ))),
203+ Td (listOf (Text (guidelinesBody, params = guidelinesParams)))
204+ )
205+ ),
206+ Tr (
207+ listOf (
208+ Td (listOf (Text (" Version" ))),
209+ Td (listOf (Text (version)))
211210 )
212211 )
213212 )
214- ),
215- name = " MARKDOWN_FILE"
216- ),
217- OudsComponentTagContentProvider .COMPONENT_DESIGN_TAG_NAME
213+ )
214+ )
218215 )
219216 }
220217
221- private fun DocTag.removeDescendant (predicate : (DocTag ) -> Boolean ): DocTag {
218+ private fun <T : DocTag > T.addChild (child : DocTag ): T {
219+ return genericCopy(children + child)
220+ }
221+
222+ private fun <T : DocTag > T.removeDescendant (predicate : (DocTag ) -> Boolean ): T {
222223 val filteredChildren = children.filterNot(predicate).map { it.removeDescendant(predicate) }
224+ return genericCopy(filteredChildren)
225+ }
226+
227+ private fun <T : DocTag > T.genericCopy (children : List <DocTag >): T {
228+ @Suppress(" UNCHECKED_CAST" )
223229 return when (this ) {
224- is A -> copy(children = filteredChildren )
225- is B -> copy(children = filteredChildren )
226- is Big -> copy(children = filteredChildren )
227- is BlockQuote -> copy(children = filteredChildren )
230+ is A -> copy(children = children )
231+ is B -> copy(children = children )
232+ is Big -> copy(children = children )
233+ is BlockQuote -> copy(children = children )
228234 Br -> this
229- is Caption -> copy(children = filteredChildren )
230- is Cite -> copy(children = filteredChildren )
231- is CodeBlock -> copy(children = filteredChildren )
232- is CodeInline -> copy(children = filteredChildren )
233- is CustomDocTag -> copy(children = filteredChildren )
234- is Dd -> copy(children = filteredChildren )
235- is Dfn -> copy(children = filteredChildren )
236- is Dir -> copy(children = filteredChildren )
237- is Div -> copy(children = filteredChildren )
238- is Dl -> copy(children = filteredChildren )
239- is DocumentationLink -> copy(children = filteredChildren )
240- is Dt -> copy(children = filteredChildren )
241- is Em -> copy(children = filteredChildren )
242- is Font -> copy(children = filteredChildren )
243- is Footer -> copy(children = filteredChildren )
244- is Frame -> copy(children = filteredChildren )
245- is FrameSet -> copy(children = filteredChildren )
246- is H1 -> copy(children = filteredChildren )
247- is H2 -> copy(children = filteredChildren )
248- is H3 -> copy(children = filteredChildren )
249- is H4 -> copy(children = filteredChildren )
250- is H5 -> copy(children = filteredChildren )
251- is H6 -> copy(children = filteredChildren )
252- is Head -> copy(children = filteredChildren )
253- is Header -> copy(children = filteredChildren )
235+ is Caption -> copy(children = children )
236+ is Cite -> copy(children = children )
237+ is CodeBlock -> copy(children = children )
238+ is CodeInline -> copy(children = children )
239+ is CustomDocTag -> copy(children = children )
240+ is Dd -> copy(children = children )
241+ is Dfn -> copy(children = children )
242+ is Dir -> copy(children = children )
243+ is Div -> copy(children = children )
244+ is Dl -> copy(children = children )
245+ is DocumentationLink -> copy(children = children )
246+ is Dt -> copy(children = children )
247+ is Em -> copy(children = children )
248+ is Font -> copy(children = children )
249+ is Footer -> copy(children = children )
250+ is Frame -> copy(children = children )
251+ is FrameSet -> copy(children = children )
252+ is H1 -> copy(children = children )
253+ is H2 -> copy(children = children )
254+ is H3 -> copy(children = children )
255+ is H4 -> copy(children = children )
256+ is H5 -> copy(children = children )
257+ is H6 -> copy(children = children )
258+ is Head -> copy(children = children )
259+ is Header -> copy(children = children )
254260 HorizontalRule -> this
255- is Html -> copy(children = filteredChildren )
256- is I -> copy(children = filteredChildren )
257- is IFrame -> copy(children = filteredChildren )
258- is Img -> copy(children = filteredChildren )
259- is Index -> copy(children = filteredChildren )
260- is Input -> copy(children = filteredChildren )
261- is Li -> copy(children = filteredChildren )
262- is Link -> copy(children = filteredChildren )
263- is Listing -> copy(children = filteredChildren )
264- is Main -> copy(children = filteredChildren )
265- is Menu -> copy(children = filteredChildren )
266- is Meta -> copy(children = filteredChildren )
267- is Nav -> copy(children = filteredChildren )
268- is NoFrames -> copy(children = filteredChildren )
269- is NoScript -> copy(children = filteredChildren )
270- is Ol -> copy(children = filteredChildren )
271- is P -> copy(children = filteredChildren )
272- is Pre -> copy(children = filteredChildren )
273- is Script -> copy(children = filteredChildren )
274- is Section -> copy(children = filteredChildren )
275- is Small -> copy(children = filteredChildren )
276- is Span -> copy(children = filteredChildren )
277- is Strikethrough -> copy(children = filteredChildren )
278- is Strong -> copy(children = filteredChildren )
279- is Sub -> copy(children = filteredChildren )
280- is Sup -> copy(children = filteredChildren )
281- is TBody -> copy(children = filteredChildren )
282- is TFoot -> copy(children = filteredChildren )
283- is THead -> copy(children = filteredChildren )
284- is Table -> copy(children = filteredChildren )
285- is Td -> copy(children = filteredChildren )
286- is Text -> copy(children = filteredChildren )
287- is Th -> copy(children = filteredChildren )
288- is Title -> copy(children = filteredChildren )
289- is Tr -> copy(children = filteredChildren )
290- is Tt -> copy(children = filteredChildren )
291- is U -> copy(children = filteredChildren )
292- is Ul -> copy(children = filteredChildren )
293- is Var -> copy(children = filteredChildren )
294- }
261+ is Html -> copy(children = children )
262+ is I -> copy(children = children )
263+ is IFrame -> copy(children = children )
264+ is Img -> copy(children = children )
265+ is Index -> copy(children = children )
266+ is Input -> copy(children = children )
267+ is Li -> copy(children = children )
268+ is Link -> copy(children = children )
269+ is Listing -> copy(children = children )
270+ is Main -> copy(children = children )
271+ is Menu -> copy(children = children )
272+ is Meta -> copy(children = children )
273+ is Nav -> copy(children = children )
274+ is NoFrames -> copy(children = children )
275+ is NoScript -> copy(children = children )
276+ is Ol -> copy(children = children )
277+ is P -> copy(children = children )
278+ is Pre -> copy(children = children )
279+ is Script -> copy(children = children )
280+ is Section -> copy(children = children )
281+ is Small -> copy(children = children )
282+ is Span -> copy(children = children )
283+ is Strikethrough -> copy(children = children )
284+ is Strong -> copy(children = children )
285+ is Sub -> copy(children = children )
286+ is Sup -> copy(children = children )
287+ is TBody -> copy(children = children )
288+ is TFoot -> copy(children = children )
289+ is THead -> copy(children = children )
290+ is Table -> copy(children = children )
291+ is Td -> copy(children = children )
292+ is Text -> copy(children = children )
293+ is Th -> copy(children = children )
294+ is Title -> copy(children = children )
295+ is Tr -> copy(children = children )
296+ is Tt -> copy(children = children )
297+ is U -> copy(children = children )
298+ is Ul -> copy(children = children )
299+ is Var -> copy(children = children )
300+ } as T
295301 }
296302
297303 private fun Regex.find (docTag : DocTag , startIndex : Int = 0): MatchResult ? {
0 commit comments