direct mode: kill a bunch of style-related duplication

pull/1825/head
nick black 3 years ago
parent cba21d24fa
commit 0e9641e0f5
No known key found for this signature in database
GPG Key ID: 5F43400C21CBFACC

@ -864,25 +864,43 @@ char* ncdirect_readline(ncdirect* n, const char* prompt){
}
static inline int
ncdirect_style_emit(ncdirect* n, unsigned stylebits, FILE* out){
ncdirect_style_emit(ncdirect* n, unsigned* stylebits, FILE* out){
int r = -1;
const char* esc;
if(stylebits == 0 && (esc = get_escape(&n->tcache, ESCAPE_SGR0))){
if(*stylebits == 0 && (esc = get_escape(&n->tcache, ESCAPE_SGR0))){
r = term_emit(esc, n->ttyfp, false);
}else if( (esc = get_escape(&n->tcache, ESCAPE_SGR)) ){
r = term_emit(tiparm(esc, stylebits & NCSTYLE_STANDOUT,
stylebits & NCSTYLE_UNDERLINE,
stylebits & NCSTYLE_REVERSE,
stylebits & NCSTYLE_BLINK,
stylebits & NCSTYLE_DIM,
stylebits & NCSTYLE_BOLD,
stylebits & NCSTYLE_INVIS,
r = term_emit(tiparm(esc, *stylebits & NCSTYLE_STANDOUT,
*stylebits & NCSTYLE_UNDERLINE,
*stylebits & NCSTYLE_REVERSE,
*stylebits & NCSTYLE_BLINK,
*stylebits & NCSTYLE_DIM,
*stylebits & NCSTYLE_BOLD,
*stylebits & NCSTYLE_INVIS,
0 /* protect */, 0), out, false);
}else{
// no sgr, interesting. return failure if our stylebits were provided?
// back off to individual enablers? FIXME
return 0;
}
// sgr will blow away non-sgr properties if they were set beforehand
n->stylemask &= ~(NCSTYLE_ITALIC | NCSTYLE_STRUCK | NCSTYLE_UNDERCURL);
if(term_setstyle(n->ttyfp, n->stylemask, *stylebits, NCSTYLE_ITALIC,
get_escape(&n->tcache, ESCAPE_SITM),
get_escape(&n->tcache, ESCAPE_RITM))){
return -1;
}
if(term_setstyle(n->ttyfp, n->stylemask, *stylebits, NCSTYLE_STRUCK,
get_escape(&n->tcache, ESCAPE_SMXX),
get_escape(&n->tcache, ESCAPE_RMXX))){
return -1;
}
if(term_setstyle(n->ttyfp, n->stylemask, *stylebits, NCSTYLE_UNDERCURL,
get_escape(&n->tcache, ESCAPE_SMULX),
get_escape(&n->tcache, ESCAPE_SMULNOX))){
return -1;
}
n->stylemask = *stylebits;
// sgr resets colors, so set them back up if not defaults
if(r == 0){
// emitting an sgr resets colors. if we want to be default, that's no
@ -921,23 +939,7 @@ int ncdirect_styles_on(ncdirect* n, unsigned stylebits){
int ncdirect_on_styles(ncdirect* n, unsigned stylebits){
uint32_t stylemask = n->stylemask | stylebits;
if(ncdirect_style_emit(n, stylemask, n->ttyfp) == 0){
if(term_setstyle(n->ttyfp, n->stylemask, stylemask, NCSTYLE_ITALIC,
get_escape(&n->tcache, ESCAPE_SITM),
get_escape(&n->tcache, ESCAPE_RITM))){
return 0;
}
if(term_setstyle(n->ttyfp, n->stylemask, stylemask, NCSTYLE_STRUCK,
get_escape(&n->tcache, ESCAPE_SMXX),
get_escape(&n->tcache, ESCAPE_RMXX))){
return -1;
}
if(term_setstyle(n->ttyfp, n->stylemask, stylemask, NCSTYLE_UNDERCURL,
get_escape(&n->tcache, ESCAPE_SMULX),
get_escape(&n->tcache, ESCAPE_SMULNOX))){
return -1;
}
n->stylemask = stylemask;
if(ncdirect_style_emit(n, &stylemask, n->ttyfp) == 0){
return 0;
}
return -1;
@ -954,23 +956,7 @@ unsigned ncdirect_styles(ncdirect* n){
// turn off any specified stylebits
int ncdirect_off_styles(ncdirect* n, unsigned stylebits){
uint32_t stylemask = n->stylemask & ~stylebits;
if(ncdirect_style_emit(n, stylemask, n->ttyfp) == 0){
if(term_setstyle(n->ttyfp, n->stylemask, stylemask, NCSTYLE_ITALIC,
get_escape(&n->tcache, ESCAPE_SITM),
get_escape(&n->tcache, ESCAPE_RITM))){
return -1;
}
if(term_setstyle(n->ttyfp, n->stylemask, stylemask, NCSTYLE_STRUCK,
get_escape(&n->tcache, ESCAPE_SMXX),
get_escape(&n->tcache, ESCAPE_RMXX))){
return -1;
}
if(term_setstyle(n->ttyfp, n->stylemask, stylemask, NCSTYLE_UNDERCURL,
get_escape(&n->tcache, ESCAPE_SMULX),
get_escape(&n->tcache, ESCAPE_SMULNOX))){
return -1;
}
n->stylemask = stylemask;
if(ncdirect_style_emit(n, &stylemask, n->ttyfp) == 0){
return 0;
}
return -1;
@ -986,26 +972,9 @@ int ncdirect_set_styles(ncdirect* n, unsigned stylebits){
return -1;
}
uint32_t stylemask = stylebits;
if(ncdirect_style_emit(n, stylemask, n->ttyfp)){
return -1;
}
n->stylemask &= !(NCSTYLE_ITALIC | NCSTYLE_STRUCK); // sgr clears both
if(term_setstyle(n->ttyfp, n->stylemask, stylemask, NCSTYLE_ITALIC,
get_escape(&n->tcache, ESCAPE_SITM),
get_escape(&n->tcache, ESCAPE_RITM))){
return -1;
}
if(term_setstyle(n->ttyfp, n->stylemask, stylemask, NCSTYLE_STRUCK,
get_escape(&n->tcache, ESCAPE_SMXX),
get_escape(&n->tcache, ESCAPE_RMXX))){
return -1;
}
if(term_setstyle(n->ttyfp, n->stylemask, stylemask, NCSTYLE_UNDERCURL,
get_escape(&n->tcache, ESCAPE_SMULX),
get_escape(&n->tcache, ESCAPE_SMULNOX))){
if(ncdirect_style_emit(n, &stylemask, n->ttyfp)){
return -1;
}
n->stylemask = stylemask;
return 0;
}

Loading…
Cancel
Save