You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2018/11/30 22:26:47 UTC

[03/34] tomee-site-generator git commit: Fix line wrapping issues with Markdown examples

Fix line wrapping issues with Markdown examples


Project: http://git-wip-us.apache.org/repos/asf/tomee-site-generator/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee-site-generator/commit/1cc43e0e
Tree: http://git-wip-us.apache.org/repos/asf/tomee-site-generator/tree/1cc43e0e
Diff: http://git-wip-us.apache.org/repos/asf/tomee-site-generator/diff/1cc43e0e

Branch: refs/heads/master
Commit: 1cc43e0e17c3d156d5d92b54a887e46930fcdfb4
Parents: 3c8d303
Author: dblevins <da...@gmail.com>
Authored: Sun Nov 25 22:31:57 2018 -0800
Committer: dblevins <da...@gmail.com>
Committed: Sun Nov 25 22:31:57 2018 -0800

----------------------------------------------------------------------
 .../org/apache/tomee/website/Examples2.java     |   2 +
 .../org/apache/tomee/website/FixMarkdown.java   | 100 +++++++++++++
 .../java/org/apache/tomee/website/Sources.java  |  17 +--
 .../apache/tomee/website/FixMarkdownTest.java   | 142 +++++++++++++++++++
 4 files changed, 250 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/1cc43e0e/src/main/java/org/apache/tomee/website/Examples2.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tomee/website/Examples2.java b/src/main/java/org/apache/tomee/website/Examples2.java
