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
|
#pragma once
#include "gmutil.h"
#include <the_Foundation/object.h>
#include <the_Foundation/rect.h>
#include <the_Foundation/string.h>
#include <the_Foundation/time.h>
#include <SDL_render.h>
iDeclareType(GmRun)
typedef uint16_t iGmLinkId;
enum iGmLinkFlags {
gemini_GmLinkFlag = iBit(1),
gopher_GmLinkFlag = iBit(2),
http_GmLinkFlag = iBit(3),
file_GmLinkFlag = iBit(4),
data_GmLinkFlag = iBit(5),
supportedProtocol_GmLinkFlag = 0x1f,
remote_GmLinkFlag = iBit(9),
userFriendly_GmLinkFlag = iBit(10),
imageFileExtension_GmLinkFlag = iBit(11),
audioFileExtension_GmLinkFlag = iBit(12),
content_GmLinkFlag = iBit(13), /* content visible below */
visited_GmLinkFlag = iBit(14), /* in the history */
};
iDeclareType(GmImageInfo)
struct Impl_GmImageInfo {
iInt2 size;
size_t numBytes;
const char *mime;
};
enum iGmRunFlags {
startOfLine_GmRunFlag = iBit(1),
endOfLine_GmRunFlag = iBit(2),
siteBanner_GmRunlag = iBit(3), /* area reserved for the site banner */
};
struct Impl_GmRun {
iRangecc text;
uint8_t font;
uint8_t color;
uint8_t flags;
iRect bounds; /* used for hit testing, may extend to edges */
iRect visBounds; /* actual visual bounds */
iGmLinkId linkId; /* zero for non-links */
uint16_t imageId; /* zero for images */
};
const char * findLoc_GmRun (const iGmRun *, iInt2 pos);
iDeclareClass(GmDocument)
iDeclareObjectConstruction(GmDocument)
enum iGmDocumentFormat {
gemini_GmDocumentFormat,
plainText_GmDocumentFormat,
};
void setFormat_GmDocument (iGmDocument *, enum iGmDocumentFormat format);
void setWidth_GmDocument (iGmDocument *, int width);
void setUrl_GmDocument (iGmDocument *, const iString *url);
void setSource_GmDocument (iGmDocument *, const iString *source, int width);
void setImage_GmDocument (iGmDocument *, iGmLinkId linkId, const iString *mime, const iBlock *data);
void reset_GmDocument (iGmDocument *); /* free images */
typedef void (*iGmDocumentRenderFunc)(void *, const iGmRun *);
void render_GmDocument (const iGmDocument *, iRangei visRangeY, iGmDocumentRenderFunc render, void *);
iInt2 size_GmDocument (const iGmDocument *);
iRangecc findText_GmDocument (const iGmDocument *, const iString *text, const char *start);
iRangecc findTextBefore_GmDocument (const iGmDocument *, const iString *text, const char *before);
const iGmRun * findRun_GmDocument (const iGmDocument *, iInt2 pos);
const char * findLoc_GmDocument (const iGmDocument *, iInt2 pos);
const iGmRun * findRunAtLoc_GmDocument (const iGmDocument *, const char *loc);
const iString * linkUrl_GmDocument (const iGmDocument *, iGmLinkId linkId);
uint16_t linkImage_GmDocument (const iGmDocument *, iGmLinkId linkId);
int linkFlags_GmDocument (const iGmDocument *, iGmLinkId linkId);
enum iColorId linkColor_GmDocument (const iGmDocument *, iGmLinkId linkId);
const iTime * linkTime_GmDocument (const iGmDocument *, iGmLinkId linkId);
iBool isMediaLink_GmDocument (const iGmDocument *, iGmLinkId linkId);
const iString * title_GmDocument (const iGmDocument *);
SDL_Texture * imageTexture_GmDocument (const iGmDocument *, uint16_t imageId);
void imageInfo_GmDocument (const iGmDocument *, uint16_t imageId, iGmImageInfo *info_out);
|