45 MHERROR(
"Unexpected end of file");
58 MHERROR(
"Indefinite length strings are not implemented");
61 int nLength = endStr -
m_p;
62 auto *stringValue = (
unsigned char *)malloc(nLength + 1);
63 if (stringValue ==
nullptr)
68 unsigned char *
p = stringValue;
83 bool firstByte =
true;
87 MHERROR(
"Indefinite length integers are not implemented");
96 if (firstByte && ch >= 128)
103 intVal = (intVal << 8) | ch;
114 enum : std::uint8_t { Universal, Context } tagClass = Universal;
117 unsigned int tagNumber = 0;
128 tagClass = Universal;
134 MHERROR(QString(
"Invalid tag class = %1").arg(ch, 0, 16));
139 tagNumber = ch & 0x1f;
141 if (tagNumber == 0x1f)
144 tagNumber = ch & 0x7f;
145 while ((ch & 0x80) != 0)
148 tagNumber = (tagNumber << 7) | (ch & 0x7f);
159 int lengthOfLength = ch & 0x7f;
161 if (lengthOfLength == 0)
169 while (lengthOfLength--)
172 endOfItem = (endOfItem << 8) | ch;
180 endOfItem = ch +
m_p;
183 if (tagClass == Context)
207 if (
m_p != endOfItem)
210 pNode->AddArg(
new MHPBool(intVal != 0));
228 if (
m_p != endOfItem)
231 pNode->AddArg(
new MHPEnum(intVal));
264 if (
m_p != endOfItem)
267 pNode->AddArg(
new MHPInt(intVal));
295 MHERROR(
"Indefinite length arguments are not implemented");
298 while (
m_p < endOfItem)
323 return new MHPBool(intVal != 0);
328 return new MHPInt(intVal);
351 MHERROR(
"Indefinite length sequences are not implemented");
356 while (
m_p < endOfItem)
371 MHERROR(QString(
"Unknown universal %1").arg(tagNumber));
@ C_PROGRAM_CONNECTION_TAG
@ C_HORIZONTAL_JUSTIFICATION
@ C_CONTENT_CACHE_PRIORITY
@ C_VERTICAL_JUSTIFICATION
@ C_LINE_ART_CONTENT_HOOK
@ C_ORIGINAL_TRANSPARENCY
@ C_BORDERED_BOUNDING_BOX
static constexpr int INDEFINITE_LENGTH
void Copy(const MHOctetString &str)
void ParseString(int endStr, MHOctetString &str)
unsigned char GetNextChar()