aboutsummaryrefslogtreecommitdiff
path: root/src/renderers/renderhelpers.cpp
diff options
context:
space:
mode:
authorKarol Kosek <krkk@krkk.ct8.pl>2021-04-05 14:12:23 +0200
committerFelix Queißner <felix@ib-queissner.de>2021-04-05 17:13:58 +0200
commit4525eeb7ff1354c465c268d4a921393c8800957b (patch)
treec1f0e00ad977488359ba974a99544dd8c657fa26 /src/renderers/renderhelpers.cpp
parent1e2734f47d65702eeb31d0287a383eedab56c55e (diff)
downloadkristall-4525eeb7ff1354c465c268d4a921393c8800957b.tar.gz
Move replace_quotes to renderhelpers
Diffstat (limited to 'src/renderers/renderhelpers.cpp')
-rw-r--r--src/renderers/renderhelpers.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/renderers/renderhelpers.cpp b/src/renderers/renderhelpers.cpp
index a18d434..30c51d5 100644
--- a/src/renderers/renderhelpers.cpp
+++ b/src/renderers/renderhelpers.cpp
@@ -378,6 +378,74 @@ void renderhelpers::renderEscapeCodes(const QByteArray &input,
}
}
+QByteArray renderhelpers::replace_quotes(QByteArray &line)
+{
+ if (!kristall::globals().options.fancy_quotes)
+ return line;
+
+ int last_d = -1,
+ last_s = -1;
+
+ for (int i = 0; i < line.length(); ++i)
+ {
+ // Double quotes
+ if (line[i] == '"')
+ {
+ if (last_d == -1)
+ {
+ last_d = i;
+ }
+ else
+ {
+ // Replace quote at first position:
+ QByteArray first = QString("“").toUtf8();
+ line.replace(last_d, 1, first);
+
+ // Replace quote at second position:
+ line.replace(i + first.size() - 1, 1, QString("”").toUtf8());
+
+ last_d = -1;
+ }
+ }
+ else if (line[i] == '\'')
+ {
+ if (last_s == -1)
+ {
+ // Skip if it looks like a contraction rather
+ // than a quote.
+ if (i > 0 && line[i - 1] != ' ')
+ {
+ line.replace(i, 1, QString("’").toUtf8());
+ continue;
+ }
+
+ // For shortenings like 'till
+ int len = line.length();
+ if ((i + 1) < len && line[i + 1] != ' ')
+ {
+ line.replace(i, 1, QString("‘").toUtf8());
+ continue;
+ }
+
+ last_s = i;
+ }
+ else
+ {
+ // Replace quote at first position:
+ QByteArray first = QString("‘").toUtf8();
+ line.replace(last_s, 1, first);
+
+ // Replace quote at second position:
+ line.replace(i + first.size() - 1, 1, QString("’").toUtf8());
+
+ last_s = -1;
+ }
+ }
+ }
+
+ return line;
+}
+
void renderhelpers::setPageMargins(QTextDocument *doc, int mh, int mv)
{
QTextFrame *root = doc->rootFrame();