summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentFormatter.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentFormatter.java')
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentFormatter.java181
1 files changed, 0 insertions, 181 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentFormatter.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentFormatter.java
deleted file mode 100644
index 74d1480b29..0000000000
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentFormatter.java
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright (C) 2016 The Android Open Source Project
-//
-// Licensed 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 com.google.gerrit.server.mail.send;
-
-import static com.google.common.base.Strings.isNullOrEmpty;
-
-import com.google.gerrit.common.Nullable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-public class CommentFormatter {
- public enum BlockType {
- LIST,
- PARAGRAPH,
- PRE_FORMATTED,
- QUOTE
- }
-
- public static class Block {
- public BlockType type;
- public String text;
- public List<String> items; // For the items of list blocks.
- public List<Block> quotedBlocks; // For the contents of quote blocks.
- }
-
- /**
- * Take a string of comment text that was written using the wiki-Like format and emit a list of
- * blocks that can be rendered to block-level HTML. This method does not escape HTML.
- *
- * <p>Adapted from the {@code wikify} method found in:
- * com.google.gwtexpui.safehtml.client.SafeHtml
- *
- * @param source The raw, unescaped comment in the Gerrit wiki-like format.
- * @return List of block objects, each with unescaped comment content.
- */
- public static List<Block> parse(@Nullable String source) {
- if (isNullOrEmpty(source)) {
- return Collections.emptyList();
- }
-
- List<Block> result = new ArrayList<>();
- for (String p : source.split("\n\n")) {
- if (isQuote(p)) {
- result.add(makeQuote(p));
- } else if (isPreFormat(p)) {
- result.add(makePre(p));
- } else if (isList(p)) {
- makeList(p, result);
- } else if (!p.isEmpty()) {
- result.add(makeParagraph(p));
- }
- }
- return result;
- }
-
- /**
- * Take a block of comment text that contains a list and potentially paragraphs (but does not
- * contain blank lines), generate appropriate block elements and append them to the output list.
- *
- * <p>In simple cases, this will generate a single list block. For example, on the following
- * input.
- *
- * <p>* Item one. * Item two. * item three.
- *
- * <p>However, if the list is adjacent to a paragraph, it will need to also generate that
- * paragraph. Consider the following input.
- *
- * <p>A bit of text describing the context of the list: * List item one. * List item two. * Et
- * cetera.
- *
- * <p>In this case, {@code makeList} generates a paragraph block object containing the
- * non-bullet-prefixed text, followed by a list block.
- *
- * <p>Adapted from the {@code wikifyList} method found in:
- * com.google.gwtexpui.safehtml.client.SafeHtml
- *
- * @param p The block containing the list (as well as potential paragraphs).
- * @param out The list of blocks to append to.
- */
- private static void makeList(String p, List<Block> out) {
- Block block = null;
- StringBuilder textBuilder = null;
- boolean inList = false;
- boolean inParagraph = false;
-
- for (String line : p.split("\n")) {
- if (line.startsWith("-") || line.startsWith("*")) {
- // The next line looks like a list item. If not building a list already,
- // then create one. Remove the list item marker (* or -) from the line.
- if (!inList) {
- if (inParagraph) {
- // Add the finished paragraph block to the result.
- inParagraph = false;
- block.text = textBuilder.toString();
- out.add(block);
- }
-
- inList = true;
- block = new Block();
- block.type = BlockType.LIST;
- block.items = new ArrayList<>();
- }
- line = line.substring(1).trim();
-
- } else if (!inList) {
- // Otherwise, if a list has not yet been started, but the next line does
- // not look like a list item, then add the line to a paragraph block. If
- // a paragraph block has not yet been started, then create one.
- if (!inParagraph) {
- inParagraph = true;
- block = new Block();
- block.type = BlockType.PARAGRAPH;
- textBuilder = new StringBuilder();
- } else {
- textBuilder.append(" ");
- }
- textBuilder.append(line);
- continue;
- }
-
- block.items.add(line);
- }
-
- if (block != null) {
- out.add(block);
- }
- }
-
- private static Block makeQuote(String p) {
- String quote = p.replaceAll("\n\\s?>\\s?", "\n");
- if (quote.startsWith("> ")) {
- quote = quote.substring(2);
- } else if (quote.startsWith(" > ")) {
- quote = quote.substring(3);
- }
-
- Block block = new Block();
- block.type = BlockType.QUOTE;
- block.quotedBlocks = CommentFormatter.parse(quote);
- return block;
- }
-
- private static Block makePre(String p) {
- Block block = new Block();
- block.type = BlockType.PRE_FORMATTED;
- block.text = p;
- return block;
- }
-
- private static Block makeParagraph(String p) {
- Block block = new Block();
- block.type = BlockType.PARAGRAPH;
- block.text = p;
- return block;
- }
-
- private static boolean isQuote(String p) {
- return p.startsWith("> ") || p.startsWith(" > ");
- }
-
- private static boolean isPreFormat(String p) {
- return p.startsWith(" ") || p.startsWith("\t") || p.contains("\n ") || p.contains("\n\t");
- }
-
- private static boolean isList(String p) {
- return p.startsWith("- ") || p.startsWith("* ") || p.contains("\n- ") || p.contains("\n* ");
- }
-}