diff --git a/font/devdvi/CSH b/font/devdvi/CSH
new file mode 100644
index 000000000..04af8eb5a
--- /dev/null
+++ b/font/devdvi/CSH
@@ -0,0 +1,26 @@
+#
+#  Chinese Simplified, Hei style (Heiti)
+#     with upTeX tfm font
+#
+
+name CSH
+internalname upstht-h
+spacewidth 262145
+designsize 10485760
+
+charset-range
+u2000..u206F	1048580	0	--- General Punctuation
+u2190..u21FF	1048580	0	--- Arrows
+u2460..u24FF	1048580	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1048580	0	--- Geometric Shapes
+u2600..u26FF	1048580	0	--- Miscellaneous Symbols
+u3000..u303F	1048580	0	--- CJK Symbols and Punctuation
+u3200..u32FF	1048580	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1048580	0	--- CJK Compatibility
+u3400..u4DBF	1048580	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1048580	0	--- CJK Unified Ideographs
+uF900..uFAFF	1048580	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1048580	0	--- Fullwidth Forms
+uFFE0..uFFE5	1048580	0	--- Fullwidth Forms
+u20000..u323AF	1048580	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devdvi/CSS b/font/devdvi/CSS
new file mode 100644
index 000000000..32e4837f6
--- /dev/null
+++ b/font/devdvi/CSS
@@ -0,0 +1,26 @@
+#
+#  Chinese Simplified, Song style (Songti)
+#     with upTeX tfm font
+#
+
+name CSS
+internalname upstsl-h
+spacewidth 262145
+designsize 10485760
+
+charset-range
+u2000..u206F	1048580	0	--- General Punctuation
+u2190..u21FF	1048580	0	--- Arrows
+u2460..u24FF	1048580	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1048580	0	--- Geometric Shapes
+u2600..u26FF	1048580	0	--- Miscellaneous Symbols
+u3000..u303F	1048580	0	--- CJK Symbols and Punctuation
+u3200..u32FF	1048580	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1048580	0	--- CJK Compatibility
+u3400..u4DBF	1048580	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1048580	0	--- CJK Unified Ideographs
+uF900..uFAFF	1048580	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1048580	0	--- Fullwidth Forms
+uFFE0..uFFE5	1048580	0	--- Fullwidth Forms
+u20000..u323AF	1048580	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devdvi/CTH b/font/devdvi/CTH
new file mode 100644
index 000000000..19a06e929
--- /dev/null
+++ b/font/devdvi/CTH
@@ -0,0 +1,26 @@
+#
+#  Chinese Traditional, Hei style (Heiti)
+#     with upTeX tfm font
+#
+
+name CTH
+internalname upmhm-h
+spacewidth 262145
+designsize 10485760
+
+charset-range
+u2000..u206F	1048580	0	--- General Punctuation
+u2190..u21FF	1048580	0	--- Arrows
+u2460..u24FF	1048580	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1048580	0	--- Geometric Shapes
+u2600..u26FF	1048580	0	--- Miscellaneous Symbols
+u3000..u303F	1048580	0	--- CJK Symbols and Punctuation
+u3200..u32FF	1048580	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1048580	0	--- CJK Compatibility
+u3400..u4DBF	1048580	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1048580	0	--- CJK Unified Ideographs
+uF900..uFAFF	1048580	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1048580	0	--- Fullwidth Forms
+uFFE0..uFFE5	1048580	0	--- Fullwidth Forms
+u20000..u323AF	1048580	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devdvi/CTS b/font/devdvi/CTS
new file mode 100644
index 000000000..fd6cca107
--- /dev/null
+++ b/font/devdvi/CTS
@@ -0,0 +1,26 @@
+#
+#  Chinese Traditional, Song style (Songti)
+#     with upTeX tfm font
+#
+
+name CTS
+internalname upmsl-h
+spacewidth 262145
+designsize 10485760
+
+charset-range
+u2000..u206F	1048580	0	--- General Punctuation
+u2190..u21FF	1048580	0	--- Arrows
+u2460..u24FF	1048580	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1048580	0	--- Geometric Shapes
+u2600..u26FF	1048580	0	--- Miscellaneous Symbols
+u3000..u303F	1048580	0	--- CJK Symbols and Punctuation
+u3200..u32FF	1048580	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1048580	0	--- CJK Compatibility
+u3400..u4DBF	1048580	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1048580	0	--- CJK Unified Ideographs
+uF900..uFAFF	1048580	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1048580	0	--- Fullwidth Forms
+uFFE0..uFFE5	1048580	0	--- Fullwidth Forms
+u20000..u323AF	1048580	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devdvi/JPG b/font/devdvi/JPG
new file mode 100644
index 000000000..e71a67a15
--- /dev/null
+++ b/font/devdvi/JPG
@@ -0,0 +1,91 @@
+#
+#  Japanese, Gothic style
+#     with upTeX tfm font
+#
+
+name JPG
+internalname upgbm-h
+spacewidth 262145
+designsize 10485760
+
+charset-range
+u2000..u206F	1048580	0	--- General Punctuation
+u2190..u21FF	1048580	0	--- Arrows
+u2460..u24FF	1048580	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1048580	0	--- Geometric Shapes
+u2600..u26FF	1048580	0	--- Miscellaneous Symbols
+u3000..u303F	1048580	0	--- CJK Symbols and Punctuation
+u3040..u309F	1048580	0	--- Hiragana
+u30A0..u30FF	1048580	0	--- Katakana
+u31F0..u31FF	1048580	0	--- Katakana Phonetic Extensions
+u3200..u32FF	1048580	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1048580	0	--- CJK Compatibility
+u3400..u4DBF	1048580	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1048580	0	--- CJK Unified Ideographs
+uF900..uFAFF	1048580	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1048580	0	--- Fullwidth Forms
+uFF61..uFF9F	524290	0	--- Halfwidth Katakana
+uFFE0..uFFE5	1048580	0	--- Fullwidth Forms
+u1AFF0..u1B16F	1048580	0	--- Kana Extended-B .. Small Kana Extension
+u20000..u323AF	1048580	0	--- CJK Unified Ideographs Extension B-H
+
+charset
+u304B_3099	1048580	0	12364	---  u304C  HIRAGANA LETTER GA
+u304D_3099	1048580	0	12366	---  u304E  HIRAGANA LETTER GI
+u304F_3099	1048580	0	12368	---  u3050  HIRAGANA LETTER GU
+u3051_3099	1048580	0	12370	---  u3052  HIRAGANA LETTER GE
+u3053_3099	1048580	0	12372	---  u3054  HIRAGANA LETTER GO
+u3055_3099	1048580	0	12374	---  u3056  HIRAGANA LETTER ZA
+u3057_3099	1048580	0	12376	---  u3058  HIRAGANA LETTER ZI
+u3059_3099	1048580	0	12378	---  u305A  HIRAGANA LETTER ZU
+u305B_3099	1048580	0	12380	---  u305C  HIRAGANA LETTER ZE
+u305D_3099	1048580	0	12382	---  u305E  HIRAGANA LETTER ZO
+u305F_3099	1048580	0	12384	---  u3060  HIRAGANA LETTER DA
+u3061_3099	1048580	0	12386	---  u3062  HIRAGANA LETTER DI
+u3064_3099	1048580	0	12389	---  u3065  HIRAGANA LETTER DU
+u3066_3099	1048580	0	12391	---  u3067  HIRAGANA LETTER DE
+u3068_3099	1048580	0	12393	---  u3069  HIRAGANA LETTER DO
+u306F_3099	1048580	0	12400	---  u3070  HIRAGANA LETTER BA
+u306F_309A	1048580	0	12401	---  u3071  HIRAGANA LETTER PA
+u3072_3099	1048580	0	12403	---  u3073  HIRAGANA LETTER BI
+u3072_309A	1048580	0	12404	---  u3074  HIRAGANA LETTER PI
+u3075_3099	1048580	0	12406	---  u3076  HIRAGANA LETTER BU
+u3075_309A	1048580	0	12407	---  u3077  HIRAGANA LETTER PU
+u3078_3099	1048580	0	12409	---  u3079  HIRAGANA LETTER BE
+u3078_309A	1048580	0	12410	---  u307A  HIRAGANA LETTER PE
+u307B_3099	1048580	0	12412	---  u307C  HIRAGANA LETTER BO
+u307B_309A	1048580	0	12413	---  u307D  HIRAGANA LETTER PO
+u3046_3099	1048580	0	12436	---  u3094  HIRAGANA LETTER VU
+u309D_3099	1048580	0	12446	---  u309E  HIRAGANA VOICED ITERATION MARK
+u30AB_3099	1048580	0	12460	---  u30AC  KATAKANA LETTER GA
+u30AD_3099	1048580	0	12462	---  u30AE  KATAKANA LETTER GI
+u30AF_3099	1048580	0	12464	---  u30B0  KATAKANA LETTER GU
+u30B1_3099	1048580	0	12466	---  u30B2  KATAKANA LETTER GE
+u30B3_3099	1048580	0	12468	---  u30B4  KATAKANA LETTER GO
+u30B5_3099	1048580	0	12470	---  u30B6  KATAKANA LETTER ZA
+u30B7_3099	1048580	0	12472	---  u30B8  KATAKANA LETTER ZI
+u30B9_3099	1048580	0	12474	---  u30BA  KATAKANA LETTER ZU
+u30BB_3099	1048580	0	12476	---  u30BC  KATAKANA LETTER ZE
+u30BD_3099	1048580	0	12478	---  u30BE  KATAKANA LETTER ZO
+u30BF_3099	1048580	0	12480	---  u30C0  KATAKANA LETTER DA
+u30C1_3099	1048580	0	12482	---  u30C2  KATAKANA LETTER DI
+u30C4_3099	1048580	0	12485	---  u30C5  KATAKANA LETTER DU
+u30C6_3099	1048580	0	12487	---  u30C7  KATAKANA LETTER DE
+u30C8_3099	1048580	0	12489	---  u30C9  KATAKANA LETTER DO
+u30CF_3099	1048580	0	12496	---  u30D0  KATAKANA LETTER BA
+u30CF_309A	1048580	0	12497	---  u30D1  KATAKANA LETTER PA
+u30D2_3099	1048580	0	12499	---  u30D3  KATAKANA LETTER BI
+u30D2_309A	1048580	0	12500	---  u30D4  KATAKANA LETTER PI
+u30D5_3099	1048580	0	12502	---  u30D6  KATAKANA LETTER BU
+u30D5_309A	1048580	0	12503	---  u30D7  KATAKANA LETTER PU
+u30D8_3099	1048580	0	12505	---  u30D9  KATAKANA LETTER BE
+u30D8_309A	1048580	0	12506	---  u30DA  KATAKANA LETTER PE
+u30DB_3099	1048580	0	12508	---  u30DC  KATAKANA LETTER BO
+u30DB_309A	1048580	0	12509	---  u30DD  KATAKANA LETTER PO
+u30A6_3099	1048580	0	12532	---  u30F4  KATAKANA LETTER VU
+u30EF_3099	1048580	0	12535	---  u30F7  KATAKANA LETTER VA
+u30F0_3099	1048580	0	12536	---  u30F8  KATAKANA LETTER VI
+u30F1_3099	1048580	0	12537	---  u30F9  KATAKANA LETTER VE
+u30F2_3099	1048580	0	12538	---  u30FA  KATAKANA LETTER VO
+u30FD_3099	1048580	0	12542	---  u30FE  KATAKANA VOICED ITERATION MARK
+
diff --git a/font/devdvi/JPM b/font/devdvi/JPM
new file mode 100644
index 000000000..740cd9e61
--- /dev/null
+++ b/font/devdvi/JPM
@@ -0,0 +1,91 @@
+#
+#  Japanese, Mincho style
+#     with upTeX tfm font
+#
+
+name JPM
+internalname uprml-h
+spacewidth 262145
+designsize 10485760
+
+charset-range
+u2000..u206F	1048580	0	--- General Punctuation
+u2190..u21FF	1048580	0	--- Arrows
+u2460..u24FF	1048580	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1048580	0	--- Geometric Shapes
+u2600..u26FF	1048580	0	--- Miscellaneous Symbols
+u3000..u303F	1048580	0	--- CJK Symbols and Punctuation
+u3040..u309F	1048580	0	--- Hiragana
+u30A0..u30FF	1048580	0	--- Katakana
+u31F0..u31FF	1048580	0	--- Katakana Phonetic Extensions
+u3200..u32FF	1048580	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1048580	0	--- CJK Compatibility
+u3400..u4DBF	1048580	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1048580	0	--- CJK Unified Ideographs
+uF900..uFAFF	1048580	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1048580	0	--- Fullwidth Forms
+uFF61..uFF9F	524290	0	--- Halfwidth Katakana
+uFFE0..uFFE5	1048580	0	--- Fullwidth Forms
+u1AFF0..u1B16F	1048580	0	--- Kana Extended-B .. Small Kana Extension
+u20000..u323AF	1048580	0	--- CJK Unified Ideographs Extension B-H
+
+charset
+u304B_3099	1048580	0	12364	---  u304C  HIRAGANA LETTER GA
+u304D_3099	1048580	0	12366	---  u304E  HIRAGANA LETTER GI
+u304F_3099	1048580	0	12368	---  u3050  HIRAGANA LETTER GU
+u3051_3099	1048580	0	12370	---  u3052  HIRAGANA LETTER GE
+u3053_3099	1048580	0	12372	---  u3054  HIRAGANA LETTER GO
+u3055_3099	1048580	0	12374	---  u3056  HIRAGANA LETTER ZA
+u3057_3099	1048580	0	12376	---  u3058  HIRAGANA LETTER ZI
+u3059_3099	1048580	0	12378	---  u305A  HIRAGANA LETTER ZU
+u305B_3099	1048580	0	12380	---  u305C  HIRAGANA LETTER ZE
+u305D_3099	1048580	0	12382	---  u305E  HIRAGANA LETTER ZO
+u305F_3099	1048580	0	12384	---  u3060  HIRAGANA LETTER DA
+u3061_3099	1048580	0	12386	---  u3062  HIRAGANA LETTER DI
+u3064_3099	1048580	0	12389	---  u3065  HIRAGANA LETTER DU
+u3066_3099	1048580	0	12391	---  u3067  HIRAGANA LETTER DE
+u3068_3099	1048580	0	12393	---  u3069  HIRAGANA LETTER DO
+u306F_3099	1048580	0	12400	---  u3070  HIRAGANA LETTER BA
+u306F_309A	1048580	0	12401	---  u3071  HIRAGANA LETTER PA
+u3072_3099	1048580	0	12403	---  u3073  HIRAGANA LETTER BI
+u3072_309A	1048580	0	12404	---  u3074  HIRAGANA LETTER PI
+u3075_3099	1048580	0	12406	---  u3076  HIRAGANA LETTER BU
+u3075_309A	1048580	0	12407	---  u3077  HIRAGANA LETTER PU
+u3078_3099	1048580	0	12409	---  u3079  HIRAGANA LETTER BE
+u3078_309A	1048580	0	12410	---  u307A  HIRAGANA LETTER PE
+u307B_3099	1048580	0	12412	---  u307C  HIRAGANA LETTER BO
+u307B_309A	1048580	0	12413	---  u307D  HIRAGANA LETTER PO
+u3046_3099	1048580	0	12436	---  u3094  HIRAGANA LETTER VU
+u309D_3099	1048580	0	12446	---  u309E  HIRAGANA VOICED ITERATION MARK
+u30AB_3099	1048580	0	12460	---  u30AC  KATAKANA LETTER GA
+u30AD_3099	1048580	0	12462	---  u30AE  KATAKANA LETTER GI
+u30AF_3099	1048580	0	12464	---  u30B0  KATAKANA LETTER GU
+u30B1_3099	1048580	0	12466	---  u30B2  KATAKANA LETTER GE
+u30B3_3099	1048580	0	12468	---  u30B4  KATAKANA LETTER GO
+u30B5_3099	1048580	0	12470	---  u30B6  KATAKANA LETTER ZA
+u30B7_3099	1048580	0	12472	---  u30B8  KATAKANA LETTER ZI
+u30B9_3099	1048580	0	12474	---  u30BA  KATAKANA LETTER ZU
+u30BB_3099	1048580	0	12476	---  u30BC  KATAKANA LETTER ZE
+u30BD_3099	1048580	0	12478	---  u30BE  KATAKANA LETTER ZO
+u30BF_3099	1048580	0	12480	---  u30C0  KATAKANA LETTER DA
+u30C1_3099	1048580	0	12482	---  u30C2  KATAKANA LETTER DI
+u30C4_3099	1048580	0	12485	---  u30C5  KATAKANA LETTER DU
+u30C6_3099	1048580	0	12487	---  u30C7  KATAKANA LETTER DE
+u30C8_3099	1048580	0	12489	---  u30C9  KATAKANA LETTER DO
+u30CF_3099	1048580	0	12496	---  u30D0  KATAKANA LETTER BA
+u30CF_309A	1048580	0	12497	---  u30D1  KATAKANA LETTER PA
+u30D2_3099	1048580	0	12499	---  u30D3  KATAKANA LETTER BI
+u30D2_309A	1048580	0	12500	---  u30D4  KATAKANA LETTER PI
+u30D5_3099	1048580	0	12502	---  u30D6  KATAKANA LETTER BU
+u30D5_309A	1048580	0	12503	---  u30D7  KATAKANA LETTER PU
+u30D8_3099	1048580	0	12505	---  u30D9  KATAKANA LETTER BE
+u30D8_309A	1048580	0	12506	---  u30DA  KATAKANA LETTER PE
+u30DB_3099	1048580	0	12508	---  u30DC  KATAKANA LETTER BO
+u30DB_309A	1048580	0	12509	---  u30DD  KATAKANA LETTER PO
+u30A6_3099	1048580	0	12532	---  u30F4  KATAKANA LETTER VU
+u30EF_3099	1048580	0	12535	---  u30F7  KATAKANA LETTER VA
+u30F0_3099	1048580	0	12536	---  u30F8  KATAKANA LETTER VI
+u30F1_3099	1048580	0	12537	---  u30F9  KATAKANA LETTER VE
+u30F2_3099	1048580	0	12538	---  u30FA  KATAKANA LETTER VO
+u30FD_3099	1048580	0	12542	---  u30FE  KATAKANA VOICED ITERATION MARK
+
diff --git a/font/devdvi/KOG b/font/devdvi/KOG
new file mode 100644
index 000000000..64edab189
--- /dev/null
+++ b/font/devdvi/KOG
@@ -0,0 +1,30 @@
+#
+#  Korean, GoThic style
+#     with upTeX tfm font
+#
+
+name KOG
+internalname uphygt-h
+spacewidth 262145
+designsize 10485760
+
+charset-range
+u1100..u11FF	1048580	0	--- Hangul Jamo
+u3130..u318F	1048580	0	--- Hangul Compatibility Jamo
+uA960..uA97F	1048580	0	--- Hangul Jamo Extended-A
+uAC00..uD7AF	1048580	0	--- Hangul Syllables
+uD7B0..uD7FF	1048580	0	--- Hangul Jamo Extended-B
+u2000..u206F	1048580	0	--- General Punctuation
+u2190..u21FF	1048580	0	--- Arrows
+u2460..u24FF	1048580	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1048580	0	--- Geometric Shapes
+u2600..u26FF	1048580	0	--- Miscellaneous Symbols
+u3000..u303F	1048580	0	--- CJK Symbols and Punctuation
+u3200..u32FF	1048580	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1048580	0	--- CJK Compatibility
+u3400..u4DBF	1048580	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1048580	0	--- CJK Unified Ideographs
+uF900..uFAFF	1048580	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1048580	0	--- Fullwidth Forms
+uFFE0..uFFE6	1048580	0	--- Fullwidth Forms
+
diff --git a/font/devdvi/KOM b/font/devdvi/KOM
new file mode 100644
index 000000000..9934c7af8
--- /dev/null
+++ b/font/devdvi/KOM
@@ -0,0 +1,30 @@
+#
+#  Korean, MyeongJo style
+#     with upTeX tfm font
+#
+
+name KOM
+internalname uphysmjm-h
+spacewidth 262145
+designsize 10485760
+
+charset-range
+u1100..u11FF	1048580	0	--- Hangul Jamo
+u3130..u318F	1048580	0	--- Hangul Compatibility Jamo
+uA960..uA97F	1048580	0	--- Hangul Jamo Extended-A
+uAC00..uD7AF	1048580	0	--- Hangul Syllables
+uD7B0..uD7FF	1048580	0	--- Hangul Jamo Extended-B
+u2000..u206F	1048580	0	--- General Punctuation
+u2190..u21FF	1048580	0	--- Arrows
+u2460..u24FF	1048580	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1048580	0	--- Geometric Shapes
+u2600..u26FF	1048580	0	--- Miscellaneous Symbols
+u3000..u303F	1048580	0	--- CJK Symbols and Punctuation
+u3200..u32FF	1048580	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1048580	0	--- CJK Compatibility
+u3400..u4DBF	1048580	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1048580	0	--- CJK Unified Ideographs
+uF900..uFAFF	1048580	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1048580	0	--- Fullwidth Forms
+uFFE0..uFFE6	1048580	0	--- Fullwidth Forms
+
diff --git a/font/devhtml/CSH b/font/devhtml/CSH
new file mode 100644
index 000000000..3191b3a27
--- /dev/null
+++ b/font/devhtml/CSH
@@ -0,0 +1,23 @@
+#
+#  Chinese Simplified, Hei style (Heiti)
+#
+
+name CSH
+spacewidth 24
+
+charset-range
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFFE0..uFFE5	48	0	--- Fullwidth Forms
+u20000..u323AF	48	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devhtml/CSS b/font/devhtml/CSS
new file mode 100644
index 000000000..2df525d7c
--- /dev/null
+++ b/font/devhtml/CSS
@@ -0,0 +1,23 @@
+#
+#  Chinese Simplified, Song style (Songti)
+#
+
+name CSS
+spacewidth 24
+
+charset-range
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFFE0..uFFE5	48	0	--- Fullwidth Forms
+u20000..u323AF	48	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devhtml/CTH b/font/devhtml/CTH
new file mode 100644
index 000000000..0bf067507
--- /dev/null
+++ b/font/devhtml/CTH
@@ -0,0 +1,23 @@
+#
+#  Chinese Traditional, Hei style (Heiti)
+#
+
+name CTH
+spacewidth 24
+
+charset-range
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFFE0..uFFE5	48	0	--- Fullwidth Forms
+u20000..u323AF	48	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devhtml/CTS b/font/devhtml/CTS
new file mode 100644
index 000000000..66eeca915
--- /dev/null
+++ b/font/devhtml/CTS
@@ -0,0 +1,23 @@
+#
+#  Chinese Traditional, Song style (Songti)
+#
+
+name CTS
+spacewidth 24
+
+charset-range
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFFE0..uFFE5	48	0	--- Fullwidth Forms
+u20000..u323AF	48	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devhtml/JPG b/font/devhtml/JPG
new file mode 100644
index 000000000..261ab8f38
--- /dev/null
+++ b/font/devhtml/JPG
@@ -0,0 +1,88 @@
+#
+#  Japanese, Gothic style
+#
+
+name JPG
+spacewidth 24
+
+charset-range
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3040..u309F	48	0	--- Hiragana
+u30A0..u30FF	48	0	--- Katakana
+u31F0..u31FF	48	0	--- Katakana Phonetic Extensions
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFF61..uFF9F	24	0	--- Halfwidth Katakana
+uFFE0..uFFE5	48	0	--- Fullwidth Forms
+u1AFF0..u1B16F	48	0	--- Kana Extended-B .. Small Kana Extension
+u20000..u323AF	48	0	--- CJK Unified Ideographs Extension B-H
+
+charset
+u304B_3099	48	0	12364	---  u304C  HIRAGANA LETTER GA
+u304D_3099	48	0	12366	---  u304E  HIRAGANA LETTER GI
+u304F_3099	48	0	12368	---  u3050  HIRAGANA LETTER GU
+u3051_3099	48	0	12370	---  u3052  HIRAGANA LETTER GE
+u3053_3099	48	0	12372	---  u3054  HIRAGANA LETTER GO
+u3055_3099	48	0	12374	---  u3056  HIRAGANA LETTER ZA
+u3057_3099	48	0	12376	---  u3058  HIRAGANA LETTER ZI
+u3059_3099	48	0	12378	---  u305A  HIRAGANA LETTER ZU
+u305B_3099	48	0	12380	---  u305C  HIRAGANA LETTER ZE
+u305D_3099	48	0	12382	---  u305E  HIRAGANA LETTER ZO
+u305F_3099	48	0	12384	---  u3060  HIRAGANA LETTER DA
+u3061_3099	48	0	12386	---  u3062  HIRAGANA LETTER DI
+u3064_3099	48	0	12389	---  u3065  HIRAGANA LETTER DU
+u3066_3099	48	0	12391	---  u3067  HIRAGANA LETTER DE
+u3068_3099	48	0	12393	---  u3069  HIRAGANA LETTER DO
+u306F_3099	48	0	12400	---  u3070  HIRAGANA LETTER BA
+u306F_309A	48	0	12401	---  u3071  HIRAGANA LETTER PA
+u3072_3099	48	0	12403	---  u3073  HIRAGANA LETTER BI
+u3072_309A	48	0	12404	---  u3074  HIRAGANA LETTER PI
+u3075_3099	48	0	12406	---  u3076  HIRAGANA LETTER BU
+u3075_309A	48	0	12407	---  u3077  HIRAGANA LETTER PU
+u3078_3099	48	0	12409	---  u3079  HIRAGANA LETTER BE
+u3078_309A	48	0	12410	---  u307A  HIRAGANA LETTER PE
+u307B_3099	48	0	12412	---  u307C  HIRAGANA LETTER BO
+u307B_309A	48	0	12413	---  u307D  HIRAGANA LETTER PO
+u3046_3099	48	0	12436	---  u3094  HIRAGANA LETTER VU
+u309D_3099	48	0	12446	---  u309E  HIRAGANA VOICED ITERATION MARK
+u30AB_3099	48	0	12460	---  u30AC  KATAKANA LETTER GA
+u30AD_3099	48	0	12462	---  u30AE  KATAKANA LETTER GI
+u30AF_3099	48	0	12464	---  u30B0  KATAKANA LETTER GU
+u30B1_3099	48	0	12466	---  u30B2  KATAKANA LETTER GE
+u30B3_3099	48	0	12468	---  u30B4  KATAKANA LETTER GO
+u30B5_3099	48	0	12470	---  u30B6  KATAKANA LETTER ZA
+u30B7_3099	48	0	12472	---  u30B8  KATAKANA LETTER ZI
+u30B9_3099	48	0	12474	---  u30BA  KATAKANA LETTER ZU
+u30BB_3099	48	0	12476	---  u30BC  KATAKANA LETTER ZE
+u30BD_3099	48	0	12478	---  u30BE  KATAKANA LETTER ZO
+u30BF_3099	48	0	12480	---  u30C0  KATAKANA LETTER DA
+u30C1_3099	48	0	12482	---  u30C2  KATAKANA LETTER DI
+u30C4_3099	48	0	12485	---  u30C5  KATAKANA LETTER DU
+u30C6_3099	48	0	12487	---  u30C7  KATAKANA LETTER DE
+u30C8_3099	48	0	12489	---  u30C9  KATAKANA LETTER DO
+u30CF_3099	48	0	12496	---  u30D0  KATAKANA LETTER BA
+u30CF_309A	48	0	12497	---  u30D1  KATAKANA LETTER PA
+u30D2_3099	48	0	12499	---  u30D3  KATAKANA LETTER BI
+u30D2_309A	48	0	12500	---  u30D4  KATAKANA LETTER PI
+u30D5_3099	48	0	12502	---  u30D6  KATAKANA LETTER BU
+u30D5_309A	48	0	12503	---  u30D7  KATAKANA LETTER PU
+u30D8_3099	48	0	12505	---  u30D9  KATAKANA LETTER BE
+u30D8_309A	48	0	12506	---  u30DA  KATAKANA LETTER PE
+u30DB_3099	48	0	12508	---  u30DC  KATAKANA LETTER BO
+u30DB_309A	48	0	12509	---  u30DD  KATAKANA LETTER PO
+u30A6_3099	48	0	12532	---  u30F4  KATAKANA LETTER VU
+u30EF_3099	48	0	12535	---  u30F7  KATAKANA LETTER VA
+u30F0_3099	48	0	12536	---  u30F8  KATAKANA LETTER VI
+u30F1_3099	48	0	12537	---  u30F9  KATAKANA LETTER VE
+u30F2_3099	48	0	12538	---  u30FA  KATAKANA LETTER VO
+u30FD_3099	48	0	12542	---  u30FE  KATAKANA VOICED ITERATION MARK
+
diff --git a/font/devhtml/JPM b/font/devhtml/JPM
new file mode 100644
index 000000000..5d57e8702
--- /dev/null
+++ b/font/devhtml/JPM
@@ -0,0 +1,88 @@
+#
+#  Japanese, Mincho style
+#
+
+name JPM
+spacewidth 24
+
+charset-range
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3040..u309F	48	0	--- Hiragana
+u30A0..u30FF	48	0	--- Katakana
+u31F0..u31FF	48	0	--- Katakana Phonetic Extensions
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFF61..uFF9F	24	0	--- Halfwidth Katakana
+uFFE0..uFFE5	48	0	--- Fullwidth Forms
+u1AFF0..u1B16F	48	0	--- Kana Extended-B .. Small Kana Extension
+u20000..u323AF	48	0	--- CJK Unified Ideographs Extension B-H
+
+charset
+u304B_3099	48	0	12364	---  u304C  HIRAGANA LETTER GA
+u304D_3099	48	0	12366	---  u304E  HIRAGANA LETTER GI
+u304F_3099	48	0	12368	---  u3050  HIRAGANA LETTER GU
+u3051_3099	48	0	12370	---  u3052  HIRAGANA LETTER GE
+u3053_3099	48	0	12372	---  u3054  HIRAGANA LETTER GO
+u3055_3099	48	0	12374	---  u3056  HIRAGANA LETTER ZA
+u3057_3099	48	0	12376	---  u3058  HIRAGANA LETTER ZI
+u3059_3099	48	0	12378	---  u305A  HIRAGANA LETTER ZU
+u305B_3099	48	0	12380	---  u305C  HIRAGANA LETTER ZE
+u305D_3099	48	0	12382	---  u305E  HIRAGANA LETTER ZO
+u305F_3099	48	0	12384	---  u3060  HIRAGANA LETTER DA
+u3061_3099	48	0	12386	---  u3062  HIRAGANA LETTER DI
+u3064_3099	48	0	12389	---  u3065  HIRAGANA LETTER DU
+u3066_3099	48	0	12391	---  u3067  HIRAGANA LETTER DE
+u3068_3099	48	0	12393	---  u3069  HIRAGANA LETTER DO
+u306F_3099	48	0	12400	---  u3070  HIRAGANA LETTER BA
+u306F_309A	48	0	12401	---  u3071  HIRAGANA LETTER PA
+u3072_3099	48	0	12403	---  u3073  HIRAGANA LETTER BI
+u3072_309A	48	0	12404	---  u3074  HIRAGANA LETTER PI
+u3075_3099	48	0	12406	---  u3076  HIRAGANA LETTER BU
+u3075_309A	48	0	12407	---  u3077  HIRAGANA LETTER PU
+u3078_3099	48	0	12409	---  u3079  HIRAGANA LETTER BE
+u3078_309A	48	0	12410	---  u307A  HIRAGANA LETTER PE
+u307B_3099	48	0	12412	---  u307C  HIRAGANA LETTER BO
+u307B_309A	48	0	12413	---  u307D  HIRAGANA LETTER PO
+u3046_3099	48	0	12436	---  u3094  HIRAGANA LETTER VU
+u309D_3099	48	0	12446	---  u309E  HIRAGANA VOICED ITERATION MARK
+u30AB_3099	48	0	12460	---  u30AC  KATAKANA LETTER GA
+u30AD_3099	48	0	12462	---  u30AE  KATAKANA LETTER GI
+u30AF_3099	48	0	12464	---  u30B0  KATAKANA LETTER GU
+u30B1_3099	48	0	12466	---  u30B2  KATAKANA LETTER GE
+u30B3_3099	48	0	12468	---  u30B4  KATAKANA LETTER GO
+u30B5_3099	48	0	12470	---  u30B6  KATAKANA LETTER ZA
+u30B7_3099	48	0	12472	---  u30B8  KATAKANA LETTER ZI
+u30B9_3099	48	0	12474	---  u30BA  KATAKANA LETTER ZU
+u30BB_3099	48	0	12476	---  u30BC  KATAKANA LETTER ZE
+u30BD_3099	48	0	12478	---  u30BE  KATAKANA LETTER ZO
+u30BF_3099	48	0	12480	---  u30C0  KATAKANA LETTER DA
+u30C1_3099	48	0	12482	---  u30C2  KATAKANA LETTER DI
+u30C4_3099	48	0	12485	---  u30C5  KATAKANA LETTER DU
+u30C6_3099	48	0	12487	---  u30C7  KATAKANA LETTER DE
+u30C8_3099	48	0	12489	---  u30C9  KATAKANA LETTER DO
+u30CF_3099	48	0	12496	---  u30D0  KATAKANA LETTER BA
+u30CF_309A	48	0	12497	---  u30D1  KATAKANA LETTER PA
+u30D2_3099	48	0	12499	---  u30D3  KATAKANA LETTER BI
+u30D2_309A	48	0	12500	---  u30D4  KATAKANA LETTER PI
+u30D5_3099	48	0	12502	---  u30D6  KATAKANA LETTER BU
+u30D5_309A	48	0	12503	---  u30D7  KATAKANA LETTER PU
+u30D8_3099	48	0	12505	---  u30D9  KATAKANA LETTER BE
+u30D8_309A	48	0	12506	---  u30DA  KATAKANA LETTER PE
+u30DB_3099	48	0	12508	---  u30DC  KATAKANA LETTER BO
+u30DB_309A	48	0	12509	---  u30DD  KATAKANA LETTER PO
+u30A6_3099	48	0	12532	---  u30F4  KATAKANA LETTER VU
+u30EF_3099	48	0	12535	---  u30F7  KATAKANA LETTER VA
+u30F0_3099	48	0	12536	---  u30F8  KATAKANA LETTER VI
+u30F1_3099	48	0	12537	---  u30F9  KATAKANA LETTER VE
+u30F2_3099	48	0	12538	---  u30FA  KATAKANA LETTER VO
+u30FD_3099	48	0	12542	---  u30FE  KATAKANA VOICED ITERATION MARK
+
diff --git a/font/devhtml/KOG b/font/devhtml/KOG
new file mode 100644
index 000000000..795527474
--- /dev/null
+++ b/font/devhtml/KOG
@@ -0,0 +1,27 @@
+#
+#  Korean, GoThic style
+#
+
+name KOG
+spacewidth 24
+
+charset-range
+u1100..u11FF	48	0	--- Hangul Jamo
+u3130..u318F	48	0	--- Hangul Compatibility Jamo
+uA960..uA97F	48	0	--- Hangul Jamo Extended-A
+uAC00..uD7AF	48	0	--- Hangul Syllables
+uD7B0..uD7FF	48	0	--- Hangul Jamo Extended-B
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFFE0..uFFE6	48	0	--- Fullwidth Forms
+
diff --git a/font/devhtml/KOM b/font/devhtml/KOM
new file mode 100644
index 000000000..9227459cd
--- /dev/null
+++ b/font/devhtml/KOM
@@ -0,0 +1,27 @@
+#
+#  Korean, MyeongJo style
+#
+
+name KOM
+spacewidth 24
+
+charset-range
+u1100..u11FF	48	0	--- Hangul Jamo
+u3130..u318F	48	0	--- Hangul Compatibility Jamo
+uA960..uA97F	48	0	--- Hangul Jamo Extended-A
+uAC00..uD7AF	48	0	--- Hangul Syllables
+uD7B0..uD7FF	48	0	--- Hangul Jamo Extended-B
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFFE0..uFFE6	48	0	--- Fullwidth Forms
+
diff --git a/font/devps/CSH b/font/devps/CSH
new file mode 100644
index 000000000..0a7955577
--- /dev/null
+++ b/font/devps/CSH
@@ -0,0 +1,25 @@
+#
+#  Chinese Simplified, Hei style (Heiti)
+#  Adobe-GB1
+#
+
+name CSH
+internalname STHeiti-Regular-UniGB-UTF16-H
+spacewidth 250
+
+charset-range
+u2000..u206F	1000	0	--- General Punctuation
+u2190..u21FF	1000	0	--- Arrows
+u2460..u24FF	1000	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1000	0	--- Geometric Shapes
+u2600..u26FF	1000	0	--- Miscellaneous Symbols
+u3000..u303F	1000	0	--- CJK Symbols and Punctuation
+u3200..u32FF	1000	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1000	0	--- CJK Compatibility
+u3400..u4DBF	1000	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1000	0	--- CJK Unified Ideographs
+uF900..uFAFF	1000	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1000	0	--- Fullwidth Forms
+uFFE0..uFFE5	1000	0	--- Fullwidth Forms
+u20000..u323AF	1000	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devps/CSS b/font/devps/CSS
new file mode 100644
index 000000000..6da66f318
--- /dev/null
+++ b/font/devps/CSS
@@ -0,0 +1,25 @@
+#
+#  Chinese Simplified, Song style (Songti)
+#  Adobe-GB1
+#
+
+name CSS
+internalname STSong-Light-UniGB-UTF16-H
+spacewidth 250
+
+charset-range
+u2000..u206F	1000	0	--- General Punctuation
+u2190..u21FF	1000	0	--- Arrows
+u2460..u24FF	1000	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1000	0	--- Geometric Shapes
+u2600..u26FF	1000	0	--- Miscellaneous Symbols
+u3000..u303F	1000	0	--- CJK Symbols and Punctuation
+u3200..u32FF	1000	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1000	0	--- CJK Compatibility
+u3400..u4DBF	1000	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1000	0	--- CJK Unified Ideographs
+uF900..uFAFF	1000	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1000	0	--- Fullwidth Forms
+uFFE0..uFFE5	1000	0	--- Fullwidth Forms
+u20000..u323AF	1000	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devps/CTH b/font/devps/CTH
new file mode 100644
index 000000000..d40b45cf0
--- /dev/null
+++ b/font/devps/CTH
@@ -0,0 +1,25 @@
+#
+#  Chinese Traditional, Hei style (Heiti)
+#  Adobe-CNS1
+#
+
+name CTH
+internalname MHei-Medium-UniCNS-UTF16-H
+spacewidth 250
+
+charset-range
+u2000..u206F	1000	0	--- General Punctuation
+u2190..u21FF	1000	0	--- Arrows
+u2460..u24FF	1000	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1000	0	--- Geometric Shapes
+u2600..u26FF	1000	0	--- Miscellaneous Symbols
+u3000..u303F	1000	0	--- CJK Symbols and Punctuation
+u3200..u32FF	1000	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1000	0	--- CJK Compatibility
+u3400..u4DBF	1000	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1000	0	--- CJK Unified Ideographs
+uF900..uFAFF	1000	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1000	0	--- Fullwidth Forms
+uFFE0..uFFE5	1000	0	--- Fullwidth Forms
+u20000..u323AF	1000	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devps/CTS b/font/devps/CTS
new file mode 100644
index 000000000..7af47be3f
--- /dev/null
+++ b/font/devps/CTS
@@ -0,0 +1,25 @@
+#
+#  Chinese Traditional, Song style (Songti)
+#  Adobe-CNS1
+#
+
+name CTS
+internalname MSung-Light-UniCNS-UTF16-H
+spacewidth 250
+
+charset-range
+u2000..u206F	1000	0	--- General Punctuation
+u2190..u21FF	1000	0	--- Arrows
+u2460..u24FF	1000	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1000	0	--- Geometric Shapes
+u2600..u26FF	1000	0	--- Miscellaneous Symbols
+u3000..u303F	1000	0	--- CJK Symbols and Punctuation
+u3200..u32FF	1000	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1000	0	--- CJK Compatibility
+u3400..u4DBF	1000	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1000	0	--- CJK Unified Ideographs
+uF900..uFAFF	1000	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1000	0	--- Fullwidth Forms
+uFFE0..uFFE5	1000	0	--- Fullwidth Forms
+u20000..u323AF	1000	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devps/JPG b/font/devps/JPG
new file mode 100644
index 000000000..fb86a625f
--- /dev/null
+++ b/font/devps/JPG
@@ -0,0 +1,90 @@
+#
+#  Japanese, Gothic style
+#  Adobe-Japan1
+#
+
+name JPG
+internalname GothicBBB-Medium-UniJIS-UTF16-H
+spacewidth 250
+
+charset-range
+u2000..u206F	1000	0	--- General Punctuation
+u2190..u21FF	1000	0	--- Arrows
+u2460..u24FF	1000	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1000	0	--- Geometric Shapes
+u2600..u26FF	1000	0	--- Miscellaneous Symbols
+u3000..u303F	1000	0	--- CJK Symbols and Punctuation
+u3040..u309F	1000	0	--- Hiragana
+u30A0..u30FF	1000	0	--- Katakana
+u31F0..u31FF	1000	0	--- Katakana Phonetic Extensions
+u3200..u32FF	1000	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1000	0	--- CJK Compatibility
+u3400..u4DBF	1000	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1000	0	--- CJK Unified Ideographs
+uF900..uFAFF	1000	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1000	0	--- Fullwidth Forms
+uFF61..uFF9F	500	0	--- Halfwidth Katakana
+uFFE0..uFFE5	1000	0	--- Fullwidth Forms
+u1AFF0..u1B16F	1000	0	--- Kana Extended-B .. Small Kana Extension
+u20000..u323AF	1000	0	--- CJK Unified Ideographs Extension B-H
+
+charset
+u304B_3099	1000	0	12364	---  u304C  HIRAGANA LETTER GA
+u304D_3099	1000	0	12366	---  u304E  HIRAGANA LETTER GI
+u304F_3099	1000	0	12368	---  u3050  HIRAGANA LETTER GU
+u3051_3099	1000	0	12370	---  u3052  HIRAGANA LETTER GE
+u3053_3099	1000	0	12372	---  u3054  HIRAGANA LETTER GO
+u3055_3099	1000	0	12374	---  u3056  HIRAGANA LETTER ZA
+u3057_3099	1000	0	12376	---  u3058  HIRAGANA LETTER ZI
+u3059_3099	1000	0	12378	---  u305A  HIRAGANA LETTER ZU
+u305B_3099	1000	0	12380	---  u305C  HIRAGANA LETTER ZE
+u305D_3099	1000	0	12382	---  u305E  HIRAGANA LETTER ZO
+u305F_3099	1000	0	12384	---  u3060  HIRAGANA LETTER DA
+u3061_3099	1000	0	12386	---  u3062  HIRAGANA LETTER DI
+u3064_3099	1000	0	12389	---  u3065  HIRAGANA LETTER DU
+u3066_3099	1000	0	12391	---  u3067  HIRAGANA LETTER DE
+u3068_3099	1000	0	12393	---  u3069  HIRAGANA LETTER DO
+u306F_3099	1000	0	12400	---  u3070  HIRAGANA LETTER BA
+u306F_309A	1000	0	12401	---  u3071  HIRAGANA LETTER PA
+u3072_3099	1000	0	12403	---  u3073  HIRAGANA LETTER BI
+u3072_309A	1000	0	12404	---  u3074  HIRAGANA LETTER PI
+u3075_3099	1000	0	12406	---  u3076  HIRAGANA LETTER BU
+u3075_309A	1000	0	12407	---  u3077  HIRAGANA LETTER PU
+u3078_3099	1000	0	12409	---  u3079  HIRAGANA LETTER BE
+u3078_309A	1000	0	12410	---  u307A  HIRAGANA LETTER PE
+u307B_3099	1000	0	12412	---  u307C  HIRAGANA LETTER BO
+u307B_309A	1000	0	12413	---  u307D  HIRAGANA LETTER PO
+u3046_3099	1000	0	12436	---  u3094  HIRAGANA LETTER VU
+u309D_3099	1000	0	12446	---  u309E  HIRAGANA VOICED ITERATION MARK
+u30AB_3099	1000	0	12460	---  u30AC  KATAKANA LETTER GA
+u30AD_3099	1000	0	12462	---  u30AE  KATAKANA LETTER GI
+u30AF_3099	1000	0	12464	---  u30B0  KATAKANA LETTER GU
+u30B1_3099	1000	0	12466	---  u30B2  KATAKANA LETTER GE
+u30B3_3099	1000	0	12468	---  u30B4  KATAKANA LETTER GO
+u30B5_3099	1000	0	12470	---  u30B6  KATAKANA LETTER ZA
+u30B7_3099	1000	0	12472	---  u30B8  KATAKANA LETTER ZI
+u30B9_3099	1000	0	12474	---  u30BA  KATAKANA LETTER ZU
+u30BB_3099	1000	0	12476	---  u30BC  KATAKANA LETTER ZE
+u30BD_3099	1000	0	12478	---  u30BE  KATAKANA LETTER ZO
+u30BF_3099	1000	0	12480	---  u30C0  KATAKANA LETTER DA
+u30C1_3099	1000	0	12482	---  u30C2  KATAKANA LETTER DI
+u30C4_3099	1000	0	12485	---  u30C5  KATAKANA LETTER DU
+u30C6_3099	1000	0	12487	---  u30C7  KATAKANA LETTER DE
+u30C8_3099	1000	0	12489	---  u30C9  KATAKANA LETTER DO
+u30CF_3099	1000	0	12496	---  u30D0  KATAKANA LETTER BA
+u30CF_309A	1000	0	12497	---  u30D1  KATAKANA LETTER PA
+u30D2_3099	1000	0	12499	---  u30D3  KATAKANA LETTER BI
+u30D2_309A	1000	0	12500	---  u30D4  KATAKANA LETTER PI
+u30D5_3099	1000	0	12502	---  u30D6  KATAKANA LETTER BU
+u30D5_309A	1000	0	12503	---  u30D7  KATAKANA LETTER PU
+u30D8_3099	1000	0	12505	---  u30D9  KATAKANA LETTER BE
+u30D8_309A	1000	0	12506	---  u30DA  KATAKANA LETTER PE
+u30DB_3099	1000	0	12508	---  u30DC  KATAKANA LETTER BO
+u30DB_309A	1000	0	12509	---  u30DD  KATAKANA LETTER PO
+u30A6_3099	1000	0	12532	---  u30F4  KATAKANA LETTER VU
+u30EF_3099	1000	0	12535	---  u30F7  KATAKANA LETTER VA
+u30F0_3099	1000	0	12536	---  u30F8  KATAKANA LETTER VI
+u30F1_3099	1000	0	12537	---  u30F9  KATAKANA LETTER VE
+u30F2_3099	1000	0	12538	---  u30FA  KATAKANA LETTER VO
+u30FD_3099	1000	0	12542	---  u30FE  KATAKANA VOICED ITERATION MARK
+
diff --git a/font/devps/JPM b/font/devps/JPM
new file mode 100644
index 000000000..190a30933
--- /dev/null
+++ b/font/devps/JPM
@@ -0,0 +1,90 @@
+#
+#  Japanese, Mincho style
+#  Adobe-Japan1
+#
+
+name JPM
+internalname Ryumin-Light-UniJIS-UTF16-H
+spacewidth 250
+
+charset-range
+u2000..u206F	1000	0	--- General Punctuation
+u2190..u21FF	1000	0	--- Arrows
+u2460..u24FF	1000	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1000	0	--- Geometric Shapes
+u2600..u26FF	1000	0	--- Miscellaneous Symbols
+u3000..u303F	1000	0	--- CJK Symbols and Punctuation
+u3040..u309F	1000	0	--- Hiragana
+u30A0..u30FF	1000	0	--- Katakana
+u31F0..u31FF	1000	0	--- Katakana Phonetic Extensions
+u3200..u32FF	1000	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1000	0	--- CJK Compatibility
+u3400..u4DBF	1000	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1000	0	--- CJK Unified Ideographs
+uF900..uFAFF	1000	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1000	0	--- Fullwidth Forms
+uFF61..uFF9F	500	0	--- Halfwidth Katakana
+uFFE0..uFFE5	1000	0	--- Fullwidth Forms
+u1AFF0..u1B16F	1000	0	--- Kana Extended-B .. Small Kana Extension
+u20000..u323AF	1000	0	--- CJK Unified Ideographs Extension B-H
+
+charset
+u304B_3099	1000	0	12364	---  u304C  HIRAGANA LETTER GA
+u304D_3099	1000	0	12366	---  u304E  HIRAGANA LETTER GI
+u304F_3099	1000	0	12368	---  u3050  HIRAGANA LETTER GU
+u3051_3099	1000	0	12370	---  u3052  HIRAGANA LETTER GE
+u3053_3099	1000	0	12372	---  u3054  HIRAGANA LETTER GO
+u3055_3099	1000	0	12374	---  u3056  HIRAGANA LETTER ZA
+u3057_3099	1000	0	12376	---  u3058  HIRAGANA LETTER ZI
+u3059_3099	1000	0	12378	---  u305A  HIRAGANA LETTER ZU
+u305B_3099	1000	0	12380	---  u305C  HIRAGANA LETTER ZE
+u305D_3099	1000	0	12382	---  u305E  HIRAGANA LETTER ZO
+u305F_3099	1000	0	12384	---  u3060  HIRAGANA LETTER DA
+u3061_3099	1000	0	12386	---  u3062  HIRAGANA LETTER DI
+u3064_3099	1000	0	12389	---  u3065  HIRAGANA LETTER DU
+u3066_3099	1000	0	12391	---  u3067  HIRAGANA LETTER DE
+u3068_3099	1000	0	12393	---  u3069  HIRAGANA LETTER DO
+u306F_3099	1000	0	12400	---  u3070  HIRAGANA LETTER BA
+u306F_309A	1000	0	12401	---  u3071  HIRAGANA LETTER PA
+u3072_3099	1000	0	12403	---  u3073  HIRAGANA LETTER BI
+u3072_309A	1000	0	12404	---  u3074  HIRAGANA LETTER PI
+u3075_3099	1000	0	12406	---  u3076  HIRAGANA LETTER BU
+u3075_309A	1000	0	12407	---  u3077  HIRAGANA LETTER PU
+u3078_3099	1000	0	12409	---  u3079  HIRAGANA LETTER BE
+u3078_309A	1000	0	12410	---  u307A  HIRAGANA LETTER PE
+u307B_3099	1000	0	12412	---  u307C  HIRAGANA LETTER BO
+u307B_309A	1000	0	12413	---  u307D  HIRAGANA LETTER PO
+u3046_3099	1000	0	12436	---  u3094  HIRAGANA LETTER VU
+u309D_3099	1000	0	12446	---  u309E  HIRAGANA VOICED ITERATION MARK
+u30AB_3099	1000	0	12460	---  u30AC  KATAKANA LETTER GA
+u30AD_3099	1000	0	12462	---  u30AE  KATAKANA LETTER GI
+u30AF_3099	1000	0	12464	---  u30B0  KATAKANA LETTER GU
+u30B1_3099	1000	0	12466	---  u30B2  KATAKANA LETTER GE
+u30B3_3099	1000	0	12468	---  u30B4  KATAKANA LETTER GO
+u30B5_3099	1000	0	12470	---  u30B6  KATAKANA LETTER ZA
+u30B7_3099	1000	0	12472	---  u30B8  KATAKANA LETTER ZI
+u30B9_3099	1000	0	12474	---  u30BA  KATAKANA LETTER ZU
+u30BB_3099	1000	0	12476	---  u30BC  KATAKANA LETTER ZE
+u30BD_3099	1000	0	12478	---  u30BE  KATAKANA LETTER ZO
+u30BF_3099	1000	0	12480	---  u30C0  KATAKANA LETTER DA
+u30C1_3099	1000	0	12482	---  u30C2  KATAKANA LETTER DI
+u30C4_3099	1000	0	12485	---  u30C5  KATAKANA LETTER DU
+u30C6_3099	1000	0	12487	---  u30C7  KATAKANA LETTER DE
+u30C8_3099	1000	0	12489	---  u30C9  KATAKANA LETTER DO
+u30CF_3099	1000	0	12496	---  u30D0  KATAKANA LETTER BA
+u30CF_309A	1000	0	12497	---  u30D1  KATAKANA LETTER PA
+u30D2_3099	1000	0	12499	---  u30D3  KATAKANA LETTER BI
+u30D2_309A	1000	0	12500	---  u30D4  KATAKANA LETTER PI
+u30D5_3099	1000	0	12502	---  u30D6  KATAKANA LETTER BU
+u30D5_309A	1000	0	12503	---  u30D7  KATAKANA LETTER PU
+u30D8_3099	1000	0	12505	---  u30D9  KATAKANA LETTER BE
+u30D8_309A	1000	0	12506	---  u30DA  KATAKANA LETTER PE
+u30DB_3099	1000	0	12508	---  u30DC  KATAKANA LETTER BO
+u30DB_309A	1000	0	12509	---  u30DD  KATAKANA LETTER PO
+u30A6_3099	1000	0	12532	---  u30F4  KATAKANA LETTER VU
+u30EF_3099	1000	0	12535	---  u30F7  KATAKANA LETTER VA
+u30F0_3099	1000	0	12536	---  u30F8  KATAKANA LETTER VI
+u30F1_3099	1000	0	12537	---  u30F9  KATAKANA LETTER VE
+u30F2_3099	1000	0	12538	---  u30FA  KATAKANA LETTER VO
+u30FD_3099	1000	0	12542	---  u30FE  KATAKANA VOICED ITERATION MARK
+
diff --git a/font/devps/KOG b/font/devps/KOG
new file mode 100644
index 000000000..23d02e00d
--- /dev/null
+++ b/font/devps/KOG
@@ -0,0 +1,29 @@
+#
+#  Korean, GoThic style
+#  Adobe-Korea1
+#
+
+name KOG
+internalname HYGoThic-Medium-UniKS-UTF16-H
+spacewidth 250
+
+charset-range
+u1100..u11FF	1000	0	--- Hangul Jamo
+u3130..u318F	1000	0	--- Hangul Compatibility Jamo
+uA960..uA97F	1000	0	--- Hangul Jamo Extended-A
+uAC00..uD7AF	1000	0	--- Hangul Syllables
+uD7B0..uD7FF	1000	0	--- Hangul Jamo Extended-B
+u2000..u206F	1000	0	--- General Punctuation
+u2190..u21FF	1000	0	--- Arrows
+u2460..u24FF	1000	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1000	0	--- Geometric Shapes
+u2600..u26FF	1000	0	--- Miscellaneous Symbols
+u3000..u303F	1000	0	--- CJK Symbols and Punctuation
+u3200..u32FF	1000	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1000	0	--- CJK Compatibility
+u3400..u4DBF	1000	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1000	0	--- CJK Unified Ideographs
+uF900..uFAFF	1000	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1000	0	--- Fullwidth Forms
+uFFE0..uFFE6	1000	0	--- Fullwidth Forms
+
diff --git a/font/devps/KOM b/font/devps/KOM
new file mode 100644
index 000000000..077e32f0f
--- /dev/null
+++ b/font/devps/KOM
@@ -0,0 +1,29 @@
+#
+#  Korean, MyeongJo style
+#  Adobe-Korea1
+#
+
+name KOM
+internalname HYSMyeongJo-Medium-UniKS-UTF16-H
+spacewidth 250
+
+charset-range
+u1100..u11FF	1000	0	--- Hangul Jamo
+u3130..u318F	1000	0	--- Hangul Compatibility Jamo
+uA960..uA97F	1000	0	--- Hangul Jamo Extended-A
+uAC00..uD7AF	1000	0	--- Hangul Syllables
+uD7B0..uD7FF	1000	0	--- Hangul Jamo Extended-B
+u2000..u206F	1000	0	--- General Punctuation
+u2190..u21FF	1000	0	--- Arrows
+u2460..u24FF	1000	0	--- Enclosed Alphanumerics
+u25A0..u25FF	1000	0	--- Geometric Shapes
+u2600..u26FF	1000	0	--- Miscellaneous Symbols
+u3000..u303F	1000	0	--- CJK Symbols and Punctuation
+u3200..u32FF	1000	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	1000	0	--- CJK Compatibility
+u3400..u4DBF	1000	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	1000	0	--- CJK Unified Ideographs
+uF900..uFAFF	1000	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	1000	0	--- Fullwidth Forms
+uFFE0..uFFE6	1000	0	--- Fullwidth Forms
+
diff --git a/font/devutf8/CSH b/font/devutf8/CSH
new file mode 100644
index 000000000..f6e73ab82
--- /dev/null
+++ b/font/devutf8/CSH
@@ -0,0 +1,24 @@
+#
+#  Chinese Simplified, Hei style (Heiti)
+#
+
+name CSH
+internalname 2
+spacewidth 24
+
+charset-range
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFFE0..uFFE5	48	0	--- Fullwidth Forms
+u20000..u323AF	48	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devutf8/CSS b/font/devutf8/CSS
new file mode 100644
index 000000000..2df525d7c
--- /dev/null
+++ b/font/devutf8/CSS
@@ -0,0 +1,23 @@
+#
+#  Chinese Simplified, Song style (Songti)
+#
+
+name CSS
+spacewidth 24
+
+charset-range
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFFE0..uFFE5	48	0	--- Fullwidth Forms
+u20000..u323AF	48	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devutf8/CTH b/font/devutf8/CTH
new file mode 100644
index 000000000..a7bf5cc24
--- /dev/null
+++ b/font/devutf8/CTH
@@ -0,0 +1,24 @@
+#
+#  Chinese Traditional, Hei style (Heiti)
+#
+
+name CTH
+internalname 2
+spacewidth 24
+
+charset-range
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFFE0..uFFE5	48	0	--- Fullwidth Forms
+u20000..u323AF	48	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devutf8/CTS b/font/devutf8/CTS
new file mode 100644
index 000000000..66eeca915
--- /dev/null
+++ b/font/devutf8/CTS
@@ -0,0 +1,23 @@
+#
+#  Chinese Traditional, Song style (Songti)
+#
+
+name CTS
+spacewidth 24
+
+charset-range
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFFE0..uFFE5	48	0	--- Fullwidth Forms
+u20000..u323AF	48	0	--- CJK Unified Ideographs Extension B-H
+
diff --git a/font/devutf8/JPG b/font/devutf8/JPG
new file mode 100644
index 000000000..b8f4f1f58
--- /dev/null
+++ b/font/devutf8/JPG
@@ -0,0 +1,89 @@
+#
+#  Japanese, Gothic style
+#
+
+name JPG
+internalname 2
+spacewidth 24
+
+charset-range
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3040..u309F	48	0	--- Hiragana
+u30A0..u30FF	48	0	--- Katakana
+u31F0..u31FF	48	0	--- Katakana Phonetic Extensions
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFF61..uFF9F	24	0	--- Halfwidth Katakana
+uFFE0..uFFE5	48	0	--- Fullwidth Forms
+u1AFF0..u1B16F	48	0	--- Kana Extended-B .. Small Kana Extension
+u20000..u323AF	48	0	--- CJK Unified Ideographs Extension B-H
+
+charset
+u304B_3099	48	0	12364	---  u304C  HIRAGANA LETTER GA
+u304D_3099	48	0	12366	---  u304E  HIRAGANA LETTER GI
+u304F_3099	48	0	12368	---  u3050  HIRAGANA LETTER GU
+u3051_3099	48	0	12370	---  u3052  HIRAGANA LETTER GE
+u3053_3099	48	0	12372	---  u3054  HIRAGANA LETTER GO
+u3055_3099	48	0	12374	---  u3056  HIRAGANA LETTER ZA
+u3057_3099	48	0	12376	---  u3058  HIRAGANA LETTER ZI
+u3059_3099	48	0	12378	---  u305A  HIRAGANA LETTER ZU
+u305B_3099	48	0	12380	---  u305C  HIRAGANA LETTER ZE
+u305D_3099	48	0	12382	---  u305E  HIRAGANA LETTER ZO
+u305F_3099	48	0	12384	---  u3060  HIRAGANA LETTER DA
+u3061_3099	48	0	12386	---  u3062  HIRAGANA LETTER DI
+u3064_3099	48	0	12389	---  u3065  HIRAGANA LETTER DU
+u3066_3099	48	0	12391	---  u3067  HIRAGANA LETTER DE
+u3068_3099	48	0	12393	---  u3069  HIRAGANA LETTER DO
+u306F_3099	48	0	12400	---  u3070  HIRAGANA LETTER BA
+u306F_309A	48	0	12401	---  u3071  HIRAGANA LETTER PA
+u3072_3099	48	0	12403	---  u3073  HIRAGANA LETTER BI
+u3072_309A	48	0	12404	---  u3074  HIRAGANA LETTER PI
+u3075_3099	48	0	12406	---  u3076  HIRAGANA LETTER BU
+u3075_309A	48	0	12407	---  u3077  HIRAGANA LETTER PU
+u3078_3099	48	0	12409	---  u3079  HIRAGANA LETTER BE
+u3078_309A	48	0	12410	---  u307A  HIRAGANA LETTER PE
+u307B_3099	48	0	12412	---  u307C  HIRAGANA LETTER BO
+u307B_309A	48	0	12413	---  u307D  HIRAGANA LETTER PO
+u3046_3099	48	0	12436	---  u3094  HIRAGANA LETTER VU
+u309D_3099	48	0	12446	---  u309E  HIRAGANA VOICED ITERATION MARK
+u30AB_3099	48	0	12460	---  u30AC  KATAKANA LETTER GA
+u30AD_3099	48	0	12462	---  u30AE  KATAKANA LETTER GI
+u30AF_3099	48	0	12464	---  u30B0  KATAKANA LETTER GU
+u30B1_3099	48	0	12466	---  u30B2  KATAKANA LETTER GE
+u30B3_3099	48	0	12468	---  u30B4  KATAKANA LETTER GO
+u30B5_3099	48	0	12470	---  u30B6  KATAKANA LETTER ZA
+u30B7_3099	48	0	12472	---  u30B8  KATAKANA LETTER ZI
+u30B9_3099	48	0	12474	---  u30BA  KATAKANA LETTER ZU
+u30BB_3099	48	0	12476	---  u30BC  KATAKANA LETTER ZE
+u30BD_3099	48	0	12478	---  u30BE  KATAKANA LETTER ZO
+u30BF_3099	48	0	12480	---  u30C0  KATAKANA LETTER DA
+u30C1_3099	48	0	12482	---  u30C2  KATAKANA LETTER DI
+u30C4_3099	48	0	12485	---  u30C5  KATAKANA LETTER DU
+u30C6_3099	48	0	12487	---  u30C7  KATAKANA LETTER DE
+u30C8_3099	48	0	12489	---  u30C9  KATAKANA LETTER DO
+u30CF_3099	48	0	12496	---  u30D0  KATAKANA LETTER BA
+u30CF_309A	48	0	12497	---  u30D1  KATAKANA LETTER PA
+u30D2_3099	48	0	12499	---  u30D3  KATAKANA LETTER BI
+u30D2_309A	48	0	12500	---  u30D4  KATAKANA LETTER PI
+u30D5_3099	48	0	12502	---  u30D6  KATAKANA LETTER BU
+u30D5_309A	48	0	12503	---  u30D7  KATAKANA LETTER PU
+u30D8_3099	48	0	12505	---  u30D9  KATAKANA LETTER BE
+u30D8_309A	48	0	12506	---  u30DA  KATAKANA LETTER PE
+u30DB_3099	48	0	12508	---  u30DC  KATAKANA LETTER BO
+u30DB_309A	48	0	12509	---  u30DD  KATAKANA LETTER PO
+u30A6_3099	48	0	12532	---  u30F4  KATAKANA LETTER VU
+u30EF_3099	48	0	12535	---  u30F7  KATAKANA LETTER VA
+u30F0_3099	48	0	12536	---  u30F8  KATAKANA LETTER VI
+u30F1_3099	48	0	12537	---  u30F9  KATAKANA LETTER VE
+u30F2_3099	48	0	12538	---  u30FA  KATAKANA LETTER VO
+u30FD_3099	48	0	12542	---  u30FE  KATAKANA VOICED ITERATION MARK
+
diff --git a/font/devutf8/JPM b/font/devutf8/JPM
new file mode 100644
index 000000000..5d57e8702
--- /dev/null
+++ b/font/devutf8/JPM
@@ -0,0 +1,88 @@
+#
+#  Japanese, Mincho style
+#
+
+name JPM
+spacewidth 24
+
+charset-range
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3040..u309F	48	0	--- Hiragana
+u30A0..u30FF	48	0	--- Katakana
+u31F0..u31FF	48	0	--- Katakana Phonetic Extensions
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFF61..uFF9F	24	0	--- Halfwidth Katakana
+uFFE0..uFFE5	48	0	--- Fullwidth Forms
+u1AFF0..u1B16F	48	0	--- Kana Extended-B .. Small Kana Extension
+u20000..u323AF	48	0	--- CJK Unified Ideographs Extension B-H
+
+charset
+u304B_3099	48	0	12364	---  u304C  HIRAGANA LETTER GA
+u304D_3099	48	0	12366	---  u304E  HIRAGANA LETTER GI
+u304F_3099	48	0	12368	---  u3050  HIRAGANA LETTER GU
+u3051_3099	48	0	12370	---  u3052  HIRAGANA LETTER GE
+u3053_3099	48	0	12372	---  u3054  HIRAGANA LETTER GO
+u3055_3099	48	0	12374	---  u3056  HIRAGANA LETTER ZA
+u3057_3099	48	0	12376	---  u3058  HIRAGANA LETTER ZI
+u3059_3099	48	0	12378	---  u305A  HIRAGANA LETTER ZU
+u305B_3099	48	0	12380	---  u305C  HIRAGANA LETTER ZE
+u305D_3099	48	0	12382	---  u305E  HIRAGANA LETTER ZO
+u305F_3099	48	0	12384	---  u3060  HIRAGANA LETTER DA
+u3061_3099	48	0	12386	---  u3062  HIRAGANA LETTER DI
+u3064_3099	48	0	12389	---  u3065  HIRAGANA LETTER DU
+u3066_3099	48	0	12391	---  u3067  HIRAGANA LETTER DE
+u3068_3099	48	0	12393	---  u3069  HIRAGANA LETTER DO
+u306F_3099	48	0	12400	---  u3070  HIRAGANA LETTER BA
+u306F_309A	48	0	12401	---  u3071  HIRAGANA LETTER PA
+u3072_3099	48	0	12403	---  u3073  HIRAGANA LETTER BI
+u3072_309A	48	0	12404	---  u3074  HIRAGANA LETTER PI
+u3075_3099	48	0	12406	---  u3076  HIRAGANA LETTER BU
+u3075_309A	48	0	12407	---  u3077  HIRAGANA LETTER PU
+u3078_3099	48	0	12409	---  u3079  HIRAGANA LETTER BE
+u3078_309A	48	0	12410	---  u307A  HIRAGANA LETTER PE
+u307B_3099	48	0	12412	---  u307C  HIRAGANA LETTER BO
+u307B_309A	48	0	12413	---  u307D  HIRAGANA LETTER PO
+u3046_3099	48	0	12436	---  u3094  HIRAGANA LETTER VU
+u309D_3099	48	0	12446	---  u309E  HIRAGANA VOICED ITERATION MARK
+u30AB_3099	48	0	12460	---  u30AC  KATAKANA LETTER GA
+u30AD_3099	48	0	12462	---  u30AE  KATAKANA LETTER GI
+u30AF_3099	48	0	12464	---  u30B0  KATAKANA LETTER GU
+u30B1_3099	48	0	12466	---  u30B2  KATAKANA LETTER GE
+u30B3_3099	48	0	12468	---  u30B4  KATAKANA LETTER GO
+u30B5_3099	48	0	12470	---  u30B6  KATAKANA LETTER ZA
+u30B7_3099	48	0	12472	---  u30B8  KATAKANA LETTER ZI
+u30B9_3099	48	0	12474	---  u30BA  KATAKANA LETTER ZU
+u30BB_3099	48	0	12476	---  u30BC  KATAKANA LETTER ZE
+u30BD_3099	48	0	12478	---  u30BE  KATAKANA LETTER ZO
+u30BF_3099	48	0	12480	---  u30C0  KATAKANA LETTER DA
+u30C1_3099	48	0	12482	---  u30C2  KATAKANA LETTER DI
+u30C4_3099	48	0	12485	---  u30C5  KATAKANA LETTER DU
+u30C6_3099	48	0	12487	---  u30C7  KATAKANA LETTER DE
+u30C8_3099	48	0	12489	---  u30C9  KATAKANA LETTER DO
+u30CF_3099	48	0	12496	---  u30D0  KATAKANA LETTER BA
+u30CF_309A	48	0	12497	---  u30D1  KATAKANA LETTER PA
+u30D2_3099	48	0	12499	---  u30D3  KATAKANA LETTER BI
+u30D2_309A	48	0	12500	---  u30D4  KATAKANA LETTER PI
+u30D5_3099	48	0	12502	---  u30D6  KATAKANA LETTER BU
+u30D5_309A	48	0	12503	---  u30D7  KATAKANA LETTER PU
+u30D8_3099	48	0	12505	---  u30D9  KATAKANA LETTER BE
+u30D8_309A	48	0	12506	---  u30DA  KATAKANA LETTER PE
+u30DB_3099	48	0	12508	---  u30DC  KATAKANA LETTER BO
+u30DB_309A	48	0	12509	---  u30DD  KATAKANA LETTER PO
+u30A6_3099	48	0	12532	---  u30F4  KATAKANA LETTER VU
+u30EF_3099	48	0	12535	---  u30F7  KATAKANA LETTER VA
+u30F0_3099	48	0	12536	---  u30F8  KATAKANA LETTER VI
+u30F1_3099	48	0	12537	---  u30F9  KATAKANA LETTER VE
+u30F2_3099	48	0	12538	---  u30FA  KATAKANA LETTER VO
+u30FD_3099	48	0	12542	---  u30FE  KATAKANA VOICED ITERATION MARK
+
diff --git a/font/devutf8/KOG b/font/devutf8/KOG
new file mode 100644
index 000000000..7df466eb8
--- /dev/null
+++ b/font/devutf8/KOG
@@ -0,0 +1,28 @@
+#
+#  Korean, GoThic style
+#
+
+name KOG
+internalname 2
+spacewidth 24
+
+charset-range
+u1100..u11FF	48	0	--- Hangul Jamo
+u3130..u318F	48	0	--- Hangul Compatibility Jamo
+uA960..uA97F	48	0	--- Hangul Jamo Extended-A
+uAC00..uD7AF	48	0	--- Hangul Syllables
+uD7B0..uD7FF	48	0	--- Hangul Jamo Extended-B
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFFE0..uFFE6	48	0	--- Fullwidth Forms
+
diff --git a/font/devutf8/KOM b/font/devutf8/KOM
new file mode 100644
index 000000000..9227459cd
--- /dev/null
+++ b/font/devutf8/KOM
@@ -0,0 +1,27 @@
+#
+#  Korean, MyeongJo style
+#
+
+name KOM
+spacewidth 24
+
+charset-range
+u1100..u11FF	48	0	--- Hangul Jamo
+u3130..u318F	48	0	--- Hangul Compatibility Jamo
+uA960..uA97F	48	0	--- Hangul Jamo Extended-A
+uAC00..uD7AF	48	0	--- Hangul Syllables
+uD7B0..uD7FF	48	0	--- Hangul Jamo Extended-B
+u2000..u206F	48	0	--- General Punctuation
+u2190..u21FF	48	0	--- Arrows
+u2460..u24FF	48	0	--- Enclosed Alphanumerics
+u25A0..u25FF	48	0	--- Geometric Shapes
+u2600..u26FF	48	0	--- Miscellaneous Symbols
+u3000..u303F	48	0	--- CJK Symbols and Punctuation
+u3200..u32FF	48	0	--- Enclosed CJK Letters and Months
+u3300..u33FF	48	0	--- CJK Compatibility
+u3400..u4DBF	48	0	--- CJK Unified Ideographs Extension A
+u4E00..u9FFF	48	0	--- CJK Unified Ideographs
+uF900..uFAFF	48	0	--- CJK Compatibility Ideographs
+uFF00..uFF60	48	0	--- Fullwidth Forms
+uFFE0..uFFE6	48	0	--- Fullwidth Forms
+
diff --git a/src/devices/grohtml/post-html.cpp b/src/devices/grohtml/post-html.cpp
index fb4fdc28b..107b112f2 100644
--- a/src/devices/grohtml/post-html.cpp
+++ b/src/devices/grohtml/post-html.cpp
@@ -94,6 +94,7 @@ static int valid_flag = FALSE;              /* has user requested a valid flag a
                                             /* end of each page?                        */
 static int groff_sig = FALSE;               /* "This document was produced using"       */
 html_dialect dialect = html4;               /* which html dialect should grohtml output */
