summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/context/sources/general/manuals/luametatex/luametatex-enhancements.tex21
-rw-r--r--doc/context/sources/general/manuals/luametatex/luametatex-math.tex15
-rw-r--r--metapost/context/base/mpxl/mp-lmtx.mpxl134
-rw-r--r--source/luametatex/cmake/lua.cmake2
-rw-r--r--source/luametatex/source/lua/lmtnodelib.c15
-rw-r--r--source/luametatex/source/luametatex.h2
-rw-r--r--source/luametatex/source/tex/texcommands.c1
-rw-r--r--source/luametatex/source/tex/texconditional.c93
-rw-r--r--source/luametatex/source/tex/texdirections.c95
-rw-r--r--source/luametatex/source/tex/texdirections.h1
-rw-r--r--source/luametatex/source/tex/texdumpdata.h2
-rw-r--r--source/luametatex/source/tex/texequivalents.h17
-rw-r--r--source/luametatex/source/tex/texlinebreak.c21
-rw-r--r--source/luametatex/source/tex/texmaincontrol.c158
-rw-r--r--source/luametatex/source/tex/texmlist.c4
-rw-r--r--source/luametatex/source/tex/texnodes.c15
-rw-r--r--source/luametatex/source/tex/texnodes.h5
-rw-r--r--source/luametatex/source/tex/texprinting.c10
-rw-r--r--tex/context/base/mkii/cont-new.mkii2
-rw-r--r--tex/context/base/mkii/context.mkii2
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/lang-txt.lua276
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin24609 -> 24606 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin264666 -> 264746 bytes
-rw-r--r--tex/context/base/mkxl/char-brl.lmt2
-rw-r--r--tex/context/base/mkxl/cont-new.mkxl2
-rw-r--r--tex/context/base/mkxl/context.mkxl2
-rw-r--r--tex/context/base/mkxl/font-imp-braille.lmt4
-rw-r--r--tex/context/base/mkxl/font-pre.mkxl60
-rw-r--r--tex/context/base/mkxl/lang-hyp.lmt4
-rw-r--r--tex/context/base/mkxl/math-act.lmt2
-rw-r--r--tex/context/base/mkxl/math-brl.lmt526
-rw-r--r--tex/context/base/mkxl/strc-flt.mklx9
-rw-r--r--tex/context/base/mkxl/tabl-ntb.mkxl5
-rw-r--r--tex/context/fonts/mkiv/dejavu-math.lfg2
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua2
37 files changed, 1203 insertions, 312 deletions
diff --git a/doc/context/sources/general/manuals/luametatex/luametatex-enhancements.tex b/doc/context/sources/general/manuals/luametatex/luametatex-enhancements.tex
index cb7a990da..d2af933b8 100644
--- a/doc/context/sources/general/manuals/luametatex/luametatex-enhancements.tex
+++ b/doc/context/sources/general/manuals/luametatex/luametatex-enhancements.tex
@@ -2569,3 +2569,24 @@ it a playground.
\stopchapter
\stopcomponent
+
+% \bgroup \unprotect
+% \catcode`<= \lettercatcode
+% \ifnum 1 = 2 n \else y \fi
+% \ifnum 1 > 2 n \else y \fi
+% \ifnum 1 < 2 y \else n \fi
+% \ifnum 1 != 2 y \else n \fi
+% \ifnum 1 !> 2 y \else n \fi
+% \ifnum 1 !< 2 n \else y \fi
+% \ifnum 1 ≠ 2 y \else n \fi
+% \ifnum 1 ≥ 2 n \else y \fi
+% \ifnum 1 ≤ 2 y \else n \fi
+% \ifnum 1 ≱ 2 n \else y \fi
+% \ifnum 1 ≰ 2 y \else n \fi
+% \ifnum 1 ∈ 3 y \else n \fi
+% \ifnum 1 ∉ 3 n \else y \fi
+% \ifdim 10pt ∈ 10.5pt y \else n \fi
+% \ifdim 10pt ∉ 10.5pt n \else y \fi
+% \ifdim 11pt ∈ 10.5pt n \else y \fi
+% \ifdim 11pt ∉ 10.5pt y \else n \fi
+% \protect \egroup
diff --git a/doc/context/sources/general/manuals/luametatex/luametatex-math.tex b/doc/context/sources/general/manuals/luametatex/luametatex-math.tex
index 82a6cce50..0c9cb5c1c 100644
--- a/doc/context/sources/general/manuals/luametatex/luametatex-math.tex
+++ b/doc/context/sources/general/manuals/luametatex/luametatex-math.tex
@@ -1651,16 +1651,17 @@ effects.
\NC 0 \NC dynamic \NC dynamic \NC \SampleMath{0} \NC \NR
\NC 1 \NC $d$ \NC $u$ \NC \SampleMath{1} \NC \NR
\NC 2 \NC $s$ \NC $u$ \NC \SampleMath{2} \NC \NR
-\NC 3 \NC $s$ \NC $u + s - d$ \NC \SampleMath{3} \NC \NR
-\NC 4 \NC $d + (s-d)/2$ \NC $u + (s-d)/2$ \NC \SampleMath{4} \NC \NR
-\NC 5 \NC $d$ \NC $u + s - d$ \NC \SampleMath{5} \NC \NR
+%
+% In \LUATEX\ but dropped in \LUAMETATEX:
+%
+%NC 3 \NC $s$ \NC $u + s - d$ \NC \SampleMath{3} \NC \NR
+%NC 4 \NC $d + (s-d)/2$ \NC $u + (s-d)/2$ \NC \SampleMath{4} \NC \NR
+%NC 5 \NC $d$ \NC $u + s - d$ \NC \SampleMath{5} \NC \NR
\LL
\stoptabulate
-The value of this parameter obeys grouping but applies to the whole current
-formula.
-
-% if needed we can put the value in stylenodes but maybe more should go there
+The value of this parameter obeys grouping and is applied to character atoms only
+(but that might evolve as we go).
\stopsubsection
diff --git a/metapost/context/base/mpxl/mp-lmtx.mpxl b/metapost/context/base/mpxl/mp-lmtx.mpxl
index f26af8a60..e6daff660 100644
--- a/metapost/context/base/mpxl/mp-lmtx.mpxl
+++ b/metapost/context/base/mpxl/mp-lmtx.mpxl
@@ -1024,6 +1024,7 @@ presetparameters "chart" [
percentage = false,
maximum = 0,
distance = 1mm,
+ threshold = eps,
% labels = { },
labelstyle = "",
@@ -1084,17 +1085,18 @@ def lmt_chart_bar = applyparameters "chart:bar" "lmt_do_chart_bar"
def lmt_do_chart_start (expr what) =
pushparameters what ;
- save width, height, depth, distance, linewidth, linegap, labelgap, labelfraction, value, nofsamples, nofsamplesets ;
+ save width, height, depth, distance, threshold, linewidth, linegap, labelgap, labelfraction, value, nofsamples, nofsamplesets ;
save fillcolor, linecolor, drawcolor, labelcolor, labelstyle, labelformat, labelstrut, labelanchor, colormode ;
string fillcolor, linecolor, drawcolor, labelcolor, labelstyle, labelformat, labelstrut, labelanchor, colormode ;
if hasparameter "sampleset" :
setluaparameter what "samples" (getparameter "sampleset") ;
fi ;
+ threshold := getparameter "threshold" ;
+ linewidth := getparameter "linewidth" ;
height := getparameter "height" ;
- depth := max((getparameter "originsize"), (getparameter "innerradius")) ;
+ depth := max(getparameter "originsize", (getparameter "innerradius"), 8*linewidth) ;
width := getparameter "width" ;
distance := getparameter "distance" ;
- linewidth := getparameter "linewidth" ;
linegap := getparameterdefault "linegap" linewidth ;
drawcolor := getparameter "drawcolor" ;
colormode := getparameter "colormode" ;
@@ -1194,78 +1196,84 @@ vardef lmt_do_chart_circle =
nofsamplesets := 1 ;
save p, q, r, s, t, pl, ql, first, last, total, factor, n, percentage, initial, clockwise ;
path p, q, r, s[], t[] ; boolean percentage, clockwise ;
+ save value, v;
clockwise := true ;
percentage := getparameter "percentage" ;
initial := if not clockwise : - fi getparameter "initialangle" ; % watch sign
total := 0 ;
for i = 1 upto nofsamples :
- total := total + getparameter "samples" (1) i ; % () is needed else 1i
- endfor ;
- factor := 100/total ;
- first := initial ;
- if clockwise :
- p := (reverse fullcircle rotated first) ysized (height) ;
- q := (reverse fullcircle rotated first) ysized (depth) ;
- else :
- p := fullcircle ysized (height) ;
- q := fullcircle ysized (depth) ;
- fi ;
- r := origin -- (2*height,0) ;
- pl := ((linewidth + linegap) / (arclength p)) * 360;
- ql := ((linewidth + linegap) / (arclength q)) * 360;
- for i = 1 upto nofsamples :
- fillcolor := getparameter "fillcolors" i ;
- linecolor := getparameterdefault "linecolors" i "" ;
- if linecolor = "" :
- linecolor := fillcolor ;
+ value := getparameter "samples" (1) i ;
+ if value > threshold :
+ total := total + value ;
fi ;
- value := (getparameter "samples" (1) i) * factor ;
-if (value > -eps) and (value < eps) :
- s[i] := origin ;
- t[i] := origin ;
-else :
-% if (value > -eps) and (value < eps) :
-% value := eps ; % otherwise weird effects with zero
-% fi ;
- last := first if clockwise : - else : + fi (360/100) * value ;
- s[i] := ((p cutbefore (r rotated first)) cutafter (r rotated (last + pl))) ;
- t[i] := reverse ((q cutbefore (r rotated first)) cutafter (r rotated (last + ql))) ;
- path piece ; piece := s[i] -- t[i] -- cycle ;
- if fillcolor <> "" :
- fill piece
- withpen pencircle scaled linewidth
- withcolor fillcolor
- ;
- fi ;
- if linecolor <> "" :
- if linewidth > 0 :
- interim linecap := butt ;
- draw piece
- withpen pencircle scaled linewidth
- withcolor if linecolor <> "" : linecolor else drawcolor : fi
- ;
- fi ;
- fi ;
- first := last ;
-fi ;
endfor ;
- if linewidth > 0 :
- clip currentpicture to p enlarged linewidth ;
- fi ;
- if getparameter "showlabels" :
+ if total = 0 :
+ message("zero total in circular chart");
+ else :
+ factor := 100/total ;
first := initial ;
+ if clockwise :
+ p := (reverse fullcircle rotated first) ysized (height) ;
+ q := (reverse fullcircle rotated first) ysized (depth) ;
+ else :
+ p := fullcircle ysized (height) ;
+ q := fullcircle ysized (depth) ;
+ fi ;
+ r := origin -- (2*height,0) ;
+ pl := ((linewidth + linegap) / (arclength p)) * 360;
+ ql := ((linewidth + linegap) / (arclength q)) * 360;
+ v := 0 ;
for i = 1 upto nofsamples :
value := getparameter "samples" (1) i ;
- last := first if clockwise : - else : + fi (360/100) * value * factor ;
-if (value > -eps) and (value < eps) :
-else :
- draw lmt_do_chart_text (s,i,value)
- shifted ((labelfraction*(height/2),0) rotated ((first+last)/2)) ;
- first := last ;
-fi ;
+ if value > threshold :
+ v := v + 1 ;
+ fillcolor := getparameter "fillcolors" i ;
+ linecolor := getparameterdefault "linecolors" i "" ;
+ if linecolor = "" :
+ linecolor := fillcolor ;
+ fi ;
+ value := value * factor ;
+ last := first if clockwise : - else : + fi (360/100) * value ;
+ s[v] := ((p cutbefore (r rotated first)) cutafter (r rotated (last + pl))) ;
+ t[v] := reverse ((q cutbefore (r rotated first)) cutafter (r rotated (last + ql))) ;
+ path piece ; piece := s[v] -- t[v] -- cycle ;
+ if fillcolor <> "" :
+ fill piece
+ withpen pencircle scaled linewidth
+ withcolor fillcolor
+ ;
+ fi ;
+ if linecolor <> "" :
+ if linewidth > 0 :
+ interim linecap := butt ;
+ draw piece
+ withpen pencircle scaled linewidth
+ withcolor if linecolor <> "" : linecolor else drawcolor : fi
+ ;
+ fi ;
+ fi ;
+ first := last ;
+ fi ;
endfor ;
+ if linewidth > 0 :
+ clip currentpicture to p enlarged linewidth ;
+ fi ;
+ if getparameter "showlabels" :
+ first := initial ;
+ v := 0 ;
+ for i = 1 upto nofsamples :
+ value := getparameter "samples" (1) i ;
+ if value > threshold :
+ v := v + 1 ;
+ last := first if clockwise : - else : + fi (360/100) * value * factor ;
+ draw lmt_do_chart_text (s,i,value)
+ shifted ((labelfraction*(height/2),0) rotated ((first+last)/2)) ;
+ first := last ;
+ fi
+ endfor ;
+ fi ;
+ lmt_do_chart_legend ;
fi ;
- lmt_do_chart_legend ;
fi ;
lmt_do_chart_stop ;
)
diff --git a/source/luametatex/cmake/lua.cmake b/source/luametatex/cmake/lua.cmake
index 8e370a05e..ed0ab1803 100644
--- a/source/luametatex/cmake/lua.cmake
+++ b/source/luametatex/cmake/lua.cmake
@@ -56,6 +56,7 @@ target_include_directories(lua PRIVATE
target_compile_definitions(lua PUBLIC
# This one should also be set in the lua namespace!
# LUAI_HASHLIMIT=6 # obsolete
+ # LUAI_MAXSHORTLEN=48
LUAI_MAXCSTACK=6000
LUA_UCID
# LUA_USE_JUMPTABLE=0
@@ -64,6 +65,7 @@ target_compile_definitions(lua PUBLIC
# LUA_NOBUILTIN # disable likely usage
# LUAI_ASSERT
# LUA_STRFTIMEOPTIONS="aAbBcCdDeFgGhHIjmMnprRStTuUVwWxXyYzZ%"
+ # MINSTRTABSIZE=65536
)
if (UNIX)
diff --git a/source/luametatex/source/lua/lmtnodelib.c b/source/luametatex/source/lua/lmtnodelib.c
index afaa8bed5..cc7501786 100644
--- a/source/luametatex/source/lua/lmtnodelib.c
+++ b/source/luametatex/source/lua/lmtnodelib.c
@@ -10116,20 +10116,7 @@ void lmt_node_filter_callback(
/*tex redundant as we set top anyway */
lua_pop(L, 2);
/*tex find tail in order to update tail */
- start = node_next(head);
- if (start) {
- /*tex maybe just always slide (harmless and fast) */
- halfword last = node_next(start);
- while (last) {
- start = last;
- last = node_next(start);
- }
- /*tex we're at the end now */
- *tail = start;
- } else {
- /*tex we're already at the end */
- *tail = head;
- }
+ *tail = tex_tail_of_node_list(head);
lmt_callback_wrapup(L, top);
}
}
diff --git a/source/luametatex/source/luametatex.h b/source/luametatex/source/luametatex.h
index a9f739cec..07921d53a 100644
--- a/source/luametatex/source/luametatex.h
+++ b/source/luametatex/source/luametatex.h
@@ -89,7 +89,7 @@
# define luametatex_version 210
# define luametatex_revision 04
# define luametatex_version_string "2.10.04"
-# define luametatex_development_id 20221202
+# define luametatex_development_id 20221208
# define luametatex_name_camelcase "LuaMetaTeX"
# define luametatex_name_lowercase "luametatex"
diff --git a/source/luametatex/source/tex/texcommands.c b/source/luametatex/source/tex/texcommands.c
index 9425141db..c7ec0a2f4 100644
--- a/source/luametatex/source/tex/texcommands.c
+++ b/source/luametatex/source/tex/texcommands.c
@@ -197,6 +197,7 @@ void tex_initialize_commands(void)
tex_primitive(luatex_command, "tracingnodes", internal_int_cmd, tracing_nodes_code, internal_int_base);
tex_primitive(luatex_command, "tracingfullboxes", internal_int_cmd, tracing_full_boxes_code, internal_int_base);
tex_primitive(luatex_command, "tracingpenalties", internal_int_cmd, tracing_penalties_code, internal_int_base);
+ tex_primitive(luatex_command, "tracinglists", internal_int_cmd, tracing_lists_code, internal_int_base);
tex_primitive(tex_command, "uchyph", internal_int_cmd, uc_hyph_code, internal_int_base); /* obsolete, not needed */
tex_primitive(luatex_command, "variablefam", internal_int_cmd, variable_family_code, internal_int_base); /* obsolete, not used */
tex_primitive(tex_command, "vbadness", internal_int_cmd, vbadness_code, internal_int_base);
diff --git a/source/luametatex/source/tex/texconditional.c b/source/luametatex/source/tex/texconditional.c
index f89a57ba1..2197e9065 100644
--- a/source/luametatex/source/tex/texconditional.c
+++ b/source/luametatex/source/tex/texconditional.c
@@ -420,19 +420,65 @@ inline static halfword tex_aux_grab_toks(int expand, int expandlist, int *head)
return p ? token_link(p) : null;
}
+// inline static halfword tex_aux_scan_comparison(int code)
+// {
+// halfword r;
+// do {
+// tex_get_x_token();
+// } while (cur_cmd == spacer_cmd);
+// r = cur_tok - other_token;
+// if ((r < '<') || (r > '>')) {
+// tex_aux_missing_equal_error(code);
+// return '=';
+// } else {
+// return r;
+// }
+// }
+
+//inline static halfword tex_aux_scan_comparison(int code)
+//{
+// do {
+// tex_get_x_token();
+// } while (cur_cmd == spacer_cmd);
+// if (cur_cmd != other_char_cmd || (cur_chr < '<') || (cur_chr > '>')) {
+// tex_aux_missing_equal_error(code);
+// return '=';
+// } else {
+// return cur_chr;
+// }
+//}
+
inline static halfword tex_aux_scan_comparison(int code)
{
- halfword r;
- do {
+ int negate = 0;
+ while (1) {
tex_get_x_token();
- } while (cur_cmd == spacer_cmd);
- r = cur_tok - other_token;
- if ((r < '<') || (r > '>')) {
- tex_aux_missing_equal_error(code);
- return '=';
- } else {
- return r;
- }
+ switch (cur_cmd) {
+ case letter_cmd:
+ case other_char_cmd:
+ switch (cur_chr) {
+ /* traditional */
+ case '=' : return negate ? 3 : 0;
+ case '<' : return negate ? 4 : 1;
+ case '>' : return negate ? 5 : 2;
+ /* bonus */
+ case '!' : negate = ! negate ; continue;
+ /* neat */
+ case 0x2208: return negate ? 7 : 6; /* element of */
+ case 0x2209: return negate ? 6 : 7; /* not element of */
+ case 0x2260: return negate ? 0 : 3; /* not equal */
+ case 0x2264: return negate ? 2 : 5; /* less equal */
+ case 0x2265: return negate ? 1 : 4; /* greater equal */
+ case 0x2270: return negate ? 2 : 5; /* not less equal */
+ case 0x2271: return negate ? 1 : 4; /* not greater equal */
+ }
+ case spacer_cmd:
+ continue;
+ default:
+ tex_aux_missing_equal_error(code);
+ return 0;
+ }
+ }
}
void tex_conditional_if(halfword code, int unless)
@@ -497,11 +543,14 @@ void tex_conditional_if(halfword code, int unless)
}
}
switch (cp) {
- case '<': result = (n1 < n2); break;
- /* case '=': result = (n1 == n2); break; */
- case '>': result = (n1 > n2); break;
- /* default: break; */
- default : result = (n1 == n2); break;
+ case 0: result = (n1 == n2); break;
+ case 1: result = (n1 < n2); break;
+ case 2: result = (n1 > n2); break;
+ case 3: result = (n1 != n2); break;
+ case 4: result = (n1 >= n2); break;
+ case 5: result = (n1 <= n2); break;
+ case 6: result = (n1 & n2) == n1; break;
+ case 7: result = (n1 & n2) != n1; break;
}
}
goto RESULT;
@@ -525,11 +574,15 @@ void tex_conditional_if(halfword code, int unless)
}
}
switch (cp) {
- case '<': result = (n1 < n2); break;
- /* case '=': result = (n1 == n2); break; */
- case '>': result = (n1 > n2); break;
- /* default: break; */
- default : result = (n1 == n2); break;
+ case 0: result = (n1 == n2); break;
+ case 1: result = (n1 < n2); break;
+ case 2: result = (n1 > n2); break;
+ case 3: result = (n1 != n2); break;
+ case 4: result = (n1 >= n2); break;
+ case 5: result = (n1 <= n2); break;
+ /* maybe we should round */
+ case 6: result = (n1/65536 & n2/65536) == n1/65536; break;
+ case 7: result = (n1/65536 & n2/65536) != n1/65536; break;
}
}
goto RESULT;
diff --git a/source/luametatex/source/tex/texdirections.c b/source/luametatex/source/tex/texdirections.c
index 400b4c00d..c1bc55928 100644
--- a/source/luametatex/source/tex/texdirections.c
+++ b/source/luametatex/source/tex/texdirections.c
@@ -16,6 +16,9 @@
model (with rotation and offsets) that can help implementing vertical rendering, but that code
is not here.
+ Todo: |\tracingdirections| but costly so not really. The tracinglist is a middleground but I
+ might comment it at some point.
+
*/
# include "luametatex.h"
@@ -56,6 +59,11 @@ halfword tex_update_dir_state(halfword p, halfword initial)
}
}
+/*tex
+ The next function runs over the whole list (|first|, |last|) and initial is normally the
+ direction of the paragraph.
+*/
+
halfword tex_sanitize_dir_state(halfword first, halfword last, halfword initial)
{
for (halfword e = first; e && e != last; e = node_next(e)) {
@@ -75,15 +83,56 @@ halfword tex_sanitize_dir_state(halfword first, halfword last, halfword initial)
}
}
+/*tex
+ Here we inject the nodes that inititialize and cancel the direction states as stored in the
+ (reverse) stack into the list, after |tail|.
+*/
+
+void tex_append_dir_state(void)
+{
+ halfword dir = lmt_dir_state.text_dir_ptr;
+ halfword tail = cur_list.tail;
+ halfword first = null;
+ halfword last = null;
+ if (tracing_paragraph_lists) {
+ tex_begin_diagnostic();
+ tex_print_format("[paragraph: dirstate]");
+ tex_show_box(dir);
+ tex_end_diagnostic();
+ }
+ while (dir) {
+ if ((node_next(dir)) || (dir_direction(dir) != par_direction_par)) {
+ halfword tmp = tex_new_dir(normal_dir_subtype, dir_direction(dir));
+ tex_attach_attribute_list_copy(tmp, tail);
+ tex_try_couple_nodes(tmp, first);
+ first = tmp;
+ if (! last) {
+ last = tmp;
+ }
+ }
+ dir = node_next(dir);
+ }
+ if (first) {
+ if (tracing_paragraph_lists) {
+ tex_begin_diagnostic();
+ tex_print_format("[paragraph: injected dirs]");
+ tex_show_box(first);
+ tex_end_diagnostic();
+ }
+ tex_couple_nodes(cur_list.tail, first);
+ cur_list.tail = last;
+ }
+}
+
halfword tex_complement_dir_state(halfword tail)
{
- halfword e = node_next(tail);
- for (halfword p = lmt_linebreak_state.dir_ptr; p ; p = node_next(p)) {
- halfword s = tex_new_dir(cancel_dir_subtype, dir_direction(p));
- tex_attach_attribute_list_copy(s, tail);
- tex_couple_nodes(tail, s);
- tex_try_couple_nodes(s, e);
- tail = s;
+ halfword aftertail = node_next(tail);
+ for (halfword topdir = lmt_linebreak_state.dir_ptr; topdir ; topdir = node_next(topdir)) {
+ halfword dir = tex_new_dir(cancel_dir_subtype, dir_direction(topdir));
+ tex_attach_attribute_list_copy(dir, tail);
+ tex_couple_nodes(tail, dir);
+ tex_try_couple_nodes(dir, aftertail);
+ tail = dir;
}
return tail;
}
@@ -106,30 +155,52 @@ halfword tex_new_dir(quarterword subtype, halfword direction)
return p;
}
-/* todo: |\tracingdirections| */
-
void tex_push_text_dir_ptr(halfword val)
{
+ if (tracing_direction_lists) {
+ tex_begin_diagnostic();
+ tex_print_format("[direction: push text, level %i, before]", cur_level);
+ tex_show_box(lmt_dir_state.text_dir_ptr);
+ tex_end_diagnostic();
+ }
if (dir_level(lmt_dir_state.text_dir_ptr) == cur_level) {
/*tex update */
dir_direction(lmt_dir_state.text_dir_ptr) = val;
} else {
- /*tex add */
+ /*tex we push in front of head */
halfword text_dir_tmp = tex_new_dir(normal_dir_subtype, val);
node_next(text_dir_tmp) = lmt_dir_state.text_dir_ptr;
lmt_dir_state.text_dir_ptr = text_dir_tmp;
}
+ if (tracing_direction_lists) {
+ tex_begin_diagnostic();
+ tex_print_format("[direction: push text, level %i, after]", cur_level);
+ tex_show_box(lmt_dir_state.text_dir_ptr);
+ tex_end_diagnostic();
+ }
}
void tex_pop_text_dir_ptr(void)
{
halfword text_dir_ptr = lmt_dir_state.text_dir_ptr;
- if (dir_level(text_dir_ptr) == cur_level) {
- /*tex remove */
+ if (tracing_direction_lists) {
+ tex_begin_diagnostic();
+ tex_print_format("[direction: pop text, level %i, before]", cur_level);
+ tex_show_box(lmt_dir_state.text_dir_ptr);
+ tex_end_diagnostic();
+ }
+ if (dir_level(text_dir_ptr) == cur_level) { // maybe > and whole chain
+ /*tex we remove from the head */
halfword text_dir_tmp = node_next(text_dir_ptr);
tex_flush_node(text_dir_ptr);
lmt_dir_state.text_dir_ptr = text_dir_tmp;
}
+ if (tracing_direction_lists) {
+ tex_begin_diagnostic();
+ tex_print_format("[direction: pop text, level %i, after]", cur_level);
+ tex_show_box(lmt_dir_state.text_dir_ptr);
+ tex_end_diagnostic();
+ }
}
void tex_set_math_dir(halfword d)
diff --git a/source/luametatex/source/tex/texdirections.h b/source/luametatex/source/tex/texdirections.h
index cb85c2485..ce670c921 100644
--- a/source/luametatex/source/tex/texdirections.h
+++ b/source/luametatex/source/tex/texdirections.h
@@ -119,5 +119,6 @@ extern void tex_set_box_dir (halfword b, singleword d);
extern halfword tex_update_dir_state (halfword p, halfword initial);
extern halfword tex_sanitize_dir_state (halfword first, halfword last, halfword initial);
extern halfword tex_complement_dir_state (halfword tail);
+extern void tex_append_dir_state (void);
# endif
diff --git a/source/luametatex/source/tex/texdumpdata.h b/source/luametatex/source/tex/texdumpdata.h
index c8f373ea4..02514bdf3 100644
--- a/source/luametatex/source/tex/texdumpdata.h
+++ b/source/luametatex/source/tex/texdumpdata.h
@@ -55,7 +55,7 @@
*/
-# define luametatex_format_fingerprint 677
+# define luametatex_format_fingerprint 678
/* These end up in the string pool. */
diff --git a/source/luametatex/source/tex/texequivalents.h b/source/luametatex/source/tex/texequivalents.h
index 1a6c41b2a..336c9e206 100644
--- a/source/luametatex/source/tex/texequivalents.h
+++ b/source/luametatex/source/tex/texequivalents.h
@@ -477,6 +477,7 @@ typedef enum int_codes {
tracing_nodes_code, /*tex show node numbers too */
tracing_full_boxes_code, /*tex show [over/under]full boxes in the log */
tracing_penalties_code,
+ tracing_lists_code,
uc_hyph_code, /*tex hyphenate words beginning with a capital letter */
output_penalty_code, /*tex penalty found at current page break */
max_dead_cycles_code, /*tex bound on consecutive dead cycles of output */
@@ -1521,6 +1522,22 @@ typedef enum shaping_penalties_mode_bits {
# define tracing_nodes_par count_parameter(tracing_nodes_code)
# define tracing_full_boxes_par count_parameter(tracing_full_boxes_code)
# define tracing_penalties_par count_parameter(tracing_penalties_code)
+# define tracing_lists_par count_parameter(tracing_lists_code)
+
+/*tex
+ This tracer is mostly there for debugging purposes. Therefore what gets traced and how might
+ change depending on my needs.
+*/
+
+typedef enum tracing_lists_codes {
+ trace_direction_list_code = 0x0001,
+ trace_paragraph_list_code = 0x0002,
+ trace_linebreak_list_code = 0x0004,
+} tracing_lists_codes;
+
+# define tracing_direction_lists ((tracing_lists_par & trace_direction_list_code) == trace_direction_list_code)
+# define tracing_paragraph_lists ((tracing_lists_par & trace_paragraph_list_code) == trace_paragraph_list_code)
+# define tracing_linebreak_lists ((tracing_lists_par & trace_linebreak_list_code) == trace_linebreak_list_code)
# define show_box_depth_par count_parameter(show_box_depth_code)
# define show_box_breadth_par count_parameter(show_box_breadth_code)
diff --git a/source/luametatex/source/tex/texlinebreak.c b/source/luametatex/source/tex/texlinebreak.c
index 7c9e6b768..52e7f25d3 100644
--- a/source/luametatex/source/tex/texlinebreak.c
+++ b/source/luametatex/source/tex/texlinebreak.c
@@ -144,6 +144,12 @@ void tex_line_break_prepare(
{
/* too much testing of next */
if (node_type(par) == par_node) {
+ if (tracing_linebreak_lists) {
+ tex_begin_diagnostic();
+ tex_print_format("[linebreak: prepare, before]");
+ tex_show_box(par);
+ tex_end_diagnostic();
+ }
*tail = *tail ? *tail : tex_tail_of_node_list(par);
*final_penalty = tex_new_penalty_node(infinite_penalty, line_penalty_subtype);
*parfill_left_skip_glue = tex_new_glue_node(tex_get_par_par(par, par_par_fill_left_skip_code), par_fill_left_skip_glue);
@@ -164,7 +170,11 @@ void tex_line_break_prepare(
tex_try_couple_nodes(*parfill_left_skip_glue, *parfill_right_skip_glue);
*tail = *parfill_right_skip_glue;
if (node_next(par)) {
+ halfword p = par;
halfword n = node_next(par);
+ while (node_next(p) && node_type(node_next(p)) == dir_node) {
+ p = node_next(p);
+ }
while (n) {
if (node_type(n) == glue_node && node_subtype(n) == indent_skip_glue) {
*parinit_left_skip_glue = tex_new_glue_node(tex_get_par_par(par, par_par_init_left_skip_code), par_init_left_skip_glue);
@@ -173,13 +183,20 @@ void tex_line_break_prepare(
tex_attach_attribute_list_copy(*parinit_right_skip_glue, par);
tex_try_couple_nodes(*parinit_right_skip_glue, n);
tex_try_couple_nodes(*parinit_left_skip_glue, *parinit_right_skip_glue);
- tex_try_couple_nodes(par, *parinit_left_skip_glue);
+ // tex_try_couple_nodes(par, *parinit_left_skip_glue);
+ tex_try_couple_nodes(p, *parinit_left_skip_glue);
break;
} else {
- n = node_next(n);
+ n = node_next(n); /* sort of weird and tricky */
}
}
}
+ if (tracing_linebreak_lists) {
+ tex_begin_diagnostic();
+ tex_print_format("[linebreak: prepare, after]");
+ tex_show_box(par);
+ tex_end_diagnostic();
+ }
}
}
diff --git a/source/luametatex/source/tex/texmaincontrol.c b/source/luametatex/source/tex/texmaincontrol.c
index 6de36d7ee..24729d8cb 100644
--- a/source/luametatex/source/tex/texmaincontrol.c
+++ b/source/luametatex/source/tex/texmaincontrol.c
@@ -960,16 +960,16 @@ static void tex_aux_insert_parindent(int indented)
{
if (normalize_line_mode_permitted(normalize_line_mode_par, parindent_skip_mode)) {
/*tex We cannot use |new_param_glue| yet, because it's a dimen */
- halfword p = tex_new_glue_node(zero_glue, indent_skip_glue);
+ halfword glue = tex_new_glue_node(zero_glue, indent_skip_glue);
if (indented) {
- glue_amount(p) = par_indent_par;
+ glue_amount(glue) = par_indent_par;
}
- tex_tail_append(p);
+ tex_tail_append(glue);
} else if (indented) {
- halfword p = tex_new_null_box_node(hlist_node, indent_list);
- box_dir(p) = (singleword) par_direction_par;
- box_width(p) = par_indent_par;
- tex_tail_append(p);
+ halfword box = tex_new_null_box_node(hlist_node, indent_list);
+ box_dir(box) = (singleword) par_direction_par;
+ box_width(box) = par_indent_par;
+ tex_tail_append(box);
}
}
@@ -2859,31 +2859,105 @@ void tex_box_end(int boxcontext, halfword boxnode, scaled shift, halfword maincl
*/
+// void tex_begin_paragraph(int doindent, int context)
+// {
+// halfword q;
+// int indented = doindent;
+// int isvmode = cur_list.mode == vmode;
+// if (isvmode || cur_list.head != cur_list.tail) {
+// /*tex
+// Actually we could remove the callback and hook it into the |\everybeforepar| but that one
+// started out as a |tex.expandmacro| itself and we don't want the callback overhead every
+// time, so now we have both. However, in the end I decided to do this one {\em before} the
+// parskip is injected.
+// */
+// if (every_before_par_par) {
+// tex_begin_inserted_list(tex_get_available_token(token_val(end_local_cmd, 0)));
+// tex_begin_token_list(every_before_par_par, every_before_par_text);
+// if (tracing_nesting_par > 2) {
+// tex_local_control_message("entering local control via \\everybeforepar");
+// }
+// tex_local_control(1);
+// }
+// // if (type(cur_list.tail) == glue_node && subtype(cur_list.tail) == par_skip_glue) {
+// // /* ignore */
+// // } else {
+// tex_tail_append(tex_new_param_glue_node(par_skip_code, par_skip_glue));
+// // }
+// }
+// lmt_begin_paragraph_callback(isvmode, &indented, context);
+// /*tex We'd better not messed up things in the callback! */
+// cur_list.prev_graf = 0;
+// tex_push_nest();
+// cur_list.mode = hmode;
+// cur_list.space_factor = default_space_factor;
+// /*tex Add local paragraph node */
+// tex_tail_append(tex_new_par_node(vmode_par_par_subtype));
+// // if (end_of_par_par) {
+// // update_tex_end_of_par(null); /* option */
+// // }
+// q = cur_list.tail;
+// /*tex We will move this to after the dir nodes have been dealt with. */
+// tex_aux_insert_parindent(indented);
+// /*tex Dir nodes end up before the indent box. */
+// {
+// halfword dir_rover = lmt_dir_state.text_dir_ptr;
+// while (dir_rover) {
+// if ((node_next(dir_rover)) || (dir_direction(dir_rover) != par_direction_par)) {
+// halfword dir_graf_tmp = tex_new_dir(normal_dir_subtype, dir_direction(dir_rover));
+// tex_try_couple_nodes(dir_graf_tmp, node_next(q));
+// tex_couple_nodes(q, dir_graf_tmp);
+// }
+// dir_rover = node_next(dir_rover);
+// }
+// }
+// /*tex We might need to go to the last injected dir and/or indent node. */
+// while (node_next(q)) {
+// q = node_next(q);
+// }
+// cur_list.tail = q;
+// /*tex The |\everypar| tokens are injected after dir nodes have been added. */
+// if (every_par_par) {
+// tex_begin_token_list(every_par_par, every_par_text);
+// }
+// if (lmt_nest_state.nest_data.ptr == 1) {
+// if (! lmt_page_builder_state.output_active) {
+// lmt_page_filter_callback(begin_paragraph_page_context, 0);
+// }
+// /*tex put |par_skip| glue on current page */
+// tex_build_page();
+// }
+// }
+
+void tex_tail_prepend(halfword n)
+{
+ tex_couple_nodes(node_prev(cur_list.tail), n);
+ tex_couple_nodes(n, cur_list.tail);
+ if (cur_list.tail == cur_list.head) {
+ cur_list.head = n;
+ }
+}
+
void tex_begin_paragraph(int doindent, int context)
{
- halfword q;
int indented = doindent;
int isvmode = cur_list.mode == vmode;
if (isvmode || cur_list.head != cur_list.tail) {
- /*tex
- Actually we could remove the callback and hook it into the |\everybeforepar| but that one
- started out as a |tex.expandmacro| itself and we don't want the callback overhead every
- time, so now we have both. However, in the end I decided to do this one {\em before} the
- parskip is injected.
- */
- if (every_before_par_par) {
- tex_begin_inserted_list(tex_get_available_token(token_val(end_local_cmd, 0)));
- tex_begin_token_list(every_before_par_par, every_before_par_text);
- if (tracing_nesting_par > 2) {
- tex_local_control_message("entering local control via \\everybeforepar");
+ /*tex
+ Actually we could remove the callback and hook it into the |\everybeforepar| but that one
+ started out as a |tex.expandmacro| itself and we don't want the callback overhead every
+ time, so now we have both. However, in the end I decided to do this one {\em before} the
+ parskip is injected.
+ */
+ if (every_before_par_par) {
+ tex_begin_inserted_list(tex_get_available_token(token_val(end_local_cmd, 0)));
+ tex_begin_token_list(every_before_par_par, every_before_par_text);
+ if (tracing_nesting_par > 2) {
+ tex_local_control_message("entering local control via \\everybeforepar");
+ }
+ tex_local_control(1);
}
- tex_local_control(1);
- }
- // if (type(cur_list.tail) == glue_node && subtype(cur_list.tail) == par_skip_glue) {
- // /* ignore */
- // } else {
tex_tail_append(tex_new_param_glue_node(par_skip_code, par_skip_glue));
- // }
}
lmt_begin_paragraph_callback(isvmode, &indented, context);
/*tex We'd better not messed up things in the callback! */
@@ -2891,32 +2965,18 @@ void tex_begin_paragraph(int doindent, int context)
tex_push_nest();
cur_list.mode = hmode;
cur_list.space_factor = default_space_factor;
- /*tex Add local paragraph node */
+ /*tex Add local paragraph node */
tex_tail_append(tex_new_par_node(vmode_par_par_subtype));
- // if (end_of_par_par) {
- // update_tex_end_of_par(null); /* option */
- // }
- q = cur_list.tail;
- /*tex We will move this to after the dir nodes have been dealt with. */
- tex_aux_insert_parindent(indented);
/*tex Dir nodes end up before the indent box. */
- {
- halfword dir_rover = lmt_dir_state.text_dir_ptr;
- while (dir_rover) {
- if ((node_next(dir_rover)) || (dir_direction(dir_rover) != par_direction_par)) {
- halfword dir_graf_tmp = tex_new_dir(normal_dir_subtype, dir_direction(dir_rover));
- tex_try_couple_nodes(dir_graf_tmp, node_next(q));
- tex_couple_nodes(q, dir_graf_tmp);
- }
- dir_rover = node_next(dir_rover);
- }
- }
- /*tex We might need to go to the last injected dir and/or indent node. */
- while (node_next(q)) {
- q = node_next(q);
+ tex_append_dir_state();
+ tex_aux_insert_parindent(indented);
+ if (tracing_paragraph_lists) {
+ tex_begin_diagnostic();
+ tex_print_format("[paragraph: start, context %i]", context);
+ tex_show_box(node_next(cur_list.head));
+ tex_end_diagnostic();
}
- cur_list.tail = q;
- /*tex The |\everypar| tokens are injected after dir nodes have been added. */
+ /*tex The |\everypar| tokens are injected after all these nodes have been added. */
if (every_par_par) {
tex_begin_token_list(every_par_par, every_par_text);
}
@@ -3396,7 +3456,7 @@ void tex_inject_text_or_line_dir(int val, int check_glue)
/*tex |tail| is non zero but we test anyway. */
halfword dirn = tex_new_dir(cancel_dir_subtype, text_direction_par);
halfword tail = cur_list.tail;
- if (check_glue && tail && node_type(tail) == glue_node) {
+ if (check_glue && tail && node_type(tail) == glue_node) { // && node_subtype(tail) != indent_skip_glue
halfword prev = node_prev(tail);
tex_couple_nodes(prev, dirn);
tex_couple_nodes(dirn, tail);
diff --git a/source/luametatex/source/tex/texmlist.c b/source/luametatex/source/tex/texmlist.c
index 83a8a8a96..1d4cbacd8 100644
--- a/source/luametatex/source/tex/texmlist.c
+++ b/source/luametatex/source/tex/texmlist.c
@@ -135,6 +135,10 @@
as we like. All works fine for Cambria and the \TEX\ community didn't make sure that better
features were added (like anchors) for their shapes.
+ In the end, from the perspective of ConTeXt, the italics code can completely go away which
+ means that we also no longer have to stare at somewhat fuzzy code originating in dealing
+ with italics. It depends on how well our latest heuristic tweaks work out.
+
*/
# include "luametatex.h"
diff --git a/source/luametatex/source/tex/texnodes.c b/source/luametatex/source/tex/texnodes.c
index 7eba8a787..a0601e594 100644
--- a/source/luametatex/source/tex/texnodes.c
+++ b/source/luametatex/source/tex/texnodes.c
@@ -2667,12 +2667,7 @@ void tex_show_node_list(halfword p, int threshold, int max)
tex_print_format(", shifted %D", box_shift_amount(p), pt_unit);
}
if (valid_direction(box_dir(p))) {
- tex_print_str(", direction ");
- switch (box_dir(p)) {
- case dir_lefttoright: tex_print_str("l2r"); break;
- case dir_righttoleft: tex_print_str("r2l"); break;
- default : tex_print_str("unset"); break;
- }
+ tex_print_format(", direction %2", box_dir(p));
}
if (box_geometry(p)) {
tex_print_format(", geometry %x", box_geometry(p));
@@ -2757,17 +2752,13 @@ void tex_show_node_list(halfword p, int threshold, int max)
tex_print_node_list(insert_list(p), "list", threshold, max);
break;
case dir_node:
- tex_print_str(", direction ");
- switch (dir_direction(p)) {
- case direction_l2r : tex_print_str("l2r"); break;
- case direction_r2l : tex_print_str("r2l"); break;
- default : tex_print_str("unset"); break;
- }
+ tex_print_format(", direction %2, level %i", dir_direction(p), dir_level(p));
break;
case par_node:
{
halfword v;
/*tex We're already past processing so we only show the stored values. */
+ tex_print_format(", direction %2", par_dir(p));
if (node_subtype(p) == vmode_par_par_subtype) {
if (tex_par_state_is_set(p, par_par_shape_code) ) { v = par_par_shape(p) ; if (v) { tex_print_str(", parshape * "); } }
if (tex_par_state_is_set(p, par_inter_line_penalties_code) ) { v = par_inter_line_penalties(p) ; if (v) { tex_print_str(", interlinepenalties * "); } }
diff --git a/source/luametatex/source/tex/texnodes.h b/source/luametatex/source/tex/texnodes.h
index c6cc61ff2..45e53187a 100644
--- a/source/luametatex/source/tex/texnodes.h
+++ b/source/luametatex/source/tex/texnodes.h
@@ -2092,8 +2092,9 @@ typedef enum boundary_subtypes {
# define last_boundary_subtype word_boundary
# define last_boundary_code page_boundary
-# define boundary_node_size 3
-# define boundary_data(a) vinfo(a,2)
+# define boundary_node_size 3
+# define boundary_data(a) vinfo(a,2)
+# define boundary_reserved(a) vlink(a,2) // maybe level
typedef enum dir_subtypes {
normal_dir_subtype,
diff --git a/source/luametatex/source/tex/texprinting.c b/source/luametatex/source/tex/texprinting.c
index 6d01854b7..bb021047e 100644
--- a/source/luametatex/source/tex/texprinting.c
+++ b/source/luametatex/source/tex/texprinting.c
@@ -1304,6 +1304,16 @@ const char *tex_print_format_args(const char *format, va_list args)
tex_print_uhex(c);
break;
}
+ case '2':
+ {
+ halfword c = va_arg(args, int);
+ switch (c) {
+ case direction_l2r : tex_print_str("l2r"); break;
+ case direction_r2l : tex_print_str("r2l"); break;
+ default : tex_print_str("unset"); break;
+ }
+ break;
+ }
case '%':
tex_print_char('%');
break;
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index 1dec26734..9bd797523 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{2022.12.07 20:21}
+\newcontextversion{2022.12.09 16:31}
%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 176f510ba..3a7b24584 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{2022.12.07 20:21}
+\edef\contextversion{2022.12.09 16:31}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index 96db775a1..3c2193719 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -13,7 +13,7 @@
% \normalend % uncomment this to get the real base runtime
-\newcontextversion{2022.12.07 20:21}
+\newcontextversion{2022.12.09 16:31}
%D This file is loaded at runtime, thereby providing an excellent place for hacks,
%D patches, extensions and new features. There can be local overloads in cont-loc
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index f78fb6cbd..b89cecdfe 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -49,7 +49,7 @@
%D {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2022.12.07 20:21}
+\edef\contextversion{2022.12.09 16:31}
%D Kind of special:
diff --git a/tex/context/base/mkiv/lang-txt.lua b/tex/context/base/mkiv/lang-txt.lua
index c4f3603ec..1b278926e 100644
--- a/tex/context/base/mkiv/lang-txt.lua
+++ b/tex/context/base/mkiv/lang-txt.lua
@@ -23,18 +23,18 @@ if not modules then modules = { } end modules ['lang-txt'] = {
-- ar Arabic Idris Samawi Hamid, Khaled Hosny
-- be Belarussian Darya Hryshkavets (2019)
-- bg Bulgarian Vladislav Hinkin, Aleš Ďurčanský (2019)
--- ca Catalan ...
+-- ca Catalan ...; additions Javier Gambin Monzo + Samuel Conca Coles (2022)
-- cn Chinese Wang Lei, ...
-- cs Czech Tom Hudec, Petr Sojka, Richard Gabriel
-- da Danish Arne Jorgensen
-- de German Tobias Burnus, ...
-- en English Hans Hagen, ...
-- eo Esperanto Alain Delmotte (2021)
--- es Spanish Andrés Montoya, ...
+-- es Spanish Andrés Montoya, ...; additions Javier Gambin Monzo + Samuel Conca Coles (2022)
-- et Estonian Clyde Johnston (2018)
-- fa Persian Mohammad Hossein Bateni (2016)
--- fi Finnish ...
--- fr French Daniel Flipo, Arthur Reutenauer
+-- fi Finnish ...; additions Ossi Salo (2022)
+-- fr French Daniel Flipo, Arthur Reutenauer; additions Arnaud Pierre Henri De Barbentane + Adrien Patton (2022)
-- gr Greek Apostolos Syropoulos, Thomas Schmitz
-- hr Croatian Željko Vrba, Richard Gabriel, Vedran Miletić
-- hu Hungarian Adam Reviczky
@@ -83,6 +83,7 @@ data.labels={
["labels"]={
["be"]="У",
["bg"]="в",
+ ["ca"]="En",
["de"]="In",
["en"]="In",
["eo"]="En",
@@ -99,9 +100,11 @@ data.labels={
["labels"]={
["be"]="Нумар",
["bg"]="номер",
+ ["ca"]="Nombre",
["de"]="Nummer",
["en"]="Number",
["eo"]="Nombro",
+ ["es"]="Numero",
["fa"]="شماره",
["fr"]="Numéro",
["hy"]="Համար",
@@ -115,22 +118,26 @@ data.labels={
["labels"]={
["be"]="Гук",
["bg"]="обем",
+ ["ca"]="Volum",
["de"]="Band",
["en"]="Volume",
["eo"]="Volumo",
+ ["es"]="Volumen",
["et"]="Köide",
["fa"]="جلد",
+ ["fr"]="Volume",
["hy"]="Ծավալ",
["mk"]="Том",
["nl"]="Deel",
- ["sr-latn"]="Tom",
["sr"]="Том",
+ ["sr-latn"]="Tom",
},
},
["and"]={
["labels"]={
["be"]="i",
["bg"]="a",
+ ["ca"]="i",
["de"]="und",
["en"]="and",
["eo"]="kaj",
@@ -150,12 +157,14 @@ data.labels={
["labels"]={
["be"]="Выданне",
["bg"]="издание",
+ ["ca"]="Edició",
["de"]="Auflage",
["en"]="edition",
["eo"]="eldono",
["es"]="edición",
["et"]="väljaanne",
["fa"]="ویرایش",
+ ["fi"]="versio",
["fr"]="édition",
["hy"]="հրատարակություն",
["it"]="edizione",
@@ -169,9 +178,11 @@ data.labels={
["labels"]={
["be"]="Рэдактар",
["bg"]="редактор",
+ ["ca"]="Editor",
["de"]="Herausgeber",
["en"]="editor",
["eo"]="eldonisto",
+ ["es"]="editor",
["et"]="toimetaja",
["fa"]="ویراستار",
["fr"]="éditeur",
@@ -186,6 +197,7 @@ data.labels={
["labels"]={
["be"]="Рэдактары",
["bg"]="редактори",
+ ["ca"]="Editors",
["de"]="Herausgeber",
["en"]="editors",
["eo"]="eldonistoj",
@@ -203,6 +215,7 @@ data.labels={
["labels"]={
["be"]="у",
["bg"]="в",
+ ["ca"]="en",
["de"]="in",
["en"]="in",
["eo"]="en",
@@ -219,12 +232,14 @@ data.labels={
["labels"]={
["be"]="Дыпломная работа",
["bg"]="дипломна работа",
+ ["ca"]="Tesi de maestria",
["de"]="Masterarbeit",
["en"]="Master's thesis",
["eo"]="Magistreca disertaĵo",
["es"]="Tesis de maestría",
["et"]="magistritöö",
["fa"]="پایان‌نامه کارشناسی ارشد",
+ ["fi"]="Pro gradu tutkielma",
["fr"]="Thèse de master (DEA, DESS, master)",
["hy"]="Մագիստրոսական թեզ",
["it"]="Tesi di laurea",
@@ -238,10 +253,13 @@ data.labels={
["labels"]={
["be"]="нумар",
["bg"]="номер",
+ ["ca"]="nombre",
["de"]="Nummer",
["en"]="number",
["eo"]="numero",
+ ["es"]="numero",
["fa"]="شماره",
+ ["fi"]="numero",
["fr"]="numéro",
["hy"]="համար",
["mk"]="број",
@@ -254,9 +272,11 @@ data.labels={
["labels"]={
["be"]="з",
["bg"]="на",
+ ["ca"]="de",
["de"]="von",
["en"]="of",
["eo"]="de",
+ ["es"]="de",
["fr"]="de",
["hy"]="-ից",
["mk"]="од",
@@ -267,10 +287,13 @@ data.labels={
},
["others"]={
["labels"]={
+ ["ca"]="et al.",
["de"]="et al.",
["en"]="et al.",
["eo"]="aliaj",
+ ["es"]="otros",
["et"]="jt",
+ ["fr"]="et al.",
["hy"]="եւ այլն",
["mk"]="и др.",
["sr"]="и др.",
@@ -280,11 +303,14 @@ data.labels={
["p"]={
["labels"]={
["be"]="стар.",
+ ["ca"]="p.",
["de"]="S.",
["en"]="p.",
["eo"]="p.",
+ ["es"]="p",
["et"]="lk",
["fa"]="ص",
+ ["fr"]="p.",
["hy"]="էջ",
["mk"]="стр.",
["sr"]="стр.",
@@ -295,11 +321,15 @@ data.labels={
["labels"]={
["be"]="старонка",
["bg"]="страни",
+ ["ca"]="pagines",
["de"]="Seiten",
["en"]="pages",
["eo"]="paĝoj",
+ ["es"]="paginas",
["et"]="leheküljed",
["fa"]="صفحات",
+ ["fi"]="sivut",
+ ["fr"]="pages",
["hy"]="էջեր",
["mk"]="страници",
["nl"]="paginas",
@@ -311,11 +341,13 @@ data.labels={
["labels"]={
["be"]="патэнт",
["bg"]="патент",
+ ["ca"]="Patent",
["de"]="Patent",
["en"]="Patent",
["eo"]="Patento",
["es"]="Patente",
["et"]="Patent",
+ ["fi"]="patentti",
["fr"]="Brevet",
["hy"]="Արտոնագիր",
["it"]="Brevetto",
@@ -329,6 +361,7 @@ data.labels={
["labels"]={
["be"]="Доктарская дысертацыя",
["bg"]="дисертачна работа",
+ ["ca"]="Tesi doctoral",
["de"]="Dissertation",
["en"]="PhD thesis",
["eo"]="Doktoriĝa disertaĵo",
@@ -346,9 +379,11 @@ data.labels={
},
["pp"]={
["labels"]={
+ ["ca"]="pp",
["de"]="S.",
["en"]="pp.",
["eo"]="pp.",
+ ["es"]="pp",
["et"]="lk-d",
["fa"]="صص",
["hy"]="էջ",
@@ -361,12 +396,14 @@ data.labels={
["labels"]={
["be"]="Тэхнічны даклад",
["bg"]="технически доклад",
+ ["ca"]="Report tecnic",
["de"]="Technischer Bericht",
["en"]="Technical report",
["eo"]="Teknika raporto",
["es"]="Informe técnico",
["et"]="tehniline raport",
["fa"]="گزارش فنی",
+ ["fi"]="Tekninen raportti",
["fr"]="Rapport technique",
["hy"]="Տեխնիկական հաշվետվություն",
["it"]="Relazione tecnica",
@@ -380,11 +417,14 @@ data.labels={
["labels"]={
["be"]="гучнасць",
["bg"]="обем",
+ ["ca"]="volum",
["de"]="Band",
["en"]="volume",
["eo"]="volumo",
+ ["es"]="volumen",
["et"]="köide",
["fa"]="جلد",
+ ["fr"]="volume",
["hy"]="ծավալ",
["mk"]="том",
["nl"]="deel",
@@ -396,11 +436,13 @@ data.labels={
["labels"]={
["be"]="з",
["bg"]="със",
+ ["ca"]="en",
["de"]="mit",
["en"]="with",
["eo"]="kun",
["es"]="con",
["et"]="koos",
+ ["fi"]="kanssa",
["fr"]="avec",
["hy"]="ի հետ",
["it"]="con",
@@ -414,9 +456,11 @@ data.labels={
["functions"]={
["Pr"]={
["labels"]={
+ ["ca"]="Pr",
["cs"]="P",
["en"]="Pr",
["eo"]="P",
+ ["es"]="Pr",
["hy"]="P",
["mk"]="P",
["sk"]="P",
@@ -426,6 +470,7 @@ data.labels={
},
["arccos"]={
["labels"]={
+ ["ca"]="arc cos",
["cs"]="arccos",
["en"]="arccos",
["eo"]="arccos",
@@ -441,6 +486,7 @@ data.labels={
},
["arccosh"]={
["labels"]={
+ ["ca"]="arccosh",
["cs"]="arccosh",
["en"]="arccosh",
["eo"]="arccosh",
@@ -456,6 +502,7 @@ data.labels={
},
["arcctg"]={
["labels"]={
+ ["ca"]="arc cot",
["cs"]="arccotg",
["en"]="arccot",
["eo"]="arcctan",
@@ -471,6 +518,7 @@ data.labels={
},
["arcsin"]={
["labels"]={
+ ["ca"]="arc sen",
["cs"]="arcsin",
["en"]="arcsin",
["eo"]="arcsin",
@@ -486,6 +534,7 @@ data.labels={
},
["arcsinh"]={
["labels"]={
+ ["ca"]="arc senh",
["cs"]="arcsinh",
["en"]="arcsinh",
["eo"]="arcsinh",
@@ -501,6 +550,7 @@ data.labels={
},
["arctan"]={
["labels"]={
+ ["ca"]="arc tan",
["cs"]="arctg",
["en"]="arctan",
["eo"]="arctang",
@@ -516,6 +566,7 @@ data.labels={
},
["arctanh"]={
["labels"]={
+ ["ca"]="arc tanh",
["cs"]="arctgh",
["en"]="arctanh",
["eo"]="arctanh",
@@ -531,6 +582,7 @@ data.labels={
},
["arg"]={
["labels"]={
+ ["ca"]="arg",
["cs"]="arg",
["en"]="arg",
["eo"]="arg",
@@ -544,6 +596,7 @@ data.labels={
},
["cos"]={
["labels"]={
+ ["ca"]="cos",
["cs"]="cos",
["en"]="cos",
["eo"]="cos",
@@ -557,6 +610,7 @@ data.labels={
},
["cosh"]={
["labels"]={
+ ["ca"]="cosh",
["cs"]="cosh",
["en"]="cosh",
["eo"]="cosh",
@@ -570,6 +624,7 @@ data.labels={
},
["cot"]={
["labels"]={
+ ["ca"]="cot",
["cs"]="cotg",
["en"]="cot",
["eo"]="cotan",
@@ -585,6 +640,7 @@ data.labels={
},
["coth"]={
["labels"]={
+ ["ca"]="coth",
["cs"]="cotgh",
["en"]="coth",
["eo"]="cotanh",
@@ -598,6 +654,7 @@ data.labels={
},
["csc"]={
["labels"]={
+ ["ca"]="csc",
["cs"]="cosec",
["en"]="csc",
["eo"]="cosec",
@@ -611,6 +668,7 @@ data.labels={
},
["ctg"]={
["labels"]={
+ ["ca"]="cot",
["cs"]="cotg",
["en"]="cot",
["eo"]="cotan",
@@ -626,6 +684,7 @@ data.labels={
},
["deg"]={
["labels"]={
+ ["ca"]="gr",
["cs"]="deg",
["en"]="deg",
["eo"]="gr",
@@ -639,6 +698,7 @@ data.labels={
},
["det"]={
["labels"]={
+ ["ca"]="det",
["cs"]="det",
["en"]="det",
["eo"]="det",
@@ -651,6 +711,7 @@ data.labels={
},
["diff"]={
["labels"]={
+ ["ca"]="d",
["en"]="d",
["eo"]="dif",
["hy"]="diff",
@@ -658,6 +719,7 @@ data.labels={
},
["dim"]={
["labels"]={
+ ["ca"]="dim",
["cs"]="dim",
["en"]="dim",
["eo"]="dim",
@@ -671,6 +733,7 @@ data.labels={
},
["exp"]={
["labels"]={
+ ["ca"]="exp",
["cs"]="exp",
["en"]="exp",
["eo"]="eksp",
@@ -683,6 +746,7 @@ data.labels={
},
["gcd"]={
["labels"]={
+ ["ca"]="med",
["cs"]="NSD",
["de"]="ggT",
["en"]="gcd",
@@ -699,6 +763,7 @@ data.labels={
},
["hom"]={
["labels"]={
+ ["ca"]="hom",
["cs"]="Hom",
["en"]="hom",
["eo"]="hom",
@@ -709,6 +774,7 @@ data.labels={
},
["inf"]={
["labels"]={
+ ["ca"]="inf",
["cs"]="inf",
["en"]="inf",
["eo"]="inf",
@@ -720,8 +786,22 @@ data.labels={
["sr-latn"]="inf",
},
},
+ ["injlim"]={
+ ["labels"]={
+ ["ca"]="inj",
+ ["cs"]="inj\\sixperemspace lim",
+ ["en"]="inj\\sixperemspace lim",
+ ["eo"]="",
+ ["es"]="lím\\sixperemspace iny",
+ ["hy"]="inj\\sixperemspace lim",
+ ["sk"]="inj\\sixperemspace lim",
+ ["sr"]="inj\\sixperemspace lim",
+ ["sr-latn"]="inj\\sixperemspace lim",
+ },
+ },
["inv"]={
["labels"]={
+ ["ca"]="inv",
["cs"]="inv",
["en"]="inv",
["eo"]="inv",
@@ -733,20 +813,9 @@ data.labels={
["sr-latn"]="inv",
},
},
- ["injlim"]={
- ["labels"]={
- ["cs"]="inj\\sixperemspace lim",
- ["en"]="inj\\sixperemspace lim",
- ["eo"]="",
- ["es"]="lím\\sixperemspace iny",
- ["hy"]="inj\\sixperemspace lim",
- ["sk"]="inj\\sixperemspace lim",
- ["sr"]="inj\\sixperemspace lim",
- ["sr-latn"]="inj\\sixperemspace lim",
- },
- },
["ker"]={
["labels"]={
+ ["ca"]="Ker",
["cs"]="ker",
["en"]="ker",
["eo"]="",
@@ -759,6 +828,7 @@ data.labels={
},
["lcm"]={
["labels"]={
+ ["ca"]="MCM",
["cs"]="NSN",
["de"]="kgV",
["en"]="lcm",
@@ -775,11 +845,13 @@ data.labels={
},
["lg"]={
["labels"]={
+ ["ca"]="log",
["cs"]="log",
["de"]="log",
["en"]="lg",
["eo"]="log",
["es"]="log",
+ ["fr"]="log",
["hy"]="lg",
["mk"]="lg",
["sk"]="log",
@@ -789,6 +861,7 @@ data.labels={
},
["lim"]={
["labels"]={
+ ["ca"]="lim",
["cs"]="lim",
["en"]="lim",
["eo"]="lim",
@@ -802,6 +875,7 @@ data.labels={
},
["liminf"]={
["labels"]={
+ ["ca"]="lim inf",
["cs"]="lim\\sixperemspace inf",
["en"]="lim\\sixperemspace inf",
["eo"]="subinf",
@@ -815,6 +889,7 @@ data.labels={
},
["limsup"]={
["labels"]={
+ ["ca"]="lim sup",
["cs"]="lim\\sixperemspace sup",
["en"]="lim\\sixperemspace sup",
["eo"]="suplim",
@@ -828,6 +903,7 @@ data.labels={
},
["ln"]={
["labels"]={
+ ["ca"]="En",
["cs"]="ln",
["en"]="ln",
["eo"]="ln",
@@ -841,6 +917,7 @@ data.labels={
},
["log"]={
["labels"]={
+ ["ca"]="log",
["cs"]="log",
["en"]="log",
["eo"]="log",
@@ -854,10 +931,12 @@ data.labels={
},
["max"]={
["labels"]={
+ ["ca"]="max",
["cs"]="max",
["en"]="max",
["eo"]="maks",
["es"]="máx",
+ ["fi"]="max",
["hy"]="max",
["mk"]="max",
["sk"]="max",
@@ -867,10 +946,13 @@ data.labels={
},
["median"]={
["labels"]={
+ ["ca"]="mitjana",
["cs"]="\\tilde",
["en"]="median",
["eo"]="mediano",
["es"]="Mediana",
+ ["fi"]="mediaani",
+ ["fr"]="médiane",
["hy"]="միջին",
["sk"]="\\tilde",
["sr"]="median",
@@ -879,10 +961,12 @@ data.labels={
},
["min"]={
["labels"]={
+ ["ca"]="min",
["cs"]="min",
["en"]="min",
["eo"]="min",
["es"]="mín",
+ ["fi"]="min",
["hy"]="min",
["mk"]="min",
["sk"]="min",
@@ -892,10 +976,12 @@ data.labels={
},
["mod"]={
["labels"]={
+ ["ca"]="mod",
["cs"]="mod",
["en"]="mod",
["eo"]="mod",
["es"]="mod",
+ ["fi"]="mod",
["hy"]="mod",
["mk"]="mod",
["sk"]="mod",
@@ -905,6 +991,7 @@ data.labels={
},
["projlim"]={
["labels"]={
+ ["ca"]="lim proy",
["cs"]="proj\\sixperemspace lim",
["en"]="proj\\sixperemspace lim",
["eo"]="",
@@ -917,10 +1004,12 @@ data.labels={
},
["sec"]={
["labels"]={
+ ["ca"]="sec",
["cs"]="sec",
["en"]="sec",
["eo"]="sek",
["es"]="sec",
+ ["fi"]="sek",
["hy"]="sec",
["mk"]="sec",
["sk"]="sec",
@@ -930,10 +1019,12 @@ data.labels={
},
["sin"]={
["labels"]={
+ ["ca"]="sen",
["cs"]="sin",
["en"]="sin",
["eo"]="sin",
["es"]="sen",
+ ["fi"]="sin",
["hy"]="sin",
["mk"]="sin",
["sk"]="sin",
@@ -943,6 +1034,7 @@ data.labels={
},
["sinh"]={
["labels"]={
+ ["ca"]="senh",
["cs"]="sinh",
["en"]="sinh",
["eo"]="sinh",
@@ -1000,7 +1092,7 @@ data.labels={
["and"]={
["labels"]={
["af"]="",
- ["ca"]="",
+ ["ca"]=" i ",
["cs"]=" a ",
["da"]="",
["de"]=" und ",
@@ -1052,7 +1144,7 @@ data.labels={
["es"]="Apéndice ",
["et"]="Lisa ",
["fa"]="پیوست ",
- ["fi"]="",
+ ["fi"]="liite",
["fr"]="Annexe ",
["gr"]="Παράρτημα ",
["hr"]="Dodatak ",
@@ -1132,6 +1224,7 @@ data.labels={
},
["april:jalali"]={
["labels"]={
+ ["ca"]="Tir",
["en"]="Tir",
["fa"]="تیر",
["hy"]="Տիր",
@@ -1141,7 +1234,7 @@ data.labels={
["labels"]={
["af"]="",
["bg"]="апр.",
- ["ca"]="",
+ ["ca"]="abr",
["cs"]="dub.",
["da"]="",
["de"]="Apr.",
@@ -1150,7 +1243,7 @@ data.labels={
["es"]="abr.",
["et"]="apr",
["fi"]="",
- ["fr"]="",
+ ["fr"]="avr.",
["gr"]="",
["hr"]="tra",
["hu"]="ápr.",
@@ -1181,7 +1274,7 @@ data.labels={
["labels"]={
["af"]="",
["ar"]="في صفحة ",
- ["ca"]="",
+ ["ca"]="a la pagina",
["cs"]="na straně ",
["da"]="på side ",
["de"]="auf Seite ",
@@ -1190,7 +1283,7 @@ data.labels={
["es"]="en la página ",
["et"]="leheküljel ",
["fa"]="در صفحه ",
- ["fi"]="",
+ ["fi"]="sivulla",
["fr"]="à la page ",
["gr"]="",
["hr"]="na stranici ",
@@ -1269,6 +1362,7 @@ data.labels={
},
["august:jalali"]={
["labels"]={
+ ["ca"]="Aban",
["en"]="Aban",
["fa"]="آبان",
["hy"]="Աբան",
@@ -1278,7 +1372,7 @@ data.labels={
["labels"]={
["af"]="",
["bg"]="авг.",
- ["ca"]="",
+ ["ca"]="ag",
["cs"]="srp.",
["da"]="",
["de"]="Aug.",
@@ -1331,7 +1425,7 @@ data.labels={
["es"]="Capítulo ",
["et"]="Peatükk ",
["fa"]="فصل ",
- ["fi"]="",
+ ["fi"]="luku",
["fr"]="Chapitre ",
["gr"]="Κεφάλαιο",
["hr"]="Poglavlje ",
@@ -1366,7 +1460,7 @@ data.labels={
["af"]="",
["be"]=" (працяг)",
["bg"]=" (продължение)",
- ["ca"]="",
+ ["ca"]="continua",
["cs"]=" (pokračování)",
["da"]="",
["de"]=" (Fortsetzung)",
@@ -1375,7 +1469,7 @@ data.labels={
["es"]=" (continúa)",
["et"]=" (jätkub)",
["fa"]="(ادامه دارد)",
- ["fi"]="",
+ ["fi"]="(jatkuu)",
["fr"]="",
["gr"]="",
["hr"]=" (nastavak)",
@@ -1406,11 +1500,14 @@ data.labels={
["day"]={
["labels"]={
["bg"]="ден",
+ ["ca"]="dia",
["de"]="Tag",
["en"]="day",
["eo"]="tago",
["et"]="päev",
["fa"]="روز",
+ ["fi"]="päivä",
+ ["fr"]="jour",
["hy"]="օր",
["kr"]="일",
["mk"]="ден",
@@ -1469,6 +1566,7 @@ data.labels={
},
["december:jalali"]={
["labels"]={
+ ["ca"]="Esfand",
["en"]="Esfand",
["fa"]="اسفند",
["hy"]="Էսֆանդ",
@@ -1478,7 +1576,7 @@ data.labels={
["labels"]={
["af"]="",
["bg"]="дек.",
- ["ca"]="",
+ ["ca"]="des",
["cs"]="pros.",
["da"]="",
["de"]="Dez.",
@@ -1487,7 +1585,7 @@ data.labels={
["es"]="dic.",
["et"]="dets",
["fi"]="",
- ["fr"]="",
+ ["fr"]="déc.",
["gr"]="",
["hr"]="pro",
["hu"]="dec.",
@@ -1564,6 +1662,7 @@ data.labels={
},
["february:jalali"]={
["labels"]={
+ ["ca"]="Ordibehesht",
["en"]="Ordibehesht",
["fa"]="اردیبهشت",
["hy"]="Օրդիբեհեշթ",
@@ -1573,7 +1672,7 @@ data.labels={
["labels"]={
["af"]="",
["bg"]="февр.",
- ["ca"]="",
+ ["ca"]="febr",
["cs"]="ún.",
["da"]="",
["de"]="Feb.",
@@ -1582,7 +1681,7 @@ data.labels={
["es"]="feb.",
["et"]="veebr",
["fi"]="",
- ["fr"]="",
+ ["fr"]="fév.",
["gr"]="",
["hr"]="velj",
["hu"]="feb.",
@@ -1675,11 +1774,15 @@ data.labels={
},
["followingpage"]={
["labels"]={
+ ["ca"]="en la seguent pagina",
["de"]="auf einer Folgeseite",
["en"]="on a following page",
["eo"]="je sekvanta paĝo",
+ ["es"]="en la siguiente pagina",
["et"]="järgmisel leheküljel",
["fa"]="در صفحات آینده",
+ ["fi"]="seuraavalla sivulla",
+ ["fr"]="sur la page suivante",
["hy"]="Հաջորդ էջում",
["mk"]="на следната страница",
["nl"]="op een volgende bladzijde",
@@ -1736,10 +1839,14 @@ data.labels={
["friday:mnem"]={
["labels"]={
["bg"]="пт",
+ ["ca"]="dv",
["cs"]="pá",
["de"]="Fr.",
["en"]="fri",
["eo"]="ven.",
+ ["es"]="vi",
+ ["fi"]="pe",
+ ["fr"]="ven.",
["hy"]="Ուրբ",
["sk"]="pi",
["sr"]="пет",
@@ -1797,7 +1904,7 @@ data.labels={
["ar"]="كما وضحنا سابقا",
["be"]="гл. вышэй",
["bg"]="виж по-горе",
- ["ca"]="",
+ ["ca"]="com es mostra dalt ",
["cs"]="viz výše",
["da"]="se foroven",
["de"]="siehe oben", -- better "oben"?
@@ -1806,7 +1913,7 @@ data.labels={
["es"]="como se muestra arriba",
["et"]="nii nagu üleval näidatud",
["fa"]="چنان‌که شرح دادیم",
- ["fi"]="",
+ ["fi"]="kuten yllä näytämme",
["fr"]="ci-dessus",
["gr"]="",
["hr"]="vidi gore",
@@ -1841,7 +1948,7 @@ data.labels={
["ar"]="كما نوضح لاحقا",
["be"]="гл. ніжэй",
["bg"]="ў далейшым",
- ["ca"]="",
+ ["ca"]="com es mostra baix",
["cs"]="viz níže",
["da"]="se forneden",
["de"]="siehe unten", -- better "nachstehend"?
@@ -1850,7 +1957,7 @@ data.labels={
["es"]="como se muestra abajo",
["et"]="nii nagu all näidatud",
["fa"]="چنان‌که شرح خواهیم داد",
- ["fi"]="",
+ ["fi"]="kuten alla näytämme",
["fr"]="ci-dessous",
["gr"]="",
["hr"]="vidi ispod",
@@ -1974,7 +2081,9 @@ data.labels={
},
["january:jalali"]={
["labels"]={
+ ["ca"]="Farvardin",
["en"]="Farvardin",
+ ["es"]="Farvardin",
["fa"]="فروردین",
["hy"]="Ֆարվարդին",
},
@@ -1983,7 +2092,7 @@ data.labels={
["labels"]={
["af"]="",
["bg"]="ян.",
- ["ca"]="",
+ ["ca"]="gen",
["cs"]="led.",
["da"]="",
["de"]="Jan.",
@@ -1992,7 +2101,7 @@ data.labels={
["es"]="ene.",
["et"]="jaan",
["fi"]="",
- ["fr"]="",
+ ["fr"]="jan.",
["gr"]="",
["hr"]="sij",
["hu"]="jan.",
@@ -2070,7 +2179,9 @@ data.labels={
},
["july:jalali"]={
["labels"]={
+ ["ca"]="Mehr",
["en"]="Mehr",
+ ["es"]="Mehr",
["fa"]="مهر",
["hy"]="Մեհր",
},
@@ -2079,7 +2190,7 @@ data.labels={
["labels"]={
["af"]="",
["bg"]="юли",
- ["ca"]="",
+ ["ca"]="jul",
["cs"]="čce",
["da"]="",
["de"]="Jul.",
@@ -2088,7 +2199,7 @@ data.labels={
["es"]="jul.",
["et"]="juuli",
["fi"]="",
- ["fr"]="",
+ ["fr"]="juill.",
["gr"]="",
["hr"]="srp",
["hu"]="júl.",
@@ -2165,7 +2276,9 @@ data.labels={
},
["june:jalali"]={
["labels"]={
+ ["ca"]="Shahrivar",
["en"]="Shahrivar",
+ ["es"]="Shahrivar",
["fa"]="شهریور",
["hy"]="Շահրիվար",
},
@@ -2174,7 +2287,7 @@ data.labels={
["labels"]={
["af"]="",
["bg"]="юни",
- ["ca"]="",
+ ["ca"]="juny",
["cs"]="čer.",
["da"]="",
["de"]="Jun.",
@@ -2183,7 +2296,7 @@ data.labels={
["es"]="jun.",
["et"]="juuni",
["fi"]="",
- ["fr"]="",
+ ["fr"]="juin",
["gr"]="",
["hr"]="lip",
["hu"]="jún.",
@@ -2351,7 +2464,9 @@ data.labels={
},
["march:jalali"]={
["labels"]={
+ ["ca"]="Jordad",
["en"]="Khordad",
+ ["es"]="Khordad",
["fa"]="خرداد",
["hy"]="Խորդադ",
},
@@ -2360,7 +2475,7 @@ data.labels={
["labels"]={
["af"]="",
["bg"]="март",
- ["ca"]="",
+ ["ca"]="març",
["cs"]="břez.",
["da"]="",
["de"]="Mrz.",
@@ -2369,7 +2484,7 @@ data.labels={
["es"]="mar.",
["et"]="märts",
["fi"]="",
- ["fr"]="",
+ ["fr"]="mars",
["gr"]="",
["hr"]="ožu",
["hu"]="már.",
@@ -2447,7 +2562,9 @@ data.labels={
},
["may:jalali"]={
["labels"]={
+ ["ca"]="Mordad",
["en"]="Mordad",
+ ["es"]="Mordad",
["fa"]="مرداد",
["hy"]="Մորդադ",
},
@@ -2456,7 +2573,7 @@ data.labels={
["labels"]={
["af"]="",
["bg"]="май",
- ["ca"]="",
+ ["ca"]="maig",
["cs"]="květ.",
["da"]="",
["de"]="Mai",
@@ -2465,7 +2582,7 @@ data.labels={
["es"]="may.",
["et"]="mai",
["fi"]="",
- ["fr"]="",
+ ["fr"]="mai",
["gr"]="",
["hr"]="svi",
["hu"]="máj.",
@@ -2541,10 +2658,14 @@ data.labels={
["monday:mnem"]={
["labels"]={
["bg"]="пн",
+ ["ca"]="dl",
["cs"]="po",
["de"]="Mo.",
["en"]="mon",
["eo"]="lun.",
+ ["es"]="lu",
+ ["fi"]="ma",
+ ["fr"]="lun.",
["hy"]="Երկ",
["sk"]="po",
["sr"]="пон",
@@ -2555,11 +2676,15 @@ data.labels={
["labels"]={
["be"]="месяц",
["bg"]="месец",
+ ["ca"]="mes",
["de"]="Monat",
["en"]="month",
["eo"]="monato",
+ ["es"]="mes",
["et"]="kuu",
["fa"]="ماه",
+ ["fi"]="kuukausi",
+ ["fr"]="mois",
["hy"]="ամիս",
["kr"]="월",
["mk"]="месец",
@@ -2618,7 +2743,9 @@ data.labels={
},
["november:jalali"]={
["labels"]={
+ ["ca"]="Bahman",
["en"]="Bahman",
+ ["es"]="Bahman",
["fa"]="بهمن",
["hy"]="Բահման",
},
@@ -2627,7 +2754,7 @@ data.labels={
["labels"]={
["af"]="",
["bg"]="ноем.",
- ["ca"]="",
+ ["ca"]="nov",
["cs"]="list.",
["da"]="",
["de"]="Nov.",
@@ -2636,7 +2763,7 @@ data.labels={
["es"]="nov.",
["et"]="nov",
["fi"]="",
- ["fr"]="",
+ ["fr"]="nov.",
["gr"]="",
["hr"]="stu",
["hu"]="nov.",
@@ -2712,7 +2839,9 @@ data.labels={
},
["october:jalali"]={
["labels"]={
+ ["ca"]="Dey",
["en"]="Dey",
+ ["es"]="Dey",
["fa"]="دی",
["hy"]="Դեյ",
},
@@ -2721,7 +2850,7 @@ data.labels={
["labels"]={
["af"]="",
["bg"]="окт.",
- ["ca"]="",
+ ["ca"]="oct",
["cs"]="říj.",
["da"]="",
["de"]="Okt.",
@@ -2730,7 +2859,7 @@ data.labels={
["es"]="oct.",
["et"]="okt",
["fi"]="",
- ["fr"]="",
+ ["fr"]="oct.",
["gr"]="",
["hr"]="lis",
["hu"]="okt.",
@@ -2763,7 +2892,7 @@ data.labels={
["ar"]="صفحة ",
["be"]="старонка ",
["bg"]="страна",
- ["ca"]="",
+ ["ca"]="pagina ",
["cs"]="strana ",
["da"]="Side ",
["de"]="Seite ",
@@ -2772,7 +2901,7 @@ data.labels={
["es"]="página ",
["et"]="lehekülg ",
["fa"]="صفحه ",
- ["fi"]="",
+ ["fi"]="Sivu",
["fr"]="page ",
["gr"]="",
["hr"]="stranica ",
@@ -2849,11 +2978,15 @@ data.labels={
},
["precedingpage"]={
["labels"]={
+ ["ca"]="en una pagina anterior",
["de"]="oben", -- "auf der vorigen Seite" ok, but not "auf einer vorigen Seite"
["en"]="on a preceding page",
["eo"]="sur antaŭa paĝo",
+ ["es"]="en la pagina anterior",
["et"]="eelmisel lehel",
["fa"]="در صفحات گذشته",
+ ["fi"]="edellisellä sivulla",
+ ["fr"]="sur la page précédente",
["hy"]="նախորդ էջ",
["mk"]="на претходната страница",
["nl"]="op een voorgaande bladzijde",
@@ -2914,6 +3047,9 @@ data.labels={
["de"]="Sa.",
["en"]="sat",
["eo"]="sab.",
+ ["es"]="sa",
+ ["fi"]="La",
+ ["fr"]="sam.",
["hy"]="Շաբ",
["sk"]="so",
["sr"]="суб",
@@ -2936,7 +3072,7 @@ data.labels={
["es"]="Sección ",
["et"]="jaos ",
["fa"]="بخش ",
- ["fi"]="",
+ ["fi"]="Osio",
["fr"]="Section ",
["gr"]="Ενότητα",
["hr"]="Odjeljak ",
@@ -2972,7 +3108,7 @@ data.labels={
["ar"]="انظر ",
["be"]="гл. ",
["bg"]="погледни",
- ["ca"]="",
+ ["ca"]="vore ",
["cs"]="viz ",
["da"]="se ",
["de"]="siehe ",
@@ -2981,7 +3117,7 @@ data.labels={
["es"]="ver: ",
["et"]="vaadake ",
["fa"]="نگاه کنید به ",
- ["fi"]="",
+ ["fi"]="Katso",
["fr"]="cf. ",
["gr"]="",
["hr"]="vidi ",
@@ -3061,6 +3197,7 @@ data.labels={
["september:jalali"]={
["labels"]={
["en"]="Azar",
+ ["es"]="Azar",
["fa"]="آذر",
["hy"]="Ազար",
},
@@ -3069,7 +3206,7 @@ data.labels={
["labels"]={
["af"]="",
["bg"]="септ.",
- ["ca"]="",
+ ["ca"]="set",
["cs"]="září",
["da"]="",
["de"]="Sep.",
@@ -3078,7 +3215,7 @@ data.labels={
["es"]="sep.",
["et"]="sept",
["fi"]="",
- ["fr"]="",
+ ["fr"]="sept.",
["gr"]="",
["hr"]="ruj",
["hu"]="szep.",
@@ -3121,7 +3258,7 @@ data.labels={
["es"]="Subsección ",
["et"]="alajaotis ",
["fa"]="زیربخش ",
- ["fi"]="",
+ ["fi"]="Alajakso",
["fr"]="Soussection ",
["gr"]="Υπόενότητα",
["hr"]="Pododjeljak ",
@@ -3166,7 +3303,7 @@ data.labels={
["es"]="Subsubsección ",
["et"]="alamjaotis ",
["fa"]="زیرزیربخش ",
- ["fi"]="",
+ ["fi"]="Alakohta",
["fr"]="Soussoussection ",
["gr"]="",
["hr"]="Podpododjeljak ",
@@ -3211,7 +3348,7 @@ data.labels={
["es"]="Subsubsubsección ",
["et"]="",
["fa"]="زیرزیرزیربخش ",
- ["fi"]="",
+ ["fi"]="Ala-alakohta",
["fr"]="Soussoussoussection ",
["gr"]="",
["hr"]="Podpodpododjeljak ",
@@ -3289,10 +3426,13 @@ data.labels={
["sunday:mnem"]={
["labels"]={
["bg"]="нд",
+ ["ca"]="dg",
["cs"]="ne",
["de"]="So.",
["en"]="sun",
["eo"]="dim.",
+ ["es"]="do",
+ ["fr"]="dim.",
["hy"]="Կիր",
["sk"]="ne",
["sr"]="нед",
@@ -3394,10 +3534,14 @@ data.labels={
["thursday:mnem"]={
["labels"]={
["bg"]="чт",
+ ["ca"]="dj",
["cs"]="čt",
["de"]="Do.",
["en"]="thu",
["eo"]="ĵaŭ.",
+ ["es"]="ju",
+ ["fi"]="To",
+ ["fr"]="jeu.",
["hy"]="Հնգ",
["sk"]="št",
["sr"]="чет",
@@ -3453,10 +3597,14 @@ data.labels={
["tuesday:mnem"]={
["labels"]={
["bg"]="вт",
+ ["ca"]="dm",
["cs"]="út",
["de"]="Di.",
["en"]="tue",
["eo"]="mar.",
+ ["es"]="ma",
+ ["fi"]="Ti",
+ ["fr"]="mar.",
["hy"]="Երք",
["sk"]="út",
["sr"]="уто",
@@ -3512,10 +3660,14 @@ data.labels={
["wednesday:mnem"]={
["labels"]={
["bg"]="ср",
+ ["ca"]="dim",
["cs"]="st",
["de"]="Mi.",
["en"]="wed",
["eo"]="mer.",
+ ["es"]="mi",
+ ["fi"]="Ke",
+ ["fr"]="mer.",
["hy"]="չոր",
["sk"]="st",
["sr"]="сре",
@@ -3525,11 +3677,15 @@ data.labels={
["year"]={
["labels"]={
["bg"]="година",
+ ["ca"]="any",
["de"]="Jahr",
["en"]="year",
["eo"]="jaro",
+ ["es"]="año",
["et"]="aasta",
["fa"]="سال",
+ ["fi"]="Vuosi",
+ ["fr"]="année",
["hy"]="Տարի",
["kr"]="년",
["mk"]="година",
@@ -3872,7 +4028,7 @@ data.labels={
["es"]="Bibliografía",
["et"]="Viited",
["fa"]="کتاب‌نامه",
- ["fi"]="",
+ ["fi"]="Viittet",
["fr"]="Bibliographie",
["gr"]="",
["hr"]="Literatura",
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index e8ea30175..93a9c8822 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index 8ff4f4584..089aadf1a 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkxl/char-brl.lmt b/tex/context/base/mkxl/char-brl.lmt
index c9cdd3594..046436b59 100644
--- a/tex/context/base/mkxl/char-brl.lmt
+++ b/tex/context/base/mkxl/char-brl.lmt
@@ -313,7 +313,7 @@ local function prepare()
-- filtered from the mentioned blog webpage:
- local nemeth = table.load(resolvers.find_file("math-brl.lua")).nemeth
+ local nemeth = table.load(resolvers.find_file("math-brl.lmt")).nemeth
codepoints.nemeth = nemeth
-- we let the tex math engine do the spacing but it can become an option:
diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl
index 0b29287cf..12a02f132 100644
--- a/tex/context/base/mkxl/cont-new.mkxl
+++ b/tex/context/base/mkxl/cont-new.mkxl
@@ -13,7 +13,7 @@
% \normalend % uncomment this to get the real base runtime
-\newcontextversion{2022.12.07 20:21}
+\newcontextversion{2022.12.09 16:31}
%D This file is loaded at runtime, thereby providing an excellent place for hacks,
%D patches, extensions and new features. There can be local overloads in cont-loc
diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl
index 9811ff9a4..6ff802992 100644
--- a/tex/context/base/mkxl/context.mkxl
+++ b/tex/context/base/mkxl/context.mkxl
@@ -29,7 +29,7 @@
%D {YYYY.MM.DD HH:MM} format.
\immutable\edef\contextformat {\jobname}
-\immutable\edef\contextversion{2022.12.07 20:21}
+\immutable\edef\contextversion{2022.12.09 16:31}
%overloadmode 1 % check frozen / warning
%overloadmode 2 % check frozen / error
diff --git a/tex/context/base/mkxl/font-imp-braille.lmt b/tex/context/base/mkxl/font-imp-braille.lmt
index fb1ba6cb4..79bb99f7c 100644
--- a/tex/context/base/mkxl/font-imp-braille.lmt
+++ b/tex/context/base/mkxl/font-imp-braille.lmt
@@ -34,6 +34,10 @@ local braille_math_rule do
local braillerule
+ -- function(kind,font,width,height,attr)
+ -- return nodes.tonode(nodes.nuts.pool.rule(width,5*height,5*height))
+ -- end
+
braille_math_rule = function(kind,font,width,height,attr)
if not braillerule then
braillerule = braille.special("rule")
diff --git a/tex/context/base/mkxl/font-pre.mkxl b/tex/context/base/mkxl/font-pre.mkxl
index 2fc0aef26..701362dce 100644
--- a/tex/context/base/mkxl/font-pre.mkxl
+++ b/tex/context/base/mkxl/font-pre.mkxl
@@ -411,12 +411,9 @@
[mathematics]
[mode=base,
% mode=none, % better, maybe do this last
- kern=yes,
-% kern=force,
- % flac=yes, % handled differently
- % liga=yes, % makes no sense
- % mode=node,
- % mathnolimitsmode={0,800}, % now in lfg files
+ kern=yes, % =force
+ % flac=yes, % handled differently
+ % liga=yes, % makes no sense
mathalternates=yes,
% mathitalics=yes, % we pass them
% mathdimensions=all,
@@ -437,58 +434,15 @@
% \variablefam 63
% \fi
-% \adaptfontfeature[*math*][mathnolimitsmode=1000] % only subscript
-
\definefontfeature
[collapseitalics]
[collapseitalics=yes]
-% \definefontfeature[mathextra][collapseitalics]
-
-% \definefontfeature % obsolete
-% [mathematics-l2r]
-% [mathematics]
-% []
-
-% \definefontfeature % obsolete
-% [mathematics-r2l]
-% [mathematics]
-% [rtlm=yes,
-% locl=yes]
-
-\definefontfeature[virtualmath] [mathematics]
-% \definefontfeature[virtualmath-l2r] [mathematics-l2r] % obsolete
-% \definefontfeature[virtualmath-r2l] [mathematics-r2l] % obsolete
-
-\definefontfeature[math-text] [mathematics] [ssty=no]
-\definefontfeature[math-script] [mathematics] [ssty=1]
-\definefontfeature[math-scriptscript] [mathematics] [ssty=2]
-
-% \definefontfeature[math-text] [mathematics] [ssty=no]
-% \definefontfeature[math-script] [mathematics] [ssty=1,mathsize=yes]
-% \definefontfeature[math-scriptscript] [mathematics] [ssty=2,mathsize=yes]
+\definefontfeature[virtualmath] [mathematics]
-% \definefontfeature[math-text-l2r] [mathematics-l2r] [ssty=no] % obsolete
-% \definefontfeature[math-script-l2r] [mathematics-l2r] [ssty=1,mathsize=yes] % obsolete
-% \definefontfeature[math-scriptscript-l2r] [mathematics-l2r] [ssty=2,mathsize=yes] % obsolete
-
-% \definefontfeature[math-text-r2l] [mathematics-r2l] [ssty=no] % obsolete
-% \definefontfeature[math-script-r2l] [mathematics-r2l] [ssty=1,mathsize=yes] % obsolete
-% \definefontfeature[math-scriptscript-r2l] [mathematics-r2l] [ssty=2,mathsize=yes] % obsolete
-
-% this will go away: could be a mode in the engine
-%
-% \definefontfeature[math-nostack-text] [math-text] [nostackmath=yes]
-% \definefontfeature[math-nostack-script] [math-script] [nostackmath=yes]
-% \definefontfeature[math-nostack-scriptscript][math-scriptscript][nostackmath=yes]
-
-% \definefontfeature[mathtext] [math-text]
-% \definefontfeature[mathscript] [math-script]
-% \definefontfeature[mathscriptscript] [math-scriptscript]
-
-% \definefontfeature
-% [missing]
-% [missing=yes]
+\definefontfeature[math-text] [mathematics] [ssty=no]
+\definefontfeature[math-script] [mathematics] [ssty=1]
+\definefontfeature[math-scriptscript] [mathematics] [ssty=2]
%D Nice to have too:
diff --git a/tex/context/base/mkxl/lang-hyp.lmt b/tex/context/base/mkxl/lang-hyp.lmt
index 90823851e..42068ef39 100644
--- a/tex/context/base/mkxl/lang-hyp.lmt
+++ b/tex/context/base/mkxl/lang-hyp.lmt
@@ -1044,8 +1044,8 @@ featureset.hyphenonly = hyphenonly == v_yes
local stop = nil
local word = { } -- we reuse this table
local size = 0
- local leftchar = false
- local rightchar = false -- utfbyte("-")
+ -- local leftchar = false
+ -- local rightchar = false -- utfbyte("-")
local leftexchar = false
local rightexchar = false -- utfbyte("-")
local leftmin = 0
diff --git a/tex/context/base/mkxl/math-act.lmt b/tex/context/base/mkxl/math-act.lmt
index 152707670..65e154b22 100644
--- a/tex/context/base/mkxl/math-act.lmt
+++ b/tex/context/base/mkxl/math-act.lmt
@@ -2987,6 +2987,8 @@ do
[0x0002F] = true, -- slashes
[0x0005C] = true,
[0x000F7] = true,
+ [0x02044] = true,
+ [0x02215] = true,
[0x02032] = true, -- primes
[0x02033] = true,
diff --git a/tex/context/base/mkxl/math-brl.lmt b/tex/context/base/mkxl/math-brl.lmt
new file mode 100644
index 000000000..ad9346350
--- /dev/null
+++ b/tex/context/base/mkxl/math-brl.lmt
@@ -0,0 +1,526 @@
+return {
+ ["comment"]="taken from blog by Murray Sargent as well as wikipedia",
+ ["copyright"]="unknown",
+ ["nemeth"]={
+ [33]="⠯",
+ [35]="⠨⠼",
+ [36]="⠈⠎",
+ [37]="⠈⠴",
+ [38]="⠸⠯",
+ [39]="⠄",
+ [40]="⠷",
+ [41]="⠾",
+ [42]="⠈⠼",
+ [43]="⠬",
+ [44]="⠠",
+ [45]="⠸⠤",
+ [46]="⠸⠲",
+ [47]="⠸⠌",
+ [58]="⠸⠒",
+ [59]="⠸⠆",
+ [60]="⠀⠐⠅⠀",
+ [61]="⠀⠨⠅⠀",
+ [62]="⠀⠨⠂⠀",
+ [63]="⠸⠦",
+ [64]="⠈⠁",
+ [91]="⠈⠷",
+ [92]="⠸⠡",
+ [93]="⠈⠾",
+ [94]="⠸⠣",
+ [123]="⠨⠷",
+ [124]="⠡",
+ [125]="⠨⠾",
+ [126]="⠈⠱",
+ [162]="⠈⠉",
+ [163]="⠈⠇",
+ [167]="⠈⠠⠎",
+ [169]="⠷⠠⠉⠾",
+ [174]="⠷⠠r⠾",
+ [176]="⠘⠨⠡",
+ [177]="⠬⠤",
+ [182]="⠈⠠⠏",
+ [183]="⠡",
+ [215]="⠈⠡",
+ [247]="⠨⠌",
+ [913]="⠨⠠⠁",
+ [914]="⠨⠠⠃",
+ [915]="⠨⠠⠛",
+ [916]="⠨⠠⠙",
+ [917]="⠨⠠⠑",
+ [918]="⠨⠠⠵",
+ [919]="⠨⠠⠱",
+ [920]="⠨⠠⠹",
+ [921]="⠨⠠⠊",
+ [922]="⠨⠠⠅",
+ [923]="⠨⠠⠇",
+ [924]="⠨⠠⠍",
+ [925]="⠨⠠⠝",
+ [926]="⠨⠠⠭",
+ [927]="⠨⠠⠕",
+ [928]="⠨⠠⠏",
+ [929]="⠨⠠⠗",
+ [931]="⠨⠠⠎",
+ [932]="⠨⠠⠞",
+ [933]="⠨⠠⠥",
+ [934]="⠨⠠⠋",
+ [935]="⠨⠠⠯",
+ [936]="⠨⠠⠽",
+ [937]="⠨⠠⠺",
+ [945]="⠨⠁",
+ [946]="⠨⠃",
+ [947]="⠨⠛",
+ [948]="⠨⠙",
+ [949]="⠨⠈⠑",
+ [950]="⠨⠵",
+ [951]="⠨⠱",
+ [952]="⠨⠹",
+ [953]="⠨⠊",
+ [954]="⠨⠅",
+ [955]="⠨⠇",
+ [956]="⠨⠍",
+ [957]="⠨⠝",
+ [958]="⠨⠭",
+ [959]="⠨⠕",
+ [960]="⠨⠏",
+ [961]="⠨⠗",
+ [962]="⠨⠒",
+ [963]="⠨⠎",
+ [964]="⠨⠞",
+ [965]="⠨⠥",
+ [966]="⠨⠈⠋",
+ [967]="⠨⠯",
+ [968]="⠨⠽",
+ [969]="⠨⠺",
+ [977]="⠨⠈⠹",
+ [981]="⠨⠋",
+ [982]="⠨⠈⠏",
+ [1008]="⠨⠈⠅",
+ [1013]="⠨⠑",
+ [8212]="⠤⠤",
+ [8213]="⠤⠤⠤⠤",
+ [8216]="⠠⠦",
+ [8217]="⠴⠠",
+ [8220]="⠦",
+ [8221]="⠴",
+ [8224]="⠸⠻",
+ [8225]="⠸⠸⠻",
+ [8226]="⠔⠔",
+ [8230]="⠄⠄⠄",
+ [8240]="⠈⠴⠴",
+ [8241]="⠈⠴⠴⠴",
+ [8242]="⠄",
+ [8243]="⠄⠄",
+ [8463]="⠈⠓",
+ [8467]="⠈⠇",
+ [8491]="⠈⠠⠁",
+ [8592]="⠀⠫⠪⠒⠒⠀",
+ [8593]="⠀⠫⠣⠒⠒⠕⠀",
+ [8594]="⠀⠫⠒⠒⠕⠀",
+ [8595]="⠀⠫⠩⠒⠒⠕⠀",
+ [8596]="⠀⠫⠪⠒⠒⠕⠀",
+ [8597]="⠀⠫⠣⠪⠒⠒⠕⠀",
+ [8598]="⠀⠫⠘⠪⠒⠒⠀",
+ [8599]="⠀⠫⠘⠒⠒⠕⠀",
+ [8600]="⠀⠫⠰⠒⠒⠕⠀",
+ [8601]="⠀⠫⠰⠪⠒⠒⠀",
+ [8602]="⠀⠳⠈⠫⠪⠒⠒⠻⠀",
+ [8603]="⠀⠳⠈⠫⠒⠒⠕⠻⠀",
+ [8604]="⠀⠫⠪⠔⠒⠢⠀",
+ [8605]="⠀⠫⠔⠒⠢⠕⠀",
+ [8606]="⠀⠫⠪⠪⠒⠒⠀",
+ [8607]="⠀⠫⠣⠒⠒⠕⠕⠀",
+ [8608]="⠀⠫⠒⠒⠕⠕⠀",
+ [8609]="⠀⠫⠩⠒⠒⠕⠕⠀",
+ [8610]="⠀⠫⠪⠒⠒⠠⠽⠀",
+ [8611]="⠀⠫⠠⠯⠒⠒⠕⠀",
+ [8612]="⠀⠫⠪⠒⠒⠳⠀",
+ [8613]="⠀⠫⠣⠳⠒⠒⠕⠀",
+ [8614]="⠀⠫⠳⠒⠒⠕⠀",
+ [8615]="⠀⠫⠩⠳⠒⠒⠕⠀",
+ [8616]="⠀⠫⠣⠪⠒⠒⠕⠳⠀",
+ [8617]="⠀⠫⠪⠒⠒⠈⠽⠀",
+ [8618]="⠀⠫⠈⠯⠒⠒⠕⠀",
+ [8621]="⠀⠫⠪⠔⠒⠢⠕⠀",
+ [8622]="⠀⠳⠈⠫⠪⠒⠒⠕⠻⠀",
+ [8623]="⠀⠫⠩⠔⠢⠔⠕⠀",
+ [8628]="⠀⠫⠩⠠⠳⠒⠕⠀",
+ [8629]="⠀⠫⠪⠒⠈⠳⠀",
+ [8634]="⠀⠫⠢⠔⠕⠀",
+ [8635]="⠀⠫⠪⠢⠔⠀",
+ [8636]="⠀⠫⠈⠪⠒⠒⠀",
+ [8637]="⠀⠫⠠⠪⠒⠒⠀",
+ [8638]="⠀⠫⠣⠒⠒⠠⠕⠀",
+ [8639]="⠀⠫⠣⠒⠒⠈⠕⠀",
+ [8640]="⠀⠫⠒⠒⠈⠕⠀",
+ [8641]="⠀⠫⠒⠒⠠⠕⠀",
+ [8642]="⠀⠫⠩⠒⠒⠈⠕⠀",
+ [8643]="⠀⠫⠩⠒⠒⠠⠕⠀",
+ [8644]="⠀⠫⠒⠒⠕⠫⠪⠒⠒⠀",
+ [8645]="⠀⠫⠣⠒⠒⠕⠐⠫⠩⠒⠒⠕⠀",
+ [8646]="⠀⠫⠪⠒⠒⠫⠒⠒⠕⠀",
+ [8647]="⠀⠫⠪⠒⠒⠫⠪⠒⠒⠀",
+ [8648]="⠀⠫⠣⠒⠒⠕⠐⠫⠣⠒⠒⠕⠀",
+ [8649]="⠀⠫⠒⠒⠕⠫⠒⠒⠕⠀",
+ [8650]="⠀⠫⠩⠒⠒⠕⠐⠫⠩⠒⠒⠕⠀",
+ [8651]="⠀⠫⠈⠪⠒⠒⠫⠒⠒⠠⠕⠀",
+ [8652]="⠀⠫⠒⠒⠈⠕⠫⠠⠪⠒⠒⠀",
+ [8653]="⠀⠳⠈⠫⠪⠶⠶⠻⠀",
+ [8654]="⠀⠳⠈⠫⠪⠶⠶⠕⠻⠀",
+ [8655]="⠀⠳⠈⠫⠶⠶⠕⠻⠀",
+ [8656]="⠀⠫⠪⠶⠶⠀",
+ [8657]="⠀⠫⠣⠶⠶⠕⠀",
+ [8658]="⠀⠫⠶⠶⠕⠀",
+ [8659]="⠀⠫⠩⠶⠶⠕⠀",
+ [8660]="⠀⠫⠪⠶⠶⠕⠀",
+ [8661]="⠀⠫⠣⠪⠶⠶⠕⠀",
+ [8662]="⠀⠫⠘⠪⠶⠶⠀",
+ [8663]="⠀⠫⠘⠶⠶⠕⠀",
+ [8664]="⠀⠫⠰⠶⠶⠕⠀",
+ [8665]="⠀⠫⠰⠪⠶⠶⠀",
+ [8666]="⠀⠫⠪⠸⠸⠀",
+ [8667]="⠀⠫⠸⠸⠕⠀",
+ [8668]="⠀⠫⠪⠢⠤⠔⠒⠢⠀",
+ [8669]="⠀⠫⠢⠤⠔⠒⠢⠕⠀",
+ [8670]="⠀⠳⠳⠈⠫⠣⠒⠒⠕⠻⠀",
+ [8671]="⠀⠳⠳⠈⠫⠩⠒⠒⠕⠻⠀",
+ [8672]="⠀⠫⠪⠒⠀⠒⠀",
+ [8673]="⠀⠫⠣⠒⠀⠒⠕⠀",
+ [8674]="⠀⠫⠒⠀⠒⠕⠀",
+ [8675]="⠀⠫⠩⠒⠀⠒⠕⠀",
+ [8676]="⠀⠳⠫⠪⠒⠒⠀",
+ [8677]="⠀⠫⠒⠒⠕⠳⠀",
+ [8692]="⠀⠨⠡⠈⠫⠒⠒⠕⠻⠀",
+ [8693]="⠀⠫⠩⠒⠒⠕⠐⠫⠣⠒⠒⠕⠀",
+ [8694]="⠀⠫⠒⠒⠕⠫⠒⠒⠕⠫⠒⠒⠕⠀",
+ [8695]="⠀⠳⠈⠫⠪⠒⠒⠻⠀",
+ [8696]="⠀⠳⠈⠫⠒⠒⠕⠻⠀",
+ [8697]="⠀⠳⠈⠫⠪⠒⠒⠕⠻⠀",
+ [8698]="⠀⠳⠳⠈⠫⠪⠒⠒⠻⠀",
+ [8699]="⠀⠳⠳⠈⠫⠒⠒⠕⠻⠀",
+ [8700]="⠀⠳⠳⠈⠫⠪⠒⠒⠕⠻⠀",
+ [8704]="⠈⠯",
+ [8706]="⠈⠙",
+ [8707]="⠈⠿",
+ [8708]="⠌⠈⠿",
+ [8709]="⠸⠴",
+ [8711]="⠨⠫",
+ [8712]="⠀⠈⠑⠀",
+ [8713]="⠀⠌⠈⠑⠀",
+ [8715]="⠀⠈⠢⠀",
+ [8716]="⠀⠌⠈⠢⠀",
+ [8718]="⠸⠳",
+ [8721]="⠨⠠⠎",
+ [8722]="⠤",
+ [8723]="⠤⠬",
+ [8724]="⠐⠬⠣⠡⠻",
+ [8725]="⠸⠌",
+ [8727]="⠈⠼",
+ [8728]="⠨⠡",
+ [8730]="⠜",
+ [8731]="⠣⠒⠜",
+ [8732]="⠣⠲⠜",
+ [8733]="⠀⠸⠿⠀",
+ [8734]="⠠⠿",
+ [8735]="⠫⠪⠨⠗⠻",
+ [8736]="⠫⠪",
+ [8737]="⠫⠪⠈⠫⠁⠻",
+ [8739]="⠀⠳⠀",
+ [8740]="⠀⠌⠳⠀",
+ [8741]="⠀⠫⠇⠀",
+ [8742]="⠀⠌⠫⠇⠀",
+ [8743]="⠈⠩",
+ [8744]="⠈⠬",
+ [8745]="⠨⠩",
+ [8746]="⠨⠬",
+ [8747]="⠮",
+ [8748]="⠮⠮",
+ [8749]="⠮⠮⠮",
+ [8750]="⠮⠈⠫⠉⠻",
+ [8754]="⠮⠈⠫⠪⠢⠔⠻",
+ [8755]="⠮⠈⠫⠢⠔⠕⠻",
+ [8756]="⠀⠠⠡⠀",
+ [8757]="⠀⠈⠌⠀",
+ [8758]="⠀⠐⠂⠀",
+ [8759]="⠀⠰⠆⠀",
+ [8760]="⠨⠤",
+ [8761]="⠀⠤⠐⠂⠀",
+ [8762]="⠀⠐⠤⠩⠡⠡⠣⠡⠡⠻⠀",
+ [8763]="⠀⠐⠈⠱⠩⠡⠣⠡⠻⠀",
+ [8764]="⠀⠈⠱⠀",
+ [8765]="⠀⠠⠱⠀",
+ [8770]="⠀⠱⠈⠱⠀",
+ [8771]="⠀⠈⠱⠱⠀",
+ [8773]="⠀⠈⠱⠨⠅⠀",
+ [8776]="⠀⠈⠱⠈⠱⠀",
+ [8778]="⠀⠈⠱⠈⠱⠱⠀",
+ [8779]="⠀⠈⠱⠈⠱⠈⠱⠀",
+ [8780]="⠀⠠⠱⠨⠅⠀",
+ [8781]="⠀⠫⠠⠫⠈⠀",
+ [8782]="⠀⠈⠣⠠⠣⠀",
+ [8783]="⠀⠈⠣⠱⠀",
+ [8784]="⠀⠐⠨⠅⠣⠡⠻⠀",
+ [8785]="⠀⠐⠨⠅⠩⠡⠣⠡⠻⠀",
+ [8788]="⠀⠐⠂⠨⠅⠀",
+ [8789]="⠀⠨⠅⠐⠂⠀",
+ [8790]="⠀⠨⠡⠈⠨⠅⠻⠀",
+ [8791]="⠀⠐⠨⠅⠣⠨⠡⠻⠀",
+ [8792]="⠀⠐⠨⠅⠣⠫⠁⠻⠀",
+ [8793]="⠀⠐⠨⠅⠣⠸⠣⠻⠀",
+ [8794]="⠀⠐⠨⠅⠣⠸⠩⠻⠀",
+ [8795]="⠀⠐⠨⠅⠣⠫⠎⠻⠀",
+ [8796]="⠀⠐⠨⠅⠣⠫⠞⠻⠀",
+ [8797]="⠀⠐⠨⠅⠣⠙⠑⠋⠻⠀",
+ [8798]="⠀⠐⠨⠅⠣⠍⠻⠀",
+ [8799]="⠀⠐⠨⠅⠣⠸⠢⠻⠀",
+ [8800]="⠀⠌⠨⠅⠀",
+ [8801]="⠀⠸⠇⠀",
+ [8802]="⠀⠌⠸⠇⠀",
+ [8804]="⠀⠐⠅⠱⠀",
+ [8805]="⠀⠨⠂⠱⠀",
+ [8806]="⠀⠐⠅⠨⠅⠀",
+ [8807]="⠀⠨⠂⠨⠅⠀",
+ [8808]="⠀⠐⠅⠌⠨⠅⠀",
+ [8809]="⠀⠨⠂⠌⠨⠅⠀",
+ [8810]="⠀⠐⠅⠈⠐⠅⠻⠀",
+ [8811]="⠀⠨⠂⠈⠨⠂⠻⠀",
+ [8813]="⠀⠌⠈⠣⠠⠣⠀",
+ [8814]="⠀⠌⠐⠅⠀",
+ [8815]="⠀⠌⠨⠂⠀",
+ [8816]="⠀⠌⠐⠅⠱⠀",
+ [8817]="⠀⠌⠨⠂⠱⠀",
+ [8818]="⠀⠐⠅⠈⠱⠀",
+ [8819]="⠀⠨⠂⠈⠱⠀",
+ [8820]="⠀⠌⠐⠅⠈⠱⠀",
+ [8821]="⠀⠌⠨⠂⠈⠱⠀",
+ [8822]="⠀⠐⠅⠨⠂⠀",
+ [8823]="⠀⠨⠂⠐⠅⠀",
+ [8824]="⠀⠌⠐⠅⠨⠂⠀",
+ [8825]="⠀⠌⠨⠂⠐⠅⠀",
+ [8826]="⠀⠨⠐⠅⠀",
+ [8827]="⠀⠨⠨⠂⠀",
+ [8830]="⠀⠨⠐⠅⠈⠱⠀",
+ [8831]="⠀⠨⠨⠂⠈⠱⠀",
+ [8834]="⠀⠸⠐⠅⠀",
+ [8835]="⠀⠸⠨⠂⠀",
+ [8836]="⠀⠌⠸⠐⠅⠀",
+ [8837]="⠀⠌⠸⠨⠂⠀",
+ [8838]="⠀⠸⠐⠅⠱⠀",
+ [8839]="⠀⠸⠨⠂⠱⠀",
+ [8840]="⠀⠌⠸⠐⠅⠱⠀",
+ [8841]="⠀⠌⠸⠨⠂⠱⠀",
+ [8842]="⠀⠸⠐⠅⠌⠱⠀",
+ [8843]="⠀⠸⠨⠂⠌⠱⠀",
+ [8844]="⠨⠬⠈⠫⠪⠒⠻",
+ [8845]="⠡⠈⠨⠬⠻",
+ [8846]="⠬⠈⠨⠬⠻",
+ [8853]="⠫⠉⠸⠫⠬⠻",
+ [8854]="⠫⠉⠸⠫⠤⠻",
+ [8855]="⠫⠉⠸⠫⠈⠡⠻",
+ [8856]="⠫⠉⠸⠫⠸⠌⠻",
+ [8857]="⠫⠉⠸⠫⠡⠻",
+ [8859]="⠫⠉⠸⠫⠈⠼⠻",
+ [8860]="⠫⠉⠸⠫⠨⠅⠻",
+ [8861]="⠫⠉⠸⠫⠤⠤⠻",
+ [8862]="⠫⠲⠸⠫⠬⠻",
+ [8863]="⠫⠲⠸⠫⠤⠻",
+ [8864]="⠫⠲⠸⠫⠈⠡⠻",
+ [8865]="⠫⠲⠸⠫⠡⠻",
+ [8866]="⠀⠫⠳⠒⠀",
+ [8867]="⠀⠫⠒⠳⠀",
+ [8868]="⠀⠫⠩⠳⠒⠀",
+ [8869]="⠀⠫⠏⠀ or ⠀⠫⠣⠳⠒⠀",
+ [8886]="⠀⠫⠨⠡⠒⠡⠀",
+ [8887]="⠀⠫⠡⠒⠨⠡⠀",
+ [8888]="⠀⠫⠒⠨⠡⠀",
+ [8895]="⠫⠞⠨⠗⠻",
+ [8901]="⠡",
+ [8902]="⠫⠎",
+ [8909]="⠀⠠⠱⠱⠀",
+ [8918]="⠀⠡⠈⠐⠅⠻⠀",
+ [8919]="⠀⠡⠈⠨⠂⠻⠀",
+ [8920]="⠀⠐⠅⠈⠐⠅⠈⠐⠅⠻⠀",
+ [8921]="⠀⠨⠂⠈⠨⠂⠈⠨⠂⠻⠀",
+ [8924]="⠀⠱⠐⠅⠀",
+ [8925]="⠀⠱⠨⠂⠀",
+ [8942]="⠀⠩⠒⠒⠒⠀",
+ [8943]="⠀⠒⠒⠒",
+ [8944]="⠀⠘⠒⠒⠒⠀",
+ [8945]="⠀⠰⠒⠒⠒⠀",
+ [8946]="⠀⠱⠈⠈⠑⠻⠀",
+ [8949]="⠀⠐⠈⠑⠣⠡⠻⠀",
+ [8950]="⠀⠱⠈⠑⠀",
+ [8954]="⠀⠱⠈⠈⠢⠻⠀",
+ [8957]="⠀⠱⠈⠢⠀",
+ [8968]="⠈⠘⠷",
+ [8969]="⠈⠘⠾",
+ [8970]="⠈⠰⠷",
+ [8971]="⠈⠰⠾",
+ [8994]="⠀⠫⠁⠀",
+ [8995]="⠀⠫⠄⠀",
+ [9632]="⠫⠸⠲",
+ [9633]="⠫⠲",
+ [9644]="⠫⠸⠗",
+ [9645]="⠫⠗",
+ [9650]="⠫⠸⠞",
+ [9651]="⠫⠞",
+ [9660]="⠸⠨⠫",
+ [9675]="⠫⠉",
+ [9679]="⠫⠸⠉",
+ [9707]="⠫⠲⠸⠫⠳⠻",
+ [10178]="⠀⠫⠏⠀",
+ [10179]="⠀⠨⠡⠈⠸⠐⠅⠻⠀",
+ [10180]="⠀⠨⠡⠈⠸⠨⠂⠻⠀",
+ [10204]="⠀⠫⠨⠡⠒⠒⠀",
+ [10205]="⠀⠫⠳⠒⠒⠀",
+ [10206]="⠀⠫⠒⠒⠳⠀",
+ [10207]="⠫⠣⠳⠒⠒⠨⠡",
+ [10214]="⠈⠸⠷",
+ [10215]="⠈⠸⠾",
+ [10216]="⠨⠨⠷",
+ [10217]="⠨⠨⠾",
+ [10229]="⠀⠫⠪⠒⠒⠒⠀",
+ [10230]="⠀⠫⠒⠒⠒⠕⠀",
+ [10231]="⠀⠫⠪⠒⠒⠒⠕⠀",
+ [10232]="⠀⠫⠪⠶⠶⠶⠀",
+ [10233]="⠀⠫⠶⠶⠶⠕⠀",
+ [10234]="⠀⠫⠪⠶⠶⠶⠕⠀",
+ [10235]="⠀⠫⠪⠒⠒⠒⠳⠀",
+ [10236]="⠀⠫⠳⠒⠒⠒⠕⠀",
+ [10237]="⠀⠫⠪⠶⠶⠶⠳⠀",
+ [10238]="⠀⠫⠳⠶⠶⠶⠕⠀",
+ [10239]="⠀⠫⠢⠤⠔⠒⠢⠤⠔⠒⠢⠕⠀",
+ [10529]="⠀⠫⠘⠪⠒⠒⠕⠀",
+ [10530]="⠀⠫⠰⠪⠒⠒⠕⠀",
+ [10627]="⠨⠸⠷",
+ [10628]="⠨⠸⠾",
+ [10641]="⠡⠈⠨⠨⠷⠻",
+ [10642]="⠡⠈⠨⠨⠾⠻",
+ [10692]="⠫⠲⠸⠫⠔⠻",
+ [10693]="⠫⠲⠸⠫⠢⠻",
+ [10694]="⠫⠲⠸⠫⠈⠼⠻",
+ [10698]="⠐⠫⠞⠣⠡⠻",
+ [10699]="⠫⠞⠱",
+ [10700]="⠫⠞⠎",
+ [10726]="⠫⠳⠶⠶⠳",
+ [10764]="⠮⠮⠮⠮",
+ [10765]="⠮⠈⠱⠻",
+ [10766]="⠮⠈⠱⠱⠻",
+ [10774]="⠮⠈⠫⠲⠻",
+ [10776]="⠮⠈⠈⠡⠻",
+ [10777]="⠮⠈⠨⠩⠻",
+ [10778]="⠮⠈⠨⠬⠻",
+ [10779]="⠣⠮",
+ [10780]="⠩⠮",
+ [10786]="⠐⠬⠣⠨⠡⠻",
+ [10787]="⠐⠬⠣⠸⠣⠻",
+ [10788]="⠐⠬⠣⠈⠱⠻",
+ [10789]="⠐⠬⠩⠡⠻",
+ [10794]="⠐⠱⠩⠡⠻",
+ [10800]="⠐⠈⠡⠣⠡⠻",
+ [10801]="⠈⠡⠱",
+ [10808]="⠫⠉⠸⠫⠨⠌⠻",
+ [10809]="⠫⠞⠸⠫⠬⠻",
+ [10810]="⠫⠞⠸⠫⠤⠻",
+ [10811]="⠫⠞⠸⠫⠈⠡⠻",
+ [10816]="⠡⠈⠨⠩⠻",
+ [10817]="⠤⠈⠨⠬⠻",
+ [10818]="⠱⠨⠬",
+ [10819]="⠱⠨⠩",
+ [10833]="⠐⠈⠩⠣⠡⠻",
+ [10834]="⠐⠈⠬⠣⠡⠻",
+ [10844]="⠱⠈⠈⠩⠻",
+ [10845]="⠱⠈⠈⠬⠻",
+ [10846]="⠱⠱⠈⠩",
+ [10847]="⠈⠩⠱",
+ [10848]="⠈⠩⠱⠱",
+ [10850]="⠱⠱⠈⠬",
+ [10851]="⠈⠬⠱⠱",
+ [10854]="⠀⠐⠨⠅⠩⠡⠻⠀",
+ [10855]="⠀⠐⠸⠇⠣⠡⠻⠀",
+ [10858]="⠀⠐⠈⠱⠣⠡⠻⠀",
+ [10860]="⠀⠈⠱⠱⠈⠱⠀",
+ [10861]="⠀⠐⠈⠱⠨⠅⠣⠡⠻⠀",
+ [10862]="⠀⠐⠨⠅⠣⠈⠼⠻⠀",
+ [10863]="⠀⠐⠈⠱⠈⠱⠣⠸⠣⠻⠀",
+ [10864]="⠀⠈⠱⠈⠱⠨⠅⠀",
+ [10865]="⠀⠨⠅⠬⠀",
+ [10866]="⠀⠬⠨⠅⠀",
+ [10867]="⠀⠨⠅⠈⠱⠀",
+ [10868]="⠀⠐⠂⠐⠂⠨⠅⠀",
+ [10869]="⠀⠨⠅⠨⠅⠀",
+ [10870]="⠀⠨⠅⠨⠅⠨⠅⠀",
+ [10871]="⠀⠐⠨⠅⠩⠡⠡⠣⠡⠡⠻⠀",
+ [10872]="⠀⠐⠸⠇⠣⠡⠡⠡⠡⠻⠀",
+ [10873]="⠀⠐⠅⠈⠨⠡⠻⠀",
+ [10874]="⠀⠨⠂⠈⠨⠡⠻⠀",
+ [10875]="⠀⠐⠐⠅⠣⠸⠦⠻⠀",
+ [10876]="⠀⠐⠨⠂⠣⠸⠦⠻⠀",
+ [10885]="⠀⠐⠅⠈⠱⠈⠱⠀",
+ [10886]="⠀⠨⠂⠈⠱⠈⠱⠀",
+ [10891]="⠀⠐⠅⠨⠅⠨⠂⠀",
+ [10892]="⠀⠨⠂⠨⠅⠐⠅⠀",
+ [10893]="⠀⠐⠅⠈⠱⠱⠀",
+ [10894]="⠀⠨⠂⠈⠱⠱⠀",
+ [10895]="⠀⠐⠅⠈⠱⠨⠂⠀",
+ [10896]="⠀⠨⠂⠈⠱⠐⠅⠀",
+ [10897]="⠀⠐⠅⠨⠂⠨⠅⠀",
+ [10898]="⠀⠨⠂⠐⠅⠨⠅⠀",
+ [10905]="⠀⠨⠅⠐⠅⠀",
+ [10906]="⠀⠨⠅⠨⠂⠀",
+ [10909]="⠀⠈⠱⠐⠅⠀",
+ [10910]="⠀⠈⠱⠨⠂⠀",
+ [10911]="⠀⠈⠱⠐⠅⠨⠅⠀",
+ [10912]="⠀⠈⠱⠨⠂⠨⠅⠀",
+ [10926]="⠀⠈⠣⠨⠅⠀",
+ [10927]="⠀⠨⠐⠅⠱⠀",
+ [10928]="⠀⠨⠨⠂⠱⠀",
+ [10929]="⠀⠨⠐⠅⠌⠱⠀",
+ [10930]="⠀⠨⠨⠂⠌⠱⠀",
+ [10931]="⠀⠨⠐⠅⠨⠅⠀",
+ [10932]="⠀⠨⠨⠂⠨⠅⠀",
+ [10933]="⠀⠨⠐⠅⠌⠨⠅⠀",
+ [10934]="⠀⠨⠨⠂⠌⠨⠅⠀",
+ [10935]="⠀⠨⠐⠅⠈⠱⠈⠱⠀",
+ [10936]="⠀⠨⠨⠂⠈⠱⠈⠱⠀",
+ [10937]="⠀⠨⠐⠅⠌⠈⠱⠈⠱⠀",
+ [10938]="⠀⠨⠨⠂⠌⠈⠱⠈⠱⠀",
+ [10939]="⠀⠨⠐⠅⠈⠨⠐⠅⠻⠀",
+ [10940]="⠀⠨⠨⠂⠈⠨⠨⠂⠻⠀",
+ [10941]="⠀⠡⠈⠸⠐⠅⠻⠀",
+ [10942]="⠀⠡⠈⠸⠨⠂⠻⠀",
+ [10943]="⠀⠐⠸⠐⠅⠩⠬⠻⠀",
+ [10944]="⠀⠐⠸⠨⠂⠩⠬⠻⠀",
+ [10945]="⠀⠐⠸⠐⠅⠩⠈⠡⠻⠀",
+ [10946]="⠀⠐⠸⠨⠂⠩⠈⠡⠻⠀",
+ [10949]="⠀⠸⠐⠅⠨⠅⠀",
+ [10950]="⠀⠸⠨⠂⠨⠅⠀",
+ [10951]="⠀⠸⠐⠅⠈⠱⠀",
+ [10952]="⠀⠸⠨⠂⠈⠱⠀",
+ [10953]="⠀⠸⠐⠅⠈⠱⠈⠱⠀",
+ [10954]="⠀⠸⠨⠂⠈⠱⠈⠱⠀",
+ [10955]="⠀⠸⠐⠅⠌⠨⠅⠀",
+ [10956]="⠀⠸⠨⠂⠌⠨⠅⠀",
+ [10963]="⠀⠸⠐⠅⠸⠨⠂⠀",
+ [10964]="⠀⠸⠨⠂⠸⠐⠅⠀",
+ [10965]="⠀⠸⠐⠅⠸⠐⠅⠀",
+ [10966]="⠀⠸⠨⠂⠸⠨⠂⠀",
+ [10967]="⠀⠸⠨⠂⠐⠸⠐⠅⠀",
+ [10991]="⠀⠫⠩⠨⠡⠒⠒⠀",
+ [10992]="⠀⠫⠣⠨⠡⠒⠒⠀",
+ [10993]="⠀⠫⠣⠨⠡⠒⠒⠳⠀",
+ [10994]="⠀⠱⠈⠫⠇⠻⠀",
+ [10995]="⠀⠈⠱⠈⠫⠇⠻⠀",
+ [10996]="⠀⠳⠳⠳⠀",
+ [11039]="⠫⠸⠢",
+ [11040]="⠫⠢",
+ [11041]="⠫⠖",
+ [11042]="⠫⠸⠖",
+ [11052]="⠫⠸⠑",
+ [11053]="⠫⠑",
+ [11056]="⠀⠨⠡⠈⠫⠪⠒⠒⠻⠀",
+ [11057]="⠀⠫⠪⠒⠒⠫⠪⠒⠒⠫⠪⠒⠒⠀",
+ [11058]="⠀⠫⠪⠒⠒⠈⠫⠉⠸⠫⠬⠻⠀",
+ [11203]="⠫⠸⠦",
+ },
+ ["source"]="https://devblogs.microsoft.com/math-in-office/unicode-math-braille-sequences/",
+}
diff --git a/tex/context/base/mkxl/strc-flt.mklx b/tex/context/base/mkxl/strc-flt.mklx
index 5eb18baac..192fd137a 100644
--- a/tex/context/base/mkxl/strc-flt.mklx
+++ b/tex/context/base/mkxl/strc-flt.mklx
@@ -379,7 +379,12 @@
\setupcurrentfloatcaption[#settings]%
\edef\currentfloatcounter{\namedcounterparameter\currentfloat\s!name}%
\iftrialtypesetting\strc_counters_save\currentfloatcounter\fi
- \strc_counters_increment\currentfloatcounter
+ \doifelse{\floatcaptionparameter\c!number}\v!yes
+ {\global\nofloatnumberfalse}%
+ {\global\nofloatnumbertrue}%
+ \ifnofloatnumber\else
+ \strc_counters_increment\currentfloatcounter
+ \fi
\strc_counters_register_component
\s!float
\setupcurrentfloatcaption
@@ -391,7 +396,7 @@
[\s!name=\currentfloat,
\s!counter=\currentfloatcounter,%
\s!hascaption=\v!yes,%
- \s!hasnumber=\v!yes,%
+ \s!hasnumber=\ifnofloatnumber\v!no\else\v!yes\fi,%
\s!hastitle=\v!yes]%
[#userdata]%
\glet\m_strc_floats_previous_number\m_strc_counters_last_registered_index
diff --git a/tex/context/base/mkxl/tabl-ntb.mkxl b/tex/context/base/mkxl/tabl-ntb.mkxl
index a0e85e839..dc644270d 100644
--- a/tex/context/base/mkxl/tabl-ntb.mkxl
+++ b/tex/context/base/mkxl/tabl-ntb.mkxl
@@ -105,7 +105,7 @@
\dotagTABLEcell
%\tabl_ntb_next_level
\font_styles_math_reset
- \usenaturaltablelocalstyleandcolor\c!style\c!color
+ \usenaturaltablelocalstyleandcolor\c!style\c!color % done twice ? needed for style (test onbly style)
\everypar\t_tabl_ntb_cell_start
\font_styles_math_start}
@@ -1955,8 +1955,7 @@
\endgroup}
\def\tabl_ntb_char_align % called often
- {\edef\p_characteralign{\naturaltablelocalparameter\c!aligncharacter}%
- \ifx\p_characteralign\v!yes
+ {\ifcstok{\naturaltablelocalparameter\c!aligncharacter}\v!yes
\ifcase\c_tabl_tbl_pass\or
\tabl_ntb_let_tal\currentTABLEcolumn\plusone
\tabl_ntb_let_gal\plusone
diff --git a/tex/context/fonts/mkiv/dejavu-math.lfg b/tex/context/fonts/mkiv/dejavu-math.lfg
index fb7368b0f..03f869288 100644
--- a/tex/context/fonts/mkiv/dejavu-math.lfg
+++ b/tex/context/fonts/mkiv/dejavu-math.lfg
@@ -32,6 +32,7 @@ return {
tweak = "version",
expected = "Version 1.106",
},
+ presets.braille { },
{
tweak = "fixprimes",
factor = 0.63,
@@ -40,7 +41,6 @@ return {
tweak = "addmirrors",
},
presets.scripttocalligraphic { },
- presets.braille { },
presets.rsfstoscript { rscale = 1.02 },
presets.rsfsuprighttoscript { rscale = 1.02 },
presets.moderntocalligraphic { rscale = 1.02 },
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 4bc9e13a2..8536adc85 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 : 2022-12-07 20:21
+-- merge date : 2022-12-09 16:31
do -- begin closure to overcome local limits and interference