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 |