{"id":31923663,"url":"https://github.com/fletcher/multimarkdown-5","last_synced_at":"2025-10-13T23:56:17.859Z","repository":{"id":66885750,"uuid":"46128564","full_name":"fletcher/MultiMarkdown-5","owner":"fletcher","description":"Reference implementation of MultiMarkdown; replaces MultiMarkdown v4 (deprecated -- see MMD-6 instead)","archived":false,"fork":false,"pushed_at":"2019-02-28T20:38:33.000Z","size":1445,"stargazers_count":293,"open_issues_count":12,"forks_count":49,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-04-02T20:38:38.281Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://github.com/fletcher/MultiMarkdown-6","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fletcher.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2015-11-13T15:05:29.000Z","updated_at":"2025-02-03T22:58:33.000Z","dependencies_parsed_at":"2023-02-22T06:45:10.583Z","dependency_job_id":null,"html_url":"https://github.com/fletcher/MultiMarkdown-5","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/fletcher/MultiMarkdown-5","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fletcher%2FMultiMarkdown-5","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fletcher%2FMultiMarkdown-5/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fletcher%2FMultiMarkdown-5/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fletcher%2FMultiMarkdown-5/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fletcher","download_url":"https://codeload.github.com/fletcher/MultiMarkdown-5/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fletcher%2FMultiMarkdown-5/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279017193,"owners_count":26086017,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-13T23:55:42.296Z","updated_at":"2025-10-13T23:56:17.851Z","avatar_url":"https://github.com/fletcher.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"## About ##\n\n|            |                           |  \n| ---------- | ------------------------- |  \n| Title:     | MultiMarkdown        |  \n| Author:    | Fletcher T. Penney       |  \n| Date:      | 2016-08-05 |  \n| Copyright: | Copyright © 2013-2016 Fletcher T. Penney.    |  \n| Version:   | 5.4.0      |  \n\n\n## Introduction ##\n\n[Markdown] is a simple markup language used to convert plain text into HTML. \n\n[MultiMarkdown] is a derivative of Markdown that adds new syntax features,\nsuch as footnotes, tables, and metadata. Additionally, it offers mechanisms to\nconvert plain text into LaTeX in addition to HTML. \n\n\n## Background ##\n\nMultiMarkdown started as a Perl script, which was modified from the original\nMarkdown.pl.\n\nMultiMarkdown v3 (aka 'peg-multimarkdown') was based on John MacFarlane's\n[peg-markdown].  It used a parsing expression grammar (PEG), and was written\nin C in order to compile on almost any operating system.  Thanks to work by\nDaniel Jalkut, MMD v3 was built so that it didn't have any external library\nrequirements.\n\nMultiMarkdown v4 was basically a complete rewrite of v3.  It used the same\nbasic PEG for parsing (Multi)Markdown text, but otherwise was almost\ncompletely rebuilt.\n\nMultiMarkdown v5 is basically the same code as v4, but the project has been\nrestructured:\n\n*\tIt is built using my [c-template] project boilerplate -- I welcome\n\tsuggestions and ideas for improvement about this.\n*\tIt is designed with the CMake build system, rather than just\n\ta Makefile\n\n\n\n## Why switch to CMake? ##\n\nIn early 2014, a user of MMD introduced me to the [CMake] build system. I \nlooked at it briefly, but didn't do anything with it.  Later on, I looked\nat it more in depth and created a parallel branch after 4.6.  This would allow\nme to experiment with CMake without breaking anything else in the `master`\nbranch.\n\nCMake isn't perfect by any means, but it does allow for some interesting\nthings:\n\n*\tAutomatically generate GUI installers for OS X and Windows, as well as zip\n\tfiles for *nix.  I have not looked into using CMake to build `.deb`\n\tpackages, but that might be possible as well.  My old system could generate\n\tGUI installers for Windows and OS X, but it was a complex process that\n\trequired a lot of manual processing.  This is much more amenable to\n\tautomation.\n*\tAn improved organization structure for various tests, including [Valgrind]\n\ttesting.  The old system was getting rather messy.\n*\tA templating system that better allows me to synchronize version, and\n\tother, information in code, documentation, and READMEs\n*\tAutomatic generation of project files for Xcode, Visual Studio, and\n\talternative build systems beyond `make`\n*\tAn opportunity to reorganize my code directory hierarchy\n*\tThe option to start adding unit test code to the source.  This probably\n\twon't happen, as it would be too much work.  But it is possible.\n\n\nThe biggest *problem* is that this means that anyone wishing to compile the\nsource will need to install CMake.  This isn't hard, but it is an extra step.\n\nAs a temporary measure, you can use the `make deprecated` command to use a \nsimplified `make` recipe to compile a binary of MultiMarkdown for the current\nmachine.  I don't recommend this approach, but it should work in a pinch until\nyou can upgrade your machine to support cmake.\n\nI welcome feedback on this decision, but please note -- \"I don't like it\" or\n\"bring back the old way\" comments will be ignored.  Please send meaningful\ncriticism or suggestions.\n\nPerhaps an approach if others want to contribute will be to do the reverse of\nwhat I did before -- create a `make` branch that includes a modified Makefile\ndesigned to be used without CMake?\n\nAdditionally, the old Makefile had grown over time to include some tricks that\nusers of various systems required.  I have tested the CMake system on OS X,\nUbuntu and Debian Linux, and MinGW on Ubuntu.  I welcome suggestions for\nimprovements to the CMake configuration.\n\n\n## Download Binary ##\n\nBinaries for OS X and Windows are available on the github site:\n\n\u003chttps://github.com/fletcher/MultiMarkdown-5/releases\u003e\n\n\n## Compile from Source ##\n\nTo compile MultiMarkdown, you will need to have [CMake] installed on your\nmachine.\n\nTo download the source:\n\n*\tObtain the source from the github repository (Downloading a zipfile of the\n\tsource won't allow you to configure the submodules -- it's much better to\n\tuse git):\n\n\t\tgit clone https://github.com/fletcher/MultiMarkdown-5.git\n\n*\tConfigure the submodules with two helper scripts (This can be done\n\tmanually on Windows systems by looking at the source):\n\n\t\t./link_git_modules\n\t\t./update_git_modules\n\n*\tCompile, and (optionally) test:\n\n\t\tmake\n\t\tcd build\n\t\tmake\n\t\tmake test\n\nLike all versions of MultiMarkdown since v3, there is one test that will fail\n(now helpfully called `markdown-should-fail`).  The other tests should pass.\nThe valgrind tests will not work on OS X, but should pass if valgrind is\ninstalled and used on Linux machines.\n\nIf you want to make an installer, after the above, use the `cpack` command\ninside the build directory.\n\nFor more information, checkout the `IMPORTANT` file.\n\n\n## Usage ##\n\nThe [MultiMarkdown User's Guide] has complete instructions on how to use\nMultiMarkdown.\n\n\n# LyX Support #\n\nCharles R. Cowan (\u003chttps://github.com/crcowan\u003e) added support for conversion\nto [LyX](http://www.lyx.org/).  Support for this should be considered to be in\nalpha/beta, and is not guaranteed.  Issues related to LyX can be added to the\nMultiMarkdown [issues] page on github, but will need to be answered by\nCharles.  I am happy to include this code in the main MMD repo, but since I\ndon't use LyX I can't support it myself.  If this arrangement becomes a\nproblem, then LyX support can be removed and it can be kept as a separate\nfork.\n\n\n# More Information #\n\nTo get more information about MultiMarkdown, check out the\n[website][MultiMarkdown] or [MultiMarkdown User's Guide].\n\n\n# Developer Notes #\n\nBe sure to read the relevant documentation:\n\n*\tIMPORTANT\n*\tREADME.md\n*\t`make documentation` and look at `build/documentation/html/index.html`\n*\tRelevant portions of the User's Guide\n\nIf you wish to submit pull requests, then be sure to work off of the `develop`\nbranch and configure the pull requests appropriately.  I am *trying* to use the\n\"git flow\" workflow described here:\n\n\u003chttp://nvie.com/posts/a-successful-git-branching-model/\u003e\n\nI will not accept pull requests directly into the `master` branch.\n\n***NOTE***:  Additionally, I am trying to use a consistent convention for\ncommit messages, so that I can quickly generate the framework for Release\nNotes for new versions of MultiMarkdown.  For example:\n\n\tTAG: Commit message with uppercase first letter and no period at the end\n\n\tTAG: Commit message one; TAG2: Commit message two\n\nThe list of TAGs is in flux, but currently includes:\n\n*\tADDED: New features or functionality\n*\tCHANGED: Change to the way a feature works\n*\tCODE: Change the code, but don't change the overall user experience\n*\tFIX: Fix a bug\n*\tIMPORTANT: Something major was fixed\n*\tNOTE: These are mostly changes to the project itself (e.g. Makefile) and\n\thave no impact on the user experience\n\nThese TAGs are still in flux as I develop the system I am using, but this will\nallow me to automatically generate most of the Release Notes for each new\nversion.  I'll still need to go over them manually, but this gives me a head\nstart!  (As an aside, any time you use one of the `make` commands, the file\n`CHANGELOG-UNRELEASED` will be updated to show you new features in the \n`development` branch that have not been pulled into `master` yet.)\n\nBy using the TAGs, I can sort the list of messages and group things into\ncategories.  By consistently using the semi-colon syntax, I can automatically\nsplit commits with multiple notes.\n\n\n## License ##\n\nThe `c-template` project is released under the MIT License.\n\n\nMMD 5 is released under the MIT License.\n\n\nCuTest is released under the zlib/libpng license. See CuTest.c for the text\nof the license.\n\n\n## The MIT License ##\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\n\n[Markdown]:\thttp://daringfireball.net/projects/markdown/\n[MultiMarkdown]:\thttp://fletcherpenney.net/multimarkdown/\n[MultiMarkdown User's Guide]:\thttp://fletcher.github.io/MultiMarkdown-5/\n[c-template]: https://github.com/fletcher/c-template\n[CMake]: https://cmake.org/\n[Doxygen]: http://www.doxygen.org/\n[Valgrind]: http://valgrind.org/\n[peg-markdown]:\thttps://github.com/jgm/peg-markdown\n[issues]:\thttps://github.com/fletcher/MultiMarkdown-5/issues\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffletcher%2Fmultimarkdown-5","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffletcher%2Fmultimarkdown-5","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffletcher%2Fmultimarkdown-5/lists"}