Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(320)

Side by Side Diff: third_party/harfbuzz-ng/src/hb-buffer.cc

Issue 1408003004: Roll harfbuzz-ng to 1.0.5 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2526
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « third_party/harfbuzz-ng/src/hb-buffer.h ('k') | third_party/harfbuzz-ng/src/hb-buffer-private.hh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698