webc v0.0.11
Write and deploy websites using the C Programming Language.
Loading...
Searching...
No Matches
webc-core.h
Go to the documentation of this file.
1
30#ifndef WEBC_H
31#define WEBC_H
32
33#define VERSION_MAJOR 0
34#define VERSION_MINOR 0
35#define VERSION_PATCH 11
36#define VERSION "0.0.11"
37
38#ifndef WEBCAPI
39 #define WEBCAPI extern // Functions defined as 'extern' by default (implicit specifiers)
40#endif
41
42// ############ Includes ############ //
43
44#define CLIB_IMPLEMENTATION
45#include "extern/clib.h"
46
47#ifdef __cplusplus
48extern "C" {
49#endif
50
51// ############ Types ############ //
52
53typedef enum {
54 ATTR_ACTION = 0,
55 ATTR_ALT,
56 ATTR_CHARSET,
57 ATTR_CLASS,
58 ATTR_CONTENT,
59 ATTR_HEIGHT,
60 ATTR_HREF,
61 ATTR_HTTP_EQUIV,
62 ATTR_ID,
63 ATTR_METHOD,
64 ATTR_NAME,
65 ATTR_PROPERTY,
66 ATTR_REL,
67 ATTR_SRC,
68 ATTR_STYLE,
69 ATTR_TABINDEX,
70 ATTR_TARGET,
71 ATTR_TITLE,
72 ATTR_TYPE,
73 ATTR_VALUE,
74 ATTR_CHECKED,
75 ATTR_WIDTH,
76 ATTR_ROLE,
77 ATTR_FOR,
78 ATTR_ARIA_LABEL,
79 ATTR_PLACEHOLDER,
80 ATTR_DATA_PREFIX,
81 ATTR_DATA_TIP,
82 ATTR_MIN,
83 ATTR_MAX,
84 ATTR_STEP,
85 ATTR_DISABLED,
86 ATTR_SELECTED,
87 ATTR_ONCLICK,
88 ATTR_ONCONTEXTMENU,
89 ATTR_ONDBLCLICK,
90 ATTR_ONMOUSEDOWN,
91 ATTR_ONMOUSEENTER,
92 ATTR_ONMOUSELEAVE,
93 ATTR_ONMOUSEMOVE,
94 ATTR_ONMOUSEOUT,
95 ATTR_ONMOUSEOVER,
96 ATTR_ONMOUSEUP,
97
98 ATTRIBUTE_NAME_COUNT
99} AttributeName;
100
101typedef struct {
102 AttributeName name;
103 char* value;
104} Attribute;
105
106#define NO_ATTRIBUTES (AttributeList){0}
107
108typedef struct {
109 Attribute** items;
110 size_t count;
112
113typedef struct {
114 Cstr name;
115 AttributeList attributes;
116} Tag;
117
118typedef struct {
119 Cstr onclick;
120 Cstr oncontextmenu;
121 Cstr ondblclick;
122 Cstr onmousedown;
123 Cstr onmouseenter;
124 Cstr onmouseleave;
125 Cstr onmousemove;
126 Cstr onmouseout;
127 Cstr onmouseover;
128 Cstr onmouseup;
130
131typedef struct {
132 Cstr style;
133 Cstr src;
134 Cstr alt;
135 Cstr href;
136 Cstr target;
137 size_t width;
138 size_t height;
139 Cstr class;
140 Cstr id;
141 Cstr method;
142 Cstr action;
143 Cstr type;
144 Cstr tabindex;
145 Cstr value;
146 Cstr for_;
147 Cstr aria_label;
148 Cstr name;
149 Cstr role;
150 Cstr min;
151 Cstr max;
152 Cstr step;
153 Cstr checked;
154 int disabled;
155 int selected;
156 Cstr placeholder;
157 Cstr data_prefix;
158 Cstr data_tip;
159 MouseEvents mouse_events;
160} Modifier;
161
162
163#define CLASS(cls) \
164 WEBC_UseModifier((Modifier) { .class = cls })
165
166#define STYLE(stl) \
167 WEBC_UseModifier((Modifier) { .style= stl })
168
169#define SRC(s) \
170 WEBC_UseModifier((Modifier) { .src= s })
171
172
173typedef void (*BlockContents)(char** buffer);
174
175// ############ Tags ############ //
176
185WEBCAPI Tag* WEBC_MakeTag(Cstr name, AttributeList attributes);
186
198WEBCAPI Tag* WEBC_MakeTagAttr(Cstr name, Attribute* first, ...);
199
207WEBCAPI Cstr WEBC_ClosingTag(Tag* tag);
208
216WEBCAPI Cstr WEBC_TagToString(Tag* tag);
217
223WEBCAPI void WEBC_CleanTag(Tag** tag);
224
225#define WEBC_OPENING_TAG(name) clib_format_text("<%s>", name)
226#define WEBC_CLOSING_TAG(name) clib_format_text("</%s>", name)
227
228// ############ Utils ############ //
229
230
236WEBCAPI char* WEBC_BufferInit();
237
244WEBCAPI void WEBC_AppendLn(char** buffer, Cstr text);
245
252WEBCAPI void WEBC_Append(char** buffer, Cstr text);
253
259WEBCAPI void WEBC_Clean(char** buffer);
260
267WEBCAPI void WEBC_IntegrateFile(char** buffer, Cstr path);
268
269// ############ Attributes ############ //
270
279WEBCAPI Attribute* WEBC_MakeAttribute(AttributeName name, Cstr value);
280
292
299
307WEBCAPI Cstr WEBC_AttributeNameToString(AttributeName attr);
308
317
318// ############ Elements ############ //
319
320#define META "meta"
321#define LINK "link"
322#define BASE "base"
323
324#define META_AUTHOR_TAG(author) \
325 WEBC_MakeTag(META, \
326 WEBC_MakeAttributeList( \
327 WEBC_MakeAttribute(ATTR_NAME, "author"), \
328 WEBC_MakeAttribute(ATTR_CONTENT, author), \
329 NULL \
330 ) \
331 )
332
333#define META_DESCRIPTION_TAG(description) \
334 WEBC_MakeTag(META, \
335 WEBC_MakeAttributeList( \
336 WEBC_MakeAttribute(ATTR_NAME, "description"), \
337 WEBC_MakeAttribute(ATTR_CONTENT, description), \
338 NULL \
339 ) \
340 )
341
342#define META_KEYWORDS_TAG(keywords) \
343 WEBC_MakeTag(META, \
344 WEBC_MakeAttributeList( \
345 WEBC_MakeAttribute(ATTR_NAME, "keywords"), \
346 WEBC_MakeAttribute(ATTR_CONTENT, keywords), \
347 NULL \
348 ) \
349 )
350
351#define LINK_STYLESHEET_TAG(file) \
352 WEBC_MakeTag(LINK, \
353 WEBC_MakeAttributeList( \
354 WEBC_MakeAttribute(ATTR_REL, "stylesheet"), \
355 WEBC_MakeAttribute(ATTR_HREF, file), \
356 NULL \
357 ) \
358 )
359
360#define LINK_ICON_TAG(file) \
361 WEBC_MakeTag(LINK, \
362 WEBC_MakeAttributeList( \
363 WEBC_MakeAttribute(ATTR_REL, "icon"), \
364 WEBC_MakeAttribute(ATTR_HREF, file), \
365 WEBC_MakeAttribute(ATTR_TYPE, "image/x-icon"), \
366 NULL \
367 ) \
368 )
369
370#define BASE_TAG(prefix) \
371 WEBC_MakeTag(BASE, \
372 WEBC_MakeAttributeList( \
373 WEBC_MakeAttribute(ATTR_HREF, prefix), \
374 NULL \
375 ) \
376 )
377
388WEBCAPI void WEBC_Head(char** buffer, Cstr title, Tag* first, ...);
389
390/*
391The following methods define the major blocks of an HTML document by appending them to the buffer.
392Start and End reference the opening and closing tags.
393*/
394
401WEBCAPI void WEBC_TagStart(char** buffer, Cstr tag_name, AttributeList attributes);
402WEBCAPI void WEBC_TagEnd(char** buffer, Cstr tag_name);
403WEBCAPI void WEBC_AbbrStart(char** buffer, AttributeList attributes);
404WEBCAPI void WEBC_AbbrEnd(char** buffer);
405WEBCAPI void WEBC_AddressStart(char** buffer, AttributeList attributes);
406WEBCAPI void WEBC_AddressEnd(char** buffer);
407WEBCAPI void WEBC_AnchorStart(char** buffer, AttributeList attributes);
408WEBCAPI void WEBC_AnchorEnd(char** buffer);
409WEBCAPI void WEBC_BodyStart(char** buffer, AttributeList attributes);
410WEBCAPI void WEBC_BodyEnd(char** buffer);
411WEBCAPI void WEBC_AreaStart(char** buffer, AttributeList attributes);
412WEBCAPI void WEBC_AreaEnd(char** buffer);
413WEBCAPI void WEBC_ArticleStart(char** buffer, AttributeList attributes);
414WEBCAPI void WEBC_ArticleEnd(char** buffer);
415WEBCAPI void WEBC_AsideStart(char** buffer, AttributeList attributes);
416WEBCAPI void WEBC_AsideEnd(char** buffer);
417WEBCAPI void WEBC_AudioStart(char** buffer, AttributeList attributes);
418WEBCAPI void WEBC_AudioEnd(char** buffer);
419WEBCAPI void WEBC_BStart(char** buffer, AttributeList attributes);
420WEBCAPI void WEBC_BEnd(char** buffer);
421WEBCAPI void WEBC_BdiStart(char** buffer, AttributeList attributes);
422WEBCAPI void WEBC_BdiEnd(char** buffer);
423WEBCAPI void WEBC_BdoStart(char** buffer, AttributeList attributes);
424WEBCAPI void WEBC_BdoEnd(char** buffer);
425WEBCAPI void WEBC_BlockquoteStart(char** buffer, AttributeList attributes);
426WEBCAPI void WEBC_BlockquoteEnd(char** buffer);
427WEBCAPI void WEBC_BoldStart(char** buffer, AttributeList attributes);
428WEBCAPI void WEBC_BoldEnd(char** buffer);
429WEBCAPI void WEBC_BrStart(char** buffer, AttributeList attributes);
430WEBCAPI void WEBC_BrEnd(char** buffer);
431WEBCAPI void WEBC_ButtonStart(char** buffer, AttributeList attributes);
432WEBCAPI void WEBC_ButtonEnd(char** buffer);
433WEBCAPI void WEBC_CanvasStart(char** buffer, AttributeList attributes);
434WEBCAPI void WEBC_CanvasEnd(char** buffer);
435WEBCAPI void WEBC_CaptionStart(char** buffer, AttributeList attributes);
436WEBCAPI void WEBC_CaptionEnd(char** buffer);
437WEBCAPI void WEBC_CiteStart(char** buffer, AttributeList attributes);
438WEBCAPI void WEBC_CiteEnd(char** buffer);
439WEBCAPI void WEBC_CodeStart(char** buffer, AttributeList attributes);
440WEBCAPI void WEBC_CodeEnd(char** buffer);
441WEBCAPI void WEBC_ColStart(char** buffer, AttributeList attributes);
442WEBCAPI void WEBC_ColEnd(char** buffer);
443WEBCAPI void WEBC_ColgroupStart(char** buffer, AttributeList attributes);
444WEBCAPI void WEBC_ColgroupEnd(char** buffer);
445WEBCAPI void WEBC_DataStart(char** buffer, AttributeList attributes);
446WEBCAPI void WEBC_DataEnd(char** buffer);
447WEBCAPI void WEBC_DatalistStart(char** buffer, AttributeList attributes);
448WEBCAPI void WEBC_DatalistEnd(char** buffer);
449WEBCAPI void WEBC_DdStart(char** buffer, AttributeList attributes);
450WEBCAPI void WEBC_DdEnd(char** buffer);
451WEBCAPI void WEBC_DelStart(char** buffer, AttributeList attributes);
452WEBCAPI void WEBC_HtmlStart(char**buffer, Cstr lang);
453WEBCAPI void WEBC_HtmlEnd(char**buffer);
454WEBCAPI void WEBC_DelEnd(char** buffer);
455WEBCAPI void WEBC_DetailsStart(char** buffer, AttributeList attributes);
456WEBCAPI void WEBC_DetailsEnd(char** buffer);
457WEBCAPI void WEBC_DfnStart(char** buffer, AttributeList attributes);
458WEBCAPI void WEBC_DfnEnd(char** buffer);
459WEBCAPI void WEBC_DialogStart(char** buffer, AttributeList attributes);
460WEBCAPI void WEBC_DialogEnd(char** buffer);
461WEBCAPI void WEBC_DivStart(char** buffer, AttributeList attributes);
462WEBCAPI void WEBC_DivEnd(char** buffer);
463WEBCAPI void WEBC_DlStart(char** buffer, AttributeList attributes);
464WEBCAPI void WEBC_DlEnd(char** buffer);
465WEBCAPI void WEBC_DtStart(char** buffer, AttributeList attributes);
466WEBCAPI void WEBC_DtEnd(char** buffer);
467WEBCAPI void WEBC_EmStart(char** buffer, AttributeList attributes);
468WEBCAPI void WEBC_EmEnd(char** buffer);
469WEBCAPI void WEBC_EmbedStart(char** buffer, AttributeList attributes);
470WEBCAPI void WEBC_EmbedEnd(char** buffer);
471WEBCAPI void WEBC_FieldsetStart(char** buffer, AttributeList attributes);
472WEBCAPI void WEBC_FieldsetEnd(char** buffer);
473WEBCAPI void WEBC_FigcaptionStart(char** buffer, AttributeList attributes);
474WEBCAPI void WEBC_FigcaptionEnd(char** buffer);
475WEBCAPI void WEBC_FigureStart(char** buffer, AttributeList attributes);
476WEBCAPI void WEBC_FigureEnd(char** buffer);
477WEBCAPI void WEBC_FooterStart(char** buffer, AttributeList attributes);
478WEBCAPI void WEBC_FooterEnd(char** buffer);
479WEBCAPI void WEBC_FormStart(char** buffer, AttributeList attributes);
480WEBCAPI void WEBC_FormEnd(char** buffer);
481WEBCAPI void WEBC_HeaderStart(char** buffer, AttributeList attributes);
482WEBCAPI void WEBC_HeaderEnd(char** buffer);
483WEBCAPI void WEBC_HeadingStart(char** buffer, AttributeList attributes);
484WEBCAPI void WEBC_HeadingEnd(char** buffer);
485WEBCAPI void WEBC_HgroupStart(char** buffer, AttributeList attributes);
486WEBCAPI void WEBC_HgroupEnd(char** buffer);
487WEBCAPI void WEBC_HrStart(char** buffer, AttributeList attributes);
488WEBCAPI void WEBC_HrEnd(char** buffer);
489WEBCAPI void WEBC_IStart(char** buffer, AttributeList attributes);
490WEBCAPI void WEBC_IEnd(char** buffer);
491WEBCAPI void WEBC_IframeStart(char** buffer, AttributeList attributes);
492WEBCAPI void WEBC_IframeEnd(char** buffer);
493WEBCAPI void WEBC_ImgStart(char** buffer, AttributeList attributes);
494WEBCAPI void WEBC_ImgEnd(char** buffer);
495WEBCAPI void WEBC_InputStart(char** buffer, AttributeList attributes);
496WEBCAPI void WEBC_InputEnd(char** buffer);
497WEBCAPI void WEBC_InsStart(char** buffer, AttributeList attributes);
498WEBCAPI void WEBC_InsEnd(char** buffer);
499WEBCAPI void WEBC_KbdStart(char** buffer, AttributeList attributes);
500WEBCAPI void WEBC_KbdEnd(char** buffer);
501WEBCAPI void WEBC_LabelStart(char** buffer, AttributeList attributes);
502WEBCAPI void WEBC_LabelEnd(char** buffer);
503WEBCAPI void WEBC_LegendStart(char** buffer, AttributeList attributes);
504WEBCAPI void WEBC_LegendEnd(char** buffer);
505WEBCAPI void WEBC_LiStart(char** buffer, AttributeList attributes);
506WEBCAPI void WEBC_LiEnd(char** buffer);
507WEBCAPI void WEBC_LinkStart(char** buffer, AttributeList attributes);
508WEBCAPI void WEBC_LinkEnd(char** buffer);
509WEBCAPI void WEBC_MainStart(char** buffer, AttributeList attributes);
510WEBCAPI void WEBC_MainEnd(char** buffer);
511WEBCAPI void WEBC_MapStart(char** buffer, AttributeList attributes);
512WEBCAPI void WEBC_MapEnd(char** buffer);
513WEBCAPI void WEBC_MarkStart(char** buffer, AttributeList attributes);
514WEBCAPI void WEBC_MarkEnd(char** buffer);
515WEBCAPI void WEBC_MenuStart(char** buffer, AttributeList attributes);
516WEBCAPI void WEBC_MenuEnd(char** buffer);
517WEBCAPI void WEBC_MeterStart(char** buffer, AttributeList attributes);
518WEBCAPI void WEBC_MeterEnd(char** buffer);
519WEBCAPI void WEBC_NavStart(char** buffer, AttributeList attributes);
520WEBCAPI void WEBC_NavEnd(char** buffer);
521WEBCAPI void WEBC_NoscriptStart(char** buffer, AttributeList attributes);
522WEBCAPI void WEBC_NoscriptEnd(char** buffer);
523WEBCAPI void WEBC_ObjectStart(char** buffer, AttributeList attributes);
524WEBCAPI void WEBC_ObjectEnd(char** buffer);
525WEBCAPI void WEBC_OlStart(char** buffer, AttributeList attributes);
526WEBCAPI void WEBC_OlEnd(char** buffer);
527WEBCAPI void WEBC_OptgroupStart(char** buffer, AttributeList attributes);
528WEBCAPI void WEBC_OptgroupEnd(char** buffer);
529WEBCAPI void WEBC_OptionStart(char** buffer, AttributeList attributes);
530WEBCAPI void WEBC_OptionEnd(char** buffer);
531WEBCAPI void WEBC_OutputStart(char** buffer, AttributeList attributes);
532WEBCAPI void WEBC_OutputEnd(char** buffer);
533WEBCAPI void WEBC_ParagraphStart(char** buffer, AttributeList attributes);
534WEBCAPI void WEBC_ParagraphEnd(char** buffer);
535WEBCAPI void WEBC_ParamStart(char** buffer, AttributeList attributes);
536WEBCAPI void WEBC_ParamEnd(char** buffer);
537WEBCAPI void WEBC_PictureStart(char** buffer, AttributeList attributes);
538WEBCAPI void WEBC_PictureEnd(char** buffer);
539WEBCAPI void WEBC_PreStart(char** buffer, AttributeList attributes);
540WEBCAPI void WEBC_PreEnd(char** buffer);
541WEBCAPI void WEBC_ProgressStart(char** buffer, AttributeList attributes);
542WEBCAPI void WEBC_ProgressEnd(char** buffer);
543WEBCAPI void WEBC_QStart(char** buffer, AttributeList attributes);
544WEBCAPI void WEBC_QEnd(char** buffer);
545WEBCAPI void WEBC_RpStart(char** buffer, AttributeList attributes);
546WEBCAPI void WEBC_RpEnd(char** buffer);
547WEBCAPI void WEBC_RtStart(char** buffer, AttributeList attributes);
548WEBCAPI void WEBC_RtEnd(char** buffer);
549WEBCAPI void WEBC_RubyStart(char** buffer, AttributeList attributes);
550WEBCAPI void WEBC_RubyEnd(char** buffer);
551WEBCAPI void WEBC_SStart(char** buffer, AttributeList attributes);
552WEBCAPI void WEBC_SEnd(char** buffer);
553WEBCAPI void WEBC_SampStart(char** buffer, AttributeList attributes);
554WEBCAPI void WEBC_SampEnd(char** buffer);
555WEBCAPI void WEBC_ScriptStart(char** buffer, AttributeList attributes);
556WEBCAPI void WEBC_ScriptEnd(char** buffer);
557WEBCAPI void WEBC_SearchStart(char** buffer, AttributeList attributes);
558WEBCAPI void WEBC_SearchEnd(char** buffer);
559WEBCAPI void WEBC_SectionStart(char** buffer, AttributeList attributes);
560WEBCAPI void WEBC_SectionEnd(char** buffer);
561WEBCAPI void WEBC_SelectStart(char** buffer, AttributeList attributes);
562WEBCAPI void WEBC_SelectEnd(char** buffer);
563WEBCAPI void WEBC_SmallStart(char** buffer, AttributeList attributes);
564WEBCAPI void WEBC_SmallEnd(char** buffer);
565WEBCAPI void WEBC_SourceStart(char** buffer, AttributeList attributes);
566WEBCAPI void WEBC_SourceEnd(char** buffer);
567WEBCAPI void WEBC_SpanStart(char** buffer, AttributeList attributes);
568WEBCAPI void WEBC_SpanEnd(char** buffer);
569WEBCAPI void WEBC_StrongStart(char** buffer, AttributeList attributes);
570WEBCAPI void WEBC_StrongEnd(char** buffer);
571WEBCAPI void WEBC_StyleStart(char** buffer, AttributeList attributes);
572WEBCAPI void WEBC_StyleEnd(char** buffer);
573WEBCAPI void WEBC_SubStart(char** buffer, AttributeList attributes);
574WEBCAPI void WEBC_SubEnd(char** buffer);
575WEBCAPI void WEBC_SummaryStart(char** buffer, AttributeList attributes);
576WEBCAPI void WEBC_SummaryEnd(char** buffer);
577WEBCAPI void WEBC_SupStart(char** buffer, AttributeList attributes);
578WEBCAPI void WEBC_SupEnd(char** buffer);
579WEBCAPI void WEBC_SvgStart(char** buffer, AttributeList attributes);
580WEBCAPI void WEBC_SvgEnd(char** buffer);
581WEBCAPI void WEBC_TableStart(char** buffer, AttributeList attributes);
582WEBCAPI void WEBC_TableEnd(char** buffer);
583WEBCAPI void WEBC_TbodyStart(char** buffer, AttributeList attributes);
584WEBCAPI void WEBC_TbodyEnd(char** buffer);
585WEBCAPI void WEBC_TdStart(char** buffer, AttributeList attributes);
586WEBCAPI void WEBC_TdEnd(char** buffer);
587WEBCAPI void WEBC_TemplateStart(char** buffer, AttributeList attributes);
588WEBCAPI void WEBC_TemplateEnd(char** buffer);
589WEBCAPI void WEBC_TextareaStart(char** buffer, AttributeList attributes);
590WEBCAPI void WEBC_TextareaEnd(char** buffer);
591WEBCAPI void WEBC_TfootStart(char** buffer, AttributeList attributes);
592WEBCAPI void WEBC_TfootEnd(char** buffer);
593WEBCAPI void WEBC_ThStart(char** buffer, AttributeList attributes);
594WEBCAPI void WEBC_ThEnd(char** buffer);
595WEBCAPI void WEBC_TheadStart(char** buffer, AttributeList attributes);
596WEBCAPI void WEBC_TheadEnd(char** buffer);
597WEBCAPI void WEBC_TimeStart(char** buffer, AttributeList attributes);
598WEBCAPI void WEBC_TimeEnd(char** buffer);
599WEBCAPI void WEBC_TrStart(char** buffer, AttributeList attributes);
600WEBCAPI void WEBC_TrEnd(char** buffer);
601WEBCAPI void WEBC_TrackStart(char** buffer, AttributeList attributes);
602WEBCAPI void WEBC_TrackEnd(char** buffer);
603WEBCAPI void WEBC_UStart(char** buffer, AttributeList attributes);
604WEBCAPI void WEBC_UEnd(char** buffer);
605WEBCAPI void WEBC_UlStart(char** buffer, AttributeList attributes);
606WEBCAPI void WEBC_UlEnd(char** buffer);
607WEBCAPI void WEBC_VarStart(char** buffer, AttributeList attributes);
608WEBCAPI void WEBC_VarEnd(char** buffer);
609WEBCAPI void WEBC_VideoStart(char** buffer, AttributeList attributes);
610WEBCAPI void WEBC_VideoEnd(char** buffer);
611WEBCAPI void WEBC_WbrStart(char** buffer, AttributeList attributes);
612WEBCAPI void WEBC_WbrEnd(char** buffer);
613
614// TODO: maybe add more Start-End pair for easier use
615
616
617// Helpers
618WEBCAPI void WEBC_Block(char** buffer, Tag* tag, BlockContents contents);
619WEBCAPI void WEBC_BlockAttr(char** buffer, Cstr name, AttributeList attributes, BlockContents contents);
620WEBCAPI void WEBC_InlineBlock(char** buffer, Cstr name, AttributeList attributes, Cstr text);
621
622/*
623The following methods are used to append all the available (but not deprecated) html tags to the buffer
624*/
625
626
627
628WEBCAPI void WEBC_Abbr(char** buffer, AttributeList attributes, Cstr text);
629WEBCAPI void WEBC_Address(char** buffer, AttributeList attributes, BlockContents contents);
630WEBCAPI void WEBC_Anchor(char** buffer, AttributeList attributes, Cstr text);
631WEBCAPI void WEBC_AnchorBlock(char** buffer, AttributeList attributes, BlockContents contents);
632WEBCAPI void WEBC_Area(char** buffer, AttributeList attributes, BlockContents contents);
633WEBCAPI void WEBC_Article(char** buffer, AttributeList attributes, BlockContents contents);
634WEBCAPI void WEBC_Aside(char** buffer, AttributeList attributes, BlockContents contents);
635WEBCAPI void WEBC_Audio(char** buffer, AttributeList attributes, BlockContents contents);
636WEBCAPI void WEBC_B(char** buffer, AttributeList attributes, Cstr text);
637WEBCAPI void WEBC_Bdi(char** buffer, AttributeList attributes, Cstr text);
638WEBCAPI void WEBC_Bdo(char** buffer, AttributeList attributes, Cstr text);
639WEBCAPI void WEBC_Blockquote(char** buffer, AttributeList attributes, Cstr text);
640WEBCAPI void WEBC_Bold(char** buffer, AttributeList attributes, Cstr text);
641WEBCAPI void WEBC_Br(char** buffer);
642WEBCAPI void WEBC_Button(char** buffer, AttributeList attributes, Cstr text);
643WEBCAPI void WEBC_ButtonBlock(char** buffer, AttributeList attributes, BlockContents contents);
644WEBCAPI void WEBC_Canvas(char** buffer, AttributeList attributes, BlockContents contents);
645WEBCAPI void WEBC_Caption(char** buffer, AttributeList attributes, Cstr text);
646WEBCAPI void WEBC_Cite(char** buffer, AttributeList attributes, Cstr text);
647WEBCAPI void WEBC_Code(char** buffer, AttributeList attributes, Cstr text);
648WEBCAPI void WEBC_Col(char** buffer, AttributeList attributes, BlockContents contents);
649WEBCAPI void WEBC_Colgroup(char** buffer, AttributeList attributes, BlockContents contents);
650WEBCAPI void WEBC_Data(char** buffer, AttributeList attributes, BlockContents contents);
651WEBCAPI void WEBC_Datalist(char** buffer, AttributeList attributes, BlockContents contents);
652WEBCAPI void WEBC_Dd(char** buffer, AttributeList attributes, Cstr text);
653WEBCAPI void WEBC_Del(char** buffer, AttributeList attributes, Cstr text);
654WEBCAPI void WEBC_Del(char** buffer, AttributeList attributes, Cstr text);
655WEBCAPI void WEBC_Details(char** buffer, AttributeList attributes, BlockContents contents);
656WEBCAPI void WEBC_Dfn(char** buffer, AttributeList attributes, Cstr text);
657WEBCAPI void WEBC_Dialog(char** buffer, AttributeList attributes, BlockContents contents);
658WEBCAPI void WEBC_Div(char** buffer, AttributeList attributes, BlockContents contents);
659WEBCAPI void WEBC_Dl(char** buffer, AttributeList attributes, BlockContents contents);
660WEBCAPI void WEBC_Dt(char** buffer, AttributeList attributes, Cstr text);
661WEBCAPI void WEBC_Em(char** buffer, AttributeList attributes, Cstr text);
662WEBCAPI void WEBC_Embed(char** buffer, AttributeList attributes, BlockContents contents);
663WEBCAPI void WEBC_Fieldset(char** buffer, AttributeList attributes, BlockContents contents);
664WEBCAPI void WEBC_Figcaption(char** buffer, AttributeList attributes, Cstr text);
665WEBCAPI void WEBC_Figure(char** buffer, AttributeList attributes, BlockContents contents);
666WEBCAPI void WEBC_Footer(char** buffer, AttributeList attributes, BlockContents contents);
667WEBCAPI void WEBC_Form (char** buffer, AttributeList attributes, BlockContents contents);
668WEBCAPI void WEBC_Header(char** buffer, AttributeList attributes, BlockContents contents);
669WEBCAPI void WEBC_Heading(char** buffer, AttributeList attributes, size_t size, Cstr text);
670WEBCAPI void WEBC_Hgroup(char** buffer, AttributeList attributes, BlockContents contents);
671WEBCAPI void WEBC_Hr(char** buffer);
672WEBCAPI void WEBC_I(char** buffer, AttributeList attributes, Cstr text);
673WEBCAPI void WEBC_Iframe(char** buffer, AttributeList attributes, BlockContents contents);
674WEBCAPI void WEBC_Img(char** buffer, AttributeList attributes);
675WEBCAPI void WEBC_Input(char** buffer, AttributeList attributes);
676WEBCAPI void WEBC_Ins(char** buffer, AttributeList attributes, Cstr text);
677WEBCAPI void WEBC_Kbd(char** buffer, AttributeList attributes, Cstr text);
678WEBCAPI void WEBC_Label(char** buffer, AttributeList attributes, Cstr text);
679WEBCAPI void WEBC_Legend(char** buffer, AttributeList attributes, Cstr text);
680WEBCAPI void WEBC_Li(char** buffer, AttributeList attributes, Cstr text);
681WEBCAPI void WEBC_LiBlock(char** buffer, AttributeList attributes, BlockContents contents);
682WEBCAPI void WEBC_Link(char** buffer, AttributeList attributes);
683WEBCAPI void WEBC_Main(char** buffer, AttributeList attributes, BlockContents contents);
684WEBCAPI void WEBC_Map(char** buffer, AttributeList attributes, BlockContents contents);
685WEBCAPI void WEBC_Mark(char** buffer, AttributeList attributes, Cstr text);
686WEBCAPI void WEBC_Menu(char** buffer, AttributeList attributes, BlockContents contents);
687WEBCAPI void WEBC_Meter(char** buffer, AttributeList attributes, Cstr text);
688WEBCAPI void WEBC_Nav(char** buffer, AttributeList attributes, BlockContents contents);
689WEBCAPI void WEBC_Noscript(char** buffer, AttributeList attributes, BlockContents contents);
690WEBCAPI void WEBC_Object(char** buffer, AttributeList attributes, BlockContents contents);
691WEBCAPI void WEBC_Ol(char** buffer, AttributeList attributes, BlockContents contents);
692WEBCAPI void WEBC_Optgroup(char** buffer, AttributeList attributes, BlockContents contents);
693WEBCAPI void WEBC_Option(char** buffer, AttributeList attributes, Cstr text);
694WEBCAPI void WEBC_Output(char** buffer, AttributeList attributes, Cstr text);
695WEBCAPI void WEBC_Paragraph(char** buffer, AttributeList attributes, Cstr text);
696WEBCAPI void WEBC_ParagraphBlock(char** buffer, AttributeList attributes, BlockContents contents);
697WEBCAPI void WEBC_Param(char** buffer, AttributeList attributes, Cstr text);
698WEBCAPI void WEBC_Picture(char** buffer, AttributeList attributes, BlockContents contents);
699WEBCAPI void WEBC_Pre(char** buffer, AttributeList attributes, Cstr text);
700WEBCAPI void WEBC_Progress(char** buffer, AttributeList attributes, Cstr text);
701WEBCAPI void WEBC_Q(char** buffer, AttributeList attributes, Cstr text);
702WEBCAPI void WEBC_Rp(char** buffer, AttributeList attributes, Cstr text);
703WEBCAPI void WEBC_Rt(char** buffer, AttributeList attributes, Cstr text);
704WEBCAPI void WEBC_Ruby(char** buffer, AttributeList attributes, BlockContents contents);
705WEBCAPI void WEBC_S(char** buffer, AttributeList attributes, Cstr text);
706WEBCAPI void WEBC_Samp(char** buffer, AttributeList attributes, Cstr text);
707WEBCAPI void WEBC_Script(char**buffer, AttributeList attributes, BlockContents contents);
708WEBCAPI void WEBC_Search(char** buffer, AttributeList attributes, BlockContents contents);
709WEBCAPI void WEBC_Section(char** buffer, AttributeList attributes, BlockContents contents);
710WEBCAPI void WEBC_Select(char** buffer, AttributeList attributes, BlockContents contents);
711WEBCAPI void WEBC_Small(char** buffer, AttributeList attributes, Cstr text);
712WEBCAPI void WEBC_Source(char** buffer, AttributeList attributes);
713WEBCAPI void WEBC_Span(char** buffer, AttributeList attributes, Cstr text);
714WEBCAPI void WEBC_Strong(char** buffer, AttributeList attributes, Cstr text);
715WEBCAPI void WEBC_Style(char**buffer, AttributeList attributes, BlockContents contents);
716WEBCAPI void WEBC_Sub(char** buffer, AttributeList attributes, Cstr text);
717WEBCAPI void WEBC_Summary(char** buffer, AttributeList attributes, Cstr text);
718WEBCAPI void WEBC_Sup(char** buffer, AttributeList attributes, Cstr text);
719WEBCAPI void WEBC_Svg(char** buffer, AttributeList attributes, BlockContents contents);
720WEBCAPI void WEBC_Table(char** buffer, AttributeList attributes, BlockContents contents);
721WEBCAPI void WEBC_Tbody(char** buffer, AttributeList attributes, BlockContents contents);
722WEBCAPI void WEBC_Td(char** buffer, AttributeList attributes, Cstr text);
723WEBCAPI void WEBC_Template(char** buffer, AttributeList attributes, BlockContents contents);
724WEBCAPI void WEBC_Textarea(char** buffer, AttributeList attributes, BlockContents contents);
725WEBCAPI void WEBC_Tfoot(char** buffer, AttributeList attributes, BlockContents contents);
726WEBCAPI void WEBC_Th(char** buffer, AttributeList attributes, Cstr text);
727WEBCAPI void WEBC_Thead(char** buffer, AttributeList attributes, BlockContents contents);
728WEBCAPI void WEBC_Time(char** buffer, AttributeList attributes, Cstr text);
729WEBCAPI void WEBC_Tr(char** buffer, AttributeList attributes, BlockContents contents);
730WEBCAPI void WEBC_Track(char** buffer, AttributeList attributes);
731WEBCAPI void WEBC_U(char** buffer, AttributeList attributes, Cstr text);
732WEBCAPI void WEBC_Ul(char** buffer, AttributeList attributes, BlockContents contents);
733WEBCAPI void WEBC_Var(char** buffer, AttributeList attributes, Cstr text);
734WEBCAPI void WEBC_Video(char** buffer, AttributeList attributes, BlockContents contents);
735WEBCAPI void WEBC_Wbr(char** buffer, AttributeList attributes, Cstr text);
736
737/*
738The following macros are used to append the html tags that don't use tags
739*/
740
741#define WEBC_PlainText(buffer, text) \
742 WEBC_AppendLn(buffer, text)
743#define WEBC_Javascript(buffer, text) \
744 WEBC_PlainText(buffer, text)
745#define WEBC_Comment(buffer, text) \
746 do { \
747 char* comment = clib_format_text("<!--%s-->\n", text); \
748 WEBC_AppendLn(buffer, comment); \
749 free(comment); \
750 } while(0);
751#define WEBC_LogComment(buffer, tag, text) \
752 do { \
753 char* comment = clib_format_text("<!--[%s] %s-->\n", tag, text); \
754 WEBC_AppendLn(buffer, comment); \
755 free(comment); \
756 } while(0);
757#define WEBC_InfoComment(buffer, text) \
758 WEBC_LogComment(buffer, "INFO", text);
759#define WEBC_TipComment(buffer, text) \
760 WEBC_LogComment(buffer, "TIP", text);
761#define WEBC_TodoComment(buffer, text) \
762 WEBC_LogComment(buffer, "TODO", text);
763
764
765/*
766Specific Heading elements
767*/
768
769#define WEBC_H1(buffer, attr, text) \
770 WEBC_Heading(buffer, attr, 1, text);
771#define WEBC_H2(buffer, attr, text) \
772 WEBC_Heading(buffer, attr, 2, text);
773#define WEBC_H3(buffer, attr, text) \
774 WEBC_Heading(buffer, attr, 3, text);
775#define WEBC_H4(buffer, attr, text) \
776 WEBC_Heading(buffer, attr, 4, text);
777#define WEBC_H5(buffer, attr, text) \
778 WEBC_Heading(buffer, attr, 5, text);
779#define WEBC_H6(buffer, attr, text) \
780 WEBC_Heading(buffer, attr, 6, text);
781
782#ifdef __cplusplus
783}
784#endif
785
786#endif // WEBC_H
Definition webc-core.h:108
Definition webc-core.h:101
Definition webc-core.h:131
Definition webc-core.h:118
Definition webc-core.h:113
WEBCAPI void WEBC_AppendLn(char **buffer, Cstr text)
WEBCAPI void WEBC_CleanTag(Tag **tag)
WEBCAPI char * WEBC_BufferInit()
WEBCAPI void WEBC_Clean(char **buffer)
WEBCAPI Tag * WEBC_MakeTag(Cstr name, AttributeList attributes)
WEBCAPI Attribute * WEBC_MakeAttribute(AttributeName name, Cstr value)
WEBCAPI Cstr WEBC_TagToString(Tag *tag)
WEBCAPI AttributeList WEBC_UseModifier(Modifier modifier)
WEBCAPI void WEBC_Head(char **buffer, Cstr title, Tag *first,...)
WEBCAPI AttributeList WEBC_MakeAttributeList(Attribute *first,...)
WEBCAPI void WEBC_CleanAttributeList(AttributeList list)
WEBCAPI Cstr WEBC_ClosingTag(Tag *tag)
WEBCAPI void WEBC_Append(char **buffer, Cstr text)
WEBCAPI Tag * WEBC_MakeTagAttr(Cstr name, Attribute *first,...)
WEBCAPI Cstr WEBC_AttributeNameToString(AttributeName attr)
WEBCAPI void WEBC_IntegrateFile(char **buffer, Cstr path)
WEBCAPI void WEBC_TagStart(char **buffer, Cstr tag_name, AttributeList attributes)