Hello community,
here is the log from the commit of package boomaga for openSUSE:Factory checked in at 2018-04-06 17:47:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/boomaga (Old)
and /work/SRC/openSUSE:Factory/.boomaga.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "boomaga"
Fri Apr 6 17:47:46 2018 rev:6 rq:593835 version:1.2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/boomaga/boomaga.changes 2018-01-09 14:52:59.788355549 +0100
+++ /work/SRC/openSUSE:Factory/.boomaga.new/boomaga.changes 2018-04-06 17:47:59.802849885 +0200
@@ -1,0 +2,11 @@
+Thu Apr 5 13:28:14 UTC 2018 - lazy.kent@opensuse.org
+
+- Update to 1.2.0.
+ * Fix: The program shows empty page if page contents is a link to
+ the array.
+ * Fix In some cases, the program chose an incorrect value of the
+ DISPLAY variable.
+ * Fix: More accurate handling of comments in the file.
+ * Updated translations.
+
+-------------------------------------------------------------------
Old:
----
boomaga-1.1.0.tar.gz
New:
----
boomaga-1.2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ boomaga.spec ++++++
--- /var/tmp/diff_new_pack.NMVZLd/_old 2018-04-06 17:48:00.702817355 +0200
+++ /var/tmp/diff_new_pack.NMVZLd/_new 2018-04-06 17:48:00.702817355 +0200
@@ -17,12 +17,12 @@
Name: boomaga
-Version: 1.1.0
+Version: 1.2.0
Release: 0
Summary: Virtual Printer for Viewing a Document before Printing
-License: GPL-2.0 and LGPL-2.1+
+License: GPL-2.0-only AND LGPL-2.1-or-later
Group: Productivity/Publishing/Other
-Url: http://boomaga.github.io/
+URL: http://boomaga.github.io/
Source0: https://github.com/Boomaga/%{name}/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
BuildRequires: cmake
# SLE12 needs special BuildRequires.
++++++ boomaga-1.1.0.tar.gz -> boomaga-1.2.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/CMakeLists.txt new/boomaga-1.2.0/CMakeLists.txt
--- old/boomaga-1.1.0/CMakeLists.txt 2017-12-19 15:00:32.000000000 +0100
+++ new/boomaga-1.2.0/CMakeLists.txt 2018-02-14 12:39:53.000000000 +0100
@@ -29,7 +29,7 @@
project(boomaga)
set(MAJOR_VERSION 1)
-set(MINOR_VERSION 1)
+set(MINOR_VERSION 2)
set(PATCH_VERSION 0)
set(FULL_VERSION ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/cups/envinfo.cpp new/boomaga-1.2.0/cups/envinfo.cpp
--- old/boomaga-1.1.0/cups/envinfo.cpp 2017-12-19 15:00:32.000000000 +0100
+++ new/boomaga-1.2.0/cups/envinfo.cpp 2018-02-14 12:39:53.000000000 +0100
@@ -45,7 +45,7 @@
"lxsession" << \
"Xfce4-session"
-#define ENV_VARS \
+#define READ_ENV_VARS \
"DISPLAY" << \
"DBUS_SESSION_BUS_ADDRESS" << \
"XDG_CACHE_HOME" << \
@@ -54,6 +54,13 @@
"GTK_RC_FILES" << \
"GTK2_RC_FILES"
+#define WRITE_ENV_VARS \
+ "XDG_CACHE_HOME" << \
+ "KDE_FULL_SESSION" << \
+ "QT_PLUGIN_PATH" << \
+ "GTK_RC_FILES" << \
+ "GTK2_RC_FILES"
+
#ifdef Q_OS_FREEBSD
/************************************************
@@ -172,7 +179,7 @@
setEnv("BOOMAGA_PROC_FILE", file.fileName());
QStringList extEnv;
- extEnv << ENV_VARS;
+ extEnv << READ_ENV_VARS;
foreach (QString name, extEnv)
{
@@ -267,12 +274,14 @@
if (!file.open(QFile::WriteOnly | QFile::Truncate))
return false;
- QHashIterator it(mData);
- while (it.hasNext())
+ QStringList extEnv;
+ extEnv << WRITE_ENV_VARS;
+
+ foreach (QString name, extEnv)
{
- it.next();
- file.write(QString("%1=%2\n").arg(it.key(), it.value()).toLocal8Bit());
+ file.write(QString("%1=%2\n").arg(name, mData.value(name, "")).toLocal8Bit());
}
+
file.close();
return true;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/gui/pdfmerger/pdfprocessor.cpp new/boomaga-1.2.0/gui/pdfmerger/pdfprocessor.cpp
--- old/boomaga-1.1.0/gui/pdfmerger/pdfprocessor.cpp 2017-12-19 15:00:32.000000000 +0100
+++ new/boomaga-1.2.0/gui/pdfmerger/pdfprocessor.cpp 2018-02-14 12:39:53.000000000 +0100
@@ -265,14 +265,24 @@
if (pageDict.contains("LastModified")) dict.insert("LastModified", pageDict.value("LastModified"));
if (pageDict.contains("StructParents")) dict.insert("StructParents", pageDict.value("StructParents"));
- const PDF::Value &v = pageDict.value("Contents");
+ PDF::Value v = pageDict.value("Contents");
+ PDF::Object content;
bool ok;
// Page content is Link .....................
- const PDF::Link &link = v.asLink(&ok);
- if (ok)
+ while (v.isLink())
+ {
+ const PDF::Link &link = v.asLink(&ok);
+ if (!ok)
+ throw QString("Page %1 %2 has incorrect content type.").arg(page.objNum()).arg(page.genNum());
+
+ content = mReader.getObject(link);
+ v = content.value();
+ }
+
+ // Page content is Dict (stream) ............
+ if (v.isDict())
{
- const PDF::Object &content = mReader.getObject(link);
xObj.setStream(content.stream());
if (content.dict().contains("Filter"))
dict.insert("Filter", content.dict().value("Filter"));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/gui/pdfparser/pdfobject.cpp new/boomaga-1.2.0/gui/pdfparser/pdfobject.cpp
--- old/boomaga-1.1.0/gui/pdfparser/pdfobject.cpp 2017-12-19 15:00:32.000000000 +0100
+++ new/boomaga-1.2.0/gui/pdfparser/pdfobject.cpp 2018-02-14 12:39:53.000000000 +0100
@@ -221,7 +221,9 @@
Object::Object(ObjNum objNum, GenNum genNum, const Value &value):
mObjNum(objNum),
mGenNum(genNum),
- mValue(value)
+ mValue(value),
+ mPos(0),
+ mLen(0)
{
}
@@ -233,7 +235,9 @@
mObjNum( other.mObjNum),
mGenNum( other.mGenNum),
mValue( other.mValue),
- mStream( other.mStream)
+ mStream( other.mStream),
+ mPos( other.mPos),
+ mLen( other.mLen)
{
}
@@ -247,6 +251,8 @@
mGenNum = other.mGenNum;
mValue = other.mValue;
mStream = other.mStream;
+ mPos = other.mPos;
+ mLen = other.mLen;
return *this;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/gui/pdfparser/pdfobject.h new/boomaga-1.2.0/gui/pdfparser/pdfobject.h
--- old/boomaga-1.1.0/gui/pdfparser/pdfobject.h 2017-12-19 15:00:32.000000000 +0100
+++ new/boomaga-1.2.0/gui/pdfparser/pdfobject.h 2018-02-14 12:39:53.000000000 +0100
@@ -72,6 +72,11 @@
/// identify a specialized subcategory of the general type.
QString subType() const;
+ bool isValid() const { return !mValue.isUndefined(); }
+
+ quint64 pos() const { return mPos; }
+ quint64 len() const { return mLen; }
+
private:
QByteArray streamFlateDecode(const QByteArray &source) const;
@@ -79,6 +84,8 @@
PDF::GenNum mGenNum;
Value mValue;
QByteArray mStream;
+ quint64 mPos;
+ quint64 mLen;
};
} // namespace PDF
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/gui/pdfparser/pdfreader.cpp new/boomaga-1.2.0/gui/pdfparser/pdfreader.cpp
--- old/boomaga-1.1.0/gui/pdfparser/pdfreader.cpp 2017-12-19 15:00:32.000000000 +0100
+++ new/boomaga-1.2.0/gui/pdfparser/pdfreader.cpp 2018-02-14 12:39:53.000000000 +0100
@@ -59,6 +59,7 @@
bool compareStr(quint64 pos, const char *str) const;
bool compareWord(quint64 pos, const char *str) const;
quint64 skipSpace(quint64 pos) const;
+ quint64 skipComment(quint64 pos) const;
qint64 skipCRLF(quint64 pos) const;
qint64 indexOf(const char *str, quint64 from) const;
qint64 indexOfBack(const char *str, quint64 from) const;
@@ -259,8 +260,28 @@
************************************************/
quint64 ReaderData::skipSpace(quint64 pos) const
{
- while (pos < mSize && isspace(mData[pos]))
- pos++;
+ while (pos < mSize)
+ {
+ while (pos < mSize && isspace(mData[pos]))
+ pos++;
+
+ if (mData[pos] != '%')
+ return pos;
+
+ pos = skipComment(pos);
+ }
+
+ return pos;
+}
+
+
+/************************************************
+ *
+ ************************************************/
+quint64 ReaderData::skipComment(quint64 pos) const
+{
+ while (pos < mSize && mData[pos] != '\n' && mData[pos] != '\r')
+ ++pos;
return pos;
}
@@ -889,8 +910,7 @@
************************************************/
Reader::~Reader()
{
- if (mFile && mData)
- mFile->unmap(const_cast(reinterpret_cast(mData)));
+ close();
delete mFile;
}
@@ -954,6 +974,10 @@
pos += strlen("endstream");
}
+ pos = data.skipSpace(pos);
+ pos += strlen("endobj");
+ res->mPos = start;
+ res->mLen = pos - start;
return pos;
}
@@ -1147,6 +1171,15 @@
/************************************************
*
************************************************/
+Object Reader::getObject(const XRefEntry &xrefEntry) const
+{
+ return getObject(xrefEntry.objNum(), xrefEntry.genNum());
+}
+
+
+/************************************************
+ *
+ ************************************************/
const Value Reader::find(const QString &path) const
{
QStringList objects = path.split('/', QString::SkipEmptyParts);
@@ -1178,6 +1211,15 @@
/************************************************
*
************************************************/
+QByteArray Reader::rawData(quint64 pos, quint64 len) const
+{
+ return QByteArray::fromRawData(mData + pos, len);
+}
+
+
+/************************************************
+ *
+ ************************************************/
void Reader::open(const QString &fileName, quint64 startPos, quint64 endPos)
{
mFile = new QFile(fileName);
@@ -1215,8 +1257,22 @@
/************************************************
*
************************************************/
+void Reader::close()
+{
+ if (mFile && mData)
+ mFile->unmap(const_cast(reinterpret_cast(mData)));
+ mData = nullptr;
+ mSize = 0;
+}
+
+
+/************************************************
+ *
+ ************************************************/
void Reader::load()
{
+ mXRefTable.clear();
+ mTrailerDict.clear();
ReaderData data(mData, mSize, mTextCodec);
// Check header ...................................
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/gui/pdfparser/pdfreader.h new/boomaga-1.2.0/gui/pdfparser/pdfreader.h
--- old/boomaga-1.1.0/gui/pdfparser/pdfreader.h 2017-12-19 15:00:32.000000000 +0100
+++ new/boomaga-1.2.0/gui/pdfparser/pdfreader.h 2018-02-14 12:39:53.000000000 +0100
@@ -72,31 +72,41 @@
/// Constructs a Reader object.
Reader();
- ///Destroys the object and frees its resources.
+ ///Destroys the object and frees its resources, closing it if necessary.
virtual ~Reader();
/// Reads PDF document from the existing file, starting at position startPos until endPos.
/// If endPos is 0 (the default), Reader reads all bytes starting at position startPos
/// until the end of the file. If the fileName has no path or a relative path, the path
/// used will be the application's current directory path at the time of the open() call.
- void open(const QString &fileName, quint64 startPos, quint64 endPos);
+ void open(const QString &fileName, quint64 startPos = 0, quint64 endPos = 0);
/// Reads PDF document from first size bytes of the data.
/// The bytes are not copied. The Reader will contain the data pointer. The caller
/// guarantees that data will not be deleted or modified as long as this Reader exist.
void open(const char * const data, quint64 size);
- const XRefTable &xRefTable() { return mXRefTable; }
+ /// Closes this reader for reading.
+ void close();
+
+ const XRefTable &xRefTable() const { return mXRefTable; }
const Dict &trailerDict() const { return mTrailerDict; }
Dict trailerDict() { return mTrailerDict; }
Object getObject(const Link &link) const;
Object getObject(uint objNum, quint16 genNum) const;
+ Object getObject(const XRefEntry &xrefEntry) const;
const Value find(const QString &path) const;
quint32 pageCount();
+ /// Constructs a QByteArray that uses len bytes from the data,
+ /// starting at position pos. The bytes are not copied.
+ /// The caller guarantees that reader will not be closed as long
+ /// as this QByteArray and any copies of it exist.
+ QByteArray rawData(quint64 pos, quint64 len) const;
+
protected:
void load();
Value readValue(quint64 *pos) const;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/gui/pdfparser/pdfvalue.cpp new/boomaga-1.2.0/gui/pdfparser/pdfvalue.cpp
--- old/boomaga-1.1.0/gui/pdfparser/pdfvalue.cpp 2017-12-19 15:00:32.000000000 +0100
+++ new/boomaga-1.2.0/gui/pdfparser/pdfvalue.cpp 2018-02-14 12:39:53.000000000 +0100
@@ -477,6 +477,15 @@
/************************************************
*
************************************************/
+void PDF::Dict::clear()
+{
+ values().clear();
+}
+
+
+/************************************************
+ *
+ ************************************************/
QMap Dict::values()
{
assert(mType == Type::Dict);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/gui/pdfparser/pdfvalue.h new/boomaga-1.2.0/gui/pdfparser/pdfvalue.h
--- old/boomaga-1.1.0/gui/pdfparser/pdfvalue.h 2017-12-19 15:00:32.000000000 +0100
+++ new/boomaga-1.2.0/gui/pdfparser/pdfvalue.h 2018-02-14 12:39:53.000000000 +0100
@@ -294,6 +294,9 @@
{
};
+ /// Removes all items from the dictionary.
+ void clear();
+
/// Returns the value associated with the key key.
/// If the dictionary contains no item with key key, the function returns defaultValue.
/// If no defaultValue is specified, the function returns a Value with type Undefined.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/gui/translations/boomaga_uk_UA.desktop new/boomaga-1.2.0/gui/translations/boomaga_uk_UA.desktop
--- old/boomaga-1.1.0/gui/translations/boomaga_uk_UA.desktop 1970-01-01 01:00:00.000000000 +0100
+++ new/boomaga-1.2.0/gui/translations/boomaga_uk_UA.desktop 2018-02-14 12:39:53.000000000 +0100
@@ -0,0 +1,20 @@
+[Desktop Entry]
+Exec=boomaga %U
+Icon=boomaga
+Terminal=false
+Type=Application
+StartupNotify=true
+Categories=Qt;Office;
+MimeType=application/x-boomaga-boo;
+
+Name=Boomaga
+GenericName=Virtual printer
+Comment=Virtual printer for viewing and editing a document before printing.
+
+
+
+# Translations
+Comment[uk_UA]=Віртуальний принтер, який дає змогу переглянути і відредагувати документ перед друком.
+GenericName[uk_UA]=Віртуальний принтер
+Name[uk_UA]=Boomaga
+Icon[uk_UA]=boomaga
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/gui/translations/boomaga_uk_UA.ts new/boomaga-1.2.0/gui/translations/boomaga_uk_UA.ts
--- old/boomaga-1.1.0/gui/translations/boomaga_uk_UA.ts 1970-01-01 01:00:00.000000000 +0100
+++ new/boomaga-1.2.0/gui/translations/boomaga_uk_UA.ts 2018-02-14 12:39:53.000000000 +0100
@@ -0,0 +1,737 @@
+<?xml version="1.0" ?><!DOCTYPE TS><TS language="uk_UA" version="2.1">
+<context>
+ <name>AboutDialog</name>
+ <message>
+ <source> About Boomaga</source>
+ <translation>Про програму</translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation>Про</translation>
+ </message>
+ <message>
+ <source>Authors</source>
+ <translation>Автори</translation>
+ </message>
+ <message>
+ <source>Thanks</source>
+ <translation>Подяки</translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation>Переклади</translation>
+ </message>
+ <message>
+ <source>Version: %1</source>
+ <translation>Версія: %1</translation>
+ </message>
+ <message>
+ <source>Boomaga provides a virtual printer for CUPS. This can be used for print preview or for print booklets.</source>
+ <translation>Boomaga надає віртуальний притрер для CUPS, який може бути використаний для попереднього перегляду або друку книг. </translation>
+ </message>
+ <message>
+ <source>Copyright: %1-%2 %3</source>
+ <translation>Авторські права: %1-%2-%3</translation>
+ </message>
+ <message>
+ <source>Homepage: %1</source>
+ <translation>Домашня сторінка: %1</translation>
+ </message>
+ <message>
+ <source>License: %1</source>
+ <translation>Ліцензія: %1</translation>
+ </message>
+ <message>
+ <source>If you are interested in working with our development team, <a %1>join us</a>.</source>
+ <translation>Хочете працювати з нашою командою розробників - <a %1>приєднуйтесь</a>.</translation>
+ </message>
+ <message>
+ <source>Special thanks to:</source>
+ <translation>Окрема подяка: </translation>
+ </message>
+ <message>
+ <source>If you want to help translate, we will be glad to see you in our translation team on <a %1>Transifex server</a>.</source>
+ <translation> Якщо ви хочете допомогти з перекладом, ми будемо раді бачити вас в нашій команді перекладачів на сервері <a %1>Transifex</a>.</translation>
+ </message>
+ <message>
+ <source>Boomaga is developed by the <a %1>Boomaga Team and contributors</a> on GitHub.</source>
+ <translation>Boomaga розробляється <a %1>Командою розробників Boomaga та сторонніми учасниками</a> на GitHub.</translation>
+ </message>
+</context>
+<context>
+ <name>ConfigDialog</name>
+ <message>
+ <source>Preferences</source>
+ <translation>Налаштування</translation>
+ </message>
+ <message>
+ <source>Divide your long booklets into smaller sub-booklets for printing.</source>
+ <translation>Розділяти під час друку велику книгу на невеликі зошити.</translation>
+ </message>
+ <message>
+ <source>Print as sub-booklets</source>
+ <translation>Друкувати з розбивкою на зошити</translation>
+ </message>
+ <message>
+ <source>Maximum number of sheets in your sub-booklet.</source>
+ <translation>Максимальна кількість листів у зошиті.</translation>
+ </message>
+ <message>
+ <source>Sheets per sub-booklet:</source>
+ <translation>Листів у зошиті:</translation>
+ </message>
+ <message>
+ <source>Autosave your jobs every time you print.</source>
+ <translation>Автоматично зберігати завдання після друку.</translation>
+ </message>
+ <message>
+ <source>AutoSave the recent sessions</source>
+ <translation>Автоматично зберігати сесії</translation>
+ </message>
+ <message>
+ <source>Allow negative page margins:</source>
+ <translation>Дозволяти від'ємні поля</translation>
+ </message>
+ <message>
+ <source>Select directory for saved jobs.</source>
+ <translation>Виберіть директорію для збереження завдань.</translation>
+ </message>
+ <message>
+ <source>Directory for saved sessions:</source>
+ <translation>Директорія для збережених сесій:</translation>
+ </message>
+</context>
+<context>
+ <name>ExportToPdf</name>
+ <message>
+ <source>Print to PDF</source>
+ <translation>Друк у PDF</translation>
+ </message>
+ <message>
+ <source>File name</source>
+ <translation>Вихідний файл</translation>
+ </message>
+ <message>
+ <source>Output file:</source>
+ <translation>Назва:</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Meta info</source>
+ <translation>Метадані</translation>
+ </message>
+ <message>
+ <source>Author:</source>
+ <translation>Автор:</translation>
+ </message>
+ <message>
+ <source> The name of the person who created the document.</source>
+ <translation>Ім'я особи, що створила цей документ.</translation>
+ </message>
+ <message>
+ <source>Title:</source>
+ <translation>Заголовок:</translation>
+ </message>
+ <message>
+ <source>Subject:</source>
+ <translation>Тема:</translation>
+ </message>
+ <message>
+ <source> The subject of the document.</source>
+ <translation>Тема документа.</translation>
+ </message>
+ <message>
+ <source> Keywords associated with the document.</source>
+ <translation>Ключові слова, пов'язані зі змістом документа</translation>
+ </message>
+ <message>
+ <source>Keywords:</source>
+ <translation>Ключові слова:</translation>
+ </message>
+ <message>
+ <source>PDF files (*.pdf);;All files (*.*)</source>
+ <translation>PDF-файли (*.pdf);;Усі файли (*.*)</translation>
+ </message>
+ <message>
+ <source>Overwrite file?</source>
+ <translation>Перезаписати файл?</translation>
+ </message>
+ <message>
+ <source>A file named "%1" already exists.
+Are you sure you want to overwrite it?</source>
+ <translation>Файл з іменем "%1" вже існує.
+Ви впевпевні, що хочете переписати його?</translation>
+ </message>
+ <message>
+ <source> The document's title.</source>
+ <translation>Заголовок документа.</translation>
+ </message>
+</context>
+<context>
+ <name>JobListView</name>
+ <message>
+ <source>%1 pages</source>
+ <translation>%1 сторінок</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>&File</source>
+ <translation>&Файл</translation>
+ </message>
+ <message>
+ <source>&Preferences</source>
+ <translation>&Налаштування</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Допомога</translation>
+ </message>
+ <message>
+ <source>Layout</source>
+ <translation>Розташування</translation>
+ </message>
+ <message>
+ <source>1 up</source>
+ <translation>1 сторінка на аркуш</translation>
+ </message>
+ <message>
+ <source>2 up</source>
+ <translation>2 сторінки на аркуш</translation>
+ </message>
+ <message>
+ <source>Booklet</source>
+ <translation>Книгою</translation>
+ </message>
+ <message>
+ <source>Print on both sides of a sheet.</source>
+ <comment>MainForm::Double-sided checkbox tooltip</comment>
+ <translation>Двосторонній друк</translation>
+ </message>
+ <message>
+ <source>Double-sided</source>
+ <comment>MainForm::Double-sided checkbox</comment>
+ <translation>Двосторонній</translation>
+ </message>
+ <message>
+ <source>Jobs</source>
+ <translation>Завдання</translation>
+ </message>
+ <message>
+ <source>Printer</source>
+ <translation>Принтер</translation>
+ </message>
+ <message>
+ <source>Configure...</source>
+ <translation>Налаштувати...</translation>
+ </message>
+ <message>
+ <source>Toolbar</source>
+ <translation>Панель інструментів</translation>
+ </message>
+ <message>
+ <source>&Print</source>
+ <translation>&Друк</translation>
+ </message>
+ <message>
+ <source>E&xit</source>
+ <translation>Ви&хід</translation>
+ </message>
+ <message>
+ <source>Print and Close</source>
+ <translation>Друк і вихід</translation>
+ </message>
+ <message>
+ <source>Ctrl+P</source>
+ <translation>Ctrl+P</translation>
+ </message>
+ <message>
+ <source>Next sheet</source>
+ <translation>Наступний</translation>
+ </message>
+ <message>
+ <source>Previous sheet</source>
+ <translation>Попередній</translation>
+ </message>
+ <message>
+ <source>About Boomaga</source>
+ <translation>Про програму</translation>
+ </message>
+ <message>
+ <source>Boomaga</source>
+ <translation>Boomaga</translation>
+ </message>
+ <message>
+ <source>%v of %m</source>
+ <comment>Format for QProgressBar (http://qt-project.org/doc/qt-4.8/qprogressbar.html#format-prop)</comment>
+ <translation>%v з %m</translation>
+ </message>
+ <message>
+ <source>Print the all pages on %1.</source>
+ <translation>Друкуються усі сторінки на %1</translation>
+ </message>
+ <message>
+ <source>Print the odd pages on %1.<p>When finished, turn the pages, insert them into the printer<br>and click the Continue button.</source>
+ <translation>Друкуються непарні сторінки на %1.<p>Після закінчення перегорніть стос паперу, вставте його в принтер<br> і натисніть кнопку "Продовжити".</translation>
+ </message>
+ <message>
+ <source>Print the even pages on %1.</source>
+ <translation>Друкуються парні сторінки на %1.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Продовжити</translation>
+ </message>
+ <message>
+ <source>%1 pages</source>
+ <comment>Status bar</comment>
+ <translation>%1 сторінок</translation>
+ </message>
+ <message>
+ <source>%1 page</source>
+ <comment>Status bar</comment>
+ <translation>%1 сторінка</translation>
+ </message>
+ <message>
+ <source>%1 sheets</source>
+ <comment>Status bar</comment>
+ <translation>%1 аркуш.</translation>
+ </message>
+ <message>
+ <source>%1 sheet</source>
+ <comment>Status bar</comment>
+ <translation>%1 аркуш</translation>
+ </message>
+ <message>
+ <source>Sheet %1 of %2</source>
+ <comment>Status bar</comment>
+ <translation>Акруш %1 з %2</translation>
+ </message>
+ <message>
+ <source>Insert blank page after this page</source>
+ <translation>Вставити порожню сторінку після цієї</translation>
+ </message>
+ <message>
+ <source>Delete this page</source>
+ <translation>Видалити цю сторінку</translation>
+ </message>
+ <message>
+ <source>Undo delete</source>
+ <translation>Відмінити видалення</translation>
+ </message>
+ <message>
+ <source>Insert blank page before this page</source>
+ <translation>Вставити порошню сторінку перед цією</translation>
+ </message>
+ <message>
+ <source>Save</source>
+ <translation>Зберегти</translation>
+ </message>
+ <message>
+ <source>Save project</source>
+ <translation>Зберегти проект</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Save as...</source>
+ <translation>Зберегти як...</translation>
+ </message>
+ <message>
+ <source>Save project under a new name</source>
+ <translation>Зберегти проект з новою назвою</translation>
+ </message>
+ <message>
+ <source>Ctrl+Shift+S</source>
+ <translation>Ctrl+Shift+S</translation>
+ </message>
+ <message>
+ <source>Open...</source>
+ <translation>Відкрити...</translation>
+ </message>
+ <message>
+ <source>Open an existing project</source>
+ <translation>Відкрити існуючий проект</translation>
+ </message>
+ <message>
+ <source>Ctrl+O</source>
+ <translation>Ctrl+O</translation>
+ </message>
+ <message>
+ <source>Page %1</source>
+ <comment>'Undo deletion' menu item</comment>
+ <translation>Сторінка %1</translation>
+ </message>
+ <message>
+ <source>Boomaga files (*.boo);;All files (*.*)</source>
+ <translation>Файли Boomaga(*.boo);;Усі файли (*.*)</translation>
+ </message>
+ <message>
+ <source>Project saved successfully.</source>
+ <translation>Проект збережено.</translation>
+ </message>
+ <message>
+ <source>All supported files (*.pdf *.boo);;Boomaga files (*.boo);;PDF files (*.pdf);;All files (*.*)</source>
+ <translation>Усі підтримувані файли (*.pdf *.boo);;Проект Boomaga (*.boo);;Документ PDF (*.pdf);;Усі файли (*.*)</translation>
+ </message>
+ <message>
+ <source>4 up horizontal</source>
+ <translation>4 стор. на аркуші горизонтально</translation>
+ </message>
+ <message>
+ <source>4 up vertical</source>
+ <translation>4 стор. на аркуші вертикально</translation>
+ </message>
+ <message>
+ <source>8 up horizontal</source>
+ <translation>8 стор. на аркуші горизонтально</translation>
+ </message>
+ <message>
+ <source>8 up vertical</source>
+ <translation>8 стор. на аркуші вертикально</translation>
+ </message>
+ <message>
+ <source>Start new booklet from this page</source>
+ <translation>Почати новий зошит з цієї сторінки</translation>
+ </message>
+ <message>
+ <source>Don't start new booklet from this page</source>
+ <translation>Не починати новий зошит з цієї сторінки</translation>
+ </message>
+ <message>
+ <source>Rotate page to the left</source>
+ <translation>Повернути сторінку проти годинникової стрілки</translation>
+ </message>
+ <message>
+ <source>Rotate page to the right</source>
+ <translation>Повернути сторінку за годинниковою стрілкою</translation>
+ </message>
+ <message>
+ <source>Rename job</source>
+ <translation>Перейменувати завдання</translation>
+ </message>
+ <message>
+ <source>Rotate job to the left</source>
+ <translation>Повернути завдання проти годинникової стрілки</translation>
+ </message>
+ <message>
+ <source>Rotate job to the right</source>
+ <translation>Повернути завдання за годинниковою стрілкою</translation>
+ </message>
+ <message>
+ <source>Job title:</source>
+ <translation>Назва завдання:</translation>
+ </message>
+ <message>
+ <source>Export the project to PDF</source>
+ <translation>Експортувати проект у PDF</translation>
+ </message>
+ <message>
+ <source>Ctrl+E</source>
+ <translation>Ctrl+E</translation>
+ </message>
+ <message>
+ <source>Clone job...</source>
+ <translation>Клонувати завдання...</translation>
+ </message>
+ <message>
+ <source>Clone job</source>
+ <translation>Клонування завдання</translation>
+ </message>
+ <message>
+ <source>Number of copies:</source>
+ <translation>Кількість копій</translation>
+ </message>
+ <message>
+ <source>Print with options...</source>
+ <translation>Друк з заданням налаштувань...</translation>
+ </message>
+ <message>
+ <source>Select number of copies before printing.</source>
+ <translation>Вибір кількості копій до друку.</translation>
+ </message>
+ <message>
+ <source>Ctrl+Shift+P</source>
+ <translation>Ctrl+Shift+P</translation>
+ </message>
+ <message>
+ <source>Sub-booklets</source>
+ <translation>Зошити</translation>
+ </message>
+ <message>
+ <source>Undo delete page</source>
+ <translation>Відмінити видалення сторінок</translation>
+ </message>
+ <message>
+ <source>Page %1 of %2</source>
+ <comment>Status bar</comment>
+ <translation>Стор. %1 з %2</translation>
+ </message>
+ <message>
+ <source>Recent files</source>
+ <translation>Останні файли</translation>
+ </message>
+ <message>
+ <source>&Edit page</source>
+ <translation>Редагування &сторінки</translation>
+ </message>
+ <message>
+ <source>Edit &job</source>
+ <translation>Редагування &завдання</translation>
+ </message>
+ <message>
+ <source>&Export to PDF...</source>
+ <translation>&Експорт у PDF...</translation>
+ </message>
+ <message>
+ <source>Delete pages until the end of the job</source>
+ <translation>Видалити сторінки до кінця завдання.</translation>
+ </message>
+ <message>
+ <source>Delete current job</source>
+ <translation>Видалити поточне завдання</translation>
+ </message>
+ <message>
+ <source>Auto saving</source>
+ <translation>Авто збереження</translation>
+ </message>
+ <message>
+ <source>I can't create directory "%1"</source>
+ <translation>Не вдалося створити директорію %1</translation>
+ </message>
+ <message>
+ <source>%1 %2: Page %3</source>
+ <comment>'Undo deletion' menu item, (%1 - is a job number, %2 - is a job title, %3 - is a page number in this job</comment>
+ <translation>%1 %2: сторінка %3</translation>
+ </message>
+</context>
+<context>
+ <name>PdfMerger</name>
+ <message>
+ <source>I can't write file "%1"</source>
+ <translation>Не вдалося записати файл: "%1"</translation>
+ </message>
+</context>
+<context>
+ <name>PrintDialog</name>
+ <message>
+ <source>Print document</source>
+ <translation>Друк документа</translation>
+ </message>
+ <message>
+ <source>Number of copies:</source>
+ <translation>Кількість копій:</translation>
+ </message>
+ <message>
+ <source>Collate copies:</source>
+ <translation>Розібрати за копіями:</translation>
+ </message>
+</context>
+<context>
+ <name>PrinterSettings</name>
+ <message>
+ <source>Margins (mm)</source>
+ <translation>Поля (мм)</translation>
+ </message>
+ <message>
+ <source>Right:</source>
+ <translation>Праве:</translation>
+ </message>
+ <message>
+ <source>Bottom:</source>
+ <translation>Нижнє:</translation>
+ </message>
+ <message>
+ <source>Internal:</source>
+ <translation>Внутрішнє:</translation>
+ </message>
+ <message>
+ <source>Left:</source>
+ <translation>Ліве:</translation>
+ </message>
+ <message>
+ <source>Top:</source>
+ <translation>Верхнє:</translation>
+ </message>
+ <message>
+ <source>Draw border</source>
+ <translation>Друкувати рамку</translation>
+ </message>
+ <message>
+ <source>Print in reverse order</source>
+ <translation>Друкувати в зворотньому порядку</translation>
+ </message>
+ <message>
+ <source>Printer has duplexer</source>
+ <translation>Дуплексний принтер</translation>
+ </message>
+ <message>
+ <source>Manual with reverse (suitable for most printers)</source>
+ <translation>Вручну зі зміною порядку (більшість принтерів)</translation>
+ </message>
+ <message>
+ <source>Manual without reverse</source>
+ <translation>Вручну без зміни порядку</translation>
+ </message>
+ <message>
+ <source>Preferences of "%1"</source>
+ <translation>Налаштування %1</translation>
+ </message>
+ <message>
+ <source>Profiles</source>
+ <translation>Профілі</translation>
+ </message>
+ <message>
+ <source>+</source>
+ <translation>+</translation>
+ </message>
+ <message>
+ <source>-</source>
+ <translation>-</translation>
+ </message>
+ <message>
+ <source>Reset to default</source>
+ <translation>Скинути</translation>
+ </message>
+ <message>
+ <source>Profile %1</source>
+ <comment>Defaul name for created printer profile in the Printer Settings diaog</comment>
+ <translation>Профіль: %1</translation>
+ </message>
+ <message>
+ <source>Color mode:</source>
+ <translation>Режим кольору:</translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <translation>За замовчуванням</translation>
+ </message>
+ <message>
+ <source>Force grayscale</source>
+ <translation>Чорно-білий друк</translation>
+ </message>
+ <message>
+ <source>Force color</source>
+ <translation>Кольоровий друк</translation>
+ </message>
+ <message>
+ <source>Settings</source>
+ <translation>Налаштування</translation>
+ </message>
+ <message>
+ <source>Print on both sides</source>
+ <translation>Двосторонній друк</translation>
+ </message>
+ <message>
+ <source>Flip on short edge</source>
+ <translation>Оправа по короткій стороні</translation>
+ </message>
+ <message>
+ <source>Flip on long edge</source>
+ <translation>Оправа по довгій стороні</translation>
+ </message>
+</context>
+<context>
+ <name>Project</name>
+ <message>
+ <source>Boomaga</source>
+ <comment>Error message title</comment>
+ <translation>Boomaga</translation>
+ </message>
+ <message>
+ <source>I can't write to file '%1'</source>
+ <translation>Не вдалос записати файл: "%1"</translation>
+ </message>
+ <message>
+ <source>I can't open file "%1" (No such file or directory)</source>
+ <translation>Не вдалося відкрити файл: "%1" (Немає такого файлу)</translation>
+ </message>
+ <message>
+ <source>I can't open file "%1" (Access denied)</source>
+ <translation>Не вдалося відкрити файл: "%1" (Немає прав доступу)</translation>
+ </message>
+ <message>
+ <source>I can't open file "%1"</source>
+ <translation>Не вдалося відкрити файл: "%1"</translation>
+ </message>
+ <message>
+ <source>I can't read file "%1" either because it's not a supported file type, or because the file has been damaged.</source>
+ <translation>Не вдалося прочитати файл: "%1", файл зіпсовано або файли такого типу не підтримуються.</translation>
+ </message>
+</context>
+<context>
+ <name>ProjectFile</name>
+ <message>
+ <source>I can't open file "%1"</source>
+ <translation>Не вдалося відкрити файл: "%1"</translation>
+ </message>
+ <message>
+ <source>I can't write to file '%1'</source>
+ <translation>Не вдалося записати файл: "%1"</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>I can't read from file '%1'</source>
+ <translation>Не вдалося прочитати файл: "%1"</translation>
+ </message>
+ <message>
+ <source>I can't write to file '%1'</source>
+ <translation>Не вдалося записати файл: "%1"</translation>
+ </message>
+ <message>
+ <source>Untitled</source>
+ <translation>Без назви</translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <comment>Printer profile default name</comment>
+ <translation>За замовчуванням</translation>
+ </message>
+</context>
+<context>
+ <name>Settings</name>
+ <message>
+ <source>~/Untitled.pdf</source>
+ <translation>~/Без_назви.pdf</translation>
+ </message>
+</context>
+<context>
+ <name>SubBookletView</name>
+ <message>
+ <source>Sub-booklet %1</source>
+ <translation>Зошит %1</translation>
+ </message>
+ <message>
+ <source>%1 pages</source>
+ <translation>%1 сторінок</translation>
+ </message>
+</context>
+<context>
+ <name>TmpPdfFile</name>
+ <message>
+ <source>I can't create temporary file "%1"</source>
+ <translation>Не вдалося створити тимчасовий файл: "%1"</translation>
+ </message>
+ <message>
+ <source>Something is wrong. I can't find boomagamerger program.
+Please reinstall me.</source>
+ <translation>Невдача знову спіткала українських спортсменів... Не вдалося знати програму boomagameter. Спробуйте перевстановити мене.</translation>
+ </message>
+ <message>
+ <source>I can't read file '%1'</source>
+ <translation>Не вдалося прочитати файл: "%1"</translation>
+ </message>
+ <message>
+ <source>I can't write to file '%1'</source>
+ <translation>Не вдалося записати файл: "%1"</translation>
+ </message>
+</context>
+</TS>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/gui/translations/translatorsinfo/translators_uk_UA.info new/boomaga-1.2.0/gui/translations/translatorsinfo/translators_uk_UA.info
--- old/boomaga-1.1.0/gui/translations/translatorsinfo/translators_uk_UA.info 1970-01-01 01:00:00.000000000 +0100
+++ new/boomaga-1.2.0/gui/translations/translatorsinfo/translators_uk_UA.info 2018-02-14 12:39:53.000000000 +0100
@@ -0,0 +1,42 @@
+_help = --
+
+
+translator_1_nameEnglish = Mykhailo Lytvyn
+translator_1_nameNative = Михайло Литвин
+translator_1_contact = lytvyn.at
+
+translator_2_nameEnglish =
+translator_2_nameNative =
+translator_2_contact = --
+
+translator_3_nameEnglish = --
+translator_3_nameNative = --
+translator_3_contact = --
+
+translator_4_nameEnglish = --
+translator_4_nameNative = --
+translator_4_contact = --
+
+translator_5_nameEnglish = --
+translator_5_nameNative = --
+translator_5_contact = --
+
+translator_6_nameEnglish = --
+translator_6_nameNative = --
+translator_6_contact = --
+
+translator_7_nameEnglish = --
+translator_7_nameNative = --
+translator_7_contact = --
+
+translator_8_nameEnglish = --
+translator_8_nameNative = --
+translator_8_contact = --
+
+translator_9_nameEnglish = --
+translator_9_nameNative = --
+translator_9_contact = --
+
+translator_10_nameEnglish = --
+translator_10_nameNative = --
+translator_10_contact = --
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/scripts/testBackend.sh new/boomaga-1.2.0/scripts/testBackend.sh
--- old/boomaga-1.1.0/scripts/testBackend.sh 1970-01-01 01:00:00.000000000 +0100
+++ new/boomaga-1.2.0/scripts/testBackend.sh 2018-02-14 12:39:53.000000000 +0100
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+FILE=$1
+
+if [ "$FILE" = "" ]; then
+ echo "Missing file operand"
+ echo ""
+ echo "Usage: testBackend.sh PDF_FILE"
+ exit 1
+fi
+
+FILE=$(readlink -e "${FILE}")
+
+
+boomagabackend=""
+
+dir=$(pwd)
+while [[ "$dir" != "/" ]]; do
+ if [ -d "${dir}/.git" ]; then
+ boomagabackend=$(find "$dir" -name "boomagabackend")
+ break
+ fi
+
+ dir=$(dirname $dir)
+ sleep 1
+done
+
+
+if [ "$boomagabackend" == "" ]; then
+ boomagabackend=$(find "/usr/local/lib" "/usr/lib" -name "boomagabackend" 2>/dev/null)
+fi
+
+if [ "$boomagabackend" == "" ]; then
+ "echo boomagabackend not found"
+fi
+
+
+echo "################"
+echo "# program - $boomagabackend"
+echo "# file - $FILE"
+echo "#"
+
+
+# <jobId> <title> <count> <options> <user>
+cat "${FILE}" | $boomagabackend 123 "title" 1 "" $USER
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/boomaga-1.1.0/scripts/testDBUS.sh new/boomaga-1.2.0/scripts/testDBUS.sh
--- old/boomaga-1.1.0/scripts/testDBUS.sh 1970-01-01 01:00:00.000000000 +0100
+++ new/boomaga-1.2.0/scripts/testDBUS.sh 2018-02-14 12:39:53.000000000 +0100
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+FILE=$1
+
+if [ "$FILE" = "" ]; then
+ echo "Missing file operand"
+ echo ""
+ echo "Usage: testDBUS.sh PDF_FILE"
+ exit 1
+fi
+
+FILE=$(readlink -e "${FILE}")
+
+###########################
+# D-Bus arguments
+#
+# string file
+# string title
+# bool autoRemove
+# string options
+# uint count
+dbus-send \
+ --session \
+ --type=method_call \
+ --print-reply \
+ --dest=org.boomaga /boomaga org.boomaga.add \
+ string:"${FILE}" \
+ string:'title' \
+ boolean:false \
+ string:'options' \
+ uint32:1
+