w32tex
About: TeX Live provides a comprehensive TeX system including all the major TeX-related programs, macro packages, and fonts that are free software. Windows sources.
  Fossies Dox: w32tex-src.tar.xz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

luafont.c
Go to the documentation of this file.
1 /*
2 
3 Copyright 2006-2011 Taco Hoekwater <taco@luatex.org>
4 
5 This file is part of LuaTeX.
6 
7 LuaTeX is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2 of the License, or (at your
10 option) any later version.
11 
12 LuaTeX is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15 License for more details.
16 
17 You should have received a copy of the GNU General Public License along
18 with LuaTeX; if not, see <http://www.gnu.org/licenses/>.
19 
20 */
21 
22 #include "ptexlib.h"
23 #include "lua/luatex-api.h"
24 
25 #define noVERBOSE
26 
27 /*tex
28 
29  Todo: make these keys.
30 
31 */
32 
33 const char *font_type_strings[] = {
34  "unknown", "virtual", "real", NULL
35 };
36 
37 const char *font_writingmode_strings[] = {
38  "unknown", "horizontal", "vertical", NULL
39 };
40 
41 const char *font_identity_strings[] = {
42  "unknown", "horizontal", "vertical", NULL
43 };
44 
45 const char *font_format_strings[] = {
46  "unknown", "type1", "type3", "truetype", "opentype", NULL
47 };
48 
49 const char *font_embedding_strings[] = {
50  "unknown", "no", "subset", "full", NULL
51 };
52 
53 const char *ligature_type_strings[] = {
54  "=:", "=:|", "|=:", "|=:|", "", "=:|>", "|=:>", "|=:|>", "", "", "", "|=:|>>", NULL
55 };
56 
57 const char *MATH_param_names[] = {
58  "nil",
59  "ScriptPercentScaleDown",
60  "ScriptScriptPercentScaleDown",
61  "DelimitedSubFormulaMinHeight",
62  "DisplayOperatorMinHeight",
63  "MathLeading",
64  "AxisHeight",
65  "AccentBaseHeight",
66  "FlattenedAccentBaseHeight",
67  "SubscriptShiftDown",
68  "SubscriptTopMax",
69  "SubscriptBaselineDropMin",
70  "SuperscriptShiftUp",
71  "SuperscriptShiftUpCramped",
72  "SuperscriptBottomMin",
73  "SuperscriptBaselineDropMax",
74  "SubSuperscriptGapMin",
75  "SuperscriptBottomMaxWithSubscript",
76  "SpaceAfterScript",
77  "UpperLimitGapMin",
78  "UpperLimitBaselineRiseMin",
79  "LowerLimitGapMin",
80  "LowerLimitBaselineDropMin",
81  "StackTopShiftUp",
82  "StackTopDisplayStyleShiftUp",
83  "StackBottomShiftDown",
84  "StackBottomDisplayStyleShiftDown",
85  "StackGapMin",
86  "StackDisplayStyleGapMin",
87  "StretchStackTopShiftUp",
88  "StretchStackBottomShiftDown",
89  "StretchStackGapAboveMin",
90  "StretchStackGapBelowMin",
91  "FractionNumeratorShiftUp",
92  "FractionNumeratorDisplayStyleShiftUp",
93  "FractionDenominatorShiftDown",
94  "FractionDenominatorDisplayStyleShiftDown",
95  "FractionNumeratorGapMin",
96  "FractionNumeratorDisplayStyleGapMin",
97  "FractionRuleThickness",
98  "FractionDenominatorGapMin",
99  "FractionDenominatorDisplayStyleGapMin",
100  "SkewedFractionHorizontalGap",
101  "SkewedFractionVerticalGap",
102  "OverbarVerticalGap",
103  "OverbarRuleThickness",
104  "OverbarExtraAscender",
105  "UnderbarVerticalGap",
106  "UnderbarRuleThickness",
107  "UnderbarExtraDescender",
108  "RadicalVerticalGap",
109  "RadicalDisplayStyleVerticalGap",
110  "RadicalRuleThickness",
111  "RadicalExtraAscender",
112  "RadicalKernBeforeDegree",
113  "RadicalKernAfterDegree",
114  "RadicalDegreeBottomRaisePercent",
115  "MinConnectorOverlap",
116  "SubscriptShiftDownWithSuperscript",
117  "FractionDelimiterSize",
118  "FractionDelimiterDisplayStyleSize",
119  "NoLimitSubFactor",
120  "NoLimitSupFactor",
121  NULL,
122 };
123 
124 int ff_checkoption (lua_State *L, int narg, const char *def, const char *const lst[]);
125 
126 int ff_checkoption (lua_State *L, int narg, const char *def, const char *const lst[]) {
127  const char *name = (def) ? luaL_optstring(L, narg, def) : luaL_checkstring(L, narg);
128  int i;
129  for (i=0; lst[i]; i++)
130  if (strcmp(lst[i], name) == 0)
131  return i;
132  return -1;
133 }
134 
135 #define dump_intfield(L,n,c) \
136  lua_push_string_by_name(L,n); \
137  lua_pushinteger(L, c); \
138  lua_rawset(L, -3); \
139 
140 #define dump_stringfield(L,n,c) \
141  lua_push_string_by_name(L,n); \
142  lua_pushstring(L, c); \
143  lua_rawset(L, -3);
144 
145 #define dump_booleanfield(L,n,c) \
146  lua_push_string_by_name(L,n); \
147  lua_pushboolean(L, c); \
148  lua_rawset(L, -3);
149 
150 static void dump_math_kerns(lua_State * L, charinfo * co, int l, int id)
151 {
152  int i;
153  for (i = 0; i < l; i++) {
154  lua_newtable(L);
155  if (id==top_left_kern) {
158  } else if (id==top_right_kern) {
161  } else if (id==bottom_right_kern) {
164  } else if (id==bottom_left_kern) {
167  }
168  lua_rawseti(L, -2, (i + 1));
169  }
170 }
171 
172 #define set_packet_number(fw) { \
173  fw = *(vfp++); \
174  fw = fw * 256 + *(vfp++); \
175  fw = fw * 256 + *(vfp++); \
176  fw = fw * 256 + *(vfp++); \
177 }
178 
179 #define set_packet_scaled(fw) { \
180  fw = *(vfp++); \
181  if (fw > 127) { \
182  fw = fw - 256; \
183  } \
184  fw = fw * 256 + *(vfp++); \
185  fw = fw * 256 + *(vfp++); \
186  fw = fw * 256 + *(vfp++); \
187 }
188 
190 {
192  if (vfp != NULL) {
193  int cmd;
194  int i = 1;
196  lua_newtable(L);
197  while ((cmd = *(vfp++)) != packet_end_code) {
198  switch (cmd) {
199  case packet_font_code:
200  {
201  halfword f ;
203  lua_createtable(L, 2, 0);
205  lua_rawseti(L, -2, 1);
206  lua_pushinteger(L, f);
207  lua_rawseti(L, -2, 2);
208  lua_rawseti(L, -2, i++);
209  }
210  break;
211  case packet_push_code:
212  {
213  lua_createtable(L, 1, 0);
215  lua_rawseti(L, -2, 1);
216  lua_rawseti(L, -2, i++);
217  }
218  break;
219  case packet_pop_code:
220  {
221  lua_createtable(L, 1, 0);
223  lua_rawseti(L, -2, 1);
224  lua_rawseti(L, -2, i++);
225  }
226  break;
227  case packet_char_code:
228  {
229  halfword c ;
231  lua_createtable(L, 2, 0);
233  lua_rawseti(L, -2, 1);
234  lua_pushinteger(L, c);
235  lua_rawseti(L, -2, 2);
236  lua_rawseti(L, -2, i++);
237  }
238  break;
239  case packet_rule_code:
240  {
241  halfword h, w ;
244  lua_createtable(L, 3, 0);
246  lua_rawseti(L, -2, 1);
247  lua_pushinteger(L, h);
248  lua_rawseti(L, -2, 2);
249  lua_pushinteger(L, w);
250  lua_rawseti(L, -2, 3);
251  lua_rawseti(L, -2, i++);
252  }
253  break;
254  case packet_right_code:
255  {
256  halfword r ;
258  lua_createtable(L, 1, 0);
260  lua_rawseti(L, -2, 1);
261  lua_pushinteger(L, r);
262  lua_rawseti(L, -2, 2);
263  lua_rawseti(L, -2, i++);
264  }
265  break;
266  case packet_down_code:
267  {
268  halfword d ;
270  lua_createtable(L, 1, 0);
272  lua_rawseti(L, -2, 1);
273  lua_pushinteger(L, d);
274  lua_rawseti(L, -2, 2);
275  lua_rawseti(L, -2, i++);
276  }
277  break;
278  case packet_pdf_code:
279  {
280  halfword m, l;
283  lua_createtable(L, 3, 0);
285  lua_rawseti(L, -2, 1);
286  lua_pushinteger(L, m);
287  lua_rawseti(L, -2, 2);
288  lua_pushstring(L,"<pdf data>");
289  lua_rawseti(L, -2, 3);
290  lua_rawseti(L, -2, i++);
291  vfp += l;
292  }
293  break;
294  case packet_pdf_mode:
295  {
296  halfword m;
298  lua_createtable(L, 2, 0);
300  lua_rawseti(L, -2, 1);
301  lua_pushinteger(L, m);
302  lua_rawseti(L, -2, 2);
303  lua_rawseti(L, -2, i++);
304  }
305  break;
306  case packet_special_code:
307  {
308  halfword l;
310  lua_createtable(L, 2, 0);
312  lua_rawseti(L, -2, 1);
313  lua_pushstring(L,"<special data>");
314  lua_rawseti(L, -2, 2);
315  lua_rawseti(L, -2, i++);
316  vfp += l;
317  }
318  break;
319  case packet_lua_code:
320  {
321  halfword n;
323  lua_createtable(L, 2, 0);
325  lua_rawseti(L, -2, 1);
326  lua_pushstring(L,"<lua data>");
327  lua_rawseti(L, -2, 2);
328  lua_rawseti(L, -2, i++);
329  }
330  break;
331  case packet_image_code:
332  {
333  halfword n;
335  lua_createtable(L, 2, 0);
337  lua_rawseti(L, -2, 1);
338  lua_pushstring(L,"<image data>");
339  lua_rawseti(L, -2, 2);
340  lua_rawseti(L, -2, i++);
341  }
342  break;
343  case packet_node_code:
344  {
345  halfword n;
347  lua_createtable(L, 2, 0);
349  lua_rawseti(L, -2, 1);
350  lua_pushstring(L,"<node data>");
351  lua_rawseti(L, -2, 2);
352  lua_rawseti(L, -2, i++);
353  }
354  break;
355  case packet_nop_code:
356  {
357  lua_createtable(L, 1, 0);
359  lua_rawseti(L, -2, 1);
360  lua_rawseti(L, -2, i++);
361  }
362  break;
363  case packet_scale_code:
364  break;
365  default:
366  break;
367  }
368  }
369  lua_rawset(L, -3);
370  }
371 }
372 
374 {
375  liginfo *l;
376  kerninfo *ki;
377  lua_createtable(L, 0, 10);
381  if (get_charinfo_italic(co) != 0) {
383  }
384  if (get_charinfo_vert_italic(co) != 0) {
385  dump_intfield(L,vert_italic,get_charinfo_vert_italic(co));
386  }
388  dump_intfield(L,top_accent,get_charinfo_top_accent(co));
389  }
391  dump_intfield(L,bot_accent,get_charinfo_bot_accent(co));
392  }
393  if (get_charinfo_ef(co) != 1000) {
394  dump_intfield(L,expansion_factor,get_charinfo_ef(co));
395  }
396  if (get_charinfo_lp(co) != 0) {
397  dump_intfield(L,left_protruding,get_charinfo_lp(co));
398  }
399  if (get_charinfo_rp(co) != 0) {
400  dump_intfield(L,right_protruding,get_charinfo_rp(co));
401  }
402  if (font_encodingbytes(f) == 2) {
404  }
405  if (get_charinfo_name(co) != NULL) {
407  }
408  if (get_charinfo_tounicode(co) != NULL) {
410  }
411  if (get_charinfo_tag(co) == list_tag) {
413  }
414  if (get_charinfo_used(co)) {
415  dump_booleanfield(L,used,(get_charinfo_used(co) ? true : false));
416  }
417  if (get_charinfo_tag(co) == ext_tag) {
418  extinfo *h;
420  if (h != NULL) {
421  int i = 1;
422  lua_push_string_by_name(L,horiz_variants);
423  lua_newtable(L);
424  while (h != NULL) {
425  lua_createtable(L, 0, 5);
426  dump_intfield(L, glyph, h->glyph);
427  dump_intfield(L, extender, h->extender);
428  dump_intfield(L, start, h->start_overlap);
429  dump_intfield(L, end, h->end_overlap);
430  dump_intfield(L, advance, h->advance);
431  lua_rawseti(L, -2, i);
432  i++;
433  h = h->next;
434  }
435  lua_rawset(L, -3);
436  }
438  if (h != NULL) {
439  int i = 1;
440  lua_push_string_by_name(L,vert_variants);
441  lua_newtable(L);
442  while (h != NULL) {
443  lua_createtable(L, 0, 5);
444  dump_intfield(L, glyph, h->glyph);
445  dump_intfield(L, extender, h->extender);
446  dump_intfield(L, start, h->start_overlap);
447  dump_intfield(L, end, h->end_overlap);
448  dump_intfield(L, advance, h->advance);
449  lua_rawseti(L, -2, i);
450  i++;
451  h = h->next;
452  }
453  lua_rawset(L, -3);
454  }
455  }
456  ki = get_charinfo_kerns(co);
457  if (ki != NULL) {
458  int i;
460  lua_createtable(L, 10, 1);
461  for (i = 0; !kern_end(ki[i]); i++) {
462  if (kern_disabled(ki[i])) {
463  /*tex Skip like in lookup. */
464  } else {
465  lua_rawgeti(L, -1, kern_char(ki[i]));
466  if (lua_type(L,-1) == LUA_TNIL) {
467  lua_pop(L,1);
468  if (kern_char(ki[i]) == right_boundarychar) {
470  } else {
471  lua_pushinteger(L, kern_char(ki[i]));
472  }
473  lua_pushinteger(L, kern_kern(ki[i]));
474  lua_rawset(L, -3);
475  } else {
476  /*tex The first one wins. */
477  lua_pop(L,1);
478  }
479  }
480  }
481  lua_rawset(L, -3);
482  }
484  if (l != NULL) {
485  int i;
487  lua_createtable(L, 10, 1);
488  for (i = 0; !lig_end(l[i]); i++) {
489  if (lig_char(l[i]) == right_boundarychar) {
491  } else {
493  }
494  lua_createtable(L, 0, 2);
497  lua_rawset(L, -3);
500  lua_rawset(L, -3);
501  lua_rawset(L, -3);
502  }
503  lua_rawset(L, -3);
504  }
506  lua_newtable(L);
507  {
508  int i, j;
510  j = 0;
511  if (i > 0) {
512  j++;
513  lua_push_string_by_name(L,top_right);
514  lua_newtable(L);
516  lua_rawset(L, -3);
517  }
519  if (i > 0) {
520  j++;
521  lua_push_string_by_name(L,top_left);
522  lua_newtable(L);
524  lua_rawset(L, -3);
525  }
527  if (i > 0) {
528  j++;
529  lua_push_string_by_name(L,bottom_right);
530  lua_newtable(L);
532  lua_rawset(L, -3);
533  }
535  if (i > 0) {
536  j++;
537  lua_push_string_by_name(L,bottom_left);
538  lua_newtable(L);
540  lua_rawset(L, -3);
541  }
542  if (j > 0)
543  lua_rawset(L, -3);
544  else
545  lua_pop(L, 2);
546  }
548 }
549 
550 static void write_lua_parameters(lua_State * L, int f)
551 {
552  int k;
554  lua_newtable(L);
555  for (k = 1; k <= font_params(f); k++) {
556  switch (k) {
557  case slant_code:
559  break;
560  case space_code:
562  break;
563  case space_stretch_code:
565  break;
566  case space_shrink_code:
568  break;
569  case x_height_code:
571  break;
572  case quad_code:
574  break;
575  case extra_space_code:
577  break;
578  default:
580  lua_rawseti(L, -2, k);
581  }
582  }
583  lua_rawset(L, -3);
584 }
585 
587 {
588  int k;
589  lua_newtable(L);
590  for (k = 1; k <= font_params(f); k++) {
591  switch (k) {
592  case slant_code:
594  break;
595  case space_code:
597  break;
598  case space_stretch_code:
600  break;
601  case space_shrink_code:
603  break;
604  case x_height_code:
606  break;
607  case quad_code:
609  break;
610  case extra_space_code:
612  break;
613  default:
615  lua_rawseti(L, -2, k);
616  }
617  }
618  return 1;
619 }
620 
622 {
623  int k;
624  lua_push_string_by_name(L,MathConstants);
625  lua_newtable(L);
626  for (k = 1; k <= font_math_params(f); k++) {
628  if (k <= MATH_param_max) {
630  } else {
631  lua_rawseti(L, -2, k);
632  }
633  }
634  lua_rawset(L, -3);
635 }
636 
637 int font_to_lua(lua_State * L, int f, int usecache)
638 {
639  int k;
640  charinfo *co;
641  if (usecache && font_cache_id(f) > 0) {
642  /*tex Fetch the table from the registry if it was saved there by |font_from_lua|. */
644  return 1;
645  }
646  lua_newtable(L);
649  lua_rawset(L, -3);
650  if (font_area(f) != NULL) {
651  dump_stringfield(L,area,font_area(f));
652  }
653  if (font_filename(f) != NULL) {
655  }
656  if (font_fullname(f) != NULL) {
657  dump_stringfield(L,fullname,font_fullname(f));
658  }
659  if (font_psname(f) != NULL) {
660  dump_stringfield(L,psname,font_psname(f));
661  }
662  if (font_encodingname(f) != NULL) {
663  dump_stringfield(L,encodingname,font_encodingname(f));
664  }
665  dump_booleanfield(L,used,(font_used(f) ? true : false));
671  dump_intfield(L,streamprovider,font_streamprovider(f));
672  dump_intfield(L,units_per_em,font_units_per_em(f));
678  dump_intfield(L,squeeze,font_squeeze(f));
682  dump_intfield(L,encodingbytes,font_encodingbytes(f));
684  dump_booleanfield(L,oldmath,font_oldmath(f));
686  /*tex The next one is read only: */
687  if (font_max_shrink(f) != 0) {
689  }
690  if (font_max_stretch(f) != 0) {
692  }
693  if (font_step(f) != 0) {
695  }
696  if (pdf_font_attr(f) != 0) {
697  char *s = makecstring(pdf_font_attr(f));
698  dump_stringfield(L,attributes,s);
699  free(s);
700  }
701  /*tex Parameters: */
704  /*tex Characters: */
705  lua_push_string_by_name(L,characters);
707  if (has_left_boundary(f)) {
710  font_char_to_lua(L, f, co);
711  lua_rawset(L, -3);
712  }
713  if (has_right_boundary(f)) {
716  font_char_to_lua(L, f, co);
717  lua_rawset(L, -3);
718  }
719  for (k = font_bc(f); k <= font_ec(f); k++) {
720  if (quick_char_exists(f, k)) {
721  lua_pushinteger(L, k);
722  co = get_charinfo(f, k);
723  font_char_to_lua(L, f, co);
724  lua_rawset(L, -3);
725  }
726  }
727  lua_rawset(L, -3);
728  return 1;
729 }
730 
731 #define count_hash_items(L,name,n) \
732  n = 0; \
733  lua_key_rawgeti(name); \
734  if (lua_type(L, -1) == LUA_TTABLE) { \
735  lua_pushnil(L); \
736  while (lua_next(L, -2) != 0) { \
737  n++; \
738  lua_pop(L, 1); \
739  } \
740  } \
741  if (n) { \
742  /*tex Keep the table on stack. */ \
743  } else{ \
744  lua_pop(L, 1); \
745  }
746 
747 #define streq(a,b) (strcmp(a,b)==0)
748 
749 #define append_packet(k) { *(cp++) = (eight_bits) (k); }
750 
751 #define do_store_four(l) { \
752  append_packet((l & 0xFF000000) >> 24); \
753  append_packet((l & 0x00FF0000) >> 16); \
754  append_packet((l & 0x0000FF00) >> 8); \
755  append_packet((l & 0x000000FF)); \
756 }
757 
758 static void append_float(eight_bits ** cpp, float a)
759 {
760  unsigned int i;
761  eight_bits *cp = *cpp;
762  union U {
763  float a;
764  eight_bits b[sizeof(float)];
765  } u;
766  u.a = a;
767  for (i = 0; i < sizeof(float); i++)
768  append_packet(u.b[i]);
769  *cpp = cp;
770 }
771 
772 static int n_enum_field(lua_State * L, int name_index, int dflt, const char **values)
773 {
774  int k, t;
775  const char *s;
776  int i = dflt;
777  /*tex Fetch the string pointer: */
778  lua_rawgeti(L, LUA_REGISTRYINDEX, name_index);
779  lua_rawget(L, -2);
780  t = lua_type(L,-1);
781  if (t == LUA_TNUMBER) {
782  i = (int) lua_tointeger(L, -1);
783  } else if (t == LUA_TSTRING) {
784  s = lua_tostring(L, -1);
785  k = 0;
786  while (values[k] != NULL) {
787  if (strcmp(values[k], s) == 0) {
788  i = k;
789  break;
790  }
791  k++;
792  }
793  }
794  lua_pop(L, 1);
795  return i;
796 }
797 
798 static int n_boolean_field(lua_State * L, int name_index, int dflt)
799 {
800  int i = dflt;
801  /*tex Fetch the string pointer: */
802  lua_rawgeti(L, LUA_REGISTRYINDEX, name_index);
803  lua_rawget(L, -2);
804  if (lua_isboolean(L, -1)) {
805  i = lua_toboolean(L, -1);
806  }
807  lua_pop(L, 1);
808  return i;
809 }
810 
811 static char *n_string_field_copy(lua_State * L, int name_index, const char *dflt)
812 {
813  char *i;
814  /*tex Fetch the string pointer: */
815  lua_rawgeti(L, LUA_REGISTRYINDEX, name_index);
816  lua_rawget(L, -2);
817  if (lua_type(L,-1) == LUA_TSTRING) {
818  i = xstrdup(lua_tostring(L, -1));
819  } else if (dflt == NULL) {
820  i = NULL;
821  } else {
822  i = xstrdup(dflt);
823  }
824  lua_pop(L, 1);
825  return i;
826 }
827 
828 static const char *n_string_field(lua_State * L, int name_index)
829 {
830  /*tex Fetch the string pointer: */
831  lua_rawgeti(L, LUA_REGISTRYINDEX, name_index);
832  lua_rawget(L, -2);
833  return lua_tostring(L,-1);
834 }
835 
836 static int n_some_field(lua_State * L, int name_index)
837 {
838  /*tex Fetch the string pointer: */
839  lua_rawgeti(L, LUA_REGISTRYINDEX, name_index);
840  lua_rawget(L, -2);
841  return lua_type(L,-1);
842 }
843 
845 {
846  register int i;
847  register int ts;
848  register int l = 0;
849  int ff = 0;
850  for (i = 1; i <= (int) lua_rawlen(L, -1); i++) {
851  lua_rawgeti(L, -1, i);
852  if (lua_istable(L, -1)) {
853  lua_rawgeti(L, -1, 1);
854  if (lua_type(L,-1) == LUA_TSTRING) {
855  const char *s = lua_tostring(L, -1);
856  if (lua_key_eq(s, font)) {
857  l += 5;
858  ff = 1;
859  } else if (lua_key_eq(s, char)) {
860  if (ff == 0) {
861  l += 5;
862  }
863  l += 5;
864  ff = 1;
865  } else if (lua_key_eq(s, slot)) {
866  l += 10;
867  } else if (lua_key_eq(s, comment) || lua_key_eq(s, nop)) {
868  ;
869  } else if (lua_key_eq(s, push) || lua_key_eq(s, pop)) {
870  l++;
871  } else if (lua_key_eq(s, rule)) {
872  l += 9;
873  } else if (lua_key_eq(s, right) || lua_key_eq(s, node) || lua_key_eq(s, down) || lua_key_eq(s, image) || lua_key_eq(s, lua)) {
874  l += 5;
875  } else if (lua_key_eq(s, scale)) {
876  l += sizeof(float) + 1;
877  } else if (lua_key_eq(s, pdf)) {
878  size_t len;
879  l += 5;
880  ts = lua_rawlen(L, -2);
881  lua_rawgeti(L, -2, 2);
882  if (ts == 3) {
883  if (lua_type(L,-1) == LUA_TSTRING) {
884  /*tex There is no need to do something. */
885  } else if (lua_type(L,-1) == LUA_TNUMBER) {
886  /*tex There is no need to do something. */
887  } else {
888  normal_error("vf command","invalid packet pdf literal category");
889  }
890  lua_rawgeti(L, -3, 3);
891  }
892  if (lua_type(L,-1) == LUA_TSTRING) {
893  (void) lua_tolstring(L, -1, &len);
894  if (len > 0) {
895  l = (int) (l + 5 + (int) len);
896  }
897  } else {
898  normal_error("vf command","invalid packet pdf literal");
899  }
900  lua_pop(L, ts == 3 ? 2 : 1);
901  } else if (lua_key_eq(s, special)) {
902  size_t len;
903  lua_rawgeti(L, -2, 2);
904  if (lua_type(L,-1) == LUA_TSTRING) {
905  (void) lua_tolstring(L, -1, &len);
906  if (len > 0) {
907  l = (int) (l + 5 + (int) len);
908  }
909  } else {
910  normal_error("vf command","invalid packet special");
911  }
912  lua_pop(L, 1);
913  } else {
914  normal_error("vf command","unknown packet command");
915  }
916  } else {
917  normal_error("vf command","no packet command");
918  }
919  /*tex Pop the command name: */
920  lua_pop(L, 1);
921  }
922  /*tex Pop this item: */
923  lua_pop(L, 1);
924  }
925  return l;
926 }
927 
929 {
930  double result, mult;
931  mult = (double) (atsize / 65536.0);
932  result = (double) (sp * 16.0);
933  return floor(result / mult);
934 }
935 
936 static void read_char_packets(lua_State * L, int *l_fonts, charinfo * co, internal_font_number f, int atsize)
937 {
938  int i, n, m;
939  size_t l;
940  int cmd;
941  const char *s;
942  eight_bits *cpackets, *cp;
943  int ff = 0;
944  int sf = 0;
945  int ts = 0;
946  int max_f = 0;
948  if (pc <= 0)
949  return;
950  if (l_fonts != NULL) {
951  while (l_fonts[(max_f + 1)] != 0) {
952  max_f++;
953  }
954  }
955  cp = cpackets = xmalloc((unsigned) (pc + 1));
956  for (i = 1; i <= (int) lua_rawlen(L, -1); i++) {
957  lua_rawgeti(L, -1, i);
958  if (lua_istable(L, -1)) {
959  /*tex fetch the command code */
960  lua_rawgeti(L, -1, 1);
961  if (lua_type(L,-1) == LUA_TSTRING) {
962  s = lua_tostring(L, -1);
963  cmd = 0;
964  if (lua_key_eq(s, font)) {
965  if (l_fonts == NULL) {
966  normal_error("vf command","no font table found");
967  }
969  } else if (lua_key_eq(s, char)) {
970  if (l_fonts == NULL) {
971  normal_error("vf command","no font table found");
972  }
974  if (ff == 0) {
976  ff = l_fonts[1];
977  do_store_four(ff);
978  }
979  } else if (lua_key_eq(s, slot)) {
980  if (l_fonts == NULL) {
981  normal_error("vf command","no font table found");
982  }
983  /*tex we could be sparse but no real reason */
985  lua_rawgeti(L, -2, 2);
986  n = (int) lua_roundnumber(L, -1);
987  if (n == 0) {
988  sf = f;
989  } else {
990  sf = (n > max_f ? l_fonts[1] : l_fonts[n]);
991  }
992  lua_rawgeti(L, -3, 3);
993  n = (int) lua_roundnumber(L, -1);
994  lua_pop(L, 2);
996  do_store_four(sf);
998  do_store_four(n);
999  } else if (lua_key_eq(s, comment) || lua_key_eq(s, nop)) {
1000  cmd = packet_nop_code;
1001  } else if (lua_key_eq(s, node)) {
1003  } else if (lua_key_eq(s, push)) {
1005  } else if (lua_key_eq(s, pop)) {
1006  cmd = packet_pop_code;
1007  } else if (lua_key_eq(s, rule)) {
1009  } else if (lua_key_eq(s, right)) {
1011  } else if (lua_key_eq(s, down)) {
1013  } else if (lua_key_eq(s, pdf)) {
1014  cmd = packet_pdf_code;
1015  } else if (lua_key_eq(s, special)) {
1017  } else if (lua_key_eq(s, image)) {
1019  } else if (lua_key_eq(s, scale)) {
1021  } else if (lua_key_eq(s, lua)) {
1022  cmd = packet_lua_code;
1023  }
1024  switch (cmd) {
1025  case packet_push_code:
1026  case packet_pop_code:
1027  append_packet(cmd);
1028  break;
1029  case packet_font_code:
1030  append_packet(cmd);
1031  lua_rawgeti(L, -2, 2);
1032  n = (int) lua_roundnumber(L, -1);
1033  if (n == 0) {
1034  ff = n;
1035  } else {
1036  ff = (n > max_f ? l_fonts[1] : l_fonts[n]);
1037  }
1038  do_store_four(ff);
1039  lua_pop(L, 1);
1040  break;
1041  case packet_node_code:
1042  append_packet(cmd);
1043  lua_rawgeti(L, -2, 2);
1045  do_store_four(n);
1046  lua_pop(L, 1);
1047  break;
1048  case packet_char_code:
1049  append_packet(cmd);
1050  lua_rawgeti(L, -2, 2);
1051  n = (int) lua_roundnumber(L, -1);
1052  do_store_four(n);
1053  lua_pop(L, 1);
1054  break;
1055  case packet_right_code:
1056  case packet_down_code:
1057  append_packet(cmd);
1058  lua_rawgeti(L, -2, 2);
1059  n = (int) lua_roundnumber(L, -1);
1060  do_store_four(sp_to_dvi(n, atsize));
1061  lua_pop(L, 1);
1062  break;
1063  case packet_rule_code:
1064  append_packet(cmd);
1065  lua_rawgeti(L, -2, 2);
1066  n = (int) lua_roundnumber(L, -1);
1067  do_store_four(sp_to_dvi(n, atsize));
1068  lua_rawgeti(L, -3, 3);
1069  n = (int) lua_roundnumber(L, -1);
1070  do_store_four(sp_to_dvi(n, atsize));
1071  lua_pop(L, 2);
1072  break;
1073  case packet_pdf_code:
1074  ts = (int) lua_rawlen(L, -2);
1075  lua_rawgeti(L, -2, 2);
1076  if (ts == 3) {
1077  /*tex mode on stack */
1078  s = lua_tostring(L, -1);
1079  if (lua_type(L, -1) == LUA_TSTRING) {
1080  /*tex |<pdf> <mode> <direct|page|text|raw|origin>| */
1081  if (lua_key_eq(s, mode)) {
1082  cmd = packet_pdf_mode;
1083  lua_rawgeti(L, -3, 3);
1084  /*tex mode on stack */
1085  s = lua_tostring(L, -1);
1086  }
1087  } else {
1088  /*tex |<pdf> <direct|page|text|raw|origin> <string>| */
1089  }
1090  if (lua_type(L, -1) == LUA_TSTRING) {
1091  if (lua_key_eq(s, direct)) {
1092  n = direct_always;
1093  } else if (lua_key_eq(s, page)) {
1094  n = direct_page;
1095  } else if (lua_key_eq(s, text)) {
1096  n = direct_text;
1097  } else if (lua_key_eq(s, font)) {
1098  n = direct_font;
1099  } else if (lua_key_eq(s, raw)) {
1100  n = direct_raw;
1101  } else if (lua_key_eq(s, origin)) {
1102  n = set_origin;
1103  } else {
1104  n = set_origin ;
1105  }
1106  } else {
1107  n = (int) lua_roundnumber(L, -1);
1108  if (n < set_origin || n >= scan_special) {
1109  n = set_origin ;
1110  }
1111  }
1112  if (cmd == packet_pdf_code) {
1113  /*tex string on stack */
1114  lua_rawgeti(L, -3, 3);
1115  }
1116  } else {
1117  n = set_origin;
1118  }
1119  append_packet(cmd);
1120  do_store_four(n);
1121  if (cmd == packet_pdf_code) {
1122  s = luaL_checklstring(L, -1, &l);
1123  do_store_four(l);
1124  if (l > 0) {
1125  m = (int) l;
1126  while (m > 0) {
1127  n = *s++;
1128  m--;
1129  append_packet(n);
1130  }
1131  }
1132  }
1133  lua_pop(L,ts == 3 ? 2 : 1);
1134  break;
1135  case packet_special_code:
1136  append_packet(cmd);
1137  lua_rawgeti(L, -2, 2);
1138  s = luaL_checklstring(L, -1, &l);
1139  if (l > 0) {
1140  do_store_four(l);
1141  m = (int) l;
1142  while (m > 0) {
1143  n = *s++;
1144  m--;
1145  append_packet(n);
1146  }
1147  }
1148  lua_pop(L, 1);
1149  break;
1150  case packet_lua_code:
1151  append_packet(cmd);
1152  lua_rawgeti(L, -2, 2);
1154  do_store_four(n);
1155  break;
1156  case packet_image_code:
1157  append_packet(cmd);
1158  lua_rawgeti(L, -2, 2);
1159  if (lua_istable(L, -1)) {
1160  lua_getglobal(L, "img");
1161  /*tex Just in case one accidentely wipes |img|: */
1162  if (lua_type(L,-1) != LUA_TTABLE) {
1163  normal_error("vf command","no img table found");
1164  }
1165  lua_pushstring(L, "new");
1166  lua_gettable(L, -2);
1167  /*tex or the |new| entry: */
1168  if (lua_type(L,-1) != LUA_TFUNCTION) {
1169  normal_error("vf command","no img.new function found");
1170  }
1171  lua_insert(L, -3);
1172  lua_pop(L, 1);
1173  lua_call(L, 1, 1);
1174  }
1175  luaL_checkudata(L, -1, TYPE_IMG);
1177  do_store_four(n);
1178  break;
1179  case packet_nop_code:
1180  break;
1181  case packet_scale_code:
1182  append_packet(cmd);
1183  lua_rawgeti(L, -2, 2);
1184  append_float(&cp, (float) luaL_checknumber(L, -1));
1185  lua_pop(L, 1);
1186  break;
1187  default:
1188  normal_error("vf command","invalid packet code");
1189  }
1190  }
1191  /*tex Command code: */
1192  lua_pop(L, 1);
1193  } else {
1194  normal_error("vf command","commands has to be a table");
1195  }
1196  /*tex Command table: */
1197  lua_pop(L, 1);
1198  }
1200  set_charinfo_packets(co, cpackets);
1201  return;
1202 }
1203 
1204 static void read_lua_cidinfo(lua_State * L, int f)
1205 {
1206  int i;
1207  char *s;
1208  lua_key_rawgeti(cidinfo);
1209  if (lua_istable(L, -1)) {
1216  s = n_string_field_copy(L, lua_key_index(ordering), "Identity");
1218  }
1219  lua_pop(L, 1);
1220 }
1221 
1222 static void read_lua_parameters(lua_State * L, int f)
1223 {
1224  int i, n, t;
1225  const char *s;
1227  if (lua_istable(L, -1)) {
1228  /*tex The number of parameters is the |max(IntegerKeys(L)),7)| */
1229  n = 7;
1230  lua_pushnil(L);
1231  while (lua_next(L, -2) != 0) {
1232  if (lua_type(L, -2) == LUA_TNUMBER) {
1233  i = (int) lua_tointeger(L, -2);
1234  if (i > n)
1235  n = i;
1236  }
1237  lua_pop(L, 1);
1238  }
1239  if (n > 7)
1240  set_font_params(f, n);
1241  /*tex Sometimes it is handy to have all integer keys: */
1242  for (i = 1; i <= 7; i++) {
1243  lua_rawgeti(L, -1, i);
1244  if (lua_type(L, -1) == LUA_TNUMBER) {
1245  n = lua_roundnumber(L, -1);
1246  set_font_param(f, i, n);
1247  }
1248  lua_pop(L, 1);
1249  }
1250  lua_pushnil(L);
1251  while (lua_next(L, -2) != 0) {
1252  t = lua_type(L,-2);
1253  if (t == LUA_TNUMBER) {
1254  i = (int) lua_tointeger(L, -2);
1255  if (i >= 8) {
1256  if (lua_type(L,-1) == LUA_TNUMBER) {
1257  n = lua_roundnumber(L, -1);
1258  } else {
1259  n = 0;
1260  }
1261  set_font_param(f, i, n);
1262  }
1263  } else if (t == LUA_TSTRING) {
1264  s = lua_tostring(L, -2);
1265  if (lua_type(L,-1) == LUA_TNUMBER) {
1266  n = lua_roundnumber(L, -1);
1267  } else {
1268  n = 0;
1269  }
1270  if (lua_key_eq(s, slant)) {
1272  } else if (lua_key_eq(s, space)) {
1274  } else if (lua_key_eq(s, space_stretch)) {
1276  } else if (lua_key_eq(s, space_shrink)) {
1278  } else if (lua_key_eq(s, x_height)) {
1280  } else if (lua_key_eq(s, quad)) {
1282  } else if (lua_key_eq(s, extra_space)) {
1284  }
1285  }
1286  lua_pop(L, 1);
1287  }
1288  }
1289  lua_pop(L, 1);
1290 
1291 }
1292 
1294 {
1295  int i = 0, n = 0, t;
1296  lua_key_rawgeti(MathConstants);
1297  if (lua_istable(L, -1)) {
1298  lua_pushnil(L);
1299  while (lua_next(L, -2) != 0) {
1300  t = lua_type(L,-2);
1301  if (t == LUA_TNUMBER) {
1302  i = (int) lua_tointeger(L, -2);
1303  } else if (t == LUA_TSTRING) {
1305  }
1306  n = (int) lua_roundnumber(L, -1);
1307  if (i > 0) {
1308  set_font_math_param(f, i, n);
1309  }
1310  lua_pop(L, 1);
1311  }
1312  set_font_oldmath(f,false);
1313  } else {
1314  set_font_oldmath(f,true);
1315  }
1316  lua_pop(L, 1);
1317 }
1318 
1319 #define MIN_INF -0x7FFFFFFF
1320 
1321 static void store_math_kerns(lua_State * L, int index, charinfo * co, int id)
1322 {
1323  int l, k;
1324  scaled ht, krn;
1326  if (lua_istable(L, -1) && ((k = (int) lua_rawlen(L, -1)) > 0)) {
1327  for (l = 0; l < k; l++) {
1328  lua_rawgeti(L, -1, (l + 1));
1329  if (lua_istable(L, -1)) {
1332  if (krn > MIN_INF && ht > MIN_INF)
1333  add_charinfo_math_kern(co, id, ht, krn);
1334  }
1335  lua_pop(L, 1);
1336  }
1337  }
1338  lua_pop(L, 1);
1339 }
1340 
1341 static void font_char_from_lua(lua_State * L, internal_font_number f, int i, int *l_fonts, boolean has_math)
1342 {
1343  int k, r, t, lt, u, n;
1344  charinfo *co;
1345  kerninfo *ckerns;
1346  liginfo *cligs;
1347  scaled j;
1348  const char *s;
1349  /*tex The number of ligature table items: */
1350  int nl = 0;
1351  /*tex The number of kern table items: */
1352  int nk = 0;
1353  int ctr = 0;
1354  int atsize = font_size(f);
1355  if (lua_istable(L, -1)) {
1356  co = get_charinfo(f, i);
1357  set_charinfo_tag(co, 0);
1359  set_charinfo_width(co, j);
1361  set_charinfo_height(co, j);
1363  set_charinfo_depth(co, j);
1365  set_charinfo_italic(co, j);
1366  j = lua_numeric_field_by_index(L, lua_key_index(vert_italic), 0);
1369  set_charinfo_index(co, j);
1370  j = lua_numeric_field_by_index(L, lua_key_index(expansion_factor), 1000);
1371  set_charinfo_ef(co, j);
1372  j = lua_numeric_field_by_index(L, lua_key_index(left_protruding), 0);
1373  set_charinfo_lp(co, j);
1374  j = lua_numeric_field_by_index(L, lua_key_index(right_protruding), 0);
1375  set_charinfo_rp(co, j);
1377  set_charinfo_used(co, k);
1379  if (s != NULL)
1380  set_charinfo_name(co, xstrdup(s));
1381  else
1382  set_charinfo_name(co, NULL);
1383  /*tex |n_string_field| leaves a value on stack*/
1384  lua_pop(L,1);
1386  if (u == LUA_TNUMBER) {
1387  u = lua_tointeger(L,-1);
1388  if (u < 0) {
1390  } else if (u < 0xD7FF || (u > 0xDFFF && u <= 0xFFFF)) {
1391  char *s = malloc(5);
1392  sprintf(s,"%04X",(unsigned int) u);
1394  } else {
1395  char *s = malloc(11);
1396  u = u - 0x10000;
1397  sprintf(s,"%04X%04X",(unsigned int) (floor(u/1024)+0xD800),(unsigned int) (u%1024+0xDC00));
1399  }
1400  } else if (u == LUA_TTABLE) {
1401  n = lua_rawlen(L,-1);
1402  u = 0;
1403  for (k = 1; k <= n; k++) {
1404  lua_rawgeti(L, -1, k);
1405  if (lua_type(L,-1) == LUA_TNUMBER) {
1406  u = lua_tointeger(L,-1);
1407  } else {
1408  lua_pop(L, 1);
1409  break;
1410  }
1411  if (u < 0) {
1412  u = -1;
1413  lua_pop(L, 1);
1414  break;
1415  } else if (u < 0xD7FF || (u > 0xDFFF && u <= 0xFFFF)) {
1416  u = u + 4;
1417  } else {
1418  u = u + 8;
1419  }
1420  lua_pop(L, 1);
1421  }
1422  if (u>0) {
1423  char *s = malloc(u+1);
1424  char *t = s ;
1425  for (k = 1; k <= n; k++) {
1426  lua_rawgeti(L, -1, k);
1427  u = lua_tointeger(L,-1);
1428  if (u < 0xD7FF || (u > 0xDFFF && u <= 0xFFFF)) {
1429  sprintf(t,"%04X",(unsigned int) u);
1430  t += 4;
1431  } else {
1432  u = u - 0x10000;
1433  sprintf(t,"%04X%04X",(unsigned int) (floor(u/1024)+0xD800),(unsigned int) (u%1024+0xDC00));
1434  t += 8;
1435  }
1436  lua_pop(L, 1);
1437  }
1439  } else {
1441  }
1442  } else if (u == LUA_TSTRING) {
1443  s = lua_tostring(L,-1);
1445  } else {
1447  }
1448  lua_pop(L,1);
1449  if (has_math) {
1455  if (k >= 0) {
1458  }
1459  lua_key_rawgeti(extensible);
1460  if (lua_istable(L, -1)) {
1461  int top, bot, mid, rep;
1463  bot = lua_numeric_field_by_index(L, lua_key_index(bot), 0);
1464  mid = lua_numeric_field_by_index(L, lua_key_index(mid), 0);
1465  rep = lua_numeric_field_by_index(L, lua_key_index(rep), 0);
1466  if (top != 0 || bot != 0 || mid != 0 || rep != 0) {
1468  set_charinfo_extensible(co, top, bot, mid, rep);
1469  } else {
1470  formatted_warning("font", "lua-loaded font %s char U+%X has an invalid extensible field", font_name(f), (int) i);
1471  }
1472  }
1473  lua_pop(L, 1);
1474  lua_key_rawgeti(horiz_variants);
1475  if (lua_istable(L, -1)) {
1476  int glyph, startconnect, endconnect, advance, extender;
1477  extinfo *h;
1480  for (k = 1;; k++) {
1481  lua_rawgeti(L, -1, k);
1482  if (lua_istable(L, -1)) {
1484  extender = lua_numeric_field_by_index(L, lua_key_index(extender), 0);
1485  startconnect = lua_numeric_field_by_index(L, lua_key_index(start), 0);
1486  endconnect = lua_numeric_field_by_index(L, lua_key_index(end), 0);
1488  h = new_variant(glyph, startconnect, endconnect, advance, extender);
1490  lua_pop(L, 1);
1491  } else {
1492  lua_pop(L, 1);
1493  break;
1494  }
1495  }
1496  }
1497  lua_pop(L, 1);
1498  lua_key_rawgeti(vert_variants);
1499  if (lua_istable(L, -1)) {
1500  int glyph, startconnect, endconnect, advance, extender;
1501  extinfo *h;
1504  for (k = 1;; k++) {
1505  lua_rawgeti(L, -1, k);
1506  if (lua_istable(L, -1)) {
1508  extender = lua_numeric_field_by_index(L, lua_key_index(extender), 0);
1509  startconnect = lua_numeric_field_by_index(L, lua_key_index(start), 0);
1510  endconnect = lua_numeric_field_by_index(L, lua_key_index(end), 0);
1512  h = new_variant(glyph, startconnect, endconnect, advance, extender);
1514  lua_pop(L, 1);
1515  } else {
1516  lua_pop(L, 1);
1517  break;
1518  }
1519  }
1520  }
1521  lua_pop(L, 1);
1522  /*tex
1523  Here is a complete example:
1524 
1525  \starttyping
1526  mathkern = {
1527  bottom_left = { { height = 420, kern = 80 }, { height = 520, kern = 4 } },
1528  bottom_right = { { height = 0, kern = 48 } },
1529  top_left = { { height = 620, kern = 0 }, { height = 720, kern = -80 } },
1530  top_right = { { height = 676, kern = 115 }, { height = 776, kern = 45 } },
1531  }
1532  \stoptyping
1533 
1534  */
1536  if (lua_istable(L, -1)) {
1539  store_math_kerns(L,lua_key_index(bottom_right), co, bottom_right_kern);
1540  store_math_kerns(L,lua_key_index(bottom_left), co, bottom_left_kern);
1541  }
1542  lua_pop(L, 1);
1543  }
1544  /*tex end of |has_math| */
1546  if (nk > 0) {
1547  /*tex The kerns table is still on stack. */
1548  ckerns = xcalloc((unsigned) (nk + 1), sizeof(kerninfo));
1549  ctr = 0;
1550  /*tex Traverse the hash. */
1551  lua_pushnil(L);
1552  while (lua_next(L, -2) != 0) {
1553  k = non_boundarychar;
1554  lt = lua_type(L,-2);
1555  if (lt == LUA_TNUMBER) {
1556  /*tex Adjacent char: */
1557  k = (int) lua_tointeger(L, -2);
1558  if (k < 0)
1559  k = non_boundarychar;
1560  } else if (lt == LUA_TSTRING) {
1561  s = lua_tostring(L, -2);
1562  if (lua_key_eq(s, right_boundary)) {
1564  if (!has_right_boundary(f))
1566  }
1567  }
1568  j = lua_roundnumber(L, -1);
1569  if (k != non_boundarychar) {
1570  set_kern_item(ckerns[ctr], k, j);
1571  ctr++;
1572  } else {
1573  formatted_warning("font", "lua-loaded font %s char U+%X has an invalid kern field", font_name(f), (int) i);
1574  }
1575  lua_pop(L, 1);
1576  }
1577  /*tex A guard against empty tables. */
1578  if (ctr > 0) {
1579  set_kern_item(ckerns[ctr], end_kern, 0);
1580  set_charinfo_kerns(co, ckerns);
1581  } else {
1582  formatted_warning("font", "lua-loaded font %s char U+%X has an invalid kerns field", font_name(f), (int) i);
1583  }
1584  lua_pop(L, 1);
1585  }
1586  /*tex Packet commands. */
1588  if (lua_istable(L, -1)) {
1589  lua_pushnil(L);
1590  if (lua_next(L, -2) != 0) {
1591  lua_pop(L, 2);
1592  read_char_packets(L, (int *) l_fonts, co, f, atsize);
1593  }
1594  }
1595  lua_pop(L, 1);
1596  /*tex The ligatures. */
1598  if (nl > 0) {
1599  /*tex The ligatures table still on stack. */
1600  cligs = xcalloc((unsigned) (nl + 1), sizeof(liginfo));
1601  ctr = 0;
1602  /*tex Traverse the hash. */
1603  lua_pushnil(L);
1604  while (lua_next(L, -2) != 0) {
1605  k = non_boundarychar;
1606  lt = lua_type(L,-2);
1607  if (lt == LUA_TNUMBER) {
1608  /*tex Adjacent char: */
1609  k = (int) lua_tointeger(L, -2);
1610  if (k < 0) {
1611  k = non_boundarychar;
1612  }
1613  } else if (lt == LUA_TSTRING) {
1614  s = lua_tostring(L, -2);
1615  if (lua_key_eq(s, right_boundary)) {
1617  if (!has_right_boundary(f))
1619  }
1620  }
1621  r = -1;
1622  if (lua_istable(L, -1)) {
1623  /*tex Ligature: */
1625  }
1626  if (r != -1 && k != non_boundarychar) {
1628  set_ligature_item(cligs[ctr], (char) ((t * 2) + 1), k, r);
1629  ctr++;
1630  } else {
1631  formatted_warning("font", "lua-loaded font %s char U+%X has an invalid ligature field", font_name(f), (int) i);
1632  }
1633  /*tex The iterator value: */
1634  lua_pop(L, 1);
1635  }
1636  /*tex A guard against empty tables. */
1637  if (ctr > 0) {
1638  set_ligature_item(cligs[ctr], 0, end_ligature, 0);
1639  set_charinfo_ligatures(co, cligs);
1640  } else {
1641  formatted_warning("font", "lua-loaded font %s char U+%X has an invalid ligatures field", font_name(f), (int) i);
1642  }
1643  /*tex The ligatures table. */
1644  lua_pop(L, 1);
1645  }
1646  }
1647 }
1648 
1649 /*tex
1650 
1651  The caller has to fix the state of the lua stack when there is an error!
1652 
1653 */
1654 
1656 {
1657  int i, n, r, t, lt;
1658  int s_top;
1659  int bc;
1660  int ec;
1661  char *s;
1662  const char *ss;
1663  int *l_fonts = NULL;
1664  int save_ref ;
1665  boolean no_math = false;
1666  /*tex Will we save a cache of the \LUA\ table? */
1667  save_ref = 1;
1668  ss = NULL;
1670  if (lua_key_eq(ss, no))
1671  save_ref = -1;
1672  else if (lua_key_eq(ss, renew))
1673  save_ref = 0;
1674  /*tex |n_string_field| leaves a value on stack. */
1675  lua_pop(L,1);
1676  /*tex The table is at stack |index -1| */
1677  s = n_string_field_copy(L,lua_key_index(area), "");
1678  set_font_area(f, s);
1680  set_font_filename(f, s);
1681  s = n_string_field_copy(L, lua_key_index(encodingname), NULL);
1684  set_font_name(f, s);
1685  s = n_string_field_copy(L, lua_key_index(fullname), font_name(f));
1686  set_font_fullname(f, s);
1687  if (s == NULL) {
1688  formatted_error("font","lua-loaded font '%d' has no name!", f);
1689  return false;
1690  }
1691  s = n_string_field_copy(L, lua_key_index(psname), NULL);
1692  set_font_psname(f, s);
1693  i = lua_numeric_field_by_index(L,lua_key_index(units_per_em), 0);
1696  set_font_dsize(f, i);
1698  set_font_size(f, i);
1702  i = lua_numeric_field_by_index(L,lua_key_index(encodingbytes), 0);
1703  set_font_encodingbytes(f, (char) i);
1704  i = lua_numeric_field_by_index(L,lua_key_index(streamprovider), 0);
1705  set_font_streamprovider(f, (char) i);
1706  i = n_boolean_field(L,lua_key_index(oldmath), 0);
1707  set_font_oldmath(f, i);
1709  set_font_tounicode(f, (char) i);
1711  if (i < FONT_SLANT_MIN)
1712  i = FONT_SLANT_MIN;
1713  if (i > FONT_SLANT_MAX)
1714  i = FONT_SLANT_MAX;
1715  set_font_slant(f, i);
1717  if (i < FONT_EXTEND_MIN)
1718  i = FONT_EXTEND_MIN;
1719  if (i > FONT_EXTEND_MAX)
1720  i = FONT_EXTEND_MAX;
1721  set_font_extend(f, i);
1722  i = lua_numeric_field_by_index(L,lua_key_index(squeeze), 1000);
1723  if (i < FONT_SQUEEZE_MIN)
1724  i = FONT_SQUEEZE_MIN;
1725  if (i > FONT_SQUEEZE_MAX)
1726  i = FONT_SQUEEZE_MAX;
1727  set_font_squeeze(f, i);
1729  if (i < FONT_WIDTH_MIN)
1730  i = FONT_WIDTH_MIN;
1731  if (i > FONT_WIDTH_MAX)
1732  i = FONT_WIDTH_MAX;
1733  set_font_width(f, i);
1735  if (i < FONT_MODE_MIN)
1736  i = FONT_MODE_MIN;
1737  if (i > FONT_MODE_MAX)
1738  i = FONT_MODE_MAX;
1739  set_font_mode(f, i);
1741  set_hyphen_char(f, i);
1743  set_skew_char(f, i);
1745  set_font_used(f, (char) i);
1746  s = n_string_field_copy(L, lua_key_index(attributes), NULL);
1747  if (s != NULL && strlen(s) > 0) {
1748  i = maketexstring(s);
1749  set_pdf_font_attr(f, i);
1750  }
1751  free(s);
1753  set_font_type(f, i);
1755  set_font_format(f, i);
1759  set_font_identity(f, i);
1764  }
1766  set_font_subfont(f,i);
1767  /*tex Now fetch the base fonts, if needed. */
1769  if (n > 0) {
1770  /*tex The font table still on stack. */
1771  l_fonts = xmalloc((unsigned) ((unsigned) (n + 2) * sizeof(int)));
1772  memset(l_fonts, 0, (size_t) ((unsigned) (n + 2) * sizeof(int)));
1773  for (i = 1; i <= n; i++) {
1774  lua_rawgeti(L, -1, i);
1775  if (lua_istable(L, -1)) {
1776  lua_key_rawgeti(id);
1777  if (lua_isnumber(L, -1)) {
1778  l_fonts[i] = (int) lua_tointeger(L, -1);
1779  if (l_fonts[i] == 0) {
1780  l_fonts[i] = (int) f;
1781  }
1782  /*tex Pop id and entry. */
1783  lua_pop(L, 2);
1784  continue;
1785  }
1786  /*tex Pop id. */
1787  lua_pop(L, 1);
1788  };
1789  ss = NULL;
1790  if (lua_istable(L, -1)) {
1792  /*tex The string is anchored. */
1793  lua_pop(L,1);
1794  }
1795  if (ss != NULL) {
1797  /*tex The stack is messed up, otherwise this explicit resizing would not be needed! */
1798  s_top = lua_gettop(L);
1799  if (strcmp(font_name(f), ss) == 0)
1800  l_fonts[i] = f;
1801  else
1802  l_fonts[i] = find_font_id(ss, t);
1803  lua_settop(L, s_top);
1804  } else {
1805  formatted_error("font","invalid local font at index %i in lua-loaded font '%s' (1)",i,font_name(f));
1806  }
1807  /*tex Pop the list entry. */
1808  lua_pop(L, 1);
1809  }
1810  /*tex Pop the font table. */
1811  lua_pop(L, 1);
1812  } else if (font_type(f) == virtual_font_type) {
1813  /*tex
1814  We no longer do this check but instead create an entry. This permits
1815  (valid) tricks.
1816  */
1817  /*
1818  formatted_error("font","invalid local fonts in lua-loaded font '%s' (2)", font_name(f));
1819  */
1820  } else {
1821  l_fonts = xmalloc(3 * sizeof(int));
1822  l_fonts[0] = 0;
1823  l_fonts[1] = f;
1824  l_fonts[2] = 0;
1825  }
1826  /*tex The parameters. */
1827  no_math = n_boolean_field(L, lua_key_index(nomath), 0);
1829  if (!no_math) {
1831  if (n_boolean_field(L, lua_key_index(oldmath), 0)) {
1832  set_font_oldmath(f,true);
1833  }
1834 
1835  } else {
1836  set_font_oldmath(f,true);
1837  }
1838  read_lua_cidinfo(L, f);
1839  /*tex The characters. */
1840  lua_key_rawgeti(characters);
1841  if (lua_istable(L, -1)) {
1842  /*tex Find the array size values; |num| holds the number of characters to add. */
1843  int num = 0;
1844  ec = 0;
1845  bc = -1;
1846  /*tex The first key: */
1847  lua_pushnil(L);
1848  while (lua_next(L, -2) != 0) {
1849  if (lua_isnumber(L, -2)) {
1850  i = (int) lua_tointeger(L, -2);
1851  if (i >= 0) {
1852  if (lua_istable(L, -1)) {
1853  num++;
1854  if (i > ec)
1855  ec = i;
1856  if (bc < 0)
1857  bc = i;
1858  if (bc >= 0 && i < bc)
1859  bc = i;
1860  }
1861  }
1862  }
1863  lua_pop(L, 1);
1864  }
1865  if (bc != -1) {
1866  int fstep;
1868  set_font_bc(f, bc);
1869  set_font_ec(f, ec);
1870  /*tex The first key: */
1871  lua_pushnil(L);
1872  while (lua_next(L, -2) != 0) {
1873  lt = lua_type(L,-2);
1874  if (lt == LUA_TNUMBER) {
1875  i = (int) lua_tointeger(L, -2);
1876  if (i >= 0) {
1877  font_char_from_lua(L, f, i, l_fonts, !no_math);
1878  }
1879  } else if (lt == LUA_TSTRING) {
1880  const char *ss1 = lua_tostring(L, -2);
1881  if (lua_key_eq(ss1, left_boundary)) {
1882  font_char_from_lua(L, f, left_boundarychar, l_fonts, !no_math);
1883  } else if (lua_key_eq(ss1, right_boundary)) {
1884  font_char_from_lua(L, f, right_boundarychar, l_fonts, !no_math);
1885  }
1886  }
1887  lua_pop(L, 1);
1888  }
1889  lua_pop(L, 1);
1890  /*tex
1891 
1892  Handle font expansion last: the |copy_font| routine is called eventually,
1893  and that needs to know |bc| and |ec|. We permits virtual fonts to use
1894  expansion as one can always turn it off.
1895 
1896  */
1898  if (fstep < 0)
1899  fstep = 0;
1900  if (fstep > 100)
1901  fstep = 100;
1902  if (fstep != 0) {
1905  if (fshrink < 0)
1906  fshrink = 0;
1907  if (fshrink > 500)
1908  fshrink = 500;
1909  fshrink -= (fshrink % fstep);
1910  if (fshrink < 0)
1911  fshrink = 0;
1912  if (fstretch < 0)
1913  fstretch = 0;
1914  if (fstretch > 1000)
1915  fstretch = 1000;
1916  fstretch -= (fstretch % fstep);
1917  if (fstretch < 0)
1918  fstretch = 0;
1919  set_expand_params(f, fstretch, fshrink, fstep);
1920  }
1921 
1922  } else {
1923  formatted_warning("font","lua-loaded font '%d' with name '%s' has no characters", f, font_name(f));
1924  }
1925  if (save_ref > 0) {
1926  /*tex This pops the table. */
1928  set_font_cache_id(f, r);
1929  } else {
1930  lua_pop(L, 1);
1931  set_font_cache_id(f, save_ref);
1932  }
1933  } else {
1934  formatted_warning("font","lua-loaded font '%d' with name '%s' has no character table", f, font_name(f));
1935  }
1936  if (l_fonts != NULL)
1937  free(l_fonts);
1938  return true;
1939 }
1940 
1942 {
1943  int i, n, t, lt;
1944  int *l_fonts = NULL;
1945  int s_top;
1946  const char *ss;
1947  boolean no_math = false;
1948  /*tex Speedup: */
1949  no_math = n_boolean_field(L, lua_key_index(nomath), 0);
1950  /*tex Type: */
1952  set_font_type(f, i);
1953  /*tex Fonts: */
1955  if (n > 0) {
1956  /*tex The font table still on stack. */
1957  l_fonts = xmalloc((unsigned) ((unsigned) (n + 2) * sizeof(int)));
1958  memset(l_fonts, 0, (size_t) ((unsigned) (n + 2) * sizeof(int)));
1959  for (i = 1; i <= n; i++) {
1960  lua_rawgeti(L, -1, i);
1961  if (lua_istable(L, -1)) {
1962  lua_key_rawgeti(id);
1963  if (lua_isnumber(L, -1)) {
1964  l_fonts[i] = (int) lua_tointeger(L, -1);
1965  if (l_fonts[i] == 0) {
1966  l_fonts[i] = (int) f;
1967  }
1968  /*tex Pop id and entry. */
1969  lua_pop(L, 2);
1970  continue;
1971  }
1972  /*tex Pop id. */
1973  lua_pop(L, 1);
1974  };
1975  ss = NULL;
1976  if (lua_istable(L, -1)) {
1978  /* string is anchored */
1979  lua_pop(L,1);
1980  }
1981  if (ss != NULL) {
1983  /*tex the stack is messed up, otherwise this explicit resizing would not be needed! */
1984  s_top = lua_gettop(L);
1985  if (strcmp(font_name(f), ss) == 0)
1986  l_fonts[i] = f;
1987  else
1988  l_fonts[i] = find_font_id(ss, t);
1989  lua_settop(L, s_top);
1990  } else {
1991  formatted_error("font","invalid local font in lua-loaded font '%s' (3)", font_name(f));
1992  }
1993  /*tex Pop list entry. */
1994  lua_pop(L, 1);
1995  }
1996  /*tex Pop font table. */
1997  lua_pop(L, 1);
1998  } else if (font_type(f) == virtual_font_type) {
1999  formatted_error("font","invalid local fonts in lua-loaded font '%s' (4)", font_name(f));
2000  } else {
2001  l_fonts = xmalloc(3 * sizeof(int));
2002  l_fonts[0] = 0;
2003  l_fonts[1] = f;
2004  l_fonts[2] = 0;
2005  }
2006  /*tex The characters. */
2007  lua_key_rawgeti(characters);
2008  if (lua_istable(L, -1)) {
2009  /*tex Find the array size values; |num| has the amount. */
2010  int num = 0;
2011  int todo = 0;
2012  int bc = font_bc(f);
2013  int ec = font_ec(f);
2014  /*tex First key: */
2015  lua_pushnil(L);
2016  while (lua_next(L, -2) != 0) {
2017  if (lua_isnumber(L, -2)) {
2018  i = (int) lua_tointeger(L, -2);
2019  if (i >= 0) {
2020  if (lua_istable(L, -1)) {
2021  todo++;
2022  if (! quick_char_exists(f,i)) {
2023  num++;
2024  if (i > ec)
2025  ec = i;
2026  if (bc < 0)
2027  bc = i;
2028  if (bc >= 0 && i < bc)
2029  bc = i;
2030  }
2031  }
2032  }
2033  }
2034  lua_pop(L, 1);
2035  }
2036  if (todo > 0) {
2038  set_font_bc(f, bc);
2039  set_font_ec(f, ec);
2040  /*tex First key: */
2041  lua_pushnil(L);
2042  while (lua_next(L, -2) != 0) {
2043  lt = lua_type(L,-2);
2044  if (lt == LUA_TNUMBER) {
2045  i = (int) lua_tointeger(L, -2);
2046  if (i >= 0) {
2047  if (quick_char_exists(f,i)) {
2048  charinfo *co = char_info(f, i);
2049  set_charinfo_name(co, NULL);
2053  set_charinfo_kerns(co, NULL);
2056  }
2057  font_char_from_lua(L, f, i, l_fonts, !no_math);
2058  }
2059  }
2060  lua_pop(L, 1);
2061  }
2062  lua_pop(L, 1);
2063  }
2064  }
2065  if (l_fonts != NULL)
2066  free(l_fonts);
2067  return true;
2068 }
2069 
2070 /*tex Ligaturing starts here */
2071 
2072 static void nesting_append(halfword nest1, halfword newn)
2073 {
2074  halfword tail = tlink(nest1);
2075  if (tail == null) {
2076  couple_nodes(nest1, newn);
2077  } else {
2078  couple_nodes(tail, newn);
2079  }
2080  tlink(nest1) = newn;
2081 }
2082 
2083 static void nesting_prepend(halfword nest1, halfword newn)
2084 {
2085  halfword head = vlink(nest1);
2086  couple_nodes(nest1, newn);
2087  if (head == null) {
2088  tlink(nest1) = newn;
2089  } else {
2090  couple_nodes(newn, head);
2091  }
2092 }
2093 
2094 static void nesting_prepend_list(halfword nest1, halfword newn)
2095 {
2096  halfword head = vlink(nest1);
2097  couple_nodes(nest1, newn);
2098  if (head == null) {
2099  tlink(nest1) = tail_of_list(newn);
2100  } else {
2101  halfword tail = tail_of_list(newn);
2103  }
2104 }
2105 
2107 {
2108  if (type(left) != glyph_node)
2109  return 0;
2110  if (font(left) != font(right))
2111  return 0;
2112  if (is_ghost(left) || is_ghost(right))
2113  return 0;
2115  if (is_valid_ligature(*lig)) {
2116  return 1;
2117  }
2118  return 0;
2119 }
2120 
2121 static int try_ligature(halfword * frst, halfword fwd)
2122 {
2123  halfword cur = *frst;
2124  liginfo lig;
2125  if (test_ligature(&lig, cur, fwd)) {
2126  int move_after = (lig_type(lig) & 0x0C) >> 2;
2127  int keep_right = ((lig_type(lig) & 0x01) != 0);
2128  int keep_left = ((lig_type(lig) & 0x02) != 0);
2129  halfword newgl = raw_glyph_node();
2130  font(newgl) = font(cur);
2131  character(newgl) = lig_replacement(lig);
2132  set_is_ligature(newgl);
2133  /*tex
2134  Below might not be correct in contrived border case. but we use it
2135  only for debugging.
2136  */
2137  if (character(cur) < 0) {
2138  set_is_leftboundary(newgl);
2139  }
2140  if (character(fwd) < 0) {
2141  set_is_rightboundary(newgl);
2142  }
2143  if (character(cur) < 0) {
2144  if (character(fwd) < 0) {
2145  build_attribute_list(newgl);
2146  } else {
2148  node_attr(newgl) = node_attr(fwd);
2149  }
2150  } else {
2152  node_attr(newgl) = node_attr(cur);
2153  }
2154  /*tex
2155  Maybe if this ligature is consists of another ligature we should add
2156  it's |lig_ptr| to the new glyphs |lig_ptr| (and cleanup the no longer
2157  needed node). This has a very low priority, so low that it might
2158  never happen.
2159  */
2160  /*tex Left side: */
2161  if (keep_left) {
2162  halfword new_first = copy_node(cur);
2163  lig_ptr(newgl) = new_first;
2164  couple_nodes(cur, newgl);
2165  if (move_after) {
2166  move_after--;
2167  cur = newgl;
2168  }
2169  } else {
2170  halfword prev = alink(cur);
2171  uncouple_node(cur);
2172  lig_ptr(newgl) = cur;
2173  couple_nodes(prev, newgl);
2174  cur = newgl; /* as cur has disappeared */
2175  }
2176  /*tex Right side: */
2177  if (keep_right) {
2178  halfword new_second = copy_node(fwd);
2179  /*tex This is correct, because we {\em know} |lig_ptr| points to {\em one} node. */
2180  couple_nodes(lig_ptr(newgl), new_second);
2181  couple_nodes(newgl, fwd);
2182  if (move_after) {
2183  move_after--;
2184  cur = fwd;
2185  }
2186  } else {
2187  halfword next = vlink(fwd);
2188  uncouple_node(fwd);
2189  /*tex This works because we {\em know} |lig_ptr| points to {\em one} node. */
2190  couple_nodes(lig_ptr(newgl), fwd);
2191  if (next != null) {
2192  couple_nodes(newgl, next);
2193  }
2194  }
2195  /*tex Check and return. */
2196  *frst = cur;
2197  return 1;
2198  }
2199  return 0;
2200 }
2201 
2202 /*tex
2203 
2204  There shouldn't be any ligatures here - we only add them at the end of
2205  |xxx_break| in a \.{DISC-1 - DISC-2} situation and we stop processing
2206  \.{DISC-1} (we continue with \.{DISC-1}'s |post_| and |no_break|.
2207 
2208 */
2209 
2211 {
2212  if (cur == null)
2213  return root;
2214  while (vlink(cur) != null) {
2215  halfword fwd = vlink(cur);
2216  if (type(cur) == glyph_node && type(fwd) == glyph_node &&
2217  font(cur) == font(fwd) && try_ligature(&cur, fwd)) {
2218  continue;
2219  }
2220  cur = vlink(cur);
2221  }
2222  tlink(root) = cur;
2223  return root;
2224 }
2225 
2227 {
2228  halfword right = null;
2229  if (type(cur) == boundary_node) {
2230  halfword prev = alink(cur);
2231  halfword fwd = vlink(cur);
2232  /*tex There is no need to uncouple |cur|, it is freed. */
2233  flush_node(cur);
2234  if (fwd == null) {
2235  vlink(prev) = fwd;
2236  return prev;
2237  }
2238  couple_nodes(prev, fwd);
2239  if (type(fwd) != glyph_node)
2240  return prev;
2241  cur = fwd;
2242  } else if (has_left_boundary(font(cur))) {
2243  halfword prev = alink(cur);
2245  couple_nodes(prev, p);
2246  couple_nodes(p, cur);
2247  cur = p;
2248  }
2249  if (has_right_boundary(font(cur))) {
2251  }
2252  while (1) {
2253  /*tex A glyph followed by \unknown */
2254  if (type(cur) == glyph_node) {
2255  halfword fwd = vlink(cur);
2256  if (fwd == null) {
2257  /*tex The last character of a paragraph. */
2258  if (right == null)
2259  break;
2260  /*tex |par| prohibits the use of |couple_nodes| here. */
2262  right = null;
2263  continue;
2264  }
2265  if (type(fwd) == glyph_node) {
2266  /*tex a glyph followed by a glyph */
2267  if (font(cur) != font(fwd))
2268  break;
2269  if (try_ligature(&cur, fwd))
2270  continue;
2271  } else if (type(fwd) == disc_node) {
2272  /*tex a glyph followed by a disc */
2273  halfword pre = vlink_pre_break(fwd);
2274  halfword nob = vlink_no_break(fwd);
2275  halfword next, tail;
2276  liginfo lig;
2277  /*tex Check on: |a{b?}{?}{?}| and |a+b=>B| : |{B?}{?}{a?}| */
2278  /*tex Check on: |a{?}{?}{b?}| and |a+b=>B| : |{a?}{?}{B?}| */
2279  if ((pre != null && type(pre) == glyph_node && test_ligature(&lig, cur, pre))
2280  || (nob != null && type(nob) == glyph_node && test_ligature(&lig, cur, nob))) {
2281  /*tex Move |cur| from before disc to skipped part */
2282  halfword prev = alink(cur);
2283  uncouple_node(cur);
2284  couple_nodes(prev, fwd);
2285  nesting_prepend(no_break(fwd), cur);
2286  /*tex Now ligature the |pre_break|. */
2288  /*tex As we have removed cur, we need to start again. */
2289  cur = prev;
2290  }
2291  /*tex Check on: |a{?}{?}{}b| and |a+b=>B| : |{a?}{?b}{B}|. */
2292  next = vlink(fwd);
2293  if (nob == null && next != null && type(next) == glyph_node && test_ligature(&lig, cur, next)) {
2294  /*tex Move |cur| from before |disc| to |no_break| part. */
2295  halfword prev = alink(cur);
2296  uncouple_node(cur);
2297  couple_nodes(prev, fwd);
2298  /*tex We {\em know} it's empty. */
2299  couple_nodes(no_break(fwd), cur);
2300  /*tex Now copy |cur| the |pre_break|. */
2302  /*tex Move next from after disc to |no_break| part. */
2303  tail = vlink(next);
2305  try_couple_nodes(fwd, tail);
2306  /*tex We {\em know} this works. */
2307  couple_nodes(cur, next);
2308  /*tex Make sure the list is correct. */
2309  tlink(no_break(fwd)) = next;
2310  /*tex Now copy next to the |post_break|. */
2312  /*tex As we have removed cur, we need to start again. */
2313  cur = prev;
2314  }
2315  /*tex We are finished with the |pre_break|. */
2317  } else if (type(fwd) == boundary_node) {
2318  halfword next = vlink(fwd);
2320  flush_node(fwd);
2321  if (right != null) {
2322  /*tex Shame, didn't need it. */
2323  flush_node(right);
2324  /*tex No need to reset |right|, we're going to leave the loop anyway. */
2325  }
2326  break;
2327  } else {
2328  /*tex Is something unknown. */
2329  if (right == null)
2330  break;
2332  couple_nodes(right, fwd);
2333  right = null;
2334  continue;
2335  }
2336  /*tex A discretionary followed by \unknown */
2337  } else if (type(cur) == disc_node) {
2338  /*tex If |{?}{x}{?}| or |{?}{?}{y}| then: */
2339  if (vlink_no_break(cur) != null || vlink_post_break(cur) != null) {
2340  halfword prev = 0;
2341  halfword fwd;
2342  liginfo lig;
2343  if (subtype(cur) == select_disc) {
2344  prev = alink(cur);
2345  if (vlink_post_break(cur) != null)
2347  if (vlink_no_break(cur) != null)
2349  }
2350  if (vlink_post_break(cur) != null)
2352  if (vlink_no_break(cur) != null)
2354  while ((fwd = vlink(cur)) != null) {
2355  halfword nob, pst, next;
2356  if (type(fwd) != glyph_node)
2357  break;
2358  if (subtype(cur) != select_disc) {
2359  nob = tlink_no_break(cur);
2360  pst = tlink_post_break(cur);
2361  if ((nob == null || !test_ligature(&lig, nob, fwd)) &&
2362  (pst == null || !test_ligature(&lig, pst, fwd)))
2363  break;
2365  handle_lig_nest(no_break(cur), nob);
2366  } else {
2367  int dobreak = 0;
2368  nob = tlink_no_break(prev);
2369  pst = tlink_post_break(prev);
2370  if ((nob == null || !test_ligature(&lig, nob, fwd)) &&
2371  (pst == null || !test_ligature(&lig, pst, fwd)))
2372  dobreak = 1;
2373  if (!dobreak) {
2375  handle_lig_nest(no_break(prev), nob);
2378  }
2379  dobreak = 0;
2380  nob = tlink_no_break(cur);
2381  pst = tlink_post_break(cur);
2382  if ((nob == null || !test_ligature(&lig, nob, fwd)) &&
2383  (pst == null || !test_ligature(&lig, pst, fwd)))
2384  dobreak = 1;
2385  if (!dobreak) {
2387  handle_lig_nest(no_break(cur), nob);
2388  }
2389  if (dobreak)
2390  break;
2391  }
2392  next = vlink(fwd);
2393  uncouple_node(fwd);
2395  nesting_append(post_break(cur), fwd);
2397  }
2398  if (fwd != null && type(fwd) == disc_node) {
2399  halfword next = vlink(fwd);
2400  if (vlink_no_break(fwd) == null
2401  && vlink_post_break(fwd) == null
2402  && next != null
2403  && type(next) == glyph_node
2404  && ((tlink_post_break(cur) != null && test_ligature(&lig, tlink_post_break(cur), next)) ||
2405  (tlink_no_break (cur) != null && test_ligature(&lig, tlink_no_break (cur), next)))) {
2406  /*tex Building an |init_disc| followed by a |select_disc|: |{a-}{b}{AB} {-}{}{} c| */
2407  halfword last1 = vlink(next), tail;
2409  try_couple_nodes(fwd, last1);
2410  /*tex |{a-}{b}{AB} {-}{c}{}| */
2412  /*tex |{a-}{b}{AB} {-}{c}{-}| */
2413  if (vlink_no_break(cur) != null) {
2415  }
2416  /*tex |{a-}{b}{AB} {b-}{c}{-}| */
2417  if (vlink_post_break(cur) != null)
2419  /*tex |{a-}{b}{AB} {b-}{c}{AB-}| */
2420  if (vlink_no_break(cur) != null) {
2422  }
2423  /*tex |{a-}{b}{ABC} {b-}{c}{AB-}| */
2424  tail = tlink_no_break(cur);
2427  /*tex |{a-}{BC}{ABC} {b-}{c}{AB-}| */
2431  /*tex Set the subtypes: */
2432  subtype(cur) = init_disc;
2433  subtype(fwd) = select_disc;
2434  }
2435  }
2436  }
2437 
2438  } else {
2439  /*tex We have glyph nor disc. */
2440  return cur;
2441  }
2442  /*tex Goto the next node, where |\par| allows |vlink(cur)| to be NULL. */
2443  cur = vlink(cur);
2444  }
2445  return cur;
2446 }
2447 
2448 /*tex The return value is the new tail, head should be a dummy: */
2449 
2451 {
2452  /*tex A trick to allow explicit |node==null| tests. */
2453  halfword save_tail1 = null;
2454  halfword cur, prev;
2455  if (vlink(head) == null)
2456  return tail;
2457  if (tail != null) {
2458  save_tail1 = vlink(tail);
2459  vlink(tail) = null;
2460  }
2461  if (fix_node_lists) {
2463  }
2464  prev = head;
2465  cur = vlink(prev);
2466  while (cur != null) {
2467  if (type(cur) == glyph_node || (type(cur) == boundary_node)) {
2468  cur = handle_lig_word(cur);
2469  }
2470  prev = cur;
2471  cur = vlink(cur);
2472  }
2473  if (prev == null) {
2474  prev = tail;
2475  }
2476  if (tail != null) {
2477  try_couple_nodes(prev, save_tail1);
2478  }
2479  return prev;
2480 }
2481 
2482 
2483 /*tex Kerning starts here: */
2484 
2486 {
2487  if ((!is_rightghost(right)) &&
2488  font(left) == font(right) && has_kern(font(left), character(left))) {
2490  if (k != 0) {
2491  halfword kern = new_kern(k);
2492  halfword prev = alink(right);
2495  /*tex Update the attribute list (inherit from left): */
2499  }
2500  }
2501 }
2502 
2504 {
2505  if ((!is_rightghost(right)) &&
2506  font(left) == font(right) && has_kern(font(left), character(left))) {
2508  if (k != 0) {
2509  halfword kern = new_kern(k);
2510  halfword next = vlink(aft);
2511  couple_nodes(aft, kern);
2513  /*tex Update the attribute list (inherit from left == aft): */
2516  node_attr(kern) = node_attr(aft);
2517  }
2518  }
2519 }
2520 
2521 static void do_handle_kerning(halfword root, halfword init_left, halfword init_right)
2522 {
2523  halfword cur = vlink(root);
2524  halfword left = null;
2525  if (cur == null) {
2526  if (init_left != null && init_right != null) {
2527  add_kern_after(init_left, init_right, root);
2528  tlink(root) = vlink(root);
2529  }
2530  return;
2531  }
2532  if (type(cur) == glyph_node) {
2533  set_is_glyph(cur);
2534  if (init_left != null)
2535  add_kern_before(init_left, cur);
2536  left = cur;
2537  }
2538  while ((cur = vlink(cur)) != null) {
2539  if (type(cur) == glyph_node) {
2540  set_is_glyph(cur);
2541  if (left != null) {
2543  if (character(left) < 0 || is_ghost(left)) {
2544  halfword prev = alink(left);
2545  couple_nodes(prev, cur);
2546  flush_node(left);
2547  }
2548  }
2549  left = cur;
2550  } else {
2551  if (type(cur) == disc_node) {
2552  halfword right = type(vlink(cur)) == glyph_node ? vlink(cur) : null;
2554  if (vlink_pre_break(cur) != null)
2557  if (vlink_post_break(cur) != null)
2560  if (vlink_no_break(cur) != null)
2562  }
2563  if (left != null) {
2564  if (character(left) < 0 || is_ghost(left)) {
2565  halfword prev = alink(left);
2566  couple_nodes(prev, cur);
2567  flush_node(left);
2568  }
2569  left = null;
2570  }
2571  }
2572  }
2573  if (left != null) {
2574  if (init_right != null)
2575  add_kern_after(left, init_right, left);
2576  if (character(left) < 0 || is_ghost(left)) {
2577  halfword prev = alink(left);
2578  halfword next = vlink(left);
2579  if (next != null) {
2581  tlink(root) = next;
2582  } else if (prev != root) {
2583  vlink(prev) = null;
2584  tlink(root) = prev;
2585  } else {
2586  vlink(root) = null;
2587  tlink(root) = null;
2588  }
2589  flush_node(left);
2590  }
2591  }
2592 }
2593 
2595 {
2596  halfword save_link = null;
2597  if (tail == null) {
2598  tlink(head) = null;
2599  do_handle_kerning(head, null, null);
2600  } else {
2601  save_link = vlink(tail);
2602  vlink(tail) = null;
2603  tlink(head) = tail;
2604  do_handle_kerning(head, null, null);
2605  tail = tlink(head);
2606  if (valid_node(save_link)) {
2607  try_couple_nodes(tail, save_link);
2608  }
2609  }
2610  return tail;
2611 }
2612 
2613 /*tex The ligaturing and kerning \LUA\ interface: */
2614 
2615 static void run_lua_ligkern_callback(halfword head, halfword tail, int callback_id)
2616 {
2617  int i;
2618  int top = lua_gettop(Luas);
2619  if (!get_callback(Luas, callback_id)) {
2620  lua_settop(Luas, top);
2621  }
2624  if ((i=lua_pcall(Luas, 2, 0, 0)) != 0) {
2625  formatted_warning("ligkern","error: %s",lua_tostring(Luas, -1));
2626  lua_settop(Luas, top);
2627  luatex_error(Luas, (i == LUA_ERRRUN ? 0 : 1));
2628  }
2629  if (fix_node_lists) {
2631  }
2632  lua_settop(Luas, top);
2633 }
2634 
2636 {
2637  int callback_id = 0;
2638  if (! head)
2639  return null;
2640  if (vlink(head) == null)
2641  return tail;
2642  callback_id = callback_defined(ligaturing_callback);
2643  if (callback_id > 0) {
2644  halfword save_tail = null;
2645  if (tail) {
2646  save_tail = vlink(tail);
2647  vlink(tail) = null;
2648  }
2649  run_lua_ligkern_callback(head, tail, callback_id);
2650  tail = tail_of_list(head);
2651  if (save_tail) {
2653  }
2654  tail = tail_of_list(head);
2655  } else if (callback_id == 0) {
2657  }
2658  callback_id = callback_defined(kerning_callback);
2659  if (callback_id > 0) {
2660  run_lua_ligkern_callback(head, tail, callback_id);
2661  tail = tail_of_list(head);
2662  } else if (callback_id == 0) {
2663  halfword nest1 = new_node(nesting_node, 1);
2664  halfword cur = vlink(head);
2665  halfword aft = vlink(tail);
2666  couple_nodes(nest1, cur);
2667  tlink(nest1) = tail;
2668  vlink(tail) = null;
2669  do_handle_kerning(nest1, null, null);
2670  couple_nodes(head, vlink(nest1));
2671  tail = tlink(nest1);
2672  try_couple_nodes(tail, aft);
2673  flush_node(nest1);
2674  }
2675  return tail;
2676 }
return _Result< 0 ? -1 :_Result;} #line 1069 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vsnwprintf_s_l(wchar_t *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsnwprintf_s((*__local_stdio_printf_options()), _Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1091 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vsnwprintf_s(wchar_t *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, wchar_t const *const _Format, va_list _ArgList) { return _vsnwprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);} #line 1108 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snwprintf(wchar_t *_Buffer, size_t _BufferCount, wchar_t const *_Format,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnwprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsnwprintf(wchar_t *_Buffer, size_t _BufferCount, wchar_t const *_Format, va_list _Args);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnwprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsnwprintf(wchar_t *_Buffer, size_t _BufferCount, wchar_t const *_Format, va_list _ArgList) { return _vsnwprintf_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1133 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_c_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1163 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_c(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1179 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vswprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);} #line 1196 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl __vswprintf_l(wchar_t *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vswprintf_l(_Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 1212 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf(wchar_t *const _Buffer, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_l(_Buffer,(size_t) -1, _Format,((void *) 0), _ArgList);} #line 1227 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl vswprintf(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1243 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_s_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf_s((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1264 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl vswprintf_s(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1281 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #line 1283 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_p_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf_p((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1312 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_p(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_p_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1328 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vscwprintf_l(wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf((*__local_stdio_printf_options())|(1ULL<< 1),((void *) 0), 0, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1347 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vscwprintf(wchar_t const *const _Format, va_list _ArgList) { return _vscwprintf_l(_Format,((void *) 0), _ArgList);} #line 1361 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vscwprintf_p_l(wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf_p((*__local_stdio_printf_options())|(1ULL<< 1),((void *) 0), 0, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1380 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vscwprintf_p(wchar_t const *const _Format, va_list _ArgList) { return _vscwprintf_p_l(_Format,((void *) 0), _ArgList);} #line 1394 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl __swprintf_l(wchar_t *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__vswprintf_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1414 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1435 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf(wchar_t *const _Buffer, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__vswprintf_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1454 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl swprintf(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1474 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "__swprintf_l_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl __swprintf_l(wchar_t *_Buffer, wchar_t const *_Format, _locale_t _Locale,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vswprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl __vswprintf_l(wchar_t *_Buffer, wchar_t const *_Format, _locale_t _Locale, va_list _Args);__declspec(deprecated("This function or variable may be unsafe. Consider using " "swprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _swprintf(wchar_t *_Buffer, wchar_t const *_Format,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "vswprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vswprintf(wchar_t *_Buffer, wchar_t const *_Format, va_list _Args);__inline int __cdecl _swprintf_s_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_s_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1511 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl swprintf_s(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1532 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #line 1534 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_p_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_p_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1562 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_p(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_p_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1582 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_c_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1603 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_c(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1623 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snwprintf_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwprintf_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1646 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwprintf(wchar_t *_Buffer, size_t _BufferCount, wchar_t const *_Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwprintf_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1668 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwprintf_s_l(wchar_t *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1690 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwprintf_s(wchar_t *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1711 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _scwprintf_l(wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscwprintf_l(_Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1737 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _scwprintf(wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscwprintf_l(_Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1755 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _scwprintf_p_l(wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscwprintf_p_l(_Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1774 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _scwprintf_p(wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscwprintf_p_l(_Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1792 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #pragma warning(push) #pragma warning(disable:4141 6054) #pragma warning(pop) #line 1856 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" int __cdecl __stdio_common_vswscanf(unsigned __int64 _Options, wchar_t const *_Buffer, size_t _BufferCount, wchar_t const *_Format, _locale_t _Locale, va_list _ArgList);__inline int __cdecl _vswscanf_l(wchar_t const *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vswscanf((*__local_stdio_scanf_options()), _Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 1897 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl vswscanf(wchar_t const *_Buffer, wchar_t const *_Format, va_list _ArgList) { return _vswscanf_l(_Buffer, _Format,((void *) 0), _ArgList);} #line 1912 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswscanf_s_l(wchar_t const *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vswscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 1930 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl vswscanf_s(wchar_t const *const _Buffer, wchar_t const *const _Format, va_list _ArgList) { return _vswscanf_s_l(_Buffer, _Format,((void *) 0), _ArgList);} #line 1947 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #line 1949 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnwscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsnwscanf_l(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vswscanf((*__local_stdio_scanf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);} #line 1976 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vsnwscanf_s_l(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vswscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer, _BufferCount, _Format, _Locale, _ArgList);} #line 1995 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_swscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _swscanf_l(wchar_t const *const _Buffer, wchar_t const *const _Format, _locale_t _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswscanf_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2015 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "swscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl swscanf(wchar_t const *const _Buffer, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswscanf_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2034 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swscanf_s_l(wchar_t const *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswscanf_s_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2054 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl swscanf_s(wchar_t const *const _Buffer, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswscanf_s_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2075 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #line 2077 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snwscanf_l(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwscanf_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2100 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snwscanf(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwscanf_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2122 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwscanf_s_l(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwscanf_s_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2143 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwscanf_s(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwscanf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2163 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __pragma(pack(pop))#pragma warning(pop) #pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) typedef __int64 fpos_t;errno_t __cdecl _get_stream_buffer_pointers(FILE *_Stream, char ***_Base, char ***_Pointer, int **_Count);errno_t __cdecl clearerr_s(FILE *_Stream);errno_t __cdecl fopen_s(FILE **_Stream, char const *_FileName, char const *_Mode);size_t __cdecl fread_s(void *_Buffer, size_t _BufferSize, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);errno_t __cdecl freopen_s(FILE **_Stream, char const *_FileName, char const *_Mode, FILE *_OldStream);char *__cdecl gets_s(char *_Buffer, rsize_t _Size);errno_t __cdecl tmpfile_s(FILE **_Stream);errno_t __cdecl tmpnam_s(char *_Buffer, rsize_t _Size);#line 145 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" void __cdecl clearerr(FILE *_Stream);int __cdecl fclose(FILE *_Stream);int __cdecl _fcloseall(void);FILE *__cdecl _fdopen(int _FileHandle, char const *_Mode);int __cdecl feof(FILE *_Stream);int __cdecl ferror(FILE *_Stream);int __cdecl fflush(FILE *_Stream);int __cdecl fgetc(FILE *_Stream);int __cdecl _fgetchar(void);int __cdecl fgetpos(FILE *_Stream, fpos_t *_Position);char *__cdecl fgets(char *_Buffer, int _MaxCount, FILE *_Stream);int __cdecl _fileno(FILE *_Stream);int __cdecl _flushall(void);__declspec(deprecated("This function or variable may be unsafe. Consider using " "fopen_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) FILE *__cdecl fopen(char const *_FileName, char const *_Mode);int __cdecl fputc(int _Character, FILE *_Stream);int __cdecl _fputchar(int _Character);int __cdecl fputs(char const *_Buffer, FILE *_Stream);size_t __cdecl fread(void *_Buffer, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);__declspec(deprecated("This function or variable may be unsafe. Consider using " "freopen_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) FILE *__cdecl freopen(char const *_FileName, char const *_Mode, FILE *_Stream);FILE *__cdecl _fsopen(char const *_FileName, char const *_Mode, int _ShFlag);int __cdecl fsetpos(FILE *_Stream, fpos_t const *_Position);int __cdecl fseek(FILE *_Stream, long _Offset, int _Origin);int __cdecl _fseeki64(FILE *_Stream, __int64 _Offset, int _Origin);long __cdecl ftell(FILE *_Stream);__int64 __cdecl _ftelli64(FILE *_Stream);size_t __cdecl fwrite(void const *_Buffer, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);int __cdecl getc(FILE *_Stream);int __cdecl getchar(void);int __cdecl _getmaxstdio(void);int __cdecl _getw(FILE *_Stream);void __cdecl perror(char const *_ErrorMessage);int __cdecl _pclose(FILE *_Stream);FILE *__cdecl _popen(char const *_Command, char const *_Mode);#line 344 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl putc(int _Character, FILE *_Stream);int __cdecl putchar(int _Character);int __cdecl puts(char const *_Buffer);int __cdecl _putw(int _Word, FILE *_Stream);int __cdecl remove(char const *_FileName);int __cdecl rename(char const *_OldFileName, char const *_NewFileName);int __cdecl _unlink(char const *_FileName);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_unlink" ". See online help for details.")) int __cdecl unlink(char const *_FileName);#line 391 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" void __cdecl rewind(FILE *_Stream);int __cdecl _rmtmp(void);__declspec(deprecated("This function or variable may be unsafe. Consider using " "setvbuf" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) void __cdecl setbuf(FILE *_Stream, char *_Buffer);int __cdecl _setmaxstdio(int _Maximum);int __cdecl setvbuf(FILE *_Stream, char *_Buffer, int _Mode, size_t _Size);__declspec(allocator) char *__cdecl _tempnam(char const *_DirectoryName, char const *_FilePrefix);__declspec(deprecated("This function or variable may be unsafe. Consider using " "tmpfile_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) FILE *__cdecl tmpfile(void);__declspec(deprecated("This function or variable may be unsafe. Consider using " "tmpnam_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl tmpnam(char *_Buffer);int __cdecl ungetc(int _Character, FILE *_Stream);void __cdecl _lock_file(FILE *_Stream);void __cdecl _unlock_file(FILE *_Stream);int __cdecl _fclose_nolock(FILE *_Stream);int __cdecl _fflush_nolock(FILE *_Stream);int __cdecl _fgetc_nolock(FILE *_Stream);int __cdecl _fputc_nolock(int _Character, FILE *_Stream);size_t __cdecl _fread_nolock(void *_Buffer, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);size_t __cdecl _fread_nolock_s(void *_Buffer, size_t _BufferSize, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);int __cdecl _fseek_nolock(FILE *_Stream, long _Offset, int _Origin);int __cdecl _fseeki64_nolock(FILE *_Stream, __int64 _Offset, int _Origin);long __cdecl _ftell_nolock(FILE *_Stream);__int64 __cdecl _ftelli64_nolock(FILE *_Stream);size_t __cdecl _fwrite_nolock(void const *_Buffer, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);int __cdecl _getc_nolock(FILE *_Stream);int __cdecl _putc_nolock(int _Character, FILE *_Stream);int __cdecl _ungetc_nolock(int _Character, FILE *_Stream);int *__cdecl __p__commode(void);#line 596 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl __stdio_common_vfprintf(unsigned __int64 _Options, FILE *_Stream, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vfprintf_s(unsigned __int64 _Options, FILE *_Stream, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vfprintf_p(unsigned __int64 _Options, FILE *_Stream, char const *_Format, _locale_t _Locale, va_list _ArgList);__inline int __cdecl _vfprintf_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfprintf((*__local_stdio_printf_options()), _Stream, _Format, _Locale, _ArgList);} #line 648 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vfprintf(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfprintf_l(_Stream, _Format,((void *) 0), _ArgList);} #line 662 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vfprintf_s_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfprintf_s((*__local_stdio_printf_options()), _Stream, _Format, _Locale, _ArgList);} #line 677 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vfprintf_s(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfprintf_s_l(_Stream, _Format,((void *) 0), _ArgList);} #line 693 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 695 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vfprintf_p_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfprintf_p((*__local_stdio_printf_options()), _Stream, _Format, _Locale, _ArgList);} #line 710 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vfprintf_p(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfprintf_p_l(_Stream, _Format,((void *) 0), _ArgList);} #line 724 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vprintf_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfprintf_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);} #line 738 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vprintf(char const *const _Format, va_list _ArgList) { return _vfprintf_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);} #line 751 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vprintf_s_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfprintf_s_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);} #line 765 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vprintf_s(char const *const _Format, va_list _ArgList) { return _vfprintf_s_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);} #line 780 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 782 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vprintf_p_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfprintf_p_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);} #line 796 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vprintf_p(char const *const _Format, va_list _ArgList) { return _vfprintf_p_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);} #line 809 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _fprintf_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 828 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl fprintf(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 846 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl _set_printf_count_output(int _Value);int __cdecl _get_printf_count_output(void);__inline int __cdecl _fprintf_s_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_s_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 871 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl fprintf_s(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_s_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 891 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 893 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _fprintf_p_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_p_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 912 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _fprintf_p(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_p_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 930 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _printf_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 948 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl printf(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 965 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _printf_s_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_s_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 983 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl printf_s(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_s_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1002 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1004 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _printf_p_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_p_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1022 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _printf_p(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_p_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1039 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl __stdio_common_vfscanf(unsigned __int64 _Options, FILE *_Stream, char const *_Format, _locale_t _Locale, va_list _Arglist);__inline int __cdecl _vfscanf_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfscanf((*__local_stdio_scanf_options()), _Stream, _Format, _Locale, _ArgList);} #line 1070 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vfscanf(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfscanf_l(_Stream, _Format,((void *) 0), _ArgList);} #line 1084 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vfscanf_s_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Stream, _Format, _Locale, _ArgList);} #line 1101 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vfscanf_s(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfscanf_s_l(_Stream, _Format,((void *) 0), _ArgList);} #line 1118 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1120 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscanf_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfscanf_l((__acrt_iob_func(0)), _Format, _Locale, _ArgList);} #line 1134 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vscanf(char const *const _Format, va_list _ArgList) { return _vfscanf_l((__acrt_iob_func(0)), _Format,((void *) 0), _ArgList);} #line 1147 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscanf_s_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfscanf_s_l((__acrt_iob_func(0)), _Format, _Locale, _ArgList);} #line 1161 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vscanf_s(char const *const _Format, va_list _ArgList) { return _vfscanf_s_l((__acrt_iob_func(0)), _Format,((void *) 0), _ArgList);} #line 1176 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1178 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_fscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _fscanf_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1197 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "fscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl fscanf(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1215 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _fscanf_s_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_s_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1234 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl fscanf_s(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_s_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1254 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1256 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_scanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _scanf_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_l((__acrt_iob_func(0)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1274 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "scanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl scanf(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_l((__acrt_iob_func(0)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1291 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scanf_s_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_s_l((__acrt_iob_func(0)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1309 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl scanf_s(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_s_l((__acrt_iob_func(0)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1328 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1330 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl __stdio_common_vsprintf(unsigned __int64 _Options, char *_Buffer, size_t _BufferCount, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vsprintf_s(unsigned __int64 _Options, char *_Buffer, size_t _BufferCount, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vsnprintf_s(unsigned __int64 _Options, char *_Buffer, size_t _BufferCount, size_t _MaxCount, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vsprintf_p(unsigned __int64 _Options, char *_Buffer, size_t _BufferCount, char const *_Format, _locale_t _Locale, va_list _ArgList);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsnprintf_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf((*__local_stdio_printf_options())|(1ULL<< 0), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1399 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { return _vsnprintf_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1415 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vsnprintf(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { int const _Result=__stdio_common_vsprintf((*__local_stdio_printf_options())|(1ULL<< 1), _Buffer, _BufferCount, _Format,((void *) 0), _ArgList);return _Result< 0 ? -1 :_Result;} #line 1446 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsprintf_l(char *const _Buffer, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vsnprintf_l(_Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 1462 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "vsprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl vsprintf(char *const _Buffer, char const *const _Format, va_list _ArgList) { return _vsnprintf_l(_Buffer,(size_t) -1, _Format,((void *) 0), _ArgList);} #line 1477 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsprintf_s_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf_s((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1498 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vsprintf_s(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { return _vsprintf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1516 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1526 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsprintf_p_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf_p((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1547 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsprintf_p(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { return _vsprintf_p_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1563 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf_s_l(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsnprintf_s((*__local_stdio_printf_options()), _Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1585 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf_s(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format, va_list _ArgList) { return _vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);} #line 1602 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vsnprintf_s(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format, va_list _ArgList) { return _vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);} #line 1630 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1641 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscprintf_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf((*__local_stdio_printf_options())|(1ULL<< 1),((void *) 0), 0, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1659 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscprintf(char const *const _Format, va_list _ArgList) { return _vscprintf_l(_Format,((void *) 0), _ArgList);} #line 1672 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscprintf_p_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf_p((*__local_stdio_printf_options())|(1ULL<< 1),((void *) 0), 0, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1690 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscprintf_p(char const *const _Format, va_list _ArgList) { return _vscprintf_p_l(_Format,((void *) 0), _ArgList);} #line 1703 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf_c_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1723 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf_c(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { return _vsnprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1739 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_sprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _sprintf_l(char *const _Buffer, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1761 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl sprintf(char *const _Buffer, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1782 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "sprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) int __cdecl sprintf(char *_Buffer, char const *_Format,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "vsprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) int __cdecl vsprintf(char *_Buffer, char const *_Format, va_list _Args);__inline int __cdecl _sprintf_s_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_s_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1810 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl sprintf_s(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1832 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1834 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _sprintf_p_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_p_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1862 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _sprintf_p(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_p_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1882 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snprintf_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1905 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl snprintf(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=vsnprintf(_Buffer, _BufferCount, _Format, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1936 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snprintf(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf(_Buffer, _BufferCount, _Format, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1956 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) int __cdecl _snprintf(char *_Buffer, size_t _BufferCount, char const *_Format,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) int __cdecl _vsnprintf(char *_Buffer, size_t _BufferCount, char const *_Format, va_list _Args);__inline int __cdecl _snprintf_c_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1986 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snprintf_c(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2006 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snprintf_s_l(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2028 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snprintf_s(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2049 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scprintf_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscprintf_l(_Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2075 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scprintf(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscprintf_l(_Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2092 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scprintf_p_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscprintf_p_l(_Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2110 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scprintf_p(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscprintf_p(_Format, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2127 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl __stdio_common_vsscanf(unsigned __int64 _Options, char const *_Buffer, size_t _BufferCount, char const *_Format, _locale_t _Locale, va_list _ArgList);__inline int __cdecl _vsscanf_l(char const *const _Buffer, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vsscanf((*__local_stdio_scanf_options()), _Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 2158 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vsscanf(char const *const _Buffer, char const *const _Format, va_list _ArgList) { return _vsscanf_l(_Buffer, _Format,((void *) 0), _ArgList);} #line 2172 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsscanf_s_l(char const *const _Buffer, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vsscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 2189 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #pragma warning(push) #pragma warning(disable:6530) __inline int __cdecl vsscanf_s(char const *const _Buffer, char const *const _Format, va_list _ArgList) { return _vsscanf_s_l(_Buffer, _Format,((void *) 0), _ArgList);} #line 2208 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #pragma warning(pop) #line 2219 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_sscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _sscanf_l(char const *const _Buffer, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsscanf_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2238 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "sscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl sscanf(char const *const _Buffer, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsscanf_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2256 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _sscanf_s_l(char const *const _Buffer, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsscanf_s_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2275 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl sscanf_s(char const *const _Buffer, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=vsscanf_s(_Buffer, _Format, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2297 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 2299 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #pragma warning(push) #pragma warning(disable:6530) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snscanf_l(char const *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__stdio_common_vsscanf((*__local_stdio_scanf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2326 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snscanf(char const *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__stdio_common_vsscanf((*__local_stdio_scanf_options()), _Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2349 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snscanf_s_l(char const *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__stdio_common_vsscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2374 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snscanf_s(char const *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__stdio_common_vsscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2397 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #pragma warning(pop) __declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_tempnam" ". See online help for details.")) char *__cdecl tempnam(char const *_Directory, char const *_FilePrefix);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fcloseall" ". See online help for details.")) int __cdecl fcloseall(void);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fdopen" ". See online help for details.")) FILE *__cdecl fdopen(int _FileHandle, char const *_Format);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fgetchar" ". See online help for details.")) int __cdecl fgetchar(void);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fileno" ". See online help for details.")) int __cdecl fileno(FILE *_Stream);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_flushall" ". See online help for details.")) int __cdecl flushall(void);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fputchar" ". See online help for details.")) int __cdecl fputchar(int _Ch);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_getw" ". See online help for details.")) int __cdecl getw(FILE *_Stream);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_putw" ". See online help for details.")) int __cdecl putw(int _Ch, FILE *_Stream);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_rmtmp" ". See online help for details.")) int __cdecl rmtmp(void);#line 2441 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h"__pragma(pack(pop))#pragma warning(pop) #pragma once#pragma once#pragma once#pragma once#pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) int *__cdecl _errno(void);errno_t __cdecl _set_errno(int _Value);errno_t __cdecl _get_errno(int *_Value);unsigned long *__cdecl __doserrno(void);errno_t __cdecl _set_doserrno(unsigned long _Value);errno_t __cdecl _get_doserrno(unsigned long *_Value);__pragma(pack(pop))#pragma warning(pop) #pragma once#pragma warning(push)#pragma warning(disable:4514 4820) __pragma(pack(push, 8)) void *__cdecl memchr(void const *_Buf, int _Val, size_t _MaxCount);int __cdecl memcmp(void const *_Buf1, void const *_Buf2, size_t _Size);void *__cdecl memcpy(void *_Dst, void const *_Src, size_t _Size);void *__cdecl memmove(void *_Dst, void const *_Src, size_t _Size);void *__cdecl memset(void *_Dst, int _Val, size_t _Size);char *__cdecl strchr(char const *_Str, int _Val);char *__cdecl strrchr(char const *_Str, int _Ch);char *__cdecl strstr(char const *_Str, char const *_SubStr);wchar_t *__cdecl wcschr(wchar_t const *_Str, wchar_t _Ch);wchar_t *__cdecl wcsrchr(wchar_t const *_Str, wchar_t _Ch);wchar_t *__cdecl wcsstr(wchar_t const *_Str, wchar_t const *_SubStr);__pragma(pack(pop))#pragma warning(pop) #pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) static __inline errno_t __cdecl memcpy_s(void *const _Destination, rsize_t const _DestinationSize, void const *const _Source, rsize_t const _SourceSize) { if(_SourceSize==0) { return 0;} { int _Expr_val=!!(_Destination !=((void *) 0));if(!(_Expr_val)) {(*_errno())=22;_invalid_parameter_noinfo();return 22;} } ;if(_Source==((void *) 0)||_DestinationSize< _SourceSize) { memset(_Destination, 0, _DestinationSize);{ int _Expr_val=!!(_Source !=((void *) 0));if(!(_Expr_val)) {(*_errno())=22;_invalid_parameter_noinfo();return 22;} } ;{ int _Expr_val=!!(_DestinationSize >=_SourceSize);if(!(_Expr_val)) {(*_errno())=34;_invalid_parameter_noinfo();return 34;} } ;return 22 ;} memcpy(_Destination, _Source, _SourceSize);return 0;} static __inline errno_t __cdecl memmove_s(void *const _Destination, rsize_t const _DestinationSize, void const *const _Source, rsize_t const _SourceSize) { if(_SourceSize==0) { return 0;} { int _Expr_val=!!(_Destination !=((void *) 0));if(!(_Expr_val)) {(*_errno())=22;_invalid_parameter_noinfo();return 22;} } ;{ int _Expr_val=!!(_Source !=((void *) 0));if(!(_Expr_val)) {(*_errno())=22;_invalid_parameter_noinfo();return 22;} } ;{ int _Expr_val=!!(_DestinationSize >=_SourceSize);if(!(_Expr_val)) {(*_errno())=34;_invalid_parameter_noinfo();return 34;} } ;memmove(_Destination, _Source, _SourceSize);return 0;}#pragma warning(pop) __pragma(pack(pop))#pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) int __cdecl _memicmp(void const *_Buf1, void const *_Buf2, size_t _Size);int __cdecl _memicmp_l(void const *_Buf1, void const *_Buf2, size_t _Size, _locale_t _Locale);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_memccpy" ". See online help for details.")) void *__cdecl memccpy(void *_Dst, void const *_Src, int _Val, size_t _Size);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_memicmp" ". See online help for details.")) int __cdecl memicmp(void const *_Buf1, void const *_Buf2, size_t _Size);__pragma(pack(pop))#pragma warning(pop) #pragma once#pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) errno_t __cdecl wcscat_s(wchar_t *_Destination, rsize_t _SizeInWords, wchar_t const *_Source);errno_t __cdecl wcscpy_s(wchar_t *_Destination, rsize_t _SizeInWords, wchar_t const *_Source);errno_t __cdecl wcsncat_s(wchar_t *_Destination, rsize_t _SizeInWords, wchar_t const *_Source, rsize_t _MaxCount);errno_t __cdecl wcsncpy_s(wchar_t *_Destination, rsize_t _SizeInWords, wchar_t const *_Source, rsize_t _MaxCount);wchar_t *__cdecl wcstok_s(wchar_t *_String, wchar_t const *_Delimiter, wchar_t **_Context);__declspec(allocator) wchar_t *__cdecl _wcsdup(wchar_t const *_String);__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcscat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcscat(wchar_t *_Destination, wchar_t const *_Source);int __cdecl wcscmp(wchar_t const *_String1, wchar_t const *_String2);__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcscpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcscpy(wchar_t *_Destination, wchar_t const *_Source);size_t __cdecl wcscspn(wchar_t const *_String, wchar_t const *_Control);size_t __cdecl wcslen(wchar_t const *_String);size_t __cdecl wcsnlen(wchar_t const *_Source, size_t _MaxCount);static __inline size_t __cdecl wcsnlen_s(wchar_t const *_Source, size_t _MaxCount) { return(_Source==0) ? 0 :wcsnlen(_Source, _MaxCount);}__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcsncat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcsncat(wchar_t *_Destination, wchar_t const *_Source, size_t _Count);int __cdecl wcsncmp(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcsncpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcsncpy(wchar_t *_Destination, wchar_t const *_Source, size_t _Count);wchar_t *__cdecl wcspbrk(wchar_t const *_String, wchar_t const *_Control);size_t __cdecl wcsspn(wchar_t const *_String, wchar_t const *_Control);__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcstok_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcstok(wchar_t *_String, wchar_t const *_Delimiter, wchar_t **_Context);#line 237 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstring.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "wcstok_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) static __inline wchar_t *__cdecl _wcstok(wchar_t *const _String, wchar_t const *const _Delimiter) { return wcstok(_String, _Delimiter, 0);} __declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcserror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcserror(int _ErrorNumber);errno_t __cdecl _wcserror_s(wchar_t *_Buffer, size_t _SizeInWords, int _ErrorNumber);__declspec(deprecated("This function or variable may be unsafe. Consider using " "__wcserror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl __wcserror(wchar_t const *_String);errno_t __cdecl __wcserror_s(wchar_t *_Buffer, size_t _SizeInWords, wchar_t const *_ErrorMessage);int __cdecl _wcsicmp(wchar_t const *_String1, wchar_t const *_String2);int __cdecl _wcsicmp_l(wchar_t const *_String1, wchar_t const *_String2, _locale_t _Locale);int __cdecl _wcsnicmp(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);int __cdecl _wcsnicmp_l(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount, _locale_t _Locale);errno_t __cdecl _wcsnset_s(wchar_t *_Destination, size_t _SizeInWords, wchar_t _Value, size_t _MaxCount);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsnset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcsnset(wchar_t *_String, wchar_t _Value, size_t _MaxCount);wchar_t *__cdecl _wcsrev(wchar_t *_String);errno_t __cdecl _wcsset_s(wchar_t *_Destination, size_t _SizeInWords, wchar_t _Value);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcsset(wchar_t *_String, wchar_t _Value);errno_t __cdecl _wcslwr_s(wchar_t *_String, size_t _SizeInWords);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcslwr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcslwr(wchar_t *_String);errno_t __cdecl _wcslwr_s_l(wchar_t *_String, size_t _SizeInWords, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcslwr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcslwr_l(wchar_t *_String, _locale_t _Locale);errno_t __cdecl _wcsupr_s(wchar_t *_String, size_t _Size);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsupr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcsupr(wchar_t *_String);errno_t __cdecl _wcsupr_s_l(wchar_t *_String, size_t _Size, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsupr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcsupr_l(wchar_t *_String, _locale_t _Locale);size_t __cdecl wcsxfrm(wchar_t *_Destination, wchar_t const *_Source, size_t _MaxCount);size_t __cdecl _wcsxfrm_l(wchar_t *_Destination, wchar_t const *_Source, size_t _MaxCount, _locale_t _Locale);int __cdecl wcscoll(wchar_t const *_String1, wchar_t const *_String2);int __cdecl _wcscoll_l(wchar_t const *_String1, wchar_t const *_String2, _locale_t _Locale);int __cdecl _wcsicoll(wchar_t const *_String1, wchar_t const *_String2);int __cdecl _wcsicoll_l(wchar_t const *_String1, wchar_t const *_String2, _locale_t _Locale);int __cdecl _wcsncoll(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);int __cdecl _wcsncoll_l(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount, _locale_t _Locale);int __cdecl _wcsnicoll(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);int __cdecl _wcsnicoll_l(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount, _locale_t _Locale);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsdup" ". See online help for details.")) wchar_t *__cdecl wcsdup(wchar_t const *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsicmp" ". See online help for details.")) int __cdecl wcsicmp(wchar_t const *_String1, wchar_t const *_String2);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsnicmp" ". See online help for details.")) int __cdecl wcsnicmp(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsnset" ". See online help for details.")) wchar_t *__cdecl wcsnset(wchar_t *_String, wchar_t _Value, size_t _MaxCount);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsrev" ". See online help for details.")) wchar_t *__cdecl wcsrev(wchar_t *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsset" ". See online help for details.")) wchar_t *__cdecl wcsset(wchar_t *_String, wchar_t _Value);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcslwr" ". See online help for details.")) wchar_t *__cdecl wcslwr(wchar_t *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsupr" ". See online help for details.")) wchar_t *__cdecl wcsupr(wchar_t *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsicoll" ". See online help for details.")) int __cdecl wcsicoll(wchar_t const *_String1, wchar_t const *_String2);__pragma(pack(pop))#pragma warning(pop) #pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) errno_t __cdecl strcpy_s(char *_Destination, rsize_t _SizeInBytes, char const *_Source);errno_t __cdecl strcat_s(char *_Destination, rsize_t _SizeInBytes, char const *_Source);errno_t __cdecl strerror_s(char *_Buffer, size_t _SizeInBytes, int _ErrorNumber);errno_t __cdecl strncat_s(char *_Destination, rsize_t _SizeInBytes, char const *_Source, rsize_t _MaxCount);errno_t __cdecl strncpy_s(char *_Destination, rsize_t _SizeInBytes, char const *_Source, rsize_t _MaxCount);char *__cdecl strtok_s(char *_String, char const *_Delimiter, char **_Context);void *__cdecl _memccpy(void *_Dst, void const *_Src, int _Val, size_t _MaxCount);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strcat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strcat(char *_Destination, char const *_Source);int __cdecl strcmp(char const *_Str1, char const *_Str2);int __cdecl _strcmpi(char const *_String1, char const *_String2);int __cdecl strcoll(char const *_String1, char const *_String2);int __cdecl _strcoll_l(char const *_String1, char const *_String2, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strcpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strcpy(char *_Destination, char const *_Source);size_t __cdecl strcspn(char const *_Str, char const *_Control);__declspec(allocator) char *__cdecl _strdup(char const *_Source);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strerror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strerror(char const *_ErrorMessage);errno_t __cdecl _strerror_s(char *_Buffer, size_t _SizeInBytes, char const *_ErrorMessage);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strerror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strerror(int _ErrorMessage);int __cdecl _stricmp(char const *_String1, char const *_String2);int __cdecl _stricoll(char const *_String1, char const *_String2);int __cdecl _stricoll_l(char const *_String1, char const *_String2, _locale_t _Locale);int __cdecl _stricmp_l(char const *_String1, char const *_String2, _locale_t _Locale);size_t __cdecl strlen(char const *_Str);errno_t __cdecl _strlwr_s(char *_String, size_t _Size);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strlwr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strlwr(char *_String);errno_t __cdecl _strlwr_s_l(char *_String, size_t _Size, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strlwr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strlwr_l(char *_String, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strncat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strncat(char *_Destination, char const *_Source, size_t _Count);int __cdecl strncmp(char const *_Str1, char const *_Str2, size_t _MaxCount);int __cdecl _strnicmp(char const *_String1, char const *_String2, size_t _MaxCount);int __cdecl _strnicmp_l(char const *_String1, char const *_String2, size_t _MaxCount, _locale_t _Locale);int __cdecl _strnicoll(char const *_String1, char const *_String2, size_t _MaxCount);int __cdecl _strnicoll_l(char const *_String1, char const *_String2, size_t _MaxCount, _locale_t _Locale);int __cdecl _strncoll(char const *_String1, char const *_String2, size_t _MaxCount);int __cdecl _strncoll_l(char const *_String1, char const *_String2, size_t _MaxCount, _locale_t _Locale);size_t __cdecl __strncnt(char const *_String, size_t _Count);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strncpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strncpy(char *_Destination, char const *_Source, size_t _Count);size_t __cdecl strnlen(char const *_String, size_t _MaxCount);static __inline size_t __cdecl strnlen_s(char const *_String, size_t _MaxCount) { return _String==0 ? 0 :strnlen(_String, _MaxCount);} errno_t __cdecl _strnset_s(char *_String, size_t _SizeInBytes, int _Value, size_t _MaxCount);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strnset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strnset(char *_Destination, int _Value, size_t _Count);char *__cdecl strpbrk(char const *_Str, char const *_Control);char *__cdecl _strrev(char *_Str);errno_t __cdecl _strset_s(char *_Destination, size_t _DestinationSize, int _Value);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strset(char *_Destination, int _Value);size_t __cdecl strspn(char const *_Str, char const *_Control);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strtok_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strtok(char *_String, char const *_Delimiter);errno_t __cdecl _strupr_s(char *_String, size_t _Size);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strupr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strupr(char *_String);errno_t __cdecl _strupr_s_l(char *_String, size_t _Size, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strupr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strupr_l(char *_String, _locale_t _Locale);size_t __cdecl strxfrm(char *_Destination, char const *_Source, size_t _MaxCount);size_t __cdecl _strxfrm_l(char *_Destination, char const *_Source, size_t _MaxCount, _locale_t _Locale);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strdup" ". See online help for details.")) char *__cdecl strdup(char const *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strcmpi" ". See online help for details.")) int __cdecl strcmpi(char const *_String1, char const *_String2);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_stricmp" ". See online help for details.")) int __cdecl stricmp(char const *_String1, char const *_String2);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strlwr" ". See online help for details.")) char *__cdecl strlwr(char *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strnicmp" ". See online help for details.")) int __cdecl strnicmp(char const *_String1, char const *_String2, size_t _MaxCount);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strnset" ". See online help for details.")) char *__cdecl strnset(char *_String, int _Value, size_t _MaxCount);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strrev" ". See online help for details.")) char *__cdecl strrev(char *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strset" ". See online help for details.")) char *__cdecl strset(char *_String, int _Value);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strupr" ". See online help for details.")) char *__cdecl strupr(char *_String);__pragma(pack(pop))#pragma warning(pop) #pragma once#pragma warning(push)#pragma warning(disable:4514 4820) __pragma(pack(push, 8)) __pragma(pack(pop))#pragma warning(pop) #pragma once#pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) typedef unsigned short _ino_t;typedef _ino_t ino_t;#line 24 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\sys/types.h" typedef unsigned int _dev_t;typedef _dev_t dev_t;#line 36 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\sys/types.h" typedef long _off_t;typedef _off_t off_t;#line 48 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\sys/types.h"#pragma warning(pop) typedef char *sds;#pragma pack(push, 1) struct sdshdr5 { unsigned char flags;char buf[];};struct sdshdr8 { uint8_t len;uint8_t alloc;unsigned char flags;char buf[];};struct sdshdr16 { uint16_t len;uint16_t alloc;unsigned char flags;char buf[];};struct sdshdr32 { uint32_t len;uint32_t alloc;unsigned char flags;char buf[];};struct sdshdr64 { uint64_t len;uint64_t alloc;unsigned char flags;char buf[];};#pragma pack(pop) static inline size_t sdslen(const sds s) { unsigned char flags=s[-1];switch(flags &7) { case 0 :return((flags) >> 3) ;case 1 :return((struct sdshdr8 *)((s) -(sizeof(struct sdshdr8)))) ->len;case 2 :return((struct sdshdr16 *)((s) -(sizeof(struct sdshdr16)))) ->len;case 3 :return((struct sdshdr32 *)((s) -(sizeof(struct sdshdr32)))) ->len;case 4 :return((struct sdshdr64 *)((s) -(sizeof(struct sdshdr64)))) ->len;} return 0;}static inline size_t sdsavail(const sds s) { unsigned char flags=s[-1];switch(flags &7) { case 0 :{ return 0;} case 1 :{ struct sdshdr8 *sh=(void *)((s) -(sizeof(struct sdshdr8)));;return sh->alloc - sh->len;} case 2 :{ struct sdshdr16 *sh=(void *)((s) -(sizeof(struct sdshdr16)));;return sh->alloc - sh->len;} case 3 :{ struct sdshdr32 *sh=(void *)((s) -(sizeof(struct sdshdr32)));;return sh->alloc - sh->len;} case 4 :{ struct sdshdr64 *sh=(void *)((s) -(sizeof(struct sdshdr64)));;return sh->alloc - sh->len;} } return 0;}static inline void sdssetlen(sds s, size_t newlen) { unsigned char flags=s[-1];switch(flags &7) { case 0 :{ unsigned char *fp=((unsigned char *) s) - 1;*fp=0|(newlen<< 3);} break;case 1 :((struct sdshdr8 *)((s) -(sizeof(struct sdshdr8)))) ->len=(uint8_t) newlen;break;case 2 :((struct sdshdr16 *)((s) -(sizeof(struct sdshdr16)))) ->len=(uint16_t) newlen;break;case 3 :((struct sdshdr32 *)((s) -(sizeof(struct sdshdr32)))) -> len
Definition: CPAL.d:15583
cp
Definition: action.c:1035
int fshrink
Definition: afm2pl.c:216
int fstretch
Definition: afm2pl.c:215
long * italic
Definition: afm2tfm.c:1034
int nl
Definition: afm2tfm.c:885
int nk
Definition: afm2tfm.c:885
double extra_space
Definition: aftopl.c:70
double x_height
Definition: aftopl.c:63
#define pre_break
Definition: aptex-macros.h:250
#define font
Definition: aptex-macros.h:175
#define width(a)
Definition: aptex-macros.h:198
#define type(a)
Definition: aptex-macros.h:171
#define depth(a)
Definition: aptex-macros.h:199
#define head
Definition: aptex-macros.h:513
#define list_tag
#define space_shrink(f)
#define ext_tag
#define name
#define char_info(a, b)
#define post_break
Definition: aptex-macros.h:251
#define lig_ptr(a)
Definition: aptex-macros.h:246
#define subtype(a)
Definition: aptex-macros.h:172
#define height(a)
Definition: aptex-macros.h:200
#define advance
Definition: aptex-macros.h:464
#define next(a)
Definition: aptex-macros.h:924
#define slant(f)
#define space_stretch(f)
#define character
Definition: aptex-macros.h:176
#define lig_char(a)
Definition: aptex-macros.h:245
#define stretch(a)
Definition: aptex-macros.h:287
#define tail
Definition: aptex-macros.h:514
#define mode
Definition: aptex-macros.h:510
static pointer new_kern(scaled w)
Definition: aptex-src.c:9055
static pointer copy_node_list(pointer p)
Definition: aptex-src.c:10498
integer internal_font_number
Definition: aptex.h:269
static point_t cur
Definition: backend_eps.c:108
static void step(struct edge *edge)
#define n
Definition: t4ht.c:1290
#define b
Definition: jpegint.h:372
@ pre
Definition: ctie-k.c:71
#define free(a)
Definition: decNumber.cpp:310
char * def
Definition: definitions.c:41
#define special
Definition: devnag.c:330
long pc
Definition: disdvi.c:114
int find_font_id(const char *nom, scaled s)
Definition: dofont.c:137
int w
Definition: dviconv.c:26
int h
Definition: dviconv.c:9
unsigned short halfword
Definition: dvips.h:68
int strcmp()
Definition: coll.cpp:143
#define nop
Definition: dviinfo.c:52
#define default_hyphen_char_par
Definition: equivalents.h:797
#define default_skew_char_par
Definition: equivalents.h:798
static void
Definition: fpif.c:118
mpz_t * f
Definition: gen-fib.c:34
#define s
Definition: afcover.h:80
#define t
Definition: afcover.h:96
static FIELD_PTR prev
Definition: genind.c:36
#define c(n)
Definition: gpos-common.c:150
#define a(n)
Definition: gpos-common.c:148
#define d(n)
Definition: gpos-common.c:151
#define bc
Definition: gsftopk.c:501
#define ec
Definition: gsftopk.c:502
char comment[255+1]
Definition: hbf2gf.c:350
#define NULL
Definition: ftobjs.h:61
small capitals from c petite p scientific f u
Definition: afcover.h:88
small capitals from c petite p
Definition: afcover.h:72
small capitals from c petite p scientific i
Definition: afcover.h:80
const char const char FT_Int * supplement
Definition: cffdrivr.c:699
const char const char ** ordering
Definition: cffdrivr.c:697
@ right
Definition: annotate.c:15
int int double double double char double char * top
Definition: gdfx.h:19
static Ref * fonts
Definition: pdffonts.cc:91
int num
Definition: disdvi.c:621
#define xstrdup(s)
Definition: writet1.c:34
#define xmalloc(size)
Definition: writet1.c:33
void * renew(void *mem, uint32_t size)
Definition: mem.c:44
#define INT_MIN
Definition: c-minmax.h:50
KPSEDLL address xcalloc(size_t nelem, size_t elsize)
Definition: xcalloc.c:23
#define floor(x)
Definition: cpascal.h:52
uint8_t eight_bits
Definition: ctangleboot.c:165
#define root
Definition: ctangleboot.c:69
#define malloc
Definition: alloca.c:91
strnumber maketexstring(const char *)
Definition: stringpool.c:249
#define sprintf
Definition: snprintf.c:44
boolean get_callback(lua_State *L, int i)
Definition: lcallbacklib.c:229
void nodelist_to_lua(lua_State *L, int n)
Definition: lnodelib.c:9127
int nodelist_from_lua(lua_State *L, int n)
Definition: lnodelib.c:9133
static UHashtable * cache
static void write_lua_math_parameters(lua_State *L, int f)
Definition: luafont.c:621
#define set_packet_scaled(fw)
Definition: luafont.c:179
static void do_handle_kerning(halfword root, halfword init_left, halfword init_right)
Definition: luafont.c:2521
static int n_some_field(lua_State *L, int name_index)
Definition: luafont.c:836
static int n_boolean_field(lua_State *L, int name_index, int dflt)
Definition: luafont.c:798
static void store_math_kerns(lua_State *L, int index, charinfo *co, int id)
Definition: luafont.c:1321
#define do_store_four(l)
Definition: luafont.c:751
static int count_char_packet_bytes(lua_State *L)
Definition: luafont.c:844
#define dump_booleanfield(L, n, c)
Definition: luafont.c:145
static int try_ligature(halfword *frst, halfword fwd)
Definition: luafont.c:2121
static void font_char_to_lua(lua_State *L, internal_font_number f, charinfo *co)
Definition: luafont.c:373
const char * font_embedding_strings[]
Definition: luafont.c:49
#define dump_stringfield(L, n, c)
Definition: luafont.c:140
int font_to_lua(lua_State *L, int f, int usecache)
Definition: luafont.c:637
static void append_float(eight_bits **cpp, float a)
Definition: luafont.c:758
static void nesting_prepend(halfword nest1, halfword newn)
Definition: luafont.c:2083
#define set_packet_number(fw)
Definition: luafont.c:172
static void read_lua_parameters(lua_State *L, int f)
Definition: luafont.c:1222
static void nesting_append(halfword nest1, halfword newn)
Definition: luafont.c:2072
static scaled sp_to_dvi(halfword sp, halfword atsize)
Definition: luafont.c:928
halfword handle_ligaturing(halfword head, halfword tail)
Definition: luafont.c:2450
static void read_lua_math_parameters(lua_State *L, int f)
Definition: luafont.c:1293
static void read_lua_cidinfo(lua_State *L, int f)
Definition: luafont.c:1204
static char * n_string_field_copy(lua_State *L, int name_index, const char *dflt)
Definition: luafont.c:811
const char * font_type_strings[]
Definition: luafont.c:33
int font_from_lua(lua_State *L, int f)
Definition: luafont.c:1655
#define dump_intfield(L, n, c)
Definition: luafont.c:135
static void font_char_from_lua(lua_State *L, internal_font_number f, int i, int *l_fonts, boolean has_math)
Definition: luafont.c:1341
const char * ligature_type_strings[]
Definition: luafont.c:53
static halfword handle_lig_nest(halfword root, halfword cur)
Definition: luafont.c:2210
const char * font_writingmode_strings[]
Definition: luafont.c:37
static int test_ligature(liginfo *lig, halfword left, halfword right)
Definition: luafont.c:2106
#define MIN_INF
Definition: luafont.c:1319
const char * MATH_param_names[]
Definition: luafont.c:57
static int n_enum_field(lua_State *L, int name_index, int dflt, const char **values)
Definition: luafont.c:772
static const char * n_string_field(lua_State *L, int name_index)
Definition: luafont.c:828
static void run_lua_ligkern_callback(halfword head, halfword tail, int callback_id)
Definition: luafont.c:2615
#define count_hash_items(L, name, n)
Definition: luafont.c:731
static void dump_math_kerns(lua_State *L, charinfo *co, int l, int id)
Definition: luafont.c:150
static void add_kern_after(halfword left, halfword right, halfword aft)
Definition: luafont.c:2503
static void nesting_prepend_list(halfword nest1, halfword newn)
Definition: luafont.c:2094
#define append_packet(k)
Definition: luafont.c:749
int ff_checkoption(lua_State *L, int narg, const char *def, const char *const lst[])
Definition: luafont.c:126
static void read_char_packets(lua_State *L, int *l_fonts, charinfo *co, internal_font_number f, int atsize)
Definition: luafont.c:936
const char * font_format_strings[]
Definition: luafont.c:45
halfword handle_kerning(halfword head, halfword tail)
Definition: luafont.c:2594
static void add_kern_before(halfword left, halfword right)
Definition: luafont.c:2485
halfword new_ligkern(halfword head, halfword tail)
Definition: luafont.c:2635
static void write_lua_parameters(lua_State *L, int f)
Definition: luafont.c:550
int characters_from_lua(lua_State *L, int f)
Definition: luafont.c:1941
int font_parameters_to_lua(lua_State *L, int f)
Definition: luafont.c:586
const char * font_identity_strings[]
Definition: luafont.c:41
static void font_commands_to_lua(lua_State *L, internal_font_number f, charinfo *co)
Definition: luafont.c:189
static halfword handle_lig_word(halfword cur)
Definition: luafont.c:2226
void normal_error(const char *t, const char *p)
Definition: errors.c:951
void formatted_error(const char *t, const char *fmt,...)
Definition: errors.c:1038
int lua_numeric_field_by_index(lua_State *L, int name_index, int dflt)
Definition: luainit.c:293
unsigned int lua_unsigned_numeric_field_by_index(lua_State *L, int name_index, int dflt)
Definition: luainit.c:306
lua_State * luatex_error(lua_State *L, int is_fatal)
Definition: luastuff.c:674
#define lua_key_eq(a, b)
Definition: luatex-api.h:318
#define lua_key_rawgeti(a)
Definition: luatex-api.h:328
#define lua_roundnumber(a, b)
Definition: luatex-api.h:362
#define lua_key_index(a)
Definition: luatex-api.h:320
#define lua_key_direct_rawgeti(i)
Definition: luatex-api.h:332
#define lua_push_string_by_name(L, index)
Definition: luatex-api.h:433
void formatted_warning(const char *t, const char *fmt,...)
Definition: errors.c:1048
@ kerning_callback
@ ligaturing_callback
#define callback_defined(a)
FILE * vfp
Definition: main-euc.c:12
static lua_State * Luas[1]
Definition: mfluac.c:37
#define cmd(arg)
Definition: mitsu.h:44
cpp
Definition: cutout.py:14
Definition: pdf.py:1
halfword save_tail
Definition: nesting.c:220
#define version
Definition: nup.c:10
char shrink
Definition: nup.c:69
static double extend
Definition: otftotfm.cc:277
int k
Definition: otp-parser.c:70
static int format
Definition: pbmclean.c:15
integer checksum
Definition: pbmtopk.c:63
integer parameters[30]
Definition: pbmtopk.c:75
char * filename[256]
Definition: pbmtopk.c:46
integer designsize
Definition: pbmtopk.c:45
#define scaled
Definition: pdftypes.h:88
struct const_name font_name[]
Definition: picttoppm.c:492
integer mult[4800]
Definition: pmxab.c:199
double scale
Definition: pnmhistmap.c:38
static int size
Definition: ppmlabel.c:24
int r
Definition: ppmqvga.c:68
bstring c int memset(void *s, int c, int length)
#define pop()
Definition: opcodes.h:78
#define push(n)
Definition: opcodes.h:77
slotref slot
Definition: opcodes.h:237
#define registry(L)
Definition: minilua.c:416
#define lua_rawlen
Definition: lua.h:363
#define lua_getglobal(L, s)
Definition: lua.h:280
int lua_gettop(lua_State *L)
Definition: lapi.c:167
void lua_pushinteger(lua_State *L, lua_Integer n)
Definition: lapi.c:466
void lua_setfield(lua_State *L, int idx, const char *k)
Definition: lapi.c:777
int lua_rawget(lua_State *L, int idx)
Definition: lapi.c:647
int lua_type(lua_State *L, int idx)
Definition: lapi.c:251
int lua_isnumber(lua_State *L, int idx)
Definition: lapi.c:276
void lua_pushnil(lua_State *L)
Definition: lapi.c:450
void lua_settop(lua_State *L, int idx)
Definition: lapi.c:172
const char * lua_pushstring(lua_State *L, const char *s)
Definition: lapi.c:491
const char * lua_tolstring(lua_State *L, int idx, size_t *len)
Definition: lapi.c:373
void lua_createtable(lua_State *L, int narray, int nrec)
Definition: lapi.c:684
int lua_rawgeti(lua_State *L, int idx, lua_Integer n)
Definition: lapi.c:658
void lua_rawset(lua_State *L, int idx)
Definition: lapi.c:801
void lua_rawseti(lua_State *L, int idx, lua_Integer n)
Definition: lapi.c:817
int lua_gettable(lua_State *L, int idx)
Definition: lapi.c:612
int lua_toboolean(lua_State *L, int idx)
Definition: lapi.c:367
int lua_next(lua_State *L, int idx)
Definition: lapi.c:1123
int luaL_ref(lua_State *L, int t)
Definition: lauxlib.c:595
const char * luaL_checklstring(lua_State *L, int arg, size_t *len)
Definition: lauxlib.c:390
lua_Number luaL_checknumber(lua_State *L, int arg)
Definition: lauxlib.c:408
void * luaL_checkudata(lua_State *L, int ud, const char *tname)
Definition: lauxlib.c:333
#define luaL_optstring(L, n, d)
Definition: lauxlib.h:125
#define luaL_checkstring(L, n)
Definition: lauxlib.h:124
#define lua_tointeger(L, i)
Definition: lua.h:341
#define lua_istable(L, n)
Definition: lua.h:352
#define lua_insert(L, idx)
Definition: lua.h:368
#define LUA_TTABLE
Definition: lua.h:68
#define LUA_REGISTRYINDEX
Definition: lua.h:41
#define LUA_TSTRING
Definition: lua.h:67
#define lua_pcall(L, n, r, f)
Definition: lua.h:277
#define LUA_TNUMBER
Definition: lua.h:66
#define lua_call(L, n, r)
Definition: lua.h:273
#define lua_newtable(L)
Definition: lua.h:345
#define lua_pop(L, n)
Definition: lua.h:343
#define lua_tostring(L, i)
Definition: lua.h:365
#define LUA_TFUNCTION
Definition: lua.h:69
#define LUA_TNIL
Definition: lua.h:63
#define LUA_ERRRUN
Definition: lua.h:48
#define lua_isboolean(L, n)
Definition: lua.h:355
static avl_node * new_node(void *item, avl_node *up, mp_avl_tree t)
Definition: avl.c:147
#define TYPE_IMG
Definition: image.h:37
static char no[99]
Definition: scanid.c:41
#define direction(p, c)
Definition: sh12.c:109
static int dobreak(int, char **)
Definition: sh7.c:2651
static struct XYspace identity
Definition: spaces.c:163
char * makecstring(int s)
Definition: stringpool.c:284
scaled * top_left_math_kern_array
Definition: texfont.h:109
scaled * top_right_math_kern_array
Definition: texfont.h:110
scaled * bottom_left_math_kern_array
Definition: texfont.h:112
scaled * bottom_right_math_kern_array
Definition: texfont.h:111
Definition: vmsdir.h:32
Definition: pbmfont.h:11
Definition: pbmfont.h:4
Definition: ttf.h:354
Definition: sd.h:76
Definition: mendex.h:20
Definition: afm2pl.c:145
Definition: afm2pl.c:139
Definition: mendex.h:14
Definition: axohelp.c:810
Definition: rule.h:21
Definition: tfmaux.c:31
Definition: dvips.h:235
int j
Definition: t4ht.c:1589
*job_name strlen((char *) job_name) - 4)
m
Definition: tex4ht.c:3990
return() int(((double) *(font_tbl[cur_fnt].wtbl+(int)(*(font_tbl[cur_fnt].char_wi+(int)(ch - font_tbl[cur_fnt].char_f)% 256)))/(double)(1L<< 20)) *(double) font_tbl[cur_fnt].scale)
scaled raw_get_kern(internal_font_number f, int lc, int rc)
Definition: texfont.c:1385
eight_bits * get_charinfo_packets(charinfo *ci)
Definition: texfont.c:894
void set_charinfo_height(charinfo *ci, scaled val)
Definition: texfont.c:521
scaled get_charinfo_width(charinfo *ci)
Definition: texfont.c:819
scaled get_charinfo_italic(charinfo *ci)
Definition: texfont.c:834
scaled get_charinfo_height(charinfo *ci)
Definition: texfont.c:824
void set_font_params(internal_font_number f, int b)
Definition: texfont.c:1035
int get_charinfo_remainder(charinfo *ci)
Definition: texfont.c:859
void set_charinfo_hor_variants(charinfo *ci, extinfo *ext)
Definition: texfont.c:627
void set_charinfo_ef(charinfo *ci, scaled val)
Definition: texfont.c:598
int get_charinfo_index(charinfo *ci)
Definition: texfont.c:869
void set_charinfo_ligatures(charinfo *ci, liginfo *val)
Definition: texfont.c:583
void set_charinfo_vert_italic(charinfo *ci, scaled val)
Definition: texfont.c:536
liginfo * get_charinfo_ligatures(charinfo *ci)
Definition: texfont.c:884
void set_charinfo_lp(charinfo *ci, scaled val)
Definition: texfont.c:603
scaled get_charinfo_vert_italic(charinfo *ci)
Definition: texfont.c:839
scaled get_charinfo_depth(charinfo *ci)
Definition: texfont.c:829
char get_charinfo_tag(charinfo *ci)
Definition: texfont.c:854
void set_charinfo_tag(charinfo *ci, scaled val)
Definition: texfont.c:551
void set_charinfo_rp(charinfo *ci, scaled val)
Definition: texfont.c:608
int get_charinfo_math_kerns(charinfo *ci, int id)
Definition: texfont.c:642
void set_charinfo_remainder(charinfo *ci, scaled val)
Definition: texfont.c:556
char * get_charinfo_name(charinfo *ci)
Definition: texfont.c:874
scaled get_charinfo_bot_accent(charinfo *ci)
Definition: texfont.c:849
void set_charinfo_tounicode(charinfo *ci, char *val)
Definition: texfont.c:577
void set_charinfo_width(charinfo *ci, scaled val)
Definition: texfont.c:516
int get_charinfo_rp(charinfo *ci)
Definition: texfont.c:904
extinfo * get_charinfo_hor_variants(charinfo *ci)
Definition: texfont.c:922
void add_charinfo_math_kern(charinfo *ci, int id, scaled ht, scaled krn)
Definition: texfont.c:660
int get_charinfo_lp(charinfo *ci)
Definition: texfont.c:909
kerninfo * get_charinfo_kerns(charinfo *ci)
Definition: texfont.c:889
void set_expand_params(internal_font_number f, int stretch_limit, int shrink_limit, int font_step)
Definition: texfont.c:1819
liginfo get_ligature(internal_font_number f, int lc, int rc)
Definition: texfont.c:1358
void set_charinfo_italic(charinfo *ci, scaled val)
Definition: texfont.c:531
void set_charinfo_index(charinfo *ci, scaled val)
Definition: texfont.c:566
void set_charinfo_vert_variants(charinfo *ci, extinfo *ext)
Definition: texfont.c:613
void set_charinfo_bot_accent(charinfo *ci, scaled val)
Definition: texfont.c:546
void set_charinfo_kerns(charinfo *ci, kerninfo *val)
Definition: texfont.c:588
void set_charinfo_name(charinfo *ci, char *val)
Definition: texfont.c:571
int get_charinfo_ef(charinfo *ci)
Definition: texfont.c:899
charinfo * get_charinfo(internal_font_number f, int c)
Definition: texfont.c:165
extinfo * new_variant(int glyph, int startconnect, int endconnect, int advance, int repeater)
Definition: texfont.c:385
extinfo * get_charinfo_vert_variants(charinfo *ci)
Definition: texfont.c:914
void set_charinfo_packets(charinfo *ci, eight_bits *val)
Definition: texfont.c:593
void set_charinfo_used(charinfo *ci, scaled val)
Definition: texfont.c:561
scaled get_charinfo_top_accent(charinfo *ci)
Definition: texfont.c:844
void add_charinfo_hor_variant(charinfo *ci, extinfo *ext)
Definition: texfont.c:455
void set_charinfo_extensible(charinfo *ci, int top, int bot, int mid, int rep)
Definition: texfont.c:778
char get_charinfo_used(charinfo *ci)
Definition: texfont.c:864
void font_malloc_charinfo(internal_font_number f, int num)
Definition: texfont.c:154
char * get_charinfo_tounicode(charinfo *ci)
Definition: texfont.c:879
void add_charinfo_vert_variant(charinfo *ci, extinfo *ext)
Definition: texfont.c:442
void set_charinfo_top_accent(charinfo *ci, scaled val)
Definition: texfont.c:541
void set_charinfo_depth(charinfo *ci, scaled val)
Definition: texfont.c:526
#define FONT_SLANT_MIN
Definition: texfont.h:35
#define set_font_dsize(a, b)
Definition: texfont.h:238
#define is_valid_ligature(a)
Definition: texfont.h:551
#define font_identity(a)
Definition: texfont.h:298
#define set_font_cidversion(a, b)
Definition: texfont.h:306
#define set_font_writingmode(a, b)
Definition: texfont.h:296
#define left_boundary(a)
Definition: texfont.h:389
#define has_left_boundary(a)
Definition: texfont.h:390
#define set_font_psname(f, b)
Definition: texfont.h:264
#define set_right_boundary(a, b)
Definition: texfont.h:395
#define set_font_area(f, b)
Definition: texfont.h:250
@ packet_pop_code
Definition: texfont.h:635
@ packet_rule_code
Definition: texfont.h:641
@ packet_scale_code
Definition: texfont.h:645
@ packet_special_code
Definition: texfont.h:637
@ packet_push_code
Definition: texfont.h:636
@ packet_right_code
Definition: texfont.h:639
@ packet_down_code
Definition: texfont.h:640
@ packet_lua_code
Definition: texfont.h:646
@ packet_char_code
Definition: texfont.h:633
@ packet_node_code
Definition: texfont.h:642
@ packet_pdf_mode
Definition: texfont.h:648
@ packet_image_code
Definition: texfont.h:638
@ packet_end_code
Definition: texfont.h:644
@ packet_font_code
Definition: texfont.h:634
@ packet_pdf_code
Definition: texfont.h:647
@ packet_nop_code
Definition: texfont.h:643
#define set_font_cidregistry(f, b)
Definition: texfont.h:315
#define font_format(a)
Definition: texfont.h:290
#define font_params(a)
Definition: texfont.h:401
#define pdf_font_attr(a)
Definition: texfont.h:380
#define kern_disabled(b)
Definition: texfont.h:542
#define FONT_SQUEEZE_MAX
Definition: texfont.h:40
#define set_font_oldmath(a, b)
Definition: texfont.h:333
#define font_math_param(a, b)
Definition: texfont.h:414
#define set_font_param(f, n, b)
Definition: texfont.h:407
@ virtual_font_type
Definition: texfont.h:190
@ unknown_font_type
Definition: texfont.h:189
#define font_max_stretch(a)
Definition: texfont.h:359
#define set_font_name(f, b)
Definition: texfont.h:245
#define font_used(a)
Definition: texfont.h:281
#define set_font_identity(a, b)
Definition: texfont.h:300
#define lig_end(a)
Definition: texfont.h:555
#define font_area(a)
Definition: texfont.h:248
#define quick_char_exists(f, c)
Definition: texfont.h:467
#define kern_char(b)
Definition: texfont.h:539
#define font_oldmath(a)
Definition: texfont.h:332
#define set_font_cidordering(f, b)
Definition: texfont.h:312
#define set_font_subfont(a, b)
Definition: texfont.h:327
#define set_font_math_param(f, n, b)
Definition: texfont.h:418
#define FONT_MODE_MAX
Definition: texfont.h:42
#define charinfo_size(a)
Definition: texfont.h:383
#define set_font_extend(a, b)
Definition: texfont.h:339
#define set_font_cidsupplement(a, b)
Definition: texfont.h:309
#define has_kern(f, b)
Definition: texfont.h:577
#define font_step(a)
Definition: texfont.h:362
#define set_font_slant(a, b)
Definition: texfont.h:336
#define set_font_squeeze(a, b)
Definition: texfont.h:342
#define set_font_streamprovider(a, b)
Definition: texfont.h:330
#define font_ec(a)
Definition: texfont.h:278
#define set_font_natural_dir(a, b)
Definition: texfont.h:375
@ slant_code
Definition: texfont.h:427
@ extra_space_code
Definition: texfont.h:433
@ x_height_code
Definition: texfont.h:431
@ space_stretch_code
Definition: texfont.h:429
@ space_shrink_code
Definition: texfont.h:430
@ space_code
Definition: texfont.h:428
@ quad_code
Definition: texfont.h:432
#define FONT_WIDTH_MIN
Definition: texfont.h:43
#define font_fullname(a)
Definition: texfont.h:260
#define FONT_SLANT_MAX
Definition: texfont.h:36
#define set_font_encodingname(f, b)
Definition: texfont.h:267
#define FONT_WIDTH_MAX
Definition: texfont.h:44
#define left_boundarychar
Definition: texfont.h:385
#define font_extend(a)
Definition: texfont.h:338
#define FONT_SQUEEZE_MIN
Definition: texfont.h:39
@ unknown_writingmode
Definition: texfont.h:203
#define font_encodingbytes(a)
Definition: texfont.h:323
#define set_font_mode(a, b)
Definition: texfont.h:348
#define font_embedding(a)
Definition: texfont.h:302
#define font_squeeze(a)
Definition: texfont.h:341
#define font_subfont(a)
Definition: texfont.h:326
#define font_filename(a)
Definition: texfont.h:257
#define font_cache_id(a)
Definition: texfont.h:320
#define set_font_tounicode(a, b)
Definition: texfont.h:366
#define font_checksum(a)
Definition: texfont.h:227
#define font_slant(a)
Definition: texfont.h:335
@ unknown_embedding
Definition: texfont.h:215
#define lig_replacement(a)
Definition: texfont.h:554
@ unknown_identity
Definition: texfont.h:209
#define set_kern_item(f, b, c)
Definition: texfont.h:525
#define end_ligature
Definition: texfont.h:546
#define set_font_fullname(f, b)
Definition: texfont.h:261
#define set_skew_char(a, b)
Definition: texfont.h:372
#define font_width(a)
Definition: texfont.h:344
#define font_psname(a)
Definition: texfont.h:263
#define right_boundarychar
Definition: texfont.h:386
#define font_type(a)
Definition: texfont.h:287
#define lig_type(a)
Definition: texfont.h:552
#define font_tounicode(a)
Definition: texfont.h:365
#define font_size(a)
Definition: texfont.h:235
#define set_font_checksum(a, b)
Definition: texfont.h:228
#define font_max_shrink(a)
Definition: texfont.h:356
#define FONT_MODE_MIN
Definition: texfont.h:41
#define font_streamprovider(a)
Definition: texfont.h:329
#define set_font_type(a, b)
Definition: texfont.h:288
#define FONT_EXTEND_MIN
Definition: texfont.h:37
#define font_bc(a)
Definition: texfont.h:275
#define font_units_per_em(a)
Definition: texfont.h:240
#define set_ligature_item(f, b, c, d)
Definition: texfont.h:524
#define has_right_boundary(a)
Definition: texfont.h:394
#define kern_end(b)
Definition: texfont.h:541
#define font_math_params(a)
Definition: texfont.h:412
#define set_font_filename(f, b)
Definition: texfont.h:258
#define set_pdf_font_attr(a, b)
Definition: texfont.h:381
#define set_font_encodingbytes(a, b)
Definition: texfont.h:324
#define set_font_embedding(a, b)
Definition: texfont.h:303
#define font_encodingname(a)
Definition: texfont.h:266
#define font_natural_dir(a)
Definition: texfont.h:374
#define kern_kern(b)
Definition: texfont.h:540
#define set_font_cache_id(a, b)
Definition: texfont.h:321
#define end_kern
Definition: texfont.h:534
#define FONT_EXTEND_MAX
Definition: texfont.h:38
#define non_boundarychar
Definition: texfont.h:387
#define set_font_used(a, b)
Definition: texfont.h:282
#define set_font_bc(f, b)
Definition: texfont.h:276
#define set_font_size(a, b)
Definition: texfont.h:236
#define set_font_width(a, b)
Definition: texfont.h:345
#define set_font_ec(f, b)
Definition: texfont.h:279
#define set_hyphen_char(a, b)
Definition: texfont.h:369
#define right_boundary(a)
Definition: texfont.h:393
#define font_writingmode(a)
Definition: texfont.h:294
@ unknown_format
Definition: texfont.h:195
@ truetype_format
Definition: texfont.h:198
@ opentype_format
Definition: texfont.h:199
#define font_param(a, b)
Definition: texfont.h:403
#define set_font_units_per_em(a, b)
Definition: texfont.h:241
#define set_font_format(a, b)
Definition: texfont.h:292
@ top_left_kern
Definition: texfont.h:453
@ bottom_right_kern
Definition: texfont.h:451
@ top_right_kern
Definition: texfont.h:450
@ bottom_left_kern
Definition: texfont.h:452
#define font_dsize(a)
Definition: texfont.h:237
#define font_mode(a)
Definition: texfont.h:347
#define sp
Definition: stack.c:11
#define MATH_param_max
Definition: texmath.h:302
halfword tail_of_list(halfword p)
Definition: texnodes.c:4286
void delete_attribute_ref(halfword b)
Definition: texnodes.c:3211
void flush_node(halfword p)
Definition: texnodes.c:2321
halfword fix_node_list(halfword head)
Definition: texnodes.c:2704
halfword copy_node(const halfword p)
Definition: texnodes.c:2030
halfword new_glyph(int f, int c)
Definition: texnodes.c:4430
int valid_node(halfword p)
Definition: texnodes.c:1435