46 m_nCharSet(ref.m_nCharSet),
47 m_horizJ(ref.m_horizJ),
49 m_lineOrientation(ref.m_lineOrientation),
50 m_startCorner(ref.m_startCorner),
51 m_fTextWrap(ref.m_fTextWrap),
52 m_fNeedsRedraw(ref.m_fNeedsRedraw)
215 fprintf(fd,
"{:Text ");
221 fprintf(fd,
":OrigFont ");
229 fprintf(fd,
":FontAttributes ");
237 fprintf(fd,
":TextColour ");
245 fprintf(fd,
":BackgroundColour ");
253 fprintf(fd,
":CharacterSet %d\n",
m_nCharSet);
283 fprintf(fd,
":TextWrapping true\n");
345 MHERROR(
"Text object must have content");
405 if (attrs.
Size() == 5)
407 style = attrs.
GetAt(0);
408 size = attrs.
GetAt(1);
409 lineSpace = attrs.
GetAt(2);
411 letterSpace = (attrs.
GetAt(3) * 256) + attrs.
GetAt(4);
413 if (letterSpace > 32767)
415 letterSpace -= 65536;
420 const unsigned char *str = attrs.
Bytes();
421 char *
p = (
char *)str;
422 char *q = strchr(
p,
'.');
426 if (q -
p == 6 && strncmp(
p,
"italic", 6) == 0)
430 else if (q -
p == 4 && strncmp(
p,
"bold", 4) == 0)
434 else if (q -
p == 11 && strncmp(
p,
"bold-italic", 11) == 0)
472 letterSpace = atoi(
p);
529static inline int Tabs(
int nXpos,
int nTabCount)
531 int nNextTab = nXpos;
535 nNextTab += nTabCount *
TABSTOP;
567 theText.
Append(pCurrLine);
569 colourStack.
Push(textColour);
570 pCurrItem->m_colour = textColour;
581 if (pCurrItem->m_text.Size() != 0)
583 pCurrItem = pCurrItem->NewItem();
584 pCurrLine->m_items.Append(pCurrItem);
587 pCurrItem->m_nTabCount++;
595 theText.
Append(pCurrLine);
596 pCurrItem = pCurrItem->NewItem();
597 pCurrLine->m_items.Append(pCurrItem);
611 if (code >= 0x40 && code <= 0x5e)
622 if (code == 0x43 && paramCount == 4 && i + paramCount <=
m_content.
Size())
625 if (pCurrItem->m_text.Size() != 0)
627 pCurrItem = pCurrItem->NewItem();
628 pCurrLine->m_items.Append(pCurrItem);
634 colourStack.
Push(pCurrItem->m_colour);
643 else if (code >= 0x60 && code <= 0x7e)
649 if (colourStack.
Size() > 1)
654 if (pCurrItem->m_text.Size() != 0)
656 pCurrItem = pCurrItem->NewItem();
657 pCurrLine->m_items.Append(pCurrItem);
661 pCurrItem->m_colour = colourStack.
Top();
704 for (i = 0; i < theText.
Size(); i++)
750 int nNewWidth = nFullText - pItem->
m_nUnicode;
754 while (nNewWidth != 0 && pItem->
m_unicode[nNewStart] ==
' ')
767 pNewLine->m_items.Append(pNewItem);
801 int nNumLines = theText.
Size();
803 yOffset = (
m_nBoxHeight - (nNumLines * lineSpace)) / divisor;
807 yOffset = (
m_nBoxHeight - (nNumLines * lineSpace)) / divisor;
810 for (i = 0; i < nNumLines; i++)
840 yOffset += lineSpace;
849 for (
int k = 0; k < theText.
Size(); k++)
851 delete(theText.
GetAt(k));
895 fprintf(fd,
"{:HyperText ");
898 fprintf(fd,
"****TODO\n");
@ C_HORIZONTAL_JUSTIFICATION
@ C_VERTICAL_JUSTIFICATION
#define MHLOG(__level, __text)
void PrintTabs(FILE *fd, int n)
static const std::array< const QString, 2 > rchlineOrientation
static const std::array< const QString, 4 > rchJustification
static void InterpretAttributes(const MHOctetString &attrs, int &style, int &size, int &lineSpace, int &letterSpace)
static constexpr int8_t TABSTOP
static int Tabs(int nXpos, int nTabCount)
static const std::array< const QString, 4 > rchStartCorner
void Initialise(MHParseNode *p, MHEngine *engine)
void PrintMe(FILE *fd, int nTabs) const
void Copy(const MHColour &col)
virtual MHTextDisplay * CreateText(void)=0
virtual void DrawRect(int xPos, int yPos, int width, int height, MHRgba colour)=0
MHRoot * Target(MHEngine *engine)
virtual void Initialise(MHParseNode *p, MHEngine *engine)
void Redraw(const QRegion ®ion)
void GetDefaultBGColour(MHColour &colour)
void EventTriggered(MHRoot *pSource, enum EventType ev)
void GetDefaultTextColour(MHColour &colour)
void GetDefaultFontAttrs(MHOctetString &str)
void Copy(const MHFontBody &fb)
void PrintMe(FILE *fd, int nTabs) const
void Initialise(MHParseNode *p, MHEngine *engine)
void Initialise(MHParseNode *p, MHEngine *engine)
void GetValue(MHOctetString &str, MHEngine *engine) const
void Initialise(MHParseNode *p, MHEngine *engine) override
void PrintMe(FILE *fd, int nTabs) const override
void ContentPreparation(MHEngine *engine) override
enum MHIngredient::@4 IN_NoContent
MHOctetString m_includedContent
void PrintMe(FILE *fd, int nTabs) const
void Initialise(MHParseNode *p, MHEngine *engine)
QString Printable() const
void Copy(const MHOctetString &str)
const unsigned char * Bytes() const
unsigned char GetAt(int i) const
void PrintMe(FILE *fd, int nTabs) const
QString Printable() const
MHParseNode * GetArgN(int n)
void GetStringValue(MHOctetString &str)
MHObjectRef m_ObjectReference
virtual void SetFontAttributes(const MHOctetString &, MHEngine *)
void InsertAt(BASE b, int n)
void Initialise(MHParseNode *p, MHEngine *engine) override
MHGenericOctetString m_fontAttrs
void Perform(MHEngine *engine) override
virtual void SetFont(int size, bool isBold, bool isItalic)=0
virtual QRect GetBounds(const QString &str, int &strLen, int maxSize=-1)=0
virtual void SetSize(int width, int height)=0
virtual void Clear(void)=0
virtual void Draw(int x, int y)=0
virtual void AddText(int x, int y, const QString &, MHRgba colour)=0
MHTextItem * NewItem() const
MHSequence< MHTextItem * > m_items
static int GetStartCorner(const QString &str)
void SetTextColour(const MHColour &colour, MHEngine *engine) override
MHColour m_originalTextColour
LineOrientation m_lineOrientation
MHColour m_originalBgColour
static int GetLineOrientation(const QString &str)
MHTextDisplay * m_pDisplay
MHOctetString m_fontAttrs
void Display(MHEngine *engine) override
void SetBackgroundColour(const MHColour &colour, MHEngine *engine) override
static int GetJustification(const QString &str)
MHOctetString m_originalFontAttrs
void Preparation(MHEngine *engine) override
StartCorner m_startCorner
void CreateContent(const unsigned char *p, int s, MHEngine *engine)
void PrintMe(FILE *fd, int nTabs) const override
void ContentPreparation(MHEngine *engine) override
void ContentArrived(const unsigned char *data, int length, MHEngine *engine) override
void Initialise(MHParseNode *p, MHEngine *engine) override
QRegion GetOpaqueArea() override
void SetFontAttributes(const MHOctetString &fontAttrs, MHEngine *engine) override
void PrintMe(FILE *fd, int nTabs) const override
virtual QRegion GetVisibleArea()
static MHRgba GetColour(const MHColour &colour)
void Initialise(MHParseNode *p, MHEngine *engine) override
void Preparation(MHEngine *engine) override