1#![allow(non_camel_case_types)]
10
11use std::os::raw::{c_char, c_int};
12
13pub const TWIG_ABI_VERSION: u32 = 6;
17
18#[cfg(target_pointer_width = "64")]
25const _: () = {
26 use std::mem::offset_of;
27 use std::mem::size_of;
28
29 assert!(size_of::<TwigSpan>() == 16);
30 assert!(offset_of!(TwigSpan, start) == 0);
31 assert!(offset_of!(TwigSpan, end) == 8);
32
33 assert!(size_of::<TwigQueryMatch>() == 56);
34 assert!(offset_of!(TwigQueryMatch, node_id) == 0);
35 assert!(offset_of!(TwigQueryMatch, span) == 8);
36 assert!(offset_of!(TwigQueryMatch, content_span) == 24);
37 assert!(offset_of!(TwigQueryMatch, has_content_span) == 40);
38 assert!(offset_of!(TwigQueryMatch, kind) == 48);
39
40 assert!(size_of::<TwigChange>() == 32);
41 assert!(offset_of!(TwigChange, old_span) == 0);
42 assert!(offset_of!(TwigChange, new_span) == 16);
43
44 assert!(size_of::<TwigFlatNode>() == 168);
45 assert!(offset_of!(TwigFlatNode, id) == 0);
46 assert!(offset_of!(TwigFlatNode, parent) == 4);
47 assert!(offset_of!(TwigFlatNode, first_child) == 8);
48 assert!(offset_of!(TwigFlatNode, next_sibling) == 12);
49 assert!(offset_of!(TwigFlatNode, span) == 16);
50 assert!(offset_of!(TwigFlatNode, content_span) == 32);
51 assert!(offset_of!(TwigFlatNode, has_content_span) == 48);
52 assert!(offset_of!(TwigFlatNode, level) == 52);
53 assert!(offset_of!(TwigFlatNode, kind) == 56);
54 assert!(offset_of!(TwigFlatNode, text_ptr) == 64);
55 assert!(offset_of!(TwigFlatNode, text_len) == 72);
56 assert!(offset_of!(TwigFlatNode, destination_ptr) == 80);
57 assert!(offset_of!(TwigFlatNode, destination_len) == 88);
58 assert!(offset_of!(TwigFlatNode, head) == 96);
59 assert!(offset_of!(TwigFlatNode, alignment) == 100);
60 assert!(offset_of!(TwigFlatNode, name_ptr) == 104);
61 assert!(offset_of!(TwigFlatNode, name_len) == 112);
62 assert!(offset_of!(TwigFlatNode, attrs_ptr) == 120);
63 assert!(offset_of!(TwigFlatNode, attrs_len) == 128);
64 assert!(offset_of!(TwigFlatNode, directive_form) == 136);
65 assert!(offset_of!(TwigFlatNode, container_origin) == 140);
68 assert!(offset_of!(TwigFlatNode, marker_span) == 144);
71 assert!(offset_of!(TwigFlatNode, has_marker_span) == 160);
72 assert!(offset_of!(TwigFlatNode, checked) == 164);
74
75 assert!(size_of::<TwigKeyVal>() == 32);
76 assert!(offset_of!(TwigKeyVal, key) == 0);
77 assert!(offset_of!(TwigKeyVal, key_len) == 8);
78 assert!(offset_of!(TwigKeyVal, value) == 16);
79 assert!(offset_of!(TwigKeyVal, value_len) == 24);
80};
81
82#[repr(transparent)]
83#[derive(Clone, Copy, Debug, Eq, PartialEq)]
84pub struct TwigStatus(pub c_int);
85
86#[allow(dead_code)]
87impl TwigStatus {
88 pub const OK: c_int = 0;
89 pub const INVALID_ARGUMENT: c_int = 1;
90 pub const PARSE_ERROR: c_int = 2;
91 pub const OUT_OF_MEMORY: c_int = 3;
92 pub const UNSUPPORTED_FORMAT: c_int = 4;
93 pub const NOT_FOUND: c_int = 5;
94 pub const AMBIGUOUS: c_int = 6;
95 pub const NOT_EDITABLE: c_int = 7;
96 pub const EDIT_CONFLICT: c_int = 8;
97 pub const UNSAFE_METADATA: c_int = 9;
98 pub const INTERNAL_ERROR: c_int = 255;
99}
100
101#[repr(C)]
102#[derive(Clone, Copy, Debug, Eq, PartialEq)]
103pub enum TwigFormat {
104 Djot = 1,
105 Markdown = 2,
106 Xml = 3,
107 Html = 4,
108 Asciidoc = 5,
114 Commonmark = 6,
117 Gfm = 7,
119}
120
121pub const TWIG_MD_DIRECTIVES: u32 = 1 << 0;
124pub const TWIG_MD_MATH: u32 = 1 << 1;
125pub const TWIG_MD_HTML_ELEMENTS: u32 = 1 << 2;
126pub const TWIG_MD_HIGHLIGHT: u32 = 1 << 3;
127pub const TWIG_MD_HIGHLIGHT_COLORS: u32 = 1 << 4;
128
129pub enum TwigDocument {}
130
131pub enum TwigEditor {}
132
133pub enum TwigBuilder {}
134
135#[repr(C)]
139#[derive(Clone, Copy, Debug)]
140pub struct TwigKeyVal {
141 pub key: *const u8,
142 pub key_len: usize,
143 pub value: *const u8,
144 pub value_len: usize,
145}
146
147#[repr(C)]
149#[derive(Clone, Copy, Debug, Eq, PartialEq)]
150pub struct TwigSpan {
151 pub start: usize,
152 pub end: usize,
153}
154
155#[repr(C)]
160#[derive(Clone, Copy, Debug)]
161pub struct TwigQueryMatch {
162 pub node_id: u32,
163 pub span: TwigSpan,
164 pub content_span: TwigSpan,
165 pub has_content_span: c_int,
166 pub kind: *const c_char,
167}
168
169#[repr(C)]
175#[derive(Clone, Copy, Debug)]
176pub struct TwigWarning {
177 pub fidelity: c_int,
178 pub path_ptr: *const u8,
179 pub path_len: usize,
180 pub kind: *const c_char,
181}
182
183#[allow(dead_code)]
186pub const TWIG_FIDELITY_FAITHFUL: c_int = 0;
187pub const TWIG_FIDELITY_DEGRADED: c_int = 1;
188pub const TWIG_FIDELITY_DROPPED: c_int = 2;
189
190pub const TWIG_NO_NODE: u32 = u32::MAX;
192
193#[repr(C)]
197#[derive(Clone, Copy, Debug)]
198pub struct TwigChange {
199 pub old_span: TwigSpan,
200 pub new_span: TwigSpan,
201}
202
203#[repr(C)]
219#[derive(Clone, Copy, Debug)]
220pub struct TwigFlatNode {
221 pub id: u32,
222 pub parent: u32,
223 pub first_child: u32,
224 pub next_sibling: u32,
225 pub span: TwigSpan,
226 pub content_span: TwigSpan,
227 pub has_content_span: c_int,
228 pub level: u32,
229 pub kind: *const c_char,
230 pub text_ptr: *const u8,
231 pub text_len: usize,
232 pub destination_ptr: *const u8,
233 pub destination_len: usize,
234 pub head: c_int,
235 pub alignment: c_int,
236 pub name_ptr: *const u8,
237 pub name_len: usize,
238 pub attrs_ptr: *const TwigKeyVal,
239 pub attrs_len: usize,
240 pub directive_form: c_int,
241 pub container_origin: c_int,
242 pub marker_span: TwigSpan,
243 pub has_marker_span: c_int,
244 pub checked: c_int,
245}
246
247pub const TWIG_TASK_CHECKED_NONE: c_int = -1;
249
250pub const TWIG_HEAD_NONE: c_int = -1;
252
253#[allow(dead_code)]
257pub const TWIG_ALIGN_NONE: c_int = -1;
258pub const TWIG_ALIGN_DEFAULT: c_int = 0;
259pub const TWIG_ALIGN_LEFT: c_int = 1;
260pub const TWIG_ALIGN_RIGHT: c_int = 2;
261pub const TWIG_ALIGN_CENTER: c_int = 3;
262
263#[allow(dead_code)]
269pub const TWIG_DIRECTIVE_NONE: c_int = -1;
270pub const TWIG_DIRECTIVE_TEXT: c_int = 0;
271pub const TWIG_DIRECTIVE_LEAF: c_int = 1;
272pub const TWIG_DIRECTIVE_CONTAINER: c_int = 2;
273
274#[allow(dead_code)]
287pub const TWIG_CONTAINER_ORIGIN_NONE: c_int = -1;
288pub const TWIG_CONTAINER_ORIGIN_ELEMENT: c_int = 0;
289pub const TWIG_CONTAINER_ORIGIN_DIRECTIVE: c_int = 1;
290
291pub const TWIG_TABLE_INSERT_ROW: c_int = 0;
293pub const TWIG_TABLE_DELETE_ROW: c_int = 1;
294pub const TWIG_TABLE_INSERT_COLUMN: c_int = 2;
295pub const TWIG_TABLE_DELETE_COLUMN: c_int = 3;
296pub const TWIG_TABLE_SET_ALIGNMENT: c_int = 4;
297pub const TWIG_TABLE_MOVE_ROW: c_int = 5;
298pub const TWIG_TABLE_MOVE_COLUMN: c_int = 6;
299
300unsafe extern "C" {
301 pub fn twig_abi_version() -> u32;
302 pub fn twig_version() -> u32;
303 pub fn twig_version_string() -> *const c_char;
304 pub fn twig_parse(
305 input: *const u8,
306 input_len: usize,
307 format: c_int,
308 out_doc: *mut *mut TwigDocument,
309 ) -> TwigStatus;
310 pub fn twig_parse_ext(
311 input: *const u8,
312 input_len: usize,
313 format: c_int,
314 md_flags: u32,
315 out_doc: *mut *mut TwigDocument,
316 ) -> TwigStatus;
317 pub fn twig_document_destroy(doc: *mut TwigDocument);
318 pub fn twig_document_render_html(
319 doc: *mut TwigDocument,
320 out_ptr: *mut *const u8,
321 out_len: *mut usize,
322 ) -> TwigStatus;
323 pub fn twig_document_serialize(
324 doc: *mut TwigDocument,
325 format: c_int,
326 out_ptr: *mut *const u8,
327 out_len: *mut usize,
328 ) -> TwigStatus;
329 pub fn twig_document_ast_json(
330 doc: *mut TwigDocument,
331 out_ptr: *mut *const u8,
332 out_len: *mut usize,
333 ) -> TwigStatus;
334 pub fn twig_document_query(
335 doc: *mut TwigDocument,
336 selector: *const u8,
337 selector_len: usize,
338 out_ptr: *mut *const TwigQueryMatch,
339 out_len: *mut usize,
340 ) -> TwigStatus;
341 pub fn twig_document_node_span(
342 doc: *mut TwigDocument,
343 node_id: u32,
344 out_span: *mut TwigSpan,
345 ) -> TwigStatus;
346 pub fn twig_document_node_content_span(
347 doc: *mut TwigDocument,
348 node_id: u32,
349 out_span: *mut TwigSpan,
350 ) -> TwigStatus;
351 pub fn twig_document_node_marker_span(
352 doc: *mut TwigDocument,
353 node_id: u32,
354 out_span: *mut TwigSpan,
355 ) -> TwigStatus;
356 pub fn twig_document_attrs_span(
357 doc: *mut TwigDocument,
358 node_id: u32,
359 out_span: *mut TwigSpan,
360 ) -> TwigStatus;
361 pub fn twig_document_line_prefix(
362 doc: *mut TwigDocument,
363 offset: usize,
364 out_span: *mut TwigSpan,
365 ) -> TwigStatus;
366 pub fn twig_document_continuation_prefix(
367 doc: *mut TwigDocument,
368 offset: usize,
369 out_ptr: *mut *const u8,
370 out_len: *mut usize,
371 out_columns: *mut usize,
372 ) -> TwigStatus;
373 pub fn twig_document_blank_line_prefix(
374 doc: *mut TwigDocument,
375 offset: usize,
376 out_ptr: *mut *const u8,
377 out_len: *mut usize,
378 out_columns: *mut usize,
379 ) -> TwigStatus;
380 pub fn twig_document_cell_colspan(
381 doc: *mut TwigDocument,
382 node_id: u32,
383 out_colspan: *mut u32,
384 ) -> TwigStatus;
385 pub fn twig_document_cell_rowspan(
386 doc: *mut TwigDocument,
387 node_id: u32,
388 out_rowspan: *mut u32,
389 ) -> TwigStatus;
390 pub fn twig_document_nodes(
391 doc: *mut TwigDocument,
392 out_ptr: *mut *const TwigFlatNode,
393 out_len: *mut usize,
394 ) -> TwigStatus;
395 pub fn twig_document_definitions(
396 doc: *mut TwigDocument,
397 out_ptr: *mut *const TwigQueryMatch,
398 out_len: *mut usize,
399 ) -> TwigStatus;
400 pub fn twig_document_diagnostics(
401 doc: *mut TwigDocument,
402 format: c_int,
403 out_ptr: *mut *const TwigWarning,
404 out_len: *mut usize,
405 ) -> TwigStatus;
406 pub fn twig_document_children(
407 doc: *mut TwigDocument,
408 node_id: u32,
409 out_ptr: *mut *const TwigQueryMatch,
410 out_len: *mut usize,
411 ) -> TwigStatus;
412 pub fn twig_document_subtree(
413 doc: *mut TwigDocument,
414 node_id: u32,
415 out_ptr: *mut *const TwigFlatNode,
416 out_len: *mut usize,
417 ) -> TwigStatus;
418 pub fn twig_document_node_at(
419 doc: *mut TwigDocument,
420 offset: usize,
421 out_match: *mut TwigQueryMatch,
422 ) -> TwigStatus;
423 pub fn twig_document_nodes_at(
424 doc: *mut TwigDocument,
425 offset: usize,
426 out_ptr: *mut *const TwigQueryMatch,
427 out_len: *mut usize,
428 ) -> TwigStatus;
429 pub fn twig_document_node_at_caret(
430 doc: *mut TwigDocument,
431 offset: usize,
432 out_match: *mut TwigQueryMatch,
433 ) -> TwigStatus;
434 pub fn twig_document_nodes_at_caret(
435 doc: *mut TwigDocument,
436 offset: usize,
437 out_ptr: *mut *const TwigQueryMatch,
438 out_len: *mut usize,
439 ) -> TwigStatus;
440
441 pub fn twig_editor_create(
442 input: *const u8,
443 input_len: usize,
444 format: c_int,
445 out_editor: *mut *mut TwigEditor,
446 ) -> TwigStatus;
447 pub fn twig_editor_create_ext(
448 input: *const u8,
449 input_len: usize,
450 format: c_int,
451 md_flags: u32,
452 out_editor: *mut *mut TwigEditor,
453 ) -> TwigStatus;
454 pub fn twig_editor_destroy(editor: *mut TwigEditor);
455 pub fn twig_editor_replace(
456 editor: *mut TwigEditor,
457 locator: *const u8,
458 locator_len: usize,
459 text: *const u8,
460 text_len: usize,
461 ) -> TwigStatus;
462 pub fn twig_editor_replace_content(
463 editor: *mut TwigEditor,
464 locator: *const u8,
465 locator_len: usize,
466 text: *const u8,
467 text_len: usize,
468 ) -> TwigStatus;
469 pub fn twig_editor_insert_before(
470 editor: *mut TwigEditor,
471 locator: *const u8,
472 locator_len: usize,
473 text: *const u8,
474 text_len: usize,
475 ) -> TwigStatus;
476 pub fn twig_editor_insert_after(
477 editor: *mut TwigEditor,
478 locator: *const u8,
479 locator_len: usize,
480 text: *const u8,
481 text_len: usize,
482 ) -> TwigStatus;
483 pub fn twig_editor_insert_child(
484 editor: *mut TwigEditor,
485 locator: *const u8,
486 locator_len: usize,
487 child_index: usize,
488 text: *const u8,
489 text_len: usize,
490 ) -> TwigStatus;
491 pub fn twig_editor_delete(
492 editor: *mut TwigEditor,
493 locator: *const u8,
494 locator_len: usize,
495 ) -> TwigStatus;
496 pub fn twig_editor_delete_smart(
497 editor: *mut TwigEditor,
498 locator: *const u8,
499 locator_len: usize,
500 ) -> TwigStatus;
501 pub fn twig_editor_unwrap(
502 editor: *mut TwigEditor,
503 locator: *const u8,
504 locator_len: usize,
505 ) -> TwigStatus;
506 pub fn twig_editor_filter(
507 editor: *mut TwigEditor,
508 drop: *const u8,
509 drop_len: usize,
510 keep: *const u8,
511 keep_len: usize,
512 unwrap_kept: c_int,
513 ) -> TwigStatus;
514 pub fn twig_editor_source(
515 editor: *mut TwigEditor,
516 out_ptr: *mut *const u8,
517 out_len: *mut usize,
518 ) -> TwigStatus;
519 pub fn twig_editor_document(
520 editor: *mut TwigEditor,
521 out_doc: *mut *mut TwigDocument,
522 ) -> TwigStatus;
523 pub fn twig_editor_ast_json(
524 editor: *mut TwigEditor,
525 out_ptr: *mut *const u8,
526 out_len: *mut usize,
527 ) -> TwigStatus;
528 pub fn twig_editor_query(
529 editor: *mut TwigEditor,
530 selector: *const u8,
531 selector_len: usize,
532 out_ptr: *mut *const TwigQueryMatch,
533 out_len: *mut usize,
534 ) -> TwigStatus;
535 pub fn twig_editor_edit_range(
536 editor: *mut TwigEditor,
537 start: usize,
538 end: usize,
539 text: *const u8,
540 text_len: usize,
541 out_change: *mut TwigChange,
542 ) -> TwigStatus;
543 pub fn twig_editor_last_change(
544 editor: *mut TwigEditor,
545 out_change: *mut TwigChange,
546 ) -> TwigStatus;
547 pub fn twig_editor_undo(editor: *mut TwigEditor, out_change: *mut TwigChange) -> TwigStatus;
548 pub fn twig_editor_redo(editor: *mut TwigEditor, out_change: *mut TwigChange) -> TwigStatus;
549 pub fn twig_editor_coalesce_last(editor: *mut TwigEditor) -> TwigStatus;
550 pub fn twig_editor_revision(editor: *mut TwigEditor) -> u64;
551 pub fn twig_editor_dirty_range(editor: *mut TwigEditor, out_span: *mut TwigSpan) -> TwigStatus;
552 pub fn twig_editor_clear_dirty(editor: *mut TwigEditor) -> TwigStatus;
553 pub fn twig_editor_set_caret_blob(
554 editor: *mut TwigEditor,
555 blob_ptr: *const u8,
556 blob_len: usize,
557 ) -> TwigStatus;
558 pub fn twig_editor_caret_blob(
559 editor: *mut TwigEditor,
560 out_ptr: *mut *const u8,
561 out_len: *mut usize,
562 ) -> TwigStatus;
563 pub fn twig_editor_nodes(
564 editor: *mut TwigEditor,
565 out_ptr: *mut *const TwigFlatNode,
566 out_len: *mut usize,
567 ) -> TwigStatus;
568 pub fn twig_editor_child_spans(
569 editor: *mut TwigEditor,
570 node_id: u32,
571 out_ptr: *mut *const TwigQueryMatch,
572 out_len: *mut usize,
573 ) -> TwigStatus;
574 pub fn twig_editor_subtree(
575 editor: *mut TwigEditor,
576 node_id: u32,
577 out_ptr: *mut *const TwigFlatNode,
578 out_len: *mut usize,
579 ) -> TwigStatus;
580 pub fn twig_editor_node_at(
581 editor: *mut TwigEditor,
582 offset: usize,
583 out_match: *mut TwigQueryMatch,
584 ) -> TwigStatus;
585 pub fn twig_editor_nodes_at(
586 editor: *mut TwigEditor,
587 offset: usize,
588 out_ptr: *mut *const TwigQueryMatch,
589 out_len: *mut usize,
590 ) -> TwigStatus;
591 pub fn twig_editor_wrap_range(
592 editor: *mut TwigEditor,
593 start: usize,
594 end: usize,
595 kind: c_int,
596 out_change: *mut TwigChange,
597 ) -> TwigStatus;
598 pub fn twig_editor_toggle_inline(
599 editor: *mut TwigEditor,
600 start: usize,
601 end: usize,
602 kind: c_int,
603 out_change: *mut TwigChange,
604 ) -> TwigStatus;
605 pub fn twig_editor_set_block(
606 editor: *mut TwigEditor,
607 offset: usize,
608 block_kind: c_int,
609 level: u32,
610 out_change: *mut TwigChange,
611 ) -> TwigStatus;
612 pub fn twig_editor_toggle_block_container(
613 editor: *mut TwigEditor,
614 start: usize,
615 end: usize,
616 container_kind: c_int,
617 out_change: *mut TwigChange,
618 ) -> TwigStatus;
619 pub fn twig_editor_renumber_ordered_lists(
620 editor: *mut TwigEditor,
621 offset: usize,
622 out_change: *mut TwigChange,
623 ) -> TwigStatus;
624 pub fn twig_format_supports(
629 format: c_int,
630 gesture: c_int,
631 kind: c_int,
632 out_supported: *mut c_int,
633 ) -> TwigStatus;
634 pub fn twig_format_supports_ext(
640 format: c_int,
641 md_flags: u32,
642 gesture: c_int,
643 kind: c_int,
644 out_supported: *mut c_int,
645 ) -> TwigStatus;
646 pub fn twig_format_is_authorable(format: c_int, out_authorable: *mut c_int) -> TwigStatus;
649 pub fn twig_editor_table_edit(
650 editor: *mut TwigEditor,
651 offset: usize,
652 op: c_int,
653 arg: c_int,
654 out_change: *mut TwigChange,
655 ) -> TwigStatus;
656 pub fn twig_editor_insert_table(
657 editor: *mut TwigEditor,
658 offset: usize,
659 rows: usize,
660 cols: usize,
661 out_change: *mut TwigChange,
662 ) -> TwigStatus;
663 pub fn twig_editor_insert_link(
664 editor: *mut TwigEditor,
665 start: usize,
666 end: usize,
667 destination: *const u8,
668 destination_len: usize,
669 out_change: *mut TwigChange,
670 ) -> TwigStatus;
671 pub fn twig_editor_insert_image(
672 editor: *mut TwigEditor,
673 start: usize,
674 end: usize,
675 destination: *const u8,
676 destination_len: usize,
677 out_change: *mut TwigChange,
678 ) -> TwigStatus;
679
680 pub fn twig_editor_insert_literal(
681 editor: *mut TwigEditor,
682 offset: usize,
683 text: *const u8,
684 text_len: usize,
685 out_change: *mut TwigChange,
686 ) -> TwigStatus;
687
688 pub fn twig_editor_insert_line_break(
689 editor: *mut TwigEditor,
690 offset: usize,
691 out_change: *mut TwigChange,
692 ) -> TwigStatus;
693
694 pub fn twig_editor_insert_thematic_break(
695 editor: *mut TwigEditor,
696 offset: usize,
697 out_change: *mut TwigChange,
698 ) -> TwigStatus;
699
700 pub fn twig_editor_split_block(
701 editor: *mut TwigEditor,
702 offset: usize,
703 out_change: *mut TwigChange,
704 ) -> TwigStatus;
705 pub fn twig_editor_toggle_code_block(
709 editor: *mut TwigEditor,
710 start: usize,
711 end: usize,
712 language: *const u8,
713 language_len: usize,
714 has_language: c_int,
715 out_change: *mut TwigChange,
716 ) -> TwigStatus;
717 pub fn twig_editor_set_code_language(
718 editor: *mut TwigEditor,
719 offset: usize,
720 language: *const u8,
721 language_len: usize,
722 has_language: c_int,
723 out_change: *mut TwigChange,
724 ) -> TwigStatus;
725 pub fn twig_editor_set_mark_color(
729 editor: *mut TwigEditor,
730 offset: usize,
731 color: *const u8,
732 color_len: usize,
733 has_color: c_int,
734 out_change: *mut TwigChange,
735 ) -> TwigStatus;
736 pub fn twig_editor_toggle_task_item(
737 editor: *mut TwigEditor,
738 offset: usize,
739 out_change: *mut TwigChange,
740 ) -> TwigStatus;
741 pub fn twig_editor_set_task_checked(
742 editor: *mut TwigEditor,
743 offset: usize,
744 checked: c_int,
745 out_change: *mut TwigChange,
746 ) -> TwigStatus;
747 pub fn twig_editor_toggle_task_checked(
748 editor: *mut TwigEditor,
749 offset: usize,
750 out_change: *mut TwigChange,
751 ) -> TwigStatus;
752 pub fn twig_editor_insert_footnote(
753 editor: *mut TwigEditor,
754 offset: usize,
755 label: *const u8,
756 label_len: usize,
757 out_change: *mut TwigChange,
758 ) -> TwigStatus;
759
760 pub fn twig_builder_create(out_builder: *mut *mut TwigBuilder) -> TwigStatus;
761 pub fn twig_builder_destroy(builder: *mut TwigBuilder);
762 pub fn twig_builder_add(builder: *mut TwigBuilder, kind: c_int, out_id: *mut u32)
763 -> TwigStatus;
764 pub fn twig_builder_add_text(
765 builder: *mut TwigBuilder,
766 kind: c_int,
767 text: *const u8,
768 text_len: usize,
769 out_id: *mut u32,
770 ) -> TwigStatus;
771 pub fn twig_builder_add_heading(
772 builder: *mut TwigBuilder,
773 level: u32,
774 out_id: *mut u32,
775 ) -> TwigStatus;
776 pub fn twig_builder_add_code_block(
777 builder: *mut TwigBuilder,
778 lang: *const u8,
779 lang_len: usize,
780 has_lang: c_int,
781 text: *const u8,
782 text_len: usize,
783 out_id: *mut u32,
784 ) -> TwigStatus;
785 pub fn twig_builder_add_raw_block(
786 builder: *mut TwigBuilder,
787 format: *const u8,
788 format_len: usize,
789 text: *const u8,
790 text_len: usize,
791 out_id: *mut u32,
792 ) -> TwigStatus;
793 pub fn twig_builder_add_metadata(
794 builder: *mut TwigBuilder,
795 lang: *const u8,
796 lang_len: usize,
797 text: *const u8,
798 text_len: usize,
799 out_id: *mut u32,
800 ) -> TwigStatus;
801 pub fn twig_builder_add_raw_inline(
802 builder: *mut TwigBuilder,
803 format: *const u8,
804 format_len: usize,
805 text: *const u8,
806 text_len: usize,
807 out_id: *mut u32,
808 ) -> TwigStatus;
809 pub fn twig_builder_add_smart_punctuation(
810 builder: *mut TwigBuilder,
811 punct_kind: c_int,
812 text: *const u8,
813 text_len: usize,
814 out_id: *mut u32,
815 ) -> TwigStatus;
816 pub fn twig_builder_add_link(
817 builder: *mut TwigBuilder,
818 destination: *const u8,
819 destination_len: usize,
820 has_destination: c_int,
821 reference: *const u8,
822 reference_len: usize,
823 has_reference: c_int,
824 out_id: *mut u32,
825 ) -> TwigStatus;
826 pub fn twig_builder_add_image(
827 builder: *mut TwigBuilder,
828 destination: *const u8,
829 destination_len: usize,
830 has_destination: c_int,
831 reference: *const u8,
832 reference_len: usize,
833 has_reference: c_int,
834 out_id: *mut u32,
835 ) -> TwigStatus;
836 pub fn twig_builder_add_directive(
837 builder: *mut TwigBuilder,
838 form: c_int,
839 name: *const u8,
840 name_len: usize,
841 out_id: *mut u32,
842 ) -> TwigStatus;
843 pub fn twig_builder_add_element(
844 builder: *mut TwigBuilder,
845 name: *const u8,
846 name_len: usize,
847 out_id: *mut u32,
848 ) -> TwigStatus;
849 pub fn twig_builder_add_processing_instruction(
850 builder: *mut TwigBuilder,
851 target: *const u8,
852 target_len: usize,
853 data: *const u8,
854 data_len: usize,
855 out_id: *mut u32,
856 ) -> TwigStatus;
857 pub fn twig_builder_add_footnote(
858 builder: *mut TwigBuilder,
859 label: *const u8,
860 label_len: usize,
861 out_id: *mut u32,
862 ) -> TwigStatus;
863 pub fn twig_builder_add_citation(
864 builder: *mut TwigBuilder,
865 label: *const u8,
866 label_len: usize,
867 out_id: *mut u32,
868 ) -> TwigStatus;
869 pub fn twig_builder_add_substitution(
870 builder: *mut TwigBuilder,
871 label: *const u8,
872 label_len: usize,
873 out_id: *mut u32,
874 ) -> TwigStatus;
875 pub fn twig_builder_add_reference(
876 builder: *mut TwigBuilder,
877 label: *const u8,
878 label_len: usize,
879 destination: *const u8,
880 destination_len: usize,
881 out_id: *mut u32,
882 ) -> TwigStatus;
883 pub fn twig_builder_add_bullet_list(
884 builder: *mut TwigBuilder,
885 style: c_int,
886 tight: c_int,
887 out_id: *mut u32,
888 ) -> TwigStatus;
889 pub fn twig_builder_add_ordered_list(
890 builder: *mut TwigBuilder,
891 numbering: c_int,
892 delim: c_int,
893 tight: c_int,
894 start: u32,
895 has_start: c_int,
896 out_id: *mut u32,
897 ) -> TwigStatus;
898 pub fn twig_builder_add_task_list(
899 builder: *mut TwigBuilder,
900 tight: c_int,
901 out_id: *mut u32,
902 ) -> TwigStatus;
903 pub fn twig_builder_add_task_list_item(
904 builder: *mut TwigBuilder,
905 checked: c_int,
906 out_id: *mut u32,
907 ) -> TwigStatus;
908 pub fn twig_builder_add_row(
909 builder: *mut TwigBuilder,
910 head: c_int,
911 out_id: *mut u32,
912 ) -> TwigStatus;
913 pub fn twig_builder_add_cell(
914 builder: *mut TwigBuilder,
915 head: c_int,
916 alignment: c_int,
917 out_id: *mut u32,
918 ) -> TwigStatus;
919 pub fn twig_builder_add_cell_spanning(
920 builder: *mut TwigBuilder,
921 head: c_int,
922 alignment: c_int,
923 colspan: u32,
924 rowspan: u32,
925 out_id: *mut u32,
926 ) -> TwigStatus;
927 pub fn twig_builder_set_children(
928 builder: *mut TwigBuilder,
929 parent: u32,
930 ids: *const u32,
931 ids_len: usize,
932 ) -> TwigStatus;
933 pub fn twig_builder_set_attrs(
934 builder: *mut TwigBuilder,
935 id: u32,
936 kvs: *const TwigKeyVal,
937 kvs_len: usize,
938 ) -> TwigStatus;
939 pub fn twig_builder_render_html(
940 builder: *mut TwigBuilder,
941 root: u32,
942 out_ptr: *mut *const u8,
943 out_len: *mut usize,
944 ) -> TwigStatus;
945 pub fn twig_builder_serialize(
946 builder: *mut TwigBuilder,
947 root: u32,
948 format: c_int,
949 out_ptr: *mut *const u8,
950 out_len: *mut usize,
951 ) -> TwigStatus;
952 pub fn twig_builder_ast_json(
953 builder: *mut TwigBuilder,
954 root: u32,
955 out_ptr: *mut *const u8,
956 out_len: *mut usize,
957 ) -> TwigStatus;
958 pub fn twig_builder_query(
959 builder: *mut TwigBuilder,
960 root: u32,
961 selector: *const u8,
962 selector_len: usize,
963 out_ptr: *mut *const TwigQueryMatch,
964 out_len: *mut usize,
965 ) -> TwigStatus;
966}