#include #include #include #include #include "config.h" #include "cmark.h" #include "debug.h" #include "bench.h" #if defined(_WIN32) && !defined(__CYGWIN__) #include #include #endif typedef enum { FORMAT_NONE, FORMAT_HTML, FORMAT_XML, FORMAT_MAN, } writer_format; void print_usage() { printf("Usage: cmark [FILE*]\n"); printf("Options:\n"); printf(" --to, -t FORMAT Specify output format (html, xml, man)\n"); printf(" --sourcepos Include source position attribute\n"); printf(" --hardbreaks Treat newlines as hard line breaks\n"); printf(" --normalize Consolidate adjacent text nodes\n"); printf(" --help, -h Print usage information\n"); printf(" --version Print version\n"); } static void print_document(cmark_node *document, writer_format writer, long options) { char *result; switch (writer) { case FORMAT_HTML: result = cmark_render_html(document, options); break; case FORMAT_XML: result = cmark_render_xml(document, options); break; case FORMAT_MAN: result = cmark_render_man(document, options); break; default: fprintf(stderr, "Unknown format %d\n", writer); exit(1); } printf("%s", result); free(result); } int main(int argc, char *argv[]) { int i, numfps = 0; int *files; char buffer[4096]; cmark_parser *parser; size_t bytes; cmark_node *document; writer_format writer = FORMAT_HTML; long options = CMARK_OPT_DEFAULT; #if defined(_WIN32) && !defined(__CYGWIN__) _setmode(_fileno(stdout), _O_BINARY); #endif parser = cmark_parser_new(); files = (int *)malloc(argc * sizeof(*files)); for (i = 1; i < argc; i++) { if (strcmp(argv[i], "--version") == 0) { printf("cmark %s", CMARK_VERSION); printf(" - CommonMark converter (c) 2014 John MacFarlane\n"); exit(0); } else if (strcmp(argv[i], "--sourcepos") == 0) { options |= CMARK_OPT_SOURCEPOS; } else if (strcmp(argv[i], "--hardbreaks") == 0) { options |= CMARK_OPT_HARDBREAKS; } else if (strcmp(argv[i], "--normalize") == 0) { options |= CMARK_OPT_NORMALIZE; } else if ((strcmp(argv[i], "--help") == 0) || (strcmp(argv[i], "-h") == 0)) { print_usage(); exit(0); } else if ((strcmp(argv[i], "-t") == 0) || (strcmp(argv[i], "--to") == 0)) { i += 1; if (i < argc) { if (strcmp(argv[i], "man") == 0) { writer = FORMAT_MAN; } else if (strcmp(argv[i], "html") == 0) { writer = FORMAT_HTML; } else if (strcmp(argv[i], "xml") == 0) { writer = FORMAT_XML; } else { fprintf(stderr, "Unknown format %s\n", argv[i]); exit(1); } } else { fprintf(stderr, "No argument provided for %s\n", argv[i - 1]); exit(1); } } else if (*argv[i] == '-') { print_usage(); exit(1); } else { // treat as file argument files[numfps++] = i; } } for (i = 0; i < numfps; i++) { FILE *fp = fopen(argv[files[i]], "r"); if (fp == NULL) { fprintf(stderr, "Error opening file %s: %s\n", argv[files[i]], strerror(errno)); exit(1); } start_timer(); while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { cmark_parser_feed(parser, buffer, bytes); if (bytes < sizeof(buffer)) { break; } } end_timer("processing lines"); fclose(fp); } if (numfps == 0) { while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0) { cmark_parser_feed(parser, buffer, bytes); if (bytes < sizeof(buffer)) { break; } } } start_timer(); document = cmark_parser_finish(parser); end_timer("finishing document"); cmark_parser_free(parser); start_timer(); print_document(document, writer, options); end_timer("print_document"); start_timer(); cmark_node_free(document); end_timer("free_blocks"); free(files); return 0; } s="hl"> Copyright \copyright 2000,2001,2002 Free Software Foundation, Inc.
  • \bigskip
  • 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  • \bigskip
  • Everyone is permitted to copy and distribute verbatim copies
  • of this license document, but changing it is not allowed.
  • \end{center}
  • \begin{center}
  • {\bf\large Preamble}
  • \end{center}
  • The purpose of this License is to make a manual, textbook, or other
  • functional and useful document "free" in the sense of freedom: to
  • assure everyone the effective freedom to copy and redistribute it,
  • with or without modifying it, either commercially or noncommercially.
  • Secondarily, this License preserves for the author and publisher a way
  • to get credit for their work, while not being considered responsible
  • for modifications made by others.
  • This License is a kind of "copyleft", which means that derivative
  • works of the document must themselves be free in the same sense. It
  • complements the GNU General Public License, which is a copyleft
  • license designed for free software.
  • We have designed this License in order to use it for manuals for free
  • software, because free software needs free documentation: a free
  • program should come with manuals providing the same freedoms that the
  • software does. But this License is not limited to software manuals;
  • it can be used for any textual work, regardless of subject matter or
  • whether it is published as a printed book. We recommend this License
  • principally for works whose purpose is instruction or reference.
  • \begin{center}
  • {\Large\bf 1. APPLICABILITY AND DEFINITIONS}
  • \addcontentsline{toc}{subsection}{1. APPLICABILITY AND DEFINITIONS}
  • \end{center}
  • This License applies to any manual or other work, in any medium, that
  • contains a notice placed by the copyright holder saying it can be
  • distributed under the terms of this License. Such a notice grants a
  • world-wide, royalty-free license, unlimited in duration, to use that
  • work under the conditions stated herein. The \textbf{"Document"}, below,
  • refers to any such manual or work. Any member of the public is a
  • licensee, and is addressed as \textbf{"you"}. You accept the license if you
  • copy, modify or distribute the work in a way requiring permission
  • under copyright law.
  • A \textbf{"Modified Version"} of the Document means any work containing the
  • Document or a portion of it, either copied verbatim, or with
  • modifications and/or translated into another language.
  • A \textbf{"Secondary Section"} is a named appendix or a front-matter section of
  • the Document that deals exclusively with the relationship of the
  • publishers or authors of the Document to the Document's overall subject
  • (or to related matters) and contains nothing that could fall directly
  • within that overall subject. (Thus, if the Document is in part a
  • textbook of mathematics, a Secondary Section may not explain any
  • mathematics.) The relationship could be a matter of historical
  • connection with the subject or with related matters, or of legal,
  • commercial, philosophical, ethical or political position regarding
  • them.
  • The \textbf{"Invariant Sections"} are certain Secondary Sections whose titles
  • are designated, as being those of Invariant Sections, in the notice
  • that says that the Document is released under this License. If a
  • section does not fit the above definition of Secondary then it is not
  • allowed to be designated as Invariant. The Document may contain zero
  • Invariant Sections. If the Document does not identify any Invariant
  • Sections then there are none.
  • The \textbf{"Cover Texts"} are certain short passages of text that are listed,
  • as Front-Cover Texts or Back-Cover Texts, in the notice that says that
  • the Document is released under this License. A Front-Cover Text may
  • be at most 5 words, and a Back-Cover Text may be at most 25 words.
  • A \textbf{"Transparent"} copy of the Document means a machine-readable copy,
  • represented in a format whose specification is available to the
  • general public, that is suitable for revising the document
  • straightforwardly with generic text editors or (for images composed of
  • pixels) generic paint programs or (for drawings) some widely available
  • drawing editor, and that is suitable for input to text formatters or
  • for automatic translation to a variety of formats suitable for input
  • to text formatters. A copy made in an otherwise Transparent file
  • format whose markup, or absence of markup, has been arranged to thwart
  • or discourage subsequent modification by readers is not Transparent.
  • An image format is not Transparent if used for any substantial amount
  • of text. A copy that is not "Transparent" is called \textbf{"Opaque"}.
  • Examples of suitable formats for Transparent copies include plain
  • ASCII without markup, Texinfo input format, LaTeX input format, SGML
  • or XML using a publicly available DTD, and standard-conforming simple
  • HTML, PostScript or PDF designed for human modification. Examples of
  • transparent image formats include PNG, XCF and JPG. Opaque formats
  • include proprietary formats that can be read and edited only by
  • proprietary word processors, SGML or XML for which the DTD and/or
  • processing tools are not generally available, and the
  • machine-generated HTML, PostScript or PDF produced by some word
  • processors for output purposes only.
  • The \textbf{"Title Page"} means, for a printed book, the title page itself,
  • plus such following pages as are needed to hold, legibly, the material
  • this License requires to appear in the title page. For works in
  • formats which do not have any title page as such, "Title Page" means
  • the text near the most prominent appearance of the work's title,
  • preceding the beginning of the body of the text.
  • A section \textbf{"Entitled XYZ"} means a named subunit of the Document whose
  • title either is precisely XYZ or contains XYZ in parentheses following
  • text that translates XYZ in another language. (Here XYZ stands for a
  • specific section name mentioned below, such as \textbf{"Acknowledgements"},
  • \textbf{"Dedications"}, \textbf{"Endorsements"}, or \textbf{"History"}.)
  • To \textbf{"Preserve the Title"}
  • of such a section when you modify the Document means that it remains a
  • section "Entitled XYZ" according to this definition.
  • The Document may include Warranty Disclaimers next to the notice which
  • states that this License applies to the Document. These Warranty
  • Disclaimers are considered to be included by reference in this
  • License, but only as regards disclaiming warranties: any other
  • implication that these Warranty Disclaimers may have is void and has
  • no effect on the meaning of this License.
  • \begin{center}
  • {\Large\bf 2. VERBATIM COPYING}
  • \addcontentsline{toc}{subsection}{2. VERBATIM COPYING}
  • \end{center}
  • You may copy and distribute the Document in any medium, either
  • commercially or noncommercially, provided that this License, the
  • copyright notices, and the license notice saying this License applies
  • to the Document are reproduced in all copies, and that you add no other
  • conditions whatsoever to those of this License. You may not use
  • technical measures to obstruct or control the reading or further
  • copying of the copies you make or distribute. However, you may accept
  • compensation in exchange for copies. If you distribute a large enough
  • number of copies you must also follow the conditions in section 3.
  • You may also lend copies, under the same conditions stated above, and
  • you may publicly display copies.
  • \begin{center}
  • {\Large\bf 3. COPYING IN QUANTITY}
  • \addcontentsline{toc}{subsection}{3. COPYING IN QUANTITY}
  • \end{center}
  • If you publish printed copies (or copies in media that commonly have
  • printed covers) of the Document, numbering more than 100, and the
  • Document's license notice requires Cover Texts, you must enclose the
  • copies in covers that carry, clearly and legibly, all these Cover
  • Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
  • the back cover. Both covers must also clearly and legibly identify
  • you as the publisher of these copies. The front cover must present
  • the full title with all words of the title equally prominent and
  • visible. You may add other material on the covers in addition.
  • Copying with changes limited to the covers, as long as they preserve
  • the title of the Document and satisfy these conditions, can be treated
  • as verbatim copying in other respects.
  • If the required texts for either cover are too voluminous to fit
  • legibly, you should put the first ones listed (as many as fit
  • reasonably) on the actual cover, and continue the rest onto adjacent
  • pages.
  • If you publish or distribute Opaque copies of the Document numbering
  • more than 100, you must either include a machine-readable Transparent
  • copy along with each Opaque copy, or state in or with each Opaque copy
  • a computer-network location from which the general network-using
  • public has access to download using public-standard network protocols
  • a complete Transparent copy of the Document, free of added material.
  • If you use the latter option, you must take reasonably prudent steps,
  • when you begin distribution of Opaque copies in quantity, to ensure
  • that this Transparent copy will remain thus accessible at the stated
  • location until at least one year after the last time you distribute an
  • Opaque copy (directly or through your agents or retailers) of that
  • edition to the public.
  • It is requested, but not required, that you contact the authors of the
  • Document well before redistributing any large number of copies, to give
  • them a chance to provide you with an updated version of the Document.
  • \begin{center}
  • {\Large\bf 4. MODIFICATIONS}
  • \addcontentsline{toc}{subsection}{4. MODIFICATIONS}
  • \end{center}
  • You may copy and distribute a Modified Version of the Document under
  • the conditions of sections 2 and 3 above, provided that you release
  • the Modified Version under precisely this License, with the Modified
  • Version filling the role of the Document, thus licensing distribution
  • and modification of the Modified Version to whoever possesses a copy
  • of it. In addition, you must do these things in the Modified Version:
  • \begin{itemize}
  • \item[A.]
  • Use in the Title Page (and on the covers, if any) a title distinct
  • from that of the Document, and from those of previous versions
  • (which should, if there were any, be listed in the History section
  • of the Document). You may use the same title as a previous version
  • if the original publisher of that version gives permission.
  • \item[B.]
  • List on the Title Page, as authors, one or more persons or entities
  • responsible for authorship of the modifications in the Modified
  • Version, together with at least five of the principal authors of the
  • Document (all of its principal authors, if it has fewer than five),
  • unless they release you from this requirement.
  • \item[C.]
  • State on the Title page the name of the publisher of the
  • Modified Version, as the publisher.
  • \item[D.]
  • Preserve all the copyright notices of the Document.
  • \item[E.]
  • Add an appropriate copyright notice for your modifications
  • adjacent to the other copyright notices.
  • \item[F.]
  • Include, immediately after the copyright notices, a license notice
  • giving the public permission to use the Modified Version under the
  • terms of this License, in the form shown in the Addendum below.
  • \item[G.]
  • Preserve in that license notice the full lists of Invariant Sections
  • and required Cover Texts given in the Document's license notice.
  • \item[H.]
  • Include an unaltered copy of this License.
  • \item[I.]
  • Preserve the section Entitled "History", Preserve its Title, and add
  • to it an item stating at least the title, year, new authors, and
  • publisher of the Modified Version as given on the Title Page. If
  • there is no section Entitled "History" in the Document, create one
  • stating the title, year, authors, and publisher of the Document as
  • given on its Title Page, then add an item describing the Modified
  • Version as stated in the previous sentence.
  • \item[J.]
  • Preserve the network location, if any, given in the Document for
  • public access to a Transparent copy of the Document, and likewise
  • the network locations given in the Document for previous versions
  • it was based on. These may be placed in the "History" section.
  • You may omit a network location for a work that was published at
  • least four years before the Document itself, or if the original
  • publisher of the version it refers to gives permission.
  • \item[K.]
  • For any section Entitled "Acknowledgements" or "Dedications",
  • Preserve the Title of the section, and preserve in the section all
  • the substance and tone of each of the contributor acknowledgements
  • and/or dedications given therein.
  • \item[L.]
  • Preserve all the Invariant Sections of the Document,
  • unaltered in their text and in their titles. Section numbers
  • or the equivalent are not considered part of the section titles.
  • \item[M.]
  • Delete any section Entitled "Endorsements". Such a section
  • may not be included in the Modified Version.
  • \item[N.]
  • Do not retitle any existing section to be Entitled "Endorsements"
  • or to conflict in title with any Invariant Section.
  • \item[O.]
  • Preserve any Warranty Disclaimers.
  • \end{itemize}
  • If the Modified Version includes new front-matter sections or
  • appendices that qualify as Secondary Sections and contain no material
  • copied from the Document, you may at your option designate some or all
  • of these sections as invariant. To do this, add their titles to the
  • list of Invariant Sections in the Modified Version's license notice.
  • These titles must be distinct from any other section titles.
  • You may add a section Entitled "Endorsements", provided it contains
  • nothing but endorsements of your Modified Version by various
  • parties--for example, statements of peer review or that the text has
  • been approved by an organization as the authoritative definition of a
  • standard.
  • You may add a passage of up to five words as a Front-Cover Text, and a
  • passage of up to 25 words as a Back-Cover Text, to the end of the list
  • of Cover Texts in the Modified Version. Only one passage of
  • Front-Cover Text and one of Back-Cover Text may be added by (or
  • through arrangements made by) any one entity. If the Document already
  • includes a cover text for the same cover, previously added by you or
  • by arrangement made by the same entity you are acting on behalf of,
  • you may not add another; but you may replace the old one, on explicit
  • permission from the previous publisher that added the old one.
  • The author(s) and publisher(s) of the Document do not by this License
  • give permission to use their names for publicity for or to assert or
  • imply endorsement of any Modified Version.
  • \begin{center}
  • {\Large\bf 5. COMBINING DOCUMENTS}
  • \addcontentsline{toc}{subsection}{5. COMBINING DOCUMENTS}
  • \end{center}
  • You may combine the Document with other documents released under this
  • License, under the terms defined in section 4 above for modified
  • versions, provided that you include in the combination all of the
  • Invariant Sections of all of the original documents, unmodified, and
  • list them all as Invariant Sections of your combined work in its
  • license notice, and that you preserve all their Warranty Disclaimers.
  • The combined work need only contain one copy of this License, and
  • multiple identical Invariant Sections may be replaced with a single
  • copy. If there are multiple Invariant Sections with the same name but
  • different contents, make the title of each such section unique by
  • adding at the end of it, in parentheses, the name of the original
  • author or publisher of that section if known, or else a unique number.
  • Make the same adjustment to the section titles in the list of
  • Invariant Sections in the license notice of the combined work.
  • In the combination, you must combine any sections Entitled "History"
  • in the various original documents, forming one section Entitled
  • "History"; likewise combine any sections Entitled "Acknowledgements",
  • and any sections Entitled "Dedications". You must delete all sections
  • Entitled "Endorsements".
  • \begin{center}
  • {\Large\bf 6. COLLECTIONS OF DOCUMENTS}
  • \addcontentsline{toc}{subsection}{6. COLLECTIONS OF DOCUMENTS}
  • \end{center}
  • You may make a collection consisting of the Document and other documents
  • released under this License, and replace the individual copies of this
  • License in the various documents with a single copy that is included in
  • the collection, provided that you follow the rules of this License for
  • verbatim copying of each of the documents in all other respects.
  • You may extract a single document from such a collection, and distribute
  • it individually under this License, provided you insert a copy of this
  • License into the extracted document, and follow this License in all
  • other respects regarding verbatim copying of that document.
  • \begin{center}
  • {\Large\bf 7. AGGREGATION WITH INDEPENDENT WORKS}
  • \addcontentsline{toc}{subsection}{7. AGGREGATION WITH INDEPENDENT WORKS}
  • \end{center}
  • A compilation of the Document or its derivatives with other separate
  • and independent documents or works, in or on a volume of a storage or
  • distribution medium, is called an "aggregate" if the copyright
  • resulting from the compilation is not used to limit the legal rights
  • of the compilation's users beyond what the individual works permit.
  • When the Document is included in an aggregate, this License does not
  • apply to the other works in the aggregate which are not themselves
  • derivative works of the Document.
  • If the Cover Text requirement of section 3 is applicable to these
  • copies of the Document, then if the Document is less than one half of
  • the entire aggregate, the Document's Cover Texts may be placed on
  • covers that bracket the Document within the aggregate, or the
  • electronic equivalent of covers if the Document is in electronic form.
  • Otherwise they must appear on printed covers that bracket the whole
  • aggregate.
  • \begin{center}
  • {\Large\bf 8. TRANSLATION}
  • \addcontentsline{toc}{subsection}{8. TRANSLATION}
  • \end{center}
  • Translation is considered a kind of modification, so you may
  • distribute translations of the Document under the terms of section 4.
  • Replacing Invariant Sections with translations requires special
  • permission from their copyright holders, but you may include
  • translations of some or all Invariant Sections in addition to the
  • original versions of these Invariant Sections. You may include a
  • translation of this License, and all the license notices in the
  • Document, and any Warranty Disclaimers, provided that you also include
  • the original English version of this License and the original versions
  • of those notices and disclaimers. In case of a disagreement between
  • the translation and the original version of this License or a notice
  • or disclaimer, the original version will prevail.
  • If a section in the Document is Entitled "Acknowledgements",
  • "Dedications", or "History", the requirement (section 4) to Preserve
  • its Title (section 1) will typically require changing the actual
  • title.
  • \begin{center}
  • {\Large\bf 9. TERMINATION}
  • \addcontentsline{toc}{subsection}{9. TERMINATION}
  • \end{center}
  • You may not copy, modify, sublicense, or distribute the Document except
  • as expressly provided for under this License. Any other attempt to
  • copy, modify, sublicense or distribute the Document is void, and will
  • automatically terminate your rights under this License. However,
  • parties who have received copies, or rights, from you under this
  • License will not have their licenses terminated so long as such
  • parties remain in full compliance.
  • \begin{center}
  • {\Large\bf 10. FUTURE REVISIONS OF THIS LICENSE}
  • \addcontentsline{toc}{subsection}{10. FUTURE REVISIONS OF THIS LICENSE}
  • \end{center}
  • The Free Software Foundation may publish new, revised versions
  • of the GNU Free Documentation License from time to time. Such new
  • versions will be similar in spirit to the present version, but may
  • differ in detail to address new problems or concerns. See
  • http://www.gnu.org/copyleft/.
  • Each version of the License is given a distinguishing version number.
  • If the Document specifies that a particular numbered version of this
  • License "or any later version" applies to it, you have the option of
  • following the terms and conditions either of that specified version or
  • of any later version that has been published (not as a draft) by the
  • Free Software Foundation. If the Document does not specify a version
  • number of this License, you may choose any version ever published (not
  • as a draft) by the Free Software Foundation.
  • \begin{center}
  • {\Large\bf ADDENDUM: How to use this License for your documents}
  • \addcontentsline{toc}{subsection}{ADDENDUM: How to use this License for your documents}
  • \end{center}
  • To use this License in a document you have written, include a copy of
  • the License in the document and put the following copyright and
  • license notices just after the title page:
  • \bigskip
  • \begin{quote}
  • Copyright \copyright YEAR YOUR NAME.
  • Permission is granted to copy, distribute and/or modify this document
  • under the terms of the GNU Free Documentation License, Version 1.2
  • or any later version published by the Free Software Foundation;
  • with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
  • A copy of the license is included in the section entitled "GNU
  • Free Documentation License".
  • \end{quote}
  • \bigskip
  • If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
  • replace the "with...Texts." line with this:
  • \bigskip
  • \begin{quote}
  • with the Invariant Sections being LIST THEIR TITLES, with the
  • Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
  • \end{quote}
  • \bigskip
  • If you have Invariant Sections without Cover Texts, or some other
  • combination of the three, merge those two alternatives to suit the
  • situation.
  • If your document contains nontrivial examples of program code, we
  • recommend releasing these examples in parallel under your choice of
  • free software license, such as the GNU General Public License,
  • to permit their use in free software.