File: docSelect.h

package info (click to toggle)
ted 2.16-5
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 13,944 kB
  • ctags: 20,273
  • sloc: ansic: 167,980; makefile: 12,518; sh: 263
file content (218 lines) | stat: -rw-r--r-- 6,344 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#   ifndef		DOC_SELECT_H
#   define		DOC_SELECT_H

/************************************************************************/
/*									*/
/*  Forward declarations of structs.					*/
/*									*/
/************************************************************************/

struct BufferDocument;
struct BufferItem;
struct DocumentField;

/************************************************************************/
/*									*/
/*  Used to layout lines of text.					*/
/*									*/
/*  A0 paper is 4* 30 cm high: 28.3465* 120* 20= 68031.6 Twips.		*/
/*  So an unsigned short limits us to A1 paper.				*/
/*									*/
/************************************************************************/

typedef struct LayoutPosition
    {
    unsigned short	lpPageYTwips;
    unsigned short	lpPage;
    unsigned char	lpColumn;
    unsigned char	lpAtTopOfColumn;
    } LayoutPosition;

/************************************************************************/
/*									*/
/*  A position in a document.						*/
/*									*/
/*  1)  Indication for the kind of root item for the selection.		*/
/*  2)  Geometry is derived from the position, NOT the other way round.	*/
/*									*/
/*  A)  Indication for the kind of root item for the selection.		*/
/*  B)  When the selection is not in the body of the document, the	*/
/*	number of the section that the external item belongs to.	*/
/*  D)  If the external item is a footnote/endnote: The index in the	*/
/*	array of notes in the section.					*/
/*									*/
/*  E)  The beginning, end and anchor of the selection. The order is in	*/
/*	the reding direction. NOT in the order that the selection was	*/
/*	made. USE EXTREME CARE WHEN YOU REFER TO THE OLD POSITION IN	*/
/*	EDITING CODE.							*/
/*									*/
/************************************************************************/

typedef struct DocumentPosition
    {
    struct BufferItem *	dpBi;
    unsigned int	dpStroff;
    } DocumentPosition;

typedef struct SelectionScope
    {
    int			ssInExternalItem;			/*  A  */
    int			ssSectNrExternalTo;			/*  B  */
    int			ssNoteArrayIndex;			/*  D  */
    } SelectionScope;

typedef struct DocumentSelection
    {
    SelectionScope	dsSelectionScope;

    DocumentPosition	dsBegin;				/*  E  */
    DocumentPosition	dsEnd;					/*  E  */
    DocumentPosition	dsAnchor;				/*  E  */

    int			dsCol0;
    int			dsCol1;
    int			dsDirection;
    } DocumentSelection;

/*  2  */
typedef struct PositionGeometry
    {
    int			pgLine;
    int			pgAtLineHead;

    int			pgXPixels;
    LayoutPosition	pgTopPosition;
    int			pgY1Pixels;
    int			pgBaselinePixels;
    } PositionGeometry;

typedef struct SelectionGeometry
    {
    DocumentRectangle	sgRectangle;

    PositionGeometry	sgBegin;				/*  E  */
    PositionGeometry	sgEnd;					/*  E  */
    PositionGeometry	sgAnchor;				/*  E  */
    } SelectionGeometry;

typedef struct TableRectangle
    {
    int		trCol0;
    int		trCol1;
    int		trCol11;

    int		trRow00;
    int		trRow0;
    int		trRow1;
    int		trRow11;

    int		trCellColspan;
    int		trCellRowspan;
    } TableRectangle;

#   define	docPositionsInsideParagraph(b,e) \
		((b)->dpBi == (e)->dpBi)
#   define	docPositionsInsideCell(b,e) \
		((b)->dpBi->biParent == (e)->dpBi->biParent)
#   define	docPositionsInsideRow(b,e) \
		((b)->dpBi->biParent->biParent == (e)->dpBi->biParent->biParent)

#   define	docSelectionInsideParagraph(ds) \
		docPositionsInsideParagraph(&(ds)->dsBegin,&(ds)->dsEnd)
#   define	docSelectionInsideCell(ds) \
		docPositionsInsideCell(&(ds)->dsBegin,&(ds)->dsEnd)
#   define	docSelectionInsideRow(ds) \
		docPositionsInsideRow(&(ds)->dsBegin,&(ds)->dsEnd)

/************************************************************************/
/*									*/
/*  Describe a selection and its relevance for application tools.	*/
/*									*/
/************************************************************************/

typedef struct SelectionDescription
    {
    unsigned int	sdDocumentId;
    int			sdIsSet;
    int			sdDocumentReadonly;
    int			sdIsIBarSelection;
    int			sdIsSingleParagraph;
    int			sdIsSingleCell;
    int			sdBeginInTable;
    int			sdBeginInTableHeader;
    int			sdIsColSlice;
    int			sdIsRowSlice;
    int			sdIsTableSlice;
    int			sdIsTableRectangle;

    int			sdCanReplace;
    int			sdInExternalItem;
    int			sdInDocumentBody;
    int			sdInHeaderFooter;

    int			sdBeginInField;
    int			sdBeginInHyperlink;
    int			sdBeginInBookmark;

    int			sdIsListBullet;

    int			sdHasLists;
    int			sdFirstListParaNr;
    int			sdListOverride;
    int			sdListLevel;
    int			sdMultiList;
    int			sdMultiLevel;
    } SelectionDescription;

/************************************************************************/
/*									*/
/*  Routine Declarations.						*/
/*									*/
/************************************************************************/

extern void docInitDocumentPosition(	DocumentPosition *	dp );
extern void docInitDocumentSelection(	DocumentSelection *	ds );
extern void docInitPositionGeometry(	PositionGeometry *	pg );
extern void docInitSelectionGeometry(	SelectionGeometry *	sg );

extern void docSetIBarSelection(	DocumentSelection *		ds,
					const DocumentPosition *	dp );

extern int docIsIBarSelection( const DocumentSelection *		ds );
extern int docIsParaSelection( const DocumentSelection *		ds );

extern int docGetObjectSelection(	DocumentSelection *	ds,
					int *			pPart,
					DocumentPosition *	dpObject,
					InsertedObject **	pIo );

extern void docSetRangeSelection(
				DocumentSelection *		ds,
				const DocumentPosition *	dpFrom,
				const DocumentPosition *	dpTo,
				int				direction,
				int				col0,
				int				col1 );

extern int docBeginOfLine(	DocumentPosition *		dp,
				int				wasAtHead );
extern int docEndOfLine(	DocumentPosition *		dp,
				int				wasAtHead );

extern int docGetTableRectangle(	TableRectangle *		tr,
					const DocumentSelection *	ds );

extern int docGetTableSliceSelection(
				int *				pIsRowSlice,
				int *				pIsColSlice,
				TableRectangle *		tr,
				const DocumentSelection *	ds );

extern void docDescribeSelection(
			    SelectionDescription *		sd,
			    const DocumentSelection *		ds,
			    const struct BufferDocument *	bd,
			    unsigned int			documentId,
			    int					documentRo );

#   endif	/*	DOC_SELECT_H	*/