--- ../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 */