+static int charset_utf8 = FALSE;            /* charset in UTF-8, default isUS-ASCII     */
 
 
 /*
@@ -1398,6 +1399,36 @@ void page::add_line (style *s,
   }
 }
 
+/*
+ *  to_utf8_string - returns a utf string of int, ch.
+ */
+
+static char *to_utf8_string (unsigned int ch)
+{
+  static char buf[30];
+
+  if      (ch<0x80  )
+    sprintf(buf, "%c", ch & 0xff);
+  else if (ch<0x800 )
+    sprintf(buf, "%c%c",
+      0xc0 + (((ch) >>  6) & 0x1f),
+      0x80 + (((ch)      ) & 0x3f) );
+  else if (ch<0xD800 || (ch>0xDFFF && ch<0x10000))
+    sprintf(buf, "%c%c%c",
+      0xe0 + (((ch) >> 12) & 0x0f),
+      0x80 + (((ch) >>  6) & 0x3f),
+      0x80 + (((ch)      ) & 0x3f) );
+  else if (ch<0x120000)
+    sprintf(buf, "%c%c%c%c",
+      0xf0 + (((ch) >> 18) & 0x07),
+      0x80 + (((ch) >> 12) & 0x3f),
+      0x80 + (((ch) >>  6) & 0x3f),
+      0x80 + (((ch)      ) & 0x3f) );
+  else
+    sprintf(buf, "&#%u;", ch);
+  return buf;
+}
+
 /*
  *  to_unicode - returns a unicode translation of int, ch.
  */
