Go to the documentation of this file.
206 fprintf(fd,
"{:Text ");
212 fprintf(fd,
":OrigFont ");
220 fprintf(fd,
":FontAttributes ");
228 fprintf(fd,
":TextColour ");
236 fprintf(fd,
":BackgroundColour ");
244 fprintf(fd,
":CharacterSet %d\n",
m_nCharSet);
274 fprintf(fd,
":TextWrapping true\n");
336 MHERROR(
"Text object must have content");
396 if (attrs.
Size() == 5)
398 style = attrs.
GetAt(0);
399 size = attrs.
GetAt(1);
400 lineSpace = attrs.
GetAt(2);
402 letterSpace = attrs.
GetAt(3) * 256 + attrs.
GetAt(4);
404 if (letterSpace > 32767)
406 letterSpace -= 65536;
411 const unsigned char *str = attrs.
Bytes();
412 char *
p = (
char *)str;
413 char *q = strchr(
p,
'.');
417 if (q -
p == 6 && strncmp(
p,
"italic", 6) == 0)
421 else if (q -
p == 4 && strncmp(
p,
"bold", 4) == 0)
425 else if (q -
p == 11 && strncmp(
p,
"bold-italic", 11) == 0)
463 letterSpace = atoi(
p);
523 static inline int Tabs(
int nXpos,
int nTabCount)
525 int nNextTab = nXpos;
529 nNextTab += nTabCount *
TABSTOP;
561 theText.
Append(pCurrLine);
563 colourStack.
Push(textColour);
564 pCurrItem->m_colour = textColour;
575 if (pCurrItem->m_text.Size() != 0)
577 pCurrItem = pCurrItem->NewItem();
578 pCurrLine->m_items.Append(pCurrItem);
581 pCurrItem->m_nTabCount++;
589 theText.
Append(pCurrLine);
590 pCurrItem = pCurrItem->NewItem();
591 pCurrLine->m_items.Append(pCurrItem);
605 if (code >= 0x40 && code <= 0x5e)
616 if (code == 0x43 && paramCount == 4 && i + paramCount <=
m_content.
Size())
619 if (pCurrItem->m_text.Size() != 0)
621 pCurrItem = pCurrItem->NewItem();
622 pCurrLine->m_items.Append(pCurrItem);
628 colourStack.
Push(pCurrItem->m_colour);
637 else if (code >= 0x60 && code <= 0x7e)
643 if (colourStack.
Size() > 1)
648 if (pCurrItem->m_text.Size() != 0)
650 pCurrItem = pCurrItem->NewItem();
651 pCurrLine->m_items.Append(pCurrItem);
655 pCurrItem->m_colour = colourStack.
Top();
658 else MHLOG(
MHLogWarning, QString(
"Unknown text escape code 0x%1").arg(code,2,16));
660 else MHLOG(
MHLogWarning, QString(
"Unknown text escape code 0x%1").arg(code,2,16));
692 for (i = 0; i < theText.
Size(); i++)
738 int nNewWidth = nFullText - pItem->
m_nUnicode;
742 while (nNewWidth != 0 && pItem->
m_unicode[nNewStart] ==
' ')
755 pNewLine->m_items.Append(pNewItem);
795 int nNumLines = theText.
Size();
815 for (i = 0; i < nNumLines; i++)
845 yOffset += lineSpace;
854 for (
int k = 0; k < theText.
Size(); k++)
856 delete(theText.
GetAt(k));
900 fprintf(fd,
"{:HyperText ");
903 fprintf(fd,
"****TODO\n");
virtual void AddText(int x, int y, const QString &, MHRgba colour)=0
virtual MHTextDisplay * CreateText(void)=0
virtual void Clear(void)=0
void PrintMe(FILE *fd, int nTabs) const override
void GetDefaultBGColour(MHColour &colour)
enum MHIngredient::@10 IN_NoContent
static MHRgba GetColour(const MHColour &colour)
MHTextItem * NewItem() const
void ContentPreparation(MHEngine *engine) override
static const std::array< const QString, 4 > rchStartCorner
unsigned char GetAt(int i) const
const unsigned char * Bytes() const
void Initialise(MHParseNode *p, MHEngine *engine) override
void PrintMe(FILE *fd, int nTabs) const override
virtual void SetSize(int width, int height)=0
MHOctetString m_includedContent
MHTextDisplay * m_pDisplay
virtual void Initialise(MHParseNode *p, MHEngine *engine)
void ContentPreparation(MHEngine *engine) override
MHColour m_originalBgColour
void Preparation(MHEngine *engine) override
void CreateContent(const unsigned char *p, int s, MHEngine *engine)
void PrintMe(FILE *fd, int nTabs) const
static constexpr int8_t TABSTOP
void PrintMe(FILE *fd, int nTabs) const
static const std::array< const QString, 2 > rchlineOrientation
static void InterpretAttributes(const MHOctetString &attrs, int &style, int &size, int &lineSpace, int &letterSpace)
static int GetJustification(const QString &str)
MHObjectRef m_ObjectReference
void Redraw(const QRegion ®ion)
void EventTriggered(MHRoot *pSource, enum EventType ev)
StartCorner m_startCorner
void Initialise(MHParseNode *p, MHEngine *engine)
void SetFontAttributes(const MHOctetString &fontAttrs, MHEngine *engine) override
void Initialise(MHParseNode *p, MHEngine *engine)
QRegion GetOpaqueArea() override
void Initialise(MHParseNode *p, MHEngine *engine)
MHOctetString m_fontAttrs
void PrintTabs(FILE *fd, int n)
void GetValue(MHOctetString &str, MHEngine *engine) const
MHParseNode * GetArgN(int n)
static int Tabs(int nXpos, int nTabCount)
virtual QRect GetBounds(const QString &str, int &strLen, int maxSize=-1)=0
#define MHLOG(__level, __text)
virtual QRegion GetVisibleArea()
void Initialise(MHParseNode *p, MHEngine *engine) override
@ C_HORIZONTAL_JUSTIFICATION
static int GetStartCorner(const QString &str)
MHGenericOctetString m_fontAttrs
@ C_VERTICAL_JUSTIFICATION
void GetDefaultTextColour(MHColour &colour)
MHOctetString m_originalFontAttrs
void Display(MHEngine *engine) override
void Initialise(MHParseNode *p, MHEngine *engine)
MHRoot * Target(MHEngine *engine)
QString Printable() const
void InsertAt(BASE b, int n)
void GetDefaultFontAttrs(MHOctetString &str)
void Copy(const MHFontBody &fb)
static const std::array< const QString, 4 > rchJustification
MHSequence< MHTextItem * > m_items
void Copy(const MHColour &col)
void Initialise(MHParseNode *p, MHEngine *engine) override
virtual void SetFont(int size, bool isBold, bool isItalic)=0
void PrintMe(FILE *fd, int nTabs) const
void PrintMe(FILE *fd, int nTabs) const override
void GetStringValue(MHOctetString &str)
void SetTextColour(const MHColour &colour, MHEngine *engine) override
void Initialise(MHParseNode *p, MHEngine *engine) override
virtual void DrawRect(int xPos, int yPos, int width, int height, MHRgba colour)=0
void PrintMe(FILE *fd, int nTabs) const
static int GetLineOrientation(const QString &str)
virtual void SetFontAttributes(const MHOctetString &, MHEngine *)
void Preparation(MHEngine *engine) override
LineOrientation m_lineOrientation
void SetBackgroundColour(const MHColour &colour, MHEngine *engine) override
virtual void Draw(int x, int y)=0
void Copy(const MHOctetString &str)
MHColour m_originalTextColour
QString Printable() const
void ContentArrived(const unsigned char *data, int length, MHEngine *engine) override
void Perform(MHEngine *engine) override