}
}
-static u32 vc_uniscr_getc(struct vc_data *vc, int relative_pos)
-{
- int pos = vc->state.x + vc->vc_need_wrap + relative_pos;
-
- if (vc->vc_uni_lines && pos >= 0 && pos < vc->vc_cols)
- return vc->vc_uni_lines[vc->state.y][pos];
- return 0;
-}
-
static void vc_uniscr_copy_area(u32 **dst_lines,
unsigned int dst_cols,
unsigned int dst_rows,
return false;
}
-static void vc_con_rewind(struct vc_data *vc)
-{
- if (vc->state.x && !vc->vc_need_wrap) {
- vc->vc_pos -= 2;
- vc->state.x--;
- }
- vc->vc_need_wrap = 0;
-}
-
static int vc_con_write_normal(struct vc_data *vc, int tc, int c,
struct vc_draw_region *draw)
{
- int next_c, prev_c;
+ int next_c;
unsigned char vc_attr = vc->vc_attr;
u16 himask = vc->vc_hi_font_mask, charmask = himask ? 0x1ff : 0xff;
u8 width = 1;
bool inverse = false;
if (vc->vc_utf && !vc->vc_disp_ctrl) {
- if (ucs_is_double_width(c)) {
+ if (ucs_is_double_width(c))
width = 2;
- } else if (ucs_is_zero_width(c)) {
- prev_c = vc_uniscr_getc(vc, -1);
- if (prev_c == ' ' &&
- ucs_is_double_width(vc_uniscr_getc(vc, -2))) {
- /*
- * Let's merge this zero-width code point with
- * the preceding double-width code point by
- * replacing the existing whitespace padding.
- */
- vc_con_rewind(vc);
- } else if (c == 0xfe0f && prev_c != 0) {
- /*
- * VS16 (U+FE0F) is special. Let it have a
- * width of 1 when preceded by a single-width
- * code point effectively making the later
- * double-width.
- */
- } else {
- /* Otherwise zero-width code points are ignored */
- goto out;
- }
- }
}
/* Now try to find out how to display it */
tc = ' ';
next_c = ' ';
}
-
-out:
notify_write(vc, c);
if (inverse)
int conv_uni_to_8bit(u32 uni);
void console_map_init(void);
bool ucs_is_double_width(uint32_t cp);
-static inline bool ucs_is_zero_width(uint32_t cp)
-{
- /* coming soon */
- return false;
-}
#else
static inline u16 inverse_translate(const struct vc_data *conp, u16 glyph,
bool use_unicode)
{
return false;
}
-
-static inline bool ucs_is_zero_width(uint32_t cp)
-{
- return false;
-}
#endif /* CONFIG_CONSOLE_TRANSLATIONS */
#endif /* __LINUX_CONSOLEMAP_H__ */