+void swf_FontSort(SWFFONT * font)
+{
+ if(!font) return;
+ int i,j,k;
+ int* newplace = malloc(sizeof(int)*font->numchars);
+ int* newpos;
+
+ for(i=0;i<font->numchars;i++) {
+ newplace[i] = i;
+ }
+ for(i=0;i<font->numchars;i++)
+ for(j=0;j<i;j++) {
+ if(font->glyph2ascii[i] < font->glyph2ascii[j]) {
+ int n1,n2;
+ char* c1,*c2;
+ SWFGLYPH g1,g2;
+ SRECT r1,r2;
+ n1=newplace[i];
+ n2=newplace[j];
+ newplace[j] = n1;
+ newplace[i] = n2;
+ n1=font->glyph2ascii[i];
+ n2=font->glyph2ascii[j];
+ font->glyph2ascii[j] = n1;
+ font->glyph2ascii[i] = n2;
+ g1=font->glyph[i];
+ g2=font->glyph[j];
+ font->glyph[j] = g1;
+ font->glyph[i] = g2;
+ if(font->glyphnames) {
+ c1 = font->glyphnames[i];
+ c2 = font->glyphnames[j];
+ font->glyphnames[j] = c1;
+ font->glyphnames[i] = c2;
+ }
+ if(font->layout) {
+ r1 = font->layout->bounds[i];
+ r2 = font->layout->bounds[j];
+ font->layout->bounds[j] = r1;
+ font->layout->bounds[i] = r2;
+ }
+ }
+ }
+ newpos = malloc(sizeof(int)*font->numchars);
+ for(i=0;i<font->numchars;i++) {
+ newpos[newplace[i]] = i;
+ }
+ for(i=0;i<font->maxascii;i++) {
+ if(font->ascii2glyph[i]>=0)
+ font->ascii2glyph[i] = newpos[font->ascii2glyph[i]];
+ }
+
+ free(newpos);
+ free(newplace);
+}
+
+void swf_FontPrepareForEditText(SWFFONT * font)
+{
+ if(!font->layout)
+ swf_FontCreateLayout(font);
+ swf_FontSort(font);
+}