summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2018-08-11 01:23:08 +0200
committerContext Git Mirror Bot <phg@phi-gamma.net>2018-08-11 01:23:08 +0200
commit1ef7a093aaf03b6327b3da94d47f53760c868c60 (patch)
tree228e6d4a5005598aaea191b3317c2fa21e22de75 /tex/context/base/mkiv
parentb61d5dd3555e906b21601ff75b3268c0f359283e (diff)
downloadcontext-1ef7a093aaf03b6327b3da94d47f53760c868c60.tar.gz
2018-08-10 16:58:00
Diffstat (limited to 'tex/context/base/mkiv')
-rw-r--r--tex/context/base/mkiv/anch-pgr.lua11
-rw-r--r--tex/context/base/mkiv/anch-pos.lua8
-rw-r--r--tex/context/base/mkiv/back-ini.lua8
-rw-r--r--tex/context/base/mkiv/char-ini.lua5
-rw-r--r--tex/context/base/mkiv/cldf-ini.lua2
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv5
-rw-r--r--tex/context/base/mkiv/core-uti.lua2
-rw-r--r--tex/context/base/mkiv/font-ctx.lua14
-rw-r--r--tex/context/base/mkiv/font-map.lua2
-rw-r--r--tex/context/base/mkiv/font-mps.lua3
-rw-r--r--tex/context/base/mkiv/font-sol.lua4
-rw-r--r--tex/context/base/mkiv/grph-epd.lua1
-rw-r--r--tex/context/base/mkiv/grph-rul.lua11
-rw-r--r--tex/context/base/mkiv/l-macro-imp-optimize.lua24
-rw-r--r--tex/context/base/mkiv/l-macro.lua29
-rw-r--r--tex/context/base/mkiv/lpdf-ano.lua16
-rw-r--r--tex/context/base/mkiv/lpdf-epa.lua24
-rw-r--r--tex/context/base/mkiv/lpdf-ini.lua435
-rw-r--r--tex/context/base/mkiv/lpdf-nod.lua22
-rw-r--r--tex/context/base/mkiv/lpdf-pde.lua9
-rw-r--r--tex/context/base/mkiv/luat-cbk.lua6
-rw-r--r--tex/context/base/mkiv/luat-run.lua5
-rw-r--r--tex/context/base/mkiv/mlib-pps.lua4
-rw-r--r--tex/context/base/mkiv/mult-low.lua1
-rw-r--r--tex/context/base/mkiv/node-dir.lua62
-rw-r--r--tex/context/base/mkiv/node-fnt.lua4
-rw-r--r--tex/context/base/mkiv/node-ltp.lua37
-rw-r--r--tex/context/base/mkiv/node-nut.lua123
-rw-r--r--tex/context/base/mkiv/node-ppt.lua6
-rw-r--r--tex/context/base/mkiv/node-res.lua48
-rw-r--r--tex/context/base/mkiv/node-rul.lua26
-rw-r--r--tex/context/base/mkiv/node-ser.lua2
-rw-r--r--tex/context/base/mkiv/node-syn.lua9
-rw-r--r--tex/context/base/mkiv/pack-lyr.mkiv82
-rw-r--r--tex/context/base/mkiv/page-imp.mkiv5
-rw-r--r--tex/context/base/mkiv/page-pcl.mkiv2
-rw-r--r--tex/context/base/mkiv/publ-aut.lua4
-rw-r--r--tex/context/base/mkiv/publ-dat.lua63
-rw-r--r--tex/context/base/mkiv/scrp-eth.lua2
-rw-r--r--tex/context/base/mkiv/scrp-ini.lua10
-rw-r--r--tex/context/base/mkiv/spac-ver.mkiv8
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin26189 -> 26245 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin264507 -> 267608 bytes
-rw-r--r--tex/context/base/mkiv/strc-blk.mkiv42
-rw-r--r--tex/context/base/mkiv/strc-ref.lua4
-rw-r--r--tex/context/base/mkiv/supp-box.mkiv20
-rw-r--r--tex/context/base/mkiv/symb-imp-fontawesome.mkiv1475
-rw-r--r--tex/context/base/mkiv/symb-ini.mkiv62
-rw-r--r--tex/context/base/mkiv/symb-run.mkiv62
-rw-r--r--tex/context/base/mkiv/trac-par.lua3
-rw-r--r--tex/context/base/mkiv/trac-set.lua17
-rw-r--r--tex/context/base/mkiv/trac-vis.lua7
-rw-r--r--tex/context/base/mkiv/typo-chr.lua3
-rw-r--r--tex/context/base/mkiv/typo-mar.lua3
55 files changed, 1721 insertions, 1123 deletions
diff --git a/tex/context/base/mkiv/anch-pgr.lua b/tex/context/base/mkiv/anch-pgr.lua
index 7b1746582..e0b9132ff 100644
--- a/tex/context/base/mkiv/anch-pgr.lua
+++ b/tex/context/base/mkiv/anch-pgr.lua
@@ -56,7 +56,6 @@ graphics.backgrounds = backgrounds
-- -- --
local texsetattribute = tex.setattribute
-local pdfgetpos = pdf.getpos -- why not a generic name !
local a_textbackground = attributes.private("textbackground")
@@ -91,13 +90,21 @@ local realpage = 1
local recycle = 1000 -- only tables can overflow this
local enabled = false
+-- can change:
+
+local getpos = function() getpos = backends.codeinjections.getpos return getpos() end
+
+updaters.register("backend.update",function()
+ getpos = backends.codeinjections.getpos
+end)
+
-- Freeing the data is somewhat tricky as we can have backgrounds spanning
-- many pages but for an arbitrary background shape that is not so common.
local function check(a,index,depth,d,where,ht,dp)
-- this is not yet r2l ready
local w = d.shapes[realpage]
- local x, y = pdfgetpos()
+ local x, y = getpos()
if trace_ranges then
report_shapes("attribute %i, index %i, depth %i, location %s, position (%p,%p)",
a,index,depth,where,x,y)
diff --git a/tex/context/base/mkiv/anch-pos.lua b/tex/context/base/mkiv/anch-pos.lua
index e6a69b1bd..99763edae 100644
--- a/tex/context/base/mkiv/anch-pos.lua
+++ b/tex/context/base/mkiv/anch-pos.lua
@@ -334,6 +334,12 @@ local getpos = function() getpos = backends.codeinjections.getpos return getp
local gethpos = function() gethpos = backends.codeinjections.gethpos return gethpos() end
local getvpos = function() getvpos = backends.codeinjections.getvpos return getvpos() end
+updaters.register("backend.update",function()
+ getpos = backends.codeinjections.getpos
+ gethpos = backends.codeinjections.gethpos
+ getvpos = backends.codeinjections.getvpos
+end)
+
local function setall(name,p,x,y,w,h,d,extra)
tobesaved[name] = {
p = p,
@@ -531,7 +537,7 @@ local function setregionbox(n,tag,k,lo,ro,to,bo) -- kind
end
local box = getbox(n)
local w, h, d = getwhd(box)
- local x, y = getpos() -- hm, makes no sense here
+ local x, y = getpos() -- hm, makes no sense here as not in shipout
tobesaved[tag] = {
-- p = texgetcount("realpageno"), -- we copy them
x = x ~= 0 and x or nil, -- was true
diff --git a/tex/context/base/mkiv/back-ini.lua b/tex/context/base/mkiv/back-ini.lua
index fd33d5ddc..256fcf445 100644
--- a/tex/context/base/mkiv/back-ini.lua
+++ b/tex/context/base/mkiv/back-ini.lua
@@ -105,11 +105,9 @@ tables.vfspecials = allocate {
-- we'd better have this return something (defaults)
-function codeinjections.getpos () return 0, 0 end
-function codeinjections.gethpos () return 0 end
-function codeinjections.getvpos () return 0 end
-function codeinjections.hasmatrix() return false end
-function codeinjections.getmatrix() return 1, 0, 0, 1, 0, 0 end
+function codeinjections.getpos () return 0, 0 end
+function codeinjections.gethpos() return 0 end
+function codeinjections.getvpos() return 0 end
-- can best be here
diff --git a/tex/context/base/mkiv/char-ini.lua b/tex/context/base/mkiv/char-ini.lua
index 4ee9db8b5..92f9a2291 100644
--- a/tex/context/base/mkiv/char-ini.lua
+++ b/tex/context/base/mkiv/char-ini.lua
@@ -749,6 +749,10 @@ local is_punctuation = allocate ( tohash {
"pc","pd","ps","pe","pi","pf","po",
} )
+local is_symbol = allocate ( tohash {
+ "sm", "sc", "sk", "so",
+} )
+
-- to be redone: store checked characters
characters.is_character = is_character
@@ -757,6 +761,7 @@ characters.is_command = is_command
characters.is_spacing = is_spacing
characters.is_mark = is_mark
characters.is_punctuation = is_punctuation
+characters.is_symbol = is_symbol
local mti = function(t,k)
if type(k) == "number" then
diff --git a/tex/context/base/mkiv/cldf-ini.lua b/tex/context/base/mkiv/cldf-ini.lua
index 72f1276d2..a7975eec4 100644
--- a/tex/context/base/mkiv/cldf-ini.lua
+++ b/tex/context/base/mkiv/cldf-ini.lua
@@ -1261,7 +1261,7 @@ local traced = function(one,two,...)
elseif argtype == "number" then
currenttrace(formatters["f : - : %s"](one))
elseif argtype == "userdata" then
- currenttrace(formatters["f : - : %s"](userdata(one)))
+ currenttrace(formatters["F : - : %s"](userdata(one)))
else
currenttrace(formatters["f : - : <<%S>>"](one))
end
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index d25377d08..0de7057d6 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2018.07.27 19:12}
+\newcontextversion{2018.08.10 16:51}
%D This file is loaded at runtime, thereby providing an excellent place for
%D hacks, patches, extensions and new features.
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index 741bde22d..bc599f373 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -42,7 +42,7 @@
%D has to match \type {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2018.07.27 19:12}
+\edef\contextversion{2018.08.10 16:51}
\edef\contextkind {beta}
%D For those who want to use this:
@@ -565,6 +565,9 @@
\loadmarkfile{back-exp}
\loadmarkfile{back-pdf} % actually, this one should load the next three using document.arguments.backend
+
+\doifelsefileexists{back-shp.mkiv}{\loadmarkfile{back-shp}}{}
+
\loadmarkfile{mlib-pdf}
\loadmarkfile{mlib-pps}
\loadmarkfile{meta-pdf}
diff --git a/tex/context/base/mkiv/core-uti.lua b/tex/context/base/mkiv/core-uti.lua
index 9ba2c945f..9074d1da9 100644
--- a/tex/context/base/mkiv/core-uti.lua
+++ b/tex/context/base/mkiv/core-uti.lua
@@ -43,7 +43,7 @@ local report_passes = logs.reporter("job","passes")
job = job or { }
local job = job
-job.version = 1.30
+job.version = 1.31
job.packversion = 1.02
-- some day we will implement loading of other jobs and then we need
diff --git a/tex/context/base/mkiv/font-ctx.lua b/tex/context/base/mkiv/font-ctx.lua
index ff9d75060..626ce51f2 100644
--- a/tex/context/base/mkiv/font-ctx.lua
+++ b/tex/context/base/mkiv/font-ctx.lua
@@ -1898,10 +1898,19 @@ implement {
local function nametoslot(name)
local t = type(name)
if t == "string" then
- local slot = unicodes[true][name]
+ local unic = unicodes[true]
+ local slot = unic[name]
if slot then
return slot
end
+ --
+ local slot = unic[gsub(name,"_"," ")] or unic[gsub(name,"_","-")] or
+ unic[gsub(name,"-"," ")] or unic[gsub(name,"-","_")] or
+ unic[gsub(name," ","_")] or unic[gsub(name," ","-")]
+ if slot then
+ return slot
+ end
+ --
if not aglunicodes then
aglunicodes = encodings.agl.unicodes
end
@@ -1920,14 +1929,13 @@ local function nametoslot(name)
end
end
-
local found = { }
local function descriptiontoslot(name)
local t = type(name)
if t == "string" then
-- slow
- local list = sortedkeys(chardata)
+ local list = sortedkeys(chardata) -- can be a cache with weak tables
local slot = found[name]
local char = characters[true]
if slot then
diff --git a/tex/context/base/mkiv/font-map.lua b/tex/context/base/mkiv/font-map.lua
index b44e20ede..140702ec8 100644
--- a/tex/context/base/mkiv/font-map.lua
+++ b/tex/context/base/mkiv/font-map.lua
@@ -225,7 +225,7 @@ local hash = table.setmetatableindex(function(t,k)
elseif k < 0xD7FF or (k > 0xDFFF and k <= 0xFFFF) then
v = f_single(k)
else
- v = k - 0x10000
+ k = k - 0x10000
v = f_double(rshift(k,10)+0xD800,k%1024+0xDC00)
end
t[k] = v
diff --git a/tex/context/base/mkiv/font-mps.lua b/tex/context/base/mkiv/font-mps.lua
index cde34f2ae..766468c57 100644
--- a/tex/context/base/mkiv/font-mps.lua
+++ b/tex/context/base/mkiv/font-mps.lua
@@ -267,6 +267,7 @@ local getshift = nuts.getshift
local getwidth = nuts.getwidth
local getheight = nuts.getheight
local getdepth = nuts.getdepth
+local getexpansion = nuts.getexpansion
local effective_glue = nuts.effective_glue
@@ -339,7 +340,7 @@ function fonts.metapost.boxtomp(n,kind)
while current do
local id = getid(current)
if id == glyph_code then
- local code, width = metapost.output(kind,getfont(current),getchar(current),xoffset+dx,yoffset,getfield(current,"expansion_factor"))
+ local code, width = metapost.output(kind,getfont(current),getchar(current),xoffset+dx,yoffset,getexpansion(current))
result[#result+1] = code
dx = dx + width
elseif id == disc_code then
diff --git a/tex/context/base/mkiv/font-sol.lua b/tex/context/base/mkiv/font-sol.lua
index 73f7252d1..85f5df8d5 100644
--- a/tex/context/base/mkiv/font-sol.lua
+++ b/tex/context/base/mkiv/font-sol.lua
@@ -65,6 +65,8 @@ local getsubtype = nuts.getsubtype
local getlist = nuts.getlist
local getdir = nuts.getdir
local getwidth = nuts.getwidth
+local getdata = nuts.getdata
+
local getboxglue = nuts.getboxglue
local setattr = nuts.setattr
@@ -446,7 +448,7 @@ local function collect_words(list) -- can be made faster for attributes
if subtype == userdefined_code then -- hm
local user_id = getfield(current,"user_id")
if user_id == splitter_one then
- word = { getfield(current,"value"), current, current }
+ word = { getdata(current), current, current }
w = w + 1
words[w] = word
elseif user_id == splitter_two then
diff --git a/tex/context/base/mkiv/grph-epd.lua b/tex/context/base/mkiv/grph-epd.lua
index ae0358b36..a136108c8 100644
--- a/tex/context/base/mkiv/grph-epd.lua
+++ b/tex/context/base/mkiv/grph-epd.lua
@@ -39,6 +39,7 @@ local function mergegoodies(optionlist)
end
function figures.mergegoodies(optionlist)
+ -- todo: we can use runtoks instead
context.stepwise(function()
-- we use stepwise because we might need to define symbols
-- for stamps that have no default appearance
diff --git a/tex/context/base/mkiv/grph-rul.lua b/tex/context/base/mkiv/grph-rul.lua
index 2cb2729bd..71f1f868c 100644
--- a/tex/context/base/mkiv/grph-rul.lua
+++ b/tex/context/base/mkiv/grph-rul.lua
@@ -15,7 +15,6 @@ local context = context
local ruleactions = nodes.rules.ruleactions
local userrule = nodes.rules.userrule
local bpfactor = number.dimenfactors.bp
-local pdfprint = pdf.print
local current_attr = nodes.current_attr
local setfield = nodes.setfield
@@ -36,6 +35,16 @@ local floor = math.floor
local getrandom = utilities.randomizer.get
local formatters = string.formatters
+-- This is very pdf specific. Maybe move some to lpdf-rul.lua some day.
+
+local pdfprint
+
+pdfprint = function(...) pdfprint = lpdf.print return pdfprint(...) end
+
+updaters.register("backend.update",function()
+ pdfprint = lpdf.print
+end)
+
do
local simplemetapost = metapost.simple
diff --git a/tex/context/base/mkiv/l-macro-imp-optimize.lua b/tex/context/base/mkiv/l-macro-imp-optimize.lua
index e04b37eab..856cab038 100644
--- a/tex/context/base/mkiv/l-macro-imp-optimize.lua
+++ b/tex/context/base/mkiv/l-macro-imp-optimize.lua
@@ -46,17 +46,17 @@ if LUAVERSION >= 5.3 and lua.macros then
-- #define rshift(a,b) ((a >> b) & 0xFFFFFFFF)
-- ]]
- lua.macros.resolvestring [[
- #define band(a,b) (a&b)
- #define bnot(a) (~a&0xFFFFFFFF)
- #define bor(a,b) ((a|b)&0xFFFFFFFF)
- #define btest(a,b) ((a&b)~=0)
- #define bxor(a,b) ((a~b)&0xFFFFFFFF)
- #define rshift(a,b) ((a&b)~=0)
- #define extract(a,b,c) ((a>>b)&~(-1<<c))
- #define extract(a,b) ((a>>b)&0x1))
- #define lshift(a,b) ((a<<b)&0xFFFFFFFF)
- #define rshift(a,b) ((a>>b)&0xFFFFFFFF)
- ]]
+lua.macros.resolvestring [[
+#define band(a,b) (a&b)
+#define bnot(a) (~a&0xFFFFFFFF)
+#define bor(a,b) ((a|b)&0xFFFFFFFF)
+#define btest(a,b) ((a&b)~=0)
+#define bxor(a,b) ((a~b)&0xFFFFFFFF)
+#define rshift(a,b) ((a&b)~=0)
+#define extract(a,b,c) ((a>>b)&~(-1<<c))
+#define extract(a,b) ((a>>b)&0x1)
+#define lshift(a,b) ((a<<b)&0xFFFFFFFF)
+#define rshift(a,b) ((a>>b)&0xFFFFFFFF)
+]]
end
diff --git a/tex/context/base/mkiv/l-macro.lua b/tex/context/base/mkiv/l-macro.lua
index cbd234fce..a3a5bf4d9 100644
--- a/tex/context/base/mkiv/l-macro.lua
+++ b/tex/context/base/mkiv/l-macro.lua
@@ -21,7 +21,7 @@ local newline = S("\n\r")^1
local continue = P("\\") * newline
local spaces = S(" \t") + continue
local name = R("az","AZ","__","09")^1
-local body = ((1+continue/"")-newline)^1
+local body = ((continue/"" + 1) - newline)^1
local lparent = P("(")
local rparent = P(")")
local noparent = 1 - (lparent + rparent)
@@ -85,7 +85,7 @@ subparser = Cs((resolve + P(1))^1)
local enddefine = P("#enddefine") / ""
-local beginregister = (C(name) * spaces^0 * (arguments + Cc(false)) * C((1-enddefine)^1) * enddefine) / function(k,a,v)
+local beginregister = (C(name) * (arguments + Cc(false)) * C((1-enddefine)^1) * enddefine) / function(k,a,v)
local n = 0
if a then
n = #a
@@ -103,14 +103,14 @@ local beginregister = (C(name) * spaces^0 * (arguments + Cc(false)) * C((1-endde
end
local d = definitions[k]
if not d then
- d = { [0] = false, false, false, false, false, false, false, false, false }
+ d = { a = a, [0] = false, false, false, false, false, false, false, false, false }
definitions[k] = d
end
d[n] = lpegmatch(subparser,v) or v
return ""
end
-local register = (C(name) * spaces^0 * (arguments + Cc(false)) * spaces^0 * C(body)) / function(k,a,v)
+local register = (Cs(name) * (arguments + Cc(false)) * spaces^0 * Cs(body)) / function(k,a,v)
local n = 0
if a then
n = #a
@@ -128,7 +128,7 @@ local register = (C(name) * spaces^0 * (arguments + Cc(false)) * spaces^0 * C(bo
end
local d = definitions[k]
if not d then
- d = { [0] = false, false, false, false, false, false, false, false, false }
+ d = { a = a, [0] = false, false, false, false, false, false, false, false, false }
definitions[k] = d
end
d[n] = lpegmatch(subparser,v) or v
@@ -162,6 +162,25 @@ function macros.reset()
patterns = { }
end
+function macros.showdefinitions()
+ -- no helpers loaded but not called early
+ for name, list in table.sortedhash(definitions) do
+ local arguments = list.a
+ if arguments then
+ arguments = "(" .. concat(arguments,",") .. ")"
+ else
+ arguments = ""
+ end
+ print("macro: " .. name .. arguments)
+ for i=0,#list do
+ local l = list[i]
+ if l then
+ print(" " .. l)
+ end
+ end
+ end
+end
+
function macros.resolvestring(str)
return lpegmatch(parser,str) or str
end
diff --git a/tex/context/base/mkiv/lpdf-ano.lua b/tex/context/base/mkiv/lpdf-ano.lua
index 0cadb9d61..3d7479d6a 100644
--- a/tex/context/base/mkiv/lpdf-ano.lua
+++ b/tex/context/base/mkiv/lpdf-ano.lua
@@ -48,10 +48,6 @@ local nodeinjections = backends.pdf.nodeinjections
local codeinjections = backends.pdf.codeinjections
local registrations = backends.pdf.registrations
-local getpos = codeinjections.getpos
-local gethpos = codeinjections.gethpos
-local getvpos = codeinjections.getvpos
-
local javascriptcode = interactions.javascripts.code
local references = structures.references
@@ -74,6 +70,18 @@ local new_latelua = nodepool.latelua
local texgetcount = tex.getcount
+-- can change:
+
+local getpos = lpdf.getpos
+local gethpos = lpdf.gethpos
+local getvpos = lpdf.getvpos
+
+updaters.register("backend.update",function()
+ getpos = lpdf.getpos
+ gethpos = lpdf.gethpos
+ getvpos = lpdf.getvpos
+end)
+
local pdfdictionary = lpdf.dictionary
local pdfarray = lpdf.array
local pdfreference = lpdf.reference
diff --git a/tex/context/base/mkiv/lpdf-epa.lua b/tex/context/base/mkiv/lpdf-epa.lua
index 0792db646..1d0b9e8b2 100644
--- a/tex/context/base/mkiv/lpdf-epa.lua
+++ b/tex/context/base/mkiv/lpdf-epa.lua
@@ -28,6 +28,11 @@ local report_comment = logs.reporter("backend","comment")
local report_field = logs.reporter("backend","field")
local report_outline = logs.reporter("backend","outline")
+local lpdf = lpdf
+local epdf = epdf
+local backends = backends
+local context = context
+
local nodeinjections = backends.pdf.nodeinjections
local pdfarray = lpdf.array
@@ -45,15 +50,8 @@ local pdfcopyinteger = lpdf.copyinteger
local pdfcopystring = lpdf.copystring
local pdfcopyconstant = lpdf.copyconstant
-local pdfgetpos = lpdf.getpos
-
local hpack_node = nodes.hpack
-local epdf = epdf
-local backends = backends
-local lpdf = lpdf
-local context = context
-
local loadpdffile = lpdf.epdf.load
local nameonly = file.nameonly
@@ -74,6 +72,14 @@ local layerspec = { -- predefining saves time
"epdfcontent"
}
+-- can change:
+
+local pdfgetpos = lpdf.getpos
+
+updaters.register("backend.update",function()
+ pdfgetpos = lpdf.getpos
+end)
+
local collected = allocate()
local tobesaved = allocate()
@@ -313,7 +319,7 @@ function codeinjections.mergereferences(specification)
end
end
-- moved outside previous test
- context.setgvalue("figurereference",reference) -- global
+ context.setgvalue("figurereference",reference) -- global, todo: setmacro
if trace_links then
report_link("setting figure reference to %a",reference)
end
@@ -493,6 +499,8 @@ local validstamps = {
ForPublicRelease = true,
}
+-- todo: we can use runtoks instead of steps
+
local function validStamp(v)
local name = "Stamped" -- fallback
if v then
diff --git a/tex/context/base/mkiv/lpdf-ini.lua b/tex/context/base/mkiv/lpdf-ini.lua
index 6392125ca..79ed3470c 100644
--- a/tex/context/base/mkiv/lpdf-ini.lua
+++ b/tex/context/base/mkiv/lpdf-ini.lua
@@ -85,6 +85,7 @@ local pdfgethpos = pdf.gethpos
local pdfgetvpos = pdf.getvpos
local pdfgetmatrix = pdf.getmatrix
local pdfhasmatrix = pdf.hasmatrix
+local pdfprint = pdf.print
local pdfreserveobject = pdf.reserveobj
local pdfimmediateobject = pdf.immediateobj
@@ -185,11 +186,36 @@ end
local codeinjections = pdfbackend.codeinjections
local nodeinjections = pdfbackend.nodeinjections
-codeinjections.getpos = pdfgetpos lpdf.getpos = pdfgetpos
-codeinjections.gethpos = pdfgethpos lpdf.gethpos = pdfgethpos
-codeinjections.getvpos = pdfgetvpos lpdf.getvpos = pdfgetvpos
-codeinjections.hasmatrix = pdfhasmatrix lpdf.hasmatrix = pdfhasmatrix
-codeinjections.getmatrix = pdfgetmatrix lpdf.getmatrix = pdfgetmatrix
+-- can change:
+
+pdfbackend.codeinjections.getpos = pdfgetpos
+pdfbackend.codeinjections.gethpos = pdfgethpos
+pdfbackend.codeinjections.getvpos = pdfgetvpos
+
+lpdf.getpos = pdfgetpos
+lpdf.gethpos = pdfgethpos
+lpdf.getvpos = pdfgetvpos
+lpdf.print = pdfprint
+
+updaters.register("backend.update.pdf",function()
+
+ pdfgetpos = pdf.getpos
+ pdfgethpos = pdf.gethpos
+ pdfgetvpos = pdf.getvpos
+ pdfhasmatrix = pdf.hasmatrix
+ pdfgetmatrix = pdf.getmatrix
+ pdfprint = pdf.print
+
+ pdfbackend.codeinjections.getpos = pdfgetpos
+ pdfbackend.codeinjections.gethpos = pdfgethpos
+ pdfbackend.codeinjections.getvpos = pdfgetvpos
+
+ lpdf.getpos = pdfgetpos
+ lpdf.gethpos = pdfgethpos
+ lpdf.getvpos = pdfgetvpos
+ lpdf.print = pdfprint
+
+end)
-- local function transform(llx,lly,urx,ury,rx,sx,sy,ry)
-- local x1 = llx * rx + lly * sy
@@ -206,17 +232,17 @@ codeinjections.getmatrix = pdfgetmatrix lpdf.getmatrix = pdfgetmatrix
-- ury = max(y1,y2,y3,y4);
-- return llx, lly, urx, ury
-- end
-
-function lpdf.transform(llx,lly,urx,ury) -- not yet used so unchecked
- if pdfhasmatrix() then
- local sx, rx, ry, sy = pdfgetmatrix()
- local w, h = urx - llx, ury - lly
- return llx, lly, llx + sy*w - ry*h, lly + sx*h - rx*w
- -- return transform(llx,lly,urx,ury,sx,rx,ry,sy)
- else
- return llx, lly, urx, ury
- end
-end
+--
+-- function lpdf.transform(llx,lly,urx,ury) -- not yet used so unchecked
+-- if pdfhasmatrix() then
+-- local sx, rx, ry, sy = pdfgetmatrix()
+-- local w, h = urx - llx, ury - lly
+-- return llx, lly, llx + sy*w - ry*h, lly + sx*h - rx*w
+-- -- return transform(llx,lly,urx,ury,sx,rx,ry,sy)
+-- else
+-- return llx, lly, urx, ury
+-- end
+-- end
-- funny values for tx and ty
@@ -266,106 +292,102 @@ end
-- end
-- end
-local cache = table.setmetatableindex(function(t,k) -- can be made weak
- local v = utfbyte(k)
- if v < 0x10000 then
- v = format("%04x",v)
- else
- v = format("%04x%04x",rshift(v,10),v%1024+0xDC00)
- end
- t[k] = v
- return v
-end)
+local tosixteen, fromsixteen, topdfdoc, frompdfdoc, toeight, fromeight
-local escaped = Cs(Cc("(") * (S("\\()\n\r\t\b\f")/"\\%0" + P(1))^0 * Cc(")"))
-local unified = Cs(Cc("<feff") * (lpeg.patterns.utf8character/cache)^1 * Cc(">"))
+do
-local function tosixteen(str) -- an lpeg might be faster (no table)
- if not str or str == "" then
- return "<feff>" -- not () as we want an indication that it's unicode
- else
- return lpegmatch(unified,str)
- end
-end
+ local escaped = Cs(Cc("(") * (S("\\()\n\r\t\b\f")/"\\%0" + P(1))^0 * Cc(")"))
-local more = 0
-
-local pattern = C(4) / function(s) -- needs checking !
- local now = tonumber(s,16)
- if more > 0 then
- now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000 -- the 0x10000 smells wrong
- more = 0
- return utfchar(now)
- elseif now >= 0xD800 and now <= 0xDBFF then
- more = now
- return "" -- else the c's end up in the stream
- else
- return utfchar(now)
- end
-end
+ local cache = table.setmetatableindex(function(t,k) -- can be made weak
+ local v = utfbyte(k)
+ if v < 0x10000 then
+ v = format("%04x",v)
+ else
+ v = format("%04x%04x",rshift(v,10),v%1024+0xDC00)
+ end
+ t[k] = v
+ return v
+ end)
-local pattern = P(true) / function() more = 0 end * Cs(pattern^0)
+ local unified = Cs(Cc("<feff") * (lpeg.patterns.utf8character/cache)^1 * Cc(">"))
-local function fromsixteen(str)
- if not str or str == "" then
- return ""
- else
- return lpegmatch(pattern,str)
+ tosixteen = function(str) -- an lpeg might be faster (no table)
+ if not str or str == "" then
+ return "<feff>" -- not () as we want an indication that it's unicode
+ else
+ return lpegmatch(unified,str)
+ end
end
-end
-local toregime = regimes.toregime
-local fromregime = regimes.fromregime
+ local more = 0
-local function topdfdoc(str,default)
- if not str or str == "" then
- return ""
- else
- return lpegmatch(escaped,toregime("pdfdoc",str,default)) -- could be combined if needed
+ local pattern = C(4) / function(s) -- needs checking !
+ local now = tonumber(s,16)
+ if more > 0 then
+ now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000 -- the 0x10000 smells wrong
+ more = 0
+ return utfchar(now)
+ elseif now >= 0xD800 and now <= 0xDBFF then
+ more = now
+ return "" -- else the c's end up in the stream
+ else
+ return utfchar(now)
+ end
end
-end
-local function frompdfdoc(str)
- if not str or str == "" then
- return ""
- else
- return fromregime("pdfdoc",str)
+ local pattern = P(true) / function() more = 0 end * Cs(pattern^0)
+
+ fromsixteen = function(str)
+ if not str or str == "" then
+ return ""
+ else
+ return lpegmatch(pattern,str)
+ end
end
-end
-if not toregime then topdfdoc = function(s) return s end end
-if not fromregime then frompdfdoc = function(s) return s end end
+ local toregime = regimes.toregime
+ local fromregime = regimes.fromregime
-local function toeight(str)
- if not str or str == "" then
- return "()"
- else
- return lpegmatch(escaped,str)
+ topdfdoc = function(str,default)
+ if not str or str == "" then
+ return ""
+ else
+ return lpegmatch(escaped,toregime("pdfdoc",str,default)) -- could be combined if needed
+ end
end
-end
-local b_pattern = Cs((P("\\")/"" * (
- S("()")
- + S("nrtbf") / { n = "\n", r = "\r", t = "\t", b = "\b", f = "\f" }
- + lpegpatterns.octdigit^-3 / function(s) return char(tonumber(s,8)) end)
-+ P(1))^0)
+ frompdfdoc = function(str)
+ if not str or str == "" then
+ return ""
+ else
+ return fromregime("pdfdoc",str)
+ end
+ end
-local function fromeight(str)
- if not str or str == "" then
- return ""
- else
- return lpegmatch(unescape,str)
+ if not toregime then topdfdoc = function(s) return s end end
+ if not fromregime then frompdfdoc = function(s) return s end end
+
+ toeight = function(str)
+ if not str or str == "" then
+ return "()"
+ else
+ return lpegmatch(escaped,str)
+ end
end
-end
-lpdf.tosixteen = tosixteen
-lpdf.toeight = toeight
-lpdf.topdfdoc = topdfdoc
-lpdf.fromsixteen = fromsixteen
-lpdf.fromeight = fromeight
-lpdf.frompdfdoc = frompdfdoc
+ local b_pattern = Cs((P("\\")/"" * (
+ S("()")
+ + S("nrtbf") / { n = "\n", r = "\r", t = "\t", b = "\b", f = "\f" }
+ + lpegpatterns.octdigit^-3 / function(s) return char(tonumber(s,8)) end)
+ + P(1))^0)
-do
+ fromeight = function(str)
+ if not str or str == "" then
+ return ""
+ else
+ return lpegmatch(unescape,str)
+ end
+ end
local u_pattern = lpegpatterns.utfbom_16_be * lpegpatterns.utf16_to_utf8_be -- official
+ lpegpatterns.utfbom_16_le * lpegpatterns.utf16_to_utf8_le -- we've seen these
@@ -416,6 +438,13 @@ do
return lpegmatch(b_pattern,s)
end
+ lpdf.tosixteen = tosixteen
+ lpdf.toeight = toeight
+ lpdf.topdfdoc = topdfdoc
+ lpdf.fromsixteen = fromsixteen
+ lpdf.fromeight = fromeight
+ lpdf.frompdfdoc = frompdfdoc
+
end
local function merge_t(a,b)
@@ -425,109 +454,117 @@ local function merge_t(a,b)
return setmetatable(t,getmetatable(a))
end
-local f_key_null = formatters["/%s null"]
-local f_key_value = formatters["/%s %s"]
-local f_key_dictionary = formatters["/%s << % t >>"]
-local f_dictionary = formatters["<< % t >>"]
-local f_key_array = formatters["/%s [ % t ]"]
-local f_array = formatters["[ % t ]"]
-local f_key_number = formatters["/%s %N"]
-local f_tonumber = formatters["%N"]
-
local tostring_a, tostring_d
-tostring_d = function(t,contentonly,key)
- if next(t) then
- local r, n = { }, 0
- for k in next, t do
- n = n + 1
- r[n] = k
- end
- sort(r)
- for i=1,n do
- local k = r[i]
- local v = t[k]
- local tv = type(v)
- if tv == "string" then
- r[i] = f_key_value(k,toeight(v))
- elseif tv == "number" then
- r[i] = f_key_number(k,v)
- elseif tv == "table" then
- local mv = getmetatable(v)
- if mv and mv.__lpdftype then
- -- if v == t then
- -- report_objects("ignoring circular reference in dirctionary")
- -- r[i] = f_key_null(k)
- -- else
- r[i] = f_key_value(k,tostring(v))
- -- end
- elseif v[1] then
- r[i] = f_key_value(k,tostring_a(v))
+do
+
+ local f_key_null = formatters["/%s null"]
+ local f_key_value = formatters["/%s %s"]
+ local f_key_dictionary = formatters["/%s << % t >>"]
+ local f_dictionary = formatters["<< % t >>"]
+ local f_key_array = formatters["/%s [ % t ]"]
+ local f_array = formatters["[ % t ]"]
+ local f_key_number = formatters["/%s %N"]
+ local f_tonumber = formatters["%N"]
+
+ tostring_d = function(t,contentonly,key)
+ if next(t) then
+ local r, n = { }, 0
+ for k in next, t do
+ n = n + 1
+ r[n] = k
+ end
+ sort(r)
+ for i=1,n do
+ local k = r[i]
+ local v = t[k]
+ local tv = type(v)
+ -- mostly tables
+ if tv == "table" then
+ local mv = getmetatable(v)
+ if mv and mv.__lpdftype then
+ -- if v == t then
+ -- report_objects("ignoring circular reference in dirctionary")
+ -- r[i] = f_key_null(k)
+ -- else
+ r[i] = f_key_value(k,tostring(v))
+ -- end
+ elseif v[1] then
+ r[i] = f_key_value(k,tostring_a(v))
+ else
+ r[i] = f_key_value(k,tostring_d(v))
+ end
+ elseif tv == "string" then
+ r[i] = f_key_value(k,toeight(v))
+ elseif tv == "number" then
+ r[i] = f_key_number(k,v)
else
- r[i] = f_key_value(k,tostring_d(v))
+ r[i] = f_key_value(k,tostring(v))
end
+ end
+ if contentonly then
+ return concat(r," ")
+ elseif key then
+ return f_key_dictionary(key,r)
else
- r[i] = f_key_value(k,tostring(v))
+ return f_dictionary(r)
end
- end
- if contentonly then
- return concat(r," ")
- elseif key then
- return f_key_dictionary(key,r)
+ elseif contentonly then
+ return ""
else
- return f_dictionary(r)
+ return "<< >>"
end
- elseif contentonly then
- return ""
- else
- return "<< >>"
end
-end
-tostring_a = function(t,contentonly,key)
- local tn = #t
- if tn ~= 0 then
- local r = { }
- for k=1,tn do
- local v = t[k]
- local tv = type(v)
- if tv == "string" then
- r[k] = toeight(v)
- elseif tv == "number" then
- r[k] = f_tonumber(v)
- elseif tv == "table" then
- local mv = getmetatable(v)
- local mt = mv and mv.__lpdftype
- if mt then
- -- if v == t then
- -- report_objects("ignoring circular reference in array")
- -- r[k] = "null"
- -- else
- r[k] = tostring(v)
- -- end
- elseif v[1] then
- r[k] = tostring_a(v)
+ tostring_a = function(t,contentonly,key)
+ local tn = #t
+ if tn ~= 0 then
+ local r = { }
+ for k=1,tn do
+ local v = t[k]
+ local tv = type(v)
+ -- mostly numbers and tables
+ if tv == "number" then
+ r[k] = f_tonumber(v)
+ elseif tv == "table" then
+ local mv = getmetatable(v)
+ local mt = mv and mv.__lpdftype
+ if mt then
+ -- if v == t then
+ -- report_objects("ignoring circular reference in array")
+ -- r[k] = "null"
+ -- else
+ r[k] = tostring(v)
+ -- end
+ elseif v[1] then
+ r[k] = tostring_a(v)
+ else
+ r[k] = tostring_d(v)
+ end
+ elseif tv == "string" then
+ r[k] = toeight(v)
else
- r[k] = tostring_d(v)
+ r[k] = tostring(v)
end
+ end
+ if contentonly then
+ return concat(r, " ")
+ elseif key then
+ return f_key_array(key,r)
else
- r[k] = tostring(v)
+ return f_array(r)
end
- end
- if contentonly then
- return concat(r, " ")
- elseif key then
- return f_key_array(key,r)
+ elseif contentonly then
+ return ""
else
- return f_array(r)
+ return "[ ]"
end
- elseif contentonly then
- return ""
- else
- return "[ ]"
end
+
end
+local f_tonumber = formatters["%N"]
+
local tostring_x = function(t) return concat(t," ") end
local tostring_s = function(t) return toeight(t[1]) end
local tostring_p = function(t) return topdfdoc(t[1],t[2]) end
@@ -652,8 +689,6 @@ end
for i=-1,9 do cache[i] = pdfnumber(i) end
-local cache = { } -- can be weak
-
local replacer = S("\0\t\n\r\f ()[]{}/%%#\\") / {
["\00"]="#00",
["\09"]="#09",
@@ -675,16 +710,17 @@ local replacer = S("\0\t\n\r\f ()[]{}/%%#\\") / {
local escaped = Cs(Cc("/") * replacer^0)
+local cache = table.setmetatableindex(function(t,k)
+ local v = setmetatable({ lpegmatch(escaped,k) }, mt_c)
+ t[k] = v
+ return v
+end)
+
local function pdfconstant(str,default)
if not str then
- str = default or ""
- end
- local c = cache[str]
- if not c then
- c = setmetatable({ lpegmatch(escaped,str) },mt_c)
- cache[str] = c
+ str = default or "none"
end
- return c
+ return cache[str]
end
local escaped = Cs(replacer^0)
@@ -793,6 +829,10 @@ function lpdf.pagereference(n)
end
end
+function lpdf.nofpages()
+ return structures.pages.nofpages
+end
+
function lpdf.delayedobject(data,n)
if n then
pdfdeferredobject(n,data)
@@ -917,6 +957,14 @@ local function resetpageproperties()
pagesattributes = pdfdictionary()
end
+function lpdf.getpageproperties()
+ return {
+ pageresources = pageresources,
+ pageattributes = pageattributes,
+ pagesattributes = pagesattributes,
+ }
+end
+
resetpageproperties()
local function setpageproperties()
@@ -1128,9 +1176,12 @@ do
ColorSpace = ColorSpace,
Pattern = Pattern,
Shading = Shading,
- -- ProcSet = pdfarray { pdfconstant("PDF") },
}
- return collected()
+ if options and options.serialize == false then
+ return collected
+ else
+ return collected()
+ end
else
return ""
end
diff --git a/tex/context/base/mkiv/lpdf-nod.lua b/tex/context/base/mkiv/lpdf-nod.lua
index d41aa0bee..ec71571d2 100644
--- a/tex/context/base/mkiv/lpdf-nod.lua
+++ b/tex/context/base/mkiv/lpdf-nod.lua
@@ -20,6 +20,7 @@ local nuts = nodes.nuts
local tonut = nuts.tonut
local setfield = nuts.setfield
+local setdata = nuts.setdata
local copy_node = nuts.copy
local new_node = nuts.new
@@ -42,10 +43,15 @@ local pdfsetmatrix = register(new_node(whatsit_code, whatsitcodes.pdfsetmatr
local variables = interfaces.variables
-function nodepool.pdforiginliteral(str) local t = copy_node(pdforiginliteral) setfield(t,"data",str) return t end
-function nodepool.pdfpageliteral (str) local t = copy_node(pdfpageliteral ) setfield(t,"data",str) return t end
-function nodepool.pdfdirectliteral(str) local t = copy_node(pdfdirectliteral) setfield(t,"data",str) return t end
-function nodepool.pdfrawliteral (str) local t = copy_node(pdfrawliteral ) setfield(t,"data",str) return t end
+-- function nodepool.pdforiginliteral(str) local t = copy_node(pdforiginliteral) setfield(t,"data",str) return t end
+-- function nodepool.pdfpageliteral (str) local t = copy_node(pdfpageliteral ) setfield(t,"data",str) return t end
+-- function nodepool.pdfdirectliteral(str) local t = copy_node(pdfdirectliteral) setfield(t,"data",str) return t end
+-- function nodepool.pdfrawliteral (str) local t = copy_node(pdfrawliteral ) setfield(t,"data",str) return t end
+
+function nodepool.pdforiginliteral(str) local t = copy_node(pdforiginliteral) setdata(t,str) return t end
+function nodepool.pdfpageliteral (str) local t = copy_node(pdfpageliteral ) setdata(t,str) return t end
+function nodepool.pdfdirectliteral(str) local t = copy_node(pdfdirectliteral) setdata(t,str) return t end
+function nodepool.pdfrawliteral (str) local t = copy_node(pdfrawliteral ) setdata(t,str) return t end
nodepool.pdfliteral = nodepool.pdfpageliteral -- best is to use a specific one: origin | page | direct | raw
@@ -60,7 +66,7 @@ end
function nodepool.pdfsetmatrix(rx,sx,sy,ry,tx,ty) -- todo: tx ty
local t = copy_node(pdfsetmatrix)
if type(rx) == "string" then
- setfield(t,"data",rx)
+ setdata(t,rx)
else
if not rx then
rx = 1
@@ -80,12 +86,12 @@ function nodepool.pdfsetmatrix(rx,sx,sy,ry,tx,ty) -- todo: tx ty
end
if sx == 0 and sy == 0 then
if rx == 1 and ry == 1 then
- setfield(t,"data","1 0 0 1")
+ setdata(t,"1 0 0 1")
else
- setfield(t,"data",formatters["%0.6F 0 0 %0.6F"](rx,ry))
+ setdata(t,formatters["%0.6F 0 0 %0.6F"](rx,ry))
end
else
- setfield(t,"data",formatters["%0.6F %0.6F %0.6F %0.6F"](rx,sx,sy,ry))
+ setdata(t,formatters["%0.6F %0.6F %0.6F %0.6F"](rx,sx,sy,ry))
end
end
return t
diff --git a/tex/context/base/mkiv/lpdf-pde.lua b/tex/context/base/mkiv/lpdf-pde.lua
index 790e8e7ff..cecb1447f 100644
--- a/tex/context/base/mkiv/lpdf-pde.lua
+++ b/tex/context/base/mkiv/lpdf-pde.lua
@@ -41,7 +41,7 @@ local setmetatable, rawset, rawget, type, next = setmetatable, rawset, rawget, t
local tostring, tonumber, unpack = tostring, tonumber, unpack
local char, byte, find = string.char, string.byte, string.find
local abs = math.abs
-local concat, swapped = table.concat, table.swapped
+local concat, swapped, sortedhash, sortedkeys = table.concat, table.swapped, table.sortedhash, table.sortedkeys
local utfchar = string.char
local setmetatableindex = table.setmetatableindex
@@ -874,10 +874,15 @@ if img then do
local plugins = nil
+ -- Sorting the hash slows down upto 5% bit but it is still as fast as the C
+ -- code. We could loop over the index instead but sorting might be nicer in
+ -- the end.
+
copydictionary = function (xref,copied,object)
local target = pdfdictionary()
local source = object.__raw__
- for key, value in next, source do
+ -- for key, value in next, source do
+ for key, value in sortedhash(source) do
if plugins then
local p = plugins[key]
if p then
diff --git a/tex/context/base/mkiv/luat-cbk.lua b/tex/context/base/mkiv/luat-cbk.lua
index 6fcfdc7f2..d3184e1af 100644
--- a/tex/context/base/mkiv/luat-cbk.lua
+++ b/tex/context/base/mkiv/luat-cbk.lua
@@ -121,6 +121,12 @@ if trace_calls then
end
+-- temporary, not public:
+
+callbacks.functions = { }
+
+-- till here
+
local reported = { }
local function register_usercall(what,name,func)
diff --git a/tex/context/base/mkiv/luat-run.lua b/tex/context/base/mkiv/luat-run.lua
index d09f01021..139e54338 100644
--- a/tex/context/base/mkiv/luat-run.lua
+++ b/tex/context/base/mkiv/luat-run.lua
@@ -141,6 +141,11 @@ else
callbacks.register("finish_synctex_callback", wrapup_synctex, "rename temporary synctex file")
end
+-- temp hack for testing:
+
+callbacks.functions.start_page_number = start_shipout_page
+callbacks.functions.stop_page_number = stop_shipout_page
+
-- an example:
local tempfiles = { }
diff --git a/tex/context/base/mkiv/mlib-pps.lua b/tex/context/base/mkiv/mlib-pps.lua
index 39b80e344..05c29dad3 100644
--- a/tex/context/base/mkiv/mlib-pps.lua
+++ b/tex/context/base/mkiv/mlib-pps.lua
@@ -1846,7 +1846,7 @@ local ot_reset, ot_analyze, ot_process do
local outlinetexts = { } -- also in top data
- local function ot_reset()
+ ot_reset = function ()
outlinetexts = { }
end
@@ -1874,7 +1874,7 @@ local ot_reset, ot_analyze, ot_process do
else
- local function ot_analyze(object,prescript)
+ ot_analyze = function(object,prescript)
local ot_stage = prescript.ot_stage
local ot_index = tonumber(prescript.ot_index)
if ot_index and ot_stage == "trial" and not outlinetexts[ot_index] then
diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua
index e456a0b89..d4b38bac4 100644
--- a/tex/context/base/mkiv/mult-low.lua
+++ b/tex/context/base/mkiv/mult-low.lua
@@ -232,6 +232,7 @@ return {
"next", "nexttoken",
--
"nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", "flushnextbox",
+ "boxisempty",
--
"scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance",
"scratchhsize", "scratchvsize",
diff --git a/tex/context/base/mkiv/node-dir.lua b/tex/context/base/mkiv/node-dir.lua
index 59564ac93..0494fd036 100644
--- a/tex/context/base/mkiv/node-dir.lua
+++ b/tex/context/base/mkiv/node-dir.lua
@@ -33,59 +33,83 @@ nodes.is_rotated = allocate { -- used
RTT = true, ["+RTT"] = true,
}
-nodes.textdir_is_parallel = allocate { -- used
- TLT = {
+do
+
+ local tlt = {
TLT = true, ["+TLT"] = true,
TRT = true, ["+TRT"] = true,
-- LTL = false,
-- RTT = false,
- },
- TRT= {
+ }
+
+ local trt = {
TLT = true, ["+TLT"] = true,
TRT = true, ["+TRT"] = true,
-- LTL = false,
-- RTT = false,
- },
- LTL = {
+ }
+
+ local ltl = {
-- TLT = false,
-- TRT = false,
LTL = true, ["+LTL"] = true,
RTT = true, ["+RTT"] = true,
- },
- RTT = {
+ }
+
+ local rtt = {
-- TLT = false,
-- TRT = false,
LTL = true, ["+LTL"] = true,
RTT = true, ["+RTT"] = true,
}
-}
-nodes.pardir_is_parallel = allocate {
- TLT = {
+ nodes.textdir_is_parallel = allocate { -- used
+ TLT = tlt, ["+TLT"] = tlt, -- ["-TLT"] = tlt,
+ TRT = trt, ["+TRT"] = trt, -- ["-TRT"] = trt,
+ LTL = ltl, ["+LTL"] = ltl, -- ["-LTL"] = ltl,
+ RTT = rtt, ["+RTT"] = rtt, -- ["-RTT"] = rtt,
+ }
+
+end
+
+do
+
+ local tlt = {
TLT = true, ["+TLT"] = true,
TRT = true, ["+TRT"] = true,
-- LTL = false,
-- RTT = false,
- },
- TRT = {
+ }
+
+ local trt = {
TLT = true, ["+TLT"] = true,
TRT = true, ["+TRT"] = true,
-- LTL = false,
-- RTT = false,
- },
- LTL = {
+ }
+
+ local ltl = {
-- TLT = false,
-- TRT = false,
LTL = true, ["+LTL"] = true,
RTT = true, ["+RTT"] = true,
- },
- RTT = {
+ }
+
+ local rtt = {
-- TLT = false,
-- TRT = false,
LTL = true, ["+LTL"] = true,
RTT = true, ["+RTT"] = true,
- },
-}
+ }
+
+ nodes.pardir_is_parallel = allocate {
+ TLT = tlt, ["+TLT"] = tlt, -- ["-TLT"] = tlt,
+ TRT = trt, ["+TRT"] = trt, -- ["-TRT"] = trt,
+ LTL = ltl, ["+LTL"] = ltl, -- ["-LTL"] = ltl,
+ RTT = rtt, ["+RTT"] = rtt, -- ["-RTT"] = rtt,
+ }
+
+end
nodes.pardir_is_opposite = allocate {
TLT = {
diff --git a/tex/context/base/mkiv/node-fnt.lua b/tex/context/base/mkiv/node-fnt.lua
index 59a0ba671..f606e393c 100644
--- a/tex/context/base/mkiv/node-fnt.lua
+++ b/tex/context/base/mkiv/node-fnt.lua
@@ -50,7 +50,7 @@ local getdisc = nuts.getdisc
local getnext = nuts.getnext
local getprev = nuts.getprev
local getboth = nuts.getboth
-local getfield = nuts.getfield
+local getdata = nuts.getdata
----- getdisc = nuts.getdisc
local setchar = nuts.setchar
local setlink = nuts.setlink
@@ -183,7 +183,7 @@ local function start_trace(head)
elseif id == disc_code then
report_fonts("[disc] %s",nodes.listtoutf(n,true,false,n))
elseif id == boundary_code then
- report_fonts("[boundary] %i:%i",getsubtype(n),getfield(n,"value"))
+ report_fonts("[boundary] %i:%i",getsubtype(n),getdata(n))
else
report_fonts("[%s]",nodecodes[id])
end
diff --git a/tex/context/base/mkiv/node-ltp.lua b/tex/context/base/mkiv/node-ltp.lua
index c51298b4e..4044dc105 100644
--- a/tex/context/base/mkiv/node-ltp.lua
+++ b/tex/context/base/mkiv/node-ltp.lua
@@ -214,6 +214,8 @@ local getshift = nuts.getshift
local getwidth = nuts.getwidth
local getheight = nuts.getheight
local getdepth = nuts.getdepth
+local getdata = nuts.getdata
+local getwhd = nuts.getwhd
local isglyph = nuts.isglyph
@@ -233,6 +235,7 @@ local setshift = nuts.setshift
local setwidth = nuts.setwidth
----- setheight = nuts.setheight
----- setdepth = nuts.setdepth
+local setexpansion = nuts.setexpansion
local slide_node_list = nuts.slide -- get rid of this, probably ok > 78.2
local find_tail = nuts.tail
@@ -630,7 +633,7 @@ local function find(head) -- do we really want to recurse into an hlist?
end
elseif id == boundary_code then
if getsubtype(head) == protrusion_code then
- local v = getfield(head,"value")
+ local v = getdata(head)
if v == 1 or v == 3 then
head = getnext(head)
if head then
@@ -653,19 +656,19 @@ end
local function find_protchar_left(l) -- weird function
local ln = getnext(l)
- if ln and getid(ln) == hlist_code and not getlist(ln) and getfield(ln,"width") == 0 and getfield(ln,"height") == 0 and getfield(ln,"depth") == 0 then
- l = getnext(l)
- else -- if d then -- was always true
- local id = getid(l)
- while ln and not (id == glyph_code or id < math_code) do -- is there always a glyph?
- l = ln
- ln = getnext(l)
- id = getid(ln)
- end
- end
- -- if getid(l) == glyph_code then
- -- return l
- -- end
+ if ln and getid(ln) == hlist_code and not getlist(ln) then
+ local w, h, d = getwhd(ln)
+ if w == 0 and h == 0 and d == 0 then
+ l = getnext(l)
+ return find(l) or l
+ end
+ end -- if d then -- was always true
+ local id = getid(l)
+ while ln and not (id == glyph_code or id < math_code) do -- is there always a glyph?
+ l = ln
+ ln = getnext(l)
+ id = getid(ln)
+ end
return find(l) or l
end
@@ -684,7 +687,7 @@ local function find(head,tail)
end
elseif id == boundary_code then
if getsubtype(head) == protrusion_code then
- local v = getfield(tail,"value")
+ local v = getdata(tail)
if v == 2 or v == 3 then
tail = getprev(tail)
if tail then
@@ -3130,7 +3133,7 @@ do
local stretch, shrink = kern_stretch_shrink(g,kern)
e = font_expand_ratio * stretch / 1000
end
- setfield(g,"expansion_factor",e)
+ setexpansion(g,e)
end
end
local tso = total_stretch[order]
@@ -3187,7 +3190,7 @@ do
local stretch, shrink = kern_stretch_shrink(g,kern)
e = font_expand_ratio * shrink / 1000
end
- setfield(g,"expansion_factor",e)
+ setexpansion(g,e)
end
end
local tso = total_shrink[order]
diff --git a/tex/context/base/mkiv/node-nut.lua b/tex/context/base/mkiv/node-nut.lua
index b970a46af..0397f0607 100644
--- a/tex/context/base/mkiv/node-nut.lua
+++ b/tex/context/base/mkiv/node-nut.lua
@@ -175,16 +175,119 @@ if not direct.getdirection then
end
+if not direct.getexpansion then
+
+ local getfield = direct.getfield
+ local setfield = direct.setfield
+
+ local nodecodes = nodes.nodecodes
+ local whatsitcodes = nodes.whatsitcodes
+
+ local glyph_code = nodecodes.glyph
+ local kern_code = nodecodes.kern
+
+ function direct.getexpansion(n)
+ local id = getid(n)
+ if id == glyph_code or id == kern_code then
+ return getfield(n,"expansion_factor")
+ end
+ end
+
+ function direct.setexpansion(n,e)
+ local id = getid(n)
+ if id == glyph_code or id == kern_code then
+ setfield(n,"expansion_factor",e)
+ end
+ end
+
+end
+
+if not direct.getdata then
+
+ local getid = direct.getid
+ local getsubtype = direct.getsubtype
+ local getfield = direct.getfield
+ local setfield = direct.setfield
+
+ local nodecodes = nodes.nodecodes
+ local whatsitcodes = nodes.whatsitcodes
+
+ local glyph_code = nodecodes.glyph
+ local boundary_code = nodecodes.boundary
+ local whatsit_code = nodecodes.whatsit
+
+ local user_defined_code = whatsitcodes.userdefined
+ local pdf_literal_code = whatsitcodes.pdfliteral
+ local pdf_setmatrix_code = whatsitcodes.pdfsetmatrix
+ local late_lua_code = whatsitcodes.latelua
+ local special_code = whatsitcodes.special
+ local write_code = whatsitcodes.write
+
+ function direct.getdata(n)
+ local id = getid(n)
+ if id == glyph_code then
+ return getfield(n,"data")
+ elseif id == boundary_code then
+ return getfield(n,"value")
+ elseif id == whatsit_code then
+ local subtype = getsubtype(n)
+ if subtype == user_defined_code then
+ return getfield(n,"value")
+ elseif subtype == pdf_literal_code then
+ return getfield(n,"data"), getfield(n,"mode")
+ elseif subtype == late_lua_code then
+ return getfield(n,"data")
+ elseif subtype == pdf_setmatrix_code then
+ return getfield(n,"data")
+ elseif subtype == special_code then
+ return getfield(n,"data")
+ elseif subtype == write_code then
+ return getfield(n,"data")
+ end
+ end
+ end
+
+ function direct.setdata(n,v,vv)
+ local id = getid(n)
+ if id == glyph_code then
+ return setfield(n,"data",v)
+ elseif id == boundary_code then
+ return setfield(n,"value",v)
+ elseif id == whatsit_code then
+ local subtype = getsubtype(n)
+ if subtype == user_defined_code then
+ setfield(n,"value",v)
+ elseif subtype == pdf_literal_code then
+ setfield(n,"data",v)
+ if m then
+ setfield(n,"mode",vv)
+ end
+ elseif subtype == late_lua_code then
+ setfield(n,"data",v)
+ elseif subtype == pdf_setmatrix_code then
+ setfield(n,"data",v)
+ elseif subtype == special_code then
+ setfield(n,"data",v)
+ elseif subtype == write_code then
+ setfield(n,"data",v)
+ end
+ end
+ end
+
+end
+
if not node.direct.traverse_glyph or not node.direct.traverse_list then
logs.report("system","using fake node list traversers")
- local getnext = node.direct.getnext
- local getid = node.direct.getid
- local getsubtype = node.direct.getsubtype
- local getchar = node.direct.getchar
- local getfont = node.direct.getfont
- local getlist = node.direct.getlist
+ local direct = node.direct
+
+ local getnext = direct.getnext
+ local getid = direct.getid
+ local getsubtype = direct.getsubtype
+ local getchar = direct.getchar
+ local getfont = direct.getfont
+ local getlist = direct.getlist
local function iterate(h,n)
if n then
@@ -374,6 +477,14 @@ nuts.setdisc = direct.setdisc
nuts.getdiscretionary = direct.getdisc
nuts.setdiscretionary = direct.setdisc
+nuts.getdata = direct.getdata
+nuts.setdata = direct.setdata
+nuts.getvalue = direct.getdata
+nuts.setvalue = direct.setdata
+
+nuts.getexpansion = direct.getexpansion
+nuts.setexpansion = direct.setexpansion
+
nuts.getwhd = direct.getwhd
nuts.setwhd = direct.setwhd
nuts.getwidth = direct.getwidth
diff --git a/tex/context/base/mkiv/node-ppt.lua b/tex/context/base/mkiv/node-ppt.lua
index 0124f885b..f4a3df12c 100644
--- a/tex/context/base/mkiv/node-ppt.lua
+++ b/tex/context/base/mkiv/node-ppt.lua
@@ -29,6 +29,8 @@ local getsubtype = nuts.getsubtype
local getfield = nuts.getfield
local getlist = nuts.getlist
local setlist = nuts.setlist
+local getdata = nuts.getdata
+
local removenode = nuts.remove
local nextnode = nuts.traversers.node
@@ -333,7 +335,7 @@ end)
-- last = nil
-- end
-- if getfield(source,"user_id") == property_id then
--- local slot = getfield(source,"value")
+-- local slot = getdata(source)
-- local data = cache[slot]
-- if data then
-- cache[slot] = nil
@@ -432,7 +434,7 @@ if LUATEXVERSION >= 1.090 then
last = nil
end
if getfield(source,"user_id") == property_id then
- local slot = getfield(source,"value")
+ local slot = getdata(source)
local data = cache[slot]
if data then
cache[slot] = nil
diff --git a/tex/context/base/mkiv/node-res.lua b/tex/context/base/mkiv/node-res.lua
index 723562027..39d47f647 100644
--- a/tex/context/base/mkiv/node-res.lua
+++ b/tex/context/base/mkiv/node-res.lua
@@ -90,6 +90,9 @@ local setwidth = nuts.setwidth
local setsubtype = nuts.setsubtype
local setleader = nuts.setleader
+local setdata = nuts.setdata
+local setvalue = nuts.setvalue
+
local copy_nut = nuts.copy
local new_nut = nuts.new
local flush_nut = nuts.flush
@@ -236,7 +239,8 @@ end
function nutpool.boundary(v)
local n = copy_nut(boundary)
if v and v ~= 0 then
- setfield(n,"value",v)
+ -- setfield(n,"value",v)
+ setvalue(n,v)
end
return n
end
@@ -244,7 +248,8 @@ end
function nutpool.wordboundary(v)
local n = copy_nut(wordboundary)
if v and v ~= 0 then
- setfield(n,"value",v)
+ -- setfield(n,"value",v)
+ setvalue(n,v)
end
return n
end
@@ -523,9 +528,11 @@ function nutpool.usernumber(id,num)
local n = copy_nut(user_number)
if num then
setfield(n,"user_id",id)
- setfield(n,"value",num)
+ -- setfield(n,"value",num)
+ setvalue(n,num)
elseif id then
- setfield(n,"value",id)
+ -- setfield(n,"value",id)
+ setvalue(n,id)
end
return n
end
@@ -534,9 +541,11 @@ function nutpool.userlist(id,list)
local n = copy_nut(user_nodes)
if list then
setfield(n,"user_id",id)
- setfield(n,"value",list)
+ -- setfield(n,"value",list)
+ setvalue(n,list)
else
- setfield(n,"value",id)
+ -- setfield(n,"value",id)
+ setvalue(n,id)
end
return n
end
@@ -545,9 +554,11 @@ function nutpool.userstring(id,str)
local n = copy_nut(user_string)
if str then
setfield(n,"user_id",id)
- setfield(n,"value",str)
+ -- setfield(n,"value",str)
+ setvalue(n,str)
else
- setfield(n,"value",id)
+ -- setfield(n,"value",id)
+ setvalue(n,id)
end
return n
end
@@ -556,9 +567,11 @@ function nutpool.usertokens(id,tokens)
local n = copy_nut(user_tokens)
if tokens then
setfield(n,"user_id",id)
- setfield(n,"value",tokens)
+ -- setfield(n,"value",tokens)
+ setvalue(n,tokens)
else
- setfield(n,"value",id)
+ -- setfield(n,"value",id)
+ setvalue(n,id)
end
return n
end
@@ -567,9 +580,11 @@ function nutpool.userlua(id,code)
local n = copy_nut(user_lua)
if code then
setfield(n,"user_id",id)
- setfield(n,"value",code)
+ -- setfield(n,"value",code)
+ setvalue(n,code)
else
- setfield(n,"value",id)
+ -- setfield(n,"value",id)
+ setvalue(n,id)
end
return n
end
@@ -578,16 +593,19 @@ function nutpool.userattributes(id,attr)
local n = copy_nut(user_attributes)
if attr then
setfield(n,"user_id",id)
- setfield(n,"value",attr)
+ -- setfield(n,"value",attr)
+ setvalue(n,attr)
else
- setfield(n,"value",id)
+ -- setfield(n,"value",id)
+ setvalue(n,id)
end
return n
end
function nutpool.special(str)
local n = copy_nut(special)
- setfield(n,"data",str)
+ -- setfield(n,"data",str)
+ setdata(n,str)
return n
end
diff --git a/tex/context/base/mkiv/node-rul.lua b/tex/context/base/mkiv/node-rul.lua
index e8259df44..bb63e6668 100644
--- a/tex/context/base/mkiv/node-rul.lua
+++ b/tex/context/base/mkiv/node-rul.lua
@@ -204,18 +204,18 @@ local subtypeactions = {
[rulecodes.radical] = mathradical,
}
-callbacks.register(
- "process_rule",
- function(n,h,v)
- local n = tonut(n)
- local s = getsubtype(n)
- local a = subtypeactions[s]
- if a then
- a(n,h,v)
- end
- end,
- "handle additional user rule features"
-)
+local function process_rule(n,h,v)
+ local n = tonut(n)
+ local s = getsubtype(n)
+ local a = subtypeactions[s]
+ if a then
+ a(n,h,v)
+ end
+end
+
+callbacks.register("process_rule",process_rule,"handle additional user rule features")
+
+callbacks.functions.process_rule = process_rule
--
@@ -899,7 +899,7 @@ interfaces.implement {
setfield(n,"left",l)
end
if r then
- etfield(n,"right",r)
+ setfield(n,"right",r)
end
end
context(tonode(n))
diff --git a/tex/context/base/mkiv/node-ser.lua b/tex/context/base/mkiv/node-ser.lua
index 7ed2b8d00..056b52e8d 100644
--- a/tex/context/base/mkiv/node-ser.lua
+++ b/tex/context/base/mkiv/node-ser.lua
@@ -87,7 +87,7 @@ local ignore = allocate ( tohash {
local dimension = allocate ( tohash {
"width", "height", "depth", "shift",
"stretch", "shrink",
- "xoffset", "yoffset", "xadvance",
+ "xoffset", "yoffset",
"surround",
"kern",
"box_left_width", "box_right_width"
diff --git a/tex/context/base/mkiv/node-syn.lua b/tex/context/base/mkiv/node-syn.lua
index 153ab7eb2..0d4b1b45d 100644
--- a/tex/context/base/mkiv/node-syn.lua
+++ b/tex/context/base/mkiv/node-syn.lua
@@ -179,10 +179,11 @@ local force_synctex_line = tex.force_synctex_line
local get_synctex_line = tex.get_synctex_line
local set_synctex_mode = tex.set_synctex_mode
-local getpos = function()
- getpos = backends.codeinjections.getpos
- return getpos()
- end
+local getpos = function() getpos = backends.codeinjections.getpos return getpos() end
+
+updaters.register("backend.update",function()
+ getpos = backends.codeinjections.getpos
+end)
local foundintree = resolvers.foundintree
diff --git a/tex/context/base/mkiv/pack-lyr.mkiv b/tex/context/base/mkiv/pack-lyr.mkiv
index 8661fe57a..99a0dfb2a 100644
--- a/tex/context/base/mkiv/pack-lyr.mkiv
+++ b/tex/context/base/mkiv/pack-lyr.mkiv
@@ -540,24 +540,85 @@
% todo: pass the layer with \lastnamedcs
+% \def\pack_layers_flush_single
+% {\startoverlay
+% {\ifcsname\??layerbox \currentlayer \endcsname\pack_layers_flush_indeed\plusone \currentlayer \fi}%
+% {\ifcsname\??layerbox \currentlayer:\the\realpageno\endcsname\pack_layers_flush_indeed\zerocount{\currentlayer:\the\realpageno}\fi}%
+% \stopoverlay}
+%
+% \def\pack_layers_flush_double#1%
+% {\startoverlay
+% {\ifcsname\??layerbox \currentlayer \endcsname\pack_layers_flush_indeed\plusone \currentlayer \fi}%
+% {\ifcsname\??layerbox \currentlayer:\the\realpageno\endcsname\pack_layers_flush_indeed\zerocount {\currentlayer:\the\realpageno}\fi}%
+% {\ifcsname\??layerbox#1\currentlayer \endcsname\pack_layers_flush_indeed\plusone {#1\currentlayer }\fi}%
+% {\ifcsname\??layerbox#1\currentlayer:\the\realpageno\endcsname\pack_layers_flush_indeed\zerocount{#1\currentlayer:\the\realpageno}\fi}%
+% \stopoverlay}
+
+% optimized:
+
\def\pack_layers_flush_single
- {\startoverlay
- {\ifcsname\??layerbox \currentlayer \endcsname\pack_layers_flush_indeed\plusone \currentlayer \fi}%
- {\ifcsname\??layerbox \currentlayer:\the\realpageno\endcsname\pack_layers_flush_indeed\zerocount{\currentlayer:\the\realpageno}\fi}%
- \stopoverlay}
+ {\ifcsname\??layerbox\currentlayer\endcsname
+ \ifvoid\lastnamedcs
+ \ifcsname\??layerbox\currentlayer:\the\realpageno\endcsname
+ \ifvoid\lastnamedcs\else
+ \chardef\b_layer_two\lastnamedcs
+ \pack_layers_flush_indeed\zerocount{\currentlayer:\the\realpageno}\b_layer_two
+ \fi
+ \fi
+ \else
+ \chardef\b_layer_one\lastnamedcs
+ \ifcsname\??layerbox\currentlayer:\the\realpageno\endcsname
+ \ifvoid\lastnamedcs\else
+ \chardef\b_layer_two\lastnamedcs
+ \startoverlay
+ {\pack_layers_flush_indeed\plusone \currentlayer \b_layer_one}%
+ {\pack_layers_flush_indeed\zerocount{\currentlayer:\the\realpageno}\b_layer_two}%
+ \stopoverlay
+ \fi
+ \else
+ \pack_layers_flush_indeed\plusone\currentlayer\b_layer_one
+ \fi
+ \fi
+ \else\ifcsname\??layerbox\currentlayer:\the\realpageno\endcsname
+ \ifvoid\lastnamedcs
+ % nothing
+ \else
+ \chardef\b_layer_two\lastnamedcs
+ \pack_layers_flush_indeed\zerocount{\currentlayer:\the\realpageno}\b_layer_two
+ \fi
+ \fi\fi}
+
+% less optimized:
\def\pack_layers_flush_double#1%
{\startoverlay
- {\ifcsname\??layerbox \currentlayer \endcsname\pack_layers_flush_indeed\plusone \currentlayer \fi}%
- {\ifcsname\??layerbox \currentlayer:\the\realpageno\endcsname\pack_layers_flush_indeed\zerocount {\currentlayer:\the\realpageno}\fi}%
- {\ifcsname\??layerbox#1\currentlayer \endcsname\pack_layers_flush_indeed\plusone {#1\currentlayer }\fi}%
- {\ifcsname\??layerbox#1\currentlayer:\the\realpageno\endcsname\pack_layers_flush_indeed\zerocount{#1\currentlayer:\the\realpageno}\fi}%
+ {\ifcsname\??layerbox\currentlayer\endcsname
+ \ifvoid\lastnamedcss\else \chardef\b_layer_two\lastnamedcs
+ \pack_layers_flush_indeed\plusone\currentlayer\b_layer_two
+ \fi
+ \fi}%
+ {\ifcsname\??layerbox\currentlayer:\the\realpageno\endcsname
+ \ifvoid\lastnamedcss\else \chardef\b_layer_two\lastnamedcs
+ \pack_layers_flush_indeed\zerocount{\currentlayer:\the\realpageno}\b_layer_two
+ \fi
+ \fi}%
+ {\ifcsname\??layerbox#1\currentlayer\endcsname
+ \ifvoid\lastnamedcss\else \chardef\b_layer_two\lastnamedcs
+ \pack_layers_flush_indeed\plusone{#1\currentlayer}\b_layer_two
+ \fi
+ \fi}%
+ {\ifcsname\??layerbox#1\currentlayer:\the\realpageno\endcsname
+ \ifvoid\lastnamedcss\else \chardef\b_layer_two\lastnamedcs
+ \pack_layers_flush_indeed\zerocount{#1\currentlayer:\the\realpageno}\b_layer_two
+ \fi
+ \fi}%
\stopoverlay}
\let\pack_layers_top_fill \relax
\let\pack_layers_bottom_fill\vss
-\def\pack_layers_flush_indeed#1#2% quite core, so optimized
+%def\pack_layers_flush_indeed#1#2%
+\def\pack_layers_flush_indeed#1#2#3%
{\begingroup % already grouped
\offinterlineskip
\edef\p_pack_layers_preset{\layerparameter\c!preset}%
@@ -587,7 +648,8 @@
\fi\fi
\fi
\fi
- \chardef\b_layers\csname\??layerbox#2\endcsname % trick
+ %chardef\b_layers\csname\??layerbox#2\endcsname % trick
+ \let\b_layers#3%
% we need to copy in order to retain the negative offsets for a next
% stage of additions, i.e. llx/lly accumulate in repeat mode and the
% compensation may differ each flush depending on added content
diff --git a/tex/context/base/mkiv/page-imp.mkiv b/tex/context/base/mkiv/page-imp.mkiv
index b80a3b266..359c120b0 100644
--- a/tex/context/base/mkiv/page-imp.mkiv
+++ b/tex/context/base/mkiv/page-imp.mkiv
@@ -164,6 +164,8 @@
\newdimen\d_page_shipouts_offset \d_page_shipouts_offset=-1in
+\def\page_shipout_box#1{\normalshipout\box#1\relax} % takes a number
+
\def\page_shipouts_normal#1%
{\global\advance\shippedoutpages\plusone
% this is not resource safe!
@@ -186,7 +188,7 @@
\ifcase\shipoutfinalizemethod
\finalizeshipoutbox\shipoutscratchbox
\fi
- \normalshipout\vpack
+ \setbox\shipoutscratchbox\vpack
{\offinterlineskip
\vskip\d_page_shipouts_offset
\hskip\d_page_shipouts_offset
@@ -194,6 +196,7 @@
{\page_otr_flush_every_stuff
\page_otr_flush_special_content
\box\shipoutscratchbox}}%
+ \page_shipout_box\shipoutscratchbox % takes a box number!
\else
\page_shipouts_ignore{#1}%
\fi}
diff --git a/tex/context/base/mkiv/page-pcl.mkiv b/tex/context/base/mkiv/page-pcl.mkiv
index 53d9f781d..5b7d0ae8a 100644
--- a/tex/context/base/mkiv/page-pcl.mkiv
+++ b/tex/context/base/mkiv/page-pcl.mkiv
@@ -769,7 +769,7 @@
\useblankparameter \pagecolumnsparameter
% \useprofileparameter\pagecolumnsparameter
%
- \usemixedcolumnscolorparameter\c!color
+ \usepagecolumnscolorparameter\c!color
%
\setupnotes[\c!width=\textwidth]%
%
diff --git a/tex/context/base/mkiv/publ-aut.lua b/tex/context/base/mkiv/publ-aut.lua
index 9ff078119..fd98c5e38 100644
--- a/tex/context/base/mkiv/publ-aut.lua
+++ b/tex/context/base/mkiv/publ-aut.lua
@@ -64,8 +64,8 @@ local v_last = interfaces.variables.last
local space = lpegpatterns.whitespace
local comma = P(",")
-local period = P(".")
-local dash = P("-")
+local period = P(".") + P("{.}")
+local dash = P("-") + P("{-}")
local firstcharacter = lpegpatterns.utf8byte
local utf8character = lpegpatterns.utf8character
local p_and = space^1 * (P("and") + P("&&") + P("++")) * space^1
diff --git a/tex/context/base/mkiv/publ-dat.lua b/tex/context/base/mkiv/publ-dat.lua
index 79b593345..6754382ff 100644
--- a/tex/context/base/mkiv/publ-dat.lua
+++ b/tex/context/base/mkiv/publ-dat.lua
@@ -34,7 +34,7 @@ local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns
local textoutf = characters and characters.tex.toutf
local settings_to_hash, settings_to_array = utilities.parsers.settings_to_hash, utilities.parsers.settings_to_array
local formatters = string.formatters
-local sortedkeys, sortedhash, keys = table.sortedkeys, table.sortedhash, table.keys
+local sortedkeys, sortedhash, keys, sort = table.sortedkeys, table.sortedhash, table.keys, table.sort
local xmlcollected, xmltext, xmlconvert = xml.collected, xml.text, xml.convert
local setmetatableindex = table.setmetatableindex
@@ -486,6 +486,8 @@ do
local tags = table.setmetatableindex("table")
+ local indirectcrossrefs = true
+
local function do_definition(category,tag,tab,dataset)
publicationsstats.nofdefinitions = publicationsstats.nofdefinitions + 1
if tag == "" then
@@ -533,20 +535,24 @@ do
value = lpegmatch(filter_2,value,1,dataset.commands) -- we need to start at 1 for { }
end
if normalized == "crossref" then
- setmetatableindex(entries,function(t,k)
- local parent = rawget(luadata,value)
- if parent == entries then
- report_duplicates("bad parent %a for %a in dataset %s",value,hashtag,dataset.name)
- setmetatableindex(entries,nil)
- return entries
- elseif parent then
- setmetatableindex(entries,parent)
- return entries[k]
- else
- report_duplicates("no valid parent %a for %a in dataset %s",value,hashtag,dataset.name)
- setmetatableindex(entries,nil)
- end
- end)
+ if indirectcrossrefs then
+ setmetatableindex(entries,function(t,k)
+ local parent = rawget(luadata,value)
+ if parent == entries then
+ report_duplicates("bad parent %a for %a in dataset %s",value,hashtag,dataset.name)
+ setmetatableindex(entries,nil)
+ return entries
+ elseif parent then
+ setmetatableindex(entries,parent)
+ return entries[k]
+ else
+ report_duplicates("no valid parent %a for %a in dataset %s",value,hashtag,dataset.name)
+ setmetatableindex(entries,nil)
+ end
+ end)
+ else
+ dataset.nofcrossrefs = dataset.nofcrossrefs +1
+ end
end
entries[normalized] = value
end
@@ -695,12 +701,37 @@ do
statistics.starttiming(publications)
publicationsstats.nofbytes = publicationsstats.nofbytes + size
current.nofbytes = current.nofbytes + size
+ current.nofcrossrefs = 0
if source then
table.insert(current.sources, { filename = source, checksum = md5.HEX(content) })
current.loaded[source] = kind or true
end
- current.newtags = #current.luadata > 0 and { } or current.newtags
+ local luadata = current.luadata
+ current.newtags = #luadata > 0 and { } or current.newtags
lpegmatch(bibtotable,content or "",1,current)
+ if current.nofcrossrefs > 0 then
+ for tag, entries in next, luadata do
+ local value = entries.crossref
+ if value then
+ local parent = luadata[value]
+ if parent == entries then
+ report_duplicates("bad parent %a for %a in dataset %s",value,hashtag,dataset.name)
+ elseif parent then
+ local t = { }
+ for k, v in next, parent do
+ if not entries[k] then
+ entries[k] = v
+ t[#t+1] = k
+ end
+ end
+ sort(t)
+ entries.inherited = concat(t,",")
+ else
+ report_duplicates("no valid parent %a for %a in dataset %s",value,hashtag,dataset.name)
+ end
+ end
+ end
+ end
statistics.stoptiming(publications)
end
diff --git a/tex/context/base/mkiv/scrp-eth.lua b/tex/context/base/mkiv/scrp-eth.lua
index cd2280c31..f6a994b88 100644
--- a/tex/context/base/mkiv/scrp-eth.lua
+++ b/tex/context/base/mkiv/scrp-eth.lua
@@ -12,7 +12,7 @@ if not modules then modules = { } end modules ['scrp-eth'] = {
local nuts = nodes.nuts
local getnext = nuts.getnext
-local getchar = nuts.getchar
+local ischar = nuts.ischar
local getattr = nuts.getattr
local nodecodes = nodes.nodecodes
diff --git a/tex/context/base/mkiv/scrp-ini.lua b/tex/context/base/mkiv/scrp-ini.lua
index d1ba30cab..aa16198d5 100644
--- a/tex/context/base/mkiv/scrp-ini.lua
+++ b/tex/context/base/mkiv/scrp-ini.lua
@@ -1062,12 +1062,14 @@ do
end,
nobreakspace_before = function(head,current)
- head, current = insert_node_before(head,current,new_penalty(10000))
- return insert_node_before(head,current,space_glue(current))
+ local g, p = space_glue(current), new_penalty(10000)
+ head, current = insert_node_before(head,current,p)
+ return insert_node_before(head,current,g)
end,
nobreakspace_after = function(head,current)
- head, current = insert_node_after(head,current,space_glue(current))
- return insert_node_after(head,current,new_penalty(10000))
+ local g, p = space_glue(current), new_penalty(10000)
+ head, current = insert_node_after(head,current,g)
+ return insert_node_after(head,current,p)
end,
}
diff --git a/tex/context/base/mkiv/spac-ver.mkiv b/tex/context/base/mkiv/spac-ver.mkiv
index 074edd969..c241f4f2c 100644
--- a/tex/context/base/mkiv/spac-ver.mkiv
+++ b/tex/context/base/mkiv/spac-ver.mkiv
@@ -1332,8 +1332,14 @@
{\aftergroup\page_otr_synchronize_page_indeed
\glet\page_otr_synchronize_page\relax}
+% \unexpanded\def\page_otr_synchronize_page_indeed
+% {\clf_synchronizepage
+% \glet\page_otr_synchronize_page\page_otr_synchronize_page_yes}
+%
+% This has to become an otr method: \s!page_otr_command_synchonize_page
+
\unexpanded\def\page_otr_synchronize_page_indeed
- {\clf_synchronizepage
+ {\ifx\currentoutputroutine\s!multicolumn\else\clf_synchronizepage\fi
\glet\page_otr_synchronize_page\page_otr_synchronize_page_yes}
\let\page_otr_synchronize_page\page_otr_synchronize_page_yes
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index 784f1b3a2..afcce6971 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index b314749a6..2eb9c7104 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/strc-blk.mkiv b/tex/context/base/mkiv/strc-blk.mkiv
index 4d7437b37..724f7816c 100644
--- a/tex/context/base/mkiv/strc-blk.mkiv
+++ b/tex/context/base/mkiv/strc-blk.mkiv
@@ -34,15 +34,47 @@
\appendtoks
\clf_definestructureblock{\currentblock}%
- \setuevalue{\e!begin\currentblock}{\dotripleempty\strc_blocks_begin[\currentblock]}%
+ \setuevalue{\e!begin\currentblock}{\strc_blocks_begin{\currentblock}}%
\letvalue {\e!end \currentblock}\donothing
\to \everydefineblock
-\unexpanded\def\strc_blocks_begin[#1][#2][#3]%
- {\normalexpanded{\buff_pickup{\??block}{\e!begin#1}{\e!end#1}}
+% The naive way:
+%
+% \unexpanded\def\strc_blocks_begin#1%
+% {\dotripleempty\strc_blocks_begin_indeed[#1]}
+%
+% \unexpanded\def\strc_blocks_begin_indeed[#1][#2][#3]%
+% {\normalexpanded{\buff_pickup{\??block}{\e!begin#1}{\e!end#1}}
+% {}%
+% {\clf_savestructureblock{#1}{#2}{#3}{\??block}}%
+% \plusone}%
+%
+% We need to prevent too much lookahead which will gobble newlines
+% that are needed for buffers. See blocks-002.tex as example.
+
+\let\m_block \empty
+\let\m_subblock\empty
+
+\unexpanded\def\strc_blocks_begin#1%
+ {\edef\m_block {#1}%
+ \let \m_subblock\empty
+ \doifelsenextoptionalcs\strc_blocks_begin_yes\strc_blocks_begin_nop}
+
+\unexpanded\def\strc_blocks_begin_yes[#1]%
+ {\edef\m_subblock{#1}%
+ \doifelsenextoptionalcs\strc_blocks_begin_yes_yes\strc_blocks_begin_nop}
+
+\unexpanded\def\strc_blocks_begin_yes_yes[#1]%
+ {\strc_blocks_begin_indeed{#1}}
+
+\unexpanded\def\strc_blocks_begin_nop
+ {\strc_blocks_begin_indeed{}}
+
+\unexpanded\def\strc_blocks_begin_indeed#1%
+ {\normalexpanded{\buff_pickup{\??block}{\e!begin\m_block}{\e!end\m_block}}%
{}%
- {\clf_savestructureblock{#1}{#2}{#3}{\??block}}%
- \plusone}%
+ {\clf_savestructureblock{\m_block}{\m_subblock}{#1}{\??block}}%
+ \plusone}
\let\strc_blocks_setup\relax
diff --git a/tex/context/base/mkiv/strc-ref.lua b/tex/context/base/mkiv/strc-ref.lua
index cf39a4d99..2c9765a44 100644
--- a/tex/context/base/mkiv/strc-ref.lua
+++ b/tex/context/base/mkiv/strc-ref.lua
@@ -423,6 +423,10 @@ end
local getpos = function() getpos = backends.codeinjections.getpos return getpos () end
+updaters.register("backend.update",function()
+ getpos = backends.codeinjections.getpos
+end)
+
local function synchronizepage(reference) -- non public helper
reference.realpage = texgetcount("realpageno")
if jobpositions.used then
diff --git a/tex/context/base/mkiv/supp-box.mkiv b/tex/context/base/mkiv/supp-box.mkiv
index f0178f41b..7a073fc84 100644
--- a/tex/context/base/mkiv/supp-box.mkiv
+++ b/tex/context/base/mkiv/supp-box.mkiv
@@ -2128,7 +2128,27 @@
%D
%D \leavevmode\getbuffer
+\def\boxisempty#1%
+ {\ifdim\wd#1=\zeropoint
+ \ifdim\ht#1=\zeropoint
+ \ifdim\dp#1=\zeropoint
+ \zerocount
+ \else
+ \plusone
+ \fi
+ \else
+ \plusone
+ \fi
+ \else
+ \plusone
+ \fi}
+
\def\syst_boxes_overlay_process
+ {\ifcase\boxisempty\nextbox\else
+ \syst_boxes_overlay_process_indeed
+ \fi}
+
+\def\syst_boxes_overlay_process_indeed
{%\removeunwantedspaces % already done
\scratchdepth\dp\ifdim\dp\nextbox>\dp\processbox\nextbox\else\processbox\fi
\ifdim\ht\nextbox>\ht\processbox
diff --git a/tex/context/base/mkiv/symb-imp-fontawesome.mkiv b/tex/context/base/mkiv/symb-imp-fontawesome.mkiv
index 145adc46c..cae2e506b 100644
--- a/tex/context/base/mkiv/symb-imp-fontawesome.mkiv
+++ b/tex/context/base/mkiv/symb-imp-fontawesome.mkiv
@@ -10,749 +10,756 @@
\definefontsynonym [FontAwesome] [file:FontAwesome.otf]
%def\FontAwesomeSymbol#1{\getglyphstyled{FontAwesome}{\utfchar{0x#1}}}
-\def\FontAwesomeSymbol#1{\getglyphstyled{FontAwesome}{\tochar{x:#1}}}
+\def\FontAwesomeSymbol#1{\getglyphstyled{FontAwesome}{\tochar{n:#1}}}
-\startsymbolset [fontawesome]
+\startsymbolset [fontawesome] [font=fontawesome]
- \definesymbol [500px] [\FontAwesomeSymbol{f26e}]
- \definesymbol [adjust] [\FontAwesomeSymbol{f042}]
- \definesymbol [adn] [\FontAwesomeSymbol{f170}]
- \definesymbol [align-center] [\FontAwesomeSymbol{f037}]
- \definesymbol [align-justify] [\FontAwesomeSymbol{f039}]
- \definesymbol [align-left] [\FontAwesomeSymbol{f036}]
- \definesymbol [align-right] [\FontAwesomeSymbol{f038}]
- \definesymbol [amazon] [\FontAwesomeSymbol{f270}]
- \definesymbol [ambulance] [\FontAwesomeSymbol{f0f9}]
- \definesymbol [american-sign-language-interpreting] [\FontAwesomeSymbol{f2a3}]
- \definesymbol [anchor] [\FontAwesomeSymbol{f13d}]
- \definesymbol [android] [\FontAwesomeSymbol{f17b}]
- \definesymbol [angellist] [\FontAwesomeSymbol{f209}]
- \definesymbol [angle-double-down] [\FontAwesomeSymbol{f103}]
- \definesymbol [angle-double-left] [\FontAwesomeSymbol{f100}]
- \definesymbol [angle-double-right] [\FontAwesomeSymbol{f101}]
- \definesymbol [angle-double-up] [\FontAwesomeSymbol{f102}]
- \definesymbol [angle-down] [\FontAwesomeSymbol{f107}]
- \definesymbol [angle-left] [\FontAwesomeSymbol{f104}]
- \definesymbol [angle-right] [\FontAwesomeSymbol{f105}]
- \definesymbol [angle-up] [\FontAwesomeSymbol{f106}]
- \definesymbol [apple] [\FontAwesomeSymbol{f179}]
- \definesymbol [archive] [\FontAwesomeSymbol{f187}]
- \definesymbol [area-chart] [\FontAwesomeSymbol{f1fe}]
- \definesymbol [arrow-circle-down] [\FontAwesomeSymbol{f0ab}]
- \definesymbol [arrow-circle-left] [\FontAwesomeSymbol{f0a8}]
- \definesymbol [arrow-circle-o-down] [\FontAwesomeSymbol{f01a}]
- \definesymbol [arrow-circle-o-left] [\FontAwesomeSymbol{f190}]
- \definesymbol [arrow-circle-o-right] [\FontAwesomeSymbol{f18e}]
- \definesymbol [arrow-circle-o-up] [\FontAwesomeSymbol{f01b}]
- \definesymbol [arrow-circle-right] [\FontAwesomeSymbol{f0a9}]
- \definesymbol [arrow-circle-up] [\FontAwesomeSymbol{f0aa}]
- \definesymbol [arrow-down] [\FontAwesomeSymbol{f063}]
- \definesymbol [arrow-left] [\FontAwesomeSymbol{f060}]
- \definesymbol [arrow-right] [\FontAwesomeSymbol{f061}]
- \definesymbol [arrow-up] [\FontAwesomeSymbol{f062}]
- \definesymbol [arrows] [\FontAwesomeSymbol{f047}]
- \definesymbol [arrows-alt] [\FontAwesomeSymbol{f0b2}]
- \definesymbol [arrows-h] [\FontAwesomeSymbol{f07e}]
- \definesymbol [arrows-v] [\FontAwesomeSymbol{f07d}]
- \definesymbol [asl-interpreting] [\FontAwesomeSymbol{f2a3}]
- \definesymbol [assistive-listening-systems] [\FontAwesomeSymbol{f2a2}]
- \definesymbol [asterisk] [\FontAwesomeSymbol{f069}]
- \definesymbol [at] [\FontAwesomeSymbol{f1fa}]
- \definesymbol [audio-description] [\FontAwesomeSymbol{f29e}]
- \definesymbol [automobile] [\FontAwesomeSymbol{f1b9}]
- \definesymbol [backward] [\FontAwesomeSymbol{f04a}]
- \definesymbol [balance-scale] [\FontAwesomeSymbol{f24e}]
- \definesymbol [ban] [\FontAwesomeSymbol{f05e}]
- \definesymbol [bank] [\FontAwesomeSymbol{f19c}]
- \definesymbol [bar-chart] [\FontAwesomeSymbol{f080}]
- \definesymbol [bar-chart-o] [\FontAwesomeSymbol{f080}]
- \definesymbol [barcode] [\FontAwesomeSymbol{f02a}]
- \definesymbol [bars] [\FontAwesomeSymbol{f0c9}]
- \definesymbol [battery-0] [\FontAwesomeSymbol{f244}]
- \definesymbol [battery-1] [\FontAwesomeSymbol{f243}]
- \definesymbol [battery-2] [\FontAwesomeSymbol{f242}]
- \definesymbol [battery-3] [\FontAwesomeSymbol{f241}]
- \definesymbol [battery-4] [\FontAwesomeSymbol{f240}]
- \definesymbol [battery-empty] [\FontAwesomeSymbol{f244}]
- \definesymbol [battery-full] [\FontAwesomeSymbol{f240}]
- \definesymbol [battery-half] [\FontAwesomeSymbol{f242}]
- \definesymbol [battery-quarter] [\FontAwesomeSymbol{f243}]
- \definesymbol [battery-three-quarters] [\FontAwesomeSymbol{f241}]
- \definesymbol [bed] [\FontAwesomeSymbol{f236}]
- \definesymbol [beer] [\FontAwesomeSymbol{f0fc}]
- \definesymbol [behance] [\FontAwesomeSymbol{f1b4}]
- \definesymbol [behance-square] [\FontAwesomeSymbol{f1b5}]
- \definesymbol [bell] [\FontAwesomeSymbol{f0f3}]
- \definesymbol [bell-o] [\FontAwesomeSymbol{f0a2}]
- \definesymbol [bell-slash] [\FontAwesomeSymbol{f1f6}]
- \definesymbol [bell-slash-o] [\FontAwesomeSymbol{f1f7}]
- \definesymbol [bicycle] [\FontAwesomeSymbol{f206}]
- \definesymbol [binoculars] [\FontAwesomeSymbol{f1e5}]
- \definesymbol [birthday-cake] [\FontAwesomeSymbol{f1fd}]
- \definesymbol [bitbucket] [\FontAwesomeSymbol{f171}]
- \definesymbol [bitbucket-square] [\FontAwesomeSymbol{f172}]
- \definesymbol [bitcoin] [\FontAwesomeSymbol{f15a}]
- \definesymbol [black-tie] [\FontAwesomeSymbol{f27e}]
- \definesymbol [blind] [\FontAwesomeSymbol{f29d}]
- \definesymbol [bluetooth] [\FontAwesomeSymbol{f293}]
- \definesymbol [bluetooth-b] [\FontAwesomeSymbol{f294}]
- \definesymbol [bold] [\FontAwesomeSymbol{f032}]
- \definesymbol [bolt] [\FontAwesomeSymbol{f0e7}]
- \definesymbol [bomb] [\FontAwesomeSymbol{f1e2}]
- \definesymbol [book] [\FontAwesomeSymbol{f02d}]
- \definesymbol [bookmark] [\FontAwesomeSymbol{f02e}]
- \definesymbol [bookmark-o] [\FontAwesomeSymbol{f097}]
- \definesymbol [braille] [\FontAwesomeSymbol{f2a1}]
- \definesymbol [briefcase] [\FontAwesomeSymbol{f0b1}]
- \definesymbol [btc] [\FontAwesomeSymbol{f15a}]
- \definesymbol [bug] [\FontAwesomeSymbol{f188}]
- \definesymbol [building] [\FontAwesomeSymbol{f1ad}]
- \definesymbol [building-o] [\FontAwesomeSymbol{f0f7}]
- \definesymbol [bullhorn] [\FontAwesomeSymbol{f0a1}]
- \definesymbol [bullseye] [\FontAwesomeSymbol{f140}]
- \definesymbol [bus] [\FontAwesomeSymbol{f207}]
- \definesymbol [buysellads] [\FontAwesomeSymbol{f20d}]
- \definesymbol [cab] [\FontAwesomeSymbol{f1ba}]
- \definesymbol [calculator] [\FontAwesomeSymbol{f1ec}]
- \definesymbol [calendar] [\FontAwesomeSymbol{f073}]
- \definesymbol [calendar-check-o] [\FontAwesomeSymbol{f274}]
- \definesymbol [calendar-minus-o] [\FontAwesomeSymbol{f272}]
- \definesymbol [calendar-o] [\FontAwesomeSymbol{f133}]
- \definesymbol [calendar-plus-o] [\FontAwesomeSymbol{f271}]
- \definesymbol [calendar-times-o] [\FontAwesomeSymbol{f273}]
- \definesymbol [camera] [\FontAwesomeSymbol{f030}]
- \definesymbol [camera-retro] [\FontAwesomeSymbol{f083}]
- \definesymbol [car] [\FontAwesomeSymbol{f1b9}]
- \definesymbol [caret-down] [\FontAwesomeSymbol{f0d7}]
- \definesymbol [caret-left] [\FontAwesomeSymbol{f0d9}]
- \definesymbol [caret-right] [\FontAwesomeSymbol{f0da}]
- \definesymbol [caret-square-o-down] [\FontAwesomeSymbol{f150}]
- \definesymbol [caret-square-o-left] [\FontAwesomeSymbol{f191}]
- \definesymbol [caret-square-o-right] [\FontAwesomeSymbol{f152}]
- \definesymbol [caret-square-o-up] [\FontAwesomeSymbol{f151}]
- \definesymbol [caret-up] [\FontAwesomeSymbol{f0d8}]
- \definesymbol [cart-arrow-down] [\FontAwesomeSymbol{f218}]
- \definesymbol [cart-plus] [\FontAwesomeSymbol{f217}]
- \definesymbol [cc] [\FontAwesomeSymbol{f20a}]
- \definesymbol [cc-amex] [\FontAwesomeSymbol{f1f3}]
- \definesymbol [cc-diners-club] [\FontAwesomeSymbol{f24c}]
- \definesymbol [cc-discover] [\FontAwesomeSymbol{f1f2}]
- \definesymbol [cc-jcb] [\FontAwesomeSymbol{f24b}]
- \definesymbol [cc-mastercard] [\FontAwesomeSymbol{f1f1}]
- \definesymbol [cc-paypal] [\FontAwesomeSymbol{f1f4}]
- \definesymbol [cc-stripe] [\FontAwesomeSymbol{f1f5}]
- \definesymbol [cc-visa] [\FontAwesomeSymbol{f1f0}]
- \definesymbol [certificate] [\FontAwesomeSymbol{f0a3}]
- \definesymbol [chain] [\FontAwesomeSymbol{f0c1}]
- \definesymbol [chain-broken] [\FontAwesomeSymbol{f127}]
- \definesymbol [check] [\FontAwesomeSymbol{f00c}]
- \definesymbol [check-circle] [\FontAwesomeSymbol{f058}]
- \definesymbol [check-circle-o] [\FontAwesomeSymbol{f05d}]
- \definesymbol [check-square] [\FontAwesomeSymbol{f14a}]
- \definesymbol [check-square-o] [\FontAwesomeSymbol{f046}]
- \definesymbol [chevron-circle-down] [\FontAwesomeSymbol{f13a}]
- \definesymbol [chevron-circle-left] [\FontAwesomeSymbol{f137}]
- \definesymbol [chevron-circle-right] [\FontAwesomeSymbol{f138}]
- \definesymbol [chevron-circle-up] [\FontAwesomeSymbol{f139}]
- \definesymbol [chevron-down] [\FontAwesomeSymbol{f078}]
- \definesymbol [chevron-left] [\FontAwesomeSymbol{f053}]
- \definesymbol [chevron-right] [\FontAwesomeSymbol{f054}]
- \definesymbol [chevron-up] [\FontAwesomeSymbol{f077}]
- \definesymbol [child] [\FontAwesomeSymbol{f1ae}]
- \definesymbol [chrome] [\FontAwesomeSymbol{f268}]
- \definesymbol [circle] [\FontAwesomeSymbol{f111}]
- \definesymbol [circle-o] [\FontAwesomeSymbol{f10c}]
- \definesymbol [circle-o-notch] [\FontAwesomeSymbol{f1ce}]
- \definesymbol [circle-thin] [\FontAwesomeSymbol{f1db}]
- \definesymbol [clipboard] [\FontAwesomeSymbol{f0ea}]
- \definesymbol [clock-o] [\FontAwesomeSymbol{f017}]
- \definesymbol [clone] [\FontAwesomeSymbol{f24d}]
- \definesymbol [close] [\FontAwesomeSymbol{f00d}]
- \definesymbol [cloud] [\FontAwesomeSymbol{f0c2}]
- \definesymbol [cloud-download] [\FontAwesomeSymbol{f0ed}]
- \definesymbol [cloud-upload] [\FontAwesomeSymbol{f0ee}]
- \definesymbol [cny] [\FontAwesomeSymbol{f157}]
- \definesymbol [code] [\FontAwesomeSymbol{f121}]
- \definesymbol [code-fork] [\FontAwesomeSymbol{f126}]
- \definesymbol [codepen] [\FontAwesomeSymbol{f1cb}]
- \definesymbol [codiepie] [\FontAwesomeSymbol{f284}]
- \definesymbol [coffee] [\FontAwesomeSymbol{f0f4}]
- \definesymbol [cog] [\FontAwesomeSymbol{f013}]
- \definesymbol [cogs] [\FontAwesomeSymbol{f085}]
- \definesymbol [columns] [\FontAwesomeSymbol{f0db}]
- \definesymbol [comment] [\FontAwesomeSymbol{f075}]
- \definesymbol [comment-o] [\FontAwesomeSymbol{f0e5}]
- \definesymbol [commenting] [\FontAwesomeSymbol{f27a}]
- \definesymbol [commenting-o] [\FontAwesomeSymbol{f27b}]
- \definesymbol [comments] [\FontAwesomeSymbol{f086}]
- \definesymbol [comments-o] [\FontAwesomeSymbol{f0e6}]
- \definesymbol [compass] [\FontAwesomeSymbol{f14e}]
- \definesymbol [compress] [\FontAwesomeSymbol{f066}]
- \definesymbol [connectdevelop] [\FontAwesomeSymbol{f20e}]
- \definesymbol [contao] [\FontAwesomeSymbol{f26d}]
- \definesymbol [copy] [\FontAwesomeSymbol{f0c5}]
- \definesymbol [copyright] [\FontAwesomeSymbol{f1f9}]
- \definesymbol [creative-commons] [\FontAwesomeSymbol{f25e}]
- \definesymbol [credit-card] [\FontAwesomeSymbol{f09d}]
- \definesymbol [credit-card-alt] [\FontAwesomeSymbol{f283}]
- \definesymbol [crop] [\FontAwesomeSymbol{f125}]
- \definesymbol [crosshairs] [\FontAwesomeSymbol{f05b}]
- \definesymbol [css3] [\FontAwesomeSymbol{f13c}]
- \definesymbol [cube] [\FontAwesomeSymbol{f1b2}]
- \definesymbol [cubes] [\FontAwesomeSymbol{f1b3}]
- \definesymbol [cut] [\FontAwesomeSymbol{f0c4}]
- \definesymbol [cutlery] [\FontAwesomeSymbol{f0f5}]
- \definesymbol [dashboard] [\FontAwesomeSymbol{f0e4}]
- \definesymbol [dashcube] [\FontAwesomeSymbol{f210}]
- \definesymbol [database] [\FontAwesomeSymbol{f1c0}]
- \definesymbol [deaf] [\FontAwesomeSymbol{f2a4}]
- \definesymbol [deafness] [\FontAwesomeSymbol{f2a4}]
- \definesymbol [dedent] [\FontAwesomeSymbol{f03b}]
- \definesymbol [delicious] [\FontAwesomeSymbol{f1a5}]
- \definesymbol [desktop] [\FontAwesomeSymbol{f108}]
- \definesymbol [deviantart] [\FontAwesomeSymbol{f1bd}]
- \definesymbol [diamond] [\FontAwesomeSymbol{f219}]
- \definesymbol [digg] [\FontAwesomeSymbol{f1a6}]
- \definesymbol [dollar] [\FontAwesomeSymbol{f155}]
- \definesymbol [dot-circle-o] [\FontAwesomeSymbol{f192}]
- \definesymbol [download] [\FontAwesomeSymbol{f019}]
- \definesymbol [dribbble] [\FontAwesomeSymbol{f17d}]
- \definesymbol [dropbox] [\FontAwesomeSymbol{f16b}]
- \definesymbol [drupal] [\FontAwesomeSymbol{f1a9}]
- \definesymbol [edge] [\FontAwesomeSymbol{f282}]
- \definesymbol [edit] [\FontAwesomeSymbol{f044}]
- \definesymbol [eject] [\FontAwesomeSymbol{f052}]
- \definesymbol [ellipsis-h] [\FontAwesomeSymbol{f141}]
- \definesymbol [ellipsis-v] [\FontAwesomeSymbol{f142}]
- \definesymbol [empire] [\FontAwesomeSymbol{f1d1}]
- \definesymbol [envelope] [\FontAwesomeSymbol{f0e0}]
- \definesymbol [envelope-o] [\FontAwesomeSymbol{f003}]
- \definesymbol [envelope-square] [\FontAwesomeSymbol{f199}]
- \definesymbol [envira] [\FontAwesomeSymbol{f299}]
- \definesymbol [eraser] [\FontAwesomeSymbol{f12d}]
- \definesymbol [eur] [\FontAwesomeSymbol{f153}]
- \definesymbol [euro] [\FontAwesomeSymbol{f153}]
- \definesymbol [exchange] [\FontAwesomeSymbol{f0ec}]
- \definesymbol [exclamation] [\FontAwesomeSymbol{f12a}]
- \definesymbol [exclamation-circle] [\FontAwesomeSymbol{f06a}]
- \definesymbol [exclamation-triangle] [\FontAwesomeSymbol{f071}]
- \definesymbol [expand] [\FontAwesomeSymbol{f065}]
- \definesymbol [expeditedssl] [\FontAwesomeSymbol{f23e}]
- \definesymbol [external-link] [\FontAwesomeSymbol{f08e}]
- \definesymbol [external-link-square] [\FontAwesomeSymbol{f14c}]
- \definesymbol [eye] [\FontAwesomeSymbol{f06e}]
- \definesymbol [eye-slash] [\FontAwesomeSymbol{f070}]
- \definesymbol [eyedropper] [\FontAwesomeSymbol{f1fb}]
- \definesymbol [fa] [\FontAwesomeSymbol{f2b4}]
- \definesymbol [facebook] [\FontAwesomeSymbol{f09a}]
- \definesymbol [facebook-f] [\FontAwesomeSymbol{f09a}]
- \definesymbol [facebook-official] [\FontAwesomeSymbol{f230}]
- \definesymbol [facebook-square] [\FontAwesomeSymbol{f082}]
- \definesymbol [fast-backward] [\FontAwesomeSymbol{f049}]
- \definesymbol [fast-forward] [\FontAwesomeSymbol{f050}]
- \definesymbol [fax] [\FontAwesomeSymbol{f1ac}]
- \definesymbol [feed] [\FontAwesomeSymbol{f09e}]
- \definesymbol [female] [\FontAwesomeSymbol{f182}]
- \definesymbol [fighter-jet] [\FontAwesomeSymbol{f0fb}]
- \definesymbol [file] [\FontAwesomeSymbol{f15b}]
- \definesymbol [file-archive-o] [\FontAwesomeSymbol{f1c6}]
- \definesymbol [file-audio-o] [\FontAwesomeSymbol{f1c7}]
- \definesymbol [file-code-o] [\FontAwesomeSymbol{f1c9}]
- \definesymbol [file-excel-o] [\FontAwesomeSymbol{f1c3}]
- \definesymbol [file-image-o] [\FontAwesomeSymbol{f1c5}]
- \definesymbol [file-movie-o] [\FontAwesomeSymbol{f1c8}]
- \definesymbol [file-o] [\FontAwesomeSymbol{f016}]
- \definesymbol [file-pdf-o] [\FontAwesomeSymbol{f1c1}]
- \definesymbol [file-photo-o] [\FontAwesomeSymbol{f1c5}]
- \definesymbol [file-picture-o] [\FontAwesomeSymbol{f1c5}]
- \definesymbol [file-powerpoint-o] [\FontAwesomeSymbol{f1c4}]
- \definesymbol [file-sound-o] [\FontAwesomeSymbol{f1c7}]
- \definesymbol [file-text] [\FontAwesomeSymbol{f15c}]
- \definesymbol [file-text-o] [\FontAwesomeSymbol{f0f6}]
- \definesymbol [file-video-o] [\FontAwesomeSymbol{f1c8}]
- \definesymbol [file-word-o] [\FontAwesomeSymbol{f1c2}]
- \definesymbol [file-zip-o] [\FontAwesomeSymbol{f1c6}]
- \definesymbol [files-o] [\FontAwesomeSymbol{f0c5}]
- \definesymbol [film] [\FontAwesomeSymbol{f008}]
- \definesymbol [filter] [\FontAwesomeSymbol{f0b0}]
- \definesymbol [fire] [\FontAwesomeSymbol{f06d}]
- \definesymbol [fire-extinguisher] [\FontAwesomeSymbol{f134}]
- \definesymbol [firefox] [\FontAwesomeSymbol{f269}]
- \definesymbol [first-order] [\FontAwesomeSymbol{f2b0}]
- \definesymbol [flag] [\FontAwesomeSymbol{f024}]
- \definesymbol [flag-checkered] [\FontAwesomeSymbol{f11e}]
- \definesymbol [flag-o] [\FontAwesomeSymbol{f11d}]
- \definesymbol [flash] [\FontAwesomeSymbol{f0e7}]
- \definesymbol [flask] [\FontAwesomeSymbol{f0c3}]
- \definesymbol [flickr] [\FontAwesomeSymbol{f16e}]
- \definesymbol [floppy-o] [\FontAwesomeSymbol{f0c7}]
- \definesymbol [folder] [\FontAwesomeSymbol{f07b}]
- \definesymbol [folder-o] [\FontAwesomeSymbol{f114}]
- \definesymbol [folder-open] [\FontAwesomeSymbol{f07c}]
- \definesymbol [folder-open-o] [\FontAwesomeSymbol{f115}]
- \definesymbol [font] [\FontAwesomeSymbol{f031}]
- \definesymbol [font-awesome] [\FontAwesomeSymbol{f2b4}]
- \definesymbol [fonticons] [\FontAwesomeSymbol{f280}]
- \definesymbol [fort-awesome] [\FontAwesomeSymbol{f286}]
- \definesymbol [forumbee] [\FontAwesomeSymbol{f211}]
- \definesymbol [forward] [\FontAwesomeSymbol{f04e}]
- \definesymbol [foursquare] [\FontAwesomeSymbol{f180}]
- \definesymbol [frown-o] [\FontAwesomeSymbol{f119}]
- \definesymbol [futbol-o] [\FontAwesomeSymbol{f1e3}]
- \definesymbol [gamepad] [\FontAwesomeSymbol{f11b}]
- \definesymbol [gavel] [\FontAwesomeSymbol{f0e3}]
- \definesymbol [gbp] [\FontAwesomeSymbol{f154}]
- \definesymbol [ge] [\FontAwesomeSymbol{f1d1}]
- \definesymbol [gear] [\FontAwesomeSymbol{f013}]
- \definesymbol [gears] [\FontAwesomeSymbol{f085}]
- \definesymbol [genderless] [\FontAwesomeSymbol{f22d}]
- \definesymbol [get-pocket] [\FontAwesomeSymbol{f265}]
- \definesymbol [gg] [\FontAwesomeSymbol{f260}]
- \definesymbol [gg-circle] [\FontAwesomeSymbol{f261}]
- \definesymbol [gift] [\FontAwesomeSymbol{f06b}]
- \definesymbol [git] [\FontAwesomeSymbol{f1d3}]
- \definesymbol [git-square] [\FontAwesomeSymbol{f1d2}]
- \definesymbol [github] [\FontAwesomeSymbol{f09b}]
- \definesymbol [github-alt] [\FontAwesomeSymbol{f113}]
- \definesymbol [github-square] [\FontAwesomeSymbol{f092}]
- \definesymbol [gitlab] [\FontAwesomeSymbol{f296}]
- \definesymbol [gittip] [\FontAwesomeSymbol{f184}]
- \definesymbol [glass] [\FontAwesomeSymbol{f000}]
- \definesymbol [glide] [\FontAwesomeSymbol{f2a5}]
- \definesymbol [glide-g] [\FontAwesomeSymbol{f2a6}]
- \definesymbol [globe] [\FontAwesomeSymbol{f0ac}]
- \definesymbol [google] [\FontAwesomeSymbol{f1a0}]
- \definesymbol [google-plus] [\FontAwesomeSymbol{f0d5}]
- \definesymbol [google-plus-circle] [\FontAwesomeSymbol{f2b3}]
- \definesymbol [google-plus-official] [\FontAwesomeSymbol{f2b3}]
- \definesymbol [google-plus-square] [\FontAwesomeSymbol{f0d4}]
- \definesymbol [google-wallet] [\FontAwesomeSymbol{f1ee}]
- \definesymbol [graduation-cap] [\FontAwesomeSymbol{f19d}]
- \definesymbol [gratipay] [\FontAwesomeSymbol{f184}]
- \definesymbol [group] [\FontAwesomeSymbol{f0c0}]
- \definesymbol [h-square] [\FontAwesomeSymbol{f0fd}]
- \definesymbol [hacker-news] [\FontAwesomeSymbol{f1d4}]
- \definesymbol [hand-grab-o] [\FontAwesomeSymbol{f255}]
- \definesymbol [hand-lizard-o] [\FontAwesomeSymbol{f258}]
- \definesymbol [hand-o-down] [\FontAwesomeSymbol{f0a7}]
- \definesymbol [hand-o-left] [\FontAwesomeSymbol{f0a5}]
- \definesymbol [hand-o-right] [\FontAwesomeSymbol{f0a4}]
- \definesymbol [hand-o-up] [\FontAwesomeSymbol{f0a6}]
- \definesymbol [hand-paper-o] [\FontAwesomeSymbol{f256}]
- \definesymbol [hand-peace-o] [\FontAwesomeSymbol{f25b}]
- \definesymbol [hand-pointer-o] [\FontAwesomeSymbol{f25a}]
- \definesymbol [hand-rock-o] [\FontAwesomeSymbol{f255}]
- \definesymbol [hand-scissors-o] [\FontAwesomeSymbol{f257}]
- \definesymbol [hand-spock-o] [\FontAwesomeSymbol{f259}]
- \definesymbol [hand-stop-o] [\FontAwesomeSymbol{f256}]
- \definesymbol [hard-of-hearing] [\FontAwesomeSymbol{f2a4}]
- \definesymbol [hashtag] [\FontAwesomeSymbol{f292}]
- \definesymbol [hdd-o] [\FontAwesomeSymbol{f0a0}]
- \definesymbol [header] [\FontAwesomeSymbol{f1dc}]
- \definesymbol [headphones] [\FontAwesomeSymbol{f025}]
- \definesymbol [heart] [\FontAwesomeSymbol{f004}]
- \definesymbol [heart-o] [\FontAwesomeSymbol{f08a}]
- \definesymbol [heartbeat] [\FontAwesomeSymbol{f21e}]
- \definesymbol [history] [\FontAwesomeSymbol{f1da}]
- \definesymbol [home] [\FontAwesomeSymbol{f015}]
- \definesymbol [hospital-o] [\FontAwesomeSymbol{f0f8}]
- \definesymbol [hotel] [\FontAwesomeSymbol{f236}]
- \definesymbol [hourglass] [\FontAwesomeSymbol{f254}]
- \definesymbol [hourglass-1] [\FontAwesomeSymbol{f251}]
- \definesymbol [hourglass-2] [\FontAwesomeSymbol{f252}]
- \definesymbol [hourglass-3] [\FontAwesomeSymbol{f253}]
- \definesymbol [hourglass-end] [\FontAwesomeSymbol{f253}]
- \definesymbol [hourglass-half] [\FontAwesomeSymbol{f252}]
- \definesymbol [hourglass-o] [\FontAwesomeSymbol{f250}]
- \definesymbol [hourglass-start] [\FontAwesomeSymbol{f251}]
- \definesymbol [houzz] [\FontAwesomeSymbol{f27c}]
- \definesymbol [html5] [\FontAwesomeSymbol{f13b}]
- \definesymbol [i-cursor] [\FontAwesomeSymbol{f246}]
- \definesymbol [ils] [\FontAwesomeSymbol{f20b}]
- \definesymbol [image] [\FontAwesomeSymbol{f03e}]
- \definesymbol [inbox] [\FontAwesomeSymbol{f01c}]
- \definesymbol [indent] [\FontAwesomeSymbol{f03c}]
- \definesymbol [industry] [\FontAwesomeSymbol{f275}]
- \definesymbol [info] [\FontAwesomeSymbol{f129}]
- \definesymbol [info-circle] [\FontAwesomeSymbol{f05a}]
- \definesymbol [inr] [\FontAwesomeSymbol{f156}]
- \definesymbol [instagram] [\FontAwesomeSymbol{f16d}]
- \definesymbol [institution] [\FontAwesomeSymbol{f19c}]
- \definesymbol [internet-explorer] [\FontAwesomeSymbol{f26b}]
- \definesymbol [intersex] [\FontAwesomeSymbol{f224}]
- \definesymbol [ioxhost] [\FontAwesomeSymbol{f208}]
- \definesymbol [italic] [\FontAwesomeSymbol{f033}]
- \definesymbol [joomla] [\FontAwesomeSymbol{f1aa}]
- \definesymbol [jpy] [\FontAwesomeSymbol{f157}]
- \definesymbol [jsfiddle] [\FontAwesomeSymbol{f1cc}]
- \definesymbol [key] [\FontAwesomeSymbol{f084}]
- \definesymbol [keyboard-o] [\FontAwesomeSymbol{f11c}]
- \definesymbol [krw] [\FontAwesomeSymbol{f159}]
- \definesymbol [language] [\FontAwesomeSymbol{f1ab}]
- \definesymbol [laptop] [\FontAwesomeSymbol{f109}]
- \definesymbol [lastfm] [\FontAwesomeSymbol{f202}]
- \definesymbol [lastfm-square] [\FontAwesomeSymbol{f203}]
- \definesymbol [leaf] [\FontAwesomeSymbol{f06c}]
- \definesymbol [leanpub] [\FontAwesomeSymbol{f212}]
- \definesymbol [legal] [\FontAwesomeSymbol{f0e3}]
- \definesymbol [lemon-o] [\FontAwesomeSymbol{f094}]
- \definesymbol [level-down] [\FontAwesomeSymbol{f149}]
- \definesymbol [level-up] [\FontAwesomeSymbol{f148}]
- \definesymbol [life-bouy] [\FontAwesomeSymbol{f1cd}]
- \definesymbol [life-buoy] [\FontAwesomeSymbol{f1cd}]
- \definesymbol [life-ring] [\FontAwesomeSymbol{f1cd}]
- \definesymbol [life-saver] [\FontAwesomeSymbol{f1cd}]
- \definesymbol [lightbulb-o] [\FontAwesomeSymbol{f0eb}]
- \definesymbol [line-chart] [\FontAwesomeSymbol{f201}]
- \definesymbol [link] [\FontAwesomeSymbol{f0c1}]
- \definesymbol [linkedin] [\FontAwesomeSymbol{f0e1}]
- \definesymbol [linkedin-square] [\FontAwesomeSymbol{f08c}]
- \definesymbol [linux] [\FontAwesomeSymbol{f17c}]
- \definesymbol [list] [\FontAwesomeSymbol{f03a}]
- \definesymbol [list-alt] [\FontAwesomeSymbol{f022}]
- \definesymbol [list-ol] [\FontAwesomeSymbol{f0cb}]
- \definesymbol [list-ul] [\FontAwesomeSymbol{f0ca}]
- \definesymbol [location-arrow] [\FontAwesomeSymbol{f124}]
- \definesymbol [lock] [\FontAwesomeSymbol{f023}]
- \definesymbol [long-arrow-down] [\FontAwesomeSymbol{f175}]
- \definesymbol [long-arrow-left] [\FontAwesomeSymbol{f177}]
- \definesymbol [long-arrow-right] [\FontAwesomeSymbol{f178}]
- \definesymbol [long-arrow-up] [\FontAwesomeSymbol{f176}]
- \definesymbol [low-vision] [\FontAwesomeSymbol{f2a8}]
- \definesymbol [magic] [\FontAwesomeSymbol{f0d0}]
- \definesymbol [magnet] [\FontAwesomeSymbol{f076}]
- \definesymbol [mail-forward] [\FontAwesomeSymbol{f064}]
- \definesymbol [mail-reply] [\FontAwesomeSymbol{f112}]
- \definesymbol [mail-reply-all] [\FontAwesomeSymbol{f122}]
- \definesymbol [male] [\FontAwesomeSymbol{f183}]
- \definesymbol [map] [\FontAwesomeSymbol{f279}]
- \definesymbol [map-marker] [\FontAwesomeSymbol{f041}]
- \definesymbol [map-o] [\FontAwesomeSymbol{f278}]
- \definesymbol [map-pin] [\FontAwesomeSymbol{f276}]
- \definesymbol [map-signs] [\FontAwesomeSymbol{f277}]
- \definesymbol [mars] [\FontAwesomeSymbol{f222}]
- \definesymbol [mars-double] [\FontAwesomeSymbol{f227}]
- \definesymbol [mars-stroke] [\FontAwesomeSymbol{f229}]
- \definesymbol [mars-stroke-h] [\FontAwesomeSymbol{f22b}]
- \definesymbol [mars-stroke-v] [\FontAwesomeSymbol{f22a}]
- \definesymbol [maxcdn] [\FontAwesomeSymbol{f136}]
- \definesymbol [meanpath] [\FontAwesomeSymbol{f20c}]
- \definesymbol [medium] [\FontAwesomeSymbol{f23a}]
- \definesymbol [medkit] [\FontAwesomeSymbol{f0fa}]
- \definesymbol [meh-o] [\FontAwesomeSymbol{f11a}]
- \definesymbol [mercury] [\FontAwesomeSymbol{f223}]
- \definesymbol [microphone] [\FontAwesomeSymbol{f130}]
- \definesymbol [microphone-slash] [\FontAwesomeSymbol{f131}]
- \definesymbol [minus] [\FontAwesomeSymbol{f068}]
- \definesymbol [minus-circle] [\FontAwesomeSymbol{f056}]
- \definesymbol [minus-square] [\FontAwesomeSymbol{f146}]
- \definesymbol [minus-square-o] [\FontAwesomeSymbol{f147}]
- \definesymbol [mixcloud] [\FontAwesomeSymbol{f289}]
- \definesymbol [mobile] [\FontAwesomeSymbol{f10b}]
- \definesymbol [mobile-phone] [\FontAwesomeSymbol{f10b}]
- \definesymbol [modx] [\FontAwesomeSymbol{f285}]
- \definesymbol [money] [\FontAwesomeSymbol{f0d6}]
- \definesymbol [moon-o] [\FontAwesomeSymbol{f186}]
- \definesymbol [mortar-board] [\FontAwesomeSymbol{f19d}]
- \definesymbol [motorcycle] [\FontAwesomeSymbol{f21c}]
- \definesymbol [mouse-pointer] [\FontAwesomeSymbol{f245}]
- \definesymbol [music] [\FontAwesomeSymbol{f001}]
- \definesymbol [navicon] [\FontAwesomeSymbol{f0c9}]
- \definesymbol [neuter] [\FontAwesomeSymbol{f22c}]
- \definesymbol [newspaper-o] [\FontAwesomeSymbol{f1ea}]
- \definesymbol [object-group] [\FontAwesomeSymbol{f247}]
- \definesymbol [object-ungroup] [\FontAwesomeSymbol{f248}]
- \definesymbol [odnoklassniki] [\FontAwesomeSymbol{f263}]
- \definesymbol [odnoklassniki-square] [\FontAwesomeSymbol{f264}]
- \definesymbol [opencart] [\FontAwesomeSymbol{f23d}]
- \definesymbol [openid] [\FontAwesomeSymbol{f19b}]
- \definesymbol [opera] [\FontAwesomeSymbol{f26a}]
- \definesymbol [optin-monster] [\FontAwesomeSymbol{f23c}]
- \definesymbol [outdent] [\FontAwesomeSymbol{f03b}]
- \definesymbol [pagelines] [\FontAwesomeSymbol{f18c}]
- \definesymbol [paint-brush] [\FontAwesomeSymbol{f1fc}]
- \definesymbol [paper-plane] [\FontAwesomeSymbol{f1d8}]
- \definesymbol [paper-plane-o] [\FontAwesomeSymbol{f1d9}]
- \definesymbol [paperclip] [\FontAwesomeSymbol{f0c6}]
- \definesymbol [paragraph] [\FontAwesomeSymbol{f1dd}]
- \definesymbol [paste] [\FontAwesomeSymbol{f0ea}]
- \definesymbol [pause] [\FontAwesomeSymbol{f04c}]
- \definesymbol [pause-circle] [\FontAwesomeSymbol{f28b}]
- \definesymbol [pause-circle-o] [\FontAwesomeSymbol{f28c}]
- \definesymbol [paw] [\FontAwesomeSymbol{f1b0}]
- \definesymbol [paypal] [\FontAwesomeSymbol{f1ed}]
- \definesymbol [pencil] [\FontAwesomeSymbol{f040}]
- \definesymbol [pencil-square] [\FontAwesomeSymbol{f14b}]
- \definesymbol [pencil-square-o] [\FontAwesomeSymbol{f044}]
- \definesymbol [percent] [\FontAwesomeSymbol{f295}]
- \definesymbol [phone] [\FontAwesomeSymbol{f095}]
- \definesymbol [phone-square] [\FontAwesomeSymbol{f098}]
- \definesymbol [photo] [\FontAwesomeSymbol{f03e}]
- \definesymbol [picture-o] [\FontAwesomeSymbol{f03e}]
- \definesymbol [pie-chart] [\FontAwesomeSymbol{f200}]
- \definesymbol [pied-piper] [\FontAwesomeSymbol{f2ae}]
- \definesymbol [pied-piper-alt] [\FontAwesomeSymbol{f1a8}]
- \definesymbol [pied-piper-pp] [\FontAwesomeSymbol{f1a7}]
- \definesymbol [pinterest] [\FontAwesomeSymbol{f0d2}]
- \definesymbol [pinterest-p] [\FontAwesomeSymbol{f231}]
- \definesymbol [pinterest-square] [\FontAwesomeSymbol{f0d3}]
- \definesymbol [plane] [\FontAwesomeSymbol{f072}]
- \definesymbol [play] [\FontAwesomeSymbol{f04b}]
- \definesymbol [play-circle] [\FontAwesomeSymbol{f144}]
- \definesymbol [play-circle-o] [\FontAwesomeSymbol{f01d}]
- \definesymbol [plug] [\FontAwesomeSymbol{f1e6}]
- \definesymbol [plus] [\FontAwesomeSymbol{f067}]
- \definesymbol [plus-circle] [\FontAwesomeSymbol{f055}]
- \definesymbol [plus-square] [\FontAwesomeSymbol{f0fe}]
- \definesymbol [plus-square-o] [\FontAwesomeSymbol{f196}]
- \definesymbol [power-off] [\FontAwesomeSymbol{f011}]
- \definesymbol [print] [\FontAwesomeSymbol{f02f}]
- \definesymbol [product-hunt] [\FontAwesomeSymbol{f288}]
- \definesymbol [puzzle-piece] [\FontAwesomeSymbol{f12e}]
- \definesymbol [qq] [\FontAwesomeSymbol{f1d6}]
- \definesymbol [qrcode] [\FontAwesomeSymbol{f029}]
- \definesymbol [question] [\FontAwesomeSymbol{f128}]
- \definesymbol [question-circle] [\FontAwesomeSymbol{f059}]
- \definesymbol [question-circle-o] [\FontAwesomeSymbol{f29c}]
- \definesymbol [quote-left] [\FontAwesomeSymbol{f10d}]
- \definesymbol [quote-right] [\FontAwesomeSymbol{f10e}]
- \definesymbol [ra] [\FontAwesomeSymbol{f1d0}]
- \definesymbol [random] [\FontAwesomeSymbol{f074}]
- \definesymbol [rebel] [\FontAwesomeSymbol{f1d0}]
- \definesymbol [recycle] [\FontAwesomeSymbol{f1b8}]
- \definesymbol [reddit] [\FontAwesomeSymbol{f1a1}]
- \definesymbol [reddit-alien] [\FontAwesomeSymbol{f281}]
- \definesymbol [reddit-square] [\FontAwesomeSymbol{f1a2}]
- \definesymbol [refresh] [\FontAwesomeSymbol{f021}]
- \definesymbol [registered] [\FontAwesomeSymbol{f25d}]
- \definesymbol [remove] [\FontAwesomeSymbol{f00d}]
- \definesymbol [renren] [\FontAwesomeSymbol{f18b}]
- \definesymbol [reorder] [\FontAwesomeSymbol{f0c9}]
- \definesymbol [repeat] [\FontAwesomeSymbol{f01e}]
- \definesymbol [reply] [\FontAwesomeSymbol{f112}]
- \definesymbol [reply-all] [\FontAwesomeSymbol{f122}]
- \definesymbol [resistance] [\FontAwesomeSymbol{f1d0}]
- \definesymbol [retweet] [\FontAwesomeSymbol{f079}]
- \definesymbol [rmb] [\FontAwesomeSymbol{f157}]
- \definesymbol [road] [\FontAwesomeSymbol{f018}]
- \definesymbol [rocket] [\FontAwesomeSymbol{f135}]
- \definesymbol [rotate-left] [\FontAwesomeSymbol{f0e2}]
- \definesymbol [rotate-right] [\FontAwesomeSymbol{f01e}]
- \definesymbol [rouble] [\FontAwesomeSymbol{f158}]
- \definesymbol [rss] [\FontAwesomeSymbol{f09e}]
- \definesymbol [rss-square] [\FontAwesomeSymbol{f143}]
- \definesymbol [rub] [\FontAwesomeSymbol{f158}]
- \definesymbol [ruble] [\FontAwesomeSymbol{f158}]
- \definesymbol [rupee] [\FontAwesomeSymbol{f156}]
- \definesymbol [safari] [\FontAwesomeSymbol{f267}]
- \definesymbol [save] [\FontAwesomeSymbol{f0c7}]
- \definesymbol [scissors] [\FontAwesomeSymbol{f0c4}]
- \definesymbol [scribd] [\FontAwesomeSymbol{f28a}]
- \definesymbol [search] [\FontAwesomeSymbol{f002}]
- \definesymbol [search-minus] [\FontAwesomeSymbol{f010}]
- \definesymbol [search-plus] [\FontAwesomeSymbol{f00e}]
- \definesymbol [sellsy] [\FontAwesomeSymbol{f213}]
- \definesymbol [send] [\FontAwesomeSymbol{f1d8}]
- \definesymbol [send-o] [\FontAwesomeSymbol{f1d9}]
- \definesymbol [server] [\FontAwesomeSymbol{f233}]
- \definesymbol [share] [\FontAwesomeSymbol{f064}]
- \definesymbol [share-alt] [\FontAwesomeSymbol{f1e0}]
- \definesymbol [share-alt-square] [\FontAwesomeSymbol{f1e1}]
- \definesymbol [share-square] [\FontAwesomeSymbol{f14d}]
- \definesymbol [share-square-o] [\FontAwesomeSymbol{f045}]
- \definesymbol [shekel] [\FontAwesomeSymbol{f20b}]
- \definesymbol [sheqel] [\FontAwesomeSymbol{f20b}]
- \definesymbol [shield] [\FontAwesomeSymbol{f132}]
- \definesymbol [ship] [\FontAwesomeSymbol{f21a}]
- \definesymbol [shirtsinbulk] [\FontAwesomeSymbol{f214}]
- \definesymbol [shopping-bag] [\FontAwesomeSymbol{f290}]
- \definesymbol [shopping-basket] [\FontAwesomeSymbol{f291}]
- \definesymbol [shopping-cart] [\FontAwesomeSymbol{f07a}]
- \definesymbol [sign-in] [\FontAwesomeSymbol{f090}]
- \definesymbol [sign-language] [\FontAwesomeSymbol{f2a7}]
- \definesymbol [sign-out] [\FontAwesomeSymbol{f08b}]
- \definesymbol [signal] [\FontAwesomeSymbol{f012}]
- \definesymbol [signing] [\FontAwesomeSymbol{f2a7}]
- \definesymbol [simplybuilt] [\FontAwesomeSymbol{f215}]
- \definesymbol [sitemap] [\FontAwesomeSymbol{f0e8}]
- \definesymbol [skyatlas] [\FontAwesomeSymbol{f216}]
- \definesymbol [skype] [\FontAwesomeSymbol{f17e}]
- \definesymbol [slack] [\FontAwesomeSymbol{f198}]
- \definesymbol [sliders] [\FontAwesomeSymbol{f1de}]
- \definesymbol [slideshare] [\FontAwesomeSymbol{f1e7}]
- \definesymbol [smile-o] [\FontAwesomeSymbol{f118}]
- \definesymbol [snapchat] [\FontAwesomeSymbol{f2ab}]
- \definesymbol [snapchat-ghost] [\FontAwesomeSymbol{f2ac}]
- \definesymbol [snapchat-square] [\FontAwesomeSymbol{f2ad}]
- \definesymbol [soccer-ball-o] [\FontAwesomeSymbol{f1e3}]
- \definesymbol [sort] [\FontAwesomeSymbol{f0dc}]
- \definesymbol [sort-alpha-asc] [\FontAwesomeSymbol{f15d}]
- \definesymbol [sort-alpha-desc] [\FontAwesomeSymbol{f15e}]
- \definesymbol [sort-amount-asc] [\FontAwesomeSymbol{f160}]
- \definesymbol [sort-amount-desc] [\FontAwesomeSymbol{f161}]
- \definesymbol [sort-asc] [\FontAwesomeSymbol{f0de}]
- \definesymbol [sort-desc] [\FontAwesomeSymbol{f0dd}]
- \definesymbol [sort-down] [\FontAwesomeSymbol{f0dd}]
- \definesymbol [sort-numeric-asc] [\FontAwesomeSymbol{f162}]
- \definesymbol [sort-numeric-desc] [\FontAwesomeSymbol{f163}]
- \definesymbol [sort-up] [\FontAwesomeSymbol{f0de}]
- \definesymbol [soundcloud] [\FontAwesomeSymbol{f1be}]
- \definesymbol [space-shuttle] [\FontAwesomeSymbol{f197}]
- \definesymbol [spinner] [\FontAwesomeSymbol{f110}]
- \definesymbol [spoon] [\FontAwesomeSymbol{f1b1}]
- \definesymbol [spotify] [\FontAwesomeSymbol{f1bc}]
- \definesymbol [square] [\FontAwesomeSymbol{f0c8}]
- \definesymbol [square-o] [\FontAwesomeSymbol{f096}]
- \definesymbol [stack-exchange] [\FontAwesomeSymbol{f18d}]
- \definesymbol [stack-overflow] [\FontAwesomeSymbol{f16c}]
- \definesymbol [star] [\FontAwesomeSymbol{f005}]
- \definesymbol [star-half] [\FontAwesomeSymbol{f089}]
- \definesymbol [star-half-empty] [\FontAwesomeSymbol{f123}]
- \definesymbol [star-half-full] [\FontAwesomeSymbol{f123}]
- \definesymbol [star-half-o] [\FontAwesomeSymbol{f123}]
- \definesymbol [star-o] [\FontAwesomeSymbol{f006}]
- \definesymbol [steam] [\FontAwesomeSymbol{f1b6}]
- \definesymbol [steam-square] [\FontAwesomeSymbol{f1b7}]
- \definesymbol [step-backward] [\FontAwesomeSymbol{f048}]
- \definesymbol [step-forward] [\FontAwesomeSymbol{f051}]
- \definesymbol [stethoscope] [\FontAwesomeSymbol{f0f1}]
- \definesymbol [sticky-note] [\FontAwesomeSymbol{f249}]
- \definesymbol [sticky-note-o] [\FontAwesomeSymbol{f24a}]
- \definesymbol [stop] [\FontAwesomeSymbol{f04d}]
- \definesymbol [stop-circle] [\FontAwesomeSymbol{f28d}]
- \definesymbol [stop-circle-o] [\FontAwesomeSymbol{f28e}]
- \definesymbol [street-view] [\FontAwesomeSymbol{f21d}]
- \definesymbol [strikethrough] [\FontAwesomeSymbol{f0cc}]
- \definesymbol [stumbleupon] [\FontAwesomeSymbol{f1a4}]
- \definesymbol [stumbleupon-circle] [\FontAwesomeSymbol{f1a3}]
- \definesymbol [subscript] [\FontAwesomeSymbol{f12c}]
- \definesymbol [subway] [\FontAwesomeSymbol{f239}]
- \definesymbol [suitcase] [\FontAwesomeSymbol{f0f2}]
- \definesymbol [sun-o] [\FontAwesomeSymbol{f185}]
- \definesymbol [superscript] [\FontAwesomeSymbol{f12b}]
- \definesymbol [support] [\FontAwesomeSymbol{f1cd}]
- \definesymbol [table] [\FontAwesomeSymbol{f0ce}]
- \definesymbol [tablet] [\FontAwesomeSymbol{f10a}]
- \definesymbol [tachometer] [\FontAwesomeSymbol{f0e4}]
- \definesymbol [tag] [\FontAwesomeSymbol{f02b}]
- \definesymbol [tags] [\FontAwesomeSymbol{f02c}]
- \definesymbol [tasks] [\FontAwesomeSymbol{f0ae}]
- \definesymbol [taxi] [\FontAwesomeSymbol{f1ba}]
- \definesymbol [television] [\FontAwesomeSymbol{f26c}]
- \definesymbol [tencent-weibo] [\FontAwesomeSymbol{f1d5}]
- \definesymbol [terminal] [\FontAwesomeSymbol{f120}]
- \definesymbol [text-height] [\FontAwesomeSymbol{f034}]
- \definesymbol [text-width] [\FontAwesomeSymbol{f035}]
- \definesymbol [th] [\FontAwesomeSymbol{f00a}]
- \definesymbol [th-large] [\FontAwesomeSymbol{f009}]
- \definesymbol [th-list] [\FontAwesomeSymbol{f00b}]
- \definesymbol [themeisle] [\FontAwesomeSymbol{f2b2}]
- \definesymbol [thumb-tack] [\FontAwesomeSymbol{f08d}]
- \definesymbol [thumbs-down] [\FontAwesomeSymbol{f165}]
- \definesymbol [thumbs-o-down] [\FontAwesomeSymbol{f088}]
- \definesymbol [thumbs-o-up] [\FontAwesomeSymbol{f087}]
- \definesymbol [thumbs-up] [\FontAwesomeSymbol{f164}]
- \definesymbol [ticket] [\FontAwesomeSymbol{f145}]
- \definesymbol [times] [\FontAwesomeSymbol{f00d}]
- \definesymbol [times-circle] [\FontAwesomeSymbol{f057}]
- \definesymbol [times-circle-o] [\FontAwesomeSymbol{f05c}]
- \definesymbol [tint] [\FontAwesomeSymbol{f043}]
- \definesymbol [toggle-down] [\FontAwesomeSymbol{f150}]
- \definesymbol [toggle-left] [\FontAwesomeSymbol{f191}]
- \definesymbol [toggle-off] [\FontAwesomeSymbol{f204}]
- \definesymbol [toggle-on] [\FontAwesomeSymbol{f205}]
- \definesymbol [toggle-right] [\FontAwesomeSymbol{f152}]
- \definesymbol [toggle-up] [\FontAwesomeSymbol{f151}]
- \definesymbol [trademark] [\FontAwesomeSymbol{f25c}]
- \definesymbol [train] [\FontAwesomeSymbol{f238}]
- \definesymbol [transgender] [\FontAwesomeSymbol{f224}]
- \definesymbol [transgender-alt] [\FontAwesomeSymbol{f225}]
- \definesymbol [trash] [\FontAwesomeSymbol{f1f8}]
- \definesymbol [trash-o] [\FontAwesomeSymbol{f014}]
- \definesymbol [tree] [\FontAwesomeSymbol{f1bb}]
- \definesymbol [trello] [\FontAwesomeSymbol{f181}]
- \definesymbol [tripadvisor] [\FontAwesomeSymbol{f262}]
- \definesymbol [trophy] [\FontAwesomeSymbol{f091}]
- \definesymbol [truck] [\FontAwesomeSymbol{f0d1}]
- \definesymbol [try] [\FontAwesomeSymbol{f195}]
- \definesymbol [tty] [\FontAwesomeSymbol{f1e4}]
- \definesymbol [tumblr] [\FontAwesomeSymbol{f173}]
- \definesymbol [tumblr-square] [\FontAwesomeSymbol{f174}]
- \definesymbol [turkish-lira] [\FontAwesomeSymbol{f195}]
- \definesymbol [tv] [\FontAwesomeSymbol{f26c}]
- \definesymbol [twitch] [\FontAwesomeSymbol{f1e8}]
- \definesymbol [twitter] [\FontAwesomeSymbol{f099}]
- \definesymbol [twitter-square] [\FontAwesomeSymbol{f081}]
- \definesymbol [umbrella] [\FontAwesomeSymbol{f0e9}]
- \definesymbol [underline] [\FontAwesomeSymbol{f0cd}]
- \definesymbol [undo] [\FontAwesomeSymbol{f0e2}]
- \definesymbol [universal-access] [\FontAwesomeSymbol{f29a}]
- \definesymbol [university] [\FontAwesomeSymbol{f19c}]
- \definesymbol [unlink] [\FontAwesomeSymbol{f127}]
- \definesymbol [unlock] [\FontAwesomeSymbol{f09c}]
- \definesymbol [unlock-alt] [\FontAwesomeSymbol{f13e}]
- \definesymbol [unsorted] [\FontAwesomeSymbol{f0dc}]
- \definesymbol [upload] [\FontAwesomeSymbol{f093}]
- \definesymbol [usb] [\FontAwesomeSymbol{f287}]
- \definesymbol [usd] [\FontAwesomeSymbol{f155}]
- \definesymbol [user] [\FontAwesomeSymbol{f007}]
- \definesymbol [user-md] [\FontAwesomeSymbol{f0f0}]
- \definesymbol [user-plus] [\FontAwesomeSymbol{f234}]
- \definesymbol [user-secret] [\FontAwesomeSymbol{f21b}]
- \definesymbol [user-times] [\FontAwesomeSymbol{f235}]
- \definesymbol [users] [\FontAwesomeSymbol{f0c0}]
- \definesymbol [venus] [\FontAwesomeSymbol{f221}]
- \definesymbol [venus-double] [\FontAwesomeSymbol{f226}]
- \definesymbol [venus-mars] [\FontAwesomeSymbol{f228}]
- \definesymbol [viacoin] [\FontAwesomeSymbol{f237}]
- \definesymbol [viadeo] [\FontAwesomeSymbol{f2a9}]
- \definesymbol [viadeo-square] [\FontAwesomeSymbol{f2aa}]
- \definesymbol [video-camera] [\FontAwesomeSymbol{f03d}]
- \definesymbol [vimeo] [\FontAwesomeSymbol{f27d}]
- \definesymbol [vimeo-square] [\FontAwesomeSymbol{f194}]
- \definesymbol [vine] [\FontAwesomeSymbol{f1ca}]
- \definesymbol [vk] [\FontAwesomeSymbol{f189}]
- \definesymbol [volume-control-phone] [\FontAwesomeSymbol{f2a0}]
- \definesymbol [volume-down] [\FontAwesomeSymbol{f027}]
- \definesymbol [volume-off] [\FontAwesomeSymbol{f026}]
- \definesymbol [volume-up] [\FontAwesomeSymbol{f028}]
- \definesymbol [warning] [\FontAwesomeSymbol{f071}]
- \definesymbol [wechat] [\FontAwesomeSymbol{f1d7}]
- \definesymbol [weibo] [\FontAwesomeSymbol{f18a}]
- \definesymbol [weixin] [\FontAwesomeSymbol{f1d7}]
- \definesymbol [whatsapp] [\FontAwesomeSymbol{f232}]
- \definesymbol [wheelchair] [\FontAwesomeSymbol{f193}]
- \definesymbol [wheelchair-alt] [\FontAwesomeSymbol{f29b}]
- \definesymbol [wifi] [\FontAwesomeSymbol{f1eb}]
- \definesymbol [wikipedia-w] [\FontAwesomeSymbol{f266}]
- \definesymbol [windows] [\FontAwesomeSymbol{f17a}]
- \definesymbol [won] [\FontAwesomeSymbol{f159}]
- \definesymbol [wordpress] [\FontAwesomeSymbol{f19a}]
- \definesymbol [wpbeginner] [\FontAwesomeSymbol{f297}]
- \definesymbol [wpforms] [\FontAwesomeSymbol{f298}]
- \definesymbol [wrench] [\FontAwesomeSymbol{f0ad}]
- \definesymbol [xing] [\FontAwesomeSymbol{f168}]
- \definesymbol [xing-square] [\FontAwesomeSymbol{f169}]
- \definesymbol [y-combinator] [\FontAwesomeSymbol{f23b}]
- \definesymbol [y-combinator-square] [\FontAwesomeSymbol{f1d4}]
- \definesymbol [yahoo] [\FontAwesomeSymbol{f19e}]
- \definesymbol [yc] [\FontAwesomeSymbol{f23b}]
- \definesymbol [yc-square] [\FontAwesomeSymbol{f1d4}]
- \definesymbol [yelp] [\FontAwesomeSymbol{f1e9}]
- \definesymbol [yen] [\FontAwesomeSymbol{f157}]
- \definesymbol [yoast] [\FontAwesomeSymbol{f2b1}]
- \definesymbol [youtube] [\FontAwesomeSymbol{f167}]
- \definesymbol [youtube-play] [\FontAwesomeSymbol{f16a}]
- \definesymbol [youtube-square] [\FontAwesomeSymbol{f166}]
+ \definesymbol [wheelchair] [\FontAwesomeSymbol{_378}]
+
+% \definesymbol [500px] [\FontAwesomeSymbol{f26e}]
+% \definesymbol [adjust] [\FontAwesomeSymbol{f042}]
+% \definesymbol [adn] [\FontAwesomeSymbol{f170}]
+% \definesymbol [align-center] [\FontAwesomeSymbol{f037}]
+% \definesymbol [align-justify] [\FontAwesomeSymbol{f039}]
+% \definesymbol [align-left] [\FontAwesomeSymbol{f036}]
+% \definesymbol [align-right] [\FontAwesomeSymbol{f038}]
+% \definesymbol [amazon] [\FontAwesomeSymbol{f270}]
+% \definesymbol [ambulance] [\FontAwesomeSymbol{f0f9}]
+% \definesymbol [american-sign-language-interpreting] [\FontAwesomeSymbol{f2a3}]
+% \definesymbol [anchor] [\FontAwesomeSymbol{f13d}]
+% \definesymbol [android] [\FontAwesomeSymbol{f17b}]
+% \definesymbol [angellist] [\FontAwesomeSymbol{f209}]
+% \definesymbol [angle-double-down] [\FontAwesomeSymbol{f103}]
+% \definesymbol [angle-double-left] [\FontAwesomeSymbol{f100}]
+% \definesymbol [angle-double-right] [\FontAwesomeSymbol{f101}]
+% \definesymbol [angle-double-up] [\FontAwesomeSymbol{f102}]
+% \definesymbol [angle-down] [\FontAwesomeSymbol{f107}]
+% \definesymbol [angle-left] [\FontAwesomeSymbol{f104}]
+% \definesymbol [angle-right] [\FontAwesomeSymbol{f105}]
+% \definesymbol [angle-up] [\FontAwesomeSymbol{f106}]
+% \definesymbol [apple] [\FontAwesomeSymbol{f179}]
+% \definesymbol [archive] [\FontAwesomeSymbol{f187}]
+% \definesymbol [area-chart] [\FontAwesomeSymbol{f1fe}]
+% \definesymbol [arrow-circle-down] [\FontAwesomeSymbol{f0ab}]
+% \definesymbol [arrow-circle-left] [\FontAwesomeSymbol{f0a8}]
+% \definesymbol [arrow-circle-o-down] [\FontAwesomeSymbol{f01a}]
+% \definesymbol [arrow-circle-o-left] [\FontAwesomeSymbol{f190}]
+% \definesymbol [arrow-circle-o-right] [\FontAwesomeSymbol{f18e}]
+% \definesymbol [arrow-circle-o-up] [\FontAwesomeSymbol{f01b}]
+% \definesymbol [arrow-circle-right] [\FontAwesomeSymbol{f0a9}]
+% \definesymbol [arrow-circle-up] [\FontAwesomeSymbol{f0aa}]
+% \definesymbol [arrow-down] [\FontAwesomeSymbol{f063}]
+% \definesymbol [arrow-left] [\FontAwesomeSymbol{f060}]
+% \definesymbol [arrow-right] [\FontAwesomeSymbol{f061}]
+% \definesymbol [arrow-up] [\FontAwesomeSymbol{f062}]
+% \definesymbol [arrows] [\FontAwesomeSymbol{f047}]
+% \definesymbol [arrows-alt] [\FontAwesomeSymbol{f0b2}]
+% \definesymbol [arrows-h] [\FontAwesomeSymbol{f07e}]
+% \definesymbol [arrows-v] [\FontAwesomeSymbol{f07d}]
+% \definesymbol [asl-interpreting] [\FontAwesomeSymbol{f2a3}]
+% \definesymbol [assistive-listening-systems] [\FontAwesomeSymbol{f2a2}]
+% \definesymbol [asterisk] [\FontAwesomeSymbol{f069}]
+% \definesymbol [at] [\FontAwesomeSymbol{f1fa}]
+% \definesymbol [audio-description] [\FontAwesomeSymbol{f29e}]
+% \definesymbol [automobile] [\FontAwesomeSymbol{f1b9}]
+% \definesymbol [backward] [\FontAwesomeSymbol{f04a}]
+% \definesymbol [balance-scale] [\FontAwesomeSymbol{f24e}]
+% \definesymbol [ban] [\FontAwesomeSymbol{f05e}]
+% \definesymbol [bank] [\FontAwesomeSymbol{f19c}]
+% \definesymbol [bar-chart] [\FontAwesomeSymbol{f080}]
+% \definesymbol [bar-chart-o] [\FontAwesomeSymbol{f080}]
+% \definesymbol [barcode] [\FontAwesomeSymbol{f02a}]
+% \definesymbol [bars] [\FontAwesomeSymbol{f0c9}]
+% \definesymbol [battery-0] [\FontAwesomeSymbol{f244}]
+% \definesymbol [battery-1] [\FontAwesomeSymbol{f243}]
+% \definesymbol [battery-2] [\FontAwesomeSymbol{f242}]
+% \definesymbol [battery-3] [\FontAwesomeSymbol{f241}]
+% \definesymbol [battery-4] [\FontAwesomeSymbol{f240}]
+% \definesymbol [battery-empty] [\FontAwesomeSymbol{f244}]
+% \definesymbol [battery-full] [\FontAwesomeSymbol{f240}]
+% \definesymbol [battery-half] [\FontAwesomeSymbol{f242}]
+% \definesymbol [battery-quarter] [\FontAwesomeSymbol{f243}]
+% \definesymbol [battery-three-quarters] [\FontAwesomeSymbol{f241}]
+% \definesymbol [bed] [\FontAwesomeSymbol{f236}]
+% \definesymbol [beer] [\FontAwesomeSymbol{f0fc}]
+% \definesymbol [behance] [\FontAwesomeSymbol{f1b4}]
+% \definesymbol [behance-square] [\FontAwesomeSymbol{f1b5}]
+% \definesymbol [bell] [\FontAwesomeSymbol{f0f3}]
+% \definesymbol [bell-o] [\FontAwesomeSymbol{f0a2}]
+% \definesymbol [bell-slash] [\FontAwesomeSymbol{f1f6}]
+% \definesymbol [bell-slash-o] [\FontAwesomeSymbol{f1f7}]
+% \definesymbol [bicycle] [\FontAwesomeSymbol{f206}]
+% \definesymbol [binoculars] [\FontAwesomeSymbol{f1e5}]
+% \definesymbol [birthday-cake] [\FontAwesomeSymbol{f1fd}]
+% \definesymbol [bitbucket] [\FontAwesomeSymbol{f171}]
+% \definesymbol [bitbucket-square] [\FontAwesomeSymbol{f172}]
+% \definesymbol [bitcoin] [\FontAwesomeSymbol{f15a}]
+% \definesymbol [black-tie] [\FontAwesomeSymbol{f27e}]
+% \definesymbol [blind] [\FontAwesomeSymbol{f29d}]
+% \definesymbol [bluetooth] [\FontAwesomeSymbol{f293}]
+% \definesymbol [bluetooth-b] [\FontAwesomeSymbol{f294}]
+% \definesymbol [bold] [\FontAwesomeSymbol{f032}]
+% \definesymbol [bolt] [\FontAwesomeSymbol{f0e7}]
+% \definesymbol [bomb] [\FontAwesomeSymbol{f1e2}]
+% \definesymbol [book] [\FontAwesomeSymbol{f02d}]
+% \definesymbol [bookmark] [\FontAwesomeSymbol{f02e}]
+% \definesymbol [bookmark-o] [\FontAwesomeSymbol{f097}]
+% \definesymbol [braille] [\FontAwesomeSymbol{f2a1}]
+% \definesymbol [briefcase] [\FontAwesomeSymbol{f0b1}]
+% \definesymbol [btc] [\FontAwesomeSymbol{f15a}]
+% \definesymbol [bug] [\FontAwesomeSymbol{f188}]
+% \definesymbol [building] [\FontAwesomeSymbol{f1ad}]
+% \definesymbol [building-o] [\FontAwesomeSymbol{f0f7}]
+% \definesymbol [bullhorn] [\FontAwesomeSymbol{f0a1}]
+% \definesymbol [bullseye] [\FontAwesomeSymbol{f140}]
+% \definesymbol [bus] [\FontAwesomeSymbol{f207}]
+% \definesymbol [buysellads] [\FontAwesomeSymbol{f20d}]
+% \definesymbol [cab] [\FontAwesomeSymbol{f1ba}]
+% \definesymbol [calculator] [\FontAwesomeSymbol{f1ec}]
+% \definesymbol [calendar] [\FontAwesomeSymbol{f073}]
+% \definesymbol [calendar-check-o] [\FontAwesomeSymbol{f274}]
+% \definesymbol [calendar-minus-o] [\FontAwesomeSymbol{f272}]
+% \definesymbol [calendar-o] [\FontAwesomeSymbol{f133}]
+% \definesymbol [calendar-plus-o] [\FontAwesomeSymbol{f271}]
+% \definesymbol [calendar-times-o] [\FontAwesomeSymbol{f273}]
+% \definesymbol [camera] [\FontAwesomeSymbol{f030}]
+% \definesymbol [camera-retro] [\FontAwesomeSymbol{f083}]
+% \definesymbol [car] [\FontAwesomeSymbol{f1b9}]
+% \definesymbol [caret-down] [\FontAwesomeSymbol{f0d7}]
+% \definesymbol [caret-left] [\FontAwesomeSymbol{f0d9}]
+% \definesymbol [caret-right] [\FontAwesomeSymbol{f0da}]
+% \definesymbol [caret-square-o-down] [\FontAwesomeSymbol{f150}]
+% \definesymbol [caret-square-o-left] [\FontAwesomeSymbol{f191}]
+% \definesymbol [caret-square-o-right] [\FontAwesomeSymbol{f152}]
+% \definesymbol [caret-square-o-up] [\FontAwesomeSymbol{f151}]
+% \definesymbol [caret-up] [\FontAwesomeSymbol{f0d8}]
+% \definesymbol [cart-arrow-down] [\FontAwesomeSymbol{f218}]
+% \definesymbol [cart-plus] [\FontAwesomeSymbol{f217}]
+% \definesymbol [cc] [\FontAwesomeSymbol{f20a}]
+% \definesymbol [cc-amex] [\FontAwesomeSymbol{f1f3}]
+% \definesymbol [cc-diners-club] [\FontAwesomeSymbol{f24c}]
+% \definesymbol [cc-discover] [\FontAwesomeSymbol{f1f2}]
+% \definesymbol [cc-jcb] [\FontAwesomeSymbol{f24b}]
+% \definesymbol [cc-mastercard] [\FontAwesomeSymbol{f1f1}]
+% \definesymbol [cc-paypal] [\FontAwesomeSymbol{f1f4}]
+% \definesymbol [cc-stripe] [\FontAwesomeSymbol{f1f5}]
+% \definesymbol [cc-visa] [\FontAwesomeSymbol{f1f0}]
+% \definesymbol [certificate] [\FontAwesomeSymbol{f0a3}]
+% \definesymbol [chain] [\FontAwesomeSymbol{f0c1}]
+% \definesymbol [chain-broken] [\FontAwesomeSymbol{f127}]
+% \definesymbol [check] [\FontAwesomeSymbol{f00c}]
+% \definesymbol [check-circle] [\FontAwesomeSymbol{f058}]
+% \definesymbol [check-circle-o] [\FontAwesomeSymbol{f05d}]
+% \definesymbol [check-square] [\FontAwesomeSymbol{f14a}]
+% \definesymbol [check-square-o] [\FontAwesomeSymbol{f046}]
+% \definesymbol [chevron-circle-down] [\FontAwesomeSymbol{f13a}]
+% \definesymbol [chevron-circle-left] [\FontAwesomeSymbol{f137}]
+% \definesymbol [chevron-circle-right] [\FontAwesomeSymbol{f138}]
+% \definesymbol [chevron-circle-up] [\FontAwesomeSymbol{f139}]
+% \definesymbol [chevron-down] [\FontAwesomeSymbol{f078}]
+% \definesymbol [chevron-left] [\FontAwesomeSymbol{f053}]
+% \definesymbol [chevron-right] [\FontAwesomeSymbol{f054}]
+% \definesymbol [chevron-up] [\FontAwesomeSymbol{f077}]
+% \definesymbol [child] [\FontAwesomeSymbol{f1ae}]
+% \definesymbol [chrome] [\FontAwesomeSymbol{f268}]
+% \definesymbol [circle] [\FontAwesomeSymbol{f111}]
+% \definesymbol [circle-o] [\FontAwesomeSymbol{f10c}]
+% \definesymbol [circle-o-notch] [\FontAwesomeSymbol{f1ce}]
+% \definesymbol [circle-thin] [\FontAwesomeSymbol{f1db}]
+% \definesymbol [clipboard] [\FontAwesomeSymbol{f0ea}]
+% \definesymbol [clock-o] [\FontAwesomeSymbol{f017}]
+% \definesymbol [clone] [\FontAwesomeSymbol{f24d}]
+% \definesymbol [close] [\FontAwesomeSymbol{f00d}]
+% \definesymbol [cloud] [\FontAwesomeSymbol{f0c2}]
+% \definesymbol [cloud-download] [\FontAwesomeSymbol{f0ed}]
+% \definesymbol [cloud-upload] [\FontAwesomeSymbol{f0ee}]
+% \definesymbol [cny] [\FontAwesomeSymbol{f157}]
+% \definesymbol [code] [\FontAwesomeSymbol{f121}]
+% \definesymbol [code-fork] [\FontAwesomeSymbol{f126}]
+% \definesymbol [codepen] [\FontAwesomeSymbol{f1cb}]
+% \definesymbol [codiepie] [\FontAwesomeSymbol{f284}]
+% \definesymbol [coffee] [\FontAwesomeSymbol{f0f4}]
+% \definesymbol [cog] [\FontAwesomeSymbol{f013}]
+% \definesymbol [cogs] [\FontAwesomeSymbol{f085}]
+% \definesymbol [columns] [\FontAwesomeSymbol{f0db}]
+% \definesymbol [comment] [\FontAwesomeSymbol{f075}]
+% \definesymbol [comment-o] [\FontAwesomeSymbol{f0e5}]
+% \definesymbol [commenting] [\FontAwesomeSymbol{f27a}]
+% \definesymbol [commenting-o] [\FontAwesomeSymbol{f27b}]
+% \definesymbol [comments] [\FontAwesomeSymbol{f086}]
+% \definesymbol [comments-o] [\FontAwesomeSymbol{f0e6}]
+% \definesymbol [compass] [\FontAwesomeSymbol{f14e}]
+% \definesymbol [compress] [\FontAwesomeSymbol{f066}]
+% \definesymbol [connectdevelop] [\FontAwesomeSymbol{f20e}]
+% \definesymbol [contao] [\FontAwesomeSymbol{f26d}]
+% \definesymbol [copy] [\FontAwesomeSymbol{f0c5}]
+% \definesymbol [copyright] [\FontAwesomeSymbol{f1f9}]
+% \definesymbol [creative-commons] [\FontAwesomeSymbol{f25e}]
+% \definesymbol [credit-card] [\FontAwesomeSymbol{f09d}]
+% \definesymbol [credit-card-alt] [\FontAwesomeSymbol{f283}]
+% \definesymbol [crop] [\FontAwesomeSymbol{f125}]
+% \definesymbol [crosshairs] [\FontAwesomeSymbol{f05b}]
+% \definesymbol [css3] [\FontAwesomeSymbol{f13c}]
+% \definesymbol [cube] [\FontAwesomeSymbol{f1b2}]
+% \definesymbol [cubes] [\FontAwesomeSymbol{f1b3}]
+% \definesymbol [cut] [\FontAwesomeSymbol{f0c4}]
+% \definesymbol [cutlery] [\FontAwesomeSymbol{f0f5}]
+% \definesymbol [dashboard] [\FontAwesomeSymbol{f0e4}]
+% \definesymbol [dashcube] [\FontAwesomeSymbol{f210}]
+% \definesymbol [database] [\FontAwesomeSymbol{f1c0}]
+% \definesymbol [deaf] [\FontAwesomeSymbol{f2a4}]
+% \definesymbol [deafness] [\FontAwesomeSymbol{f2a4}]
+% \definesymbol [dedent] [\FontAwesomeSymbol{f03b}]
+% \definesymbol [delicious] [\FontAwesomeSymbol{f1a5}]
+% \definesymbol [desktop] [\FontAwesomeSymbol{f108}]
+% \definesymbol [deviantart] [\FontAwesomeSymbol{f1bd}]
+% \definesymbol [diamond] [\FontAwesomeSymbol{f219}]
+% \definesymbol [digg] [\FontAwesomeSymbol{f1a6}]
+% \definesymbol [dollar] [\FontAwesomeSymbol{f155}]
+% \definesymbol [dot-circle-o] [\FontAwesomeSymbol{f192}]
+% \definesymbol [download] [\FontAwesomeSymbol{f019}]
+% \definesymbol [dribbble] [\FontAwesomeSymbol{f17d}]
+% \definesymbol [dropbox] [\FontAwesomeSymbol{f16b}]
+% \definesymbol [drupal] [\FontAwesomeSymbol{f1a9}]
+% \definesymbol [edge] [\FontAwesomeSymbol{f282}]
+% \definesymbol [edit] [\FontAwesomeSymbol{f044}]
+% \definesymbol [eject] [\FontAwesomeSymbol{f052}]
+% \definesymbol [ellipsis-h] [\FontAwesomeSymbol{f141}]
+% \definesymbol [ellipsis-v] [\FontAwesomeSymbol{f142}]
+% \definesymbol [empire] [\FontAwesomeSymbol{f1d1}]
+% \definesymbol [envelope] [\FontAwesomeSymbol{f0e0}]
+% \definesymbol [envelope-o] [\FontAwesomeSymbol{f003}]
+% \definesymbol [envelope-square] [\FontAwesomeSymbol{f199}]
+% \definesymbol [envira] [\FontAwesomeSymbol{f299}]
+% \definesymbol [eraser] [\FontAwesomeSymbol{f12d}]
+% \definesymbol [eur] [\FontAwesomeSymbol{f153}]
+% \definesymbol [euro] [\FontAwesomeSymbol{f153}]
+% \definesymbol [exchange] [\FontAwesomeSymbol{f0ec}]
+% \definesymbol [exclamation] [\FontAwesomeSymbol{f12a}]
+% \definesymbol [exclamation-circle] [\FontAwesomeSymbol{f06a}]
+% \definesymbol [exclamation-triangle] [\FontAwesomeSymbol{f071}]
+% \definesymbol [expand] [\FontAwesomeSymbol{f065}]
+% \definesymbol [expeditedssl] [\FontAwesomeSymbol{f23e}]
+% \definesymbol [external-link] [\FontAwesomeSymbol{f08e}]
+% \definesymbol [external-link-square] [\FontAwesomeSymbol{f14c}]
+% \definesymbol [eye] [\FontAwesomeSymbol{f06e}]
+% \definesymbol [eye-slash] [\FontAwesomeSymbol{f070}]
+% \definesymbol [eyedropper] [\FontAwesomeSymbol{f1fb}]
+% \definesymbol [fa] [\FontAwesomeSymbol{f2b4}]
+% \definesymbol [facebook] [\FontAwesomeSymbol{f09a}]
+% \definesymbol [facebook-f] [\FontAwesomeSymbol{f09a}]
+% \definesymbol [facebook-official] [\FontAwesomeSymbol{f230}]
+% \definesymbol [facebook-square] [\FontAwesomeSymbol{f082}]
+% \definesymbol [fast-backward] [\FontAwesomeSymbol{f049}]
+% \definesymbol [fast-forward] [\FontAwesomeSymbol{f050}]
+% \definesymbol [fax] [\FontAwesomeSymbol{f1ac}]
+% \definesymbol [feed] [\FontAwesomeSymbol{f09e}]
+% \definesymbol [female] [\FontAwesomeSymbol{f182}]
+% \definesymbol [fighter-jet] [\FontAwesomeSymbol{f0fb}]
+% \definesymbol [file] [\FontAwesomeSymbol{f15b}]
+% \definesymbol [file-archive-o] [\FontAwesomeSymbol{f1c6}]
+% \definesymbol [file-audio-o] [\FontAwesomeSymbol{f1c7}]
+% \definesymbol [file-code-o] [\FontAwesomeSymbol{f1c9}]
+% \definesymbol [file-excel-o] [\FontAwesomeSymbol{f1c3}]
+% \definesymbol [file-image-o] [\FontAwesomeSymbol{f1c5}]
+% \definesymbol [file-movie-o] [\FontAwesomeSymbol{f1c8}]
+% \definesymbol [file-o] [\FontAwesomeSymbol{f016}]
+% \definesymbol [file-pdf-o] [\FontAwesomeSymbol{f1c1}]
+% \definesymbol [file-photo-o] [\FontAwesomeSymbol{f1c5}]
+% \definesymbol [file-picture-o] [\FontAwesomeSymbol{f1c5}]
+% \definesymbol [file-powerpoint-o] [\FontAwesomeSymbol{f1c4}]
+% \definesymbol [file-sound-o] [\FontAwesomeSymbol{f1c7}]
+% \definesymbol [file-text] [\FontAwesomeSymbol{f15c}]
+% \definesymbol [file-text-o] [\FontAwesomeSymbol{f0f6}]
+% \definesymbol [file-video-o] [\FontAwesomeSymbol{f1c8}]
+% \definesymbol [file-word-o] [\FontAwesomeSymbol{f1c2}]
+% \definesymbol [file-zip-o] [\FontAwesomeSymbol{f1c6}]
+% \definesymbol [files-o] [\FontAwesomeSymbol{f0c5}]
+% \definesymbol [film] [\FontAwesomeSymbol{f008}]
+% \definesymbol [filter] [\FontAwesomeSymbol{f0b0}]
+% \definesymbol [fire] [\FontAwesomeSymbol{f06d}]
+% \definesymbol [fire-extinguisher] [\FontAwesomeSymbol{f134}]
+% \definesymbol [firefox] [\FontAwesomeSymbol{f269}]
+% \definesymbol [first-order] [\FontAwesomeSymbol{f2b0}]
+% \definesymbol [flag] [\FontAwesomeSymbol{f024}]
+% \definesymbol [flag-checkered] [\FontAwesomeSymbol{f11e}]
+% \definesymbol [flag-o] [\FontAwesomeSymbol{f11d}]
+% \definesymbol [flash] [\FontAwesomeSymbol{f0e7}]
+% \definesymbol [flask] [\FontAwesomeSymbol{f0c3}]
+% \definesymbol [flickr] [\FontAwesomeSymbol{f16e}]
+% \definesymbol [floppy-o] [\FontAwesomeSymbol{f0c7}]
+% \definesymbol [folder] [\FontAwesomeSymbol{f07b}]
+% \definesymbol [folder-o] [\FontAwesomeSymbol{f114}]
+% \definesymbol [folder-open] [\FontAwesomeSymbol{f07c}]
+% \definesymbol [folder-open-o] [\FontAwesomeSymbol{f115}]
+% \definesymbol [font] [\FontAwesomeSymbol{f031}]
+% \definesymbol [font-awesome] [\FontAwesomeSymbol{f2b4}]
+% \definesymbol [fonticons] [\FontAwesomeSymbol{f280}]
+% \definesymbol [fort-awesome] [\FontAwesomeSymbol{f286}]
+% \definesymbol [forumbee] [\FontAwesomeSymbol{f211}]
+% \definesymbol [forward] [\FontAwesomeSymbol{f04e}]
+% \definesymbol [foursquare] [\FontAwesomeSymbol{f180}]
+% \definesymbol [frown-o] [\FontAwesomeSymbol{f119}]
+% \definesymbol [futbol-o] [\FontAwesomeSymbol{f1e3}]
+% \definesymbol [gamepad] [\FontAwesomeSymbol{f11b}]
+% \definesymbol [gavel] [\FontAwesomeSymbol{f0e3}]
+% \definesymbol [gbp] [\FontAwesomeSymbol{f154}]
+% \definesymbol [ge] [\FontAwesomeSymbol{f1d1}]
+% \definesymbol [gear] [\FontAwesomeSymbol{f013}]
+% \definesymbol [gears] [\FontAwesomeSymbol{f085}]
+% \definesymbol [genderless] [\FontAwesomeSymbol{f22d}]
+% \definesymbol [get-pocket] [\FontAwesomeSymbol{f265}]
+% \definesymbol [gg] [\FontAwesomeSymbol{f260}]
+% \definesymbol [gg-circle] [\FontAwesomeSymbol{f261}]
+% \definesymbol [gift] [\FontAwesomeSymbol{f06b}]
+% \definesymbol [git] [\FontAwesomeSymbol{f1d3}]
+% \definesymbol [git-square] [\FontAwesomeSymbol{f1d2}]
+% \definesymbol [github] [\FontAwesomeSymbol{f09b}]
+% \definesymbol [github-alt] [\FontAwesomeSymbol{f113}]
+% \definesymbol [github-square] [\FontAwesomeSymbol{f092}]
+% \definesymbol [gitlab] [\FontAwesomeSymbol{f296}]
+% \definesymbol [gittip] [\FontAwesomeSymbol{f184}]
+% \definesymbol [glass] [\FontAwesomeSymbol{f000}]
+% \definesymbol [glide] [\FontAwesomeSymbol{f2a5}]
+% \definesymbol [glide-g] [\FontAwesomeSymbol{f2a6}]
+% \definesymbol [globe] [\FontAwesomeSymbol{f0ac}]
+% \definesymbol [google] [\FontAwesomeSymbol{f1a0}]
+% \definesymbol [google-plus] [\FontAwesomeSymbol{f0d5}]
+% \definesymbol [google-plus-circle] [\FontAwesomeSymbol{f2b3}]
+% \definesymbol [google-plus-official] [\FontAwesomeSymbol{f2b3}]
+% \definesymbol [google-plus-square] [\FontAwesomeSymbol{f0d4}]
+% \definesymbol [google-wallet] [\FontAwesomeSymbol{f1ee}]
+% \definesymbol [graduation-cap] [\FontAwesomeSymbol{f19d}]
+% \definesymbol [gratipay] [\FontAwesomeSymbol{f184}]
+% \definesymbol [group] [\FontAwesomeSymbol{f0c0}]
+% \definesymbol [h-square] [\FontAwesomeSymbol{f0fd}]
+% \definesymbol [hacker-news] [\FontAwesomeSymbol{f1d4}]
+% \definesymbol [hand-grab-o] [\FontAwesomeSymbol{f255}]
+% \definesymbol [hand-lizard-o] [\FontAwesomeSymbol{f258}]
+% \definesymbol [hand-o-down] [\FontAwesomeSymbol{f0a7}]
+% \definesymbol [hand-o-left] [\FontAwesomeSymbol{f0a5}]
+% \definesymbol [hand-o-right] [\FontAwesomeSymbol{f0a4}]
+% \definesymbol [hand-o-up] [\FontAwesomeSymbol{f0a6}]
+% \definesymbol [hand-paper-o] [\FontAwesomeSymbol{f256}]
+% \definesymbol [hand-peace-o] [\FontAwesomeSymbol{f25b}]
+% \definesymbol [hand-pointer-o] [\FontAwesomeSymbol{f25a}]
+% \definesymbol [hand-rock-o] [\FontAwesomeSymbol{f255}]
+% \definesymbol [hand-scissors-o] [\FontAwesomeSymbol{f257}]
+% \definesymbol [hand-spock-o] [\FontAwesomeSymbol{f259}]
+% \definesymbol [hand-stop-o] [\FontAwesomeSymbol{f256}]
+% \definesymbol [hard-of-hearing] [\FontAwesomeSymbol{f2a4}]
+% \definesymbol [hashtag] [\FontAwesomeSymbol{f292}]
+% \definesymbol [hdd-o] [\FontAwesomeSymbol{f0a0}]
+% \definesymbol [header] [\FontAwesomeSymbol{f1dc}]
+% \definesymbol [headphones] [\FontAwesomeSymbol{f025}]
+% \definesymbol [heart] [\FontAwesomeSymbol{f004}]
+% \definesymbol [heart-o] [\FontAwesomeSymbol{f08a}]
+% \definesymbol [heartbeat] [\FontAwesomeSymbol{f21e}]
+% \definesymbol [history] [\FontAwesomeSymbol{f1da}]
+% \definesymbol [home] [\FontAwesomeSymbol{f015}]
+% \definesymbol [hospital-o] [\FontAwesomeSymbol{f0f8}]
+% \definesymbol [hotel] [\FontAwesomeSymbol{f236}]
+% \definesymbol [hourglass] [\FontAwesomeSymbol{f254}]
+% \definesymbol [hourglass-1] [\FontAwesomeSymbol{f251}]
+% \definesymbol [hourglass-2] [\FontAwesomeSymbol{f252}]
+% \definesymbol [hourglass-3] [\FontAwesomeSymbol{f253}]
+% \definesymbol [hourglass-end] [\FontAwesomeSymbol{f253}]
+% \definesymbol [hourglass-half] [\FontAwesomeSymbol{f252}]
+% \definesymbol [hourglass-o] [\FontAwesomeSymbol{f250}]
+% \definesymbol [hourglass-start] [\FontAwesomeSymbol{f251}]
+% \definesymbol [houzz] [\FontAwesomeSymbol{f27c}]
+% \definesymbol [html5] [\FontAwesomeSymbol{f13b}]
+% \definesymbol [i-cursor] [\FontAwesomeSymbol{f246}]
+% \definesymbol [ils] [\FontAwesomeSymbol{f20b}]
+% \definesymbol [image] [\FontAwesomeSymbol{f03e}]
+% \definesymbol [inbox] [\FontAwesomeSymbol{f01c}]
+% \definesymbol [indent] [\FontAwesomeSymbol{f03c}]
+% \definesymbol [industry] [\FontAwesomeSymbol{f275}]
+% \definesymbol [info] [\FontAwesomeSymbol{f129}]
+% \definesymbol [info-circle] [\FontAwesomeSymbol{f05a}]
+% \definesymbol [inr] [\FontAwesomeSymbol{f156}]
+% \definesymbol [instagram] [\FontAwesomeSymbol{f16d}]
+% \definesymbol [institution] [\FontAwesomeSymbol{f19c}]
+% \definesymbol [internet-explorer] [\FontAwesomeSymbol{f26b}]
+% \definesymbol [intersex] [\FontAwesomeSymbol{f224}]
+% \definesymbol [ioxhost] [\FontAwesomeSymbol{f208}]
+% \definesymbol [italic] [\FontAwesomeSymbol{f033}]
+% \definesymbol [joomla] [\FontAwesomeSymbol{f1aa}]
+% \definesymbol [jpy] [\FontAwesomeSymbol{f157}]
+% \definesymbol [jsfiddle] [\FontAwesomeSymbol{f1cc}]
+% \definesymbol [key] [\FontAwesomeSymbol{f084}]
+% \definesymbol [keyboard-o] [\FontAwesomeSymbol{f11c}]
+% \definesymbol [krw] [\FontAwesomeSymbol{f159}]
+% \definesymbol [language] [\FontAwesomeSymbol{f1ab}]
+% \definesymbol [laptop] [\FontAwesomeSymbol{f109}]
+% \definesymbol [lastfm] [\FontAwesomeSymbol{f202}]
+% \definesymbol [lastfm-square] [\FontAwesomeSymbol{f203}]
+% \definesymbol [leaf] [\FontAwesomeSymbol{f06c}]
+% \definesymbol [leanpub] [\FontAwesomeSymbol{f212}]
+% \definesymbol [legal] [\FontAwesomeSymbol{f0e3}]
+% \definesymbol [lemon-o] [\FontAwesomeSymbol{f094}]
+% \definesymbol [level-down] [\FontAwesomeSymbol{f149}]
+% \definesymbol [level-up] [\FontAwesomeSymbol{f148}]
+% \definesymbol [life-bouy] [\FontAwesomeSymbol{f1cd}]
+% \definesymbol [life-buoy] [\FontAwesomeSymbol{f1cd}]
+% \definesymbol [life-ring] [\FontAwesomeSymbol{f1cd}]
+% \definesymbol [life-saver] [\FontAwesomeSymbol{f1cd}]
+% \definesymbol [lightbulb-o] [\FontAwesomeSymbol{f0eb}]
+% \definesymbol [line-chart] [\FontAwesomeSymbol{f201}]
+% \definesymbol [link] [\FontAwesomeSymbol{f0c1}]
+% \definesymbol [linkedin] [\FontAwesomeSymbol{f0e1}]
+% \definesymbol [linkedin-square] [\FontAwesomeSymbol{f08c}]
+% \definesymbol [linux] [\FontAwesomeSymbol{f17c}]
+% \definesymbol [list] [\FontAwesomeSymbol{f03a}]
+% \definesymbol [list-alt] [\FontAwesomeSymbol{f022}]
+% \definesymbol [list-ol] [\FontAwesomeSymbol{f0cb}]
+% \definesymbol [list-ul] [\FontAwesomeSymbol{f0ca}]
+% \definesymbol [location-arrow] [\FontAwesomeSymbol{f124}]
+% \definesymbol [lock] [\FontAwesomeSymbol{f023}]
+% \definesymbol [long-arrow-down] [\FontAwesomeSymbol{f175}]
+% \definesymbol [long-arrow-left] [\FontAwesomeSymbol{f177}]
+% \definesymbol [long-arrow-right] [\FontAwesomeSymbol{f178}]
+% \definesymbol [long-arrow-up] [\FontAwesomeSymbol{f176}]
+% \definesymbol [low-vision] [\FontAwesomeSymbol{f2a8}]
+% \definesymbol [magic] [\FontAwesomeSymbol{f0d0}]
+% \definesymbol [magnet] [\FontAwesomeSymbol{f076}]
+% \definesymbol [mail-forward] [\FontAwesomeSymbol{f064}]
+% \definesymbol [mail-reply] [\FontAwesomeSymbol{f112}]
+% \definesymbol [mail-reply-all] [\FontAwesomeSymbol{f122}]
+% \definesymbol [male] [\FontAwesomeSymbol{f183}]
+% \definesymbol [map] [\FontAwesomeSymbol{f279}]
+% \definesymbol [map-marker] [\FontAwesomeSymbol{f041}]
+% \definesymbol [map-o] [\FontAwesomeSymbol{f278}]
+% \definesymbol [map-pin] [\FontAwesomeSymbol{f276}]
+% \definesymbol [map-signs] [\FontAwesomeSymbol{f277}]
+% \definesymbol [mars] [\FontAwesomeSymbol{f222}]
+% \definesymbol [mars-double] [\FontAwesomeSymbol{f227}]
+% \definesymbol [mars-stroke] [\FontAwesomeSymbol{f229}]
+% \definesymbol [mars-stroke-h] [\FontAwesomeSymbol{f22b}]
+% \definesymbol [mars-stroke-v] [\FontAwesomeSymbol{f22a}]
+% \definesymbol [maxcdn] [\FontAwesomeSymbol{f136}]
+% \definesymbol [meanpath] [\FontAwesomeSymbol{f20c}]
+% \definesymbol [medium] [\FontAwesomeSymbol{f23a}]
+% \definesymbol [medkit] [\FontAwesomeSymbol{f0fa}]
+% \definesymbol [meh-o] [\FontAwesomeSymbol{f11a}]
+% \definesymbol [mercury] [\FontAwesomeSymbol{f223}]
+% \definesymbol [microphone] [\FontAwesomeSymbol{f130}]
+% \definesymbol [microphone-slash] [\FontAwesomeSymbol{f131}]
+% \definesymbol [minus] [\FontAwesomeSymbol{f068}]
+% \definesymbol [minus-circle] [\FontAwesomeSymbol{f056}]
+% \definesymbol [minus-square] [\FontAwesomeSymbol{f146}]
+% \definesymbol [minus-square-o] [\FontAwesomeSymbol{f147}]
+% \definesymbol [mixcloud] [\FontAwesomeSymbol{f289}]
+% \definesymbol [mobile] [\FontAwesomeSymbol{f10b}]
+% \definesymbol [mobile-phone] [\FontAwesomeSymbol{f10b}]
+% \definesymbol [modx] [\FontAwesomeSymbol{f285}]
+% \definesymbol [money] [\FontAwesomeSymbol{f0d6}]
+% \definesymbol [moon-o] [\FontAwesomeSymbol{f186}]
+% \definesymbol [mortar-board] [\FontAwesomeSymbol{f19d}]
+% \definesymbol [motorcycle] [\FontAwesomeSymbol{f21c}]
+% \definesymbol [mouse-pointer] [\FontAwesomeSymbol{f245}]
+% \definesymbol [music] [\FontAwesomeSymbol{f001}]
+% \definesymbol [navicon] [\FontAwesomeSymbol{f0c9}]
+% \definesymbol [neuter] [\FontAwesomeSymbol{f22c}]
+% \definesymbol [newspaper-o] [\FontAwesomeSymbol{f1ea}]
+% \definesymbol [object-group] [\FontAwesomeSymbol{f247}]
+% \definesymbol [object-ungroup] [\FontAwesomeSymbol{f248}]
+% \definesymbol [odnoklassniki] [\FontAwesomeSymbol{f263}]
+% \definesymbol [odnoklassniki-square] [\FontAwesomeSymbol{f264}]
+% \definesymbol [opencart] [\FontAwesomeSymbol{f23d}]
+% \definesymbol [openid] [\FontAwesomeSymbol{f19b}]
+% \definesymbol [opera] [\FontAwesomeSymbol{f26a}]
+% \definesymbol [optin-monster] [\FontAwesomeSymbol{f23c}]
+% \definesymbol [outdent] [\FontAwesomeSymbol{f03b}]
+% \definesymbol [pagelines] [\FontAwesomeSymbol{f18c}]
+% \definesymbol [paint-brush] [\FontAwesomeSymbol{f1fc}]
+% \definesymbol [paper-plane] [\FontAwesomeSymbol{f1d8}]
+% \definesymbol [paper-plane-o] [\FontAwesomeSymbol{f1d9}]
+% \definesymbol [paperclip] [\FontAwesomeSymbol{f0c6}]
+% \definesymbol [paragraph] [\FontAwesomeSymbol{f1dd}]
+% \definesymbol [paste] [\FontAwesomeSymbol{f0ea}]
+% \definesymbol [pause] [\FontAwesomeSymbol{f04c}]
+% \definesymbol [pause-circle] [\FontAwesomeSymbol{f28b}]
+% \definesymbol [pause-circle-o] [\FontAwesomeSymbol{f28c}]
+% \definesymbol [paw] [\FontAwesomeSymbol{f1b0}]
+% \definesymbol [paypal] [\FontAwesomeSymbol{f1ed}]
+% \definesymbol [pencil] [\FontAwesomeSymbol{f040}]
+% \definesymbol [pencil-square] [\FontAwesomeSymbol{f14b}]
+% \definesymbol [pencil-square-o] [\FontAwesomeSymbol{f044}]
+% \definesymbol [percent] [\FontAwesomeSymbol{f295}]
+% \definesymbol [phone] [\FontAwesomeSymbol{f095}]
+% \definesymbol [phone-square] [\FontAwesomeSymbol{f098}]
+% \definesymbol [photo] [\FontAwesomeSymbol{f03e}]
+% \definesymbol [picture-o] [\FontAwesomeSymbol{f03e}]
+% \definesymbol [pie-chart] [\FontAwesomeSymbol{f200}]
+% \definesymbol [pied-piper] [\FontAwesomeSymbol{f2ae}]
+% \definesymbol [pied-piper-alt] [\FontAwesomeSymbol{f1a8}]
+% \definesymbol [pied-piper-pp] [\FontAwesomeSymbol{f1a7}]
+% \definesymbol [pinterest] [\FontAwesomeSymbol{f0d2}]
+% \definesymbol [pinterest-p] [\FontAwesomeSymbol{f231}]
+% \definesymbol [pinterest-square] [\FontAwesomeSymbol{f0d3}]
+% \definesymbol [plane] [\FontAwesomeSymbol{f072}]
+% \definesymbol [play] [\FontAwesomeSymbol{f04b}]
+% \definesymbol [play-circle] [\FontAwesomeSymbol{f144}]
+% \definesymbol [play-circle-o] [\FontAwesomeSymbol{f01d}]
+% \definesymbol [plug] [\FontAwesomeSymbol{f1e6}]
+% \definesymbol [plus] [\FontAwesomeSymbol{f067}]
+% \definesymbol [plus-circle] [\FontAwesomeSymbol{f055}]
+% \definesymbol [plus-square] [\FontAwesomeSymbol{f0fe}]
+% \definesymbol [plus-square-o] [\FontAwesomeSymbol{f196}]
+% \definesymbol [power-off] [\FontAwesomeSymbol{f011}]
+% \definesymbol [print] [\FontAwesomeSymbol{f02f}]
+% \definesymbol [product-hunt] [\FontAwesomeSymbol{f288}]
+% \definesymbol [puzzle-piece] [\FontAwesomeSymbol{f12e}]
+% \definesymbol [qq] [\FontAwesomeSymbol{f1d6}]
+% \definesymbol [qrcode] [\FontAwesomeSymbol{f029}]
+% \definesymbol [question] [\FontAwesomeSymbol{f128}]
+% \definesymbol [question-circle] [\FontAwesomeSymbol{f059}]
+% \definesymbol [question-circle-o] [\FontAwesomeSymbol{f29c}]
+% \definesymbol [quote-left] [\FontAwesomeSymbol{f10d}]
+% \definesymbol [quote-right] [\FontAwesomeSymbol{f10e}]
+% \definesymbol [ra] [\FontAwesomeSymbol{f1d0}]
+% \definesymbol [random] [\FontAwesomeSymbol{f074}]
+% \definesymbol [rebel] [\FontAwesomeSymbol{f1d0}]
+% \definesymbol [recycle] [\FontAwesomeSymbol{f1b8}]
+% \definesymbol [reddit] [\FontAwesomeSymbol{f1a1}]
+% \definesymbol [reddit-alien] [\FontAwesomeSymbol{f281}]
+% \definesymbol [reddit-square] [\FontAwesomeSymbol{f1a2}]
+% \definesymbol [refresh] [\FontAwesomeSymbol{f021}]
+% \definesymbol [registered] [\FontAwesomeSymbol{f25d}]
+% \definesymbol [remove] [\FontAwesomeSymbol{f00d}]
+% \definesymbol [renren] [\FontAwesomeSymbol{f18b}]
+% \definesymbol [reorder] [\FontAwesomeSymbol{f0c9}]
+% \definesymbol [repeat] [\FontAwesomeSymbol{f01e}]
+% \definesymbol [reply] [\FontAwesomeSymbol{f112}]
+% \definesymbol [reply-all] [\FontAwesomeSymbol{f122}]
+% \definesymbol [resistance] [\FontAwesomeSymbol{f1d0}]
+% \definesymbol [retweet] [\FontAwesomeSymbol{f079}]
+% \definesymbol [rmb] [\FontAwesomeSymbol{f157}]
+% \definesymbol [road] [\FontAwesomeSymbol{f018}]
+% \definesymbol [rocket] [\FontAwesomeSymbol{f135}]
+% \definesymbol [rotate-left] [\FontAwesomeSymbol{f0e2}]
+% \definesymbol [rotate-right] [\FontAwesomeSymbol{f01e}]
+% \definesymbol [rouble] [\FontAwesomeSymbol{f158}]
+% \definesymbol [rss] [\FontAwesomeSymbol{f09e}]
+% \definesymbol [rss-square] [\FontAwesomeSymbol{f143}]
+% \definesymbol [rub] [\FontAwesomeSymbol{f158}]
+% \definesymbol [ruble] [\FontAwesomeSymbol{f158}]
+% \definesymbol [rupee] [\FontAwesomeSymbol{f156}]
+% \definesymbol [safari] [\FontAwesomeSymbol{f267}]
+% \definesymbol [save] [\FontAwesomeSymbol{f0c7}]
+% \definesymbol [scissors] [\FontAwesomeSymbol{f0c4}]
+% \definesymbol [scribd] [\FontAwesomeSymbol{f28a}]
+% \definesymbol [search] [\FontAwesomeSymbol{f002}]
+% \definesymbol [search-minus] [\FontAwesomeSymbol{f010}]
+% \definesymbol [search-plus] [\FontAwesomeSymbol{f00e}]
+% \definesymbol [sellsy] [\FontAwesomeSymbol{f213}]
+% \definesymbol [send] [\FontAwesomeSymbol{f1d8}]
+% \definesymbol [send-o] [\FontAwesomeSymbol{f1d9}]
+% \definesymbol [server] [\FontAwesomeSymbol{f233}]
+% \definesymbol [share] [\FontAwesomeSymbol{f064}]
+% \definesymbol [share-alt] [\FontAwesomeSymbol{f1e0}]
+% \definesymbol [share-alt-square] [\FontAwesomeSymbol{f1e1}]
+% \definesymbol [share-square] [\FontAwesomeSymbol{f14d}]
+% \definesymbol [share-square-o] [\FontAwesomeSymbol{f045}]
+% \definesymbol [shekel] [\FontAwesomeSymbol{f20b}]
+% \definesymbol [sheqel] [\FontAwesomeSymbol{f20b}]
+% \definesymbol [shield] [\FontAwesomeSymbol{f132}]
+% \definesymbol [ship] [\FontAwesomeSymbol{f21a}]
+% \definesymbol [shirtsinbulk] [\FontAwesomeSymbol{f214}]
+% \definesymbol [shopping-bag] [\FontAwesomeSymbol{f290}]
+% \definesymbol [shopping-basket] [\FontAwesomeSymbol{f291}]
+% \definesymbol [shopping-cart] [\FontAwesomeSymbol{f07a}]
+% \definesymbol [sign-in] [\FontAwesomeSymbol{f090}]
+% \definesymbol [sign-language] [\FontAwesomeSymbol{f2a7}]
+% \definesymbol [sign-out] [\FontAwesomeSymbol{f08b}]
+% \definesymbol [signal] [\FontAwesomeSymbol{f012}]
+% \definesymbol [signing] [\FontAwesomeSymbol{f2a7}]
+% \definesymbol [simplybuilt] [\FontAwesomeSymbol{f215}]
+% \definesymbol [sitemap] [\FontAwesomeSymbol{f0e8}]
+% \definesymbol [skyatlas] [\FontAwesomeSymbol{f216}]
+% \definesymbol [skype] [\FontAwesomeSymbol{f17e}]
+% \definesymbol [slack] [\FontAwesomeSymbol{f198}]
+% \definesymbol [sliders] [\FontAwesomeSymbol{f1de}]
+% \definesymbol [slideshare] [\FontAwesomeSymbol{f1e7}]
+% \definesymbol [smile-o] [\FontAwesomeSymbol{f118}]
+% \definesymbol [snapchat] [\FontAwesomeSymbol{f2ab}]
+% \definesymbol [snapchat-ghost] [\FontAwesomeSymbol{f2ac}]
+% \definesymbol [snapchat-square] [\FontAwesomeSymbol{f2ad}]
+% \definesymbol [soccer-ball-o] [\FontAwesomeSymbol{f1e3}]
+% \definesymbol [sort] [\FontAwesomeSymbol{f0dc}]
+% \definesymbol [sort-alpha-asc] [\FontAwesomeSymbol{f15d}]
+% \definesymbol [sort-alpha-desc] [\FontAwesomeSymbol{f15e}]
+% \definesymbol [sort-amount-asc] [\FontAwesomeSymbol{f160}]
+% \definesymbol [sort-amount-desc] [\FontAwesomeSymbol{f161}]
+% \definesymbol [sort-asc] [\FontAwesomeSymbol{f0de}]
+% \definesymbol [sort-desc] [\FontAwesomeSymbol{f0dd}]
+% \definesymbol [sort-down] [\FontAwesomeSymbol{f0dd}]
+% \definesymbol [sort-numeric-asc] [\FontAwesomeSymbol{f162}]
+% \definesymbol [sort-numeric-desc] [\FontAwesomeSymbol{f163}]
+% \definesymbol [sort-up] [\FontAwesomeSymbol{f0de}]
+% \definesymbol [soundcloud] [\FontAwesomeSymbol{f1be}]
+% \definesymbol [space-shuttle] [\FontAwesomeSymbol{f197}]
+% \definesymbol [spinner] [\FontAwesomeSymbol{f110}]
+% \definesymbol [spoon] [\FontAwesomeSymbol{f1b1}]
+% \definesymbol [spotify] [\FontAwesomeSymbol{f1bc}]
+% \definesymbol [square] [\FontAwesomeSymbol{f0c8}]
+% \definesymbol [square-o] [\FontAwesomeSymbol{f096}]
+% \definesymbol [stack-exchange] [\FontAwesomeSymbol{f18d}]
+% \definesymbol [stack-overflow] [\FontAwesomeSymbol{f16c}]
+% \definesymbol [star] [\FontAwesomeSymbol{f005}]
+% \definesymbol [star-half] [\FontAwesomeSymbol{f089}]
+% \definesymbol [star-half-empty] [\FontAwesomeSymbol{f123}]
+% \definesymbol [star-half-full] [\FontAwesomeSymbol{f123}]
+% \definesymbol [star-half-o] [\FontAwesomeSymbol{f123}]
+% \definesymbol [star-o] [\FontAwesomeSymbol{f006}]
+% \definesymbol [steam] [\FontAwesomeSymbol{f1b6}]
+% \definesymbol [steam-square] [\FontAwesomeSymbol{f1b7}]
+% \definesymbol [step-backward] [\FontAwesomeSymbol{f048}]
+% \definesymbol [step-forward] [\FontAwesomeSymbol{f051}]
+% \definesymbol [stethoscope] [\FontAwesomeSymbol{f0f1}]
+% \definesymbol [sticky-note] [\FontAwesomeSymbol{f249}]
+% \definesymbol [sticky-note-o] [\FontAwesomeSymbol{f24a}]
+% \definesymbol [stop] [\FontAwesomeSymbol{f04d}]
+% \definesymbol [stop-circle] [\FontAwesomeSymbol{f28d}]
+% \definesymbol [stop-circle-o] [\FontAwesomeSymbol{f28e}]
+% \definesymbol [street-view] [\FontAwesomeSymbol{f21d}]
+% \definesymbol [strikethrough] [\FontAwesomeSymbol{f0cc}]
+% \definesymbol [stumbleupon] [\FontAwesomeSymbol{f1a4}]
+% \definesymbol [stumbleupon-circle] [\FontAwesomeSymbol{f1a3}]
+% \definesymbol [subscript] [\FontAwesomeSymbol{f12c}]
+% \definesymbol [subway] [\FontAwesomeSymbol{f239}]
+% \definesymbol [suitcase] [\FontAwesomeSymbol{f0f2}]
+% \definesymbol [sun-o] [\FontAwesomeSymbol{f185}]
+% \definesymbol [superscript] [\FontAwesomeSymbol{f12b}]
+% \definesymbol [support] [\FontAwesomeSymbol{f1cd}]
+% \definesymbol [table] [\FontAwesomeSymbol{f0ce}]
+% \definesymbol [tablet] [\FontAwesomeSymbol{f10a}]
+% \definesymbol [tachometer] [\FontAwesomeSymbol{f0e4}]
+% \definesymbol [tag] [\FontAwesomeSymbol{f02b}]
+% \definesymbol [tags] [\FontAwesomeSymbol{f02c}]
+% \definesymbol [tasks] [\FontAwesomeSymbol{f0ae}]
+% \definesymbol [taxi] [\FontAwesomeSymbol{f1ba}]
+% \definesymbol [television] [\FontAwesomeSymbol{f26c}]
+% \definesymbol [tencent-weibo] [\FontAwesomeSymbol{f1d5}]
+% \definesymbol [terminal] [\FontAwesomeSymbol{f120}]
+% \definesymbol [text-height] [\FontAwesomeSymbol{f034}]
+% \definesymbol [text-width] [\FontAwesomeSymbol{f035}]
+% \definesymbol [th] [\FontAwesomeSymbol{f00a}]
+% \definesymbol [th-large] [\FontAwesomeSymbol{f009}]
+% \definesymbol [th-list] [\FontAwesomeSymbol{f00b}]
+% \definesymbol [themeisle] [\FontAwesomeSymbol{f2b2}]
+% \definesymbol [thumb-tack] [\FontAwesomeSymbol{f08d}]
+% \definesymbol [thumbs-down] [\FontAwesomeSymbol{f165}]
+% \definesymbol [thumbs-o-down] [\FontAwesomeSymbol{f088}]
+% \definesymbol [thumbs-o-up] [\FontAwesomeSymbol{f087}]
+% \definesymbol [thumbs-up] [\FontAwesomeSymbol{f164}]
+% \definesymbol [ticket] [\FontAwesomeSymbol{f145}]
+% \definesymbol [times] [\FontAwesomeSymbol{f00d}]
+% \definesymbol [times-circle] [\FontAwesomeSymbol{f057}]
+% \definesymbol [times-circle-o] [\FontAwesomeSymbol{f05c}]
+% \definesymbol [tint] [\FontAwesomeSymbol{f043}]
+% \definesymbol [toggle-down] [\FontAwesomeSymbol{f150}]
+% \definesymbol [toggle-left] [\FontAwesomeSymbol{f191}]
+% \definesymbol [toggle-off] [\FontAwesomeSymbol{f204}]
+% \definesymbol [toggle-on] [\FontAwesomeSymbol{f205}]
+% \definesymbol [toggle-right] [\FontAwesomeSymbol{f152}]
+% \definesymbol [toggle-up] [\FontAwesomeSymbol{f151}]
+% \definesymbol [trademark] [\FontAwesomeSymbol{f25c}]
+% \definesymbol [train] [\FontAwesomeSymbol{f238}]
+% \definesymbol [transgender] [\FontAwesomeSymbol{f224}]
+% \definesymbol [transgender-alt] [\FontAwesomeSymbol{f225}]
+% \definesymbol [trash] [\FontAwesomeSymbol{f1f8}]
+% \definesymbol [trash-o] [\FontAwesomeSymbol{f014}]
+% \definesymbol [tree] [\FontAwesomeSymbol{f1bb}]
+% \definesymbol [trello] [\FontAwesomeSymbol{f181}]
+% \definesymbol [tripadvisor] [\FontAwesomeSymbol{f262}]
+% \definesymbol [trophy] [\FontAwesomeSymbol{f091}]
+% \definesymbol [truck] [\FontAwesomeSymbol{f0d1}]
+% \definesymbol [try] [\FontAwesomeSymbol{f195}]
+% \definesymbol [tty] [\FontAwesomeSymbol{f1e4}]
+% \definesymbol [tumblr] [\FontAwesomeSymbol{f173}]
+% \definesymbol [tumblr-square] [\FontAwesomeSymbol{f174}]
+% \definesymbol [turkish-lira] [\FontAwesomeSymbol{f195}]
+% \definesymbol [tv] [\FontAwesomeSymbol{f26c}]
+% \definesymbol [twitch] [\FontAwesomeSymbol{f1e8}]
+% \definesymbol [twitter] [\FontAwesomeSymbol{f099}]
+% \definesymbol [twitter-square] [\FontAwesomeSymbol{f081}]
+% \definesymbol [umbrella] [\FontAwesomeSymbol{f0e9}]
+% \definesymbol [underline] [\FontAwesomeSymbol{f0cd}]
+% \definesymbol [undo] [\FontAwesomeSymbol{f0e2}]
+% \definesymbol [universal-access] [\FontAwesomeSymbol{f29a}]
+% \definesymbol [university] [\FontAwesomeSymbol{f19c}]
+% \definesymbol [unlink] [\FontAwesomeSymbol{f127}]
+% \definesymbol [unlock] [\FontAwesomeSymbol{f09c}]
+% \definesymbol [unlock-alt] [\FontAwesomeSymbol{f13e}]
+% \definesymbol [unsorted] [\FontAwesomeSymbol{f0dc}]
+% \definesymbol [upload] [\FontAwesomeSymbol{f093}]
+% \definesymbol [usb] [\FontAwesomeSymbol{f287}]
+% \definesymbol [usd] [\FontAwesomeSymbol{f155}]
+% \definesymbol [user] [\FontAwesomeSymbol{f007}]
+% \definesymbol [user-md] [\FontAwesomeSymbol{f0f0}]
+% \definesymbol [user-plus] [\FontAwesomeSymbol{f234}]
+% \definesymbol [user-secret] [\FontAwesomeSymbol{f21b}]
+% \definesymbol [user-times] [\FontAwesomeSymbol{f235}]
+% \definesymbol [users] [\FontAwesomeSymbol{f0c0}]
+% \definesymbol [venus] [\FontAwesomeSymbol{f221}]
+% \definesymbol [venus-double] [\FontAwesomeSymbol{f226}]
+% \definesymbol [venus-mars] [\FontAwesomeSymbol{f228}]
+% \definesymbol [viacoin] [\FontAwesomeSymbol{f237}]
+% \definesymbol [viadeo] [\FontAwesomeSymbol{f2a9}]
+% \definesymbol [viadeo-square] [\FontAwesomeSymbol{f2aa}]
+% \definesymbol [video-camera] [\FontAwesomeSymbol{f03d}]
+% \definesymbol [vimeo] [\FontAwesomeSymbol{f27d}]
+% \definesymbol [vimeo-square] [\FontAwesomeSymbol{f194}]
+% \definesymbol [vine] [\FontAwesomeSymbol{f1ca}]
+% \definesymbol [vk] [\FontAwesomeSymbol{f189}]
+% \definesymbol [volume-control-phone] [\FontAwesomeSymbol{f2a0}]
+% \definesymbol [volume-down] [\FontAwesomeSymbol{f027}]
+% \definesymbol [volume-off] [\FontAwesomeSymbol{f026}]
+% \definesymbol [volume-up] [\FontAwesomeSymbol{f028}]
+% \definesymbol [warning] [\FontAwesomeSymbol{f071}]
+% \definesymbol [wechat] [\FontAwesomeSymbol{f1d7}]
+% \definesymbol [weibo] [\FontAwesomeSymbol{f18a}]
+% \definesymbol [weixin] [\FontAwesomeSymbol{f1d7}]
+% \definesymbol [whatsapp] [\FontAwesomeSymbol{f232}]
+% \definesymbol [wheelchair] [\FontAwesomeSymbol{f193}]
+% \definesymbol [wheelchair-alt] [\FontAwesomeSymbol{f29b}]
+% \definesymbol [wifi] [\FontAwesomeSymbol{f1eb}]
+% \definesymbol [wikipedia-w] [\FontAwesomeSymbol{f266}]
+% \definesymbol [windows] [\FontAwesomeSymbol{f17a}]
+% \definesymbol [won] [\FontAwesomeSymbol{f159}]
+% \definesymbol [wordpress] [\FontAwesomeSymbol{f19a}]
+% \definesymbol [wpbeginner] [\FontAwesomeSymbol{f297}]
+% \definesymbol [wpforms] [\FontAwesomeSymbol{f298}]
+% \definesymbol [wrench] [\FontAwesomeSymbol{f0ad}]
+% \definesymbol [xing] [\FontAwesomeSymbol{f168}]
+% \definesymbol [xing-square] [\FontAwesomeSymbol{f169}]
+% \definesymbol [y-combinator] [\FontAwesomeSymbol{f23b}]
+% \definesymbol [y-combinator-square] [\FontAwesomeSymbol{f1d4}]
+% \definesymbol [yahoo] [\FontAwesomeSymbol{f19e}]
+% \definesymbol [yc] [\FontAwesomeSymbol{f23b}]
+% \definesymbol [yc-square] [\FontAwesomeSymbol{f1d4}]
+% \definesymbol [yelp] [\FontAwesomeSymbol{f1e9}]
+% \definesymbol [yen] [\FontAwesomeSymbol{f157}]
+% \definesymbol [yoast] [\FontAwesomeSymbol{f2b1}]
+% \definesymbol [youtube] [\FontAwesomeSymbol{f167}]
+% \definesymbol [youtube-play] [\FontAwesomeSymbol{f16a}]
+% \definesymbol [youtube-square] [\FontAwesomeSymbol{f166}]
\stopsymbolset
\continueifinputfile{symb-imp-fontawesome.mkiv}
-% \usesymbols[fontawesome]
-
\starttext
+ % \usesymbols[fontawesome]
+ %
+ % \symbol[fontawesome][wheelchair]
+ % \symbol[fontawesome][angle-right]
+ % \symbol[fontawesome][angle right]
+ % \symbol[fontawesome][angle_right]
+
\showsymbolset[fontawesome]
\stoptext
diff --git a/tex/context/base/mkiv/symb-ini.mkiv b/tex/context/base/mkiv/symb-ini.mkiv
index e4950e09d..ae1a2a711 100644
--- a/tex/context/base/mkiv/symb-ini.mkiv
+++ b/tex/context/base/mkiv/symb-ini.mkiv
@@ -45,6 +45,7 @@
\installcorenamespace{symbol}
\installcorenamespace{symbolset}
+\installcorenamespace{symboldefault}
\let\currentsymbol \empty
\let\currentsymbolset\empty
@@ -95,8 +96,9 @@
% Test test \symbol[whatever]\ test \symbol[whatever].
% Test test \symbol{whatever} test \symbol{whatever}.
-\unexpanded\def\symbol % This one always gobbles spaces,
- {\dodoubleempty\symb_place} % so never change it again!
+\unexpanded\def\symbol
+ {\dontleavehmode % so we can start a paragraph with it
+ \dodoubleempty\symb_place}
\def\symb_place % so we also handle \symbol{name}
{\iffirstargument % which is nicer with following spaces
@@ -160,11 +162,47 @@
\expandafter\symb_fetch_indeed
\fi}
+% \def\symb_fetch_indeed#1%
+% {\ifcsname\??symbol#1:\currentsymbol\endcsname
+% \symb_place_indeed{#1:\currentsymbol}%
+% \fi}
+
\def\symb_fetch_indeed#1%
{\ifcsname\??symbol#1:\currentsymbol\endcsname
\symb_place_indeed{#1:\currentsymbol}%
+ \else\ifcsname\??symboldefault#1\endcsname
+ \symb_place_named{#1}%
+ \fi\fi}
+
+\def\symb_place_named#1% \relax's prevent lookahead problems
+ {\begingroup
+ \setbox\scratchbox\hbox\bgroup
+ \the\everysymbol
+ \getglyphstyled
+ {\csname\??symboldefault#1\endcsname}%
+ {\tochar{n:\currentsymbol}}%
+ \relax
+ \egroup
+ \ifdim\wd\scratchbox>\zeropoint
+ \unhbox\scratchbox
+ \endgroup
+ \setxvalue{\??symbol#1:\currentsymbol}%
+ {\symb_place_named_indeed{#1}{\currentsymbol}}%
+ \settrue\c_symb_found
+ \else
+ \endgroup
\fi}
+\unexpanded\def\symb_place_named_indeed#1#2% \relax's prevent lookahead problems
+ {\settrue\c_symb_found
+ \begingroup
+ \the\everysymbol
+ \getglyphstyled
+ {\csname\??symboldefault#1\endcsname}%
+ {\tochar{n:#2}}%
+ \relax
+ \endgroup}
+
\def\symb_place_retry#1%
{\ifcsname\??symbol:#1\endcsname
\symb_place_indeed{:#1}%
@@ -273,9 +311,25 @@
\installcorenamespace{symbolsets}
-\unexpanded\def\startsymbolset[#1]%
+% \unexpanded\def\startsymbolset[#1]%
+% {\pushmacro\m_symb_current_set
+% \def\m_symb_current_set{#1}}
+
+% maybe a parameterhandler:
+
+\unexpanded\def\startsymbolset
+ {\dodoubleargument\symb_start_set}
+
+\def\symb_start_set[#1][#2]%
{\pushmacro\m_symb_current_set
- \def\m_symb_current_set{#1}}
+ \def\m_symb_current_set{#1}%
+ \ifsecondargument
+ \getdummyparameters[\s!font=,#2]%
+ \edef\p_font{\dummyparameter\s!font}%
+ \ifx\p_font\empty\else
+ \letvalue{\??symboldefault#1}\p_font
+ \fi
+ \fi}
\unexpanded\def\stopsymbolset
{\popmacro\m_symb_current_set}
diff --git a/tex/context/base/mkiv/symb-run.mkiv b/tex/context/base/mkiv/symb-run.mkiv
index ed4d90861..c25d13d48 100644
--- a/tex/context/base/mkiv/symb-run.mkiv
+++ b/tex/context/base/mkiv/symb-run.mkiv
@@ -12,23 +12,55 @@
%C details.
\startluacode
- function commands.showsymbolset(collection,symbols)
+ function commands.showsymbolset(collection,symbols,fontid)
if type(symbols) == "string" then
symbols = utilities.parsers.settings_to_array(symbols)
end
+ local options = { framecolor = "orange", rulethickness = ".8pt", offset = interfaces.variables.overlay }
+ local list = table.tohash(symbols)
+ local alsofont = fontid > 0
+ local defined = #symbols > 0
+ local byname = false
+ if alsofont then
+ local is_symbol = characters.is_symbol
+ local chardata = characters.data
+ local resources = fonts.hashes.resources [fontid]
+ local characters = fonts.hashes.characters[fontid]
+ if resources and characters then
+ local unicodes = resources.unicodes
+ if unicodes then
+ for name, unicode in next, unicodes do
+ if not list[name] and name ~= ".notdef" then
+ local c = rawget(chardata,unicode)
+ if not c or is_symbol[c.category] then
+ list[name] = false
+ byname = true
+ end
+ end
+ end
+ end
+ end
+ end
+ local detail = defined and byname
context.start()
context.forcesymbolset { collection }
- context.starttabulate { "|lT|l|l|" }
- local options = { framecolor = "orange", rulethickness = ".8pt", offset = interfaces.variables.overlay }
- for i=1,#symbols do
- local symbol = symbols[i]
+ context.starttabulate { detail and "|lT|l|l|lT|" or "|lT|l|l|"}
+ for symbol, how in table.sortedhash(list) do
context.NC()
- context(symbol)
+ if detail and how then
+ context.bold(symbol)
+ else
+ context(symbol)
+ end
context.NC()
context.symbol(symbol)
context.NC()
context.framed(options,context.nested.symbol(symbol))
context.NC()
+ if detail and how then
+ context.bold("defined")
+ context.NC()
+ end
context.NR()
end
context.stoptabulate()
@@ -42,7 +74,23 @@
{\dosingleargument\symb_show_set}
\gdef\symb_show_set[#1]%
- {\ctxcommand{showsymbolset("#1","\symbolset{#1}")}}
+ {\begingroup
+ \edef\p_font{\begincsname\??symboldefault#1\endcsname}%
+ \begingroup
+ \ifx\p_font\empty
+ \global\globalscratchcounter\zerocount
+ \else
+ \definedfont[\p_font]%
+ \global\globalscratchcounter\fontid\font\relax
+ \fi
+ \endgroup
+ \ctxcommand {
+ showsymbolset (
+ "#1",
+ "\symbolset{#1}",
+ \the\globalscratchcounter
+ ) }%
+ \endgroup}
\protect
diff --git a/tex/context/base/mkiv/trac-par.lua b/tex/context/base/mkiv/trac-par.lua
index f16078483..78548afbb 100644
--- a/tex/context/base/mkiv/trac-par.lua
+++ b/tex/context/base/mkiv/trac-par.lua
@@ -22,6 +22,7 @@ local getlist = nuts.getlist
local getfont = nuts.getfont
local getchar = nuts.getchar
local getwidth = nuts.getwidth
+local getexpansion = nuts.getexpansion
local nodecodes = nodes.nodecodes
local hlist_code = nodecodes.hlist
@@ -65,7 +66,7 @@ local function colorize(n)
while n do
local id = getid(n)
if id == glyph_code then
- local ne = getfield(n,"expansion_factor")
+ local ne = getexpansion(n)
if ne == 0 then
if length > 0 then flush() end
setnodecolor(n,"hz:zero")
diff --git a/tex/context/base/mkiv/trac-set.lua b/tex/context/base/mkiv/trac-set.lua
index 530915fe0..6311d6382 100644
--- a/tex/context/base/mkiv/trac-set.lua
+++ b/tex/context/base/mkiv/trac-set.lua
@@ -396,3 +396,20 @@ if texconfig then
directives.register("luatex.stacksize", function(v) set("stack_size",v) end)
end
+
+-- for now here:
+
+local data = table.setmetatableindex("table")
+
+updaters = {
+ register = function(what,f)
+ local d = data[what]
+ d[#d+1] = f
+ end,
+ apply = function(what,...)
+ local d = data[what]
+ for i=1,#d do
+ d[i](...)
+ end
+ end,
+}
diff --git a/tex/context/base/mkiv/trac-vis.lua b/tex/context/base/mkiv/trac-vis.lua
index 35c27cb57..242363238 100644
--- a/tex/context/base/mkiv/trac-vis.lua
+++ b/tex/context/base/mkiv/trac-vis.lua
@@ -67,6 +67,7 @@ local getpenalty = nuts.getpenalty
local getwidth = nuts.getwidth
local getdepth = nuts.getdepth
local getshift = nuts.getshift
+local getexpansion = nuts.getexpansion
local hpack_nodes = nuts.hpack
local vpack_nodes = nuts.vpack
@@ -474,7 +475,7 @@ local fontkern, italickern do
local function somekern(head,current,cache,color,layer)
local width = getkern(current)
- local extra = getfield(current,"expansion_factor")
+ local extra = getexpansion(current)
local kern = width + extra
local info = cache[kern]
if not info then
@@ -515,7 +516,7 @@ local glyphexpansion do
local f_cache = caches["glyphexpansion"]
glyphexpansion = function(head,current)
- local extra = getfield(current,"expansion_factor")
+ local extra = getexpansion(current)
if extra ~= 0 then
extra = extra / 1000
local info = f_cache[extra]
@@ -549,7 +550,7 @@ local kernexpansion do
local f_cache = caches["kernexpansion"]
kernexpansion = function(head,current)
- local extra = getfield(current,"expansion_factor")
+ local extra = getexpansion(current)
if extra ~= 0 then
extra = extra / 1000
local info = f_cache[extra]
diff --git a/tex/context/base/mkiv/typo-chr.lua b/tex/context/base/mkiv/typo-chr.lua
index ecde8f000..fe70ec6de 100644
--- a/tex/context/base/mkiv/typo-chr.lua
+++ b/tex/context/base/mkiv/typo-chr.lua
@@ -22,6 +22,7 @@ if not modules then modules = { } end modules ['typo-chr'] = {
-- local getid = nuts.getid
-- local getprev = nuts.getprev
-- local getchar = nuts.getchar
+-- local getdata = nuts.getdata
-- local getfield = nuts.getfield
--
-- local remove_node = nuts.remove
@@ -51,7 +52,7 @@ if not modules then modules = { } end modules ['typo-chr'] = {
-- local done = false
-- for n, subtype in nextwhatsit, head do
-- if subtype == user_code and getfield(n,"user_id") == signal and getfield(n,"type") == 115 then
--- local action = actions[getfield(n,"value")]
+-- local action = actions[getdata(n)]
-- if action then
-- head = action(h,n)
-- end
diff --git a/tex/context/base/mkiv/typo-mar.lua b/tex/context/base/mkiv/typo-mar.lua
index 4254d7604..ab39f1808 100644
--- a/tex/context/base/mkiv/typo-mar.lua
+++ b/tex/context/base/mkiv/typo-mar.lua
@@ -83,6 +83,7 @@ local setshift = nuts.setshift
local getwidth = nuts.getwidth
local setwidth = nuts.setwidth
local getheight = nuts.getheight
+local getdata = nuts.getdata
local currentattr = nuts.current_attr
local setattrlist = nuts.setattrlist
@@ -722,7 +723,7 @@ local function flushinline(parent,head)
local id = getid(current)
if id == whatsit_code then
if getsubtype(current) == userdefined_code and getfield(current,"user_id") == inline_mark then
- local n = getfield(current,"value")
+ local n = getdata(current)
local candidate = inlinestore[n]
if candidate then -- no vpack, as we want to realign
inlinestore[n] = nil