adoption-inner-loop ( document formatting block -- last-node bookmark )


Vocabulary
html5

Inputs
documentan object
formattingan object
blockan object


Outputs
last-nodean object
bookmarkan object


Definition


:: adoption-inner-loop
( document formatting block -- last-node bookmark )
document active-formatting-elements>> :> entries document
open-elements>> :> stack formatting entries node-index
:> bookmark! block stack node-index
:> cursor! block :> last-node! 0 :> count! f :> done!
[ done not ] [
cursor 1 - cursor! cursor stack nth
:> node node formatting eq?
[ t done! ] [
count 1 + count! node entries node-index
:> entry-index! count 3 > entry-index f = not and [
entry-index bookmark <
[ bookmark 1 - bookmark! ] when
node entries remove-node f entry-index!
] when entry-index [
drop
node clone-formatting-element :> replacement
replacement entry-index entries set-nth
replacement cursor stack set-nth
last-node block eq?
[ entry-index 1 + bookmark! ] when
last-node detach-node
last-node replacement attach-node
replacement last-node!
] [ node stack remove-node ] if*
] if
] while last-node bookmark ;