Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_asl_reader_utils.h File Reference
#include "psd.h"
#include "psd_utils.h"
#include <algorithm>
#include <stdexcept>
#include <string>
#include <QtEndian>
#include <kis_debug.h>

Go to the source code of this file.

Classes

struct  KisAslReaderUtils::ASLParseException
 

Namespaces

namespace  KisAslReaderUtils
 

Macros

#define GARBAGE_VALUE_MARK   999
 
#define SAFE_READ_EX(byteOrder, device, varname)
 
#define SAFE_READ_SIGNATURE_EX(byteOrder, device, varname, expected)
 

Functions

template<psd_byte_order byteOrder = psd_byte_order::psdBigEndian>
QString KisAslReaderUtils::readFixedString (QIODevice &device)
 
template<psd_byte_order byteOrder = psd_byte_order::psdBigEndian>
QString KisAslReaderUtils::readPascalString (QIODevice &device)
 
template<psd_byte_order byteOrder = psd_byte_order::psdBigEndian>
QString KisAslReaderUtils::readStringCommon (QIODevice &device, int length)
 
template<psd_byte_order byteOrder = psd_byte_order::psdBigEndian>
QString KisAslReaderUtils::readUnicodeString (QIODevice &device)
 
template<psd_byte_order byteOrder = psd_byte_order::psdBigEndian>
QString KisAslReaderUtils::readVarString (QIODevice &device)
 
template<typename T , size_t S>
bool TRY_READ_SIGNATURE_2OPS_EX (psd_byte_order byteOrder, QIODevice &device, const std::array< T, S > &expected1, const std::array< T, S > &expected2)
 
template<psd_byte_order byteOrder, typename T , size_t S>
bool TRY_READ_SIGNATURE_2OPS_EX (QIODevice &device, const std::array< T, S > &expected1, const std::array< T, S > &expected2)
 

Macro Definition Documentation

◆ GARBAGE_VALUE_MARK

#define GARBAGE_VALUE_MARK   999

Default value for variable read from a file

Definition at line 26 of file kis_asl_reader_utils.h.

◆ SAFE_READ_EX

#define SAFE_READ_EX ( byteOrder,
device,
varname )
Value:
if (!psdread<byteOrder>(device, varname)) { \
QString msg = QString("Failed to read \'%1\' tag!").arg(#varname); \
}

Definition at line 45 of file kis_asl_reader_utils.h.

45#define SAFE_READ_EX(byteOrder, device, varname) \
46 if (!psdread<byteOrder>(device, varname)) { \
47 QString msg = QString("Failed to read \'%1\' tag!").arg(#varname); \
48 throw KisAslReaderUtils::ASLParseException(msg); \
49 }

◆ SAFE_READ_SIGNATURE_EX

#define SAFE_READ_SIGNATURE_EX ( byteOrder,
device,
varname,
expected )
Value:
if (!psdread<byteOrder>(device, varname) || varname != expected) { \
QString msg = QString( \
"Failed to check signature \'%1\' tag!\n" \
"Value: \'%2\' Expected: \'%3\'") \
.arg(#varname) \
.arg(varname) \
.arg(expected); \
}

Definition at line 51 of file kis_asl_reader_utils.h.

51#define SAFE_READ_SIGNATURE_EX(byteOrder, device, varname, expected) \
52 if (!psdread<byteOrder>(device, varname) || varname != expected) { \
53 QString msg = QString( \
54 "Failed to check signature \'%1\' tag!\n" \
55 "Value: \'%2\' Expected: \'%3\'") \
56 .arg(#varname) \
57 .arg(varname) \
58 .arg(expected); \
59 throw KisAslReaderUtils::ASLParseException(msg); \
60 }

Function Documentation

◆ TRY_READ_SIGNATURE_2OPS_EX() [1/2]

template<typename T , size_t S>
bool TRY_READ_SIGNATURE_2OPS_EX ( psd_byte_order byteOrder,
QIODevice & device,
const std::array< T, S > & expected1,
const std::array< T, S > & expected2 )
inline

Definition at line 91 of file kis_asl_reader_utils.h.

92{
93 switch (byteOrder) {
95 return TRY_READ_SIGNATURE_2OPS_EX<psd_byte_order::psdLittleEndian>(device, expected1, expected2);
96 default:
97 return TRY_READ_SIGNATURE_2OPS_EX<psd_byte_order::psdBigEndian>(device, expected1, expected2);
98 }
99}

References psdLittleEndian.

◆ TRY_READ_SIGNATURE_2OPS_EX() [2/2]

template<psd_byte_order byteOrder, typename T , size_t S>
bool TRY_READ_SIGNATURE_2OPS_EX ( QIODevice & device,
const std::array< T, S > & expected1,
const std::array< T, S > & expected2 )
inline

Definition at line 63 of file kis_asl_reader_utils.h.

64{
65 QByteArray bytes = device.peek(S);
66
67 if (byteOrder == psd_byte_order::psdLittleEndian) {
68 std::reverse(bytes.begin(), bytes.end());
69 }
70
71 if (bytes.size() != S) {
72 return false;
73 }
74
75 // If read successfully, adjust current position of the io device
76
77 if (std::equal(bytes.constBegin(), bytes.constEnd(), expected1.begin())
78 || std::equal(bytes.constBegin(), bytes.constEnd(), expected2.begin())) {
79 // read, not seek, to support sequential devices
80 auto bytesRead = psdreadBytes(device, S);
81 if (bytesRead.size() == S) {
82 return true;
83 }
84 }
85
86 dbgFile << "Photoshop signature verification failed! Got: " << bytes.toHex() << "(" << QString(bytes) << ")";
87 return false;
88}
Eigen::Matrix< double, 4, 2 > S
#define dbgFile
Definition kis_debug.h:53
QByteArray psdreadBytes(QIODevice &io, qint64 v)
Definition psd_utils.h:407

References dbgFile, psdLittleEndian, psdreadBytes(), and S.