sq_md_discount.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include "squirrel.h"
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include "sqstdblobimpl.h"
  5. extern "C" {
  6. #include "markdown.h"
  7. }
  8. static void mywrite(char const *s,int len,void *blob)
  9. {
  10. SQBlob *b= (SQBlob*)blob;
  11. b->Write(s,len);
  12. }
  13. static SQRESULT sq_markdown2html(HSQUIRRELVM v)
  14. {
  15. SQ_FUNC_VARS(v);
  16. SQ_GET_STRING(v, 2, str);
  17. SQ_OPT_INTEGER(v, 3, len, str_size);
  18. SQ_OPT_INTEGER(v, 4, flags, 0);
  19. if(len > str_size || len < 0) return sq_throwerror(v, _SC("invalid parameter value (%d)"), len);
  20. SQBlob b(0, 8192);
  21. markdown_str(mkd_string(str, len, 0), &b ,mywrite, flags);
  22. sq_pushstring(v, (SQChar*)b.GetBuf(), b.Len());
  23. return 1;
  24. }
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28. SQRESULT sqext_register_markdown(HSQUIRRELVM v)
  29. {
  30. sq_insertfunc(v, _SC("markdown2html"), sq_markdown2html, -2, _SC(".sii"), SQTrue);
  31. sq_pushconsttable(v);
  32. #define INT_CONST(num) sq_pushstring(v,_SC(#num),-1);sq_pushinteger(v,num);sq_newslot(v,-3,SQTrue);
  33. INT_CONST(MKD_NOLINKS);
  34. INT_CONST(MKD_NOIMAGE);
  35. INT_CONST(MKD_NOPANTS);
  36. INT_CONST(MKD_NOHTML);
  37. INT_CONST(MKD_STRICT);
  38. INT_CONST(MKD_TAGTEXT);
  39. INT_CONST(MKD_NO_EXT);
  40. INT_CONST(MKD_CDATA);
  41. INT_CONST(MKD_NOSUPERSCRIPT);
  42. INT_CONST(MKD_NORELAXED);
  43. INT_CONST(MKD_NOTABLES);
  44. INT_CONST(MKD_NOSTRIKETHROUGH);
  45. INT_CONST(MKD_TOC);
  46. INT_CONST(MKD_1_COMPAT);
  47. INT_CONST(MKD_AUTOLINK);
  48. INT_CONST(MKD_SAFELINK);
  49. INT_CONST(MKD_NOHEADER);
  50. INT_CONST(MKD_TABSTOP);
  51. INT_CONST(MKD_NODIVQUOTE);
  52. INT_CONST(MKD_NOALPHALIST);
  53. INT_CONST(MKD_NODLIST);
  54. INT_CONST(MKD_EXTRA_FOOTNOTE);
  55. INT_CONST(MKD_NOSTYLE);
  56. INT_CONST(MKD_NODLDISCOUNT);
  57. INT_CONST(MKD_DLEXTRA);
  58. INT_CONST(MKD_FENCEDCODE);
  59. INT_CONST(MKD_IDANCHOR);
  60. INT_CONST(MKD_GITHUBTAGS);
  61. INT_CONST(MKD_URLENCODEDANCHOR);
  62. sq_poptop(v); //remove const table
  63. return 0;
  64. }
  65. #ifdef __cplusplus
  66. }
  67. #endif