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

📄 fribidi.h

📁 share BIDI DEMO code
💻 H
字号:
/* FriBidi - Library of BiDi algorithm * Copyright (C) 1999 Dov Grobgeld * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#ifndef FRIBIDI_H#define FRIBIDI_H#include <glib.h>#include "fribidi_types.h"#include "fribidi_char_sets.h"FriBidiCharType fribidi_get_type(FriBidiChar uch);gbooleanfribidi_get_mirror_char(/* Input */			FriBidiChar ch,			/* Output */			FriBidiChar *mirrored_ch);voidfribidi_set_debug(gboolean debug);void fribidi_log2vis(/* input */		     FriBidiChar *str,		     gint len,		     FriBidiCharType *pbase_dir,		     /* output */		     FriBidiChar *visual_str,		     guint16     *position_L_to_V_list,		     guint16     *position_V_to_L_list,		     guint8      *embedding_level_list		     );void fribidi_log2vis_get_embedding_levels(                     /* input */		     FriBidiChar *str,		     int len,		     FriBidiCharType *pbase_dir,		     /* output */		     guint8 *embedding_level_list		     );/* fribidi_utils.c *//*======================================================================//  fribidi_find_string_changes() finds the bounding box of the section//  of characters that need redrawing. It returns the start and the//  length of the section in the new string that needs redrawing.//----------------------------------------------------------------------*/voidfribidi_find_string_changes(/* input */			    FriBidiChar *old_str,			    int old_len,			    FriBidiChar *new_str,			    int new_len,			    /* output */			    int *change_start,			    int *change_len			    );/*======================================================================//  The find_visual_ranges() function is used to convert between a//  continous span in either logical or visual space to a one, two or//  three discontinous spans in the other space. The function outputs//  the number of ranges needed to display the mapped range as//  well as the resolved ranges.////  The variable is_v2l_map indicates whether the position map is//  is in the direction of visual-to-logical. This information is//  needed in order to look up the correct character from the//  embedding_level_list which is assumed to be in logical order.////  This function is typically used to resolve a logical range to visual//  ranges e.g. to display the selection.////  Example://     The selection is between logical characters 10 to 45. Calculate//     the corresponding visual selection(s):////     gint sel_span[2] = {10,45};////     fribidi_map_range(sel_span,//                       TRUE,//                       length,//                       vis2log_map,//                       embedding_levels,//                       // output //                       &num_vis_ranges,//                       vis_ranges);////----------------------------------------------------------------------*/voidfribidi_map_range (gint span[2],             		   int len,		   gboolean is_v2l_map,      		   guint16 *position_map,		   guint8 *embedding_level_list,		   /* output */		   int *num_mapped_spans,		   int spans[3][2]);/*======================================================================//  fribidi_is_char_rtl() answers the question whether a character//  was resolved in the rtl direction. This simply involves asking//  if the embedding level for the character is odd.//----------------------------------------------------------------------*/gbooleanfribidi_is_char_rtl(guint8 *embedding_level_list,		    FriBidiCharType base_dir,		    int idx);/*======================================================================//  fribidi_xpos_resolve() does the complicated translation of//  an x-coordinate, e.g. as received through a mouse press event,//  to the logical and the visual position the xcoordinate is closest//  to. It will also resolve the direction of the cursor according//  to the embedding level of the closest character.////  It does this through the following logics://  Here are the different possibilities:////        Pointer              =>          Log Pos         Vis pos//  //     Before first vis char             log_pos(vis=0)L       0//     After last vis char               log_pos(vis=n-1)R     n//     Within 1/2 width of vis char i    log_pos(vis=i)L       i//     Within last 1/2 width of vchar i  log_pos(vis=i)R       i+1//     Border between vis chars i,i+1       resolve!           i+1////  Input://     x_pos        The pixel position to be resolved measured in pixels.//     x_offset     The x_offset is the pixel position of the left side//                  of the leftmost visual character. //     len          The length of the embedding level, the vis2log and//                  the char width arrays.//     base_dir     The resolved base direction of the line.//     vis2log      The vis2log mapping.//                  x_position and the character widths. The position//                  (x_pos-x_offset) is number of pixels from the left//                  of logical character 0.//     char_widths  Width in pixels of each character. Note that the//                  widths should be provided in logical order.////  Output://     res_log_pos  Resolved logical position.//     res_vis_pos  Resolved visual position//     res_cursor_x_pos   The resolved pixel position to the left or//                  the right of the character position x_pos.//     res_cursor_dir_is_rtl   Whether the resolved dir of the character//                  at position x_pos is rtl.//     res_attach_before  Whether the x_pos is cutting the bounding//                  box in such a way that the visual cursor should be//                  be positioned before the following logical character.//                  Note that in the bidi context, the positions "after//                  a logical character" and "before the following logical//                  character" is not necessarily the same. If x_pos is//                  beyond the end of the line, res_attach_before is true.////----------------------------------------------------------------------*/void fribidi_xpos_resolve(gint x_pos,			  gint x_offset,			  gint len,			  guint8 *embedding_level_list,			  FriBidiCharType base_dir,			  guint16 *vis2log,			  gint16 *char_widths,			  /* output */			  gint *res_log_pos,			  gint *res_vis_pos,			  gint *res_cursor_x_pos,			  gboolean *res_cursor_dir_is_rtl,			  gboolean *res_attach_before			  );#endif /* FRIBIDI_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -