This is an automated email from the ASF dual-hosted git repository.

joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git


The following commit(s) were added to refs/heads/develop by this push:
     new 1f6fc36  formatter: preserve minimum whitespace at end of blank lines 
inside asdoc <listing> tags
1f6fc36 is described below

commit 1f6fc36be468db2e6ccf66e70b114b2c29c1132c
Author: Josh Tynjala <[email protected]>
AuthorDate: Thu Oct 14 15:24:26 2021 -0700

    formatter: preserve minimum whitespace at end of blank lines inside asdoc 
<listing> tags
---
 .../org/apache/royale/formatter/FORMATTER.java     | 46 +++++++++++++++++++++-
 .../apache/royale/formatter/TestAsDocComment.java  | 36 +++++++++++++++++
 2 files changed, 80 insertions(+), 2 deletions(-)

diff --git a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java 
b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
index 04cff34..9686eb0 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
@@ -71,6 +71,7 @@ public class FORMATTER {
        private static final String NEWLINE = 
System.getProperty("line.separator");
        private static final String DEFAULT_VAR = "files";
        private static final String L10N_CONFIG_PREFIX = 
"org.apache.royale.compiler.internal.config.configuration";
+       private static final Pattern ASDOC_START_LINE_PATTERN = 
Pattern.compile("^\\*(\\s*)");
 
        static enum ExitCode {
                SUCCESS(0), PRINT_HELP(1), FAILED_WITH_PROBLEMS(2), 
FAILED_WITH_EXCEPTIONS(3), FAILED_WITH_CONFIG_PROBLEMS(4);
@@ -1346,18 +1347,59 @@ public class FORMATTER {
                return builder.toString();
        }
 
+       private boolean isInListing(String lineText, boolean alreadyInListing) {
+               int searchIndex = 0;
+               boolean inListing = alreadyInListing;
+               while (searchIndex < lineText.length()) {
+                       System.err.println(searchIndex + " " + 
lineText.length() + " " + inListing);
+                       if (!inListing) {
+                               searchIndex = lineText.indexOf("<listing", 
searchIndex);
+                               if (searchIndex == -1) {
+                                       return false;
+                               }
+                               searchIndex += 8;
+                               inListing = true;
+                       }
+                       searchIndex = lineText.indexOf("</listing>", 
searchIndex);
+                       if (searchIndex == -1) {
+                               return true;
+                       }
+                       searchIndex += 10;
+                       inListing = false;
+               }
+               return inListing;
+       }
+
        private String formatASDocComment(String comment, int indent) {
                String[] lines = comment.split("\n");
                StringBuilder builder = new StringBuilder();
-               builder.append(lines[0].trim());
+               String lineText = lines[0].trim();
+               builder.append(lineText);
+               boolean inListing = isInListing(lineText, false);
                if (lines.length > 1) {
                        builder.append('\n');
                }
+               String listingIndent = null;
                for (int i = 1; i < lines.length - 1; i++) {
+                       lineText = lines[i].trim();
+                       if (inListing) {
+                               Matcher startMatcher = 
ASDOC_START_LINE_PATTERN.matcher(lineText);
+                               if (startMatcher.find()) {
+                                       if (listingIndent == null) {
+                                               listingIndent = 
startMatcher.group(1);
+                                       } else if 
(startMatcher.group().length() >= lineText.length()) {
+                                               lineText = "*" + listingIndent;
+                                       }
+                               }
+                       }
                        appendIndent(builder, indent);
                        builder.append(' ');
-                       builder.append(lines[i].trim());
+                       builder.append(lineText);
                        builder.append('\n');
+                       inListing = isInListing(lineText, inListing);
+                       if (!inListing) {
+                               listingIndent = null;
+                       }
                }
                if (lines.length > 1) {
                        appendIndent(builder, indent);
diff --git 
a/formatter/src/test/java/org/apache/royale/formatter/TestAsDocComment.java 
b/formatter/src/test/java/org/apache/royale/formatter/TestAsDocComment.java
index cc905d4..4a6ec50 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestAsDocComment.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestAsDocComment.java
@@ -224,4 +224,40 @@ public class TestAsDocComment  extends BaseFormatterTests {
                                // @formatter:on
                                result);
        }
+       @Test
+       public void testListing() {
+               FORMATTER formatter = new FORMATTER();
+               formatter.insertSpaceAfterKeywordsInControlFlowStatements = 
true;
+               formatter.placeOpenBraceOnNewLine = true;
+               formatter.insertSpaces = false;
+               String result = formatter.formatActionScriptText(
+               // @formatter:off
+                       "/**\n" +
+                       " * Description.\n" +
+                       " * \n" +
+                       " * <listing>\n" +
+                       " * // before\n" +
+                       " * \n" +
+                       " * </listing>\n" +
+                       " * \n" +
+                       " * @see test\n" +
+                       " */",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "/**\n" +
+                               " * Description.\n" +
+                               " *\n" +
+                               " * <listing>\n" +
+                               " * // before\n" +
+                               " * \n" +
+                               " * </listing>\n" +
+                               " *\n" +
+                               " * @see test\n" +
+                               " */",
+                               // @formatter:on
+                               result);
+       }
 }

Reply via email to