Rev 21718 |
Rev 22518 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
For general Scribus (>=1.3.2) copyright and licensing information please refer
to the COPYING file provided with the program. Following this notice may exist
a copyright and/or license notice that predates the release of Scribus 1.3.2
for which a new license (GPL+exception) is in place.
*/
#ifndef SCTEXTSTRUCT_H
#define SCTEXTSTRUCT_H
#ifdef HAVE_CONFIG_H
#include "scconfig.h"
#endif
#include "scribusapi.h"
#include <QString>
#include "scfonts.h"
#include "style.h"
#include "styles/charstyle.h"
#include "styles/paragraphstyle.h"
class PageItem;
class Mark;
class ScribusDoc;
/* Strucure for Pageitem Text */
/*
* sctext.h
* Scribus
*
* Created by Andreas Vox on 29.07.05.
* Copyright 2005 under GPL2. All rights reserved.
*
*/
// from charstlye.h ScStyleFlags
enum LayoutFlags {
ScLayout_None = 0,
ScLayout_BulletNum = 1 << 0, // marks list layout glyphs
ScLayout_FixedSpace = 1 << 1, // marks a fixed space
ScLayout_ExpandingSpace= 1 << 2, // marks an expanding space
ScLayout_ImplicitSpace = 1 << 3, // marks an implicit space
ScLayout_TabLeaders = 1 << 4, // marks a tab with fillchar
ScLayout_HyphenationPossible = 1 << 7, // marks possible hyphenation point
ScLayout_DropCap = 1 << 11,
ScLayout_SuppressSpace = 1 << 12, // internal use in PageItem (Suppresses spaces when in Block alignment)
ScLayout_SoftHyphenVisible = 1 << 13, // marks when a possible hyphenation point is used (st end of line)
ScLayout_StartOfLine = 1 << 14, // marks the start of line
ScLayout_Underlined = 1 << 15, // marks underlined glyphs
ScLayout_LineBoundary = 1 << 16, // marks possible line breaking point
ScLayout_RightToLeft = 1 << 17, // marks right-to-left glyph
ScLayout_SmallCap = 1 << 18, // marks small caps glyph
ScLayout_CJKFence = 1 << 19, // marks CJK fence glyph that needs spacing adjustment at start of line
ScLayout_NoBreakAfter = 1 << 20, // marks glyphs after which a line break cannot occur
ScLayout_NoBreakBefore = 1 << 21, // marks glyphs before which a line break cannot occur
ScLayout_JustificationTracking = 1 << 22 // marks place of tracking in justification (e.g. for Thai)
};
/**
* simple class to abstract from inline pageitems. You will need a ITextContext
* to get meaningfull data about the InlineFrame, for other purposes it is opaque
*/
class SCRIBUS_API InlineFrame
{
int m_object_id;
public:
InlineFrame(int id) : m_object_id(id) {}
int getInlineCharID() const { return m_object_id; }
PageItem* getPageItem(ScribusDoc* doc) const;
};
/**
* Holds information about expansion points in a text source: pagenumber, counters, list bulllet, ...
*/
class SCRIBUS_API ExpansionPoint
{
public:
enum ExpansionType {
Invalid,
PageNumber,
PageCount,
ListBullet,
ListCounter,
Note, // foot or endnote number
Anchor, // usually invisible
PageRef,
Lookup, // generic lookup
SectionRef,
MarkCE // deprecated
} ;
ExpansionPoint(ExpansionType t) : m_type(t), m_name(), m_mark(0) {}
ExpansionPoint(ExpansionType t, QString name) : m_type(t), m_name(name), m_mark(0) {}
ExpansionPoint(Mark* mrk) : m_type(MarkCE), m_name(), m_mark(mrk) {}
ExpansionType getType() const { return m_type; }
QString getName() const { return m_name; }
Mark* getMark() const { return m_mark; }
private:
ExpansionType m_type;
QString m_name;
Mark* m_mark;
};
/**
* This struct stores a positioned glyph. This is the result of the layout process.
*/
struct SCRIBUS_API GlyphLayout {
float xadvance;
float yadvance;
float xoffset;
float yoffset;
double scaleV;
double scaleH;
uint glyph;
GlyphLayout() : xadvance(0.0f), yadvance(0.0f), xoffset(0.0f), yoffset(0.0f),
scaleV(1.0), scaleH(1.0), glyph(0)
{ }
};
class SCRIBUS_API ScText : public CharStyle
{
public:
ParagraphStyle* parstyle; // only for parseps
int embedded;
Mark* mark;
QChar ch;
ScText() :
CharStyle(),
parstyle(NULL),
embedded(0), mark(NULL), ch() {}
ScText(const ScText& other) :
CharStyle(other),
parstyle(NULL),
embedded(other.embedded), mark(NULL), ch(other.ch)
{
if (other.parstyle)
parstyle = new ParagraphStyle(*other.parstyle);
if (other.mark)
setNewMark(other.mark);
}
~ScText();
bool hasObject(ScribusDoc *doc) const;
//returns true if given MRK is found, if MRK is NULL then any mark returns true
bool hasMark(Mark * MRK = NULL) const;
QList<PageItem*> getGroupedItems(ScribusDoc *doc);
PageItem* getItem(ScribusDoc *doc);
private:
void setNewMark(Mark* mrk);
};
/** @brief First Line Offset Policy
* Set wether the first line offset is based on max glyph height
* or some of predefined height.
* I put a prefix because it could easily conflict
*/
enum FirstLineOffsetPolicy
{
FLOPRealGlyphHeight = 0, // Historical
FLOPFontAscent = 1,
FLOPLineSpacing = 2,
FLOPBaselineGrid = 3
};
#endif // SCTEXTSTRUCT_H