feat: add missing KF6 framework recipes
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
if(TARGET Qt6::Widgets AND TARGET Qt6::PrintSupport)
|
||||
add_executable(codepdfprinter codepdfprinter.cpp main.cpp)
|
||||
target_link_libraries(codepdfprinter Qt6::Widgets Qt6::PrintSupport KF6SyntaxHighlighting)
|
||||
endif()
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2019 Friedrich W. H. Kossebau <kossebau@kde.org>
|
||||
|
||||
SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "codepdfprinter.h"
|
||||
|
||||
#include <KSyntaxHighlighting/Definition>
|
||||
#include <KSyntaxHighlighting/SyntaxHighlighter>
|
||||
#include <KSyntaxHighlighting/Theme>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QFile>
|
||||
#include <QFontDatabase>
|
||||
#include <QFontMetrics>
|
||||
#include <QPrinter>
|
||||
|
||||
CodePdfPrinter::CodePdfPrinter()
|
||||
: m_highlighter(new KSyntaxHighlighting::SyntaxHighlighter(&m_document))
|
||||
{
|
||||
const auto font = QFontDatabase::systemFont(QFontDatabase::FixedFont);
|
||||
const QFontMetrics fontMetrics(font);
|
||||
m_document.setDefaultFont(font);
|
||||
|
||||
QTextOption textOption(Qt::AlignTop | Qt::AlignLeft);
|
||||
textOption.setTabStopDistance(8 * fontMetrics.horizontalAdvance(QLatin1Char(' ')));
|
||||
textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
|
||||
m_document.setDefaultTextOption(textOption);
|
||||
|
||||
// light theme for "printing" on white PDF "paper"
|
||||
const auto theme = m_repository.defaultTheme(KSyntaxHighlighting::Repository::LightTheme);
|
||||
m_highlighter->setTheme(theme);
|
||||
}
|
||||
|
||||
CodePdfPrinter::~CodePdfPrinter() = default;
|
||||
|
||||
bool CodePdfPrinter::openSourceFile(const QString &fileName)
|
||||
{
|
||||
QFile f(fileName);
|
||||
if (!f.open(QFile::ReadOnly)) {
|
||||
qWarning() << "Failed to open" << fileName << ":" << f.errorString();
|
||||
return false;
|
||||
}
|
||||
|
||||
const auto def = m_repository.definitionForFileName(fileName);
|
||||
m_highlighter->setDefinition(def);
|
||||
|
||||
m_document.setPlainText(QString::fromUtf8(f.readAll()));
|
||||
return true;
|
||||
}
|
||||
|
||||
void CodePdfPrinter::printPdfFile(const QString &fileName)
|
||||
{
|
||||
QPrinter printer(QPrinter::PrinterResolution);
|
||||
printer.setOutputFormat(QPrinter::PdfFormat);
|
||||
printer.setPageSize(QPageSize(QPageSize::A4));
|
||||
printer.setOutputFileName(fileName);
|
||||
|
||||
m_document.print(&printer);
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2019 Friedrich W. H. Kossebau <kossebau@kde.org>
|
||||
|
||||
SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#ifndef CODEPDFPRINTER_H
|
||||
#define CODEPDFPRINTER_H
|
||||
|
||||
#include <KSyntaxHighlighting/Repository>
|
||||
|
||||
#include <QTextDocument>
|
||||
|
||||
namespace KSyntaxHighlighting
|
||||
{
|
||||
class SyntaxHighlighter;
|
||||
}
|
||||
|
||||
class CodePdfPrinter
|
||||
{
|
||||
public:
|
||||
explicit CodePdfPrinter();
|
||||
~CodePdfPrinter();
|
||||
|
||||
public:
|
||||
bool openSourceFile(const QString &fileName);
|
||||
void printPdfFile(const QString &fileName);
|
||||
|
||||
private:
|
||||
QTextDocument m_document;
|
||||
|
||||
KSyntaxHighlighting::Repository m_repository;
|
||||
KSyntaxHighlighting::SyntaxHighlighter *m_highlighter;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2019 Friedrich W. H. Kossebau <kossebau@kde.org>
|
||||
|
||||
SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "codepdfprinter.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QCommandLineParser>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
|
||||
QCommandLineParser parser;
|
||||
parser.addHelpOption();
|
||||
parser.addPositionalArgument(QStringLiteral("source"), QStringLiteral("The source file to print."));
|
||||
parser.addPositionalArgument(QStringLiteral("pdf"), QStringLiteral("The PDF file to print to."));
|
||||
parser.process(app);
|
||||
|
||||
if (parser.positionalArguments().size() < 2) {
|
||||
parser.showHelp();
|
||||
}
|
||||
|
||||
CodePdfPrinter printer;
|
||||
if (printer.openSourceFile(parser.positionalArguments().at(0))) {
|
||||
printer.printPdfFile(parser.positionalArguments().at(1));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user