[clang-tools-extra] [clangd] Improve Markup Rendering (PR #140498)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Jul 12 13:01:16 PDT 2025
================
@@ -370,40 +497,128 @@ std::unique_ptr<Block> Paragraph::clone() const {
/// Choose a marker to delimit `Text` from a prioritized list of options.
/// This is more readable than escaping for plain-text.
-llvm::StringRef chooseMarker(llvm::ArrayRef<llvm::StringRef> Options,
- llvm::StringRef Text) {
+llvm::StringRef Paragraph::chooseMarker(llvm::ArrayRef<llvm::StringRef> Options,
+ llvm::StringRef Text) const {
// Prefer a delimiter whose characters don't appear in the text.
for (llvm::StringRef S : Options)
if (Text.find_first_of(S) == llvm::StringRef::npos)
return S;
return Options.front();
}
+bool Paragraph::punctuationIndicatesLineBreak(llvm::StringRef Line) const {
+ constexpr llvm::StringLiteral Punctuation = R"txt(.:,;!?)txt";
+
+ Line = Line.rtrim();
+ return !Line.empty() && Punctuation.contains(Line.back());
+}
+
+bool Paragraph::isHardLineBreakIndicator(llvm::StringRef Rest) const {
+ // '-'/'*' md list, '@'/'\' documentation command, '>' md blockquote,
+ // '#' headings, '`' code blocks, two spaces (markdown force newline)
+ constexpr llvm::StringLiteral LinebreakIndicators = R"txt(-*@\>#`)txt";
+
+ Rest = Rest.ltrim(" \t");
----------------
tcottin wrote:
I would say no.
This case is only relevant if there are multiple successive newline characters in a paragraph.
This cannot happen for the documentation usecase because successive newline characters will lead to separate Paragraph objects.
The only case where this is relevant is if a Paragraph is created by a user and the paragraph text is explicitly set to contain e.g. "text\n\nother text".
In this case the newlines are treated the same as a newline, which results in a space in the text.
https://github.com/llvm/llvm-project/pull/140498
More information about the cfe-commits
mailing list