You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2016/02/23 14:31:26 UTC

[3/6] lucy-clownfish git commit: Improve POD generated from standalone Markdown

Improve POD generated from standalone Markdown

Create a name and description section.


Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/07f37d68
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/07f37d68
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/07f37d68

Branch: refs/heads/master
Commit: 07f37d687547c582d3e7b03879df8be2441a4a01
Parents: 9964b34
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Tue Feb 23 12:23:17 2016 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Tue Feb 23 13:25:53 2016 +0100

----------------------------------------------------------------------
 compiler/src/CFCPerl.c    |  7 ++++---
 compiler/src/CFCPerlPod.c | 42 ++++++++++++++++++++++++++++++++++++++++++
 compiler/src/CFCPerlPod.h | 18 ++++++++++++++++++
 3 files changed, 64 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/07f37d68/compiler/src/CFCPerl.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerl.c b/compiler/src/CFCPerl.c
index f19af61..056afaf 100644
--- a/compiler/src/CFCPerl.c
+++ b/compiler/src/CFCPerl.c
@@ -242,8 +242,10 @@ S_write_standalone_pod(CFCPerl *self) {
 
     for (size_t i = 0; i < num_pod_files; i++) {
         CFCDocument *doc = docs[i];
+        const char *path_part = CFCDocument_get_path_part(doc);
+        char *module  = CFCUtil_global_replace(path_part, CHY_DIR_SEP, "::");
         char *md      = CFCDocument_get_contents(doc);
-        char *raw_pod = CFCPerlPod_md_to_pod(md, NULL, 1);
+        char *raw_pod = CFCPerlPod_md_doc_to_pod(module, md);
 
         const char *pattern =
             "%s"
@@ -251,12 +253,10 @@ S_write_standalone_pod(CFCPerl *self) {
             "=encoding utf8\n"
             "\n"
             "%s"
-            "\n"
             "%s";
         char *pod = CFCUtil_sprintf(pattern, self->pod_header, raw_pod,
                                     self->pod_footer);
 
-        const char *path_part = CFCDocument_get_path_part(doc);
         char *pod_path = CFCUtil_sprintf("%s" CHY_DIR_SEP "%s.pod",
                                          self->lib_dir, path_part);
 
@@ -265,6 +265,7 @@ S_write_standalone_pod(CFCPerl *self) {
 
         FREEMEM(raw_pod);
         FREEMEM(md);
+        FREEMEM(module);
     }
 
     pod_files[num_pod_files].contents = NULL;

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/07f37d68/compiler/src/CFCPerlPod.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerlPod.c b/compiler/src/CFCPerlPod.c
index 996b4c2..409dc4a 100644
--- a/compiler/src/CFCPerlPod.c
+++ b/compiler/src/CFCPerlPod.c
@@ -578,6 +578,48 @@ S_camel_to_lower(const char *camel) {
 }
 
 char*
+CFCPerlPod_md_doc_to_pod(const char *module, const char *md) {
+    int options = CMARK_OPT_NORMALIZE
+                  | CMARK_OPT_SMART
+                  | CMARK_OPT_VALIDATE_UTF8
+                  | CMARK_OPT_SAFE;
+    cmark_node *doc = cmark_parse_document(md, strlen(md), options);
+    cmark_node *maybe_header = cmark_node_first_child(doc);
+    char *name;
+    char *desc;
+
+    if (maybe_header
+        && cmark_node_get_type(maybe_header) == CMARK_NODE_HEADER
+       ) {
+        cmark_node *header_child = cmark_node_first_child(maybe_header);
+        char *short_desc = S_nodes_to_pod(header_child, NULL, 1);
+        name = CFCUtil_sprintf("%s - %s", module, short_desc);
+
+        cmark_node *remaining = cmark_node_next(maybe_header);
+        desc = S_nodes_to_pod(remaining, NULL, 1);
+    }
+    else {
+        // No header found.
+        name = CFCUtil_strdup(module);
+        desc = S_node_to_pod(doc, NULL, 1);
+    }
+
+    const char *pattern =
+        "=head1 NAME\n"
+        "\n"
+        "%s\n"
+        "\n"
+        "=head1 DESCRIPTION\n"
+        "\n"
+        "%s";
+    char *retval = CFCUtil_sprintf(pattern, name, desc);
+
+    FREEMEM(name);
+    FREEMEM(desc);
+    return retval;
+}
+
+char*
 CFCPerlPod_md_to_pod(const char *md, CFCClass *klass, int header_level) {
     int options = CMARK_OPT_NORMALIZE
                   | CMARK_OPT_SMART

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/07f37d68/compiler/src/CFCPerlPod.h
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerlPod.h b/compiler/src/CFCPerlPod.h
index 4d4a175..c42a34d 100644
--- a/compiler/src/CFCPerlPod.h
+++ b/compiler/src/CFCPerlPod.h
@@ -98,6 +98,24 @@ CFCPerlPod_set_description(CFCPerlPod *self, const char *description);
 const char*
 CFCPerlPod_get_description(CFCPerlPod *self);
 
+/** Convert a standalone Markdown document to POD. The name section is
+ * created from the module name and the heading at the beginning of the
+ * Markdown text. The rest of the Markdown text goes into the description
+ * section.
+ *
+ * @param module The module name used in the name section.
+ * @param md The Markdown text.
+ */
+char*
+CFCPerlPod_md_doc_to_pod(const char *module, const char *md);
+
+/** Convert Markdown text to POD.
+ *
+ * @param md Markdown text.
+ * @param klass The current class, used for links. Can be NULL.
+ * @param header_level The POD header level corresponding to top-level
+ * Markdown headers.
+ */
 char*
 CFCPerlPod_md_to_pod(const char *md, struct CFCClass *klass, int header_level);