.\" .Dd January 18, 2008 .Dt MKD_CALLBACKS 3 .Os Mastodon .Sh NAME .Nm mkd_callbacks .Nd functions that modify link targets .Sh LIBRARY Markdown .Pq libmarkdown , -lmarkdown .Sh SYNOPSIS .Fd #include .Ft char* .Fn (*mkd_callback_t) "const char*" "const int" "void*" .Ft void .Fn (*mkd_free_t) "char *" "void*" .Ft void .Fn mkd_e_url "MMIOT *document" "mkd_callback_t edit" .Ft void .Fn mkd_e_flags "MMIOT *document" "mkd_callback_t edit" .Ft void .Fn mkd_e_free "MMIOT *document" "mkd_free_t dealloc" .Ft void .Fn mkd_e_data "MMIOT *document" "void *data" .Sh DESCRIPTION .Pp .Nm Discount provides a small set of data access functions to let a library user modify the targets given in a `[]' link, and to add additional flags to the generated link. .Pp The data access functions are passed a character pointer to the url being generated, the size of the url, and a data pointer pointing to a user data area (set by the .Fn mkd_e_data function.) After the callback function is called (either .Fn mkd_e_url or .Fn mkd_e_flags ) the data freeing function (if supplied) is called and passed the character pointer and user data pointer. .Sh EXAMPLE The .Fn mkd_basename function (in the module basename.c) is implemented by means of mkd callbacks; it modifies urls that start with a `/' so that they begin with a user-supplied url base by allocating a new string and filling it with the base + the url. Discount plugs that url in in place of the original, then calls the basename free function (it only does this when .Fn mkd_e_url or .Fn mkd_e_flags returns nonzero) to deallocate this memory. .Pp Note that only one level of callbacks are supported; if you wish to do multiple callbacks, you need to write your own code to handle them all. .Sh SEE ALSO .Xr markdown 1 , .Xr markdown 3 , .Xr mkd-line 3 , .Xr markdown 7 , .Xr mkd-extensions 7 , .Xr mmap 2 . .Pp basename.c .Pp http://daringfireball.net/projects/markdown/syntax .Sh BUGS Error handling is minimal at best.