Editor plugin: WIP

This commit is contained in:
Jakub Melka
2024-04-20 19:41:14 +02:00
parent b481b3afcc
commit d255e27fd3
12 changed files with 454 additions and 60 deletions

View File

@ -564,9 +564,10 @@ QString PDFSystemFontInfoStorage::getFontPostscriptName(QString fontName)
return fontName.remove(QChar(' ')).remove(QChar('-')).remove(QChar(',')).trimmed();
}
PDFFont::PDFFont(CIDSystemInfo CIDSystemInfo, FontDescriptor fontDescriptor) :
PDFFont::PDFFont(CIDSystemInfo CIDSystemInfo, QByteArray fontId, FontDescriptor fontDescriptor) :
m_CIDSystemInfo(qMove(CIDSystemInfo)),
m_fontDescriptor(qMove(fontDescriptor))
m_fontDescriptor(qMove(fontDescriptor)),
m_fontId(qMove(fontId))
{
}
@ -1284,7 +1285,12 @@ CIDSystemInfo PDFFont::readCIDSystemInfo(const PDFObject& cidSystemInfoObject, c
return cidSystemInfo;
}
PDFFontPointer PDFFont::createFont(const PDFObject& object, const PDFDocument* document)
QByteArray PDFFont::getFontId() const
{
return m_fontId;
}
PDFFontPointer PDFFont::createFont(const PDFObject& object, QByteArray fontId, const PDFDocument* document)
{
const PDFObject& dereferencedFontDictionary = document->getObject(object);
if (!dereferencedFontDictionary.isDictionary())
@ -1763,7 +1769,7 @@ PDFFontPointer PDFFont::createFont(const PDFObject& object, const PDFDocument* d
toUnicodeCMap = PDFFontCMap::createFromData(decodedStream);
}
return PDFFontPointer(new PDFType0Font(qMove(cidSystemInfo), qMove(fontDescriptor), qMove(cmap), qMove(toUnicodeCMap), qMove(cidToGidMapper), defaultWidth, qMove(advances)));
return PDFFontPointer(new PDFType0Font(qMove(cidSystemInfo), qMove(fontId), qMove(fontDescriptor), qMove(cmap), qMove(toUnicodeCMap), qMove(cidToGidMapper), defaultWidth, qMove(advances)));
}
case FontType::Type3:
@ -1853,7 +1859,7 @@ PDFFontPointer PDFFont::createFont(const PDFObject& object, const PDFDocument* d
}
std::vector<PDFReal> widthsF3 = fontLoader.readNumberArrayFromDictionary(fontDictionary, "Widths");
return PDFFontPointer(new PDFType3Font(qMove(fontDescriptor), firstCharF3, lastCharF3, fontMatrix, qMove(characterContentStreams), qMove(widthsF3), document->getObject(fontDictionary->get("Resources")), qMove(toUnicodeCMap)));
return PDFFontPointer(new PDFType3Font(qMove(fontDescriptor), qMove(fontId), firstCharF3, lastCharF3, fontMatrix, qMove(characterContentStreams), qMove(widthsF3), document->getObject(fontDictionary->get("Resources")), qMove(toUnicodeCMap)));
}
default:
@ -1867,10 +1873,10 @@ PDFFontPointer PDFFont::createFont(const PDFObject& object, const PDFDocument* d
{
case FontType::Type1:
case FontType::MMType1:
return PDFFontPointer(new PDFType1Font(fontType, qMove(cidSystemInfo), qMove(fontDescriptor), qMove(name), qMove(baseFont), firstChar, lastChar, qMove(widths), encoding, simpleFontEncodingTable, standardFont, glyphIndexArray));
return PDFFontPointer(new PDFType1Font(fontType, qMove(fontId), qMove(cidSystemInfo), qMove(fontDescriptor), qMove(name), qMove(baseFont), firstChar, lastChar, qMove(widths), encoding, simpleFontEncodingTable, standardFont, glyphIndexArray));
case FontType::TrueType:
return PDFFontPointer(new PDFTrueTypeFont(qMove(cidSystemInfo), qMove(fontDescriptor), qMove(name), qMove(baseFont), firstChar, lastChar, qMove(widths), encoding, simpleFontEncodingTable, glyphIndexArray));
return PDFFontPointer(new PDFTrueTypeFont(qMove(cidSystemInfo), qMove(fontId), qMove(fontDescriptor), qMove(name), qMove(baseFont), firstChar, lastChar, qMove(widths), encoding, simpleFontEncodingTable, glyphIndexArray));
default:
{
@ -1883,6 +1889,7 @@ PDFFontPointer PDFFont::createFont(const PDFObject& object, const PDFDocument* d
}
PDFSimpleFont::PDFSimpleFont(CIDSystemInfo cidSystemInfo,
QByteArray fontId,
FontDescriptor fontDescriptor,
QByteArray name,
QByteArray baseFont,
@ -1892,7 +1899,7 @@ PDFSimpleFont::PDFSimpleFont(CIDSystemInfo cidSystemInfo,
PDFEncoding::Encoding encodingType,
encoding::EncodingTable encoding,
GlyphIndices glyphIndices) :
PDFFont(qMove(cidSystemInfo), qMove(fontDescriptor)),
PDFFont(qMove(cidSystemInfo), qMove(fontId), qMove(fontDescriptor)),
m_name(qMove(name)),
m_baseFont(qMove(baseFont)),
m_firstChar(firstChar),
@ -1976,6 +1983,7 @@ void PDFSimpleFont::dumpFontToTreeItem(ITreeFactory* treeFactory) const
}
PDFType1Font::PDFType1Font(FontType fontType,
QByteArray fontId,
CIDSystemInfo cidSystemInfo,
FontDescriptor fontDescriptor,
QByteArray name,
@ -1987,7 +1995,7 @@ PDFType1Font::PDFType1Font(FontType fontType,
encoding::EncodingTable encoding,
StandardFontType standardFontType,
GlyphIndices glyphIndices) :
PDFSimpleFont(qMove(cidSystemInfo), qMove(fontDescriptor), qMove(name), qMove(baseFont), firstChar, lastChar, qMove(widths), encodingType, encoding, glyphIndices),
PDFSimpleFont(qMove(cidSystemInfo), qMove(fontId), qMove(fontDescriptor), qMove(name), qMove(baseFont), firstChar, lastChar, qMove(widths), encodingType, encoding, glyphIndices),
m_fontType(fontType),
m_standardFontType(standardFontType)
{
@ -2068,7 +2076,7 @@ void PDFFontCache::setDocument(const PDFModifiedDocument& document)
}
}
PDFFontPointer PDFFontCache::getFont(const PDFObject& fontObject) const
PDFFontPointer PDFFontCache::getFont(const PDFObject& fontObject, const QByteArray& fontId) const
{
if (fontObject.isReference())
{
@ -2081,7 +2089,7 @@ PDFFontPointer PDFFontCache::getFont(const PDFObject& fontObject) const
if (it == m_fontCache.cend())
{
// We must create the font
PDFFontPointer font = PDFFont::createFont(fontObject, m_document);
PDFFontPointer font = PDFFont::createFont(fontObject, fontId, m_document);
if (m_fontCacheShrinkDisabledObjects.empty() && m_fontCache.size() >= m_fontCacheLimit)
{
@ -2096,7 +2104,7 @@ PDFFontPointer PDFFontCache::getFont(const PDFObject& fontObject) const
else
{
// Object is not a reference. Create font directly and return it.
return PDFFont::createFont(fontObject, m_document);
return PDFFont::createFont(fontObject, fontId, m_document);
}
}
@ -2611,6 +2619,7 @@ PDFReal PDFType0Font::getGlyphAdvance(CID cid) const
}
PDFType3Font::PDFType3Font(FontDescriptor fontDescriptor,
QByteArray fontId,
int firstCharacterIndex,
int lastCharacterIndex,
QTransform fontMatrix,
@ -2618,7 +2627,7 @@ PDFType3Font::PDFType3Font(FontDescriptor fontDescriptor,
std::vector<double>&& widths,
const PDFObject& resources,
PDFFontCMap toUnicode) :
PDFFont(CIDSystemInfo(), qMove(fontDescriptor)),
PDFFont(CIDSystemInfo(), qMove(fontId), qMove(fontDescriptor)),
m_firstCharacterIndex(firstCharacterIndex),
m_lastCharacterIndex(lastCharacterIndex),
m_fontMatrix(fontMatrix),