@@ -3998,6 +4029,11 @@ void html_printer::end_font (const char *fontname)
     current_paragraph->done_bold();
     current_paragraph->done_italic();
     current_paragraph->done_tt();
+  } else if (strcmp(fontname, "CSH") == 0 ||
+             strcmp(fontname, "CTH") == 0 ||
+             strcmp(fontname, "JPG") == 0 ||
+             strcmp(fontname, "KOG") == 0) {
+    current_paragraph->done_bold();
   }
 }
 
@@ -4046,6 +4082,18 @@ void html_printer::start_font (const char *fontname)
     current_paragraph->do_tt();
     current_paragraph->do_italic();
     current_paragraph->do_bold();
+  } else if (strcmp(fontname, "CSS") == 0 ||
+             strcmp(fontname, "CTS") == 0 ||
+             strcmp(fontname, "JPM") == 0 ||
+             strcmp(fontname, "KOM") == 0) {
+    current_paragraph->done_bold();
+    current_paragraph->done_italic();
+  } else if (strcmp(fontname, "CSH") == 0 ||
+             strcmp(fontname, "CTH") == 0 ||
+             strcmp(fontname, "JPG") == 0 ||
+             strcmp(fontname, "KOG") == 0) {
+    current_paragraph->do_bold();
+    current_paragraph->done_italic();
   }
 }
 
