📄 r2d_font.ml
字号:
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x00;
0x00;
0x18;
0x18;
0x00;
0x00;
0x00;
0x00;
0x18;
0x00;
0x00;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x7F;
0x7F;
0x7F;
0x7F;
0x7F;
0x00;
0x00;
0x00;
0x00;
0x00;
0x00;
0x00
|]
(* Convert unicode value to win latin 1 encoding *)
let unicode_of_win_latin1 x =
match x with
0x80 -> 0x20ac
| 0x82 -> 0x201a
| 0x83 -> 0x0192
| 0x84 -> 0x201e
| 0x85 -> 0x2026
| 0x86 -> 0x2020
| 0x87 -> 0x2021
| 0x88 -> 0x2c6
| 0x89 -> 0x2030
| 0x8a -> 0x160
| 0x8b -> 0x2039
| 0x8c -> 0x152
| 0x8e -> 0x17d
| 0x91 -> 0x2018
| 0x92 -> 0x2019
| 0x93 -> 0x201c
| 0x94 -> 0x201d
| 0x95 -> 0x2022
| 0x96 -> 0x2013
| 0x97 -> 0x2014
| 0x98 -> 0x2dc
| 0x99 -> 0x2122
| 0x9a -> 0x161
| 0x9b -> 0x203a
| 0x9c -> 0x153
| 0x9e -> 0x17e
| 0x9f -> 0x178
| _ -> x
(* Combine metrics coming from too different font files
to create a global metric*)
let combine_metrics a b =
{
ascent=max a.ascent b.ascent;
descent=max a.descent b.descent;
leading=max a.leading b.leading;
max_width= a.max_width + b.max_width;
max_height=max a.max_height b.max_height;
underline=max a.underline b.underline;
max_char_size=max a.max_char_size b.max_char_size;
}
(* WRONG BECAUSE LISTS ARE REVERSED *)
let combine_fonts fa fb =
{
framebuffer=List.append fa.framebuffer fb.framebuffer;
global_metrics=combine_metrics fa.global_metrics fb.global_metrics;
local_metrics=List.append fa.local_metrics fb.local_metrics;
transcodage=Ptset.union fa.transcodage fb.transcodage
}
let empty_global_metrics =
{
ascent=0;
descent=0;
leading=0;
max_width=0;
max_height=0;
underline=0;
max_char_size=0
}
let empty_font =
{
framebuffer=[];
global_metrics=empty_global_metrics;
local_metrics=[];
transcodage=Ptset.empty
}
let extract_ti_bitmap pos heightw reversex reversey vertical =
let m = ref empty_matrix in
m := new_matrix 6 8 6 8 vertical;
for i = 0 to 5 do
let c = if reversex then ti_chars.(6*pos+5-i) else ti_chars.(6*pos+i) in
if reversey then
begin
for k = 0 to 7 do
if (c land (1 lsl (7 - k))) != 0 then
set_matrix_element !m i k 1;
done
end else begin
for k = 0 to 7 do
if (c land (1 lsl k)) != 0 then
set_matrix_element !m i k 1;
done
end
done;
!m
let process_font global_metrics blocks the_face reversex reversey vertical =
let framebuf = ref []
and local_metrics = ref [] in
(* Get word height *)
let iterator = new_iterator blocks
and x = ref 0
and missing = ref false
and missing_pos = ref 0
and chars = ref [] in
(try
while true do
let i=iterator() in
let glyph_ind = get_char_index the_face i in
load_glyph the_face glyph_ind [LOAD_RENDER;
LOAD_MONOCHROME;
LOAD_FORCE_AUTOHINT];
let glyph_data = get_glyph the_face
and glyph_id = if (glyph_ind !=0) then i else 0 in
(* Metrics are saved for all glyphs even the missing ones *)
local_metrics := List.rev_append [{
glyph_index=glyph_id; (* Unicode only when
char is existing. Else char has glyph 0 for unknown*)
width=get_width glyph_data;
height=get_height glyph_data;
x_advance=get_x_advance glyph_data;
y_advance=get_y_advance glyph_data;
x_org=get_left_origin glyph_data;
y_org=get_top_origin glyph_data;
}] !local_metrics;
(* Save bitmap for missing glyph only once *)
if ((glyph_id=0) && (not !missing)) || (glyph_id != 0) then
begin
if (glyph_id = 0) then
begin
missing := true;
missing_pos := !x;
end;
(* Get bitmap defined in the glyph *)
let m = if vertical then
expand_bitmap (get_glyph the_face) global_metrics.max_height reversex
reversey vertical
else
expand_bitmap (get_glyph the_face) global_metrics.max_width reversex
reversey vertical in
(* Convert bitmap to LCD format : returns a list of words*)
let b=Lcd.compact_matrix m in
framebuf := List.rev_append (List.rev b) !framebuf;
end;
(* If a new glyph is found - even if it is the missing glyph -
we save the unicode values *)
chars := List.rev_append !chars [(i,!x)];
x := !x + 1;
done;
with End_iteration -> ()
);
let add tree b =
let (a,the_val) = b in
Ptset.add (a lsr Ptset.shift_value) the_val tree in
{
framebuffer = !framebuf;
global_metrics=global_metrics ;
local_metrics = !local_metrics;
transcodage = List.fold_left add Ptset.empty !chars
}
let process_ti_font global_metrics reversex reversey vertical =
let framebuf = ref []
and local_metrics = ref [] in
(* Get word height *)
let iterator = new_iterator [BASIC_LATIN1;LATIN1_SUPPLEMENT]
and chars = ref []
and x = ref 0 in
(try
while true do
let i=iterator() in
local_metrics := List.rev_append [{
glyph_index=i;
width=6;
height=8;
x_advance=6;
y_advance=0;
x_org=0;
y_org=8;
}] !local_metrics ;
(* Get bitmap defined in the glyph *)
let m = extract_ti_bitmap i 8 reversex reversey vertical in
(* Convert bitmap to LCD format : returns a list of words*)
let b=Lcd.compact_matrix m in
framebuf := List.rev_append (List.rev b) !framebuf;
(* If a new glyph is found - even if it is the missing glyph - *)
chars := List.rev_append !chars [(i,!x)];
x := !x + 1;
done;
with End_iteration -> ()
);
let add tree b =
let (a,the_val) = b in
Ptset.add (a lsr Ptset.shift_value) the_val tree in
{
framebuffer = !framebuf;
global_metrics=global_metrics ;
local_metrics = !local_metrics;
transcodage=List.fold_left add Ptset.empty !chars
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -