- Commit
- 7686b7dad5c80d494b993158def220aa8b61ac6e
- Parent
- ec8683da993c3f73f6934769ea12911a293e15b0
- Author
- John MacFarlane <jgm@berkeley.edu>
- Date
Updated make_man_page.py to use C89 comments.
See #224.
TODO: change this to create the man page directly (not via markdown
intermediary) and parse signatures into .Ft, .Fo, .Fa, .Fc, .Fd.
diff --git a/man/make_man_page.py b/man/make_man_page.py
@@ -2,9 +2,9 @@
# Creates a man page from a C file.
-# Lines beginning with /// are treated as Markdown.
+# Comments beginning with `/**` are treated as Markdown.
-# Non-blank lines immediately following a /// line are treated
+# Non-blank lines immediately following a Markdown comment are treated
# as function signatures or examples and included verbatim. The
# immediately preceding markdown chunk is printed after the example
# as a comment on it.
@@ -20,7 +20,9 @@ else:
print("Usage: make_man_page.py sourcefile")
exit(1)
-special_comment_re = re.compile('^\/\/\/ ?')
+comment_start_re = re.compile('^\/\*\* ?')
+comment_delim_re = re.compile('^[/ ]\** ?')
+comment_end_re = re.compile('^ \**\/')
blank_re = re.compile('^\s*$')
macro_re = re.compile('CMARK_EXPORT *')
@@ -33,7 +35,11 @@ with open(sourcefile, 'r') as cmarkh:
for line in cmarkh:
# state transition
oldstate = state
- if special_comment_re.match(line):
+ if comment_start_re.match(line):
+ state = 'markdown'
+ elif comment_end_re.match(line) and state == 'markdown':
+ continue
+ elif comment_delim_re.match(line) and state == 'markdown':
state = 'markdown'
elif blank_re.match(line):
state = 'default'
@@ -41,12 +47,12 @@ with open(sourcefile, 'r') as cmarkh:
state = 'signature'
# handle line
- #if oldstate != state and len(mdlines) > 0 and mdlines[-1] != '\n':
- # mdlines.append('\n')
if state == 'markdown':
- chunk.append(re.sub(special_comment_re, '', line))
+ chunk.append(re.sub(comment_delim_re, '', line))
elif state == 'signature':
- sig.append(' ' + re.sub(macro_re, '', line))
+ ln = re.sub(macro_re, '', line)
+ if not re.match(blank_re, ln):
+ sig.append(' ' + ln)
elif oldstate == 'signature' and state != 'signature':
if len(mdlines) > 0 and mdlines[-1] != '\n':
mdlines.append('\n')
diff --git a/man/man3/cmark.3 b/man/man3/cmark.3
@@ -26,7 +26,7 @@ null\-terminated, UTF\-8\-encoded string.
.nf
\f[C]
typedef\ enum\ {
-\ \ \ \ //\ Block
+\ \ \ \ /*\ Block\ */
\ \ \ \ CMARK_NODE_DOCUMENT,
\ \ \ \ CMARK_NODE_BLOCK_QUOTE,
\ \ \ \ CMARK_NODE_LIST,
@@ -62,6 +62,10 @@ cmark_node_new(cmark_node_type\ type);
void
cmark_node_free(cmark_node\ *node);
+
+
+cmark_node*
+cmark_node_next(cmark_node\ *node);
\f[]
.fi
.SH TREE TRAVERSAL
@@ -69,10 +73,6 @@ cmark_node_free(cmark_node\ *node);
.nf
\f[C]
cmark_node*
-cmark_node_next(cmark_node\ *node);
-
-
-cmark_node*
cmark_node_previous(cmark_node\ *node);
@@ -203,23 +203,18 @@ cmark_node_append_child(cmark_node\ *node,\ cmark_node\ *child);
cmark_parser\ *cmark_parser_new();
-
void\ cmark_parser_free(cmark_parser\ *parser);
-
cmark_node\ *cmark_parser_finish(cmark_parser\ *parser);
-
void\ cmark_parser_feed(cmark_parser\ *parser,\ const\ char\ *buffer,\ size_t\ len);
-
cmark_node\ *cmark_parse_document(const\ char\ *buffer,\ size_t\ len);
-
cmark_node\ *cmark_parse_file(FILE\ *f);
\f[]
.fi
@@ -230,7 +225,6 @@ cmark_node\ *cmark_parse_file(FILE\ *f);
char\ *cmark_render_ast(cmark_node\ *root);
-
char\ *cmark_render_html(cmark_node\ *root);
\f[]
.fi