diff options
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 Binary files differindex e8ea30175..93a9c8822 100644 --- a/tex/context/base/mkiv/status-files.pdf +++ b/tex/context/base/mkiv/status-files.pdf diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf Binary files differindex 8ff4f4584..089aadf1a 100644 --- a/tex/context/base/mkiv/status-lua.pdf +++ b/tex/context/base/mkiv/status-lua.pdf 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 |