1 /*
2  For general Scribus (>=1.3.2) copyright and licensing information please refer
3  to the COPYING file provided with the program. Following this notice may exist
4  a copyright and/or license notice that predates the release of Scribus 1.3.2
5  for which a new license (GPL+exception) is in place.
6  */
7 
8 #ifndef TEXTSOURCE_H
9 #define TEXTSOURCE_H
10 
11 #include <QString>
12 
13 #include "scribusapi.h"
14 #include "itextsource.h"
15 #include "styles/paragraphstyle.h"
16 
17 
18 class CharStyle;
19 class ParagraphStyle;
20 class InlineFrame;
21 
22 
23 /**
24  * provide a segment of an original textsource
25  */
26 class SCRIBUS_API TextSourceSegment : public ITextSource
27 {
28 	ITextSource* m_source;
29 	int m_sourceOffset;
30 	int m_segmentLength;
31 
32 	void chk(int pos);
33 	int toSrc(int pos);
34 
35 public:
36 
37 	TextSourceSegment(ITextSource* original, int offset, int segmentLength);
38 
39 	bool canCombine(const TextSourceSegment& other) const;
40 	void combine(const TextSourceSegment& other);
41 
42 	virtual int length() const;
43 	virtual QChar text(int pos) const;
44 	virtual QString text(int pos, uint len) const;
45 
46 	virtual bool isBlockStart(int pos) const;
47 	virtual int nextBlockStart(int pos) const;
48 
49 	virtual const CharStyle& charStyle(int pos) const;
50 	virtual const ParagraphStyle& paragraphStyle(int pos) const;
51 	virtual LayoutFlags flags(int pos) const;
52 	virtual bool hasFlag(int pos, LayoutFlags flag) const;
53 	virtual void setFlag(int pos, LayoutFlags flag);
54 	virtual void clearFlag(int pos, LayoutFlags flag);
55 
56 	virtual bool hasObject(int pos) const;
57 	virtual InlineFrame object(int pos) const;
58 	virtual bool hasExpansionPoint(int pos) const;
59 	virtual ExpansionPoint expansionPoint(int pos) const;
60 
61 	virtual const ITextSource* parent() const;
62 	virtual int parentPos() const;
63 };
64 
65 
66 
67 /**
68  * provide a simple text source with fixed style, optionally linking it to an expansion point
69  */
70 class SCRIBUS_API SimpleTextSource : public ITextSource
71 {
72 	QString m_text;
73 	ParagraphStyle m_style;
74 
75 	ITextSource* m_parent;
76 	int m_parentPos;
77 
78 public:
79 
m_text(text)80 	SimpleTextSource(QString text, const ParagraphStyle& style, ITextSource* par=nullptr, int parentStart = 0) : m_text(text), m_style(style), m_parent(par), m_parentPos(parentStart) {}
81 
82 	virtual int length() const;
83 	virtual QChar text(int pos) const;
84 	virtual QString text(int pos, uint len) const;
85 
86 	virtual bool isBlockStart(int pos) const;
87 	virtual int nextBlockStart(int pos) const;
88 
89 	virtual const CharStyle& charStyle(int pos) const;
90 	virtual const ParagraphStyle& paragraphStyle(int pos) const;
91 	virtual LayoutFlags flags(int pos) const;
92 	virtual bool hasFlag(int pos, LayoutFlags flag) const;
93 	virtual void setFlag(int pos, LayoutFlags flag);
94 	virtual void clearFlag(int pos, LayoutFlags flag);
95 
96 	virtual bool hasObject(int pos) const;
97 	virtual InlineFrame object(int pos) const;
98 	virtual bool hasExpansionPoint(int pos) const;
99 	virtual ExpansionPoint expansionPoint(int pos) const;
100 
101 	virtual const ITextSource* parent() const;
102 	virtual int parentPos() const;
103 };
104 
105 #endif // ITEXTSOURCE_H
106 
107