index 1891877..79aaa03 100644
--- a/src/main/java/org/apache/tomee/website/Examples2.java
+++ b/src/main/java/org/apache/tomee/website/Examples2.java
@@ -24,6 +24,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.ListIterator;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -50,6 +51,7 @@ public class Examples2 {
                 .peek(example -> example.updateDestination(destDir))
                 .peek(this::copyToDest)
                 .peek(this::addJbakeHeader)
+                .peek(FixMarkdown::process)
                 .collect(Collectors.toList());
 
 

http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/1cc43e0e/src/main/java/org/apache/tomee/website/FixMarkdown.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tomee/website/FixMarkdown.java b/src/main/java/org/apache/tomee/website/FixMarkdown.java
new file mode 100644
index 0000000..2bb15de
--- /dev/null
+++ b/src/main/java/org/apache/tomee/website/FixMarkdown.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tomee.website;
+
+import org.apache.openejb.loader.IO;
+import org.apache.openejb.util.Join;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.function.Consumer;
+import java.util.regex.Pattern;
+
+public class FixMarkdown {
+
+    private final List<String> completed = new ArrayList<String>();
+    private Consumer<String> processor = this::findJbakeHeader;
+
+    public static void process(final Example example) {
+        if (!example.getExt().startsWith("md")) return;
+
+        final FixMarkdown fixMarkdown = new FixMarkdown();
+
+        try {
+            final List<String> lines = new ArrayList<>();
+            Collections.addAll(lines, IO.slurp(example.getDestReadme()).split("\n"));
+
+            for (final String line : lines) {
+                fixMarkdown.process(line);
+            }
+
+            fixMarkdown.process("");
+
+            // Update the destination readme file
+            IO.copy(IO.read(Join.join("\n", fixMarkdown.completed)), example.getDestReadme());
+
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private void process(final String line) {
+        processor.accept(line);
+    }
+
+    private void findJbakeHeader(final String line) {
+        completed.add(line);
+
+        if (line.equals("~~~~~~")) {
+            processor = this::findWrappableLines;
+        }
+    }
+
+    private void findWrappableLines(final String line) {
+        if (isWrappable(line)) {
+            processor = new Unwrap()::process;
+            processor.accept(line);
+        } else {
+            completed.add(line);
+        }
+    }
+
+    public class Unwrap {
+        private final List<String> lines = new ArrayList<>();
+
+        public void process(final String line) {
+            if (!isWrappable(line)) {
+                completed.add(Join.join(" ", lines));
+
+                processor = FixMarkdown.this::findWrappableLines;
+                processor.accept(line);
+                return;
+            }
+
+            lines.add(line);
+        }
+    }
+
+    private final Pattern alpha = Pattern.compile("^[a-zA-Z].*");
+
+    private boolean isWrappable(final String line) {
+        return alpha.matcher(line).matches();
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/1cc43e0e/src/main/java/org/apache/tomee/website/Sources.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tomee/website/Sources.java b/src/main/java/org/apache/tomee/website/Sources.java
index c08783e..c8592a4 100644
--- a/src/main/java/org/apache/tomee/website/Sources.java
+++ b/src/main/java/org/apache/tomee/website/Sources.java
@@ -52,6 +52,12 @@ public class Sources {
         repos.mkdirs();
 
         Collections.addAll(this.sources, sources);
+        for (final Source source : sources) {
+            if (source.isLatest()) {
+                this.sources.add(new Source(source.getScmUrl(), source.getBranch(), "latest"));
+                break;
+            }
+        }
     }
 
     public File getDestination() {
@@ -98,15 +104,4 @@ public class Sources {
     private static void done(final Source source) {
         System.out.println("Done " + source);
     }
-
-    public static void main(String[] args) throws Exception {
-        final Sources sources = new Sources(new File("target/jbake"), new File("repos"), new File("src/main/jbake/content"),
-                new Source("https://git-wip-us.apache.org/repos/asf/tomee.git", "master", "master"),
-                new Source("https://git-wip-us.apache.org/repos/asf/tomee.git", "tomee-7.1.0", "tomee-7.1"),
-                new Source("https://git-wip-us.apache.org/repos/asf/tomee.git", "tomee-7.0.5", "tomee-7.0"),
-                new Source("https://git-wip-us.apache.org/repos/asf/tomee.git", "tomee-8.0.0-M1", "tomee-8.0", true)
-        );
-
-        sources.prepare();
-    }
 }

http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/1cc43e0e/src/test/java/org/apache/tomee/website/FixMarkdownTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/tomee/website/FixMarkdownTest.java b/src/test/java/org/apache/tomee/website/FixMarkdownTest.java
new file mode 100644
index 0000000..45341e9
--- /dev/null
+++ b/src/test/java/org/apache/tomee/website/FixMarkdownTest.java
@@ -0,0 +1,142 @@
+package org.apache.tomee.website;
+
+import org.apache.openejb.loader.IO;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.File;
+
+public class FixMarkdownTest extends Assert {
+
+    @Test
+    public void twoSimpleParagraphs() throws Exception {
+
+        final File srcReadMe = File.createTempFile("example-", ".md");
+        final File destReadme = File.createTempFile("example-", ".md");
+
+        final Example example = new Example(srcReadMe, "cdi-basic", "md", "cdi-basic.html", "none");
+        example.setDestReadme(destReadme);
+
+        IO.copy(IO.read("~~~~~~\n" +
+                        "To use `@Inject`, the first thing you need is a `META-INF/beans.xml` file in the module\n" +
+                        "or jar.  This effectively turns on CDI and allows the `@Inject` references to work.\n" +
+                        "No `META-INF/beans.xml` no injection, period.  This may seem overly strict,\n" +
+                        "but it is not without reason.  The CDI API is a bit greedy and does consume a fair\n" +
+                        "about of resources by design.\n" +
+                        "\n" +
+                        "When the container constructs a bean with an `@Inject` reference,\n" +
+                        "it will first find or create the object that will be injected.  For the sake of\n" +
+                        "simplicity, the is example has a basic `Faculty` pojo with a no-arg constructor.  Anyone\n" +
+                        "referencing `@Inject Faculty` will get their own instance of `Faculty`.  If the desire\n" +
+                        "is to share the same instance of `Faculty`, see the concept of `scopes` -- this is\n" +
+                        "exactly what scopes are for.\n"
+        ), srcReadMe);
+        IO.copy(srcReadMe, destReadme);
+
+        FixMarkdown.process(example);
+
+        final String expected = "~~~~~~\n" +
+                "To use `@Inject`, the first thing you need is a `META-INF/beans.xml` file in the module " +
+                "or jar.  This effectively turns on CDI and allows the `@Inject` references to work. " +
+                "No `META-INF/beans.xml` no injection, period.  This may seem overly strict, " +
+                "but it is not without reason.  The CDI API is a bit greedy and does consume a fair " +
+                "about of resources by design.\n" +
+                "\n" +
+                "When the container constructs a bean with an `@Inject` reference, " +
+                "it will first find or create the object that will be injected.  For the sake of " +
+                "simplicity, the is example has a basic `Faculty` pojo with a no-arg constructor.  Anyone " +
+                "referencing `@Inject Faculty` will get their own instance of `Faculty`.  If the desire " +
+                "is to share the same instance of `Faculty`, see the concept of `scopes` -- this is " +
+                "exactly what scopes are for.\n";
+
+        final String actual = IO.slurp(destReadme);
+
+        assertEquals(expected, actual);
+    }
+
+    @Test
+    public void sectionWithCodeBlock() throws Exception {
+
+        final File srcReadMe = File.createTempFile("example-", ".md");
+        final File destReadme = File.createTempFile("example-", ".md");
+
+        final Example example = new Example(srcReadMe, "cdi-basic", "md", "cdi-basic.html", "none");
+        example.setDestReadme(destReadme);
+
+        IO.copy(IO.read("~~~~~~\n" +
+                "## Faculty <small>a basic injectable pojo</small>\n" +
+                "\n" +
+                "    public class Faculty {\n" +
+                "\n" +
+                "        private List<String> facultyMembers;\n" +
+                "\n" +
+                "        private String facultyName;\n" +
+                "\n" +
+                "        @PostConstruct\n" +
+                "        public void initialize() {\n" +
+                "            this.facultyMembers = new ArrayList<String>();\n" +
+                "            facultyMembers.add(\"Ian Schultz\");\n" +
+                "            facultyMembers.add(\"Diane Reyes\");\n" +
+                "            facultyName = \"Computer Science\";\n" +
+                "        }\n" +
+                "\n" +
+                "        public List<String> getFacultyMembers() {\n" +
+                "            return facultyMembers;\n" +
+                "        }\n" +
+                "\n" +
+                "        public String getFacultyName() {\n" +
+                "            return facultyName;\n" +
+                "        }\n" +
+                "\n" +
+                "    }\n" +
+                "\n" +
+                "## Course <small>a simple session bean</small>\n"), srcReadMe);
+        IO.copy(srcReadMe, destReadme);
+
+        FixMarkdown.process(example);
+
+        // We expect the original content -- nothing should be changed
+        final String expected = IO.slurp(srcReadMe);
+
+        final String actual = IO.slurp(destReadme);
+
+        assertEquals(expected, actual);
+    }
+
+    @Test
+    public void skipJBakeMarkdownHeaders() throws Exception {
+
+        final File srcReadMe = File.createTempFile("example-", ".md");
+        final File destReadme = File.createTempFile("example-", ".md");
+
+        final Example example = new Example(srcReadMe, "cdi-basic", "md", "cdi-basic.html", "none");
+        example.setDestReadme(destReadme);
+
+        IO.copy(IO.read("type=page\n" +
+                        "status=awesome\n" +
+                        "title=Awesome\n" +
+                        "~~~~~~\n" +
+                        "Here we have\n" +
+                        "a sentence that needs unwrapping\n" +
+                        "\n" +
+                        "But the header should not be\n" +
+                        "unwrapped.  That would be bad.\n"
+        ), srcReadMe);
+        IO.copy(srcReadMe, destReadme);
+
+        FixMarkdown.process(example);
+
+        final String expected = "type=page\n" +
+                "status=awesome\n" +
+                "title=Awesome\n" +
+                "~~~~~~\n" +
+                "Here we have a sentence that needs unwrapping\n" +
+                "\n" +
+                "But the header should not be unwrapped.  That would be bad.\n";
+
+        final String actual = IO.slurp(destReadme);
+
+        assertEquals(expected, actual);
+    }
+
+}
\ No newline at end of file