diff options
| author | Karol Kosek <krkk@krkk.ct8.pl> | 2021-04-05 14:12:23 +0200 |
|---|---|---|
| committer | Felix Queißner <felix@ib-queissner.de> | 2021-04-05 17:13:58 +0200 |
| commit | 4525eeb7ff1354c465c268d4a921393c8800957b (patch) | |
| tree | c1f0e00ad977488359ba974a99544dd8c657fa26 /src/renderers/renderhelpers.cpp | |
| parent | 1e2734f47d65702eeb31d0287a383eedab56c55e (diff) | |
| download | kristall-4525eeb7ff1354c465c268d4a921393c8800957b.tar.gz | |
Move replace_quotes to renderhelpers
Diffstat (limited to 'src/renderers/renderhelpers.cpp')
| -rw-r--r-- | src/renderers/renderhelpers.cpp | 68 |
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(); |
