Introduction
Introduction Statistics Contact Development Disclaimer Help
sent-bidi-20220622-9ed2713.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
sent-bidi-20220622-9ed2713.diff (3347B)
---
1 From 9ed271353ddeadd66e6550aa79065b601b3d6cf4 Mon Sep 17 00:00:00 2001
2 From: Mahdi Mirzadeh <[email protected]>
3 Date: Wed, 22 Jun 2022 02:55:13 +0430
4 Subject: [PATCH] Added support for RTL languages (Farsi, Arabic and Hebr…
5 using the FriBiDi library) to sent
6
7 ---
8 config.mk | 13 ++++++++-----
9 sent.c | 28 ++++++++++++++++++++++++++--
10 2 files changed, 34 insertions(+), 7 deletions(-)
11
12 diff --git a/config.mk b/config.mk
13 index d61c554..8e74aee 100644
14 --- a/config.mk
15 +++ b/config.mk
16 @@ -10,14 +10,17 @@ MANPREFIX = ${PREFIX}/share/man
17 X11INC = /usr/X11R6/include
18 X11LIB = /usr/X11R6/lib
19
20 +BDINC = /usr/include/fribidi
21 +BDLIBS = -lfribidi
22 +
23 # includes and libs
24 -INCS = -I. -I/usr/include -I/usr/include/freetype2 -I${X11INC}
25 -LIBS = -L/usr/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11
26 +INCS = -I. -I/usr/include -I/usr/include/freetype2 -I${X11INC} -I$(BDIN…
27 +LIBS = -L/usr/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11 $(BDLIBS)
28 # OpenBSD (uncomment)
29 -#INCS = -I. -I${X11INC} -I${X11INC}/freetype2
30 +#INCS = -I. -I${X11INC} -I${X11INC}/freetype2 -I$(BDINC)
31 # FreeBSD (uncomment)
32 -#INCS = -I. -I/usr/local/include -I/usr/local/include/freetype2 -I${X11…
33 -#LIBS = -L/usr/local/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11
34 +#INCS = -I. -I/usr/local/include -I/usr/local/include/freetype2 -I${X11…
35 +#LIBS = -L/usr/local/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11 $…
36
37 # flags
38 CPPFLAGS = -DVERSION=\"${VERSION}\" -D_XOPEN_SOURCE=600
39 diff --git a/sent.c b/sent.c
40 index 9534fca..a03475b 100644
41 --- a/sent.c
42 +++ b/sent.c
43 @@ -18,6 +18,7 @@
44 #include <X11/Xlib.h>
45 #include <X11/Xutil.h>
46 #include <X11/Xft/Xft.h>
47 +#include <fribidi.h>
48
49 #include "arg.h"
50 #include "util.h"
51 @@ -117,6 +118,7 @@ static void configure(XEvent *);
52
53 /* Globals */
54 static const char *fname = NULL;
55 +static char fribidi_text[BUFSIZ] = "";
56 static Slide *slides = NULL;
57 static int idx = 0;
58 static int slidecount = 0;
59 @@ -134,6 +136,26 @@ static void (*handler[LASTEvent])(XEvent *) = {
60 [KeyPress] = kpress,
61 };
62
63 +static void
64 +apply_fribidi(char *str)
65 +{
66 + FriBidiStrIndex len = strlen(str);
67 + FriBidiChar logical[BUFSIZ];
68 + FriBidiChar visual[BUFSIZ];
69 + FriBidiParType base = FRIBIDI_PAR_ON;
70 + FriBidiCharSet charset;
71 + fribidi_boolean result;
72 +
73 + fribidi_text[0] = 0;
74 + if (len>0)
75 + {
76 + charset = fribidi_parse_charset("UTF-8");
77 + len = fribidi_charset_to_unicode(charset, str, len, log…
78 + result = fribidi_log2vis(logical, len, &base, visual, N…
79 + len = fribidi_unicode_to_charset(charset, visual, len, …
80 + }
81 +}
82 +
83 int
84 filter(int fd, const char *cmd)
85 {
86 @@ -528,15 +550,17 @@ xdraw()
87
88 if (!im) {
89 drw_rect(d, 0, 0, xw.w, xw.h, 1, 1);
90 - for (i = 0; i < slides[idx].linecount; i++)
91 + for (i = 0; i < slides[idx].linecount; i++) {
92 + apply_fribidi(slides[idx].lines[i]);
93 drw_text(d,
94 (xw.w - width) / 2,
95 (xw.h - height) / 2 + i * linespacing …
96 width,
97 d->fonts->h,
98 0,
99 - slides[idx].lines[i],
100 + fribidi_text,
101 0);
102 + }
103 drw_map(d, xw.win, 0, 0, xw.w, xw.h);
104 } else {
105 if (!(im->state & SCALED))
106 --
107 2.35.2
108
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.