diff --git a/core/src/main/java/com/facebook/ktfmt/kdoc/KDocWriter.kt b/core/src/main/java/com/facebook/ktfmt/kdoc/KDocWriter.kt index 1b1d8b4c..8d7db5db 100644 --- a/core/src/main/java/com/facebook/ktfmt/kdoc/KDocWriter.kt +++ b/core/src/main/java/com/facebook/ktfmt/kdoc/KDocWriter.kt @@ -23,8 +23,6 @@ import com.facebook.ktfmt.kdoc.KDocToken.Type.CODE_BLOCK_MARKER import com.facebook.ktfmt.kdoc.KDocToken.Type.HEADER_OPEN_TAG import com.facebook.ktfmt.kdoc.KDocToken.Type.LIST_ITEM_OPEN_TAG import com.facebook.ktfmt.kdoc.KDocToken.Type.PARAGRAPH_OPEN_TAG -import com.facebook.ktfmt.kdoc.KDocWriter.AutoIndent.AUTO_INDENT -import com.facebook.ktfmt.kdoc.KDocWriter.AutoIndent.NO_AUTO_INDENT import com.facebook.ktfmt.kdoc.KDocWriter.RequestedWhitespace.BLANK_LINE import com.facebook.ktfmt.kdoc.KDocWriter.RequestedWhitespace.CONDITIONAL_WHITESPACE import com.facebook.ktfmt.kdoc.KDocWriter.RequestedWhitespace.NEWLINE @@ -41,7 +39,7 @@ import com.google.common.collect.Sets.immutableEnumSet * must compute and store the answer to questions like "How many levels of nested HTML list are we * inside?" */ -internal class KDocWriter(private val blockIndent: Int, private val maxLineLength: Int) { +internal class KDocWriter(blockIndentCount: Int, private val maxLineLength: Int) { /** * Tokens that are always pinned to the following token. For example, `
` in `
Foo bar` (never @@ -55,19 +53,12 @@ internal class KDocWriter(private val blockIndent: Int, private val maxLineLengt immutableEnumSet(LIST_ITEM_OPEN_TAG, PARAGRAPH_OPEN_TAG, HEADER_OPEN_TAG) private val output = StringBuilder() - /** - * Whether we are inside an `
veryverylongword," @@ -261,61 +234,44 @@ internal class KDocWriter(private val blockIndent: Int, private val maxLineLengt writeNewline() } if (!atStartOfLine && needWhitespace) { - output.append(" ") - remainingOnLine-- + appendTrackingLength(" ") } - output.append(token.value) + appendTrackingLength(token.value) + requestedWhitespace = NONE if (!START_OF_LINE_TOKENS.contains(token.type)) { atStartOfLine = false } - - /* - * TODO(cpovirk): We really want the number of "characters," not chars. Figure out what the - * right way of measuring that is (grapheme count (with BreakIterator?)? sum of widths of all - * graphemes? I don't think that our style guide is specific about this.). Moreover, I am - * probably brushing other problems with surrogates, etc. under the table. Hopefully I mostly - * get away with it by joining all non-space, non-tab characters together. - * - * Possibly the "width" question has no right answer: - * http://denisbider.blogspot.com/2015/09/when-monospace-fonts-arent-unicode.html - */ - remainingOnLine -= token.length() - requestedWhitespace = NONE } private fun writeBlankLine() { output.append("\n") - appendSpaces(blockIndent + 1) - output.append("*") + appendTrackingLength(blockIndent) + appendTrackingLength("*") writeNewline() } - private fun writeNewline(autoIndent: AutoIndent = AUTO_INDENT) { + private fun writeNewline() { output.append("\n") - appendSpaces(blockIndent + 1) - output.append("*") - appendSpaces(1) - remainingOnLine = maxLineLength - blockIndent - 3 - if (autoIndent == AUTO_INDENT) { - appendSpaces(innerIndent()) - remainingOnLine -= innerIndent() - } + remainingOnLine = maxLineLength + appendTrackingLength(blockIndent) + appendTrackingLength("* ") atStartOfLine = true } - internal enum class AutoIndent { - AUTO_INDENT, - NO_AUTO_INDENT - } - - private fun innerIndent(): Int { - return 0 - } - - // If this is a hotspot, keep a String of many spaces around, and call append(string, start, end). - private fun appendSpaces(count: Int) { - output.append(Strings.repeat(" ", count)) + /* + * TODO(cpovirk): We really want the number of "characters," not chars. Figure out what the + * right way of measuring that is (grapheme count (with BreakIterator?)? sum of widths of all + * graphemes? I don't think that our style guide is specific about this.). Moreover, I am + * probably brushing other problems with surrogates, etc. under the table. Hopefully I mostly + * get away with it by joining all non-space, non-tab characters together. + * + * Possibly the "width" question has no right answer: + * http://denisbider.blogspot.com/2015/09/when-monospace-fonts-arent-unicode.html + */ + private fun appendTrackingLength(str: String) { + output.append(str) + remainingOnLine -= str.length } }