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 INVALID_LANGUAGE: c_int = 10;
100 pub const INTERNAL_ERROR: c_int = 255;
101}
102
103#[repr(C)]
104#[derive(Clone, Copy, Debug, Eq, PartialEq)]
105pub enum TwigFormat {
106 Djot = 1,
107 Markdown = 2,
108 Xml = 3,
109 Html = 4,
110 Asciidoc = 5,
116 Commonmark = 6,
119 Gfm = 7,
121 Svg = 8,
124}
125
126pub const TWIG_FORMAT_RUNTIME_BASE: c_int = 4096;
132const _: () = assert!((TwigFormat::Svg as c_int) < TWIG_FORMAT_RUNTIME_BASE);
133
134pub const TWIG_LANGUAGE_VTABLE_VERSION: u32 = 1;
136
137pub type TwigLanguageFn = unsafe extern "C" fn(
142 user_data: *mut std::ffi::c_void,
143 row: *const u8,
144 row_len: usize,
145 input: *const u8,
146 input_len: usize,
147 out: *mut *mut u8,
148 out_len: *mut usize,
149) -> c_int;
150
151#[repr(C)]
153#[derive(Clone, Copy)]
154pub struct TwigLanguageVTable {
155 pub version: u32,
156 pub user_data: *mut std::ffi::c_void,
157 pub description: *const u8,
159 pub description_len: usize,
160 pub parse: Option<TwigLanguageFn>,
161 pub print: Option<TwigLanguageFn>,
163 pub free: Option<unsafe extern "C" fn(user_data: *mut std::ffi::c_void, ptr: *mut u8, len: usize)>,
164}
165
166pub const TWIG_TRANSPORT_VERSION: u32 = 1;
168
169#[repr(C)]
172#[derive(Clone, Copy)]
173pub struct TwigTransport {
174 pub version: u32,
175 pub user_data: *mut std::ffi::c_void,
176 pub exchange: Option<
177 unsafe extern "C" fn(
178 user_data: *mut std::ffi::c_void,
179 request: *const u8,
180 request_len: usize,
181 out: *mut *mut u8,
182 out_len: *mut usize,
183 ) -> c_int,
184 >,
185 pub free: Option<unsafe extern "C" fn(user_data: *mut std::ffi::c_void, ptr: *mut u8, len: usize)>,
186}
187
188#[cfg(target_pointer_width = "64")]
189const _: () = {
190 assert!(std::mem::size_of::<TwigTransport>() == 32);
191 assert!(std::mem::offset_of!(TwigTransport, exchange) == 16);
192 assert!(std::mem::size_of::<TwigLanguageVTable>() == 56);
193 assert!(std::mem::offset_of!(TwigLanguageVTable, user_data) == 8);
194 assert!(std::mem::offset_of!(TwigLanguageVTable, parse) == 32);
195 assert!(std::mem::offset_of!(TwigLanguageVTable, free) == 48);
196};
197
198pub const TWIG_MD_DIRECTIVES: u32 = 1 << 0;
201pub const TWIG_MD_MATH: u32 = 1 << 1;
202pub const TWIG_MD_HTML_ELEMENTS: u32 = 1 << 2;
203pub const TWIG_MD_HIGHLIGHT: u32 = 1 << 3;
204pub const TWIG_MD_HIGHLIGHT_COLORS: u32 = 1 << 4;
205
206pub enum TwigDocument {}
207
208pub enum TwigEditor {}
209
210pub enum TwigBuilder {}
211
212#[repr(C)]
216#[derive(Clone, Copy, Debug)]
217pub struct TwigKeyVal {
218 pub key: *const u8,
219 pub key_len: usize,
220 pub value: *const u8,
221 pub value_len: usize,
222}
223
224#[repr(C)]
226#[derive(Clone, Copy, Debug, Eq, PartialEq)]
227pub struct TwigSpan {
228 pub start: usize,
229 pub end: usize,
230}
231
232#[repr(C)]
237#[derive(Clone, Copy, Debug)]
238pub struct TwigQueryMatch {
239 pub node_id: u32,
240 pub span: TwigSpan,
241 pub content_span: TwigSpan,
242 pub has_content_span: c_int,
243 pub kind: *const c_char,
244}
245
246#[repr(C)]
252#[derive(Clone, Copy, Debug)]
253pub struct TwigWarning {
254 pub fidelity: c_int,
255 pub path_ptr: *const u8,
256 pub path_len: usize,
257 pub kind: *const c_char,
258}
259
260#[allow(dead_code)]
263pub const TWIG_FIDELITY_FAITHFUL: c_int = 0;
264pub const TWIG_FIDELITY_DEGRADED: c_int = 1;
265pub const TWIG_FIDELITY_DROPPED: c_int = 2;
266pub const TWIG_FIDELITY_ATTRS_DEGRADED: c_int = 3;
267pub const TWIG_FIDELITY_ATTRS_DROPPED: c_int = 4;
268
269pub const TWIG_NO_NODE: u32 = u32::MAX;
271
272#[repr(C)]
276#[derive(Clone, Copy, Debug)]
277pub struct TwigChange {
278 pub old_span: TwigSpan,
279 pub new_span: TwigSpan,
280}
281
282#[repr(C)]
298#[derive(Clone, Copy, Debug)]
299pub struct TwigFlatNode {
300 pub id: u32,
301 pub parent: u32,
302 pub first_child: u32,
303 pub next_sibling: u32,
304 pub span: TwigSpan,
305 pub content_span: TwigSpan,
306 pub has_content_span: c_int,
307 pub level: u32,
308 pub kind: *const c_char,
309 pub text_ptr: *const u8,
310 pub text_len: usize,
311 pub destination_ptr: *const u8,
312 pub destination_len: usize,
313 pub head: c_int,
314 pub alignment: c_int,
315 pub name_ptr: *const u8,
316 pub name_len: usize,
317 pub attrs_ptr: *const TwigKeyVal,
318 pub attrs_len: usize,
319 pub directive_form: c_int,
320 pub container_origin: c_int,
321 pub marker_span: TwigSpan,
322 pub has_marker_span: c_int,
323 pub checked: c_int,
324}
325
326pub const TWIG_TASK_CHECKED_NONE: c_int = -1;
328
329pub const TWIG_HEAD_NONE: c_int = -1;
331
332#[allow(dead_code)]
336pub const TWIG_ALIGN_NONE: c_int = -1;
337pub const TWIG_ALIGN_DEFAULT: c_int = 0;
338pub const TWIG_ALIGN_LEFT: c_int = 1;
339pub const TWIG_ALIGN_RIGHT: c_int = 2;
340pub const TWIG_ALIGN_CENTER: c_int = 3;
341
342#[allow(dead_code)]
348pub const TWIG_DIRECTIVE_NONE: c_int = -1;
349pub const TWIG_DIRECTIVE_TEXT: c_int = 0;
350pub const TWIG_DIRECTIVE_LEAF: c_int = 1;
351pub const TWIG_DIRECTIVE_CONTAINER: c_int = 2;
352
353#[allow(dead_code)]
366pub const TWIG_CONTAINER_ORIGIN_NONE: c_int = -1;
367pub const TWIG_CONTAINER_ORIGIN_ELEMENT: c_int = 0;
368pub const TWIG_CONTAINER_ORIGIN_DIRECTIVE: c_int = 1;
369
370pub const TWIG_TABLE_INSERT_ROW: c_int = 0;
372pub const TWIG_TABLE_DELETE_ROW: c_int = 1;
373pub const TWIG_TABLE_INSERT_COLUMN: c_int = 2;
374pub const TWIG_TABLE_DELETE_COLUMN: c_int = 3;
375pub const TWIG_TABLE_SET_ALIGNMENT: c_int = 4;
376pub const TWIG_TABLE_MOVE_ROW: c_int = 5;
377pub const TWIG_TABLE_MOVE_COLUMN: c_int = 6;
378
379unsafe extern "C" {
380 pub fn twig_abi_version() -> u32;
381 pub fn twig_language_register(
382 vtable: *const TwigLanguageVTable,
383 out_format: *mut c_int,
384 err_buf: *mut c_char,
385 err_cap: usize,
386 ) -> TwigStatus;
387 pub fn twig_language_register_transport(
388 transport: *const TwigTransport,
389 out_format: *mut c_int,
390 err_buf: *mut c_char,
391 err_cap: usize,
392 ) -> TwigStatus;
393 pub fn twig_format_by_name(name: *const u8, name_len: usize, out_format: *mut c_int) -> TwigStatus;
394 pub fn twig_format_name(format: c_int, out_ptr: *mut *const u8, out_len: *mut usize) -> TwigStatus;
395 pub fn twig_version() -> u32;
396 pub fn twig_version_string() -> *const c_char;
397 pub fn twig_parse(
398 input: *const u8,
399 input_len: usize,
400 format: c_int,
401 out_doc: *mut *mut TwigDocument,
402 ) -> TwigStatus;
403 pub fn twig_parse_ext(
404 input: *const u8,
405 input_len: usize,
406 format: c_int,
407 md_flags: u32,
408 out_doc: *mut *mut TwigDocument,
409 ) -> TwigStatus;
410 pub fn twig_document_destroy(doc: *mut TwigDocument);
411 pub fn twig_document_render_html(
412 doc: *mut TwigDocument,
413 out_ptr: *mut *const u8,
414 out_len: *mut usize,
415 ) -> TwigStatus;
416 pub fn twig_document_serialize(
417 doc: *mut TwigDocument,
418 format: c_int,
419 out_ptr: *mut *const u8,
420 out_len: *mut usize,
421 ) -> TwigStatus;
422 pub fn twig_document_ast_json(
423 doc: *mut TwigDocument,
424 out_ptr: *mut *const u8,
425 out_len: *mut usize,
426 ) -> TwigStatus;
427 pub fn twig_document_query(
428 doc: *mut TwigDocument,
429 selector: *const u8,
430 selector_len: usize,
431 out_ptr: *mut *const TwigQueryMatch,
432 out_len: *mut usize,
433 ) -> TwigStatus;
434 pub fn twig_document_node_span(
435 doc: *mut TwigDocument,
436 node_id: u32,
437 out_span: *mut TwigSpan,
438 ) -> TwigStatus;
439 pub fn twig_document_node_content_span(
440 doc: *mut TwigDocument,
441 node_id: u32,
442 out_span: *mut TwigSpan,
443 ) -> TwigStatus;
444 pub fn twig_document_node_marker_span(
445 doc: *mut TwigDocument,
446 node_id: u32,
447 out_span: *mut TwigSpan,
448 ) -> TwigStatus;
449 pub fn twig_document_attrs_span(
450 doc: *mut TwigDocument,
451 node_id: u32,
452 out_span: *mut TwigSpan,
453 ) -> TwigStatus;
454 pub fn twig_document_line_prefix(
455 doc: *mut TwigDocument,
456 offset: usize,
457 out_span: *mut TwigSpan,
458 ) -> TwigStatus;
459 pub fn twig_document_continuation_prefix(
460 doc: *mut TwigDocument,
461 offset: usize,
462 out_ptr: *mut *const u8,
463 out_len: *mut usize,
464 out_columns: *mut usize,
465 ) -> TwigStatus;
466 pub fn twig_document_blank_line_prefix(
467 doc: *mut TwigDocument,
468 offset: usize,
469 out_ptr: *mut *const u8,
470 out_len: *mut usize,
471 out_columns: *mut usize,
472 ) -> TwigStatus;
473 pub fn twig_document_cell_colspan(
474 doc: *mut TwigDocument,
475 node_id: u32,
476 out_colspan: *mut u32,
477 ) -> TwigStatus;
478 pub fn twig_document_cell_rowspan(
479 doc: *mut TwigDocument,
480 node_id: u32,
481 out_rowspan: *mut u32,
482 ) -> TwigStatus;
483 pub fn twig_document_nodes(
484 doc: *mut TwigDocument,
485 out_ptr: *mut *const TwigFlatNode,
486 out_len: *mut usize,
487 ) -> TwigStatus;
488 pub fn twig_document_definitions(
489 doc: *mut TwigDocument,
490 out_ptr: *mut *const TwigQueryMatch,
491 out_len: *mut usize,
492 ) -> TwigStatus;
493 pub fn twig_document_diagnostics(
494 doc: *mut TwigDocument,
495 format: c_int,
496 out_ptr: *mut *const TwigWarning,
497 out_len: *mut usize,
498 ) -> TwigStatus;
499 pub fn twig_document_children(
500 doc: *mut TwigDocument,
501 node_id: u32,
502 out_ptr: *mut *const TwigQueryMatch,
503 out_len: *mut usize,
504 ) -> TwigStatus;
505 pub fn twig_document_subtree(
506 doc: *mut TwigDocument,
507 node_id: u32,
508 out_ptr: *mut *const TwigFlatNode,
509 out_len: *mut usize,
510 ) -> TwigStatus;
511 pub fn twig_document_node_at(
512 doc: *mut TwigDocument,
513 offset: usize,
514 out_match: *mut TwigQueryMatch,
515 ) -> TwigStatus;
516 pub fn twig_document_nodes_at(
517 doc: *mut TwigDocument,
518 offset: usize,
519 out_ptr: *mut *const TwigQueryMatch,
520 out_len: *mut usize,
521 ) -> TwigStatus;
522 pub fn twig_document_node_at_caret(
523 doc: *mut TwigDocument,
524 offset: usize,
525 out_match: *mut TwigQueryMatch,
526 ) -> TwigStatus;
527 pub fn twig_document_nodes_at_caret(
528 doc: *mut TwigDocument,
529 offset: usize,
530 out_ptr: *mut *const TwigQueryMatch,
531 out_len: *mut usize,
532 ) -> TwigStatus;
533
534 pub fn twig_editor_create(
535 input: *const u8,
536 input_len: usize,
537 format: c_int,
538 out_editor: *mut *mut TwigEditor,
539 ) -> TwigStatus;
540 pub fn twig_editor_create_ext(
541 input: *const u8,
542 input_len: usize,
543 format: c_int,
544 md_flags: u32,
545 out_editor: *mut *mut TwigEditor,
546 ) -> TwigStatus;
547 pub fn twig_editor_destroy(editor: *mut TwigEditor);
548 pub fn twig_editor_replace(
549 editor: *mut TwigEditor,
550 locator: *const u8,
551 locator_len: usize,
552 text: *const u8,
553 text_len: usize,
554 ) -> TwigStatus;
555 pub fn twig_editor_replace_content(
556 editor: *mut TwigEditor,
557 locator: *const u8,
558 locator_len: usize,
559 text: *const u8,
560 text_len: usize,
561 ) -> TwigStatus;
562 pub fn twig_editor_insert_before(
563 editor: *mut TwigEditor,
564 locator: *const u8,
565 locator_len: usize,
566 text: *const u8,
567 text_len: usize,
568 ) -> TwigStatus;
569 pub fn twig_editor_insert_after(
570 editor: *mut TwigEditor,
571 locator: *const u8,
572 locator_len: usize,
573 text: *const u8,
574 text_len: usize,
575 ) -> TwigStatus;
576 pub fn twig_editor_insert_child(
577 editor: *mut TwigEditor,
578 locator: *const u8,
579 locator_len: usize,
580 child_index: usize,
581 text: *const u8,
582 text_len: usize,
583 ) -> TwigStatus;
584 pub fn twig_editor_delete(
585 editor: *mut TwigEditor,
586 locator: *const u8,
587 locator_len: usize,
588 ) -> TwigStatus;
589 pub fn twig_editor_delete_smart(
590 editor: *mut TwigEditor,
591 locator: *const u8,
592 locator_len: usize,
593 ) -> TwigStatus;
594 pub fn twig_editor_unwrap(
595 editor: *mut TwigEditor,
596 locator: *const u8,
597 locator_len: usize,
598 ) -> TwigStatus;
599 pub fn twig_editor_move_before(
600 editor: *mut TwigEditor,
601 locator: *const u8,
602 locator_len: usize,
603 anchor: *const u8,
604 anchor_len: usize,
605 ) -> TwigStatus;
606 pub fn twig_editor_move_after(
607 editor: *mut TwigEditor,
608 locator: *const u8,
609 locator_len: usize,
610 anchor: *const u8,
611 anchor_len: usize,
612 ) -> TwigStatus;
613 pub fn twig_editor_filter(
614 editor: *mut TwigEditor,
615 drop: *const u8,
616 drop_len: usize,
617 keep: *const u8,
618 keep_len: usize,
619 unwrap_kept: c_int,
620 ) -> TwigStatus;
621 pub fn twig_editor_source(
622 editor: *mut TwigEditor,
623 out_ptr: *mut *const u8,
624 out_len: *mut usize,
625 ) -> TwigStatus;
626 pub fn twig_editor_document(
627 editor: *mut TwigEditor,
628 out_doc: *mut *mut TwigDocument,
629 ) -> TwigStatus;
630 pub fn twig_editor_ast_json(
631 editor: *mut TwigEditor,
632 out_ptr: *mut *const u8,
633 out_len: *mut usize,
634 ) -> TwigStatus;
635 pub fn twig_editor_query(
636 editor: *mut TwigEditor,
637 selector: *const u8,
638 selector_len: usize,
639 out_ptr: *mut *const TwigQueryMatch,
640 out_len: *mut usize,
641 ) -> TwigStatus;
642 pub fn twig_editor_edit_range(
643 editor: *mut TwigEditor,
644 start: usize,
645 end: usize,
646 text: *const u8,
647 text_len: usize,
648 out_change: *mut TwigChange,
649 ) -> TwigStatus;
650 pub fn twig_editor_last_change(
651 editor: *mut TwigEditor,
652 out_change: *mut TwigChange,
653 ) -> TwigStatus;
654 pub fn twig_editor_undo(editor: *mut TwigEditor, out_change: *mut TwigChange) -> TwigStatus;
655 pub fn twig_editor_redo(editor: *mut TwigEditor, out_change: *mut TwigChange) -> TwigStatus;
656 pub fn twig_editor_coalesce_last(editor: *mut TwigEditor) -> TwigStatus;
657 pub fn twig_editor_revision(editor: *mut TwigEditor) -> u64;
658 pub fn twig_editor_dirty_range(editor: *mut TwigEditor, out_span: *mut TwigSpan) -> TwigStatus;
659 pub fn twig_editor_clear_dirty(editor: *mut TwigEditor) -> TwigStatus;
660 pub fn twig_editor_set_caret_blob(
661 editor: *mut TwigEditor,
662 blob_ptr: *const u8,
663 blob_len: usize,
664 ) -> TwigStatus;
665 pub fn twig_editor_caret_blob(
666 editor: *mut TwigEditor,
667 out_ptr: *mut *const u8,
668 out_len: *mut usize,
669 ) -> TwigStatus;
670 pub fn twig_editor_nodes(
671 editor: *mut TwigEditor,
672 out_ptr: *mut *const TwigFlatNode,
673 out_len: *mut usize,
674 ) -> TwigStatus;
675 pub fn twig_editor_child_spans(
676 editor: *mut TwigEditor,
677 node_id: u32,
678 out_ptr: *mut *const TwigQueryMatch,
679 out_len: *mut usize,
680 ) -> TwigStatus;
681 pub fn twig_editor_subtree(
682 editor: *mut TwigEditor,
683 node_id: u32,
684 out_ptr: *mut *const TwigFlatNode,
685 out_len: *mut usize,
686 ) -> TwigStatus;
687 pub fn twig_editor_node_at(
688 editor: *mut TwigEditor,
689 offset: usize,
690 out_match: *mut TwigQueryMatch,
691 ) -> TwigStatus;
692 pub fn twig_editor_nodes_at(
693 editor: *mut TwigEditor,
694 offset: usize,
695 out_ptr: *mut *const TwigQueryMatch,
696 out_len: *mut usize,
697 ) -> TwigStatus;
698 pub fn twig_editor_wrap_range(
699 editor: *mut TwigEditor,
700 start: usize,
701 end: usize,
702 kind: c_int,
703 out_change: *mut TwigChange,
704 ) -> TwigStatus;
705 pub fn twig_editor_toggle_inline(
706 editor: *mut TwigEditor,
707 start: usize,
708 end: usize,
709 kind: c_int,
710 out_change: *mut TwigChange,
711 ) -> TwigStatus;
712 pub fn twig_editor_set_block(
713 editor: *mut TwigEditor,
714 offset: usize,
715 block_kind: c_int,
716 level: u32,
717 out_change: *mut TwigChange,
718 ) -> TwigStatus;
719 pub fn twig_editor_toggle_block_container(
720 editor: *mut TwigEditor,
721 start: usize,
722 end: usize,
723 container_kind: c_int,
724 out_change: *mut TwigChange,
725 ) -> TwigStatus;
726 pub fn twig_editor_renumber_ordered_lists(
727 editor: *mut TwigEditor,
728 offset: usize,
729 out_change: *mut TwigChange,
730 ) -> TwigStatus;
731 pub fn twig_format_supports(
736 format: c_int,
737 gesture: c_int,
738 kind: c_int,
739 out_supported: *mut c_int,
740 ) -> TwigStatus;
741 pub fn twig_format_supports_ext(
747 format: c_int,
748 md_flags: u32,
749 gesture: c_int,
750 kind: c_int,
751 out_supported: *mut c_int,
752 ) -> TwigStatus;
753 pub fn twig_format_is_authorable(format: c_int, out_authorable: *mut c_int) -> TwigStatus;
756 pub fn twig_editor_table_edit(
757 editor: *mut TwigEditor,
758 offset: usize,
759 op: c_int,
760 arg: c_int,
761 out_change: *mut TwigChange,
762 ) -> TwigStatus;
763 pub fn twig_editor_insert_table(
764 editor: *mut TwigEditor,
765 offset: usize,
766 rows: usize,
767 cols: usize,
768 out_change: *mut TwigChange,
769 ) -> TwigStatus;
770 pub fn twig_editor_insert_directive(
771 editor: *mut TwigEditor,
772 offset: usize,
773 name_ptr: *const u8,
774 name_len: usize,
775 label_ptr: *const u8,
776 label_len: usize,
777 attrs_ptr: *const TwigKeyVal,
778 attrs_len: usize,
779 out_change: *mut TwigChange,
780 ) -> TwigStatus;
781 pub fn twig_editor_set_block_attrs(
782 editor: *mut TwigEditor,
783 offset: usize,
784 attrs_ptr: *const TwigKeyVal,
785 attrs_len: usize,
786 out_change: *mut TwigChange,
787 ) -> TwigStatus;
788 pub fn twig_editor_wrap_range_attrs(
789 editor: *mut TwigEditor,
790 start: usize,
791 end: usize,
792 attrs_ptr: *const TwigKeyVal,
793 attrs_len: usize,
794 out_change: *mut TwigChange,
795 ) -> TwigStatus;
796 pub fn twig_editor_set_node_attrs(
797 editor: *mut TwigEditor,
798 node_id: u32,
799 attrs_ptr: *const TwigKeyVal,
800 attrs_len: usize,
801 out_change: *mut TwigChange,
802 ) -> TwigStatus;
803 pub fn twig_editor_insert_link(
804 editor: *mut TwigEditor,
805 start: usize,
806 end: usize,
807 destination: *const u8,
808 destination_len: usize,
809 out_change: *mut TwigChange,
810 ) -> TwigStatus;
811 pub fn twig_editor_insert_image(
812 editor: *mut TwigEditor,
813 start: usize,
814 end: usize,
815 destination: *const u8,
816 destination_len: usize,
817 out_change: *mut TwigChange,
818 ) -> TwigStatus;
819
820 pub fn twig_editor_insert_literal(
821 editor: *mut TwigEditor,
822 offset: usize,
823 text: *const u8,
824 text_len: usize,
825 out_change: *mut TwigChange,
826 ) -> TwigStatus;
827
828 pub fn twig_editor_insert_line_break(
829 editor: *mut TwigEditor,
830 offset: usize,
831 out_change: *mut TwigChange,
832 ) -> TwigStatus;
833
834 pub fn twig_editor_insert_thematic_break(
835 editor: *mut TwigEditor,
836 offset: usize,
837 out_change: *mut TwigChange,
838 ) -> TwigStatus;
839
840 pub fn twig_editor_split_block(
841 editor: *mut TwigEditor,
842 offset: usize,
843 out_change: *mut TwigChange,
844 ) -> TwigStatus;
845
846 pub fn twig_editor_join_blocks(
847 editor: *mut TwigEditor,
848 offset: usize,
849 out_change: *mut TwigChange,
850 ) -> TwigStatus;
851
852 pub fn twig_editor_move_block(
853 editor: *mut TwigEditor,
854 from: usize,
855 to: usize,
856 out_change: *mut TwigChange,
857 ) -> TwigStatus;
858 pub fn twig_editor_toggle_code_block(
862 editor: *mut TwigEditor,
863 start: usize,
864 end: usize,
865 language: *const u8,
866 language_len: usize,
867 has_language: c_int,
868 out_change: *mut TwigChange,
869 ) -> TwigStatus;
870 pub fn twig_editor_set_code_language(
871 editor: *mut TwigEditor,
872 offset: usize,
873 language: *const u8,
874 language_len: usize,
875 has_language: c_int,
876 out_change: *mut TwigChange,
877 ) -> TwigStatus;
878 pub fn twig_editor_set_mark_color(
882 editor: *mut TwigEditor,
883 offset: usize,
884 color: *const u8,
885 color_len: usize,
886 has_color: c_int,
887 out_change: *mut TwigChange,
888 ) -> TwigStatus;
889 pub fn twig_editor_toggle_task_item(
890 editor: *mut TwigEditor,
891 offset: usize,
892 out_change: *mut TwigChange,
893 ) -> TwigStatus;
894 pub fn twig_editor_set_task_checked(
895 editor: *mut TwigEditor,
896 offset: usize,
897 checked: c_int,
898 out_change: *mut TwigChange,
899 ) -> TwigStatus;
900 pub fn twig_editor_toggle_task_checked(
901 editor: *mut TwigEditor,
902 offset: usize,
903 out_change: *mut TwigChange,
904 ) -> TwigStatus;
905 pub fn twig_editor_insert_footnote(
906 editor: *mut TwigEditor,
907 offset: usize,
908 label: *const u8,
909 label_len: usize,
910 out_change: *mut TwigChange,
911 ) -> TwigStatus;
912
913 pub fn twig_builder_create(out_builder: *mut *mut TwigBuilder) -> TwigStatus;
914 pub fn twig_builder_destroy(builder: *mut TwigBuilder);
915 pub fn twig_builder_add(builder: *mut TwigBuilder, kind: c_int, out_id: *mut u32)
916 -> TwigStatus;
917 pub fn twig_builder_add_text(
918 builder: *mut TwigBuilder,
919 kind: c_int,
920 text: *const u8,
921 text_len: usize,
922 out_id: *mut u32,
923 ) -> TwigStatus;
924 pub fn twig_builder_add_heading(
925 builder: *mut TwigBuilder,
926 level: u32,
927 out_id: *mut u32,
928 ) -> TwigStatus;
929 pub fn twig_builder_add_code_block(
930 builder: *mut TwigBuilder,
931 lang: *const u8,
932 lang_len: usize,
933 has_lang: c_int,
934 text: *const u8,
935 text_len: usize,
936 out_id: *mut u32,
937 ) -> TwigStatus;
938 pub fn twig_builder_add_raw_block(
939 builder: *mut TwigBuilder,
940 format: *const u8,
941 format_len: usize,
942 text: *const u8,
943 text_len: usize,
944 out_id: *mut u32,
945 ) -> TwigStatus;
946 pub fn twig_builder_add_metadata(
947 builder: *mut TwigBuilder,
948 lang: *const u8,
949 lang_len: usize,
950 text: *const u8,
951 text_len: usize,
952 out_id: *mut u32,
953 ) -> TwigStatus;
954 pub fn twig_builder_add_raw_inline(
955 builder: *mut TwigBuilder,
956 format: *const u8,
957 format_len: usize,
958 text: *const u8,
959 text_len: usize,
960 out_id: *mut u32,
961 ) -> TwigStatus;
962 pub fn twig_builder_add_smart_punctuation(
963 builder: *mut TwigBuilder,
964 punct_kind: c_int,
965 text: *const u8,
966 text_len: usize,
967 out_id: *mut u32,
968 ) -> TwigStatus;
969 pub fn twig_builder_add_link(
970 builder: *mut TwigBuilder,
971 destination: *const u8,
972 destination_len: usize,
973 has_destination: c_int,
974 reference: *const u8,
975 reference_len: usize,
976 has_reference: c_int,
977 out_id: *mut u32,
978 ) -> TwigStatus;
979 pub fn twig_builder_add_image(
980 builder: *mut TwigBuilder,
981 destination: *const u8,
982 destination_len: usize,
983 has_destination: c_int,
984 reference: *const u8,
985 reference_len: usize,
986 has_reference: c_int,
987 out_id: *mut u32,
988 ) -> TwigStatus;
989 pub fn twig_builder_add_directive(
990 builder: *mut TwigBuilder,
991 form: c_int,
992 name: *const u8,
993 name_len: usize,
994 out_id: *mut u32,
995 ) -> TwigStatus;
996 pub fn twig_builder_add_element(
997 builder: *mut TwigBuilder,
998 name: *const u8,
999 name_len: usize,
1000 out_id: *mut u32,
1001 ) -> TwigStatus;
1002 pub fn twig_builder_add_processing_instruction(
1003 builder: *mut TwigBuilder,
1004 target: *const u8,
1005 target_len: usize,
1006 data: *const u8,
1007 data_len: usize,
1008 out_id: *mut u32,
1009 ) -> TwigStatus;
1010 pub fn twig_builder_add_footnote(
1011 builder: *mut TwigBuilder,
1012 label: *const u8,
1013 label_len: usize,
1014 out_id: *mut u32,
1015 ) -> TwigStatus;
1016 pub fn twig_builder_add_citation(
1017 builder: *mut TwigBuilder,
1018 label: *const u8,
1019 label_len: usize,
1020 out_id: *mut u32,
1021 ) -> TwigStatus;
1022 pub fn twig_builder_add_substitution(
1023 builder: *mut TwigBuilder,
1024 label: *const u8,
1025 label_len: usize,
1026 out_id: *mut u32,
1027 ) -> TwigStatus;
1028 pub fn twig_builder_add_reference(
1029 builder: *mut TwigBuilder,
1030 label: *const u8,
1031 label_len: usize,
1032 destination: *const u8,
1033 destination_len: usize,
1034 out_id: *mut u32,
1035 ) -> TwigStatus;
1036 pub fn twig_builder_add_bullet_list(
1037 builder: *mut TwigBuilder,
1038 style: c_int,
1039 tight: c_int,
1040 out_id: *mut u32,
1041 ) -> TwigStatus;
1042 pub fn twig_builder_add_ordered_list(
1043 builder: *mut TwigBuilder,
1044 numbering: c_int,
1045 delim: c_int,
1046 tight: c_int,
1047 start: u32,
1048 has_start: c_int,
1049 out_id: *mut u32,
1050 ) -> TwigStatus;
1051 pub fn twig_builder_add_task_list(
1052 builder: *mut TwigBuilder,
1053 tight: c_int,
1054 out_id: *mut u32,
1055 ) -> TwigStatus;
1056 pub fn twig_builder_add_task_list_item(
1057 builder: *mut TwigBuilder,
1058 checked: c_int,
1059 out_id: *mut u32,
1060 ) -> TwigStatus;
1061 pub fn twig_builder_add_row(
1062 builder: *mut TwigBuilder,
1063 head: c_int,
1064 out_id: *mut u32,
1065 ) -> TwigStatus;
1066 pub fn twig_builder_add_cell(
1067 builder: *mut TwigBuilder,
1068 head: c_int,
1069 alignment: c_int,
1070 out_id: *mut u32,
1071 ) -> TwigStatus;
1072 pub fn twig_builder_add_cell_spanning(
1073 builder: *mut TwigBuilder,
1074 head: c_int,
1075 alignment: c_int,
1076 colspan: u32,
1077 rowspan: u32,
1078 out_id: *mut u32,
1079 ) -> TwigStatus;
1080 pub fn twig_builder_set_children(
1081 builder: *mut TwigBuilder,
1082 parent: u32,
1083 ids: *const u32,
1084 ids_len: usize,
1085 ) -> TwigStatus;
1086 pub fn twig_builder_set_attrs(
1087 builder: *mut TwigBuilder,
1088 id: u32,
1089 kvs: *const TwigKeyVal,
1090 kvs_len: usize,
1091 ) -> TwigStatus;
1092 pub fn twig_builder_render_html(
1093 builder: *mut TwigBuilder,
1094 root: u32,
1095 out_ptr: *mut *const u8,
1096 out_len: *mut usize,
1097 ) -> TwigStatus;
1098 pub fn twig_builder_serialize(
1099 builder: *mut TwigBuilder,
1100 root: u32,
1101 format: c_int,
1102 out_ptr: *mut *const u8,
1103 out_len: *mut usize,
1104 ) -> TwigStatus;
1105 pub fn twig_builder_ast_json(
1106 builder: *mut TwigBuilder,
1107 root: u32,
1108 out_ptr: *mut *const u8,
1109 out_len: *mut usize,
1110 ) -> TwigStatus;
1111 pub fn twig_builder_query(
1112 builder: *mut TwigBuilder,
1113 root: u32,
1114 selector: *const u8,
1115 selector_len: usize,
1116 out_ptr: *mut *const TwigQueryMatch,
1117 out_len: *mut usize,
1118 ) -> TwigStatus;
1119}