pango-compat.c - ledit - Text editor (WIP)
HTML git clone git://lumidify.org/ledit.git (fast, but not encrypted)
HTML git clone https://lumidify.org/git/ledit.git (encrypted, but very slow)
HTML git clone git://4kcetb7mo7hj6grozzybxtotsub5bempzo4lirzc3437amof2c2impyd.onion/ledit.git (over tor)
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
pango-compat.c (1807B)
---
1 #include <pango/pangoxft.h>
2
3 /* FIXME: Is this illegal due to different licenses? */
4 /* FIXME: Check earliest version of other used functions to get minimum pango version
5 for ledit as a whole */
6 /* FIXME: This is just copied from the newer version of pango. It *seems* like
7 the structs used are public (they're in the documentation), but it does seem
8 a bit dirty to do this here */
9 /* This version check is disabled currently because an older version of pango had a
10 bug where pango_layout_get_direction didn't work with lines of length 0.
11 I should actually check when that was changed so I can do a version check for that. */
12 //#if !PANGO_VERSION_CHECK(1, 46, 0)
13 #if 1
14 static PangoLayoutRun *
15 pango_layout_line_get_run(PangoLayoutLine *line, int index) {
16 GSList *run_list;
17
18 run_list = line->runs;
19 while (run_list) {
20 PangoLayoutRun *run = run_list->data;
21
22 if (run->item->offset <= index && run->item->offset + run->item->length > index)
23 return run;
24
25 run_list = run_list->next;
26 }
27
28 return NULL;
29 }
30
31 static int
32 pango_layout_line_get_char_level(PangoLayoutLine *line, int index) {
33 PangoLayoutRun *run;
34
35 run = pango_layout_line_get_run(line, index);
36
37 if (run)
38 return run->item->analysis.level;
39
40 return 0;
41 }
42
43 static PangoDirection
44 pango_layout_line_get_char_direction(PangoLayoutLine *layout_line, int index) {
45 return pango_layout_line_get_char_level(layout_line, index) % 2
46 ? PANGO_DIRECTION_RTL
47 : PANGO_DIRECTION_LTR;
48 }
49
50 PangoDirection
51 ledit_pango_layout_get_direction(PangoLayout *layout, int index) {
52 int lineno, x;
53 PangoLayoutLine *line;
54 pango_layout_index_to_line_x(layout, index, 0, &lineno, &x);
55 line = pango_layout_get_line_readonly(layout, lineno);
56
57 if (line)
58 return pango_layout_line_get_char_direction(line, index);
59
60 return PANGO_DIRECTION_LTR;
61 }
62 #endif