diff --git a/.gitignore b/.gitignore index c6ffd78..77172ad 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ dist *.so .coverage .tox +.vagrant diff --git a/build_ffi.py b/build_ffi.py index 89a0d62..9de0a70 100644 --- a/build_ffi.py +++ b/build_ffi.py @@ -289,6 +289,54 @@ // --------------- void *misaka_get_renderer(const hoedown_renderer_data *data); + + +// ------------------------ +// --- Python callbacks --- +// ------------------------ + +/* block level callbacks - NULL skips the block */ +extern "Python" void _misaka_blockcode(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_buffer *lang, const hoedown_renderer_data *data); +extern "Python" void _misaka_blockquote(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" void _misaka_header(hoedown_buffer *ob, const hoedown_buffer *content, int level, const hoedown_renderer_data *data); +extern "Python" void _misaka_hrule(hoedown_buffer *ob, const hoedown_renderer_data *data); +extern "Python" void _misaka_list(hoedown_buffer *ob, const hoedown_buffer *content, hoedown_list_flags flags, const hoedown_renderer_data *data); +extern "Python" void _misaka_listitem(hoedown_buffer *ob, const hoedown_buffer *content, hoedown_list_flags flags, const hoedown_renderer_data *data); +extern "Python" void _misaka_paragraph(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" void _misaka_table(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" void _misaka_table_header(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" void _misaka_table_body(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" void _misaka_table_row(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" void _misaka_table_cell(hoedown_buffer *ob, const hoedown_buffer *content, hoedown_table_flags flags, const hoedown_renderer_data *data); +extern "Python" void _misaka_footnotes(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" void _misaka_footnote_def(hoedown_buffer *ob, const hoedown_buffer *content, unsigned int num, const hoedown_renderer_data *data); +extern "Python" void _misaka_blockhtml(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data); + +/* span level callbacks - NULL or return 0 prints the span verbatim */ +extern "Python" int _misaka_autolink(hoedown_buffer *ob, const hoedown_buffer *link, hoedown_autolink_type type, const hoedown_renderer_data *data); +extern "Python" int _misaka_codespan(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data); +extern "Python" int _misaka_double_emphasis(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" int _misaka_emphasis(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" int _misaka_underline(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" int _misaka_highlight(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" int _misaka_quote(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" int _misaka_image(hoedown_buffer *ob, const hoedown_buffer *link, const hoedown_buffer *title, const hoedown_buffer *alt, const hoedown_renderer_data *data); +extern "Python" int _misaka_linebreak(hoedown_buffer *ob, const hoedown_renderer_data *data); +extern "Python" int _misaka_link(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_buffer *link, const hoedown_buffer *title, const hoedown_renderer_data *data); +extern "Python" int _misaka_triple_emphasis(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" int _misaka_strikethrough(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" int _misaka_superscript(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); +extern "Python" int _misaka_footnote_ref(hoedown_buffer *ob, unsigned int num, const hoedown_renderer_data *data); +extern "Python" int _misaka_math(hoedown_buffer *ob, const hoedown_buffer *text, int displaymode, const hoedown_renderer_data *data); +extern "Python" int _misaka_raw_html(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data); + +/* low level callbacks - NULL copies input directly into the output */ +extern "Python" void _misaka_entity(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data); +extern "Python" void _misaka_normal_text(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data); + +/* miscellaneous callbacks */ +extern "Python" void _misaka_doc_header(hoedown_buffer *ob, int inline_render, const hoedown_renderer_data *data); +extern "Python" void _misaka_doc_footer(hoedown_buffer *ob, int inline_render, const hoedown_renderer_data *data); """) diff --git a/misaka/callbacks.py b/misaka/callbacks.py index 9472d37..580dd2b 100644 --- a/misaka/callbacks.py +++ b/misaka/callbacks.py @@ -5,9 +5,8 @@ from .utils import to_string -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *text, ' - ' const hoedown_buffer *lang, const hoedown_renderer_data *data)') -def cb_blockcode(ob, text, lang, data): +@ffi.def_extern() +def _misaka_blockcode(ob, text, lang, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) text = to_string(text) lang = to_string(lang) @@ -17,9 +16,8 @@ def cb_blockcode(ob, text, lang, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_blockquote(ob, content, data): +@ffi.def_extern() +def _misaka_blockquote(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.blockquote(content) @@ -27,9 +25,8 @@ def cb_blockquote(ob, content, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' int level, const hoedown_renderer_data *data)') -def cb_header(ob, content, level, data): +@ffi.def_extern() +def _misaka_header(ob, content, level, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) level = int(level) @@ -38,8 +35,8 @@ def cb_header(ob, content, level, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, const hoedown_renderer_data *data)') -def cb_hrule(ob, data): +@ffi.def_extern() +def _misaka_hrule(ob, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) result = renderer.hrule() if result: @@ -47,9 +44,8 @@ def cb_hrule(ob, data): # flags: LIST_ORDERED, LI_BLOCK. -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' hoedown_list_flags flags, const hoedown_renderer_data *data)') -def cb_list(ob, content, flags, data): +@ffi.def_extern() +def _misaka_list(ob, content, flags, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) flags = int(flags) @@ -61,9 +57,8 @@ def cb_list(ob, content, flags, data): # flags: LIST_ORDERED, LI_BLOCK. -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' hoedown_list_flags flags, const hoedown_renderer_data *data)') -def cb_listitem(ob, content, flags, data): +@ffi.def_extern() +def _misaka_listitem(ob, content, flags, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) flags = int(flags) @@ -74,9 +69,8 @@ def cb_listitem(ob, content, flags, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_paragraph(ob, content, data): +@ffi.def_extern() +def _misaka_paragraph(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.paragraph(content) @@ -84,9 +78,8 @@ def cb_paragraph(ob, content, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_table(ob, content, data): +@ffi.def_extern() +def _misaka_table(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.table(content) @@ -94,9 +87,8 @@ def cb_table(ob, content, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_table_header(ob, content, data): +@ffi.def_extern() +def _misaka_table_header(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.table_header(content) @@ -104,9 +96,8 @@ def cb_table_header(ob, content, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_table_body(ob, content, data): +@ffi.def_extern() +def _misaka_table_body(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.table_body(content) @@ -114,9 +105,8 @@ def cb_table_body(ob, content, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_table_row(ob, content, data): +@ffi.def_extern() +def _misaka_table_row(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.table_row(content) @@ -126,9 +116,8 @@ def cb_table_row(ob, content, data): # flags: TABLE_ALIGNMASK, TABLE_ALIGN_LEFT, TABLE_ALIGN_RIGHT, # TABLE_ALIGN_CENTER, TABLE_HEADER -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' hoedown_table_flags flags, const hoedown_renderer_data *data)') -def cb_table_cell(ob, content, flags, data): +@ffi.def_extern() +def _misaka_table_cell(ob, content, flags, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) flags = int(flags) @@ -149,9 +138,8 @@ def cb_table_cell(ob, content, flags, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_footnotes(ob, content, data): +@ffi.def_extern() +def _misaka_footnotes(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.footnotes(content) @@ -159,9 +147,8 @@ def cb_footnotes(ob, content, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' unsigned int num, const hoedown_renderer_data *data)') -def cb_footnote_def(ob, content, num, data): +@ffi.def_extern() +def _misaka_footnote_def(ob, content, num, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) num = int(num) @@ -170,9 +157,8 @@ def cb_footnote_def(ob, content, num, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *text, ' - ' const hoedown_renderer_data *data)') -def cb_blockhtml(ob, text, data): +@ffi.def_extern() +def _misaka_blockhtml(ob, text, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) text = to_string(text) result = renderer.blockhtml(text) @@ -180,9 +166,8 @@ def cb_blockhtml(ob, text, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *link, ' - ' hoedown_autolink_type type, const hoedown_renderer_data *data)') -def cb_autolink(ob, link, type, data): +@ffi.def_extern() +def _misaka_autolink(ob, link, type, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) link = to_string(link) is_email = int(type) & AUTOLINK_EMAIL != 0 @@ -193,9 +178,8 @@ def cb_autolink(ob, link, type, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *text, ' - ' const hoedown_renderer_data *data)') -def cb_codespan(ob, text, data): +@ffi.def_extern() +def _misaka_codespan(ob, text, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) text = to_string(text) result = renderer.codespan(text) @@ -205,9 +189,8 @@ def cb_codespan(ob, text, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_double_emphasis(ob, content, data): +@ffi.def_extern() +def _misaka_double_emphasis(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.double_emphasis(content) @@ -217,9 +200,8 @@ def cb_double_emphasis(ob, content, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_emphasis(ob, content, data): +@ffi.def_extern() +def _misaka_emphasis(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.emphasis(content) @@ -229,9 +211,8 @@ def cb_emphasis(ob, content, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_underline(ob, content, data): +@ffi.def_extern() +def _misaka_underline(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.underline(content) @@ -241,9 +222,8 @@ def cb_underline(ob, content, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_highlight(ob, content, data): +@ffi.def_extern() +def _misaka_highlight(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.highlight(content) @@ -253,9 +233,8 @@ def cb_highlight(ob, content, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_quote(ob, content, data): +@ffi.def_extern() +def _misaka_quote(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.quote(content) @@ -265,10 +244,8 @@ def cb_quote(ob, content, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *link, ' - ' const hoedown_buffer *title, const hoedown_buffer *alt, ' - ' const hoedown_renderer_data *data)') -def cb_image(ob, link, title, alt, data): +@ffi.def_extern() +def _misaka_image(ob, link, title, alt, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) link = to_string(link) title = to_string(title) @@ -280,8 +257,8 @@ def cb_image(ob, link, title, alt, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_renderer_data *data)') -def cb_linebreak(ob, data): +@ffi.def_extern() +def _misaka_linebreak(ob, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) result = renderer.linebreak() if result: @@ -290,10 +267,8 @@ def cb_linebreak(ob, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_buffer *link, const hoedown_buffer *title, ' - ' const hoedown_renderer_data *data)') -def cb_link(ob, content, link, title, data): +@ffi.def_extern() +def _misaka_link(ob, content, link, title, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) link = to_string(link) @@ -305,9 +280,8 @@ def cb_link(ob, content, link, title, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_triple_emphasis(ob, content, data): +@ffi.def_extern() +def _misaka_triple_emphasis(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.triple_emphasis(content) @@ -317,9 +291,8 @@ def cb_triple_emphasis(ob, content, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_strikethrough(ob, content, data): +@ffi.def_extern() +def _misaka_strikethrough(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.strikethrough(content) @@ -329,9 +302,8 @@ def cb_strikethrough(ob, content, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *content, ' - ' const hoedown_renderer_data *data)') -def cb_superscript(ob, content, data): +@ffi.def_extern() +def _misaka_superscript(ob, content, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) content = to_string(content) result = renderer.superscript(content) @@ -341,9 +313,8 @@ def cb_superscript(ob, content, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, unsigned int num, ' - ' const hoedown_renderer_data *data)') -def cb_footnote_ref(ob, num, data): +@ffi.def_extern() +def _misaka_footnote_ref(ob, num, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) num = int(num) result = renderer.footnote_ref(num) @@ -353,9 +324,8 @@ def cb_footnote_ref(ob, num, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *text, ' - ' int displaymode, const hoedown_renderer_data *data)') -def cb_math(ob, text, displaymode, data): +@ffi.def_extern() +def _misaka_math(ob, text, displaymode, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) text = to_string(text) displaymode = int(displaymode) @@ -366,9 +336,8 @@ def cb_math(ob, text, displaymode, data): return 0 -@ffi.callback('int(hoedown_buffer *ob, const hoedown_buffer *text, ' - ' const hoedown_renderer_data *data)') -def cb_raw_html(ob, text, data): +@ffi.def_extern() +def _misaka_raw_html(ob, text, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) text = to_string(text) result = renderer.raw_html(text) @@ -378,9 +347,8 @@ def cb_raw_html(ob, text, data): return 0 -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *text, ' - ' const hoedown_renderer_data *data)') -def cb_entity(ob, text, data): +@ffi.def_extern() +def _misaka_entity(ob, text, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) text = to_string(text) result = renderer.entity(text) @@ -388,9 +356,8 @@ def cb_entity(ob, text, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, const hoedown_buffer *text, ' - ' const hoedown_renderer_data *data)') -def cb_normal_text(ob, text, data): +@ffi.def_extern() +def _misaka_normal_text(ob, text, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) text = to_string(text) result = renderer.normal_text(text) @@ -398,8 +365,8 @@ def cb_normal_text(ob, text, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, int inline_render, const hoedown_renderer_data *data)') -def cb_doc_header(ob, inline_render, data): +@ffi.def_extern() +def _misaka_doc_header(ob, inline_render, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) inline_render = int(inline_render) result = renderer.doc_header(inline_render) @@ -407,8 +374,8 @@ def cb_doc_header(ob, inline_render, data): lib.hoedown_buffer_puts(ob, result.encode('utf-8')) -@ffi.callback('void(hoedown_buffer *ob, int inline_render, const hoedown_renderer_data *data)') -def cb_doc_footer(ob, inline_render, data): +@ffi.def_extern() +def _misaka_doc_footer(ob, inline_render, data): renderer = ffi.from_handle(lib.misaka_get_renderer(data)) inline_render = int(inline_render) result = renderer.doc_footer(inline_render) @@ -418,45 +385,45 @@ def cb_doc_footer(ob, inline_render, data): python_callbacks = { # block level callbacks - NULL skips the block - 'blockcode': cb_blockcode, - 'blockquote': cb_blockquote, - 'header': cb_header, - 'hrule': cb_hrule, - 'list': cb_list, - 'listitem': cb_listitem, - 'paragraph': cb_paragraph, - 'table': cb_table, - 'table_header': cb_table_header, - 'table_body': cb_table_body, - 'table_row': cb_table_row, - 'table_cell': cb_table_cell, - 'footnotes': cb_footnotes, - 'footnote_def': cb_footnote_def, - 'blockhtml': cb_blockhtml, + 'blockcode': lib._misaka_blockcode, + 'blockquote': lib._misaka_blockquote, + 'header': lib._misaka_header, + 'hrule': lib._misaka_hrule, + 'list': lib._misaka_list, + 'listitem': lib._misaka_listitem, + 'paragraph': lib._misaka_paragraph, + 'table': lib._misaka_table, + 'table_header': lib._misaka_table_header, + 'table_body': lib._misaka_table_body, + 'table_row': lib._misaka_table_row, + 'table_cell': lib._misaka_table_cell, + 'footnotes': lib._misaka_footnotes, + 'footnote_def': lib._misaka_footnote_def, + 'blockhtml': lib._misaka_blockhtml, # span level callbacks - NULL or return 0 prints the span verbatim - 'autolink': cb_autolink, - 'codespan': cb_codespan, - 'double_emphasis': cb_double_emphasis, - 'emphasis': cb_emphasis, - 'underline': cb_underline, - 'highlight': cb_highlight, - 'quote': cb_quote, - 'image': cb_image, - 'linebreak': cb_linebreak, - 'link': cb_link, - 'triple_emphasis': cb_triple_emphasis, - 'strikethrough': cb_strikethrough, - 'superscript': cb_superscript, - 'footnote_ref': cb_footnote_ref, - 'math': cb_math, - 'raw_html': cb_raw_html, + 'autolink': lib._misaka_autolink, + 'codespan': lib._misaka_codespan, + 'double_emphasis': lib._misaka_double_emphasis, + 'emphasis': lib._misaka_emphasis, + 'underline': lib._misaka_underline, + 'highlight': lib._misaka_highlight, + 'quote': lib._misaka_quote, + 'image': lib._misaka_image, + 'linebreak': lib._misaka_linebreak, + 'link': lib._misaka_link, + 'triple_emphasis': lib._misaka_triple_emphasis, + 'strikethrough': lib._misaka_strikethrough, + 'superscript': lib._misaka_superscript, + 'footnote_ref': lib._misaka_footnote_ref, + 'math': lib._misaka_math, + 'raw_html': lib._misaka_raw_html, # low level callbacks - NULL copies input directly into the output - 'entity': cb_entity, - 'normal_text': cb_normal_text, + 'entity': lib._misaka_entity, + 'normal_text': lib._misaka_normal_text, # miscellaneous callbacks - 'doc_header': cb_doc_header, - 'doc_footer': cb_doc_footer, + 'doc_header': lib._misaka_doc_header, + 'doc_footer': lib._misaka_doc_footer, } diff --git a/tests/selinux/README.md b/tests/selinux/README.md new file mode 100644 index 0000000..7432495 --- /dev/null +++ b/tests/selinux/README.md @@ -0,0 +1,12 @@ +SELinux +======= + +CFFI's [old-style callbacks][1] don't work on SELinux with enforcing +mode. [New-style callbacks][2] do work. This Vagrant configuration can +be used if Misaka work on SELinux with enforcing mode. + +Only Vagrant and needs to be installed. `run_test_in_selinux.sh` does +the rest. :) + +[1]: https://cffi.readthedocs.io/en/latest/using.html#callbacks-old-style +[2]: https://cffi.readthedocs.io/en/latest/using.html#extern-python-new-style-callbacks diff --git a/tests/selinux/Vagrantfile b/tests/selinux/Vagrantfile new file mode 100644 index 0000000..68fa811 --- /dev/null +++ b/tests/selinux/Vagrantfile @@ -0,0 +1,7 @@ +Vagrant.configure("2") do |config| + config.vm.box = "generic/debian10" + config.vm.provision "shell", path: "provision.sh" + config.vm.provision :reload + config.vbguest.auto_update = true + config.vm.synced_folder "../../", "/mnt" +end diff --git a/tests/selinux/provision.sh b/tests/selinux/provision.sh new file mode 100644 index 0000000..a25f83e --- /dev/null +++ b/tests/selinux/provision.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env sh + +sudo apt-get --yes install \ + selinux-basics \ + selinux-policy-default \ + auditd + +sudo selinux-activate + +sudo apt-get --yes install \ + python3-dev \ + python3-setuptools \ + libffi-dev \ + tidy diff --git a/tests/selinux/run_test_in_selinux.sh b/tests/selinux/run_test_in_selinux.sh new file mode 100755 index 0000000..e5344e5 --- /dev/null +++ b/tests/selinux/run_test_in_selinux.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +installed_plugins="$(vagrant plugin list)" +required_plugins="vagrant-vbguest vagrant-reload" + +for plugin in $required_plugins +do + is_installed=$(echo $installed_plugins | grep $plugin) + if [ -z "$is_installed" ]; then + vagrant plugin install $plugin + else + echo "$plugin is already installed!" + fi +done + +vagrant up + +vagrant ssh <