EmbAJAX
Simplistic framework for creating and handling displays and controls on a web page served by an embeddable device (Arduino or other microcontroller with Arduino support).
macro_definitions.h
1 
22 /* //////////// String formatting tokens //////////////// */
23 
24 #define JS_QUOTED_STRING_ARG "\10"
25 #define HTML_QUOTED_STRING_ARG "\11"
26 //#define JS_ESCAPED_STRING_ARG '\12'
27 #define HTML_ESCAPED_STRING_ARG "\13"
28 #define PLAIN_STRING_ARG "\14"
29 #define INTEGER_VALUE_ARG "\15"
30 
31 /* //////////// String formatting macros ////////////////
32  *
33  * The user-facing macro here is printFormatted(). This takes static strings and args in a
34  * and re-aggranges them so that static strings are merged into one, and the variable args args
35  * are appended at the end (suitable for EmbAJAXOutputDriverBase::printContentF(). */
36 
37 // See https://stackoverflow.com/questions/11761703/overloading-macro-on-number-of-arguments
38 #define GET_MACRO(_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,NAME,...) NAME
39 #define printF_(...) GET_MACRO(__VA_ARGS__, printF_26, printF_25, printF_24, printF_23, printF_22, printF_21, printF_20, printF_19, printF_18, printF_17, printF_16, printF_15, printF_14, printF_13, printF_12, printF_11, printF_10, printF_9, printF_8, printF_7, printF_6, printF_5, printF_4, printF_3, printF_2, printF_1)(__VA_ARGS__)
40 
41 #define JS_QUOTED_STRING(X) JS_QUOTED_STRING_ARG, (const char*) X
42 #define HTML_QUOTED_STRING(X) HTML_QUOTED_STRING_ARG, (const char*) X
43 //#define JS_QUOTED_STRING(X) JS_ESCAPED_STRING_ARG, (const char*) X
44 #define HTML_ESCAPED_STRING(X) HTML_ESCAPED_STRING_ARG, (const char*) X
45 #define PLAIN_STRING(X) PLAIN_STRING_ARG, (const char*) X
46 #define INTEGER_VALUE(X) INTEGER_VALUE_ARG, (int) X
47 
48 #define printF_proxy(X, ...) _printContentF(X, __VA_ARGS__);
49 
50 #define printFormatted(...) printF_(__VA_ARGS__)
51 #define printF_3(F1, A1a, A1b) printF_proxy((F1 A1a), A1b)
52 #define printF_4(F1, A1a, A1b, F2) printF_proxy((F1 A1a F2), A1b)
53 //#define printF_5(...) // Not validly possible, as we always follow fmt, arg, fmt, arg...
54 #define printF_6(F1, A1a, A1b, F2, A2a, A2b) printF_proxy((F1 A1a F2 A2a), A1b, A2b)
55 #define printF_7(F1, A1a, A1b, F2, A2a, A2b, F3) printF_proxy((F1 A1a F2 A2a F3), A1b, A2b)
56 //#define printF_8(...)
57 #define printF_9(F1, A1a, A1b, F2, A2a, A2b, F3, A3a, A3b) printF_proxy((F1 A1a F2 A2a F3 A3a), A1b, A2b, A3b)
58 #define printF_10(F1, A1a, A1b, F2, A2a, A2b, F3, A3a, A3b, F4) printF_proxy((F1 A1a F2 A2a F3 A3a F4), A1b, A2b, A3b)
59 //#define printF_11(...)
60 #define printF_12(F1, A1a, A1b, F2, A2a, A2b, F3, A3a, A3b, F4, A4a, A4b) printF_proxy((F1 A1a F2 A2a F3 A3a F4 A4a), A1b, A2b, A3b, A4b)
61 #define printF_13(F1, A1a, A1b, F2, A2a, A2b, F3, A3a, A3b, F4, A4a, A4b, F5) printF_proxy((F1 A1a F2 A2a F3 A3a F4 A4a F5), A1b, A2b, A3b, A4b)
62 //#define printF_14(...)
63 #define printF_15(F1, A1a, A1b, F2, A2a, A2b, F3, A3a, A3b, F4, A4a, A4b, F5, A5a, A5b) printF_proxy((F1 A1a F2 A2a F3 A3a F4 A4a F5 A5a), A1b, A2b, A3b, A4b, A5b)
64 #define printF_16(F1, A1a, A1b, F2, A2a, A2b, F3, A3a, A3b, F4, A4a, A4b, F5, A5a, A5b, F6) printF_proxy((F1 A1a F2 A2a F3 A3a F4 A4a F5 A5a F6), A1b, A2b, A3b, A4b, A5b)
65 //#define printF_17(...)
66 #define printF_18(F1, A1a, A1b, F2, A2a, A2b, F3, A3a, A3b, F4, A4a, A4b, F5, A5a, A5b, F6, A6a, A6b) printF_proxy((F1 A1a F2 A2a F3 A3a F4 A4a F5 A5a F6 A6a), A1b, A2b, A3b, A4b, A5b, A6b)
67 #define printF_19(F1, A1a, A1b, F2, A2a, A2b, F3, A3a, A3b, F4, A4a, A4b, F5, A5a, A5b, F6, A6a, A6b, F7) printF_proxy((F1 A1a F2 A2a F3 A3a F4 A4a F5 A5a F6 A6a F7), A1b, A2b, A3b, A4b, A5b, A6b)
68 //#define printF_20(...)
69 #define printF_21(F1, A1a, A1b, F2, A2a, A2b, F3, A3a, A3b, F4, A4a, A4b, F5, A5a, A5b, F6, A6a, A6b, F7, A7a, A7b) printF_proxy((F1 A1a F2 A2a F3 A3a F4 A4a F5 A5a F6 A6a F7 A7a), A1b, A2b, A3b, A4b, A5b, A6b, A7b)
70 #define printF_22(F1, A1a, A1b, F2, A2a, A2b, F3, A3a, A3b, F4, A4a, A4b, F5, A5a, A5b, F6, A6a, A6b, F7, A7a, A7b, F8) printF_proxy((F1 A1a F2 A2a F3 A3a F4 A4a F5 A5a F6 A6a F7 A7a F8), A1b, A2b, A3b, A4b, A5b, A6b, A7b)
71 //#define printF_23(...)
72 #define printF_24(F1, A1a, A1b, F2, A2a, A2b, F3, A3a, A3b, F4, A4a, A4b, F5, A5a, A5b, F6, A6a, A6b, F7, A7a, A7b, F8, A8a, A8b) printF_proxy((F1 A1a F2 A2a F3 A3a F4 A4a F5 A5a F6 A6a F7 A7a F8 A8a), A1b, A2b, A3b, A4b, A5b, A6b, A7b, A8b)
73 #define printF_25(F1, A1a, A1b, F2, A2a, A2b, F3, A3a, A3b, F4, A4a, A4b, F5, A5a, A5b, F6, A6a, A6b, F7, A7a, A7b, F8, A8a, A8b, F9) printF_proxy((F1 A1a F2 A2a F3 A3a F4 A4a F5 A5a F6 A6a F7 A7a F8 A8a F9), A1b, A2b, A3b, A4b, A5b, A6b, A7b, A8b)
74 
75 //printFormatted("A string", HTML(value), "appendix", HTML(id), "end")
76