Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/wsfont add translation tables for ISO fonts in order...
details: https://anonhg.NetBSD.org/src/rev/6167305f8ab4
branches: trunk
changeset: 754555:6167305f8ab4
user: macallan <macallan%NetBSD.org@localhost>
date: Tue May 04 04:53:59 2010 +0000
description:
add translation tables for ISO fonts in order to map unicode box drawing
characters to something else than whitespaces
diffstat:
sys/dev/wsfont/wsfont.c | 70 +++++++++++++++++++++++++++++++++++++++++++-----
sys/dev/wsfont/wsfont.h | 5 ++-
2 files changed, 66 insertions(+), 9 deletions(-)
diffs (150 lines):
diff -r d05ccec1d88a -r 6167305f8ab4 sys/dev/wsfont/wsfont.c
--- a/sys/dev/wsfont/wsfont.c Tue May 04 00:02:46 2010 +0000
+++ b/sys/dev/wsfont/wsfont.c Tue May 04 04:53:59 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: wsfont.c,v 1.46 2010/04/17 13:36:22 nonaka Exp $ */
+/* $NetBSD: wsfont.c,v 1.47 2010/05/04 04:53:59 macallan Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wsfont.c,v 1.46 2010/04/17 13:36:22 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wsfont.c,v 1.47 2010/05/04 04:53:59 macallan Exp $");
#include "opt_wsfont.h"
@@ -187,6 +187,9 @@
#ifdef FONT_OMRON12x20
{ { NULL, NULL }, &omron12x20, 0, 0, WSFONT_STATIC | WSFONT_BUILTIN },
#endif
+#ifdef FONT_TERMINUS8x16
+ { { NULL, NULL }, &terminus8x16, 0, 0, WSFONT_STATIC | WSFONT_BUILTIN },
+#endif
{ { NULL, NULL }, NULL, 0, 0, 0 },
};
@@ -835,6 +838,39 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181
};
+/*
+ * map all variants of the box drawing characters to the same basic shapes for
+ * now, encoded like this:
+ *
+ * 1
+ * 1
+ * 888 222
+ * 4
+ * 4
+ *
+ * so an upright line would be 0x05
+ */
+#define FL |WSFONT_FLAG_OPT
+static const u_int32_t netbsd_boxes[] = {
+/*00*/ 0x0a FL, 0x0a FL, 0x05 FL, 0x05 FL, 0x0a FL, 0x0a FL, 0x05 FL, 0x05 FL,
+/*08*/ 0x0a FL, 0x0a FL, 0x05 FL, 0x05 FL, 0x06 FL, 0x06 FL, 0x06 FL, 0x06 FL,
+/*10*/ 0x0c FL, 0x0c FL, 0x0c FL, 0x0c FL, 0x03 FL, 0x03 FL, 0x03 FL, 0x03 FL,
+/*18*/ 0x09 FL, 0x09 FL, 0x09 FL, 0x09 FL, 0x07 FL, 0x07 FL, 0x07 FL, 0x07 FL,
+/*20*/ 0x07 FL, 0x07 FL, 0x07 FL, 0x07 FL, 0x0d FL, 0x0d FL, 0x0d FL, 0x0d FL,
+/*28*/ 0x0d FL, 0x0d FL, 0x0d FL, 0x0d FL, 0x0e FL, 0x0e FL, 0x0e FL, 0x0e FL,
+/*30*/ 0x0e FL, 0x0e FL, 0x0e FL, 0x0e FL, 0x0b FL, 0x0b FL, 0x0b FL, 0x0b FL,
+/*38*/ 0x0b FL, 0x0b FL, 0x0b FL, 0x0b FL, 0x0f FL, 0x0f FL, 0x0f FL, 0x0f FL,
+/*40*/ 0x0f FL, 0x0f FL, 0x0f FL, 0x0f FL, 0x0f FL, 0x0f FL, 0x0f FL, 0x0f FL,
+/*48*/ 0x0f FL, 0x0f FL, 0x0f FL, 0x0f FL, 0x0a FL, 0x0a FL, 0x05 FL, 0x05 FL,
+/*50*/ 0x0a FL, 0x05 FL, 0x06 FL, 0x06 FL, 0x06 FL, 0x0c FL, 0x0c FL, 0x0c FL,
+/*58*/ 0x03 FL, 0x03 FL, 0x03 FL, 0x09 FL, 0x09 FL, 0x09 FL, 0x07 FL, 0x07 FL,
+/*60*/ 0x07 FL, 0x0d FL, 0x0d FL, 0x0d FL, 0x0e FL, 0x0e FL, 0x0e FL, 0x0b FL,
+/*68*/ 0x0b FL, 0x0b FL, 0x0f FL, 0x0f FL, 0x0f FL, 0x06 FL, 0x0c FL, 0x09 FL,
+/*70*/ 0x03 FL, 0 FL, 0 FL, 0 FL, 0x08 FL, 0x01 FL, 0x02 FL, 0x04 FL,
+/*78*/ 0x08 FL, 0x01 FL, 0x02 FL, 0x04 FL, 0x0a FL, 0x05 FL, 0x0a FL, 0x05 FL
+};
+#undef FL
+
static const u_int8_t iso7_chars_32[] = {
175, 0, 0, 0, 0, 162, 0, 161
};
@@ -848,6 +884,9 @@
static const struct wsfont_level2_glyphmap iso7_level2_32 =
{ 20, 8, iso7_chars_32, 1 };
+static const struct wsfont_level2_glyphmap netbsd_box_drawing =
+ { 0, 128, netbsd_boxes, 4 };
+
static const struct wsfont_level2_glyphmap *iso7_level1[] = {
&iso7_level2_0, NULL, NULL, &iso7_level2_3,
NULL, NULL, NULL, NULL,
@@ -857,14 +896,28 @@
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
- &iso7_level2_32
+ &iso7_level2_32, NULL, NULL, NULL,
+ NULL, &netbsd_box_drawing
+};
+
+static const struct wsfont_level2_glyphmap *iso_level1[] = {
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, &netbsd_box_drawing
};
static const struct wsfont_level1_glyphmap encodings[] = {
- { NULL, 0, 0 }, /* WSDISPLAY_FONTENC_ISO */
+ { iso_level1, 0, 0x26 }, /* WSDISPLAY_FONTENC_ISO */
{ ibm437_level1, 0, 38 }, /* WSDISPLAY_FONTENC_IBM */
{ NULL, 0, 0 }, /* WSDISPLAY_FONTENC_PCVT */
- { iso7_level1, 0, 33 }, /* WSDISPLAY_FONTENC_ISO7 */
+ { iso7_level1, 0, 0x26 }, /* WSDISPLAY_FONTENC_ISO7 */
};
#define MAX_ENCODING (sizeof(encodings) / sizeof(encodings[0]))
@@ -879,9 +932,6 @@
const struct wsfont_level2_glyphmap *map2;
int hi, lo;
- if (font->encoding == WSDISPLAY_FONTENC_ISO)
- return (c);
-
if (font->encoding < 0 || font->encoding >= MAX_ENCODING)
return (-1);
@@ -894,6 +944,10 @@
map2 = map1->level2[hi - map1->base];
+ /* so we don't need an identical level 2 table for hi == 0 */
+ if (hi == 0 && font->encoding == WSDISPLAY_FONTENC_ISO)
+ return lo;
+
if (map2 == NULL || lo < map2->base || lo >= map2->base + map2->size)
return (-1);
diff -r d05ccec1d88a -r 6167305f8ab4 sys/dev/wsfont/wsfont.h
--- a/sys/dev/wsfont/wsfont.h Tue May 04 00:02:46 2010 +0000
+++ b/sys/dev/wsfont/wsfont.h Tue May 04 04:53:59 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: wsfont.h,v 1.20 2010/04/17 13:36:22 nonaka Exp $ */
+/* $NetBSD: wsfont.h,v 1.21 2010/05/04 04:53:59 macallan Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002 The NetBSD Foundation, Inc.
@@ -32,6 +32,9 @@
#ifndef _WSFONT_H_
#define _WSFONT_H_ 1
+#define WSFONT_FLAGS_MASK 0x7f000000
+#define WSFONT_FLAG_OPT 0x01000000 /* use alternate font */
+
/*
* Example:
*
Home |
Main Index |
Thread Index |
Old Index