--- ../o/links-2.1pre17/html_r.c 2005-01-22 22:51:53.000000000 +0200 +++ html_r.c 2005-03-22 23:29:20.173549984 +0200 @@ -5,6 +5,10 @@ #include "links.h" +#ifdef USE_FRIBIDI +#include +#endif + #define format format_ struct f_data *init_formatted(struct document_options *opt) @@ -521,8 +525,10 @@ if (i + par_format.rightmargin > p->x) p->x = i + par_format.rightmargin; if (p->data) { #ifdef DEBUG +#ifndef USE_FRIBIDI if ((POS(i, p->cy) & 0xff) != ' ') internal("bad split: %c", (char)POS(i, p->cy)); #endif +#endif move_chars(p, i+1, p->cy, par_format.leftmargin, p->cy+1); del_chars(p, i, p->cy); } @@ -654,6 +660,7 @@ int bg, fg; int i; + int opcx; struct link *link; struct point *pt; if (l < 0) overalloc(); @@ -676,11 +683,15 @@ if (p->y < p->cy + 1) p->y = p->cy + 1; if (nowrap && p->cx + l > rm(par_format)) return; set_hline(p, p->cx, p->cy, l, c, (((fg&0x08)<<3)|(bg<<3)|(fg&0x07))<<8, 1); + opcx=p->cx; p->cx += l; nobreak = 0; - if (par_format.align != AL_NO) + if (par_format.align != AL_NO) { + int cont=1; + while (p->cx > rm(par_format) && p->cx > par_format.leftmargin) { int x; + cont=0; /*if (p->cx > p->x) { p->x = p->cx + par_format.rightmargin; if (c[l - 1] == ' ') p->x--; @@ -688,8 +699,50 @@ if (!(x = split_line(p))) break; /*if (LEN(p->cy-1) > p->x) p->x = LEN(p->cy-1);*/ align_line(p, p->cy - 1); +#ifdef USE_FRIBIDI + if(p->data){ + unsigned char txt[1024]; + unsigned char utext[1024]; + int ll, j, i; + i=LEN(p->cy-1); + FriBidiCharType base = FRIBIDI_TYPE_ON; + + for(j=opcx;jcy-1); + txt[j-opcx]=0; + + ll=fribidi_iso8859_8_to_unicode(txt, i-opcx, utext); + fribidi_log2vis( utext, ll, &base, + txt, NULL, NULL, NULL); + fribidi_unicode_to_iso8859_8(txt, ll, utext); + for(j=opcx;jcy-1)=utext[j-opcx]; + opcx=0; + } +#endif nobreak = x - 1; } + +#ifdef USE_FRIBIDI + if(!cont) { + opcx=0; + } + if(p->data) { + unsigned char txt[1024]; + unsigned char utext[1024]; + int ll, j, i; + i=LEN(p->cy); + FriBidiCharType base = FRIBIDI_TYPE_ON; + + for(j=opcx;jcy); + txt[j-opcx]=0; + + ll=fribidi_iso8859_8_to_unicode(txt, i-opcx, utext); + fribidi_log2vis( utext, ll, &base, + txt, NULL, NULL, NULL); + fribidi_unicode_to_iso8859_8(txt, ll, utext); + for(j=opcx;jcy)=utext[j-opcx]; + } +#endif + } if ((p->xa += l) - (c[l-1] == ' ' && par_format.align != AL_NO) + par_format.leftmargin + par_format.rightmargin > p->xmax) p->xmax = p->xa - (c[l-1] == ' ' && par_format.align != AL_NO) + par_format.leftmargin + par_format.rightmargin; return; --- ../o/links-2.1pre17/terminal.c 2005-01-02 22:17:26.000000000 +0200 +++ terminal.c 2005-03-22 18:05:54.568650344 +0200 @@ -5,6 +5,10 @@ #include "links.h" +#ifdef USE_FRIBIDI +#include +#endif + #ifdef G void t_redraw(struct graphics_device *, struct rect *); @@ -1030,6 +1034,19 @@ void print_text(struct terminal *t, int x, int y, int l, unsigned char *text, unsigned c) { +#ifdef USE_FRIBIDI + unsigned char txt[1024]; + unsigned char utext[1024]; + int ll; + FriBidiCharType base = FRIBIDI_TYPE_ON; + + ll=fribidi_iso8859_8_to_unicode(text, strlen(text), utext); + fribidi_log2vis( utext, ll, &base, + txt, NULL, NULL, NULL); + fribidi_unicode_to_iso8859_8(txt, ll, utext); + text=utext; +#endif + NO_GFX; for (; l-- && *text; text++, x++) set_char(t, x, y, *text + c); } --- ../o/links-2.1pre17/dip.c 2005-01-02 22:17:25.000000000 +0200 +++ dip.c 2005-03-22 16:42:20.967833520 +0200 @@ -12,6 +12,10 @@ #include "links.h" +#ifdef USE_FRIBIDI +#include +#endif + #ifdef HAVE_MATH_H #include #endif /* HAVE_MATH_H */ @@ -1732,6 +1736,19 @@ my_width; struct rect saved_clip; +#ifdef USE_FRIBIDI + unsigned char txt[1024]; + unsigned char utext[1024]; + int l; + FriBidiCharType base = FRIBIDI_TYPE_ON; + + l=fribidi_utf8_to_unicode(text, strlen(text), utext); + fribidi_log2vis( utext, l, &base, + txt, NULL, NULL, NULL); + fribidi_unicode_to_utf8(txt, l, utext); + text=utext; +#endif + if (y+style->height<=device->clip.y1||y>=device->clip.y2) goto o; if (style -> flags){ /* Underline */