From 1ef7a093aaf03b6327b3da94d47f53760c868c60 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Sat, 11 Aug 2018 01:23:08 +0200 Subject: 2018-08-10 16:58:00 --- tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkiv/anch-pgr.lua | 11 +- tex/context/base/mkiv/anch-pos.lua | 8 +- tex/context/base/mkiv/back-ini.lua | 8 +- tex/context/base/mkiv/char-ini.lua | 5 + tex/context/base/mkiv/cldf-ini.lua | 2 +- tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 5 +- tex/context/base/mkiv/core-uti.lua | 2 +- tex/context/base/mkiv/font-ctx.lua | 14 +- tex/context/base/mkiv/font-map.lua | 2 +- tex/context/base/mkiv/font-mps.lua | 3 +- tex/context/base/mkiv/font-sol.lua | 4 +- tex/context/base/mkiv/grph-epd.lua | 1 + tex/context/base/mkiv/grph-rul.lua | 11 +- tex/context/base/mkiv/l-macro-imp-optimize.lua | 24 +- tex/context/base/mkiv/l-macro.lua | 29 +- tex/context/base/mkiv/lpdf-ano.lua | 16 +- tex/context/base/mkiv/lpdf-epa.lua | 24 +- tex/context/base/mkiv/lpdf-ini.lua | 435 ++-- tex/context/base/mkiv/lpdf-nod.lua | 22 +- tex/context/base/mkiv/lpdf-pde.lua | 9 +- tex/context/base/mkiv/luat-cbk.lua | 6 + tex/context/base/mkiv/luat-run.lua | 5 + tex/context/base/mkiv/mlib-pps.lua | 4 +- tex/context/base/mkiv/mult-low.lua | 1 + tex/context/base/mkiv/node-dir.lua | 62 +- tex/context/base/mkiv/node-fnt.lua | 4 +- tex/context/base/mkiv/node-ltp.lua | 37 +- tex/context/base/mkiv/node-nut.lua | 123 +- tex/context/base/mkiv/node-ppt.lua | 6 +- tex/context/base/mkiv/node-res.lua | 48 +- tex/context/base/mkiv/node-rul.lua | 26 +- tex/context/base/mkiv/node-ser.lua | 2 +- tex/context/base/mkiv/node-syn.lua | 9 +- tex/context/base/mkiv/pack-lyr.mkiv | 82 +- tex/context/base/mkiv/page-imp.mkiv | 5 +- tex/context/base/mkiv/page-pcl.mkiv | 2 +- tex/context/base/mkiv/publ-aut.lua | 4 +- tex/context/base/mkiv/publ-dat.lua | 63 +- tex/context/base/mkiv/scrp-eth.lua | 2 +- tex/context/base/mkiv/scrp-ini.lua | 10 +- tex/context/base/mkiv/spac-ver.mkiv | 8 +- tex/context/base/mkiv/status-files.pdf | Bin 26189 -> 26245 bytes tex/context/base/mkiv/status-lua.pdf | Bin 264507 -> 267608 bytes tex/context/base/mkiv/strc-blk.mkiv | 42 +- tex/context/base/mkiv/strc-ref.lua | 4 + tex/context/base/mkiv/supp-box.mkiv | 20 + tex/context/base/mkiv/symb-imp-fontawesome.mkiv | 1475 ++++++------ tex/context/base/mkiv/symb-ini.mkiv | 62 +- tex/context/base/mkiv/symb-run.mkiv | 62 +- tex/context/base/mkiv/trac-par.lua | 3 +- tex/context/base/mkiv/trac-set.lua | 17 + tex/context/base/mkiv/trac-vis.lua | 7 +- tex/context/base/mkiv/typo-chr.lua | 3 +- tex/context/base/mkiv/typo-mar.lua | 3 +- tex/context/interface/mkiv/context-en.xml | 632 +++++- tex/context/interface/mkiv/i-attribute.xml | 2 + tex/context/interface/mkiv/i-backend.xml | 2 +- tex/context/interface/mkiv/i-buffer.xml | 8 +- tex/context/interface/mkiv/i-characteralign.xml | 51 + tex/context/interface/mkiv/i-common-keyword.xml | 19 +- tex/context/interface/mkiv/i-context.pdf | Bin 847003 -> 853260 bytes tex/context/interface/mkiv/i-context.xml | 1 + tex/context/interface/mkiv/i-contextname.xml | 2353 ++++++++++++++++++++ tex/context/interface/mkiv/i-description.xml | 5 + tex/context/interface/mkiv/i-effect.xml | 2 +- tex/context/interface/mkiv/i-enumeration.xml | 5 + tex/context/interface/mkiv/i-file.xml | 2 +- tex/context/interface/mkiv/i-fittingpage.xml | 2 +- tex/context/interface/mkiv/i-floats.xml | 202 +- tex/context/interface/mkiv/i-formula.xml | 3 + tex/context/interface/mkiv/i-framed.xml | 2 +- tex/context/interface/mkiv/i-graphics.xml | 30 +- tex/context/interface/mkiv/i-grid.xml | 6 + tex/context/interface/mkiv/i-hspace.xml | 2 + tex/context/interface/mkiv/i-kerning.xml | 32 + tex/context/interface/mkiv/i-label.xml | 5 + tex/context/interface/mkiv/i-layout.xml | 5 +- tex/context/interface/mkiv/i-linefiller.xml | 32 +- tex/context/interface/mkiv/i-list.xml | 64 +- tex/context/interface/mkiv/i-math.xml | 14 +- tex/context/interface/mkiv/i-mathmatrix.xml | 9 + tex/context/interface/mkiv/i-mathname.xml | 1091 +++++++++ tex/context/interface/mkiv/i-narrow.xml | 6 +- tex/context/interface/mkiv/i-note.xml | 6 + tex/context/interface/mkiv/i-pagecolumns.xml | 87 + tex/context/interface/mkiv/i-pagegrid.xml | 315 ++- tex/context/interface/mkiv/i-pagemarks.xml | 18 +- tex/context/interface/mkiv/i-readme.pdf | Bin 61212 -> 61212 bytes tex/context/interface/mkiv/i-register.xml | 12 +- tex/context/interface/mkiv/i-scale.xml | 3 + tex/context/interface/mkiv/i-script.xml | 22 +- tex/context/interface/mkiv/i-section.xml | 2 +- tex/context/interface/mkiv/i-startstop.xml | 30 +- tex/context/interface/mkiv/i-symbol.xml | 5 + tex/context/interface/mkiv/i-system.xml | 29 +- tex/context/interface/mkiv/i-tabulation.xml | 10 +- tex/context/interface/mkiv/i-tagging.xml | 2 +- tex/context/interface/mkiv/i-texts.xml | 79 +- tex/context/interface/mkiv/i-vspace.xml | 16 + tex/context/interface/mkiv/i-whitespace.xml | 2 + tex/context/interface/mkiv/i-xtable.xml | 19 + .../modules/common/s-abbreviations-logos.tex | 1 + tex/generic/context/luatex/luatex-fonts-merged.lua | 4 +- 106 files changed, 6770 insertions(+), 1327 deletions(-) create mode 100644 tex/context/interface/mkiv/i-contextname.xml create mode 100644 tex/context/interface/mkiv/i-mathname.xml create mode 100644 tex/context/interface/mkiv/i-pagecolumns.xml (limited to 'tex') diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 220ea6e69..06c0d4626 100644 --- a/tex/context/base/mkii/cont-new.mkii +++ b/tex/context/base/mkii/cont-new.mkii @@ -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 %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii index 5d5d44bde..33917ad55 100644 --- a/tex/context/base/mkii/context.mkii +++ b/tex/context/base/mkii/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2018.07.27 19:12} +\edef\contextversion{2018.08.10 16:51} %D For those who want to use this: 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<>b)&0x1)) - #define lshift(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<>b)&0x1) +#define lshift(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("")) +do -local function tosixteen(str) -- an lpeg might be faster (no table) - if not str or str == "" then - return "" -- 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("")) -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 "" -- 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 Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf index b314749a6..2eb9c7104 100644 Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf 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 diff --git a/tex/context/interface/mkiv/context-en.xml b/tex/context/interface/mkiv/context-en.xml index a1e2c4941..1df8eee8b 100644 --- a/tex/context/interface/mkiv/context-en.xml +++ b/tex/context/interface/mkiv/context-en.xml @@ -780,6 +780,7 @@ + @@ -793,6 +794,7 @@ + @@ -2976,7 +2978,7 @@ - + @@ -2997,7 +2999,7 @@ - + @@ -3807,8 +3809,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3822,6 +3850,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7479,6 +7532,7 @@ + @@ -7562,6 +7616,10 @@ + + + + @@ -8075,7 +8133,7 @@ - + @@ -8212,6 +8270,7 @@ + @@ -8295,6 +8354,10 @@ + + + + @@ -10167,7 +10230,7 @@ - + @@ -10229,6 +10292,13 @@ + + + + + + + @@ -10287,23 +10357,13 @@ - - - - - - - - - - - + @@ -10967,6 +11027,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13349,6 +13455,9 @@ + + + @@ -13387,6 +13496,9 @@ + + + @@ -13396,6 +13508,9 @@ + + + @@ -14419,12 +14534,6 @@ - - - - - - @@ -14442,6 +14551,16 @@ + + + + + + + + + + @@ -14760,6 +14879,20 @@ + + + + + + + + + + + + + + @@ -15006,6 +15139,12 @@ + + + + + + @@ -17975,6 +18114,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -18079,6 +18252,7 @@ + @@ -18163,6 +18337,10 @@ + + + + @@ -19205,6 +19383,7 @@ + @@ -19398,7 +19577,7 @@ - + @@ -19408,7 +19587,7 @@ - + @@ -19420,7 +19599,7 @@ - + @@ -19433,7 +19612,7 @@ - + @@ -19490,9 +19669,33 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -19987,7 +20190,6 @@ - @@ -20314,7 +20516,7 @@ - + @@ -20324,7 +20526,55 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -20334,7 +20584,7 @@ - + @@ -20345,7 +20595,7 @@ - + @@ -20359,7 +20609,7 @@ - + @@ -20373,7 +20623,7 @@ - + @@ -21779,6 +22029,7 @@ + @@ -21854,6 +22105,17 @@ + + + + + + + + + + + @@ -22723,6 +22985,14 @@ + + + + + + + + @@ -24972,6 +25242,10 @@ + + + + @@ -25330,6 +25604,7 @@ + @@ -26217,6 +26492,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -26283,7 +26630,7 @@ - + @@ -26292,11 +26639,11 @@ - + - + @@ -26338,43 +26685,27 @@ - + - + - + - + - - - - - - - - - - - - - - - - + - - + @@ -26383,11 +26714,11 @@ - + - + @@ -26413,24 +26744,24 @@ - + - + - + - + @@ -26439,11 +26770,11 @@ - + - + @@ -26483,7 +26814,7 @@ - + @@ -26493,7 +26824,7 @@ - + @@ -26509,7 +26840,7 @@ - + @@ -27066,17 +27397,31 @@ - + - + - + + + + + + + + + + + + + + + @@ -33140,7 +33485,7 @@ - + @@ -33209,6 +33554,10 @@ + + + + @@ -33348,6 +33697,12 @@ + + + + + + @@ -34043,6 +34398,7 @@ + @@ -34050,6 +34406,7 @@ + @@ -34057,6 +34414,7 @@ + @@ -34182,6 +34540,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -35955,10 +36339,7 @@ - - - - + @@ -36351,6 +36732,11 @@ + + + + + @@ -38920,7 +39306,7 @@ - + @@ -38933,7 +39319,7 @@ - + @@ -41379,6 +41765,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -41710,16 +42126,22 @@ - + - + + + + + + + @@ -41960,7 +42382,7 @@ - + @@ -42379,7 +42801,7 @@ - + @@ -42391,7 +42813,7 @@ - + @@ -42403,7 +42825,7 @@ - + @@ -42415,7 +42837,7 @@ - + @@ -42427,7 +42849,7 @@ - + @@ -44992,6 +45414,20 @@ + + + + + + + + + + + + + + @@ -45042,6 +45478,7 @@ + @@ -46435,6 +46872,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/tex/context/interface/mkiv/i-attribute.xml b/tex/context/interface/mkiv/i-attribute.xml index 96a680e19..0ea4ce7c0 100644 --- a/tex/context/interface/mkiv/i-attribute.xml +++ b/tex/context/interface/mkiv/i-attribute.xml @@ -30,6 +30,7 @@ + @@ -42,6 +43,7 @@ + diff --git a/tex/context/interface/mkiv/i-backend.xml b/tex/context/interface/mkiv/i-backend.xml index 5db77b5bd..ff52eed7d 100644 --- a/tex/context/interface/mkiv/i-backend.xml +++ b/tex/context/interface/mkiv/i-backend.xml @@ -86,4 +86,4 @@ - + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-buffer.xml b/tex/context/interface/mkiv/i-buffer.xml index 6dda83b64..0c94b7828 100644 --- a/tex/context/interface/mkiv/i-buffer.xml +++ b/tex/context/interface/mkiv/i-buffer.xml @@ -66,7 +66,7 @@ - + @@ -85,7 +85,7 @@ - + @@ -168,7 +168,7 @@ - + @@ -231,4 +231,4 @@ - + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-characteralign.xml b/tex/context/interface/mkiv/i-characteralign.xml index 3e9f81722..b95ff8487 100644 --- a/tex/context/interface/mkiv/i-characteralign.xml +++ b/tex/context/interface/mkiv/i-characteralign.xml @@ -24,9 +24,32 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -42,4 +65,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-common-keyword.xml b/tex/context/interface/mkiv/i-common-keyword.xml index 74a02890d..8469dab2f 100644 --- a/tex/context/interface/mkiv/i-common-keyword.xml +++ b/tex/context/interface/mkiv/i-common-keyword.xml @@ -792,4 +792,21 @@ - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf index 73e966d22..96e7b9c5a 100644 Binary files a/tex/context/interface/mkiv/i-context.pdf and b/tex/context/interface/mkiv/i-context.pdf differ diff --git a/tex/context/interface/mkiv/i-context.xml b/tex/context/interface/mkiv/i-context.xml index a328b6772..da34d4517 100644 --- a/tex/context/interface/mkiv/i-context.xml +++ b/tex/context/interface/mkiv/i-context.xml @@ -152,6 +152,7 @@ + diff --git a/tex/context/interface/mkiv/i-contextname.xml b/tex/context/interface/mkiv/i-contextname.xml new file mode 100644 index 000000000..3e289f3f5 --- /dev/null +++ b/tex/context/interface/mkiv/i-contextname.xml @@ -0,0 +1,2353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + comment="contextname=eth" level="document" category="characters" file="char-def.lua"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-description.xml b/tex/context/interface/mkiv/i-description.xml index f2cf33e82..9d71bd1a1 100644 --- a/tex/context/interface/mkiv/i-description.xml +++ b/tex/context/interface/mkiv/i-description.xml @@ -55,6 +55,7 @@ + @@ -129,6 +130,10 @@ + + + + diff --git a/tex/context/interface/mkiv/i-effect.xml b/tex/context/interface/mkiv/i-effect.xml index d20a62cd4..b71306fff 100644 --- a/tex/context/interface/mkiv/i-effect.xml +++ b/tex/context/interface/mkiv/i-effect.xml @@ -26,7 +26,7 @@ - + diff --git a/tex/context/interface/mkiv/i-enumeration.xml b/tex/context/interface/mkiv/i-enumeration.xml index 149f4f613..0f286b8b5 100644 --- a/tex/context/interface/mkiv/i-enumeration.xml +++ b/tex/context/interface/mkiv/i-enumeration.xml @@ -101,6 +101,7 @@ + @@ -175,6 +176,10 @@ + + + + diff --git a/tex/context/interface/mkiv/i-file.xml b/tex/context/interface/mkiv/i-file.xml index df649e8e0..bf12e5825 100644 --- a/tex/context/interface/mkiv/i-file.xml +++ b/tex/context/interface/mkiv/i-file.xml @@ -407,4 +407,4 @@ - + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-fittingpage.xml b/tex/context/interface/mkiv/i-fittingpage.xml index 8c2003568..7fc3a6cff 100644 --- a/tex/context/interface/mkiv/i-fittingpage.xml +++ b/tex/context/interface/mkiv/i-fittingpage.xml @@ -100,4 +100,4 @@ - + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-floats.xml b/tex/context/interface/mkiv/i-floats.xml index ef68fe985..2b25adf49 100644 --- a/tex/context/interface/mkiv/i-floats.xml +++ b/tex/context/interface/mkiv/i-floats.xml @@ -231,9 +231,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + --> - + @@ -293,7 +435,12 @@ - + + + + + + @@ -352,20 +499,11 @@ - - - - - - - - - - + @@ -797,4 +935,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tex/context/interface/mkiv/i-formula.xml b/tex/context/interface/mkiv/i-formula.xml index 07127a629..72693fb6c 100644 --- a/tex/context/interface/mkiv/i-formula.xml +++ b/tex/context/interface/mkiv/i-formula.xml @@ -274,6 +274,7 @@ + @@ -303,12 +304,14 @@ + + diff --git a/tex/context/interface/mkiv/i-framed.xml b/tex/context/interface/mkiv/i-framed.xml index e026465a1..a4667dd2e 100644 --- a/tex/context/interface/mkiv/i-framed.xml +++ b/tex/context/interface/mkiv/i-framed.xml @@ -627,4 +627,4 @@ - + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-graphics.xml b/tex/context/interface/mkiv/i-graphics.xml index b848b0e5e..a71291a2a 100644 --- a/tex/context/interface/mkiv/i-graphics.xml +++ b/tex/context/interface/mkiv/i-graphics.xml @@ -218,12 +218,6 @@ - - - - - - @@ -242,6 +236,16 @@ + + + + + + + + + + @@ -530,4 +534,16 @@ - + + + + + + + + + + + + + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-grid.xml b/tex/context/interface/mkiv/i-grid.xml index bd96388f3..cb70fa416 100644 --- a/tex/context/interface/mkiv/i-grid.xml +++ b/tex/context/interface/mkiv/i-grid.xml @@ -174,6 +174,12 @@ + + + + + + diff --git a/tex/context/interface/mkiv/i-hspace.xml b/tex/context/interface/mkiv/i-hspace.xml index 5926d864d..cc3c32f3d 100644 --- a/tex/context/interface/mkiv/i-hspace.xml +++ b/tex/context/interface/mkiv/i-hspace.xml @@ -91,6 +91,7 @@ + @@ -100,6 +101,7 @@ + diff --git a/tex/context/interface/mkiv/i-kerning.xml b/tex/context/interface/mkiv/i-kerning.xml index b45e916f2..64a2513b9 100644 --- a/tex/context/interface/mkiv/i-kerning.xml +++ b/tex/context/interface/mkiv/i-kerning.xml @@ -90,4 +90,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-label.xml b/tex/context/interface/mkiv/i-label.xml index a09360aa7..a1d36ef43 100644 --- a/tex/context/interface/mkiv/i-label.xml +++ b/tex/context/interface/mkiv/i-label.xml @@ -101,6 +101,7 @@ + @@ -176,6 +177,10 @@ + + + + diff --git a/tex/context/interface/mkiv/i-layout.xml b/tex/context/interface/mkiv/i-layout.xml index 19b233988..4370cc4f5 100644 --- a/tex/context/interface/mkiv/i-layout.xml +++ b/tex/context/interface/mkiv/i-layout.xml @@ -197,6 +197,7 @@ + @@ -367,14 +368,14 @@ - + - + diff --git a/tex/context/interface/mkiv/i-linefiller.xml b/tex/context/interface/mkiv/i-linefiller.xml index d3d98f446..ab53e64b0 100644 --- a/tex/context/interface/mkiv/i-linefiller.xml +++ b/tex/context/interface/mkiv/i-linefiller.xml @@ -4,7 +4,7 @@ - + @@ -14,7 +14,7 @@ - + @@ -72,9 +72,33 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tex/context/interface/mkiv/i-list.xml b/tex/context/interface/mkiv/i-list.xml index 8d4863dd2..a3ae22676 100644 --- a/tex/context/interface/mkiv/i-list.xml +++ b/tex/context/interface/mkiv/i-list.xml @@ -55,7 +55,9 @@ - + @@ -386,7 +388,7 @@ - + @@ -395,7 +397,55 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -404,7 +454,7 @@ - + @@ -416,7 +466,7 @@ - + @@ -431,7 +481,7 @@ - + @@ -446,7 +496,7 @@ - + diff --git a/tex/context/interface/mkiv/i-math.xml b/tex/context/interface/mkiv/i-math.xml index af9d87cb8..ae8fa1c3e 100644 --- a/tex/context/interface/mkiv/i-math.xml +++ b/tex/context/interface/mkiv/i-math.xml @@ -35,6 +35,7 @@ + @@ -109,6 +110,17 @@ + + + + + + + + + + + @@ -499,4 +511,4 @@ - + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-mathmatrix.xml b/tex/context/interface/mkiv/i-mathmatrix.xml index bd1452cdc..581a6928a 100644 --- a/tex/context/interface/mkiv/i-mathmatrix.xml +++ b/tex/context/interface/mkiv/i-mathmatrix.xml @@ -90,6 +90,15 @@ --> + + + + + + + + + diff --git a/tex/context/interface/mkiv/i-mathname.xml b/tex/context/interface/mkiv/i-mathname.xml new file mode 100644 index 000000000..63dab0991 --- /dev/null +++ b/tex/context/interface/mkiv/i-mathname.xml @@ -0,0 +1,1091 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-narrow.xml b/tex/context/interface/mkiv/i-narrow.xml index 5133b6302..a229a2112 100644 --- a/tex/context/interface/mkiv/i-narrow.xml +++ b/tex/context/interface/mkiv/i-narrow.xml @@ -75,7 +75,7 @@ - + @@ -100,7 +100,7 @@ - + @@ -118,7 +118,7 @@ - + diff --git a/tex/context/interface/mkiv/i-note.xml b/tex/context/interface/mkiv/i-note.xml index 9bcf43d5b..03e53a0e3 100644 --- a/tex/context/interface/mkiv/i-note.xml +++ b/tex/context/interface/mkiv/i-note.xml @@ -183,6 +183,10 @@ + + + + @@ -467,6 +471,8 @@ + + diff --git a/tex/context/interface/mkiv/i-pagecolumns.xml b/tex/context/interface/mkiv/i-pagecolumns.xml new file mode 100644 index 000000000..493f9c1dc --- /dev/null +++ b/tex/context/interface/mkiv/i-pagecolumns.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-pagegrid.xml b/tex/context/interface/mkiv/i-pagegrid.xml index 8e53ef8fc..3d08d8b8d 100644 --- a/tex/context/interface/mkiv/i-pagegrid.xml +++ b/tex/context/interface/mkiv/i-pagegrid.xml @@ -4,17 +4,76 @@ - + + + - + - + + + @@ -55,57 +114,121 @@ - + + + - + - + - + - + - - - - - - - - - - - - - - - - - + + + + + - + + + + + + + + + + + --> + + - + - + + + @@ -129,32 +252,111 @@ - + + + - + - + + + - + + + - + - + + + @@ -192,14 +394,38 @@ - + + + - + + + @@ -208,7 +434,20 @@ - + + + diff --git a/tex/context/interface/mkiv/i-pagemarks.xml b/tex/context/interface/mkiv/i-pagemarks.xml index 036f518b9..4d41bbfdd 100644 --- a/tex/context/interface/mkiv/i-pagemarks.xml +++ b/tex/context/interface/mkiv/i-pagemarks.xml @@ -4,16 +4,28 @@ - + - + - + + + + + + + + + + + + + diff --git a/tex/context/interface/mkiv/i-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf index 87725c503..afe48ba5a 100644 Binary files a/tex/context/interface/mkiv/i-readme.pdf and b/tex/context/interface/mkiv/i-readme.pdf differ diff --git a/tex/context/interface/mkiv/i-register.xml b/tex/context/interface/mkiv/i-register.xml index 668781213..7ba3a0f7c 100644 --- a/tex/context/interface/mkiv/i-register.xml +++ b/tex/context/interface/mkiv/i-register.xml @@ -167,7 +167,7 @@ - + @@ -225,6 +225,10 @@ + + + + @@ -338,6 +342,12 @@ + + + + + + diff --git a/tex/context/interface/mkiv/i-scale.xml b/tex/context/interface/mkiv/i-scale.xml index 3d26ed76f..36a46479e 100644 --- a/tex/context/interface/mkiv/i-scale.xml +++ b/tex/context/interface/mkiv/i-scale.xml @@ -44,6 +44,7 @@ + @@ -51,6 +52,7 @@ + @@ -58,6 +60,7 @@ + diff --git a/tex/context/interface/mkiv/i-script.xml b/tex/context/interface/mkiv/i-script.xml index 9af017492..affa2658b 100644 --- a/tex/context/interface/mkiv/i-script.xml +++ b/tex/context/interface/mkiv/i-script.xml @@ -47,15 +47,19 @@ - - - - - - - - - + + + + + + + + + + + + + diff --git a/tex/context/interface/mkiv/i-section.xml b/tex/context/interface/mkiv/i-section.xml index f3cf13d3e..b4229d5fd 100644 --- a/tex/context/interface/mkiv/i-section.xml +++ b/tex/context/interface/mkiv/i-section.xml @@ -518,4 +518,4 @@ - + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-startstop.xml b/tex/context/interface/mkiv/i-startstop.xml index c7780488c..ba0abb0b7 100644 --- a/tex/context/interface/mkiv/i-startstop.xml +++ b/tex/context/interface/mkiv/i-startstop.xml @@ -57,10 +57,32 @@ - - - - + + + diff --git a/tex/context/interface/mkiv/i-symbol.xml b/tex/context/interface/mkiv/i-symbol.xml index 123e98cbf..498684cad 100644 --- a/tex/context/interface/mkiv/i-symbol.xml +++ b/tex/context/interface/mkiv/i-symbol.xml @@ -119,6 +119,11 @@ + + + + + diff --git a/tex/context/interface/mkiv/i-system.xml b/tex/context/interface/mkiv/i-system.xml index 44def10e0..b06add710 100644 --- a/tex/context/interface/mkiv/i-system.xml +++ b/tex/context/interface/mkiv/i-system.xml @@ -1641,7 +1641,7 @@ - + @@ -1656,7 +1656,7 @@ - + @@ -3601,6 +3601,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tex/context/interface/mkiv/i-tabulation.xml b/tex/context/interface/mkiv/i-tabulation.xml index 8dc0f1d2c..6768b9b4c 100644 --- a/tex/context/interface/mkiv/i-tabulation.xml +++ b/tex/context/interface/mkiv/i-tabulation.xml @@ -44,15 +44,21 @@ - + - + + + + + + + diff --git a/tex/context/interface/mkiv/i-tagging.xml b/tex/context/interface/mkiv/i-tagging.xml index bbf794284..a7f94fcd2 100644 --- a/tex/context/interface/mkiv/i-tagging.xml +++ b/tex/context/interface/mkiv/i-tagging.xml @@ -72,7 +72,7 @@ - + diff --git a/tex/context/interface/mkiv/i-texts.xml b/tex/context/interface/mkiv/i-texts.xml index bd1b128b3..f0f515fbc 100644 --- a/tex/context/interface/mkiv/i-texts.xml +++ b/tex/context/interface/mkiv/i-texts.xml @@ -165,6 +165,75 @@ + + @@ -173,7 +242,7 @@ - + @@ -186,7 +255,7 @@ - + @@ -199,7 +268,7 @@ - + @@ -212,7 +281,7 @@ - + @@ -225,7 +294,7 @@ - + diff --git a/tex/context/interface/mkiv/i-vspace.xml b/tex/context/interface/mkiv/i-vspace.xml index 249ed10ab..5e970d317 100644 --- a/tex/context/interface/mkiv/i-vspace.xml +++ b/tex/context/interface/mkiv/i-vspace.xml @@ -124,4 +124,20 @@ + + + + + + + + + + + + + + + + diff --git a/tex/context/interface/mkiv/i-whitespace.xml b/tex/context/interface/mkiv/i-whitespace.xml index f1a8ce84e..83547fea5 100644 --- a/tex/context/interface/mkiv/i-whitespace.xml +++ b/tex/context/interface/mkiv/i-whitespace.xml @@ -59,4 +59,6 @@ + + \ No newline at end of file diff --git a/tex/context/interface/mkiv/i-xtable.xml b/tex/context/interface/mkiv/i-xtable.xml index c921e1a8d..0fae28e2e 100644 --- a/tex/context/interface/mkiv/i-xtable.xml +++ b/tex/context/interface/mkiv/i-xtable.xml @@ -77,6 +77,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/tex/context/modules/common/s-abbreviations-logos.tex b/tex/context/modules/common/s-abbreviations-logos.tex index c14265cc0..668dbc015 100644 --- a/tex/context/modules/common/s-abbreviations-logos.tex +++ b/tex/context/modules/common/s-abbreviations-logos.tex @@ -233,6 +233,7 @@ \logo [PSTOPAGE] {pstopage} \logo [PSTOPDF] {pstopdf} \logo [PSTRICKS] {pstricks} +\logo [PYTHON] {Python} \logo [RAID] {raid} \logo [RAM] {ram} \logo [RCA] {RCA} diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index bacd3bb91..2cbb670ce 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date : 07/27/18 19:12:09 +-- merge date : 08/10/18 16:51:00 do -- begin closure to overcome local limits and interference @@ -10748,7 +10748,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 -- cgit v1.2.3