From 650778580c74876ef5635398d6b1c490a6130194 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Mon, 9 Nov 2020 00:44:43 +0100 Subject: make BI (bold+italic) work --- tea.c | 51 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/tea.c b/tea.c index 0865a35..5c60ce9 100644 --- a/tea.c +++ b/tea.c @@ -234,19 +234,44 @@ int main() { read(ttyfd, &c, 1); switch (c) { case 'b': - if (bold) break; +bold: + if (bold && italic) { + bold = false; + italic = false; + goto italic; + } + if (bold && !italic) goto roman; addc('\\'); hide(); addc('f'); hide(); - addc('B'); hide(); + if (italic) { + addc('('); hide(); + addc('B'); hide(); + addc('I'); hide(); + } else { + addc('B'); hide(); + } bold = true; break; +italic: case 'i': - if (italic) break; + if (italic && bold) { + italic = false; + bold = false; + goto bold; + } + if (italic && !bold) goto roman; addc('\\'); hide(); addc('f'); hide(); - addc('I'); hide(); + if (bold) { + addc('('); hide(); + addc('B'); hide(); + addc('I'); hide(); + } else { + addc('I'); hide(); + } italic = true; break; +roman: case 'r': case ' ': if (!bold && !italic) break; @@ -283,6 +308,12 @@ int main() { bold = false; if (src[src_l] = 'I') italic = false; + if (src[src_l] = 'R') { + if ((types[src_l-3] & BOLD) == BOLD) + bold = true; + if ((types[src_l-3] & ITALIC) == ITALIC) + italic = true; + } } while (types[src_l] == HIDDEN) delc(); @@ -292,12 +323,20 @@ int main() { default: if (iscntrl(c)) break; prn(CSI "0m"); + types[src_l] &= ~BOLD; + types[src_l] &= ~ITALIC; if (x == 1 && c == '.') dot = true; addc(c); if (x > w) breakline(); - if (bold) prn(CSI "1m"); if (dot) prn(CSI "2m"); - if (italic) prn(CSI "3m"); + if (bold) { + prn(CSI "1m"); + types[src_l] |= BOLD; + } + if (italic) { + prn(CSI "3m"); + types[src_l] |= ITALIC; + } prn("%c", c); x++; break; -- cgit v1.2.3