• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1%D \module
2%D   [      file=s-lan-04,
3%D        version=2011.05.01,
4%D          title=\CONTEXT\ Style File,
5%D       subtitle=Language Environment 4,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA / Hans Hagen \& Ton Otten}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14%D For Mojca.
15
16% \enabletrackers[fonts.goodies,languages.patterns]
17
18% TODO: lm, lo, mn
19
20\startluacode
21    local a_colormodel   = attributes.private('colormodel')
22
23    local nodecodes      = nodes.nodecodes
24    local nodepool       = nodes.pool
25    local disc           = nodecodes.disc
26    local glyph          = nodecodes.glyph
27    local quads          = fonts.hashes.quads
28    local newkern        = nodepool.kern
29    local newrule        = nodepool.rule
30    local newglue        = nodepool.glue
31
32    local get_attribute  = node.has_attribute
33
34    local tracers        = nodes.tracers
35    local colortracers   = tracers and tracers.colors
36    local setnodecolor   = colortracers.set
37
38    local function identify(head,marked)
39        local current, prev = head, nil
40        while current do
41            local id = current.id
42            local next = current.next
43            if id == disc then
44                if prev and next.id == glyph then -- catch other usage of disc
45                    marked[#marked+1] = prev
46                end
47            elseif id == glyph then
48                prev = current
49            end
50            current = next
51        end
52    end
53
54    local function strip(head,marked)
55        for i=1,#marked do
56            local prev = marked[i]
57            nodes.remove(head,prev.next,true)
58        end
59    end
60
61    local function mark(head,marked,what,how)
62        -- local xquad = quads[marked[1].font]
63        head, prev = node.insert_after(head,prev,newkern(1000))
64        for i=1,#marked do
65            local prev = marked[i]
66            local font = prev.font
67            local quad = quads[font]
68            head, prev = node.insert_after(head,prev,newkern(-quad/20))
69            -- head, prev = node.insert_after(head,prev,newkern(0))
70            if what then
71--                local rule = newrule(quad/10,.75*quad,-0.3*quad)
72                local rule = newrule(quad/10,.15*quad,0*quad)
73                head, prev = node.insert_after(head,prev,rule)
74                setnodecolor(rule,how,get_attribute(prev,a_colormodel))
75            else
76--                local rule = newrule(quad/10,.15*quad,.3*quad)
77                local rule = newrule(quad/10,.75*quad,0*quad)
78                head, prev = node.insert_after(head,prev,rule)
79                setnodecolor(rule,how,get_attribute(prev,a_colormodel))
80            end
81            head, prev = node.insert_after(head,prev,newkern(-quad/20))
82--            head, prev = node.insert_after(head,prev,newkern(0))
83            head, prev = node.insert_after(head,prev,newglue(0))
84        end
85--        head, prev = node.insert_after(head,prev,newkern(quad/40))
86    end
87
88    local language_one, language_two, tag_one, tag_two
89
90    function nodes.showhyphens(head)
91        local marked_1, marked_2 = { }, { }
92        if language_one then
93            for n in node.traverse_id(glyph,head) do
94                n.lang = language_one
95            end
96            lang.hyphenate(head,node.slide(head))
97            identify(head,marked_1)
98            strip(head,marked_1)
99        end
100        if language_two then
101            for n in node.traverse_id(glyph,head) do
102                n.lang = language_two
103            end
104            lang.hyphenate(head,node.slide(head))
105            identify(head,marked_2)
106            strip(head,marked_2)
107        end
108        mark(head,marked_1,true,"hyphenation:"..tag_one)
109        if not tag_2 ~= nil then
110            mark(head,marked_2,false,"hyphenation:"..tag_two)
111        end
112        if language_one then
113            for n in node.traverse_id(glyph,head) do
114                n.lang = language_one
115            end
116            lang.hyphenate(head,node.slide(head))
117        end
118        return head, true
119    end
120
121    function languages.startcomparepatterns(list)
122        local list = utilities.parsers.settings_to_array(list)
123        tag_one = list[1]
124        tag_two = list[2]
125        language_one = tag_one and languages.getnumber(tag_one)
126        language_two = tag_two and languages.getnumber(tag_two)
127    --  nodes.tasks.appendaction("processors","words","nodes.showhyphens")
128        nodes.tasks.appendaction("processors","before","nodes.showhyphens")
129        nodes.tasks.enableaction("processors","nodes.showhyphens")
130    end
131
132    function languages.stopcomparepatterns()
133        nodes.tasks.disableaction("processors","nodes.showhyphens")
134    end
135
136\stopluacode
137
138\unprotect
139
140\def\startcomparepatterns[#1]%
141  {\bgroup
142   \language\zerocount
143   \setupalign[\v!nothyphenated]%
144   \ctxlua{languages.startcomparepatterns("#1")}}
145
146\def\stopcomparepatterns
147  {\ctxlua{languages.stopcomparepatterns()}%
148   \egroup}
149
150\protect
151
152\definecolor[hyphenation:ka]  [b=1.]
153\definecolor[hyphenation:ka2] [r=.8]
154\definecolor[hyphenation:en]  [g=.8]
155% \definecolor[hyphenation:nl] [b=.8]
156
157% \doifnotmode{demo}{\endinput}
158
159\installlanguage
160	[ka]
161	[patterns=ka,
162	 lefthyphenchar=-1,
163	 righthyphenchar=-1,
164	]
165\installlanguage
166	[ka2]
167	[patterns=ka, % use different patterns
168	 lefthyphenchar=-1,
169	 righthyphenchar=-1,
170	]
171\mainlanguage
172	[ka]
173
174\starttypescript[serif][arial]
175	\definefontsynonym [Serif] [file:Arial Unicode.ttf] [features=default]
176\stoptypescript
177
178\starttypescript[arial]
179	\definetypeface [arial] [rm] [serif] [arial] [default]
180\stoptypescript
181
182
183\setupbodyfont[arial]
184
185\setupwhitespace
186	[big]
187
188\definecolor[colorscheme:3:1][r=.8,b=.8]
189\definecolor[colorscheme:3:2][b=1.]
190\definecolor[colorscheme:3:3][b=.8]
191\definecolor[colorscheme:3:4][b=.8]
192\definecolor[colorscheme:3:5][b=.4]
193\definecolor[colorscheme:3:6][b=.3]
194\definecolor[colorscheme:3:7][r=.5]
195\definecolor[colorscheme:3:8][g=.5]
196
197\starttext
198
199\setfontcolorscheme[3]
200
201\startcomparepatterns[ka,ka]
202    \input ka-text-plain.txt\par
203\stopcomparepatterns
204
205% Reference syllabification:
206%
207% \catcode`\​=\active
208% \def​{\color[red]{\kern-0.5pt\vrule width1pt height 10pt depth0pt\kern-0.5pt}\hskip0pt}
209% \input ka-text-hyphenated.txt\par
210
211\stoptext
212