| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright © 1998-2004 David Turner and Werner Lemberg | 2 * Copyright © 1998-2004 David Turner and Werner Lemberg |
| 3 * Copyright © 2004,2007,2009,2010 Red Hat, Inc. | 3 * Copyright © 2004,2007,2009,2010 Red Hat, Inc. |
| 4 * Copyright © 2011,2012 Google, Inc. | 4 * Copyright © 2011,2012 Google, Inc. |
| 5 * | 5 * |
| 6 * This is part of HarfBuzz, a text shaping library. | 6 * This is part of HarfBuzz, a text shaping library. |
| 7 * | 7 * |
| 8 * Permission is hereby granted, without written agreement and without | 8 * Permission is hereby granted, without written agreement and without |
| 9 * license or royalty fees, to use, copy, modify, and distribute this | 9 * license or royalty fees, to use, copy, modify, and distribute this |
| 10 * software and its documentation for any purpose, provided that the | 10 * software and its documentation for any purpose, provided that the |
| (...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 697 | 697 |
| 698 /* Public API */ | 698 /* Public API */ |
| 699 | 699 |
| 700 /** | 700 /** |
| 701 * hb_buffer_create: (Xconstructor) | 701 * hb_buffer_create: (Xconstructor) |
| 702 * | 702 * |
| 703 * | 703 * |
| 704 * | 704 * |
| 705 * Return value: (transfer full) | 705 * Return value: (transfer full) |
| 706 * | 706 * |
| 707 * Since: 1.0 | 707 * Since: 0.9.2 |
| 708 **/ | 708 **/ |
| 709 hb_buffer_t * | 709 hb_buffer_t * |
| 710 hb_buffer_create (void) | 710 hb_buffer_create (void) |
| 711 { | 711 { |
| 712 hb_buffer_t *buffer; | 712 hb_buffer_t *buffer; |
| 713 | 713 |
| 714 if (!(buffer = hb_object_create<hb_buffer_t> ())) | 714 if (!(buffer = hb_object_create<hb_buffer_t> ())) |
| 715 return hb_buffer_get_empty (); | 715 return hb_buffer_get_empty (); |
| 716 | 716 |
| 717 buffer->reset (); | 717 buffer->reset (); |
| 718 | 718 |
| 719 return buffer; | 719 return buffer; |
| 720 } | 720 } |
| 721 | 721 |
| 722 /** | 722 /** |
| 723 * hb_buffer_get_empty: | 723 * hb_buffer_get_empty: |
| 724 * | 724 * |
| 725 * | 725 * |
| 726 * | 726 * |
| 727 * Return value: (transfer full): | 727 * Return value: (transfer full): |
| 728 * | 728 * |
| 729 * Since: 1.0 | 729 * Since: 0.9.2 |
| 730 **/ | 730 **/ |
| 731 hb_buffer_t * | 731 hb_buffer_t * |
| 732 hb_buffer_get_empty (void) | 732 hb_buffer_get_empty (void) |
| 733 { | 733 { |
| 734 static const hb_buffer_t _hb_buffer_nil = { | 734 static const hb_buffer_t _hb_buffer_nil = { |
| 735 HB_OBJECT_HEADER_STATIC, | 735 HB_OBJECT_HEADER_STATIC, |
| 736 | 736 |
| 737 const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil), | 737 const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil), |
| 738 HB_BUFFER_FLAG_DEFAULT, | 738 HB_BUFFER_FLAG_DEFAULT, |
| 739 HB_BUFFER_CLUSTER_LEVEL_DEFAULT, | 739 HB_BUFFER_CLUSTER_LEVEL_DEFAULT, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 752 } | 752 } |
| 753 | 753 |
| 754 /** | 754 /** |
| 755 * hb_buffer_reference: (skip) | 755 * hb_buffer_reference: (skip) |
| 756 * @buffer: a buffer. | 756 * @buffer: a buffer. |
| 757 * | 757 * |
| 758 * | 758 * |
| 759 * | 759 * |
| 760 * Return value: (transfer full): | 760 * Return value: (transfer full): |
| 761 * | 761 * |
| 762 * Since: 1.0 | 762 * Since: 0.9.2 |
| 763 **/ | 763 **/ |
| 764 hb_buffer_t * | 764 hb_buffer_t * |
| 765 hb_buffer_reference (hb_buffer_t *buffer) | 765 hb_buffer_reference (hb_buffer_t *buffer) |
| 766 { | 766 { |
| 767 return hb_object_reference (buffer); | 767 return hb_object_reference (buffer); |
| 768 } | 768 } |
| 769 | 769 |
| 770 /** | 770 /** |
| 771 * hb_buffer_destroy: (skip) | 771 * hb_buffer_destroy: (skip) |
| 772 * @buffer: a buffer. | 772 * @buffer: a buffer. |
| 773 * | 773 * |
| 774 * | 774 * |
| 775 * | 775 * |
| 776 * Since: 1.0 | 776 * Since: 0.9.2 |
| 777 **/ | 777 **/ |
| 778 void | 778 void |
| 779 hb_buffer_destroy (hb_buffer_t *buffer) | 779 hb_buffer_destroy (hb_buffer_t *buffer) |
| 780 { | 780 { |
| 781 if (!hb_object_destroy (buffer)) return; | 781 if (!hb_object_destroy (buffer)) return; |
| 782 | 782 |
| 783 hb_unicode_funcs_destroy (buffer->unicode); | 783 hb_unicode_funcs_destroy (buffer->unicode); |
| 784 | 784 |
| 785 free (buffer->info); | 785 free (buffer->info); |
| 786 free (buffer->pos); | 786 free (buffer->pos); |
| 787 | 787 |
| 788 free (buffer); | 788 free (buffer); |
| 789 } | 789 } |
| 790 | 790 |
| 791 /** | 791 /** |
| 792 * hb_buffer_set_user_data: (skip) | 792 * hb_buffer_set_user_data: (skip) |
| 793 * @buffer: a buffer. | 793 * @buffer: a buffer. |
| 794 * @key: | 794 * @key: |
| 795 * @data: | 795 * @data: |
| 796 * @destroy: | 796 * @destroy: |
| 797 * @replace: | 797 * @replace: |
| 798 * | 798 * |
| 799 * | 799 * |
| 800 * | 800 * |
| 801 * Return value: | 801 * Return value: |
| 802 * | 802 * |
| 803 * Since: 1.0 | 803 * Since: 0.9.2 |
| 804 **/ | 804 **/ |
| 805 hb_bool_t | 805 hb_bool_t |
| 806 hb_buffer_set_user_data (hb_buffer_t *buffer, | 806 hb_buffer_set_user_data (hb_buffer_t *buffer, |
| 807 hb_user_data_key_t *key, | 807 hb_user_data_key_t *key, |
| 808 void * data, | 808 void * data, |
| 809 hb_destroy_func_t destroy, | 809 hb_destroy_func_t destroy, |
| 810 hb_bool_t replace) | 810 hb_bool_t replace) |
| 811 { | 811 { |
| 812 return hb_object_set_user_data (buffer, key, data, destroy, replace); | 812 return hb_object_set_user_data (buffer, key, data, destroy, replace); |
| 813 } | 813 } |
| 814 | 814 |
| 815 /** | 815 /** |
| 816 * hb_buffer_get_user_data: (skip) | 816 * hb_buffer_get_user_data: (skip) |
| 817 * @buffer: a buffer. | 817 * @buffer: a buffer. |
| 818 * @key: | 818 * @key: |
| 819 * | 819 * |
| 820 * | 820 * |
| 821 * | 821 * |
| 822 * Return value: | 822 * Return value: |
| 823 * | 823 * |
| 824 * Since: 1.0 | 824 * Since: 0.9.2 |
| 825 **/ | 825 **/ |
| 826 void * | 826 void * |
| 827 hb_buffer_get_user_data (hb_buffer_t *buffer, | 827 hb_buffer_get_user_data (hb_buffer_t *buffer, |
| 828 hb_user_data_key_t *key) | 828 hb_user_data_key_t *key) |
| 829 { | 829 { |
| 830 return hb_object_get_user_data (buffer, key); | 830 return hb_object_get_user_data (buffer, key); |
| 831 } | 831 } |
| 832 | 832 |
| 833 | 833 |
| 834 /** | 834 /** |
| (...skipping 29 matching lines...) Expand all Loading... |
| 864 } | 864 } |
| 865 | 865 |
| 866 | 866 |
| 867 /** | 867 /** |
| 868 * hb_buffer_set_unicode_funcs: | 868 * hb_buffer_set_unicode_funcs: |
| 869 * @buffer: a buffer. | 869 * @buffer: a buffer. |
| 870 * @unicode_funcs: | 870 * @unicode_funcs: |
| 871 * | 871 * |
| 872 * | 872 * |
| 873 * | 873 * |
| 874 * Since: 1.0 | 874 * Since: 0.9.2 |
| 875 **/ | 875 **/ |
| 876 void | 876 void |
| 877 hb_buffer_set_unicode_funcs (hb_buffer_t *buffer, | 877 hb_buffer_set_unicode_funcs (hb_buffer_t *buffer, |
| 878 hb_unicode_funcs_t *unicode_funcs) | 878 hb_unicode_funcs_t *unicode_funcs) |
| 879 { | 879 { |
| 880 if (unlikely (hb_object_is_inert (buffer))) | 880 if (unlikely (hb_object_is_inert (buffer))) |
| 881 return; | 881 return; |
| 882 | 882 |
| 883 if (!unicode_funcs) | 883 if (!unicode_funcs) |
| 884 unicode_funcs = hb_unicode_funcs_get_default (); | 884 unicode_funcs = hb_unicode_funcs_get_default (); |
| 885 | 885 |
| 886 | 886 |
| 887 hb_unicode_funcs_reference (unicode_funcs); | 887 hb_unicode_funcs_reference (unicode_funcs); |
| 888 hb_unicode_funcs_destroy (buffer->unicode); | 888 hb_unicode_funcs_destroy (buffer->unicode); |
| 889 buffer->unicode = unicode_funcs; | 889 buffer->unicode = unicode_funcs; |
| 890 } | 890 } |
| 891 | 891 |
| 892 /** | 892 /** |
| 893 * hb_buffer_get_unicode_funcs: | 893 * hb_buffer_get_unicode_funcs: |
| 894 * @buffer: a buffer. | 894 * @buffer: a buffer. |
| 895 * | 895 * |
| 896 * | 896 * |
| 897 * | 897 * |
| 898 * Return value: | 898 * Return value: |
| 899 * | 899 * |
| 900 * Since: 1.0 | 900 * Since: 0.9.2 |
| 901 **/ | 901 **/ |
| 902 hb_unicode_funcs_t * | 902 hb_unicode_funcs_t * |
| 903 hb_buffer_get_unicode_funcs (hb_buffer_t *buffer) | 903 hb_buffer_get_unicode_funcs (hb_buffer_t *buffer) |
| 904 { | 904 { |
| 905 return buffer->unicode; | 905 return buffer->unicode; |
| 906 } | 906 } |
| 907 | 907 |
| 908 /** | 908 /** |
| 909 * hb_buffer_set_direction: | 909 * hb_buffer_set_direction: |
| 910 * @buffer: a buffer. | 910 * @buffer: a buffer. |
| 911 * @direction: | 911 * @direction: |
| 912 * | 912 * |
| 913 * | 913 * |
| 914 * | 914 * |
| 915 * Since: 1.0 | 915 * Since: 0.9.2 |
| 916 **/ | 916 **/ |
| 917 void | 917 void |
| 918 hb_buffer_set_direction (hb_buffer_t *buffer, | 918 hb_buffer_set_direction (hb_buffer_t *buffer, |
| 919 hb_direction_t direction) | 919 hb_direction_t direction) |
| 920 | 920 |
| 921 { | 921 { |
| 922 if (unlikely (hb_object_is_inert (buffer))) | 922 if (unlikely (hb_object_is_inert (buffer))) |
| 923 return; | 923 return; |
| 924 | 924 |
| 925 buffer->props.direction = direction; | 925 buffer->props.direction = direction; |
| 926 } | 926 } |
| 927 | 927 |
| 928 /** | 928 /** |
| 929 * hb_buffer_get_direction: | 929 * hb_buffer_get_direction: |
| 930 * @buffer: a buffer. | 930 * @buffer: a buffer. |
| 931 * | 931 * |
| 932 * | 932 * |
| 933 * | 933 * |
| 934 * Return value: | 934 * Return value: |
| 935 * | 935 * |
| 936 * Since: 1.0 | 936 * Since: 0.9.2 |
| 937 **/ | 937 **/ |
| 938 hb_direction_t | 938 hb_direction_t |
| 939 hb_buffer_get_direction (hb_buffer_t *buffer) | 939 hb_buffer_get_direction (hb_buffer_t *buffer) |
| 940 { | 940 { |
| 941 return buffer->props.direction; | 941 return buffer->props.direction; |
| 942 } | 942 } |
| 943 | 943 |
| 944 /** | 944 /** |
| 945 * hb_buffer_set_script: | 945 * hb_buffer_set_script: |
| 946 * @buffer: a buffer. | 946 * @buffer: a buffer. |
| 947 * @script: | 947 * @script: |
| 948 * | 948 * |
| 949 * | 949 * |
| 950 * | 950 * |
| 951 * Since: 1.0 | 951 * Since: 0.9.2 |
| 952 **/ | 952 **/ |
| 953 void | 953 void |
| 954 hb_buffer_set_script (hb_buffer_t *buffer, | 954 hb_buffer_set_script (hb_buffer_t *buffer, |
| 955 hb_script_t script) | 955 hb_script_t script) |
| 956 { | 956 { |
| 957 if (unlikely (hb_object_is_inert (buffer))) | 957 if (unlikely (hb_object_is_inert (buffer))) |
| 958 return; | 958 return; |
| 959 | 959 |
| 960 buffer->props.script = script; | 960 buffer->props.script = script; |
| 961 } | 961 } |
| 962 | 962 |
| 963 /** | 963 /** |
| 964 * hb_buffer_get_script: | 964 * hb_buffer_get_script: |
| 965 * @buffer: a buffer. | 965 * @buffer: a buffer. |
| 966 * | 966 * |
| 967 * | 967 * |
| 968 * | 968 * |
| 969 * Return value: | 969 * Return value: |
| 970 * | 970 * |
| 971 * Since: 1.0 | 971 * Since: 0.9.2 |
| 972 **/ | 972 **/ |
| 973 hb_script_t | 973 hb_script_t |
| 974 hb_buffer_get_script (hb_buffer_t *buffer) | 974 hb_buffer_get_script (hb_buffer_t *buffer) |
| 975 { | 975 { |
| 976 return buffer->props.script; | 976 return buffer->props.script; |
| 977 } | 977 } |
| 978 | 978 |
| 979 /** | 979 /** |
| 980 * hb_buffer_set_language: | 980 * hb_buffer_set_language: |
| 981 * @buffer: a buffer. | 981 * @buffer: a buffer. |
| 982 * @language: | 982 * @language: |
| 983 * | 983 * |
| 984 * | 984 * |
| 985 * | 985 * |
| 986 * Since: 1.0 | 986 * Since: 0.9.2 |
| 987 **/ | 987 **/ |
| 988 void | 988 void |
| 989 hb_buffer_set_language (hb_buffer_t *buffer, | 989 hb_buffer_set_language (hb_buffer_t *buffer, |
| 990 hb_language_t language) | 990 hb_language_t language) |
| 991 { | 991 { |
| 992 if (unlikely (hb_object_is_inert (buffer))) | 992 if (unlikely (hb_object_is_inert (buffer))) |
| 993 return; | 993 return; |
| 994 | 994 |
| 995 buffer->props.language = language; | 995 buffer->props.language = language; |
| 996 } | 996 } |
| 997 | 997 |
| 998 /** | 998 /** |
| 999 * hb_buffer_get_language: | 999 * hb_buffer_get_language: |
| 1000 * @buffer: a buffer. | 1000 * @buffer: a buffer. |
| 1001 * | 1001 * |
| 1002 * | 1002 * |
| 1003 * | 1003 * |
| 1004 * Return value: (transfer none): | 1004 * Return value: (transfer none): |
| 1005 * | 1005 * |
| 1006 * Since: 1.0 | 1006 * Since: 0.9.2 |
| 1007 **/ | 1007 **/ |
| 1008 hb_language_t | 1008 hb_language_t |
| 1009 hb_buffer_get_language (hb_buffer_t *buffer) | 1009 hb_buffer_get_language (hb_buffer_t *buffer) |
| 1010 { | 1010 { |
| 1011 return buffer->props.language; | 1011 return buffer->props.language; |
| 1012 } | 1012 } |
| 1013 | 1013 |
| 1014 /** | 1014 /** |
| 1015 * hb_buffer_set_segment_properties: | 1015 * hb_buffer_set_segment_properties: |
| 1016 * @buffer: a buffer. | 1016 * @buffer: a buffer. |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1153 return buffer->replacement; | 1153 return buffer->replacement; |
| 1154 } | 1154 } |
| 1155 | 1155 |
| 1156 | 1156 |
| 1157 /** | 1157 /** |
| 1158 * hb_buffer_reset: | 1158 * hb_buffer_reset: |
| 1159 * @buffer: a buffer. | 1159 * @buffer: a buffer. |
| 1160 * | 1160 * |
| 1161 * | 1161 * |
| 1162 * | 1162 * |
| 1163 * Since: 1.0 | 1163 * Since: 0.9.2 |
| 1164 **/ | 1164 **/ |
| 1165 void | 1165 void |
| 1166 hb_buffer_reset (hb_buffer_t *buffer) | 1166 hb_buffer_reset (hb_buffer_t *buffer) |
| 1167 { | 1167 { |
| 1168 buffer->reset (); | 1168 buffer->reset (); |
| 1169 } | 1169 } |
| 1170 | 1170 |
| 1171 /** | 1171 /** |
| 1172 * hb_buffer_clear_contents: | 1172 * hb_buffer_clear_contents: |
| 1173 * @buffer: a buffer. | 1173 * @buffer: a buffer. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1184 | 1184 |
| 1185 /** | 1185 /** |
| 1186 * hb_buffer_pre_allocate: | 1186 * hb_buffer_pre_allocate: |
| 1187 * @buffer: a buffer. | 1187 * @buffer: a buffer. |
| 1188 * @size: | 1188 * @size: |
| 1189 * | 1189 * |
| 1190 * | 1190 * |
| 1191 * | 1191 * |
| 1192 * Return value: | 1192 * Return value: |
| 1193 * | 1193 * |
| 1194 * Since: 1.0 | 1194 * Since: 0.9.2 |
| 1195 **/ | 1195 **/ |
| 1196 hb_bool_t | 1196 hb_bool_t |
| 1197 hb_buffer_pre_allocate (hb_buffer_t *buffer, unsigned int size) | 1197 hb_buffer_pre_allocate (hb_buffer_t *buffer, unsigned int size) |
| 1198 { | 1198 { |
| 1199 return buffer->ensure (size); | 1199 return buffer->ensure (size); |
| 1200 } | 1200 } |
| 1201 | 1201 |
| 1202 /** | 1202 /** |
| 1203 * hb_buffer_allocation_successful: | 1203 * hb_buffer_allocation_successful: |
| 1204 * @buffer: a buffer. | 1204 * @buffer: a buffer. |
| 1205 * | 1205 * |
| 1206 * | 1206 * |
| 1207 * | 1207 * |
| 1208 * Return value: | 1208 * Return value: |
| 1209 * | 1209 * |
| 1210 * Since: 1.0 | 1210 * Since: 0.9.2 |
| 1211 **/ | 1211 **/ |
| 1212 hb_bool_t | 1212 hb_bool_t |
| 1213 hb_buffer_allocation_successful (hb_buffer_t *buffer) | 1213 hb_buffer_allocation_successful (hb_buffer_t *buffer) |
| 1214 { | 1214 { |
| 1215 return !buffer->in_error; | 1215 return !buffer->in_error; |
| 1216 } | 1216 } |
| 1217 | 1217 |
| 1218 /** | 1218 /** |
| 1219 * hb_buffer_add: | 1219 * hb_buffer_add: |
| 1220 * @buffer: a buffer. | 1220 * @buffer: a buffer. |
| 1221 * @codepoint: | 1221 * @codepoint: |
| 1222 * @cluster: | 1222 * @cluster: |
| 1223 * | 1223 * |
| 1224 * | 1224 * |
| 1225 * | 1225 * |
| 1226 * Since: 1.0 | 1226 * Since: 0.9.7 |
| 1227 **/ | 1227 **/ |
| 1228 void | 1228 void |
| 1229 hb_buffer_add (hb_buffer_t *buffer, | 1229 hb_buffer_add (hb_buffer_t *buffer, |
| 1230 hb_codepoint_t codepoint, | 1230 hb_codepoint_t codepoint, |
| 1231 unsigned int cluster) | 1231 unsigned int cluster) |
| 1232 { | 1232 { |
| 1233 buffer->add (codepoint, cluster); | 1233 buffer->add (codepoint, cluster); |
| 1234 buffer->clear_context (1); | 1234 buffer->clear_context (1); |
| 1235 } | 1235 } |
| 1236 | 1236 |
| 1237 /** | 1237 /** |
| 1238 * hb_buffer_set_length: | 1238 * hb_buffer_set_length: |
| 1239 * @buffer: a buffer. | 1239 * @buffer: a buffer. |
| 1240 * @length: | 1240 * @length: |
| 1241 * | 1241 * |
| 1242 * | 1242 * |
| 1243 * | 1243 * |
| 1244 * Return value: | 1244 * Return value: |
| 1245 * | 1245 * |
| 1246 * Since: 1.0 | 1246 * Since: 0.9.2 |
| 1247 **/ | 1247 **/ |
| 1248 hb_bool_t | 1248 hb_bool_t |
| 1249 hb_buffer_set_length (hb_buffer_t *buffer, | 1249 hb_buffer_set_length (hb_buffer_t *buffer, |
| 1250 unsigned int length) | 1250 unsigned int length) |
| 1251 { | 1251 { |
| 1252 if (unlikely (hb_object_is_inert (buffer))) | 1252 if (unlikely (hb_object_is_inert (buffer))) |
| 1253 return length == 0; | 1253 return length == 0; |
| 1254 | 1254 |
| 1255 if (!buffer->ensure (length)) | 1255 if (!buffer->ensure (length)) |
| 1256 return false; | 1256 return false; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1275 } | 1275 } |
| 1276 | 1276 |
| 1277 /** | 1277 /** |
| 1278 * hb_buffer_get_length: | 1278 * hb_buffer_get_length: |
| 1279 * @buffer: a buffer. | 1279 * @buffer: a buffer. |
| 1280 * | 1280 * |
| 1281 * Returns the number of items in the buffer. | 1281 * Returns the number of items in the buffer. |
| 1282 * | 1282 * |
| 1283 * Return value: buffer length. | 1283 * Return value: buffer length. |
| 1284 * | 1284 * |
| 1285 * Since: 1.0 | 1285 * Since: 0.9.2 |
| 1286 **/ | 1286 **/ |
| 1287 unsigned int | 1287 unsigned int |
| 1288 hb_buffer_get_length (hb_buffer_t *buffer) | 1288 hb_buffer_get_length (hb_buffer_t *buffer) |
| 1289 { | 1289 { |
| 1290 return buffer->len; | 1290 return buffer->len; |
| 1291 } | 1291 } |
| 1292 | 1292 |
| 1293 /** | 1293 /** |
| 1294 * hb_buffer_get_glyph_infos: | 1294 * hb_buffer_get_glyph_infos: |
| 1295 * @buffer: a buffer. | 1295 * @buffer: a buffer. |
| 1296 * @length: (out): output array length. | 1296 * @length: (out): output array length. |
| 1297 * | 1297 * |
| 1298 * Returns buffer glyph information array. Returned pointer | 1298 * Returns buffer glyph information array. Returned pointer |
| 1299 * is valid as long as buffer contents are not modified. | 1299 * is valid as long as buffer contents are not modified. |
| 1300 * | 1300 * |
| 1301 * Return value: (transfer none) (array length=length): buffer glyph information
array. | 1301 * Return value: (transfer none) (array length=length): buffer glyph information
array. |
| 1302 * | 1302 * |
| 1303 * Since: 1.0 | 1303 * Since: 0.9.2 |
| 1304 **/ | 1304 **/ |
| 1305 hb_glyph_info_t * | 1305 hb_glyph_info_t * |
| 1306 hb_buffer_get_glyph_infos (hb_buffer_t *buffer, | 1306 hb_buffer_get_glyph_infos (hb_buffer_t *buffer, |
| 1307 unsigned int *length) | 1307 unsigned int *length) |
| 1308 { | 1308 { |
| 1309 if (length) | 1309 if (length) |
| 1310 *length = buffer->len; | 1310 *length = buffer->len; |
| 1311 | 1311 |
| 1312 return (hb_glyph_info_t *) buffer->info; | 1312 return (hb_glyph_info_t *) buffer->info; |
| 1313 } | 1313 } |
| 1314 | 1314 |
| 1315 /** | 1315 /** |
| 1316 * hb_buffer_get_glyph_positions: | 1316 * hb_buffer_get_glyph_positions: |
| 1317 * @buffer: a buffer. | 1317 * @buffer: a buffer. |
| 1318 * @length: (out): output length. | 1318 * @length: (out): output length. |
| 1319 * | 1319 * |
| 1320 * Returns buffer glyph position array. Returned pointer | 1320 * Returns buffer glyph position array. Returned pointer |
| 1321 * is valid as long as buffer contents are not modified. | 1321 * is valid as long as buffer contents are not modified. |
| 1322 * | 1322 * |
| 1323 * Return value: (transfer none) (array length=length): buffer glyph position ar
ray. | 1323 * Return value: (transfer none) (array length=length): buffer glyph position ar
ray. |
| 1324 * | 1324 * |
| 1325 * Since: 1.0 | 1325 * Since: 0.9.2 |
| 1326 **/ | 1326 **/ |
| 1327 hb_glyph_position_t * | 1327 hb_glyph_position_t * |
| 1328 hb_buffer_get_glyph_positions (hb_buffer_t *buffer, | 1328 hb_buffer_get_glyph_positions (hb_buffer_t *buffer, |
| 1329 unsigned int *length) | 1329 unsigned int *length) |
| 1330 { | 1330 { |
| 1331 if (!buffer->have_positions) | 1331 if (!buffer->have_positions) |
| 1332 buffer->clear_positions (); | 1332 buffer->clear_positions (); |
| 1333 | 1333 |
| 1334 if (length) | 1334 if (length) |
| 1335 *length = buffer->len; | 1335 *length = buffer->len; |
| 1336 | 1336 |
| 1337 return (hb_glyph_position_t *) buffer->pos; | 1337 return (hb_glyph_position_t *) buffer->pos; |
| 1338 } | 1338 } |
| 1339 | 1339 |
| 1340 /** | 1340 /** |
| 1341 * hb_buffer_reverse: | 1341 * hb_buffer_reverse: |
| 1342 * @buffer: a buffer. | 1342 * @buffer: a buffer. |
| 1343 * | 1343 * |
| 1344 * Reverses buffer contents. | 1344 * Reverses buffer contents. |
| 1345 * | 1345 * |
| 1346 * Since: 1.0 | 1346 * Since: 0.9.2 |
| 1347 **/ | 1347 **/ |
| 1348 void | 1348 void |
| 1349 hb_buffer_reverse (hb_buffer_t *buffer) | 1349 hb_buffer_reverse (hb_buffer_t *buffer) |
| 1350 { | 1350 { |
| 1351 buffer->reverse (); | 1351 buffer->reverse (); |
| 1352 } | 1352 } |
| 1353 | 1353 |
| 1354 /** | 1354 /** |
| 1355 * hb_buffer_reverse_range: | 1355 * hb_buffer_reverse_range: |
| 1356 * @buffer: a buffer. | 1356 * @buffer: a buffer. |
| 1357 * @start: start index. | 1357 * @start: start index. |
| 1358 * @end: end index. | 1358 * @end: end index. |
| 1359 * | 1359 * |
| 1360 * Reverses buffer contents between start to end. | 1360 * Reverses buffer contents between start to end. |
| 1361 * | 1361 * |
| 1362 * Since: 1.0 | 1362 * Since: 0.9.41 |
| 1363 **/ | 1363 **/ |
| 1364 void | 1364 void |
| 1365 hb_buffer_reverse_range (hb_buffer_t *buffer, | 1365 hb_buffer_reverse_range (hb_buffer_t *buffer, |
| 1366 unsigned int start, unsigned int end) | 1366 unsigned int start, unsigned int end) |
| 1367 { | 1367 { |
| 1368 buffer->reverse_range (start, end); | 1368 buffer->reverse_range (start, end); |
| 1369 } | 1369 } |
| 1370 | 1370 |
| 1371 /** | 1371 /** |
| 1372 * hb_buffer_reverse_clusters: | 1372 * hb_buffer_reverse_clusters: |
| 1373 * @buffer: a buffer. | 1373 * @buffer: a buffer. |
| 1374 * | 1374 * |
| 1375 * Reverses buffer clusters. That is, the buffer contents are | 1375 * Reverses buffer clusters. That is, the buffer contents are |
| 1376 * reversed, then each cluster (consecutive items having the | 1376 * reversed, then each cluster (consecutive items having the |
| 1377 * same cluster number) are reversed again. | 1377 * same cluster number) are reversed again. |
| 1378 * | 1378 * |
| 1379 * Since: 1.0 | 1379 * Since: 0.9.2 |
| 1380 **/ | 1380 **/ |
| 1381 void | 1381 void |
| 1382 hb_buffer_reverse_clusters (hb_buffer_t *buffer) | 1382 hb_buffer_reverse_clusters (hb_buffer_t *buffer) |
| 1383 { | 1383 { |
| 1384 buffer->reverse_clusters (); | 1384 buffer->reverse_clusters (); |
| 1385 } | 1385 } |
| 1386 | 1386 |
| 1387 /** | 1387 /** |
| 1388 * hb_buffer_guess_segment_properties: | 1388 * hb_buffer_guess_segment_properties: |
| 1389 * @buffer: a buffer. | 1389 * @buffer: a buffer. |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1486 /** | 1486 /** |
| 1487 * hb_buffer_add_utf8: | 1487 * hb_buffer_add_utf8: |
| 1488 * @buffer: a buffer. | 1488 * @buffer: a buffer. |
| 1489 * @text: (array length=text_length) (element-type uint8_t): | 1489 * @text: (array length=text_length) (element-type uint8_t): |
| 1490 * @text_length: | 1490 * @text_length: |
| 1491 * @item_offset: | 1491 * @item_offset: |
| 1492 * @item_length: | 1492 * @item_length: |
| 1493 * | 1493 * |
| 1494 * | 1494 * |
| 1495 * | 1495 * |
| 1496 * Since: 1.0 | 1496 * Since: 0.9.2 |
| 1497 **/ | 1497 **/ |
| 1498 void | 1498 void |
| 1499 hb_buffer_add_utf8 (hb_buffer_t *buffer, | 1499 hb_buffer_add_utf8 (hb_buffer_t *buffer, |
| 1500 const char *text, | 1500 const char *text, |
| 1501 int text_length, | 1501 int text_length, |
| 1502 unsigned int item_offset, | 1502 unsigned int item_offset, |
| 1503 int item_length) | 1503 int item_length) |
| 1504 { | 1504 { |
| 1505 hb_buffer_add_utf<hb_utf8_t> (buffer, (const uint8_t *) text, text_length, ite
m_offset, item_length); | 1505 hb_buffer_add_utf<hb_utf8_t> (buffer, (const uint8_t *) text, text_length, ite
m_offset, item_length); |
| 1506 } | 1506 } |
| 1507 | 1507 |
| 1508 /** | 1508 /** |
| 1509 * hb_buffer_add_utf16: | 1509 * hb_buffer_add_utf16: |
| 1510 * @buffer: a buffer. | 1510 * @buffer: a buffer. |
| 1511 * @text: (array length=text_length): | 1511 * @text: (array length=text_length): |
| 1512 * @text_length: | 1512 * @text_length: |
| 1513 * @item_offset: | 1513 * @item_offset: |
| 1514 * @item_length: | 1514 * @item_length: |
| 1515 * | 1515 * |
| 1516 * | 1516 * |
| 1517 * | 1517 * |
| 1518 * Since: 1.0 | 1518 * Since: 0.9.2 |
| 1519 **/ | 1519 **/ |
| 1520 void | 1520 void |
| 1521 hb_buffer_add_utf16 (hb_buffer_t *buffer, | 1521 hb_buffer_add_utf16 (hb_buffer_t *buffer, |
| 1522 const uint16_t *text, | 1522 const uint16_t *text, |
| 1523 int text_length, | 1523 int text_length, |
| 1524 unsigned int item_offset, | 1524 unsigned int item_offset, |
| 1525 int item_length) | 1525 int item_length) |
| 1526 { | 1526 { |
| 1527 hb_buffer_add_utf<hb_utf16_t> (buffer, text, text_length, item_offset, item_le
ngth); | 1527 hb_buffer_add_utf<hb_utf16_t> (buffer, text, text_length, item_offset, item_le
ngth); |
| 1528 } | 1528 } |
| 1529 | 1529 |
| 1530 /** | 1530 /** |
| 1531 * hb_buffer_add_utf32: | 1531 * hb_buffer_add_utf32: |
| 1532 * @buffer: a buffer. | 1532 * @buffer: a buffer. |
| 1533 * @text: (array length=text_length): | 1533 * @text: (array length=text_length): |
| 1534 * @text_length: | 1534 * @text_length: |
| 1535 * @item_offset: | 1535 * @item_offset: |
| 1536 * @item_length: | 1536 * @item_length: |
| 1537 * | 1537 * |
| 1538 * | 1538 * |
| 1539 * | 1539 * |
| 1540 * Since: 1.0 | 1540 * Since: 0.9.2 |
| 1541 **/ | 1541 **/ |
| 1542 void | 1542 void |
| 1543 hb_buffer_add_utf32 (hb_buffer_t *buffer, | 1543 hb_buffer_add_utf32 (hb_buffer_t *buffer, |
| 1544 const uint32_t *text, | 1544 const uint32_t *text, |
| 1545 int text_length, | 1545 int text_length, |
| 1546 unsigned int item_offset, | 1546 unsigned int item_offset, |
| 1547 int item_length) | 1547 int item_length) |
| 1548 { | 1548 { |
| 1549 hb_buffer_add_utf<hb_utf32_t<> > (buffer, text, text_length, item_offset, item
_length); | 1549 hb_buffer_add_utf<hb_utf32_t<> > (buffer, text, text_length, item_offset, item
_length); |
| 1550 } | 1550 } |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1629 pos[i].x_advance = 0; | 1629 pos[i].x_advance = 0; |
| 1630 pos[i].y_advance = 0; | 1630 pos[i].y_advance = 0; |
| 1631 } | 1631 } |
| 1632 | 1632 |
| 1633 if (backward) | 1633 if (backward) |
| 1634 { | 1634 { |
| 1635 /* Transfer all cluster advance to the last glyph. */ | 1635 /* Transfer all cluster advance to the last glyph. */ |
| 1636 pos[end - 1].x_advance = total_x_advance; | 1636 pos[end - 1].x_advance = total_x_advance; |
| 1637 pos[end - 1].y_advance = total_y_advance; | 1637 pos[end - 1].y_advance = total_y_advance; |
| 1638 | 1638 |
| 1639 hb_bubble_sort (buffer->info + start, end - start - 1, compare_info_codepoin
t, buffer->pos + start); | 1639 hb_stable_sort (buffer->info + start, end - start - 1, compare_info_codepoin
t, buffer->pos + start); |
| 1640 } else { | 1640 } else { |
| 1641 /* Transfer all cluster advance to the first glyph. */ | 1641 /* Transfer all cluster advance to the first glyph. */ |
| 1642 pos[start].x_advance += total_x_advance; | 1642 pos[start].x_advance += total_x_advance; |
| 1643 pos[start].y_advance += total_y_advance; | 1643 pos[start].y_advance += total_y_advance; |
| 1644 for (unsigned int i = start + 1; i < end; i++) { | 1644 for (unsigned int i = start + 1; i < end; i++) { |
| 1645 pos[i].x_offset -= total_x_advance; | 1645 pos[i].x_offset -= total_x_advance; |
| 1646 pos[i].y_offset -= total_y_advance; | 1646 pos[i].y_offset -= total_y_advance; |
| 1647 } | 1647 } |
| 1648 hb_bubble_sort (buffer->info + start + 1, end - start - 1, compare_info_code
point, buffer->pos + start + 1); | 1648 hb_stable_sort (buffer->info + start + 1, end - start - 1, compare_info_code
point, buffer->pos + start + 1); |
| 1649 } | 1649 } |
| 1650 } | 1650 } |
| 1651 | 1651 |
| 1652 /** | 1652 /** |
| 1653 * hb_buffer_normalize_glyphs: | 1653 * hb_buffer_normalize_glyphs: |
| 1654 * @buffer: a buffer. | 1654 * @buffer: a buffer. |
| 1655 * | 1655 * |
| 1656 * | 1656 * |
| 1657 * | 1657 * |
| 1658 * Since: 0.9.2 | 1658 * Since: 0.9.2 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1671 | 1671 |
| 1672 unsigned int start = 0; | 1672 unsigned int start = 0; |
| 1673 unsigned int end; | 1673 unsigned int end; |
| 1674 for (end = start + 1; end < count; end++) | 1674 for (end = start + 1; end < count; end++) |
| 1675 if (info[start].cluster != info[end].cluster) { | 1675 if (info[start].cluster != info[end].cluster) { |
| 1676 normalize_glyphs_cluster (buffer, start, end, backward); | 1676 normalize_glyphs_cluster (buffer, start, end, backward); |
| 1677 start = end; | 1677 start = end; |
| 1678 } | 1678 } |
| 1679 normalize_glyphs_cluster (buffer, start, end, backward); | 1679 normalize_glyphs_cluster (buffer, start, end, backward); |
| 1680 } | 1680 } |
| 1681 |
| 1682 void |
| 1683 hb_buffer_t::sort (unsigned int start, unsigned int end, int(*compar)(const hb_g
lyph_info_t *, const hb_glyph_info_t *)) |
| 1684 { |
| 1685 assert (!have_positions); |
| 1686 for (unsigned int i = start + 1; i < end; i++) |
| 1687 { |
| 1688 unsigned int j = i; |
| 1689 while (j > start && compar (&info[j - 1], &info[i]) > 0) |
| 1690 j--; |
| 1691 if (i == j) |
| 1692 continue; |
| 1693 /* Move item i to occupy place for item j, shift what's in between. */ |
| 1694 merge_clusters (j, i + 1); |
| 1695 { |
| 1696 hb_glyph_info_t t = info[i]; |
| 1697 memmove (&info[j + 1], &info[j], (i - j) * sizeof (hb_glyph_info_t)); |
| 1698 info[j] = t; |
| 1699 } |
| 1700 } |
| 1701 } |
| OLD | NEW |