@@ -4416,7 +4464,7 @@ void html_printer::add_to_sbuf (glyph *g, const string &s)
       html_glyph = 0;
 
     if ((0 /* nullptr */ == html_glyph) && (code >= UNICODE_DESC_START))
-      html_glyph = to_unicode(code);
+      html_glyph = charset_utf8 ? to_utf8_string(code) : to_unicode(code);
   } else
     html_glyph = get_html_translation(sbuf_style.f, s);
 
@@ -4497,6 +4545,8 @@ static const char *get_html_entity (unsigned int code)
       case 0x003E: return "&gt;";
       default: return 0;
     }
+  } else if (charset_utf8) {
+      return to_utf8_string(code);
   } else {
     switch (code) {
       case 0x00A0: return "&nbsp;";
@@ -5176,13 +5226,17 @@ void html_printer::writeHeadMetaStyle (void)
     fputs("<meta name=\"generator\" "
 	  "content=\"groff -Thtml, see www.gnu.org\">\n", stdout);
     fputs("<meta http-equiv=\"Content-Type\" "
-	  "content=\"text/html; charset=US-ASCII\">\n", stdout);
+	  "content=\"text/html; charset=", stdout);
+    fputs(charset_utf8 ? "UTF-8" : "US-ASCII", stdout);
+    fputs("\">\n", stdout);
     fputs("<meta name=\"Content-Style\" content=\"text/css\">\n",
 	  stdout);
     fputs("<style type=\"text/css\">\n", stdout);
   }
   else {
-    fputs("<?xml version=\"1.0\" encoding=\"us-ascii\"?>\n", stdout);
+    fputs("<?xml version=\"1.0\" encoding=\"", stdout);
+    fputs(charset_utf8 ? "UTF-8" : "us-ascii", stdout);
+    fputs("\"?>\n", stdout);
     fputs("<!DOCTYPE html PUBLIC \"-//W3C//"
 	  "DTD XHTML 1.1 plus MathML 2.0//EN\"\n", stdout);
     fputs(" \"http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd\"\n",
@@ -5196,7 +5250,9 @@ void html_printer::writeHeadMetaStyle (void)
     fputs("<meta name=\"generator\" "
 	  "content=\"groff -Txhtml, see www.gnu.org\"/>\n", stdout);
     fputs("<meta http-equiv=\"Content-Type\" "
-	  "content=\"text/html; charset=US-ASCII\"/>\n", stdout);
+	  "content=\"text/html; charset=", stdout);
+    fputs(charset_utf8 ? "UTF-8" : "US-ASCII", stdout);
+    fputs("\"/>\n", stdout);
     fputs("<meta name=\"Content-Style\" content=\"text/css\"/>\n",
 	  stdout);
     fputs("<style type=\"text/css\">\n", stdout);
@@ -5559,7 +5615,7 @@ int main(int argc, char **argv)
     { NULL, 0, 0, 0 }
   };
   while ((c = getopt_long(argc, argv,
-	  "a:bCdD:eF:g:Ghi:I:j:lno:prs:S:vVx:y", long_options, NULL))
+	  "a:bCdD:eF:g:Ghi:I:j:lno:prs:S:UvVx:y", long_options, NULL))
 	 != EOF)
     switch(c) {
     case 'a':
@@ -5628,6 +5684,9 @@ int main(int argc, char **argv)
     case 'S':
       split_level = atoi(optarg) + 1;
       break;
+    case 'U':
+      charset_utf8 = TRUE;
+      break;
     case 'v':
       printf("GNU post-grohtml (groff) version %s\n", Version_string);
       exit(0);
@@ -5670,7 +5729,7 @@ int main(int argc, char **argv)
 static void usage(FILE *stream)
 {
   fprintf(stream,
-"usage: %s [-bCGhlnrVy] [-F font-directory] [-j output-stem]"
+"usage: %s [-bCGhlnrUVy] [-F font-directory] [-j output-stem]"
 " [-s base-type-size] [-S heading-level] [-x html-dialect] [file ...]\n"
 "usage: %s {-v | --version}\n"
 "usage: %s --help\n",
diff --git a/src/devices/grops/ps.cpp b/src/devices/grops/ps.cpp
index 807945f97..8bd39342e 100644
--- a/src/devices/grops/ps.cpp
+++ b/src/devices/grops/ps.cpp
@@ -200,13 +200,15 @@ ps_output &ps_output::put_delimiter(char c)
   return *this;
 }
 
-ps_output &ps_output::put_string(const char *s, int n)
+ps_output &ps_output::put_string(const wchar_t *s, int n, int is_utf16)
 {
   int len = 0;
   int i;
   for (i = 0; i < n; i++) {
-    char c = s[i];
-    if (is_ascii(c) && csprint(c)) {
+    wchar_t c = s[i];
+    if (is_utf16) {
+      len = (i+1)*4;
+    } else if (is_ascii(c) && csprint(c)) {
       if (c == '(' || c == ')' || c == '\\')
 	len += 2;
       else
@@ -215,7 +217,7 @@ ps_output &ps_output::put_string(const char *s, int n)
     else
       len += 4;
   }
-  if (len > n*2) {
+  if (len > n*2 || is_utf16) {
     if (col + n*2 + 2 > max_line_length && n*2 + 2 <= max_line_length) {
       putc('\n', fp);
       col = 0;
@@ -231,8 +233,13 @@ ps_output &ps_output::put_string(const char *s, int n)
 	putc('\n', fp);
 	col = 0;
       }
-      fprintf(fp, "%02x", s[i] & 0377);
-      col += 2;
+      if (is_utf16) {
+        fprintf(fp, "%04X", s[i] & 0xFFFF);
+        col += 4;
+      } else {
+        fprintf(fp, "%02x", s[i] & 0377);
+        col += 2;
+      }
     }
     putc('>', fp);
     col++;
@@ -527,7 +534,7 @@ class ps_printer : public printer {
   int paper_length;
   int equalise_spaces;
   enum { SBUF_SIZE = 256 };
-  char sbuf[SBUF_SIZE];
+  wchar_t sbuf[SBUF_SIZE];
   int sbuf_len;
   int sbuf_start_hpos;
   int sbuf_vpos;
@@ -561,7 +568,7 @@ class ps_printer : public printer {
   void set_style(const style &);
   void set_space_code(unsigned char);
   int set_encoding_index(ps_font *);
-  subencoding *set_subencoding(font *, glyph *, unsigned char *);
+  subencoding *set_subencoding(font *, glyph *, wchar_t *);
   char *get_subfont(subencoding *, const char *);
   void do_exec(char *, const environment *);
   void do_import(char *, const environment *);
@@ -658,10 +665,25 @@ int ps_printer::set_encoding_index(ps_font *f)
 }
 
 subencoding *ps_printer::set_subencoding(font *f, glyph *g,
-					 unsigned char *codep)
+					 wchar_t *code)
 {
   unsigned int idx = f->get_code(g);
-  *codep = idx % 256;
+  const char *psname = f->get_internal_name();
+
+  if (psname && strstr(psname,"-UTF16-")) {
+    /* Unicode, convert to UTF-16 */
+    if (idx<0x10000) {
+      code[0] = idx;
+      code[1] = 0;
+    } else {
+      code[0] = (idx - 0x10000) / 0x400 + 0xD800;
+      code[1] = (idx - 0x10000) % 0x400 + 0xDC00;
+    }
+    return NULL;
+  }
+
+  code[0] = idx % 256;
+  code[1] = 0;
   unsigned int num = idx >> 8;
   if (num == 0)
     return 0;
@@ -672,7 +694,7 @@ subencoding *ps_printer::set_subencoding(font *f, glyph *g,
   if (p == 0)
     p = subencodings = new subencoding(f, num, next_subencoding_index++,
 				       subencodings);
-  p->glyphs[*codep] = f->get_special_device_encoding(g);
+  p->glyphs[*code] = f->get_special_device_encoding(g);
   return p;
 }
 
@@ -692,8 +714,8 @@ void ps_printer::set_char(glyph *g, font *f, const environment *env, int w,
 {
   if (g == space_glyph || invis_count > 0)
     return;
-  unsigned char code;
-  subencoding *sub = set_subencoding(f, g, &code);
+  wchar_t code[2];
+  subencoding *sub = set_subencoding(f, g, code);
   style sty(f, sub, env->size, env->height, env->slant);
   if (sty.slant != 0) {
     if (sty.slant > 80 || sty.slant < -80) {
@@ -707,14 +729,16 @@ void ps_printer::set_char(glyph *g, font *f, const environment *env, int w,
 	&& sbuf_vpos == env->vpos
 	&& sbuf_color == *env->col) {
       if (sbuf_end_hpos == env->hpos) {
-	sbuf[sbuf_len++] = code;
+	sbuf[sbuf_len++] = code[0];
+	if (code[1]>0) sbuf[sbuf_len++] = code[1];
 	sbuf_end_hpos += w + sbuf_kern;
 	return;
       }
       if (sbuf_len == 1 && sbuf_kern == 0) {
 	sbuf_kern = env->hpos - sbuf_end_hpos;
 	sbuf_end_hpos = env->hpos + sbuf_kern + w;
-	sbuf[sbuf_len++] = code;
+	sbuf[sbuf_len++] = code[0];
+	if (code[1]>0) sbuf[sbuf_len++] = code[1];
 	return;
       }
       /* If sbuf_end_hpos - sbuf_kern == env->hpos, we are better off
@@ -727,7 +751,8 @@ void ps_printer::set_char(glyph *g, font *f, const environment *env, int w,
 	    sbuf_space_width = env->hpos - sbuf_end_hpos;
 	    sbuf_end_hpos = env->hpos + w + sbuf_kern;
 	    sbuf[sbuf_len++] = sbuf_space_code;
-	    sbuf[sbuf_len++] = code;
+	    sbuf[sbuf_len++] = code[0];
+	    if (code[1]>0) sbuf[sbuf_len++] = code[1];
 	    sbuf_space_count++;
 	    return;
 	  }
@@ -737,7 +762,8 @@ void ps_printer::set_char(glyph *g, font *f, const environment *env, int w,
 	  if (diff == 0 || (equalise_spaces && (diff == 1 || diff == -1))) {
 	    sbuf_end_hpos = env->hpos + w + sbuf_kern;
 	    sbuf[sbuf_len++] = sbuf_space_code;
-	    sbuf[sbuf_len++] = code;
+	    sbuf[sbuf_len++] = code[0];
+	    if (code[1]>0) sbuf[sbuf_len++] = code[1];
 	    sbuf_space_count++;
 	    if (diff == 1)
 	      sbuf_space_diff_count++;
@@ -751,7 +777,8 @@ void ps_printer::set_char(glyph *g, font *f, const environment *env, int w,
     flush_sbuf();
   }
   sbuf_len = 1;
-  sbuf[0] = code;
+  sbuf[0] = code[0];
+  if (code[1]>0) sbuf[sbuf_len++] = code[1];
   sbuf_end_hpos = env->hpos + w;
   sbuf_start_hpos = env->hpos;
   sbuf_vpos = env->vpos;
@@ -987,6 +1014,7 @@ void ps_printer::flush_sbuf()
     output_style = sbuf_style;
   }
   int extra_space = 0;
+  int is_utf16 = 0;
   if (output_hpos < 0 || output_vpos < 0)
     motion = ABSOLUTE;
   else {
@@ -1018,7 +1046,10 @@ void ps_printer::flush_sbuf()
     out.put_fix_number(extra_space);
   if (sbuf_kern != 0)
     out.put_fix_number(sbuf_kern);
-  out.put_string(sbuf, sbuf_len);
+  const char *psname = sbuf_style.f->get_internal_name();
+  if (psname && strstr(psname,"-UTF16-"))
+    is_utf16 = 1;
+  out.put_string(sbuf, sbuf_len, is_utf16);
   char command_array[] = {'A', 'B', 'C', 'D',
 			  'E', 'F', 'G', 'H',
 			  'I', 'J', 'K', 'L',
diff --git a/src/devices/grops/ps.h b/src/devices/grops/ps.h
index 5cef694f0..d5f203bf1 100644
--- a/src/devices/grops/ps.h
+++ b/src/devices/grops/ps.h
@@ -20,7 +20,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 class ps_output {
 public:
   ps_output(FILE *, int max_line_length);
-  ps_output &put_string(const char *, int);
+  ps_output &put_string(const wchar_t *, int, int);
   ps_output &put_number(int);
   ps_output &put_fix_number(int);
   ps_output &put_float(double);
diff --git a/src/include/font.h b/src/include/font.h
index 68a82faf2..4f30e3638 100644
--- a/src/include/font.h
+++ b/src/include/font.h
@@ -16,7 +16,7 @@ for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>. */
-
+#define ENABLE_UCSRANGE
 // A function of this type can be registered to define the semantics of
 // arbitrary commands in a font DESC file.
 typedef void (*FONT_COMMAND_HANDLER)(const char *,	// command
@@ -287,6 +287,12 @@ private:
 			// font (if !is_unicode) or for just some characters
 			// (if is_unicode).  The indices of this array are
 			// font-specific, found as values in ch_index[].
+#ifdef ENABLE_UCSRANGE
+  // font metric for wchar
+  font_char_metric *wch;
+  // get font metric for wchar indexed by uc
+  font_char_metric *get_font_wchar_metric(int uc);
+#endif
   int ch_used;
   int ch_size;
   font_widths_cache *widths_cache;	// A cache of scaled character
diff --git a/src/libs/libgroff/font.cpp b/src/libs/libgroff/font.cpp
index 1bf5c6587..237cf7331 100644
--- a/src/libs/libgroff/font.cpp
+++ b/src/libs/libgroff/font.cpp
@@ -44,6 +44,10 @@ struct font_char_metric {
   int italic_correction;
   int subscript_correction;
   char *special_device_coding;
+#ifdef ENABLE_UCSRANGE
+  struct font_char_metric *next;
+  int end_code;
+#endif
 };
 
 struct font_kern_list {
@@ -158,6 +162,20 @@ void text_file::fatal(const char *format,
     fatal_with_file_and_line(path, lineno, format, arg1, arg2, arg3);
 }
 
+#ifdef ENABLE_UCSRANGE
+int glyph_to_ucs_codepoint(glyph *g)
+{
+  const char *nm = glyph_to_name(g);
+  if (nm != 0) {
+    if (check_unicode_name(nm) && strchr(nm, '_')==0) {
+      char *ignore;
+      return (int)strtol(nm + 1, &ignore, 16);
+    }
+  }
+  return -1;
+}
+#endif
+
 int glyph_to_unicode(glyph *g)
 {
   const char *nm = glyph_to_name(g);
@@ -206,6 +224,9 @@ font::font(const char *s) : ligatures(0), kern_hash_table(0),
   space_width(0), special(false), internalname(0), slant(0.0), zoom(0),
   ch_index(0), nindices(0), ch(0), ch_used(0), ch_size(0),
   widths_cache(0)
+#ifdef ENABLE_UCSRANGE
+  ,wch(0)
+#endif
 {
   name = new char[strlen(s) + 1];
   strcpy(name, s);
@@ -236,6 +257,15 @@ font::~font()
     widths_cache = widths_cache->next;
     delete tem;
   }
+#ifdef ENABLE_UCSRANGE
+  struct font_char_metric *wcp, *nwcp;
+  for (wcp = wch; wcp != 0; wcp = nwcp) {
+    nwcp = wcp->next;
+    if (wcp->special_device_coding)
+      delete [] wcp->special_device_coding;
+    delete wcp;
+  }
+#endif
 }
 
 static int scale_round(int n, int x, int y)
@@ -318,6 +348,14 @@ bool font::contains(glyph *g)
   // Explicitly enumerated glyph?
   if (idx < nindices && ch_index[idx] >= 0)
     return true;
+#ifdef ENABLE_UCSRANGE
+  int uc  = glyph_to_ucs_codepoint(g);
+  if (uc>0) {
+    font_char_metric *wcp = get_font_wchar_metric(uc);
+    if (wcp != 0)
+      return true;
+  }
+#endif
   if (is_unicode) {
     // Unicode font
     // ASCII or Unicode character, or groff glyph name that maps to Unicode?
@@ -349,6 +387,20 @@ font_widths_cache::~font_widths_cache()
   delete[] width;
 }
 
+#ifdef ENABLE_UCSRANGE
+struct font_char_metric *
+font::get_font_wchar_metric(int uc)
+{
+  struct font_char_metric *wcp;
+  for (wcp = wch; wcp != 0; wcp = wcp->next) {
+    if (wcp->code <= uc && uc <= wcp->end_code) {
+      return wcp;
+    }
+  }
+  return 0;
+}
+#endif
+
 int font::get_width(glyph *g, int point_size)
 {
   int idx = glyph_to_index(g);
@@ -363,6 +415,14 @@ int font::get_width(glyph *g, int point_size)
     else
       real_size = int(point_size * double(zoom) / 1000.0 + .5);
   }
+#ifdef ENABLE_UCSRANGE
+  int uc  = glyph_to_ucs_codepoint(g);
+  font_char_metric *wcp;
+  if (uc>0) wcp = get_font_wchar_metric(uc);
+  if (wcp != 0 && !(idx < nindices && ch_index[idx] >= 0)) {
+    return scale(wcp->width, point_size);
+  }
+#endif
   if (idx < nindices && ch_index[idx] >= 0) {
     // Explicitly enumerated glyph
     int i = ch_index[idx];
@@ -395,7 +455,7 @@ int font::get_width(glyph *g, int point_size)
     // Unicode font
     int width = 24; // XXX: Add a request to override this.
     int w = wcwidth(get_code(g));
-    if (w > 1)
+    if (w > 1 && !font::use_unscaled_charwidths)
       width *= w;
     if (real_size == unitwidth || font::use_unscaled_charwidths)
       return width;
@@ -414,6 +474,14 @@ int font::get_height(glyph *g, int point_size)
     // Explicitly enumerated glyph
     return scale(ch[ch_index[idx]].height, point_size);
   }
+#ifdef ENABLE_UCSRANGE
+  int uc  = glyph_to_ucs_codepoint(g);
+  font_char_metric *wcp;
+  if (uc>0) wcp = get_font_wchar_metric(uc);
+  if (wcp != 0) {
+    return scale(wcp->height, point_size);
+  }
+#endif
   if (is_unicode) {
     // Unicode font
     return 0;
@@ -430,6 +498,14 @@ int font::get_depth(glyph *g, int point_size)
     // Explicitly enumerated glyph
     return scale(ch[ch_index[idx]].depth, point_size);
   }
+#ifdef ENABLE_UCSRANGE
+  int uc  = glyph_to_ucs_codepoint(g);
+  font_char_metric *wcp;
+  if (uc>0) wcp = get_font_wchar_metric(uc);
+  if (wcp != 0) {
+    return scale(wcp->depth, point_size);
+  }
+#endif
   if (is_unicode) {
     // Unicode font
     return 0;
@@ -446,6 +522,14 @@ int font::get_italic_correction(glyph *g, int point_size)
     // Explicitly enumerated glyph
     return scale(ch[ch_index[idx]].italic_correction, point_size);
   }
+#ifdef ENABLE_UCSRANGE
+  int uc  = glyph_to_ucs_codepoint(g);
+  font_char_metric *wcp;
+  if (uc>0) wcp = get_font_wchar_metric(uc);
+  if (wcp != 0) {
+    return scale(wcp->italic_correction, point_size);
+  }
+#endif
   if (is_unicode) {
     // Unicode font
     return 0;
@@ -462,6 +546,14 @@ int font::get_left_italic_correction(glyph *g, int point_size)
     // Explicitly enumerated glyph
     return scale(ch[ch_index[idx]].pre_math_space, point_size);
   }
+#ifdef ENABLE_UCSRANGE
+  int uc  = glyph_to_ucs_codepoint(g);
+  font_char_metric *wcp;
+  if (uc>0) wcp = get_font_wchar_metric(uc);
+  if (wcp != 0) {
+    return scale(wcp->pre_math_space, point_size);
+  }
+#endif
   if (is_unicode) {
     // Unicode font
     return 0;
@@ -478,6 +570,14 @@ int font::get_subscript_correction(glyph *g, int point_size)
     // Explicitly enumerated glyph
     return scale(ch[ch_index[idx]].subscript_correction, point_size);
   }
+#ifdef ENABLE_UCSRANGE
+  int uc  = glyph_to_ucs_codepoint(g);
+  font_char_metric *wcp;
+  if (uc>0) wcp = get_font_wchar_metric(uc);
+  if (wcp != 0) {
+    return scale(wcp->subscript_correction, point_size);
+  }
+#endif
   if (is_unicode) {
     // Unicode font
     return 0;
@@ -552,6 +652,14 @@ int font::get_character_type(glyph *g)
     // Explicitly enumerated glyph
     return ch[ch_index[idx]].type;
   }
+#ifdef ENABLE_UCSRANGE
+  int uc  = glyph_to_ucs_codepoint(g);
+  font_char_metric *wcp;
+  if (uc>0) wcp = get_font_wchar_metric(uc);
+  if (wcp != 0) {
+    return wcp->type;
+  }
+#endif
   if (is_unicode) {
     // Unicode font
     return 0;
@@ -568,6 +676,14 @@ int font::get_code(glyph *g)
     // Explicitly enumerated glyph
     return ch[ch_index[idx]].code;
   }
+#ifdef ENABLE_UCSRANGE
+  int uc  = glyph_to_ucs_codepoint(g);
+  font_char_metric *wcp;
+  if (uc>0) wcp = get_font_wchar_metric(uc);
+  if (wcp != 0) {
+    return uc;
+  }
+#endif
   if (is_unicode) {
     // Unicode font
     // ASCII or Unicode character, or groff glyph name that maps to Unicode?
@@ -602,6 +718,13 @@ const char *font::get_special_device_encoding(glyph *g)
     // Explicitly enumerated glyph
     return ch[ch_index[idx]].special_device_coding;
   }
+#ifdef ENABLE_UCSRANGE
+  int uc  = glyph_to_ucs_codepoint(g);
+  font_char_metric *wcp;
+  if (uc>0) wcp = get_font_wchar_metric(uc);
+  if (wcp != 0)
+    return wcp->special_device_coding;
+#endif
   if (is_unicode) {
     // Unicode font
     return 0;
@@ -869,7 +992,12 @@ bool font::load(bool load_header_only)
     else if (strcmp(p, "special") == 0) {
       special = true;
     }
+#ifdef ENABLE_UCSRANGE
+    else if (strcmp(p, "kernpairs") != 0 && strcmp(p, "charset") != 0 &&
+             strcmp(p, "charset-range") != 0) {
+#else
     else if (strcmp(p, "kernpairs") != 0 && strcmp(p, "charset") != 0) {
+#endif
       char *directive = p;
       p = strtok(0, "\n");
       handle_unknown_font_command(directive, trim_arg(p), t.path,
@@ -915,6 +1043,82 @@ bool font::load(bool load_header_only)
 	add_kern(g1, g2, n);
       }
     }
+#ifdef ENABLE_UCSRANGE
+    else if (strcmp(directive, "charset-range") == 0) {
+      if (load_header_only)
+	return true;
+      saw_charset_directive = true;
+      int had_range = 0;
+      for (;;) {
+	if (!t.next_line()) {
+	  directive = 0;
+	  break;
+	}
+	char *nm = strtok(t.buf, WS);
+	assert(nm != 0);
+	p = strtok(0, WS);
+	if (0 == p) {
+	  directive = nm;
+	  break;
+	}
+	int start_code = 0;
+	int end_code = 0;
+	int nrange = sscanf(nm, "u%X..u%X", &start_code, &end_code);
+	if (nrange == 2) {
+	  had_range = 1;
+	  font_char_metric *wcp = new font_char_metric;
+	  wcp->code = start_code;
+	  wcp->end_code = end_code;
+	  wcp->height = 0;
+	  wcp->depth = 0;
+	  wcp->pre_math_space = 0;
+	  wcp->italic_correction = 0;
+	  wcp->subscript_correction = 0;
+	  int nparms = sscanf(p, "%d,%d,%d,%d,%d,%d",
+			      &wcp->width, &wcp->height, &wcp->depth,
+			      &wcp->italic_correction,
+			      &wcp->pre_math_space,
+			      &wcp->subscript_correction);
+	  if (nparms < 1) {
+	    t.error("missing or invalid width for character range '%1'", nm);
+	    return false;
+	  }
+	  p = strtok(0, WS);
+	  if (0 == p) {
+	    t.error("missing character type for '%1'", nm);
+	    return false;
+	  }
+	  int type;
+	  if (sscanf(p, "%d", &type) != 1) {
+	    t.error("invalid character type for '%1'", nm);
+	    return false;
+	  }
+	  if (type < 0 || type > 255) {
+	    t.error("character type '%1' out of range for '%2'", type,
+	            nm);
+	    return false;
+	  }
+	  wcp->type = type;
+
+	  p = strtok(0, WS);
+	  if ((0 == p) || (strcmp(p, "--") == 0)) {
+	    wcp->special_device_coding = 0;
+	  }
+	  else {
+	    wcp->special_device_coding = new char[strlen(p) + 1];
+	    strcpy(wcp->special_device_coding, p);
+	  }
+	  wcp->next = wch;
+	  wch = wcp;
+	  p = 0;
+	}
+      }
+      if (!had_range) {
+	t.error("no glyphs defined in font description");
+	return false;
+      }
+    }
+#endif
     else if (strcmp(directive, "charset") == 0) {
       if (load_header_only)
 	return true;
@@ -989,11 +1193,6 @@ bool font::load(bool load_header_only)
 	    t.error("invalid code '%1' for character '%2'", p, nm);
 	    return false;
 	  }
-	  if (is_unicode) {
-	    int w = wcwidth(metric.code);
-	    if (w > 1)
-	      metric.width *= w;
-	  }
 	  p = strtok(0, WS);
 	  if ((0 == p) || (strcmp(p, "--") == 0)) {
 	    metric.special_device_coding = 0;
diff --git a/src/preproc/html/pre-html.cpp b/src/preproc/html/pre-html.cpp
index e8902f12b..ed4dd846d 100644
--- a/src/preproc/html/pre-html.cpp
+++ b/src/preproc/html/pre-html.cpp
@@ -1571,7 +1571,7 @@ static int scanArguments(int argc, char **argv)
     { 0 /* nullptr */, 0, 0, 0 }
   };
   while ((c = getopt_long(argc, argv,
-	  "+a:bCdD:eF:g:Ghi:I:j:lno:prs:S:vVx:y", long_options,
+	  "+a:bCdD:eF:g:Ghi:I:j:lno:prs:S:UvVx:y", long_options,
 	  0 /* nullptr */))
 	 != EOF)
     switch(c) {
@@ -1643,6 +1643,9 @@ static int scanArguments(int argc, char **argv)
     case 'S':
       // handled by post-grohtml (set file split level)
       break;
+    case 'U':
+      // handled by post-grohtml (charset UTF-8)
+      break;
     case 'v':
       printf("GNU pre-grohtml (groff) version %s\n", Version_string);
       exit(EXIT_SUCCESS);
diff --git a/src/roff/groff/groff.am b/src/roff/groff/groff.am
index 874400887..971e92772 100644
--- a/src/roff/groff/groff.am
+++ b/src/roff/groff/groff.am
@@ -59,6 +59,8 @@ groff_TESTS = \
   src/roff/groff/tests/regression_savannah_58337.sh \
   src/roff/groff/tests/regression_savannah_59202.sh \
   src/roff/groff/tests/smoke-test_html_device.sh \
+  src/roff/groff/tests/smoke-test_ps_device.sh \
+  src/roff/groff/tests/smoke-test_dvi_device.sh \
   src/roff/groff/tests/some_escapes_accept_newline_delimiters.sh \
   src/roff/groff/tests/soquiet_works.sh \
   src/roff/groff/tests/string_case_xform_errors.sh \
diff --git a/src/roff/groff/tests/smoke-test_dvi_device.sh b/src/roff/groff/tests/smoke-test_dvi_device.sh
new file mode 100755
index 000000000..b7a7897e3
--- /dev/null
+++ b/src/roff/groff/tests/smoke-test_dvi_device.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# Copyright (C) 2022 Free Software Foundation, Inc.
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+groff="${abs_top_builddir:-.}/test-groff"
+
+set -e
+
+# test for upTeX dvi with Japanese, preprocessor
+echo "testing -Kutf8 -Tdvi -Z" >&2
+printf ".ft JPM\nさざ波" | "$groff" -Kutf8 -Tdvi -Z | tr '\n' ';' | grep -q 'Cu3055;h8000;Cu3055_3099;h8000;Cu6CE2;h8000;'
+
+
+# test for upTeX dvi with Japanese
+echo "testing -Kutf8 -Tdvi" >&2
+#printf ".ft JPM\nさざ波" | "$groff" -Kutf8 -Tdvi > grodvi.dvi && updvitype grodvi.dvi | grep -qx '\[さざ波\]'
+printf ".ft JPM\nさざ波" | "$groff" -Kutf8 -Tdvi | od -tx1 | grep -q "81 30 55 81 30 56 81 6c e2"
diff --git a/src/roff/groff/tests/smoke-test_html_device.sh b/src/roff/groff/tests/smoke-test_html_device.sh
index c58d8ea41..4334ee9b5 100755
--- a/src/roff/groff/tests/smoke-test_html_device.sh
+++ b/src/roff/groff/tests/smoke-test_html_device.sh
@@ -37,3 +37,11 @@ printf '\303\241' | "$groff" -k -Thtml | grep -qx '<p>&aacute;</p>'
 # preconv only emits groffish \[uXXXX] escapes for non-ASCII codepoints.
 echo "testing -C -k -Thtml" >&2
 printf "\('a" | "$groff" -C -k -Thtml | grep -qx '<p>&aacute;</p>'
+
+# test for Japanese, preprocessor
+echo "testing -Kutf8 -Thtml -Z" >&2
+printf ".ft JPM\nさざ波" | "$groff" -Kutf8 -Thtml -Z | tr '\n' ';' | grep -q 'Cu3055;H48;Cu3055_3099;h48;Cu6CE2;h48;'
+
+# test for Japanese
+echo "testing -Kutf8 -Thtml -P-U" >&2
+printf ".ft JPM\nさざ波" | "$groff" -Kutf8 -Thtml -P-U | grep -qx '<p>さざ波</p>'
diff --git a/src/roff/groff/tests/smoke-test_ps_device.sh b/src/roff/groff/tests/smoke-test_ps_device.sh
new file mode 100755
index 000000000..d092e777d
--- /dev/null
+++ b/src/roff/groff/tests/smoke-test_ps_device.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+#
+# Copyright (C) 2022 Free Software Foundation, Inc.
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+groff="${abs_top_builddir:-.}/test-groff"
+
+set -e
+
+# test for PostScript with Japanese, preprocessor
+echo "testing -Kutf8 -Tps -Z" >&2
+printf ".ft JPM\nさざ波" | "$groff" -Kutf8 -Tps -Z | tr '\n' ';' | grep -q 'Cu3055;h10000;Cu3055_3099;h10000;Cu6CE2;h10000;'
+
+
+# test for PostScript with Japanese, UTF16 encoding
+echo "testing -Kutf8 -Tps" >&2
+printf ".ft JPM\nさざ波" | "$groff" -Kutf8 -Tps | grep -q '/Ryumin-Light-UniJIS-UTF16-H SF<305530566CE2>'
