2 * Copyright (c) 2024 Jiri Svoboda
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43 /** Direction (in linear space) */
45 /** Before specified point */
47 /** After specified point */
53 typedef struct sheet sheet_t
;
55 /** Character cell coordinates
57 * These specify a character cell. The first cell is (1,1).
66 * An s-point specifies the boundary between two successive characters
67 * in the linear file space (including the beginning of file or the end
68 * of file. An s-point only remains valid as long as no modifications
69 * (insertions/deletions) are performed on the sheet.
72 /* Note: This structure is opaque for the user. */
79 * A tag is similar to an s-point, but remains valid over modifications
80 * to the sheet. A tag tends to 'stay put'. Any tag must be properly
81 * removed from the sheet before it is deallocated by the user.
84 /* Note: This structure is opaque for the user. */
86 /** Link to list of all tags in the sheet (see sheet_t.tags) */
92 extern errno_t
sheet_create(sheet_t
**);
93 extern void sheet_destroy(sheet_t
*);
94 extern errno_t
sheet_insert(sheet_t
*, spt_t
*, enum dir_spec
, char *);
95 extern errno_t
sheet_delete(sheet_t
*, spt_t
*, spt_t
*);
96 extern void sheet_copy_out(sheet_t
*, spt_t
const *, spt_t
const *, char *,
98 extern void sheet_get_cell_pt(sheet_t
*, coord_t
const *, enum dir_spec
,
100 extern void sheet_get_row_width(sheet_t
*, int, int *);
101 extern void sheet_get_num_rows(sheet_t
*, int *);
102 extern void spt_get_coord(spt_t
const *, coord_t
*);
103 extern bool spt_equal(spt_t
const *, spt_t
const *);
104 extern char32_t
spt_next_char(spt_t
, spt_t
*);
105 extern char32_t
spt_prev_char(spt_t
, spt_t
*);
107 extern void sheet_place_tag(sheet_t
*, spt_t
const *, tag_t
*);
108 extern void sheet_remove_tag(sheet_t
*, tag_t
*);
109 extern void tag_get_pt(tag_t
const *, spt_t
*);