Skip to content

Commit d272ffd

Browse files
authored
Switch to parse-ctx (#17)
1 parent 9a2e3cb commit d272ffd

74 files changed

Lines changed: 2068 additions & 2435 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

examples/font.c

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
#include <stdint.h>
2-
#include <stdio.h>
3-
#include <string.h>
42

53
#include "arena/arena.h"
6-
#include "arena/common.h"
74
#include "canvas/canvas.h"
85
#include "err/error.h"
96
#include "geom/mat3.h"
107
#include "logger/log.h"
8+
#include "parse_ctx/ctx.h"
119
#include "sfnt/glyph.h"
1210
#include "sfnt/sfnt.h"
1311

@@ -17,18 +15,16 @@ int main(int argc, char** argv) {
1715

1816
Arena* arena = arena_new(4096);
1917

20-
size_t buffer_len;
21-
uint8_t* buffer = load_file_to_buffer(
18+
ParseCtx ctx = parse_ctx_from_file(
2219
arena,
23-
"assets/fonts-urw-base35/fonts/NimbusSans-Regular.ttf",
24-
&buffer_len
20+
"assets/fonts-urw-base35/fonts/NimbusSans-Regular.ttf"
2521
);
2622

27-
SfntFont* font;
28-
REQUIRE(sfnt_font_new(arena, buffer, buffer_len, &font));
23+
SfntFont font;
24+
REQUIRE(sfnt_font_new(arena, ctx, &font));
2925

3026
SfntGlyph glyph;
31-
REQUIRE(sfnt_get_glyph_for_cid(font, '%', &glyph));
27+
REQUIRE(sfnt_get_glyph_for_cid(&font, '%', &glyph));
3228

3329
Canvas* canvas = canvas_new_scalable(arena, 2000, 2000, 0xffffffff, 1.0);
3430
GeomMat3 transform =

libs/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ add_subdirectory(err)
1111
add_subdirectory(postscript)
1212
add_subdirectory(render)
1313
add_subdirectory(sfnt)
14+
add_subdirectory(str)
1415
add_subdirectory(test)

libs/arena/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
add_library(arena
22
src/arena.c
33
src/common.c
4-
src/string.c
54
src/darray_test.c src/dvec_test.c src/dlinked_test.c)
65
target_include_directories(arena PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
76
target_link_libraries(arena PRIVATE logger pdf-test)

libs/arena/include/arena/string.h

Lines changed: 0 additions & 23 deletions
This file was deleted.

libs/arena/src/string.c

Lines changed: 0 additions & 104 deletions
This file was deleted.

libs/canvas/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ add_library(canvas
66
src/raster_canvas.c
77
src/scalable_canvas.c)
88
target_include_directories(canvas PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
9-
target_link_libraries(canvas PUBLIC arena geom)
9+
target_link_libraries(canvas PUBLIC arena geom str)
1010
target_link_libraries(canvas PRIVATE logger $<$<NOT:$<PLATFORM_ID:Windows>>:m>)
1111
target_compile_features(canvas PUBLIC c_std_11)
1212
if (NOT MSVC)

libs/canvas/src/scalable_canvas.c

Lines changed: 22 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
#include <string.h>
55

66
#include "arena/arena.h"
7-
#include "arena/string.h"
87
#include "canvas/canvas.h"
98
#include "logger/log.h"
109
#include "path_builder.h"
10+
#include "str/alloc_str.h"
1111

1212
#define DVEC_NAME SvgPartsVec
1313
#define DVEC_LOWERCASE_NAME svg_parts_vec
14-
#define DVEC_TYPE ArenaString*
14+
#define DVEC_TYPE Str*
1515
#include "arena/dvec_impl.h"
1616

1717
struct ScalableCanvas {
@@ -43,7 +43,7 @@ ScalableCanvas* scalable_canvas_new(
4343

4444
svg_parts_vec_push(
4545
canvas->parts,
46-
arena_string_new_fmt(
46+
str_new_fmt(
4747
arena,
4848
"<rect width=\"%u\" height=\"%u\" fill=\"#%08x\" />",
4949
width,
@@ -71,7 +71,7 @@ void scalable_canvas_draw_circle(
7171

7272
svg_parts_vec_push(
7373
canvas->parts,
74-
arena_string_new_fmt(
74+
str_new_fmt(
7575
canvas->arena,
7676
"<circle cx=\"%f\" cy=\"%f\" r=\"%f\" fill=\"#%08x\" />",
7777
x,
@@ -95,7 +95,7 @@ void scalable_canvas_draw_line(
9595

9696
svg_parts_vec_push(
9797
canvas->parts,
98-
arena_string_new_fmt(
98+
str_new_fmt(
9999
canvas->arena,
100100
"<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"#%08x\" stroke-width=\"%f\" fill=\"transparent\" />",
101101
x1,
@@ -123,7 +123,7 @@ void scalable_canvas_draw_bezier(
123123

124124
svg_parts_vec_push(
125125
canvas->parts,
126-
arena_string_new_fmt(
126+
str_new_fmt(
127127
canvas->arena,
128128
"<path d=\"M %f %f Q %f %f %f %f\" stroke=\"#%08x\" stroke-width=\"%f\" fill=\"transparent\" />",
129129
x1,
@@ -146,10 +146,7 @@ void scalable_canvas_draw_path(
146146
RELEASE_ASSERT(canvas);
147147
RELEASE_ASSERT(path);
148148

149-
svg_parts_vec_push(
150-
canvas->parts,
151-
arena_string_new_fmt(canvas->arena, "<path d=\"")
152-
);
149+
svg_parts_vec_push(canvas->parts, str_new_fmt(canvas->arena, "<path d=\""));
153150

154151
for (size_t contour_idx = 0;
155152
contour_idx < path_contour_vec_len(path->contours);
@@ -160,10 +157,7 @@ void scalable_canvas_draw_path(
160157
);
161158

162159
if (contour_idx != 0) {
163-
svg_parts_vec_push(
164-
canvas->parts,
165-
arena_string_new_fmt(canvas->arena, "Z ")
166-
);
160+
svg_parts_vec_push(canvas->parts, str_new_fmt(canvas->arena, "Z "));
167161
}
168162

169163
for (size_t segment_idx = 0; segment_idx < path_contour_len(contour);
@@ -175,7 +169,7 @@ void scalable_canvas_draw_path(
175169
case PATH_CONTOUR_SEGMENT_TYPE_START: {
176170
svg_parts_vec_push(
177171
canvas->parts,
178-
arena_string_new_fmt(
172+
str_new_fmt(
179173
canvas->arena,
180174
"M %f %f ",
181175
segment.value.start.x,
@@ -187,7 +181,7 @@ void scalable_canvas_draw_path(
187181
case PATH_CONTOUR_SEGMENT_TYPE_LINE: {
188182
svg_parts_vec_push(
189183
canvas->parts,
190-
arena_string_new_fmt(
184+
str_new_fmt(
191185
canvas->arena,
192186
"L %f %f ",
193187
segment.value.line.x,
@@ -199,7 +193,7 @@ void scalable_canvas_draw_path(
199193
case PATH_CONTOUR_SEGMENT_TYPE_QUAD_BEZIER: {
200194
svg_parts_vec_push(
201195
canvas->parts,
202-
arena_string_new_fmt(
196+
str_new_fmt(
203197
canvas->arena,
204198
"Q %f %f %f %f ",
205199
segment.value.quad_bezier.control.x,
@@ -213,7 +207,7 @@ void scalable_canvas_draw_path(
213207
case PATH_CONTOUR_SEGMENT_TYPE_CUBIC_BEZIER: {
214208
svg_parts_vec_push(
215209
canvas->parts,
216-
arena_string_new_fmt(
210+
str_new_fmt(
217211
canvas->arena,
218212
"C %f %f, %f %f, %f %f ",
219213
segment.value.cubic_bezier.control_a.x,
@@ -234,23 +228,19 @@ void scalable_canvas_draw_path(
234228
if (brush.enable_fill) {
235229
svg_parts_vec_push(
236230
canvas->parts,
237-
arena_string_new_fmt(
238-
canvas->arena,
239-
"\" fill=\"#%08x\"",
240-
brush.fill_rgba
241-
)
231+
str_new_fmt(canvas->arena, "\" fill=\"#%08x\"", brush.fill_rgba)
242232
);
243233
} else {
244234
svg_parts_vec_push(
245235
canvas->parts,
246-
arena_string_new_fmt(canvas->arena, "\" fill=\"none\"")
236+
str_new_fmt(canvas->arena, "\" fill=\"none\"")
247237
);
248238
}
249239

250240
if (brush.enable_stroke) {
251241
svg_parts_vec_push(
252242
canvas->parts,
253-
arena_string_new_fmt(
243+
str_new_fmt(
254244
canvas->arena,
255245
" stroke=\"#%08x\" stroke-width=\"%f\"",
256246
brush.stroke_rgba,
@@ -275,11 +265,7 @@ void scalable_canvas_draw_path(
275265
}
276266
svg_parts_vec_push(
277267
canvas->parts,
278-
arena_string_new_fmt(
279-
canvas->arena,
280-
" stroke-linecap=\"%s\"",
281-
line_cap
282-
)
268+
str_new_fmt(canvas->arena, " stroke-linecap=\"%s\"", line_cap)
283269
);
284270

285271
const char* line_join = NULL;
@@ -299,17 +285,13 @@ void scalable_canvas_draw_path(
299285
}
300286
svg_parts_vec_push(
301287
canvas->parts,
302-
arena_string_new_fmt(
303-
canvas->arena,
304-
" stroke-linejoin=\"%s\"",
305-
line_join
306-
)
288+
str_new_fmt(canvas->arena, " stroke-linejoin=\"%s\"", line_join)
307289
);
308290

309291
if (brush.line_join == CANVAS_LINEJOIN_MITER) {
310292
svg_parts_vec_push(
311293
canvas->parts,
312-
arena_string_new_fmt(
294+
str_new_fmt(
313295
canvas->arena,
314296
" stroke-miterlimit=\"%f\"",
315297
brush.miter_limit
@@ -318,10 +300,7 @@ void scalable_canvas_draw_path(
318300
}
319301
}
320302

321-
svg_parts_vec_push(
322-
canvas->parts,
323-
arena_string_new_fmt(canvas->arena, " />")
324-
);
303+
svg_parts_vec_push(canvas->parts, str_new_fmt(canvas->arena, " />"));
325304
}
326305

327306
void scalable_canvas_draw_pixel(
@@ -333,7 +312,7 @@ void scalable_canvas_draw_pixel(
333312

334313
svg_parts_vec_push(
335314
canvas->parts,
336-
arena_string_new_fmt(
315+
str_new_fmt(
337316
canvas->arena,
338317
"<rect x=\"%f\" y=\"%f\" width=\"%f\" height=\"%f\" fill=\"#%08x\" />",
339318
position.x,
@@ -363,10 +342,10 @@ bool scalable_canvas_write_file(ScalableCanvas* canvas, const char* path) {
363342
}
364343

365344
for (size_t idx = 0; idx < svg_parts_vec_len(canvas->parts); ++idx) {
366-
ArenaString* operation;
345+
Str* operation;
367346
RELEASE_ASSERT(svg_parts_vec_get(canvas->parts, idx, &operation));
368347

369-
const char* opbuf = arena_string_buffer(operation);
348+
const char* opbuf = str_get_cstr(operation);
370349
size_t oplen = strlen(opbuf);
371350

372351
if (oplen > 0) {

0 commit comments

Comments
 (0)