⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 r2d_font.ml

📁 是一个手机功能的模拟程序
💻 ML
📖 第 1 页 / 共 2 页
字号:
 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 + -