1use std::iter::once;
2
3use document_tree::HasChildren;
4use document_tree::element_categories as c;
5use document_tree::elements as e;
6
7pub trait IteratorMaker<This, C>: FnMut(This, C) -> Self::Iter {
13 type Iter: Iterator<Item = C>;
14}
15
16impl<F, This, C, Iter> IteratorMaker<This, C> for F
17where
18 F: ?Sized + FnMut(This, C) -> Iter,
19 Iter: Iterator<Item = C>,
20{
21 type Iter = Iter;
22}
23
24#[inline]
25fn box_iter<'a, I>(i: impl Iterator<Item = I> + 'a) -> Box<dyn Iterator<Item = I> + 'a> {
26 Box::new(i)
27}
28
29pub trait Transform {
34 fn transform_children<C, E>(
52 &mut self,
53 e: &mut E,
54 mut meth: impl for<'a> IteratorMaker<&'a mut Self, C>,
55 ) where
56 E: HasChildren<C>,
57 {
58 let mut new = Vec::new();
59 for c in e.children_mut().drain(..) {
60 new.extend(meth(self, c));
61 }
62 e.children_mut().extend(new);
63 }
64
65 #[must_use]
67 fn transform(&mut self, mut d: e::Document) -> e::Document {
68 self.transform_children(&mut d, Self::transform_structural_sub_element);
69 d
70 }
71
72 #[must_use]
77 fn transform_structural_sub_element(
78 &mut self,
79 c: c::StructuralSubElement,
80 ) -> impl Iterator<Item = c::StructuralSubElement> {
81 use c::StructuralSubElement as S;
82 match c {
83 S::Title(e) => box_iter(self.transform_title(*e).map(Into::into)),
84 S::Subtitle(e) => box_iter(self.transform_subtitle(*e).map(S::from)),
85 S::Decoration(e) => box_iter(self.transform_decoration(*e)),
86 S::Docinfo(e) => box_iter(self.transform_docinfo(*e)),
87 S::SubStructure(e) => box_iter(self.transform_substructure(*e).map(S::from)),
88 }
89 }
90 #[must_use]
91 fn transform_substructure(
92 &mut self,
93 c: c::SubStructure,
94 ) -> impl Iterator<Item = c::SubStructure> {
95 use c::SubStructure as S;
96 match c {
97 S::Topic(e) => box_iter(self.transform_topic(*e).map(Into::into)),
98 S::Sidebar(e) => box_iter(self.transform_sidebar(*e)),
99 S::Transition(e) => box_iter(self.transform_transition(*e)),
100 S::Section(e) => box_iter(self.transform_section(*e)),
101 S::BodyElement(e) => box_iter(self.transform_body_element(*e).map(Into::into)),
102 }
103 }
104 #[must_use]
105 fn transform_body_element(
106 &mut self,
107 c: c::BodyElement,
108 ) -> impl Iterator<Item = c::BodyElement> {
109 use c::BodyElement as B;
110 match c {
111 B::Paragraph(e) => box_iter(self.transform_paragraph(*e)),
112 B::LiteralBlock(e) => box_iter(self.transform_literal_block(*e)),
113 B::DoctestBlock(e) => box_iter(self.transform_doctest_block(*e)),
114 B::MathBlock(e) => box_iter(self.transform_math_block(*e)),
115 B::Rubric(e) => box_iter(self.transform_rubric(*e)),
116 B::SubstitutionDefinition(e) => box_iter(self.transform_substitution_definition(*e)),
117 B::Comment(e) => box_iter(self.transform_comment(*e)),
118 B::Pending(e) => box_iter(self.transform_pending(*e)),
119 B::Target(e) => box_iter(self.transform_target(*e)),
120 B::Raw(e) => box_iter(self.transform_raw(*e)),
121 B::Image(e) => box_iter(self.transform_image(*e)),
122 B::Compound(e) => box_iter(self.transform_compound(*e)),
123 B::Container(e) => box_iter(self.transform_container(*e)),
124 B::BulletList(e) => box_iter(self.transform_bullet_list(*e)),
125 B::EnumeratedList(e) => box_iter(self.transform_enumerated_list(*e)),
126 B::DefinitionList(e) => box_iter(self.transform_definition_list(*e)),
127 B::FieldList(e) => box_iter(self.transform_field_list(*e)),
128 B::OptionList(e) => box_iter(self.transform_option_list(*e)),
129 B::LineBlock(e) => box_iter(self.transform_line_block(*e).map(Into::into)),
130 B::BlockQuote(e) => box_iter(self.transform_block_quote(*e)),
131 B::Admonition(e) => box_iter(self.transform_admonition(*e)),
132 B::Attention(e) => box_iter(self.transform_attention(*e)),
133 B::Hint(e) => box_iter(self.transform_hint(*e)),
134 B::Note(e) => box_iter(self.transform_note(*e)),
135 B::Caution(e) => box_iter(self.transform_caution(*e)),
136 B::Danger(e) => box_iter(self.transform_danger(*e)),
137 B::Error(e) => box_iter(self.transform_error(*e)),
138 B::Important(e) => box_iter(self.transform_important(*e)),
139 B::Tip(e) => box_iter(self.transform_tip(*e)),
140 B::Warning(e) => box_iter(self.transform_warning(*e)),
141 B::Footnote(e) => box_iter(self.transform_footnote(*e)),
142 B::Citation(e) => box_iter(self.transform_citation(*e)),
143 B::SystemMessage(e) => box_iter(self.transform_system_message(*e)),
144 B::Figure(e) => box_iter(self.transform_figure(*e)),
145 B::Table(e) => box_iter(self.transform_table(*e)),
146 }
147 }
148 #[must_use]
149 fn transform_bibliographic_element(
150 &mut self,
151 c: c::BibliographicElement,
152 ) -> impl Iterator<Item = c::BibliographicElement> {
153 use c::BibliographicElement as B;
154 match c {
155 B::Authors(e) => box_iter(self.transform_authors(*e)),
156 B::Author(e) => box_iter(self.transform_author(*e).map(Into::into)),
157 B::Organization(e) => box_iter(self.transform_organization(*e).map(Into::into)),
158 B::Address(e) => box_iter(self.transform_address(*e).map(Into::into)),
159 B::Contact(e) => box_iter(self.transform_contact(*e).map(Into::into)),
160 B::Version(e) => box_iter(self.transform_version(*e)),
161 B::Revision(e) => box_iter(self.transform_revision(*e)),
162 B::Status(e) => box_iter(self.transform_status(*e)),
163 B::Date(e) => box_iter(self.transform_date(*e)),
164 B::Copyright(e) => box_iter(self.transform_copyright(*e)),
165 B::Field(e) => box_iter(self.transform_field(*e).map(Into::into)),
166 }
167 }
168 #[must_use]
169 fn transform_text_or_inline_element(
170 &mut self,
171 c: c::TextOrInlineElement,
172 ) -> impl Iterator<Item = c::TextOrInlineElement> {
173 use c::TextOrInlineElement as T;
174 match c {
175 T::String(e) => box_iter(self.transform_string(*e).map(Into::into)),
176 T::Emphasis(e) => box_iter(self.transform_emphasis(*e)),
177 T::Strong(e) => box_iter(self.transform_strong(*e)),
178 T::Literal(e) => box_iter(self.transform_literal(*e)),
179 T::Reference(e) => box_iter(self.transform_reference(*e)),
180 T::FootnoteReference(e) => box_iter(self.transform_footnote_reference(*e)),
181 T::CitationReference(e) => box_iter(self.transform_citation_reference(*e)),
182 T::SubstitutionReference(e) => box_iter(self.transform_substitution_reference(*e)),
183 T::TitleReference(e) => box_iter(self.transform_title_reference(*e)),
184 T::Abbreviation(e) => box_iter(self.transform_abbreviation(*e)),
185 T::Acronym(e) => box_iter(self.transform_acronym(*e)),
186 T::Superscript(e) => box_iter(self.transform_superscript(*e)),
187 T::Subscript(e) => box_iter(self.transform_subscript(*e)),
188 T::Inline(e) => box_iter(self.transform_inline(*e)),
189 T::Problematic(e) => box_iter(self.transform_problematic(*e)),
190 T::Generated(e) => box_iter(self.transform_generated(*e)),
191 T::Math(e) => box_iter(self.transform_math(*e)),
192 T::TargetInline(e) => box_iter(self.transform_target_inline(*e)),
193 T::RawInline(e) => box_iter(self.transform_raw_inline(*e)),
194 T::ImageInline(e) => box_iter(self.transform_image_inline(*e)),
195 }
196 }
197 #[must_use]
198 fn transform_author_info(&mut self, c: c::AuthorInfo) -> impl Iterator<Item = c::AuthorInfo> {
199 use c::AuthorInfo as A;
200 match c {
201 A::Author(e) => box_iter(self.transform_author(*e)),
202 A::Organization(e) => box_iter(self.transform_organization(*e)),
203 A::Address(e) => box_iter(self.transform_address(*e)),
204 A::Contact(e) => box_iter(self.transform_contact(*e)),
205 }
206 }
207 #[must_use]
208 fn transform_decoration_element(
209 &mut self,
210 c: c::DecorationElement,
211 ) -> impl Iterator<Item = c::DecorationElement> {
212 use c::DecorationElement as D;
213 match c {
214 D::Header(e) => box_iter(self.transform_header(*e)),
215 D::Footer(e) => box_iter(self.transform_footer(*e)),
216 }
217 }
218 #[must_use]
219 fn transform_sub_topic(&mut self, c: c::SubTopic) -> impl Iterator<Item = c::SubTopic> {
220 use c::SubTopic as S;
221 match c {
222 S::Title(e) => box_iter(self.transform_title(*e).map(Into::into)),
223 S::BodyElement(e) => box_iter(self.transform_body_element(*e).map(Into::into)),
224 }
225 }
226 #[must_use]
227 fn transform_sub_sidebar(&mut self, c: c::SubSidebar) -> impl Iterator<Item = c::SubSidebar> {
228 use c::SubSidebar as S;
229 match c {
230 S::Topic(e) => box_iter(self.transform_topic(*e).map(Into::into)),
231 S::Title(e) => box_iter(self.transform_title(*e).map(Into::into)),
232 S::Subtitle(e) => box_iter(self.transform_subtitle(*e)),
233 S::BodyElement(e) => box_iter(self.transform_body_element(*e).map(Into::into)),
234 }
235 }
236 #[must_use]
237 fn transform_sub_dl_item(&mut self, c: c::SubDLItem) -> impl Iterator<Item = c::SubDLItem> {
238 use c::SubDLItem as S;
239 match c {
240 S::Term(e) => box_iter(self.transform_term(*e)),
241 S::Classifier(e) => box_iter(self.transform_classifier(*e)),
242 S::Definition(e) => box_iter(self.transform_definition(*e)),
243 }
244 }
245 #[must_use]
246 fn transform_sub_field(&mut self, c: c::SubField) -> impl Iterator<Item = c::SubField> {
247 use c::SubField as S;
248 match c {
249 S::FieldName(e) => box_iter(self.transform_field_name(*e)),
250 S::FieldBody(e) => box_iter(self.transform_field_body(*e)),
251 }
252 }
253 #[must_use]
254 fn transform_sub_option_list_item(
255 &mut self,
256 c: c::SubOptionListItem,
257 ) -> impl Iterator<Item = c::SubOptionListItem> {
258 use c::SubOptionListItem as S;
259 match c {
260 S::OptionGroup(e) => box_iter(self.transform_option_group(*e)),
261 S::Description(e) => box_iter(self.transform_description(*e)),
262 }
263 }
264 #[must_use]
265 fn transform_sub_option(&mut self, c: c::SubOption) -> impl Iterator<Item = c::SubOption> {
266 use c::SubOption as S;
267 match c {
268 S::OptionString(e) => box_iter(self.transform_option_string(*e)),
269 S::OptionArgument(e) => box_iter(self.transform_option_argument(*e)),
270 }
271 }
272 #[must_use]
273 fn transform_sub_line_block(
274 &mut self,
275 c: c::SubLineBlock,
276 ) -> impl Iterator<Item = c::SubLineBlock> {
277 use c::SubLineBlock as S;
278 match c {
279 S::LineBlock(e) => box_iter(self.transform_line_block(*e).map(Into::into)),
280 S::Line(e) => box_iter(self.transform_line(*e)),
281 }
282 }
283 #[must_use]
284 fn transform_sub_block_quote(
285 &mut self,
286 c: c::SubBlockQuote,
287 ) -> impl Iterator<Item = c::SubBlockQuote> {
288 use c::SubBlockQuote as S;
289 match c {
290 S::Attribution(e) => box_iter(self.transform_attribution(*e)),
291 S::BodyElement(e) => box_iter(self.transform_body_element(*e).map(Into::into)),
292 }
293 }
294 #[must_use]
295 fn transform_sub_footnote(
296 &mut self,
297 c: c::SubFootnote,
298 ) -> impl Iterator<Item = c::SubFootnote> {
299 use c::SubFootnote as S;
300 match c {
301 S::Label(e) => box_iter(self.transform_label(*e)),
302 S::BodyElement(e) => box_iter(self.transform_body_element(*e).map(Into::into)),
303 }
304 }
305 #[must_use]
306 fn transform_sub_figure(&mut self, c: c::SubFigure) -> impl Iterator<Item = c::SubFigure> {
307 use c::SubFigure as S;
308 match c {
309 S::Caption(e) => box_iter(self.transform_caption(*e)),
310 S::Legend(e) => box_iter(self.transform_legend(*e)),
311 S::BodyElement(e) => box_iter(self.transform_body_element(*e).map(Into::into)),
312 }
313 }
314 #[must_use]
315 fn transform_sub_table(&mut self, c: c::SubTable) -> impl Iterator<Item = c::SubTable> {
316 use c::SubTable as S;
317 match c {
318 S::Title(e) => box_iter(self.transform_title(*e).map(Into::into)),
319 S::TableGroup(e) => box_iter(self.transform_table_group(*e)),
320 }
321 }
322 #[must_use]
323 fn transform_sub_table_group(
324 &mut self,
325 c: c::SubTableGroup,
326 ) -> impl Iterator<Item = c::SubTableGroup> {
327 use c::SubTableGroup as S;
328 match c {
329 S::TableColspec(e) => box_iter(self.transform_table_colspec(*e)),
330 S::TableHead(e) => box_iter(self.transform_table_head(*e)),
331 S::TableBody(e) => box_iter(self.transform_table_body(*e)),
332 }
333 }
334
335 #[must_use]
341 fn transform_section(&mut self, mut e: e::Section) -> impl Iterator<Item = c::SubStructure> {
342 self.transform_children(&mut e, Self::transform_structural_sub_element);
343 once(e.into())
344 }
345 #[must_use]
346 fn transform_topic(&mut self, mut e: e::Topic) -> impl Iterator<Item = e::Topic> {
348 self.transform_children(&mut e, Self::transform_sub_topic);
349 once(e)
350 }
351 #[must_use]
352 fn transform_sidebar(&mut self, mut e: e::Sidebar) -> impl Iterator<Item = c::SubStructure> {
353 self.transform_children(&mut e, Self::transform_sub_sidebar);
354 once(e.into())
355 }
356
357 #[must_use]
359 fn transform_title(&mut self, mut e: e::Title) -> impl Iterator<Item = e::Title> {
360 self.transform_children(&mut e, Self::transform_text_or_inline_element);
361 once(e)
362 }
363 #[must_use]
364 fn transform_subtitle(&mut self, mut e: e::Subtitle) -> impl Iterator<Item = c::SubSidebar> {
365 self.transform_children(&mut e, Self::transform_text_or_inline_element);
366 once(e.into())
367 }
368 #[must_use]
369 fn transform_decoration(
370 &mut self,
371 mut e: e::Decoration,
372 ) -> impl Iterator<Item = c::StructuralSubElement> {
373 self.transform_children(&mut e, Self::transform_decoration_element);
374 once(e.into())
375 }
376 #[must_use]
377 fn transform_docinfo(
378 &mut self,
379 mut e: e::Docinfo,
380 ) -> impl Iterator<Item = c::StructuralSubElement> {
381 self.transform_children(&mut e, Self::transform_bibliographic_element);
382 once(e.into())
383 }
384 #[must_use]
385 fn transform_transition(&mut self, e: e::Transition) -> impl Iterator<Item = c::SubStructure> {
386 once(e.into())
387 }
388
389 #[must_use]
391 fn transform_authors(
392 &mut self,
393 mut e: e::Authors,
394 ) -> impl Iterator<Item = c::BibliographicElement> {
395 self.transform_children(&mut e, Self::transform_author_info);
396 once(e.into())
397 }
398 #[must_use]
399 fn transform_author(&mut self, mut e: e::Author) -> impl Iterator<Item = c::AuthorInfo> {
400 self.transform_children(&mut e, Self::transform_text_or_inline_element);
401 once(e.into())
402 }
403 #[must_use]
404 fn transform_organization(
405 &mut self,
406 mut e: e::Organization,
407 ) -> impl Iterator<Item = c::AuthorInfo> {
408 self.transform_children(&mut e, Self::transform_text_or_inline_element);
409 once(e.into())
410 }
411 #[must_use]
412 fn transform_address(&mut self, mut e: e::Address) -> impl Iterator<Item = c::AuthorInfo> {
413 self.transform_children(&mut e, Self::transform_text_or_inline_element);
414 once(e.into())
415 }
416 #[must_use]
417 fn transform_contact(&mut self, mut e: e::Contact) -> impl Iterator<Item = c::AuthorInfo> {
418 self.transform_children(&mut e, Self::transform_text_or_inline_element);
419 once(e.into())
420 }
421 #[must_use]
422 fn transform_version(
423 &mut self,
424 mut e: e::Version,
425 ) -> impl Iterator<Item = c::BibliographicElement> {
426 self.transform_children(&mut e, Self::transform_text_or_inline_element);
427 once(e.into())
428 }
429 #[must_use]
430 fn transform_revision(
431 &mut self,
432 mut e: e::Revision,
433 ) -> impl Iterator<Item = c::BibliographicElement> {
434 self.transform_children(&mut e, Self::transform_text_or_inline_element);
435 once(e.into())
436 }
437 #[must_use]
438 fn transform_status(
439 &mut self,
440 mut e: e::Status,
441 ) -> impl Iterator<Item = c::BibliographicElement> {
442 self.transform_children(&mut e, Self::transform_text_or_inline_element);
443 once(e.into())
444 }
445 #[must_use]
446 fn transform_date(&mut self, mut e: e::Date) -> impl Iterator<Item = c::BibliographicElement> {
447 self.transform_children(&mut e, Self::transform_text_or_inline_element);
448 once(e.into())
449 }
450 #[must_use]
451 fn transform_copyright(
452 &mut self,
453 mut e: e::Copyright,
454 ) -> impl Iterator<Item = c::BibliographicElement> {
455 self.transform_children(&mut e, Self::transform_text_or_inline_element);
456 once(e.into())
457 }
458 #[must_use]
459 fn transform_field(&mut self, mut e: e::Field) -> impl Iterator<Item = e::Field> {
460 self.transform_children(&mut e, Self::transform_sub_field);
461 once(e)
462 }
463
464 #[must_use]
466 fn transform_header(&mut self, mut e: e::Header) -> impl Iterator<Item = c::DecorationElement> {
467 self.transform_children(&mut e, Self::transform_body_element);
468 once(e.into())
469 }
470 #[must_use]
471 fn transform_footer(&mut self, mut e: e::Footer) -> impl Iterator<Item = c::DecorationElement> {
472 self.transform_children(&mut e, Self::transform_body_element);
473 once(e.into())
474 }
475
476 #[must_use]
478 fn transform_paragraph(&mut self, mut e: e::Paragraph) -> impl Iterator<Item = c::BodyElement> {
479 self.transform_children(&mut e, Self::transform_text_or_inline_element);
480 once(e.into())
481 }
482 #[must_use]
483 fn transform_literal_block(
484 &mut self,
485 mut e: e::LiteralBlock,
486 ) -> impl Iterator<Item = c::BodyElement> {
487 self.transform_children(&mut e, Self::transform_text_or_inline_element);
488 once(e.into())
489 }
490 #[must_use]
491 fn transform_doctest_block(
492 &mut self,
493 mut e: e::DoctestBlock,
494 ) -> impl Iterator<Item = c::BodyElement> {
495 self.transform_children(&mut e, Self::transform_text_or_inline_element);
496 once(e.into())
497 }
498 #[must_use]
499 fn transform_math_block(
500 &mut self,
501 mut e: e::MathBlock,
502 ) -> impl Iterator<Item = c::BodyElement> {
503 self.transform_children(&mut e, Self::transform_string);
504 once(e.into())
505 }
506 #[must_use]
507 fn transform_rubric(&mut self, mut e: e::Rubric) -> impl Iterator<Item = c::BodyElement> {
508 self.transform_children(&mut e, Self::transform_text_or_inline_element);
509 once(e.into())
510 }
511 #[must_use]
512 fn transform_substitution_definition(
513 &mut self,
514 mut e: e::SubstitutionDefinition,
515 ) -> impl Iterator<Item = c::BodyElement> {
516 self.transform_children(&mut e, Self::transform_text_or_inline_element);
517 once(e.into())
518 }
519 #[must_use]
520 fn transform_comment(&mut self, mut e: e::Comment) -> impl Iterator<Item = c::BodyElement> {
521 self.transform_children(&mut e, Self::transform_text_or_inline_element);
522 once(e.into())
523 }
524 #[must_use]
525 fn transform_pending(&mut self, e: e::Pending) -> impl Iterator<Item = c::BodyElement> {
526 once(e.into())
527 }
528 #[must_use]
529 fn transform_target(&mut self, e: e::Target) -> impl Iterator<Item = c::BodyElement> {
530 once(e.into())
531 }
532 #[must_use]
533 fn transform_raw(&mut self, mut e: e::Raw) -> impl Iterator<Item = c::BodyElement> {
534 self.transform_children(&mut e, Self::transform_string);
535 once(e.into())
536 }
537 #[must_use]
538 fn transform_image(&mut self, e: e::Image) -> impl Iterator<Item = c::BodyElement> {
539 once(e.into())
540 }
541
542 #[must_use]
544 fn transform_compound(&mut self, mut e: e::Compound) -> impl Iterator<Item = c::BodyElement> {
545 self.transform_children(&mut e, Self::transform_body_element);
546 once(e.into())
547 }
548 #[must_use]
549 fn transform_container(&mut self, mut e: e::Container) -> impl Iterator<Item = c::BodyElement> {
550 self.transform_children(&mut e, Self::transform_body_element);
551 once(e.into())
552 }
553 #[must_use]
554 fn transform_bullet_list(
555 &mut self,
556 mut e: e::BulletList,
557 ) -> impl Iterator<Item = c::BodyElement> {
558 self.transform_children(&mut e, Self::transform_list_item);
559 once(e.into())
560 }
561 #[must_use]
562 fn transform_enumerated_list(
563 &mut self,
564 mut e: e::EnumeratedList,
565 ) -> impl Iterator<Item = c::BodyElement> {
566 self.transform_children(&mut e, Self::transform_list_item);
567 once(e.into())
568 }
569 #[must_use]
570 fn transform_definition_list(
571 &mut self,
572 mut e: e::DefinitionList,
573 ) -> impl Iterator<Item = c::BodyElement> {
574 self.transform_children(&mut e, Self::transform_definition_list_item);
575 once(e.into())
576 }
577 #[must_use]
578 fn transform_field_list(
579 &mut self,
580 mut e: e::FieldList,
581 ) -> impl Iterator<Item = c::BodyElement> {
582 self.transform_children(&mut e, Self::transform_field);
583 once(e.into())
584 }
585 #[must_use]
586 fn transform_option_list(
587 &mut self,
588 mut e: e::OptionList,
589 ) -> impl Iterator<Item = c::BodyElement> {
590 self.transform_children(&mut e, Self::transform_option_list_item);
591 once(e.into())
592 }
593 #[must_use]
594 fn transform_line_block(&mut self, mut e: e::LineBlock) -> impl Iterator<Item = e::LineBlock> {
595 self.transform_children(&mut e, Self::transform_sub_line_block);
596 once(e)
597 }
598 #[must_use]
599 fn transform_block_quote(
600 &mut self,
601 mut e: e::BlockQuote,
602 ) -> impl Iterator<Item = c::BodyElement> {
603 self.transform_children(&mut e, Self::transform_sub_block_quote);
604 once(e.into())
605 }
606 #[must_use]
607 fn transform_admonition(
608 &mut self,
609 mut e: e::Admonition,
610 ) -> impl Iterator<Item = c::BodyElement> {
611 self.transform_children(&mut e, Self::transform_sub_topic);
612 once(e.into())
613 }
614 #[must_use]
615 fn transform_attention(&mut self, mut e: e::Attention) -> impl Iterator<Item = c::BodyElement> {
616 self.transform_children(&mut e, Self::transform_body_element);
617 once(e.into())
618 }
619 #[must_use]
620 fn transform_hint(&mut self, mut e: e::Hint) -> impl Iterator<Item = c::BodyElement> {
621 self.transform_children(&mut e, Self::transform_body_element);
622 once(e.into())
623 }
624 #[must_use]
625 fn transform_note(&mut self, mut e: e::Note) -> impl Iterator<Item = c::BodyElement> {
626 self.transform_children(&mut e, Self::transform_body_element);
627 once(e.into())
628 }
629 #[must_use]
630 fn transform_caution(&mut self, mut e: e::Caution) -> impl Iterator<Item = c::BodyElement> {
631 self.transform_children(&mut e, Self::transform_body_element);
632 once(e.into())
633 }
634 #[must_use]
635 fn transform_danger(&mut self, mut e: e::Danger) -> impl Iterator<Item = c::BodyElement> {
636 self.transform_children(&mut e, Self::transform_body_element);
637 once(e.into())
638 }
639 #[must_use]
640 fn transform_error(&mut self, mut e: e::Error) -> impl Iterator<Item = c::BodyElement> {
641 self.transform_children(&mut e, Self::transform_body_element);
642 once(e.into())
643 }
644 #[must_use]
645 fn transform_important(&mut self, mut e: e::Important) -> impl Iterator<Item = c::BodyElement> {
646 self.transform_children(&mut e, Self::transform_body_element);
647 once(e.into())
648 }
649 #[must_use]
650 fn transform_tip(&mut self, mut e: e::Tip) -> impl Iterator<Item = c::BodyElement> {
651 self.transform_children(&mut e, Self::transform_body_element);
652 once(e.into())
653 }
654 #[must_use]
655 fn transform_warning(&mut self, mut e: e::Warning) -> impl Iterator<Item = c::BodyElement> {
656 self.transform_children(&mut e, Self::transform_body_element);
657 once(e.into())
658 }
659 #[must_use]
660 fn transform_footnote(&mut self, mut e: e::Footnote) -> impl Iterator<Item = c::BodyElement> {
661 self.transform_children(&mut e, Self::transform_sub_footnote);
662 once(e.into())
663 }
664 #[must_use]
665 fn transform_citation(&mut self, mut e: e::Citation) -> impl Iterator<Item = c::BodyElement> {
666 self.transform_children(&mut e, Self::transform_sub_footnote);
667 once(e.into())
668 }
669 #[must_use]
670 fn transform_system_message(
671 &mut self,
672 mut e: e::SystemMessage,
673 ) -> impl Iterator<Item = c::BodyElement> {
674 self.transform_children(&mut e, Self::transform_body_element);
675 once(e.into())
676 }
677 #[must_use]
678 fn transform_figure(&mut self, mut e: e::Figure) -> impl Iterator<Item = c::BodyElement> {
679 self.transform_children(&mut e, Self::transform_sub_figure);
680 once(e.into())
681 }
682 #[must_use]
683 fn transform_table(&mut self, mut e: e::Table) -> impl Iterator<Item = c::BodyElement> {
684 self.transform_children(&mut e, Self::transform_sub_table);
685 once(e.into())
686 }
687
688 #[must_use]
690 fn transform_table_group(&mut self, mut e: e::TableGroup) -> impl Iterator<Item = c::SubTable> {
691 self.transform_children(&mut e, Self::transform_sub_table_group);
692 once(e.into())
693 }
694 #[must_use]
695 fn transform_table_head(
696 &mut self,
697 mut e: e::TableHead,
698 ) -> impl Iterator<Item = c::SubTableGroup> {
699 self.transform_children(&mut e, Self::transform_table_row);
700 once(e.into())
701 }
702 #[must_use]
703 fn transform_table_body(
704 &mut self,
705 mut e: e::TableBody,
706 ) -> impl Iterator<Item = c::SubTableGroup> {
707 self.transform_children(&mut e, Self::transform_table_row);
708 once(e.into())
709 }
710 #[must_use]
711 fn transform_table_row(&mut self, mut e: e::TableRow) -> impl Iterator<Item = e::TableRow> {
712 self.transform_children(&mut e, Self::transform_table_entry);
713 once(e)
714 }
715 #[must_use]
716 fn transform_table_entry(
717 &mut self,
718 mut e: e::TableEntry,
719 ) -> impl Iterator<Item = e::TableEntry> {
720 self.transform_children(&mut e, Self::transform_body_element);
721 once(e)
722 }
723 #[must_use]
724 fn transform_table_colspec(
725 &mut self,
726 e: e::TableColspec,
727 ) -> impl Iterator<Item = c::SubTableGroup> {
728 once(e.into())
729 }
730
731 #[must_use]
733 fn transform_list_item(&mut self, mut e: e::ListItem) -> impl Iterator<Item = e::ListItem> {
734 self.transform_children(&mut e, Self::transform_body_element);
735 once(e)
736 }
737 #[must_use]
738 fn transform_definition_list_item(
739 &mut self,
740 mut e: e::DefinitionListItem,
741 ) -> impl Iterator<Item = e::DefinitionListItem> {
742 self.transform_children(&mut e, Self::transform_sub_dl_item);
743 once(e)
744 }
745 #[must_use]
746 fn transform_term(&mut self, mut e: e::Term) -> impl Iterator<Item = c::SubDLItem> {
747 self.transform_children(&mut e, Self::transform_text_or_inline_element);
748 once(e.into())
749 }
750 #[must_use]
751 fn transform_classifier(&mut self, mut e: e::Classifier) -> impl Iterator<Item = c::SubDLItem> {
752 self.transform_children(&mut e, Self::transform_text_or_inline_element);
753 once(e.into())
754 }
755 #[must_use]
756 fn transform_definition(&mut self, mut e: e::Definition) -> impl Iterator<Item = c::SubDLItem> {
757 self.transform_children(&mut e, Self::transform_body_element);
758 once(e.into())
759 }
760 #[must_use]
761 fn transform_field_name(&mut self, mut e: e::FieldName) -> impl Iterator<Item = c::SubField> {
762 self.transform_children(&mut e, Self::transform_text_or_inline_element);
763 once(e.into())
764 }
765 #[must_use]
766 fn transform_field_body(&mut self, mut e: e::FieldBody) -> impl Iterator<Item = c::SubField> {
767 self.transform_children(&mut e, Self::transform_body_element);
768 once(e.into())
769 }
770 #[must_use]
771 fn transform_option_list_item(
772 &mut self,
773 mut e: e::OptionListItem,
774 ) -> impl Iterator<Item = e::OptionListItem> {
775 self.transform_children(&mut e, Self::transform_sub_option_list_item);
776 once(e)
777 }
778 #[must_use]
779 fn transform_option_group(
780 &mut self,
781 mut e: e::OptionGroup,
782 ) -> impl Iterator<Item = c::SubOptionListItem> {
783 self.transform_children(&mut e, Self::transform_option);
784 once(e.into())
785 }
786 #[must_use]
787 fn transform_description(
788 &mut self,
789 mut e: e::Description,
790 ) -> impl Iterator<Item = c::SubOptionListItem> {
791 self.transform_children(&mut e, Self::transform_body_element);
792 once(e.into())
793 }
794 #[must_use]
795 fn transform_option(&mut self, mut e: e::Option_) -> impl Iterator<Item = e::Option_> {
796 self.transform_children(&mut e, Self::transform_sub_option);
797 once(e)
798 }
799 #[must_use]
800 fn transform_option_string(
801 &mut self,
802 mut e: e::OptionString,
803 ) -> impl Iterator<Item = c::SubOption> {
804 self.transform_children(&mut e, Self::transform_string);
805 once(e.into())
806 }
807 #[must_use]
808 fn transform_option_argument(
809 &mut self,
810 mut e: e::OptionArgument,
811 ) -> impl Iterator<Item = c::SubOption> {
812 self.transform_children(&mut e, Self::transform_string);
813 once(e.into())
814 }
815 #[must_use]
816 fn transform_line(&mut self, mut e: e::Line) -> impl Iterator<Item = c::SubLineBlock> {
817 self.transform_children(&mut e, Self::transform_text_or_inline_element);
818 once(e.into())
819 }
820 #[must_use]
821 fn transform_attribution(
822 &mut self,
823 mut e: e::Attribution,
824 ) -> impl Iterator<Item = c::SubBlockQuote> {
825 self.transform_children(&mut e, Self::transform_text_or_inline_element);
826 once(e.into())
827 }
828 #[must_use]
829 fn transform_label(&mut self, mut e: e::Label) -> impl Iterator<Item = c::SubFootnote> {
830 self.transform_children(&mut e, Self::transform_text_or_inline_element);
831 once(e.into())
832 }
833 #[must_use]
834 fn transform_caption(&mut self, mut e: e::Caption) -> impl Iterator<Item = c::SubFigure> {
835 self.transform_children(&mut e, Self::transform_text_or_inline_element);
836 once(e.into())
837 }
838 #[must_use]
839 fn transform_legend(&mut self, mut e: e::Legend) -> impl Iterator<Item = c::SubFigure> {
840 self.transform_children(&mut e, Self::transform_body_element);
841 once(e.into())
842 }
843
844 #[must_use]
846 fn transform_string(&mut self, e: String) -> impl Iterator<Item = String> {
847 once(e)
848 }
849 #[must_use]
850 fn transform_emphasis(
851 &mut self,
852 mut e: e::Emphasis,
853 ) -> impl Iterator<Item = c::TextOrInlineElement> {
854 self.transform_children(&mut e, Self::transform_text_or_inline_element);
855 once(e.into())
856 }
857 #[must_use]
858 fn transform_literal(
859 &mut self,
860 mut e: e::Literal,
861 ) -> impl Iterator<Item = c::TextOrInlineElement> {
862 self.transform_children(&mut e, Self::transform_string);
863 once(e.into())
864 }
865 #[must_use]
866 fn transform_reference(
867 &mut self,
868 mut e: e::Reference,
869 ) -> impl Iterator<Item = c::TextOrInlineElement> {
870 self.transform_children(&mut e, Self::transform_text_or_inline_element);
871 once(e.into())
872 }
873 #[must_use]
874 fn transform_strong(
875 &mut self,
876 mut e: e::Strong,
877 ) -> impl Iterator<Item = c::TextOrInlineElement> {
878 self.transform_children(&mut e, Self::transform_text_or_inline_element);
879 once(e.into())
880 }
881 #[must_use]
882 fn transform_footnote_reference(
883 &mut self,
884 mut e: e::FootnoteReference,
885 ) -> impl Iterator<Item = c::TextOrInlineElement> {
886 self.transform_children(&mut e, Self::transform_text_or_inline_element);
887 once(e.into())
888 }
889 #[must_use]
890 fn transform_citation_reference(
891 &mut self,
892 mut e: e::CitationReference,
893 ) -> impl Iterator<Item = c::TextOrInlineElement> {
894 self.transform_children(&mut e, Self::transform_text_or_inline_element);
895 once(e.into())
896 }
897 #[must_use]
898 fn transform_substitution_reference(
899 &mut self,
900 mut e: e::SubstitutionReference,
901 ) -> impl Iterator<Item = c::TextOrInlineElement> {
902 self.transform_children(&mut e, Self::transform_text_or_inline_element);
903 once(e.into())
904 }
905 #[must_use]
906 fn transform_title_reference(
907 &mut self,
908 mut e: e::TitleReference,
909 ) -> impl Iterator<Item = c::TextOrInlineElement> {
910 self.transform_children(&mut e, Self::transform_text_or_inline_element);
911 once(e.into())
912 }
913 #[must_use]
914 fn transform_abbreviation(
915 &mut self,
916 mut e: e::Abbreviation,
917 ) -> impl Iterator<Item = c::TextOrInlineElement> {
918 self.transform_children(&mut e, Self::transform_text_or_inline_element);
919 once(e.into())
920 }
921 #[must_use]
922 fn transform_acronym(
923 &mut self,
924 mut e: e::Acronym,
925 ) -> impl Iterator<Item = c::TextOrInlineElement> {
926 self.transform_children(&mut e, Self::transform_text_or_inline_element);
927 once(e.into())
928 }
929 #[must_use]
930 fn transform_superscript(
931 &mut self,
932 mut e: e::Superscript,
933 ) -> impl Iterator<Item = c::TextOrInlineElement> {
934 self.transform_children(&mut e, Self::transform_text_or_inline_element);
935 once(e.into())
936 }
937 #[must_use]
938 fn transform_subscript(
939 &mut self,
940 mut e: e::Subscript,
941 ) -> impl Iterator<Item = c::TextOrInlineElement> {
942 self.transform_children(&mut e, Self::transform_text_or_inline_element);
943 once(e.into())
944 }
945 #[must_use]
946 fn transform_inline(
947 &mut self,
948 mut e: e::Inline,
949 ) -> impl Iterator<Item = c::TextOrInlineElement> {
950 self.transform_children(&mut e, Self::transform_text_or_inline_element);
951 once(e.into())
952 }
953 #[must_use]
954 fn transform_problematic(
955 &mut self,
956 mut e: e::Problematic,
957 ) -> impl Iterator<Item = c::TextOrInlineElement> {
958 self.transform_children(&mut e, Self::transform_text_or_inline_element);
959 once(e.into())
960 }
961 #[must_use]
962 fn transform_generated(
963 &mut self,
964 mut e: e::Generated,
965 ) -> impl Iterator<Item = c::TextOrInlineElement> {
966 self.transform_children(&mut e, Self::transform_text_or_inline_element);
967 once(e.into())
968 }
969 #[must_use]
970 fn transform_math(&mut self, mut e: e::Math) -> impl Iterator<Item = c::TextOrInlineElement> {
971 self.transform_children(&mut e, Self::transform_string);
972 once(e.into())
973 }
974 #[must_use]
975 fn transform_target_inline(
976 &mut self,
977 mut e: e::TargetInline,
978 ) -> impl Iterator<Item = c::TextOrInlineElement> {
979 self.transform_children(&mut e, Self::transform_string);
980 once(e.into())
981 }
982 #[must_use]
983 fn transform_raw_inline(
984 &mut self,
985 mut e: e::RawInline,
986 ) -> impl Iterator<Item = c::TextOrInlineElement> {
987 self.transform_children(&mut e, Self::transform_string);
988 once(e.into())
989 }
990 #[must_use]
991 fn transform_image_inline(
992 &mut self,
993 e: e::ImageInline,
994 ) -> impl Iterator<Item = c::TextOrInlineElement> {
995 once(e.into())
996 }
997}