term: implement bright background colour; linux/darwin support for format codes
This commit is contained in:
55
term/print.c
55
term/print.c
@@ -1,11 +1,12 @@
|
||||
#include "print.h"
|
||||
|
||||
#include <blue/term.h>
|
||||
#include <blue/core/hash.h>
|
||||
#include <blue/term.h>
|
||||
#include <ctype.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#define F_BLACK "[black]"
|
||||
#define F_RED "[red]"
|
||||
@@ -26,30 +27,30 @@
|
||||
|
||||
typedef b_status (*print_function)(FILE *fp, const char *s);
|
||||
|
||||
#define MOD_HASH_BLACK 0x4b5dd0abbc6fc1e4
|
||||
#define MOD_HASH_RED 0x89e9be1960f4c21c
|
||||
#define MOD_HASH_GREEN 0x0f40f029637fecbc
|
||||
#define MOD_HASH_YELLOW 0x8346a574925e75a9
|
||||
#define MOD_HASH_BLUE 0xc5ccd29bc2dda64d
|
||||
#define MOD_HASH_MAGENTA 0x6c90e772edbc8708
|
||||
#define MOD_HASH_CYAN 0x70ae2e90c1bce27a
|
||||
#define MOD_HASH_WHITE 0xced973885856e206
|
||||
#define MOD_HASH_BLACK 0x4b5dd0abbc6fc1e4
|
||||
#define MOD_HASH_RED 0x89e9be1960f4c21c
|
||||
#define MOD_HASH_GREEN 0x0f40f029637fecbc
|
||||
#define MOD_HASH_YELLOW 0x8346a574925e75a9
|
||||
#define MOD_HASH_BLUE 0xc5ccd29bc2dda64d
|
||||
#define MOD_HASH_MAGENTA 0x6c90e772edbc8708
|
||||
#define MOD_HASH_CYAN 0x70ae2e90c1bce27a
|
||||
#define MOD_HASH_WHITE 0xced973885856e206
|
||||
|
||||
#define MOD_HASH_BG_BLACK 0xd87a8f2d9d394432
|
||||
#define MOD_HASH_BG_RED 0x145b1e4366c7d7aa
|
||||
#define MOD_HASH_BG_GREEN 0xa00b8541d3b1e55a
|
||||
#define MOD_HASH_BG_YELLOW 0x98b030fd86e3b3cf
|
||||
#define MOD_HASH_BG_BLUE 0xa15529109506b5df
|
||||
#define MOD_HASH_BG_MAGENTA 0x86dbda99bcc86222
|
||||
#define MOD_HASH_BG_CYAN 0xf16a3104cf61a098
|
||||
#define MOD_HASH_BG_WHITE 0x3408c46ab5836674
|
||||
#define MOD_HASH_BG_BLACK 0xd87a8f2d9d394432
|
||||
#define MOD_HASH_BG_RED 0x145b1e4366c7d7aa
|
||||
#define MOD_HASH_BG_GREEN 0xa00b8541d3b1e55a
|
||||
#define MOD_HASH_BG_YELLOW 0x98b030fd86e3b3cf
|
||||
#define MOD_HASH_BG_BLUE 0xa15529109506b5df
|
||||
#define MOD_HASH_BG_MAGENTA 0x86dbda99bcc86222
|
||||
#define MOD_HASH_BG_CYAN 0xf16a3104cf61a098
|
||||
#define MOD_HASH_BG_WHITE 0x3408c46ab5836674
|
||||
|
||||
#define MOD_HASH_BOLD 0xcd32ea9bc6b26ff6
|
||||
#define MOD_HASH_BRIGHT 0xb5cca637f5a2b385
|
||||
#define MOD_HASH_ULINE 0x141fe741e9f8c22a
|
||||
#define MOD_HASH_ITALIC 0x69d5e5f057d8992d
|
||||
#define MOD_HASH_INVERT 0xab4ab85ddd6232e1
|
||||
#define MOD_HASH_RESET 0x0f136ff2c086b760
|
||||
#define MOD_HASH_BOLD 0xcd32ea9bc6b26ff6
|
||||
#define MOD_HASH_BRIGHT 0xb5cca637f5a2b385
|
||||
#define MOD_HASH_ULINE 0x141fe741e9f8c22a
|
||||
#define MOD_HASH_ITALIC 0x69d5e5f057d8992d
|
||||
#define MOD_HASH_INVERT 0xab4ab85ddd6232e1
|
||||
#define MOD_HASH_RESET 0x0f136ff2c086b760
|
||||
|
||||
#define COMPARE_MOD_NAME(ss, sd, hs, hd) ((hs) == (hd) && !strcmp(ss, sd))
|
||||
|
||||
@@ -101,7 +102,8 @@ static void apply_modifier(FILE *fp, const char *modifier, unsigned int *mod_fla
|
||||
|
||||
if (COMPARE_MOD_NAME(modifier, "white", mod_hash, MOD_HASH_WHITE)) {
|
||||
mod_flags = Z__B_STREAM_MOD_CLEAR_FG_COLOUR(mod_flags);
|
||||
mod_flags |= Z__B_STREAM_MOD_RED | Z__B_STREAM_MOD_GREEN | Z__B_STREAM_MOD_BLUE;
|
||||
mod_flags |= Z__B_STREAM_MOD_RED | Z__B_STREAM_MOD_GREEN
|
||||
| Z__B_STREAM_MOD_BLUE;
|
||||
}
|
||||
|
||||
if (COMPARE_MOD_NAME(modifier, "bg_black", mod_hash, MOD_HASH_BG_BLACK)) {
|
||||
@@ -141,7 +143,8 @@ static void apply_modifier(FILE *fp, const char *modifier, unsigned int *mod_fla
|
||||
|
||||
if (COMPARE_MOD_NAME(modifier, "bg_white", mod_hash, MOD_HASH_BG_WHITE)) {
|
||||
mod_flags = Z__B_STREAM_MOD_CLEAR_BG_COLOUR(mod_flags);
|
||||
mod_flags |= Z__B_STREAM_MOD_BG_RED | Z__B_STREAM_MOD_BG_GREEN | Z__B_STREAM_MOD_BG_BLUE;
|
||||
mod_flags |= Z__B_STREAM_MOD_BG_RED | Z__B_STREAM_MOD_BG_GREEN
|
||||
| Z__B_STREAM_MOD_BG_BLUE;
|
||||
}
|
||||
|
||||
if (COMPARE_MOD_NAME(modifier, "bold", mod_hash, MOD_HASH_BOLD)) {
|
||||
@@ -177,7 +180,7 @@ static int print(FILE *fp, const char *str)
|
||||
char ctrl_buf[128];
|
||||
unsigned int ctrl_len = 0;
|
||||
|
||||
for (size_t i = 0; str[i]; ) {
|
||||
for (size_t i = 0; str[i];) {
|
||||
char c = str[i++];
|
||||
|
||||
if (c != '[') {
|
||||
|
||||
Reference in New Issue
Block a user