File: docSelect.h

package info (click to toggle)
ted 2.11-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 11,064 kB
  • ctags: 13,935
  • sloc: ansic: 120,446; makefile: 7,469; sh: 253
file content (152 lines) | stat: -rw-r--r-- 4,571 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
#   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;
    int			dpParticule;
    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			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;
    } TableRectangle;

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

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

/************************************************************************/
/*									*/
/*  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,
					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 );
extern int docEndOfLine(	DocumentPosition *		dp );

#   endif	/*	DOC_SELECT_H	*/