/src/freetype/src/autofit/afindic.c

https://bitbucket.org/cabalistic/ogredeps/ · C · 155 lines · 87 code · 39 blank · 29 comment · 1 complexity · bacb34d7449735d7e7fe0f6eb29fe023 MD5 · raw file

  1. /***************************************************************************/
  2. /* */
  3. /* afindic.c */
  4. /* */
  5. /* Auto-fitter hinting routines for Indic scripts (body). */
  6. /* */
  7. /* Copyright 2007, 2011 by */
  8. /* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>. */
  9. /* */
  10. /* This file is part of the FreeType project, and may only be used, */
  11. /* modified, and distributed under the terms of the FreeType project */
  12. /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
  13. /* this file you indicate that you have read the license and */
  14. /* understand and accept it fully. */
  15. /* */
  16. /***************************************************************************/
  17. #include "aftypes.h"
  18. #include "aflatin.h"
  19. #ifdef AF_CONFIG_OPTION_INDIC
  20. #include "afindic.h"
  21. #include "aferrors.h"
  22. #include "afcjk.h"
  23. #ifdef AF_CONFIG_OPTION_USE_WARPER
  24. #include "afwarp.h"
  25. #endif
  26. static FT_Error
  27. af_indic_metrics_init( AF_CJKMetrics metrics,
  28. FT_Face face )
  29. {
  30. /* skip blue zone init in CJK routines */
  31. FT_CharMap oldmap = face->charmap;
  32. metrics->units_per_em = face->units_per_EM;
  33. if ( FT_Select_Charmap( face, FT_ENCODING_UNICODE ) )
  34. face->charmap = NULL;
  35. else
  36. {
  37. af_cjk_metrics_init_widths( metrics, face, 0x7530 );
  38. #if 0
  39. /* either need indic specific blue_chars[] or just skip blue zones */
  40. af_cjk_metrics_init_blues( metrics, face, af_cjk_blue_chars );
  41. #endif
  42. af_cjk_metrics_check_digits( metrics, face );
  43. }
  44. FT_Set_Charmap( face, oldmap );
  45. return AF_Err_Ok;
  46. }
  47. static void
  48. af_indic_metrics_scale( AF_CJKMetrics metrics,
  49. AF_Scaler scaler )
  50. {
  51. /* use CJK routines */
  52. af_cjk_metrics_scale( metrics, scaler );
  53. }
  54. static FT_Error
  55. af_indic_hints_init( AF_GlyphHints hints,
  56. AF_CJKMetrics metrics )
  57. {
  58. /* use CJK routines */
  59. return af_cjk_hints_init( hints, metrics );
  60. }
  61. static FT_Error
  62. af_indic_hints_apply( AF_GlyphHints hints,
  63. FT_Outline* outline,
  64. AF_CJKMetrics metrics )
  65. {
  66. /* use CJK routines */
  67. return af_cjk_hints_apply( hints, outline, metrics );
  68. }
  69. /*************************************************************************/
  70. /*************************************************************************/
  71. /***** *****/
  72. /***** I N D I C S C R I P T C L A S S *****/
  73. /***** *****/
  74. /*************************************************************************/
  75. /*************************************************************************/
  76. static const AF_Script_UniRangeRec af_indic_uniranges[] =
  77. {
  78. #if 0
  79. AF_UNIRANGE_REC( 0x0100UL, 0xFFFFUL ), /* why this? */
  80. #endif
  81. AF_UNIRANGE_REC( 0x0900UL, 0x0DFFUL), /* Indic Range */
  82. AF_UNIRANGE_REC( 0x0F00UL, 0x0FFFUL), /* Tibetan */
  83. AF_UNIRANGE_REC( 0x1900UL, 0x194FUL), /* Limbu */
  84. AF_UNIRANGE_REC( 0x1B80UL, 0x1BBFUL), /* Sundanese */
  85. AF_UNIRANGE_REC( 0x1C80UL, 0x1CDFUL), /* Meetei Mayak */
  86. AF_UNIRANGE_REC( 0xA800UL, 0xA82FUL), /* Syloti Nagri */
  87. AF_UNIRANGE_REC( 0x11800UL, 0x118DFUL), /* Sharada */
  88. AF_UNIRANGE_REC( 0UL, 0UL)
  89. };
  90. AF_DEFINE_SCRIPT_CLASS( af_indic_script_class,
  91. AF_SCRIPT_INDIC,
  92. af_indic_uniranges,
  93. sizeof ( AF_CJKMetricsRec ),
  94. (AF_Script_InitMetricsFunc) af_indic_metrics_init,
  95. (AF_Script_ScaleMetricsFunc)af_indic_metrics_scale,
  96. (AF_Script_DoneMetricsFunc) NULL,
  97. (AF_Script_InitHintsFunc) af_indic_hints_init,
  98. (AF_Script_ApplyHintsFunc) af_indic_hints_apply
  99. )
  100. #else /* !AF_CONFIG_OPTION_INDIC */
  101. static const AF_Script_UniRangeRec af_indic_uniranges[] =
  102. {
  103. { 0, 0 }
  104. };
  105. AF_DEFINE_SCRIPT_CLASS( af_indic_script_class,
  106. AF_SCRIPT_INDIC,
  107. af_indic_uniranges,
  108. sizeof ( AF_CJKMetricsRec ),
  109. (AF_Script_InitMetricsFunc) NULL,
  110. (AF_Script_ScaleMetricsFunc)NULL,
  111. (AF_Script_DoneMetricsFunc) NULL,
  112. (AF_Script_InitHintsFunc) NULL,
  113. (AF_Script_ApplyHintsFunc) NULL
  114. )
  115. #endif /* !AF_CONFIG_OPTION_INDIC */
  116. /* END */