mirror of https://github.com/fltk/fltk
Fix Fl_Terminal::handle_unknown_char() for plot_char() (#948)
- Add 'int Fl_Terminal::handle_unknown_char(int drow, int dcol)' to write the "unknown" character to the intended display position. - Define Fl_Terminal::unknown_char as a static variable to avoid redundancy. In the future this might be overridden by users.
This commit is contained in:
parent
265e5cd77b
commit
05a95e146b
|
@ -1027,6 +1027,7 @@ public:
|
|||
void append(const char *s, int len=-1);
|
||||
protected:
|
||||
int handle_unknown_char(void);
|
||||
int handle_unknown_char(int drow, int dcol);
|
||||
// Drawing
|
||||
void draw_row_bg(int grow, int X, int Y) const;
|
||||
void draw_row(int grow, int Y) const;
|
||||
|
@ -1170,6 +1171,9 @@ public:
|
|||
// API: Show unknown/unprintable chars
|
||||
bool show_unknown(void) const;
|
||||
void show_unknown(bool val);
|
||||
protected:
|
||||
static const char *unknown_char; ///< "unknown" replacement character
|
||||
public:
|
||||
// API: ANSI sequences
|
||||
bool ansi(void) const;
|
||||
void ansi(bool val);
|
||||
|
|
|
@ -37,6 +37,12 @@
|
|||
#include <FL/fl_string_functions.h>
|
||||
#include "Fl_String.H"
|
||||
|
||||
/////////////////////////////////
|
||||
////// Static Class Data ////////
|
||||
/////////////////////////////////
|
||||
|
||||
const char *Fl_Terminal::unknown_char = "¿";
|
||||
|
||||
/////////////////////////////////
|
||||
////// Static Functions /////////
|
||||
/////////////////////////////////
|
||||
|
@ -2995,8 +3001,10 @@ const Fl_Terminal::Utf8Char* Fl_Terminal::utf8_char_at_glob(int grow, int gcol)
|
|||
void Fl_Terminal::plot_char(const char *text, int len, int drow, int dcol) {
|
||||
Utf8Char *u8c = u8c_disp_row(drow) + dcol;
|
||||
// text_utf8() warns we must do invalid checks first
|
||||
if (!text || len<1 || len>u8c->max_utf8() || len!=fl_utf8len(*text))
|
||||
{ handle_unknown_char(); return; }
|
||||
if (!text || len<1 || len>u8c->max_utf8() || len!=fl_utf8len(*text)) {
|
||||
handle_unknown_char(drow, dcol);
|
||||
return;
|
||||
}
|
||||
u8c->text_utf8(text, len, *current_style_);
|
||||
}
|
||||
|
||||
|
@ -3019,7 +3027,10 @@ void Fl_Terminal::plot_char(const char *text, int len, int drow, int dcol) {
|
|||
\see show_unknown(bool), handle_unknown_char(), is_printable()
|
||||
*/
|
||||
void Fl_Terminal::plot_char(char c, int drow, int dcol) {
|
||||
if (!is_printable(c)) { handle_unknown_char(); return; }
|
||||
if (!is_printable(c)) {
|
||||
handle_unknown_char(drow, dcol);
|
||||
return;
|
||||
}
|
||||
Utf8Char *u8c = u8c_disp_row(drow) + dcol;
|
||||
u8c->text_ascii(c, *current_style_);
|
||||
}
|
||||
|
@ -3233,17 +3244,36 @@ void Fl_Terminal::append(const char *s, int len/*=-1*/) {
|
|||
/**
|
||||
Handle an unknown char by either emitting an error symbol to the tty, or do nothing,
|
||||
depending on the user configurable value of show_unknown().
|
||||
|
||||
This writes the "unknown" character to the output stream
|
||||
if show_unknown() is true.
|
||||
|
||||
Returns 1 if tty modified, 0 if not.
|
||||
\see show_unknown()
|
||||
*/
|
||||
int Fl_Terminal::handle_unknown_char(void) {
|
||||
const char *unknown = "¿";
|
||||
if (show_unknown_) {
|
||||
escseq.reset(); // disable any pending esc seq to prevent eating unknown char
|
||||
print_char(unknown);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
if (!show_unknown_) return 0;
|
||||
escseq.reset(); // disable any pending esc seq to prevent eating unknown char
|
||||
print_char(unknown_char);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
Handle an unknown char by either emitting an error symbol to the tty, or do nothing,
|
||||
depending on the user configurable value of show_unknown().
|
||||
|
||||
This writes the "unknown" character to the display position \p (drow,dcol)
|
||||
if show_unknown() is true.
|
||||
|
||||
Returns 1 if tty modified, 0 if not.
|
||||
\see show_unknown()
|
||||
*/
|
||||
int Fl_Terminal::handle_unknown_char(int drow, int dcol) {
|
||||
if (!show_unknown_) return 0;
|
||||
int len = (int)strlen(unknown_char);
|
||||
Utf8Char *u8c = u8c_disp_row(drow) + dcol;
|
||||
u8c->text_utf8(unknown_char, len, *current_style_);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Handle user interactive scrolling
|
||||
|
|
Loading…
Reference in New Issue