aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Ankarström <john@ankarstrom.se>2020-11-09 00:44:43 +0100
committerJohn Ankarström <john@ankarstrom.se>2020-11-09 00:44:43 +0100
commit650778580c74876ef5635398d6b1c490a6130194 (patch)
tree03a418615e7c431c24c23f910bbf74de2bf06919
parentc0091a8b7a5efd7b0f4f714327710513802d4668 (diff)
downloadtea-650778580c74876ef5635398d6b1c490a6130194.tar.gz
make BI (bold+italic) work
-rw-r--r--tea.c51
1 files 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;