startgit

Static page generator for git repositories
git clone git://git.dimitrijedobrota.com/startgit.git
Log | Files | Refs | README | LICENSE | HACKING | CONTRIBUTING | CODE_OF_CONDUCT | BUILDING

commit 7291b93a9bf785883cb4e0e5c372f7b488dfaba9
parent fe50b5aad2d23362849307ca081f588e9758bb21
author Dimitrije Dobrota <mail@dimitrijedobrota.com>
date Fri, 2 May 2025 21:02:33 +0200

Fix 'span white-space: pre' error

Diffstat:
M source/document.cpp | ++++ -
M source/startgit.cpp | +++++++++++++++++++++++++++++++++++++ ---------------------------------
M source/utils.cpp | + --------------

3 files changed, 42 insertions(+), 48 deletions(-)


diff --git a/ source/document.cpp b/ source/document.cpp

@@ -125,7 +125,10 @@ void document::render(std::ostream& ost, const content_t& content) const " color: var(--theme_green);" "} .del {" " color: var(--theme_red);"
"}"},
"} .inline {"
" white-space: pre;"
"}"
},
}, }, };

diff --git a/ source/startgit.cpp b/ source/startgit.cpp

@@ -275,32 +275,34 @@ element diff_hunk(const hunk& hunk) hunk->new_lines ), xmlencode(header.substr(header.rfind('@') + 2)),
span {
{{"style", "white-space: pre"}},
transform(
hunk.get_lines(),
[](const auto& line) -> element
{
using hemplate::html::div;
if (line.is_add()) {
return div {
{{"class", "add"}},
xmlencode(line.get_content()),
};
}
if (line.is_del()) {
return div {
{{"class", "del"}},
xmlencode(line.get_content()),
};
}
return element(xmlencode(line.get_content()));
}
),
},
},
span {
transform(
hunk.get_lines(),
[](const auto& line) -> element
{
using hemplate::html::div;
if (line.is_add()) {
return div {
{{"class", "inline add"}},
xmlencode(line.get_content()),
};
}
if (line.is_del()) {
return div {
{{"class", "inline del"}},
xmlencode(line.get_content()),
};
}
return div {
{{"class", "inline"}},
xmlencode(line.get_content()),
};
}
),
}, }; }

@@ -377,7 +379,7 @@ element commit_diff(const commit& commit) }, br {}, p {
{{"style", "white-space: pre;"}},
{{"class", "inline"}},
xmlencode(commit.get_message()), }, file_changes(commit.get_diff()),

@@ -418,16 +420,18 @@ element write_file_content(const file& file) int count = 0; return span {
{{"style", "white-space: pre;"}},
transform( lines, [&](const auto& line) {
return std::format(
R"(<a id="{0}" href="#{0}">{0:5}</a> {1})",
count++,
xmlencode(line)
);
return hemplate::html::div {
{{"class", "inline"}},
std::format(
R"(<a id="{0}" href="#{0}">{0:5}</a> {1})",
count++,
xmlencode(line)
)
};
} ), };

diff --git a/ source/utils.cpp b/ source/utils.cpp

@@ -34,20 +34,6 @@ std::string time_long(const git2wrap::time& time) // NOLINTBEGIN // clang-format off
void xmlencode(std::ostream& ost, const std::string& str)
{
for (const char c: str) {
switch(c) {
case '<': ost << "&lt;"; continue;
case '>': ost << "&gt;"; continue;
case '\'': ost << "&#39;"; continue;
case '&': ost << "&amp;"; continue;
case '"': ost << "&quot;"; continue;
}
ost << c;
}
}
std::string xmlencode(const std::string& str) { std::string res;

@@ -60,6 +46,7 @@ std::string xmlencode(const std::string& str) case '\'': res += "&#39;"; continue; case '&': res += "&amp;"; continue; case '"': res += "&quot;"; continue;
case '\n': res += "<br>"; continue;
} res += c; }