MIRROR: javascript for ๐Ÿœ's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

support for literal case transformation in cprintf

+18
+18
src/cli/cprintf.c
··· 25 25 * quoted values: {let label='hello'} or <let label="world"/> - quotes are stripped from value 26 26 * <$name> to apply a variable as a style, {name} to emit its value as literal text 27 27 * {~name} for lowercase, {^name} for uppercase 28 + * {~'string'} for lowercase literal, {^'string'} for uppercase literal 28 29 * </tagname> or </> to reset (pops one level) 29 30 * <reset/> to reset all styles (clears entire stack) 30 31 * << and >> to emit literal < and > ··· 724 725 if (*name == '~') { lower = 1; name++; } 725 726 else if (*name == '^') { upper = 1; name++; } 726 727 int nlen = (int)(end - name); 728 + 729 + if (*name == '\'' || *name == '"') { 730 + const char *s = name + 1; 731 + const char *e = memchr(s, *name, end - s); 732 + if (!e) goto emit_brace; 733 + 734 + int slen = (int)(e - s); 735 + if (slen > 0 && slen < MAX_VAR_VALUE) { 736 + char buf[MAX_VAR_VALUE]; 737 + if (lower || upper) { transform_case(buf, s, slen, lower); s = buf; } 738 + uint32_t off = add_literal(p, s, slen); 739 + emit_op(p, OP_EMIT_LIT, off); 740 + } 741 + 742 + *lit = end + 1; 743 + return *lit; 744 + } 727 745 728 746 for (int i = 0; i < vars->count; i++) { 729 747 cprintf_var_t *v = &vars->vars[i];