texlive[43237] Build/source/texk/web2c: luatexdir, mplibdir: sync

commits+kakuto at tug.org commits+kakuto at tug.org
Wed Feb 15 23:47:54 CET 2017


Revision: 43237
          http://tug.org/svn/texlive?view=revision&revision=43237
Author:   kakuto
Date:     2017-02-15 23:47:54 +0100 (Wed, 15 Feb 2017)
Log Message:
-----------
luatexdir, mplibdir: sync with the upstream

Modified Paths:
--------------
    trunk/Build/source/texk/web2c/luatexdir/NEWS
    trunk/Build/source/texk/web2c/luatexdir/lua/lnodelib.c
    trunk/Build/source/texk/web2c/luatexdir/lua/lstatslib.c
    trunk/Build/source/texk/web2c/luatexdir/lua/luatex-api.h
    trunk/Build/source/texk/web2c/luatexdir/luatex.c
    trunk/Build/source/texk/web2c/mplibdir/ChangeLog
    trunk/Build/source/texk/web2c/mplibdir/mpmath.w
    trunk/Build/source/texk/web2c/mplibdir/mpmathbinary.w
    trunk/Build/source/texk/web2c/mplibdir/mpmathdecimal.w
    trunk/Build/source/texk/web2c/mplibdir/mpmathdouble.w
    trunk/Build/source/texk/web2c/mplibdir/mpost.w
    trunk/Build/source/texk/web2c/mplibdir/mpstrings.w
    trunk/Build/source/texk/web2c/mplibdir/mpxout.w
    trunk/Build/source/texk/web2c/mplibdir/pngout.w
    trunk/Build/source/texk/web2c/mplibdir/psout.w
    trunk/Build/source/texk/web2c/mplibdir/svgout.w

Modified: trunk/Build/source/texk/web2c/luatexdir/NEWS
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/NEWS	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/luatexdir/NEWS	2017-02-15 22:47:54 UTC (rev 43237)
@@ -2,6 +2,51 @@
 This file is in the public domain.
 
 ==============================================================
+LuaTeX Release 1.0.3  was released 2017021514
+==============================================================
+
+This is a minor upgrade and probably this version will go on texlive. There are a couple
+of fixes and additions.
+- We added a few a few more helpers in the pdf namespace (like set|get]gentounicode,
+  [set|get]omitcidset and set|get]decimaldigits. Some helpers were moved from the tex
+  to the pdf namespace.
+
+- We added a build_page_insert callback for inserts so that one can for instance adapt
+  spacing on demand.
+
+- On the agenda has been some more control over word start and end in hyphenation and
+  this is now possible via hyphenationbounds. We also updated the manual with some more
+  details.
+
+- An old tracker item with respect to control over spacing around math was revived and
+  has resulted in mathsurroundmode (one can wonder how useful this is).
+
+- We improved the resolution detection in included jpeg images.
+
+
+- An ffi library has been added to luatex so that it is more in sync with luajittex. This
+  permits easy and flexible loading of libraries. Our policy is to make luatex as lean
+  as possible with no dependencies and this is a step towards that. Eventually we hope
+  to support all relevant platforms.
+
+- The glue and skip register accessors have been improved as a step in freeing the user
+  from glue spec management.
+
+- We added a few more getters and setters for nodes in order to get a more consistent
+  set.
+
+- Irrelevant fields have been removed from the status table and an engine identifier
+  has been added.
+
+- Of course there are numerous fixes and improvements but none of these have consequences
+  for the interfaces.
+
+- The manual has been updated but will be improved over time.
+
+
+
+
+==============================================================
 LuaTeX Release 0.95 for TeX Live 2016 was released 2016042515
 ==============================================================
 

Modified: trunk/Build/source/texk/web2c/luatexdir/lua/lnodelib.c
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/lua/lnodelib.c	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/luatexdir/lua/lnodelib.c	2017-02-15 22:47:54 UTC (rev 43237)
@@ -538,7 +538,7 @@
 {
     halfword n = lua_tointeger(L, 1);
     if ((n) && (type(n) == glyph_node)) {
-        lua_pushinteger(L, lig_ptr(n));
+        nodelib_pushdirect_or_nil(lig_ptr(n));
     } else {
         lua_pushnil(L);
     }

Modified: trunk/Build/source/texk/web2c/luatexdir/lua/lstatslib.c
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/lua/lstatslib.c	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/luatexdir/lua/lstatslib.c	2017-02-15 22:47:54 UTC (rev 43237)
@@ -116,6 +116,13 @@
     return (const char *) (strrchr(luatex_version_string, '.') + 1);
 }
 
+static const char *getenginename(void)
+{
+    return engine_name;
+}
+
+
+
 static lua_Number get_luatexhashchars(void)
 {
   return (lua_Number) LUAI_HASHLIMIT;
@@ -217,8 +224,6 @@
     }
 }
 
-static int luastate_max = 1;    /* fixed value */
-
 /* temp, for backward compat */
 static int init_pool_ptr = 0;
 
@@ -250,9 +255,10 @@
     {"log_name", 'S', (void *) &getlogname},
     {"banner", 'S', (void *) &getbanner},
     {"luatex_version", 'G', &get_luatexversion},
-    {"luatex_revision", 'S', (void *) &luatexrevision},
+    {"luatex_revision", 'S', (void *) &luatexrevision}, 
     {"luatex_hashtype", 'S', (void *) &get_luatexhashtype},
     {"luatex_hashchars", 'N',  &get_luatexhashchars},
+    {"luatex_engine", 'S', (void *) &getenginename},
 
     {"ini_version", 'b', &ini_version},
 
@@ -302,7 +308,6 @@
     {"largest_used_mark", 'g', &biggest_used_mark},
     {"luabytecodes", 'g', &luabytecode_max},
     {"luabytecode_bytes", 'g', &luabytecode_bytes},
-    {"luastates", 'g', &luastate_max},
     {"luastate_bytes", 'g', &luastate_bytes},
     {"callbacks", 'g', &callback_count},
     {"indirect_callbacks", 'g', &saved_callback_count},

Modified: trunk/Build/source/texk/web2c/luatexdir/lua/luatex-api.h
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/lua/luatex-api.h	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/luatexdir/lua/luatex-api.h	2017-02-15 22:47:54 UTC (rev 43237)
@@ -189,6 +189,7 @@
 extern int saved_callback_count;
 
 extern const char *luatex_banner;
+extern const char *engine_name;
 
 /* luastuff.h */
 

Modified: trunk/Build/source/texk/web2c/luatexdir/luatex.c
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/luatex.c	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/luatexdir/luatex.c	2017-02-15 22:47:54 UTC (rev 43237)
@@ -30,7 +30,7 @@
 
 int luatex_version = 100;        /* \.{\\luatexversion}  */
 int luatex_revision = '3';      /* \.{\\luatexrevision}  */
-int luatex_date_info = 2017011800;     /* the compile date is now hardwired :YEAR MONTH DAY HOUR*/
+int luatex_date_info = 2017021514;     /* the compile date is now hardwired :YEAR MONTH DAY HOUR*/
 const char *luatex_version_string = "1.0.3";
 const char *engine_name = my_name;     /* the name of this engine */
 

Modified: trunk/Build/source/texk/web2c/mplibdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/mplibdir/ChangeLog	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/mplibdir/ChangeLog	2017-02-15 22:47:54 UTC (rev 43237)
@@ -1,3 +1,7 @@
+2017-02-13  Luigi Scarso  <luigi.scarso at gmail.com>
+	new primitive boundingpath
+
+
 2016-03-06  Luigi Scarso  <luigi.scarso at gmail.com>
 	Bump to version 1.9991.
 

Modified: trunk/Build/source/texk/web2c/mplibdir/mpmath.w
===================================================================
--- trunk/Build/source/texk/web2c/mplibdir/mpmath.w	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/mplibdir/mpmath.w	2017-02-15 22:47:54 UTC (rev 43237)
@@ -1,4 +1,4 @@
-% $Id: mpmath.w 2070 2015-10-06 10:35:23Z luigi $
+% $Id: mpmath.w 2118 2017-02-15 17:49:54Z luigi $
 %
 % This file is part of MetaPost;
 % the MetaPost program is in the public domain.
@@ -10,6 +10,8 @@
 \font\logos=logosl10
 \def\MF{{\tenlogo META}\-{\tenlogo FONT}}
 \def\MP{{\tenlogo META}\-{\tenlogo POST}}
+\def\pct!{{\char`\%}} % percent sign in ordinary text
+\def\psqrt#1{\sqrt{\mathstrut#1}}
 
 \def\title{Math support functions for 32-bit integer math}
 \pdfoutput=1
@@ -830,9 +832,9 @@
   return (int) halfp (a + 1);
 }
 
-@* Scanning numbers in the input
+@* Scanning numbers in the input.
 
-The definitions below are temporarily here
+The definitions below are temporarily here.
 
 @d set_cur_cmd(A) mp->cur_mod_->type=(A)
 @d set_cur_mod(A) mp->cur_mod_->data.n.data.val=(A)
@@ -959,7 +961,7 @@
   } else {
     ret->data.val = mp_make_fraction (mp, num, denom);
   }
-/*  printf ("num,denom=%f,%f -=> %f\n", num/65536.0, denom/65536.0, ret.data.val/65536.0);*/
+/*  |printf ("num,denom=%f,%f -=> %f\n", num/65536.0, denom/65536.0, ret.data.val/65536.0);|*/
 }
 
 
@@ -1858,11 +1860,11 @@
   mp_number_clone (&abs_x, x);
   mp_number_abs (&abs_x);
   mp_next_random(mp, &u);
-  /*take_fraction (y, abs_x, u);*/
+  /*|take_fraction (y, abs_x, u);|*/
   mp_number_take_fraction (mp,&y, abs_x,u);
   free_number (u);
   if (mp_number_equal(y, abs_x)) {
-    /*set_number_to_zero(*ret);*/
+    /*|set_number_to_zero(*ret);|*/
     mp_number_clone (ret, ((math_data *)mp->math)->zero_t);
   } else if (mp_number_greater(x, ((math_data *)mp->math)->zero_t)) {
     mp_number_clone (ret, y);

Modified: trunk/Build/source/texk/web2c/mplibdir/mpmathbinary.w
===================================================================
--- trunk/Build/source/texk/web2c/mplibdir/mpmathbinary.w	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/mplibdir/mpmathbinary.w	2017-02-15 22:47:54 UTC (rev 43237)
@@ -4,6 +4,16 @@
 % the MetaPost program is in the public domain.
 % See the <Show version...> code in mpost.w for more info.
 
+% Here is TeX material that gets inserted after \input webmac
+
+\font\tenlogo=logo10 % font used for the METAFONT logo
+\font\logos=logosl10
+\def\MF{{\tenlogo META}\-{\tenlogo FONT}}
+\def\MP{{\tenlogo META}\-{\tenlogo POST}}
+\def\pct!{{\char`\%}} % percent sign in ordinary text
+\def\psqrt#1{\sqrt{\mathstrut#1}}
+
+
 \def\title{Math support functions for MPFR based math}
 \pdfoutput=1
 
@@ -581,7 +591,7 @@
 }
 
 
-@* Query functions
+@* Query functions.
 
 @ Convert a number to a scaled value. |decNumberToInt32| is not
 able to make this conversion properly, so instead we are using
@@ -671,7 +681,7 @@
       *(str+strlen(str)-1) = '\0'; /* get rid of trailing zeroes */
     }
     buffer = malloc(strlen(str)+13+numprecdigits+1); 
-    /* the buffer should also fit at least strlen("E+%d", exp) or (numprecdigits-2) worth of zeroes, 
+    /* the buffer should also fit at least strlen("E+\%d", exp) or (numprecdigits-2) worth of zeroes, 
      * because with numprecdigits == 33, the str for "1E32" will be "1", and needing 32 extra zeroes,
      * and the decimal dot. To avoid miscalculations by myself, it is safer to add these
      * three together.
@@ -863,9 +873,9 @@
 @ 
 @d halfp(A) (integer)((unsigned)(A) >> 1)
 
-@* Scanning numbers in the input
+@* Scanning numbers in the input.
 
-The definitions below are temporarily here
+The definitions below are temporarily here.
 
 @d set_cur_cmd(A) mp->cur_mod_->type=(A)
 @d set_cur_mod(A) mpfr_set((mpfr_ptr)(mp->cur_mod_->data.n.data.num),A, ROUNDING)
@@ -876,10 +886,10 @@
 @ The check of the precision is based on the article "27 Bits are not enough for 8-Digit accuracy" 
 @ by Bennet Goldberg  which roughly says that
 @ given $p$ digits in base 10 and $q$ digits in base 2, 
-@ conversion from base 10 round-trip through base 2 if and only if $10^p < $2^{q-1}$.
+@ conversion from base 10 round-trip through base 2 if and only if $10^p < 2^{q-1}$.
 @ In our case  $p/\log_{10}2 + 1 < q$, or $q\geq a$
 @ where $q$ is the current precision in bits and $a=\left\lceil p/\log_{10}2 + 1\right\rceil$. 
-@ Therefore if $a>q$ the number could be  too precise and we emit a warning.
+@ Therefore if $a>q$ the required precision could be too high and we emit a warning.
 @d too_precise(a) (a>precision_bits)
 @c
 void mp_wrapup_numeric_token(MP mp, unsigned char *start, unsigned char *stop) {
@@ -887,7 +897,6 @@
   mpfr_t result;
   size_t l = stop-start+1;
   unsigned long lp, lpbit;
-  /*size_t lp = l; */
   char *buf = mp_xmalloc(mp, l+1, 1);
   char *bufp = buf; 
   buf[l] = '\0';
@@ -894,7 +903,7 @@
   mpfr_init2(result, precision_bits);
   (void)strncpy(buf,(const char *)start, l);
   invalid = mpfr_set_str(result,buf, 10, ROUNDING);
-  //fprintf(stdout,"scan of [%s] produced %s, ", buf, mp_binnumber_tostring(result));
+  /*|fprintf(stdout,"scan of [%s] produced %s, ", buf, mp_binnumber_tostring(result));|*/
   lp = (unsigned long) l;
   /* strip leading - or + or 0 or .*/
   if ( (*bufp=='-') || (*bufp=='+') || (*bufp=='0') || (*bufp=='.') ) { lp--; bufp++;}
@@ -911,7 +920,7 @@
   bufp = NULL;
   if (invalid == 0) {
     set_cur_mod(result);
-   // fprintf(stdout,"mod=%s\n", mp_binary_number_tostring(mp,mp->cur_mod_->data.n));
+   /* |fprintf(stdout,"mod=%s\n", mp_binary_number_tostring(mp,mp->cur_mod_->data.n));|*/
     if (too_precise(lpbit)) {
        if (mpfr_positive_p((mpfr_ptr)(internal_value (mp_warning_check).data.num)) &&
           (mp->scanner_status != tex_flushing)) {
@@ -920,7 +929,7 @@
                "with that value; but it might be dangerous.",
                "(Set warningcheck:=0 to suppress this message.)",
                NULL };
-        mp_snprintf (msg, 256, "Number is too precise (%d vs. numberprecision = %f, required precision=%d bits vs internal precision=%f bits)", (unsigned int)lp,mpfr_get_d(internal_value (mp_number_precision).data.num, ROUNDING),(int)lpbit,precision_bits);
+        mp_snprintf (msg, 256, "Required precision is too high (%d vs. numberprecision = %f, required precision=%d bits vs internal precision=%f bits)", (unsigned int)lp,mpfr_get_d(internal_value (mp_number_precision).data.num, ROUNDING),(int)lpbit,precision_bits);
 @.Number is too large@>;
         mp_error (mp, msg, hlp, true);
       }
@@ -1566,7 +1575,7 @@
 }
 /* */ 
 /* the following routines are from exercise 3.6--15 */
-/* after calling ran_start, get new randoms by, e.g., "x=ran_arr_next()" */
+/* after calling |ran_start|, get new randoms by, e.g., |x=ran_arr_next()| */
 /* */ 
 #define QUALITY 1009 /* recommended quality level for high-res use */
 static long ran_arr_buf[QUALITY];
@@ -1576,7 +1585,7 @@
 #define TT  70   /* guaranteed separation between streams */
 #define is_odd(x)  ((x)&1)          /* units bit of x */
 /* */ 
-static void ran_start(long seed) /* do this before using ran_array */
+static void ran_start(long seed) /* do this before using |ran_array| */
   /* long seed             selector for different streams */
 {
   register int t,j;
@@ -1711,12 +1720,12 @@
     mp_number_clone (ret, y);
     mp_number_negate (ret);
   }
-  r = mpfr_get_str(NULL,    // char *str,           
-                  &e,       // mpfr_exp_t *expptr, 
-                  10,      // int b,              
-                  0,       // size_t n,                              
-                  ret->data.num, // mpfr_t op,           
-                  ROUNDING // mpfr_rnd_t rnd       
+  r = mpfr_get_str(NULL,    /* |char *str|,         */     
+                  &e,       /* |mpfr_exp_t *expptr|,*/
+                  10,       /* |int b|,             */
+                  0,        /* |size_t n|,          */
+                  ret->data.num, /* |mpfr_t op|,    */      
+                  ROUNDING       /* |mpfr_rnd_t rnd|*/
                   );
   mpfr_free_str(r);
   free_number (abs_x);
@@ -1761,7 +1770,6 @@
     mp_binary_m_log (mp,&la, u);
     mp_set_binary_from_substraction(&la, ((math_data *)mp->math)->twelve_ln_2_k, la);
     mp_binary_ab_vs_cd (mp,&ab_vs_cd, ((math_data *)mp->math)->one_k, la, xa, xa);
-    /*mp_ab_vs_cd (mp,&ab_vs_cd, ((math_data *)mp->math)->one_k, la, xa, xa);*/
   } while (mp_number_less(ab_vs_cd,((math_data *)mp->math)->zero_t));
   mp_number_clone (ret, xa);
   free_number (ab_vs_cd);
@@ -1774,7 +1782,7 @@
 
 
 
-@ The following subroutine is used only in norm_rand and tests  if $ab$ is
+@ The following subroutine is used only in |norm_rand| and tests  if $ab$ is
 greater than, equal to, or less than~$cd$.
 The result is $+1$, 0, or~$-1$ in the three respective cases.
 

Modified: trunk/Build/source/texk/web2c/mplibdir/mpmathdecimal.w
===================================================================
--- trunk/Build/source/texk/web2c/mplibdir/mpmathdecimal.w	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/mplibdir/mpmathdecimal.w	2017-02-15 22:47:54 UTC (rev 43237)
@@ -10,7 +10,10 @@
 \font\logos=logosl10
 \def\MF{{\tenlogo META}\-{\tenlogo FONT}}
 \def\MP{{\tenlogo META}\-{\tenlogo POST}}
+\def\pct!{{\char`\%}} % percent sign in ordinary text
+\def\psqrt#1{\sqrt{\mathstrut#1}}
 
+
 \def\title{Math support functions for decNumber based math}
 \pdfoutput=1
 
@@ -55,7 +58,7 @@
 static void mp_decimal_scan_fractional_token (MP mp, int n);
 static void mp_decimal_scan_numeric_token (MP mp, int n);
 static void mp_ab_vs_cd (MP mp, mp_number *ret, mp_number a, mp_number b, mp_number c, mp_number d);
-/*static void mp_decimal_ab_vs_cd (MP mp, mp_number *ret, mp_number a, mp_number b, mp_number c, mp_number d);*/
+/*|static void mp_decimal_ab_vs_cd (MP mp, mp_number *ret, mp_number a, mp_number b, mp_number c, mp_number d);|*/
 static void mp_decimal_crossing_point (MP mp, mp_number *ret, mp_number a, mp_number b, mp_number c);
 static void mp_decimal_number_modulo (mp_number *a, mp_number b);
 static void mp_decimal_print_number (MP mp, mp_number n);
@@ -139,7 +142,7 @@
       context->status &= ~DEC_Underflow; 
    }
    if (context->status & DEC_Errors) {
-//     fprintf(stdout, "DEC_ERROR %x (%s)\n", context->status, decContextStatusToString(context));
+/*|fprintf(stdout, "DEC_ERROR %x (%s)\n", context->status, decContextStatusToString(context));|*/
      test = true;
      decNumberZero(dec);
    }
@@ -152,7 +155,7 @@
         } else {
 	  decNumberCopy(dec, &EL_GORDO_decNumber);
         }
-      } else { // Nan 
+      } else { /* Nan  */
         decNumberZero(dec);
       }
    }
@@ -214,29 +217,33 @@
      return res;
   } else {
      free(buffer);
-     //mp->arith_error = 1;
-     return 0.0; // whatever
+     /*|mp->arith_error = 1;|*/
+     return 0.0; /* whatever*/
   }
 }
-
 @ Borrowed code from libdfp:
 
-                x^3   x^5   x^7
-arctan(x) = x - --- + --- - --- + ...
-                 3     5     7
+%                x^3   x^5   x^7
+%arctan(x) = x - --- + --- - --- + ...
+%                 3     5     7
+$$ \arctan(x) = x - {x^3\over3} + {x^5\over5} - {x^7\over7} +  \ldots$$
 
-This power series works well, if x is close to zero (|x|<0.5).
+
+This power series works well, if $x$ is close to zero ($|x|<0.5$).
 If x is larger, the series converges too slowly,
 so in order to get a smaller x, we apply the identity 
 
-                     sqrt(1+x^2) - 1
-arctan(x) = 2*arctan ---------------
-                            x
+%                     sqrt(1+x^2) - 1
+%arctan(x) = 2*arctan ---------------
+%                            x
+$$ \arctan(x) = 2\,\arctan{{\sqrt{1+x^2}-1}\over x}$$
 
-twice. The first application gives us a new x with x < 1.
-The second application gives us a new x with x < 0.4142136.
-For that x, we use the power series and multiply the result by four.
+twice. The first application gives us a new $x$ with $x < 1$.
+The second application gives us a new x with $x < 0.4142136$.
+For that $x$, we use the power series and multiply the result by four.
 
+
+
 @c
 static void decNumberAtan (decNumber *result, decNumber *x_orig, decContext *set) 
 {
@@ -249,22 +256,22 @@
   }
   for (i=0; i<2; i++) {
     decNumber y;
-    decNumberMultiply (&y, &x, &x, set);     // y = x^2
-    decNumberAdd (&y, &y, &one, set);      // y = y+1
-    decNumberSquareRoot (&y, &y, set);     // y = sqrt(y)
-    decNumberSubtract (&y, &y, &one, set); // y = y-1
-    decNumberDivide (&x, &y, &x, set);       // x = y/x
+    decNumberMultiply (&y, &x, &x, set);     /* $y = x^2$ */
+    decNumberAdd (&y, &y, &one, set);      /* $y = y+1$*/
+    decNumberSquareRoot (&y, &y, set);     /* $y = sqrt(y)$ */
+    decNumberSubtract (&y, &y, &one, set); /* $y = y-1$ */
+    decNumberDivide (&x, &y, &x, set);       /* $x = y/x$ */
     if (decNumberIsZero (&x)) {
       decNumberCopy (result, &x);
       return;
     }
   }
-  decNumberCopy (&f, &x);     // f(0) = x
-  decNumberCopy (&g, &one);  // g(0) = 1
-  decNumberCopy (&term, &x);  // term = x
-  decNumberCopy (result, &x); // sum  = x 
-  decNumberMultiply (&mx2, &x, &x, set); // mx2 = x^2
-  decNumberMinus (&mx2, &mx2, set);    // mx2 = -x^2  
+  decNumberCopy (&f, &x);     /* $f(0) = x$ */
+  decNumberCopy (&g, &one);  /*$ g(0) = 1$*/
+  decNumberCopy (&term, &x);  /*$ term = x$*/
+  decNumberCopy (result, &x); /*$ sum  = x $*/
+  decNumberMultiply (&mx2, &x, &x, set); /*$ mx2 = x^2$*/
+  decNumberMinus (&mx2, &mx2, set);    /*$ mx2 = -x^2  $*/
   for (i=0; i<2*set->digits; i++) {
     decNumberMultiply (&f, &f, &mx2, set);
     decNumberAdd (&g, &g, &two_decNumber, set); 
@@ -365,11 +372,11 @@
 @ @c
 void * mp_initialize_decimal_math (MP mp) {
   math_data *math = (math_data *)mp_xmalloc(mp,1,sizeof(math_data));
-  // various decNumber initializations
-  decContextDefault(&set, DEC_INIT_BASE); // initialize
-  set.traps=0;                     // no traps, thank you
-  decContextDefault(&limitedset, DEC_INIT_BASE); // initialize
-  limitedset.traps=0;                     // no traps, thank you
+  /* various decNumber initializations */
+  decContextDefault(&set, DEC_INIT_BASE); /* initialize */
+  set.traps=0;                     /* no traps, thank you */
+  decContextDefault(&limitedset, DEC_INIT_BASE); /* initialize */
+  limitedset.traps=0;                     /* no traps, thank you */
   limitedset.emax = 999999;
   limitedset.emin = -999999;
   set.digits = DECPRECISION_DEFAULT;
@@ -748,7 +755,7 @@
 }
 
 
-@* Query functions
+@* Query functions.
 
 @ Convert a number to a scaled value. |decNumberToInt32| is not
 able to make this conversion properly, so instead we are using
@@ -776,8 +783,8 @@
   result = decNumberToInt32(A.data.num, &set);
   if (set.status == DEC_Invalid_operation) {
      set.status = 0;
-     // mp->arith_error = 1;
-     return 0; // whatever
+     /* |mp->arith_error = 1;| */
+     return 0; /* whatever */
   } else {
      return result;
   }
@@ -788,8 +795,8 @@
   result = decNumberToUInt32(A.data.num, &set);
   if (set.status == DEC_Invalid_operation) {
      set.status = 0;
-     // mp->arith_error = 1;
-     return mp_false_code; // whatever
+     /* |mp->arith_error = 1;| */
+     return mp_false_code; /* whatever */
   } else {
      return result ;
   }
@@ -804,8 +811,8 @@
      return res;
   } else {
      free(buffer);
-     //mp->arith_error = 1;
-     return 0.0; // whatever
+     /* |mp->arith_error = 1;| */
+     return 0.0; /* whatever */
   }
 }
 int mp_number_odd(mp_number A) {
@@ -994,7 +1001,7 @@
 @ 
 @d halfp(A) (integer)((unsigned)(A) >> 1)
 
-@* Scanning numbers in the input
+@* Scanning numbers in the input.
 
 The definitions below are temporarily here
 
@@ -1038,7 +1045,7 @@
         mp_snprintf (msg, 256, "Number is too precise (numberprecision = %d)", set.digits);
         mp_error (mp, msg, hlp, true);
       }
-    } else { // this also captures underflow
+    } else { /* this also captures underflow */
       const char *hlp[] = {"I could not handle this number specification",
                            "Error:",
                            "",
@@ -1150,46 +1157,46 @@
   decNumberFromInt32(&fone, fraction_one);
   decNumberFromInt32(&fhalf, fraction_half);
   decNumberFromInt32(&ftwo, fraction_two);
-  decNumberFromInt32(&sqrtfive, 5);                     // sqrt(5)
+  decNumberFromInt32(&sqrtfive, 5);                     /*$\sqrt{5}$*/
   decNumberSquareRoot(&sqrtfive, &sqrtfive, &set);          
 
 
-  decNumberDivide(&arg1,sf.data.num, &i16, &set); // arg1 = sf / 16
-  decNumberSubtract(&arg1,st.data.num,&arg1, &set); // arg1 = st - arg1
-  decNumberDivide(&arg2,st.data.num, &i16, &set); // arg2 = st / 16
-  decNumberSubtract(&arg2,sf.data.num,&arg2, &set); // arg2 = sf - arg2
-  mp_decimal_take_fraction (mp, &acc, &arg1, &arg2); // acc = (arg1 * arg2) / fmul
+  decNumberDivide(&arg1,sf.data.num, &i16, &set); /* arg1 = sf / 16*/
+  decNumberSubtract(&arg1,st.data.num,&arg1, &set); /* arg1 = st - arg1*/
+  decNumberDivide(&arg2,st.data.num, &i16, &set); /* arg2 = st / 16*/
+  decNumberSubtract(&arg2,sf.data.num,&arg2, &set); /* arg2 = sf - arg2*/
+  mp_decimal_take_fraction (mp, &acc, &arg1, &arg2); /* acc = (arg1 * arg2) / fmul*/
 
   decNumberCopy(&arg1, &acc);
-  decNumberSubtract(&arg2, ct.data.num, cf.data.num, &set); // arg2 = ct - cf
-  mp_decimal_take_fraction (mp, &acc, &arg1, &arg2); // acc = (arg1 * arg2 ) / fmul
+  decNumberSubtract(&arg2, ct.data.num, cf.data.num, &set); /* arg2 = ct - cf*/
+  mp_decimal_take_fraction (mp, &acc, &arg1, &arg2); /* acc = (arg1 * arg2 ) / fmul*/
 
-  decNumberSquareRoot(&arg1, &two_decNumber, &set); // arg1 = sqrt(2)
-  decNumberMultiply(&arg1, &arg1, &fone, &set);     // arg1 = arg1 * fmul
-  mp_decimal_take_fraction (mp, &r1, &acc, &arg1);  // r1 = (acc * arg1) / fmul
-  decNumberAdd(&num, &ftwo, &r1, &set);             // num = ftwo + r1
+  decNumberSquareRoot(&arg1, &two_decNumber, &set); /* arg1 = $\sqrt{2}$*/
+  decNumberMultiply(&arg1, &arg1, &fone, &set);     /* arg1 = arg1 * fmul*/
+  mp_decimal_take_fraction (mp, &r1, &acc, &arg1);  /* r1 = (acc * arg1) / fmul*/
+  decNumberAdd(&num, &ftwo, &r1, &set);             /* num = ftwo + r1*/
   
-  decNumberSubtract(&arg1,&sqrtfive, &one, &set);   // arg1 = sqrt(5) - 1
-  decNumberMultiply(&arg1,&arg1,&fhalf, &set);      // arg1 = arg1 * fmul/2
-  decNumberMultiply(&arg1,&arg1,&three_decNumber, &set); // arg1 = arg1 * 3
+  decNumberSubtract(&arg1,&sqrtfive, &one, &set);   /* arg1 = $\sqrt{5}$ - 1*/
+  decNumberMultiply(&arg1,&arg1,&fhalf, &set);      /* arg1 = arg1 * fmul/2*/
+  decNumberMultiply(&arg1,&arg1,&three_decNumber, &set); /* arg1 = arg1 * 3*/
 
-  decNumberSubtract(&arg2,&three_decNumber, &sqrtfive, &set); // arg2 = 3 - sqrt(5)
-  decNumberMultiply(&arg2,&arg2,&fhalf, &set);            // arg2 = arg2 * fmul/2
-  decNumberMultiply(&arg2,&arg2,&three_decNumber, &set);  // arg2 = arg2 * 3
-  mp_decimal_take_fraction (mp, &r1, ct.data.num, &arg1) ; // r1 = (ct * arg1) / fmul
-  mp_decimal_take_fraction (mp, &r2, cf.data.num, &arg2);  // r2 = (cf * arg2) / fmul
+  decNumberSubtract(&arg2,&three_decNumber, &sqrtfive, &set); /* arg2 = 3 - $\sqrt{5}$*/
+  decNumberMultiply(&arg2,&arg2,&fhalf, &set);            /* arg2 = arg2 * fmul/2*/
+  decNumberMultiply(&arg2,&arg2,&three_decNumber, &set);  /* arg2 = arg2 * 3*/
+  mp_decimal_take_fraction (mp, &r1, ct.data.num, &arg1) ; /* r1 = (ct * arg1) / fmul*/
+  mp_decimal_take_fraction (mp, &r2, cf.data.num, &arg2);  /* r2 = (cf * arg2) / fmul*/
 
-  decNumberFromInt32(&denom, fraction_three);  // denom = 3fmul
-  decNumberAdd(&denom, &denom, &r1, &set);     // denom = denom + r1
-  decNumberAdd(&denom, &denom, &r2, &set);     // denom = denom + r1
+  decNumberFromInt32(&denom, fraction_three);  /* denom = 3fmul*/
+  decNumberAdd(&denom, &denom, &r1, &set);     /* denom = denom + r1*/
+  decNumberAdd(&denom, &denom, &r2, &set);     /* denom = denom + r1*/
 
   decNumberCompare(&arg1, t.data.num, &one, &set); 
-  if (!decNumberIsZero(&arg1)) {                 // t != r1
-    decNumberDivide(&num, &num, t.data.num, &set); // num = num / t
+  if (!decNumberIsZero(&arg1)) {                 /* t != r1*/
+    decNumberDivide(&num, &num, t.data.num, &set); /* num = num / t*/
   }
-  decNumberCopy(&r2, &num);                        // r2 = num / 4
+  decNumberCopy(&r2, &num);                        /* r2 = num / 4*/
   decNumberDivide(&r2, &r2, &four_decNumber, &set);
-  if (decNumberLess(&denom,&r2)) { // num/4 >= denom => denom < num/4
+  if (decNumberLess(&denom,&r2)) { /* num/4 >= denom => denom < num/4*/
     decNumberFromInt32(ret->data.num,fraction_four);
   } else {
     mp_decimal_make_fraction (mp, ret->data.num, &num, &denom);
@@ -1501,10 +1508,10 @@
   decNumberMultiply(&bsq, &b, &b, &set);
   decNumberAdd(&a, &asq, &bsq, &set);
   decNumberSquareRoot(ret->data.num, &a, &set);
-  //if (set.status != 0) {
-  //  mp->arith_error = true;
-  //  decNumberCopy(ret->data.num, &EL_GORDO_decNumber);
-  //}
+  /*|if (set.status != 0) {|*/
+  /*|  mp->arith_error = true;|*/
+  /*|  decNumberCopy(ret->data.num, &EL_GORDO_decNumber);|*/
+  /*|}|*/
   mp_check_decNumber(mp, ret->data.num, &set);
 }
 
@@ -1696,12 +1703,12 @@
         decNumberAdd      (s,    s,    &pxa, &set);
 
         decNumberFromInt32(&n2, 2*n+1);
-        decNumberMultiply (&fac, &fac, &n2,  &set); // fac = fac * (2*n+1)
+        decNumberMultiply (&fac, &fac, &n2,  &set); /* fac = fac * (2*n+1)*/
         decNumberPower(&pxa, theangle, &n2,  &limitedset);
         decNumberDivide   (&pxa, &pxa, &fac, &set);
         decNumberMultiply (&pxa, &pxa, &p,   &set);
         decNumberAdd      (c,    c,    &pxa, &set);
-	// printf("\niteration %2d: %-42s %-42s",n,tostring(c), tostring(s));
+	/* |printf("\niteration %2d: %-42s %-42s",n,tostring(c), tostring(s));|*/
     }
 }
 
@@ -1750,7 +1757,7 @@
    mp_check_decNumber(mp, n_sin->data.num, &set);
 }
 
-@ This is the http://www-cs-faculty.stanford.edu/~uno/programs/rng.c
+@ This is the {\tt http://www-cs-faculty.stanford.edu/~uno/programs/rng.c}
 with  small cosmetic modifications.
 
 @c
@@ -1773,7 +1780,7 @@
 }
 /* */ 
 /* the following routines are from exercise 3.6--15 */
-/* after calling ran_start, get new randoms by, e.g., "x=ran_arr_next()" */
+/* after calling |ran_start|, get new randoms by, e.g., "|x=ran_arr_next()|" */
 /* */ 
 #define QUALITY 1009 /* recommended quality level for high-res use */
 static long ran_arr_buf[QUALITY];
@@ -1783,8 +1790,8 @@
 #define TT  70   /* guaranteed separation between streams */
 #define is_odd(x)  ((x)&1)          /* units bit of x */
 /* */ 
-static void ran_start(long seed) /* do this before using ran_array */
-  /* long seed             selector for different streams */
+static void ran_start(long seed) /* do this before using |ran_array| */
+  /* |long seed|             selector for different streams */
 {
   register int t,j;
   long x[KK+KK-1];              /* the preparation buffer */
@@ -1972,32 +1979,32 @@
 
 
 
-@ The following subroutine could be used  in norm_rand and tests  if $ab$ is
+@ The following subroutine could be used  in |norm_rand| and tests  if $ab$ is
 greater than, equal to, or less than~$cd$.
 The result is $+1$, 0, or~$-1$ in the three respective cases.
-This is not necessary, even if it's shorter than the current ab_vs_cd 
-and looks as a native implememtation.
+This is not necessary, even if it's shorter than the current |ab_vs_cd| 
+and looks as a native implementation.
 
 @c
 /* 
-void mp_decimal_ab_vs_cd (MP mp, mp_number *ret, mp_number a_orig, mp_number b_orig, mp_number c_orig, mp_number d_orig) {
-  decNumber a, b, c, d;
-  decNumber ab, cd;
-  (void)mp;
-
-  decNumberCopy(&a, (decNumber *)a_orig.data.num);
-  decNumberCopy(&b, (decNumber *)b_orig.data.num);
-  decNumberCopy(&c, (decNumber *)c_orig.data.num);
-  decNumberCopy(&d, (decNumber *)d_orig.data.num);
-
-
-  decNumberMultiply (&ab, (decNumber *)a_orig.data.num, (decNumber *)b_orig.data.num, &set);
-  decNumberMultiply (&cd, (decNumber *)c_orig.data.num, (decNumber *)d_orig.data.num, &set);
-  decNumberCompare(ret->data.num, &ab, &cd, &set);
-  mp_check_decNumber(mp, ret->data.num, &set);
-  return;
-
-}
+|void mp_decimal_ab_vs_cd (MP mp, mp_number *ret, mp_number a_orig, mp_number b_orig, mp_number c_orig, mp_number d_orig) {|
+|  decNumber a, b, c, d;|
+|  decNumber ab, cd;|
+|  (void)mp;|
+||
+|  decNumberCopy(&a, (decNumber *)a_orig.data.num);|
+|  decNumberCopy(&b, (decNumber *)b_orig.data.num);|
+|  decNumberCopy(&c, (decNumber *)c_orig.data.num);|
+|  decNumberCopy(&d, (decNumber *)d_orig.data.num);|
+||
+||
+|  decNumberMultiply (&ab, (decNumber *)a_orig.data.num, (decNumber *)b_orig.data.num, &set);|
+|  decNumberMultiply (&cd, (decNumber *)c_orig.data.num, (decNumber *)d_orig.data.num, &set);|
+|  decNumberCompare(ret->data.num, &ab, &cd, &set);|
+|  mp_check_decNumber(mp, ret->data.num, &set);|
+|  return;|
+||
+|}|
 */
 
 

Modified: trunk/Build/source/texk/web2c/mplibdir/mpmathdouble.w
===================================================================
--- trunk/Build/source/texk/web2c/mplibdir/mpmathdouble.w	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/mplibdir/mpmathdouble.w	2017-02-15 22:47:54 UTC (rev 43237)
@@ -1,4 +1,4 @@
-% $Id: mpmathdouble.w 2091 2016-09-16 23:07:58Z luigi $
+% $Id: mpmathdouble.w 2118 2017-02-15 17:49:54Z luigi $
 %
 % This file is part of MetaPost;
 % the MetaPost program is in the public domain.
@@ -10,7 +10,10 @@
 \font\logos=logosl10
 \def\MF{{\tenlogo META}\-{\tenlogo FONT}}
 \def\MP{{\tenlogo META}\-{\tenlogo POST}}
+\def\pct!{{\char`\%}} % percent sign in ordinary text
+\def\psqrt#1{\sqrt{\mathstrut#1}}
 
+
 \def\title{Math support functions for IEEE double based math}
 \pdfoutput=1
 
@@ -645,7 +648,7 @@
 @ 
 @d halfp(A) (integer)((unsigned)(A) >> 1)
 
-@* Scanning numbers in the input
+@* Scanning numbers in the input.
 
 The definitions below are temporarily here
 
@@ -1257,7 +1260,7 @@
 }
 /* */ 
 /* the following routines are from exercise 3.6--15 */
-/* after calling ran_start, get new randoms by, e.g., "x=ran_arr_next()" */
+/* after calling |ran_start|, get new randoms by, e.g., |x=ran_arr_next()| */
 /* */ 
 #define QUALITY 1009 /* recommended quality level for high-res use */
 static long ran_arr_buf[QUALITY];
@@ -1267,7 +1270,7 @@
 #define TT  70   /* guaranteed separation between streams */
 #define is_odd(x)  ((x)&1)          /* units bit of x */
 /* */ 
-static void ran_start(long seed) /* do this before using ran_array */
+static void ran_start(long seed) /* do this before using |ran_array| */
   /* long seed             selector for different streams */
 {
   register int t,j;
@@ -1464,7 +1467,7 @@
 
 
 
-@ The following subroutine is used only in norm_rand and tests  if $ab$ is
+@ The following subroutine is used only in |norm_rand| and tests  if $ab$ is
 greater than, equal to, or less than~$cd$.
 The result is $+1$, 0, or~$-1$ in the three respective cases.
 

Modified: trunk/Build/source/texk/web2c/mplibdir/mpost.w
===================================================================
--- trunk/Build/source/texk/web2c/mplibdir/mpost.w	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/mplibdir/mpost.w	2017-02-15 22:47:54 UTC (rev 43237)
@@ -4,7 +4,12 @@
 
 \font\tenlogo=logo10 % font used for the METAFONT logo
 \def\MP{{\tenlogo META}\-{\tenlogo POST}}
+\def\MF{{\tenlogo META}\-{\tenlogo FONT}}
+\def\MP{{\tenlogo META}\-{\tenlogo POST}}
+\def\pct!{{\char`\%}} % percent sign in ordinary text
+\def\psqrt#1{\sqrt{\mathstrut#1}}
 
+
 \def\title{MetaPost executable}
 \def\[#1]{#1.}
 \pdfoutput=1
@@ -608,7 +613,6 @@
           struct stat source_stat, target_stat;
           char *mpname = mpost_xstrdup(f);
           *(mpname + strlen(mpname) -1 ) = '\0';
-          /* printf("statting %s and %s\n", mpname, f); */
           if ((stat(f, &target_stat) >= 0) &&
               (stat(mpname, &source_stat) >= 0)) {
 #if HAVE_ST_MTIM

Modified: trunk/Build/source/texk/web2c/mplibdir/mpstrings.w
===================================================================
--- trunk/Build/source/texk/web2c/mplibdir/mpstrings.w	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/mplibdir/mpstrings.w	2017-02-15 22:47:54 UTC (rev 43237)
@@ -2,10 +2,18 @@
 % the MetaPost program is in the public domain.
 % See the <Show version...> code in mpost.w for more info.
 
+\font\tenlogo=logo10 % font used for the METAFONT logo
+\font\logos=logosl10
+\def\MF{{\tenlogo META}\-{\tenlogo FONT}}
+\def\MP{{\tenlogo META}\-{\tenlogo POST}}
+\def\pct!{{\char`\%}} % percent sign in ordinary text
+\def\psqrt#1{\sqrt{\mathstrut#1}}
+
+
 @* String handling.
 
 
-@ First, we will need some stuff from other files
+@ First, we will need some stuff from other files.
 @c
 #include <w2c/config.h>
 #include <stdio.h>
@@ -19,7 +27,7 @@
 #include <time.h>               /* for struct tm \& co */
 #include "mpstrings.h"          /* internal header */
 
-@ Then there is some stuff we need to prepare ourselves
+@ Then there is some stuff we need to prepare ourselves.
 
 @(mpstrings.h@>=
 #ifndef MPSTRINGS_H
@@ -173,7 +181,7 @@
   mp->cur_string_size = 0;
 }
 
-@ Here are the definitions
+@ Here are the definitions:
 @<Definitions@>=
 extern void mp_initialize_strings (MP mp);
 extern void mp_dealloc_strings (MP mp);
@@ -250,7 +258,7 @@
 |make_string| has stored a new string in the avl tree, the
 |cur_string| variable has to be prepared so that it will be ready to
 start creating a new string. The initial size is fairly arbitrary, but
-setting it a little higher than expected helps prevent |reallocs|
+setting it a little higher than expected helps prevent |reallocs|.
 
 @<Definitions@>=
 void mp_reset_cur_string (MP mp);
@@ -380,7 +388,7 @@
   size_t saved_cur_string_size = mp->cur_string_size;
   needed = a->len + b->len;
   mp->cur_length = 0;
-  /* mp->cur_string = NULL; */ /* needs malloc, spotted by clang */
+  /*| mp->cur_string = NULL;| */ /* needs malloc, spotted by clang */
   mp->cur_string = (unsigned char *) mp_xmalloc (mp, needed+1, sizeof (unsigned char)); 
   mp->cur_string_size = 0;
   str_room (needed+1);

Modified: trunk/Build/source/texk/web2c/mplibdir/mpxout.w
===================================================================
--- trunk/Build/source/texk/web2c/mplibdir/mpxout.w	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/mplibdir/mpxout.w	2017-02-15 22:47:54 UTC (rev 43237)
@@ -1814,7 +1814,7 @@
 a character in a virtual font.
 
 @ The definition of \.{DVI} files refers to six registers,
-$(h,v,w,x,y,z)$, which hold web_integer values in \.{DVI} units.
+$(h,v,w,x,y,z)$, which hold |web_integer| values in \.{DVI} units.
 These units come directly from the input file except they need to be
 rescaled when typesetting characters from a virtual font.
 The stack of $(h,v,w,x,y,z)$ values is represented by six arrays
@@ -2682,7 +2682,7 @@
 }
 
 @ GROFF font description files use octal character codes
-|groff_font(5)|: The code can be any web_integer.  If it starts with
+|groff_font(5)|: The code can be any |web_integer|.  If it starts with
 a 0 it will be interpreted as octal; if it starts with  0x
 or 0X it will be intepreted as hexadecimal.
 
@@ -2700,10 +2700,10 @@
   return 0;
 }
 
-@ Troff output files contain few if any non-web_integers, but this program is
+@ Troff output files contain few if any non-|web_integers|, but this program is
 prepared to read floats whenever they seem reasonable; i.e., when the
 number is not being used for character positioning.  (For non-PostScript
-applications h and v are usually in pixels and should be web_integers.)
+applications h and v are usually in pixels and should be |web_integers|.)
 
 @c 
 static float mpx_get_float(MPX mpx, char *s) {
@@ -2742,7 +2742,7 @@
 }
 
 @ GROFF font description files have metrics field
-of comma-separated web_integers. Traditional troff
+of comma-separated |web_integers|. Traditional troff
 have a float in this position. The value is not
 used anyway - thus just skip the value,
  eat all non-space chars.
@@ -2949,7 +2949,7 @@
 this function needs to be rewritten as follows:
 
 \item{1.}The `metrics' field parsed by |mpx_get_float(lin);| may include
-   a comma-separated list of up to six decimal web_integers rather
+   a comma-separated list of up to six decimal |web_integers| rather
    than just a single floating-point number.
 
 \item{2.}The `charcode' field parsed by |lastcode = mpx_get_int(arg_tail);|

Modified: trunk/Build/source/texk/web2c/mplibdir/pngout.w
===================================================================
--- trunk/Build/source/texk/web2c/mplibdir/pngout.w	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/mplibdir/pngout.w	2017-02-15 22:47:54 UTC (rev 43237)
@@ -468,13 +468,14 @@
          cairo_fill(mp->png->cr);
        }
       wd = mp_get_char_dimension (mp, mp->font_name[fn], k, 'w');
-      /* wd/100 is the size in PS point , ie wd =100*real_wd   */
-      /* but _without_ considering scaling.                    */ 
-      /* We have a scale factor of                             */
-      /* (ds/1000.0)*scf                                       */
-      /*  so to match the scale wd should be                   */
-      /*  1000*real_wd *scf /(ds *scf)                         */ 
-      /* i.e. 10*wd/ds                                         */
+/* $wd/100$ is the size in PS point , i.e, $wd =100\cdot real\_wd$   
+        but without considering scaling.
+       We have a scale factor of                             
+       $(ds/1000.0)\cdot scf$                                
+        so to match the scale wd should be                   
+        $1000\cdot real_wd\cdot scf /(ds\cdot scf)$          
+       i.e. $wd = 10\cdot wd/ds$.
+*/
       wd *= 10.0/ds;
       cairo_translate(mp->png->cr,wd,0);
   }
@@ -483,7 +484,7 @@
 
 @ When stroking a path with an elliptical pen, it is necessary to transform
 the coordinate system so that a unit circular pen will have the desired shape.
-To keep this transformation local, we enclose it in a $$\&{<g>}\ldots\&{</g>}$$
+To keep this transformation local, we enclose it in a $$\&{\<g>}\ldots\&{\</g>}$$
 block. Any translation component must be applied to the path being stroked
 while the rest of the transformation must apply only to the pen.
 If |fill_also=true|, the path is to be filled as well as stroked so we must

Modified: trunk/Build/source/texk/web2c/mplibdir/psout.w
===================================================================
--- trunk/Build/source/texk/web2c/mplibdir/psout.w	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/mplibdir/psout.w	2017-02-15 22:47:54 UTC (rev 43237)
@@ -234,7 +234,7 @@
 @c
 static void mp_ps_print_int (MP mp,integer n) { /* prints an integer in decimal form */
   integer m; /* used to negate |n| in possibly dangerous cases */
-  char outbuf [24]; /* dig[23], plus terminating \0 */
+  char outbuf [24]; /* dig[23], plus terminating |\0| */
   unsigned char dig[23];  /* digits in a number, for rounding */
   int k = 0; /* index to current digit; we assume that $|n|<10^{23}$ */
   int l = 0; 
@@ -1385,7 +1385,7 @@
             mp->selector = save_selector;
             mp->ps->fm_file = NULL;
         }
-        /* mp_xfree(n); */
+        /* |mp_xfree(n);| */
         break;
     case MAPLINE:
         fm_scan_line (mp);
@@ -3499,7 +3499,7 @@
     t1_scan_param (mp, (font_number)tex_font, fm_cur);
   } while (mp->ps->t1_in_eexec == 0);
 
-  /* t1_start_eexec (mp,fm_cur); */
+  /* |t1_start_eexec (mp,fm_cur);| */
   cc_init ();
   cs_init (mp);
   /* the boolean is needed to make sure that |t1_read_subrs| 
@@ -3554,7 +3554,7 @@
 
 @<Variables for the charstring parser@>=
 double flex_hint_data[14]; /* store temp. coordinates of flex hints */ 
-unsigned int  flex_hint_index ;  /* index for flex_hint_data */
+unsigned int  flex_hint_index ;  /* index for |flex_hint_data| */
 boolean ignore_flex_hint; /* skip hint for flex */
 double cur_x, cur_y; /* current point */
 double orig_x, orig_y; /* origin (for seac) */
@@ -3803,7 +3803,7 @@
                         (int) (stack_ptr - cc_stack), (int) cc->nargs);
        }
       switch (cc - cc_tab) {
-      case CS_CLOSEPATH: /* - CLOSEPATH |- */
+      case CS_CLOSEPATH: /* |- CLOSEPATH |- */
         cs_debug(CS_CLOSEPATH);
         finish_subpath(mp, f);
         cc_clear ();
@@ -3873,7 +3873,7 @@
         cc_clear ();
         break;
         /* hinting commands */
-      case CS_DOTSECTION: /* - DOTSECTION |- */
+      case CS_DOTSECTION: /* |- DOTSECTION |- */
         cs_debug(CS_DOTSECTION);
         cc_clear ();
         break;
@@ -3909,7 +3909,7 @@
           (void)cs_parse(mp,f,standard_glyph_names[a2],0);
         }
         break;
-      case CS_ENDCHAR: /* - ENDCHAR |- */
+      case CS_ENDCHAR: /* |- ENDCHAR |- */
         cs_debug(CS_ENDCHAR);
         cc_clear ();
         return true;
@@ -3962,32 +3962,32 @@
         if (a1==1) 
            f->ignore_flex_hint = 1; 
         if (a1==0) {
-           /* double first_x,first_y,first_r_x,first_r_y;  */
-           /* double join_x,join_y,join_l_x,join_l_y,join_r_x,join_r_y; */
-           /* double last_x,last_y,last_l_x,last_l_y; */
-           /* /\* a := glyph "q" of "cmti12"; *\/ */
-	   /* first_x = 206.0; first_y = -194.0; */
-           /* double ref_x,ref_y ; */
-	   /* ref_x = first_x+f->flex_hint_data[0]; */
-	   /* ref_y = first_y+f->flex_hint_data[1]; */
-           /* printf("1:(%f, %f) 2:(%f,%f) 3:(%f,%f) 4:(%f,%f) 5:(%f,%f) 6:(%f,%f) 7:(%f,%f)\n", */
-	   /* f->flex_hint_data[0],f->flex_hint_data[1], */
-	   /* f->flex_hint_data[2],f->flex_hint_data[3], */
-	   /* f->flex_hint_data[4],f->flex_hint_data[5], */
-	   /* f->flex_hint_data[6],f->flex_hint_data[7], */
-	   /* f->flex_hint_data[8],f->flex_hint_data[9], */
-	   /* f->flex_hint_data[10],f->flex_hint_data[11], */
-	   /* f->flex_hint_data[12],f->flex_hint_data[13]); */
- 	   /* printf("Reference=(%f,%f)\n",ref_x,ref_y); */
-	   /* first_r_x = ref_x + f->flex_hint_data[2]; first_r_y    = ref_y + f->flex_hint_data[3];  */
-	   /* join_l_x  = first_r_x + f->flex_hint_data[4]; join_l_y = first_r_y + f->flex_hint_data[5];  */
-	   /* join_x    = join_l_x + f->flex_hint_data[6]; join_y    = join_l_y + f->flex_hint_data[7]; */
-	   /* join_r_x  = join_x + f->flex_hint_data[8]; join_r_y    = join_y + f->flex_hint_data[9]; */
-	   /* last_l_x  = join_r_x + f->flex_hint_data[10]; last_l_y = join_r_y + f->flex_hint_data[11]; */
-	   /* last_x    = last_l_x + f->flex_hint_data[12]; last_y   = last_l_y + f->flex_hint_data[13]; */
-	   /* printf("(%f,%f) .. (%f,%f) and (%f,%f) .. (%f,%f) .. (%f,%f) and (%f,%f) .. (%f,%f)\n", */
-           /*   first_x,first_y,first_r_x,first_r_y, join_l_x,join_l_y, join_x,join_y, join_r_x,join_r_y, */
-	   /*   last_l_x,last_l_y,last_x,last_y); */
+           /*| double first_x,first_y,first_r_x,first_r_y;  |*/
+           /*| double join_x,join_y,join_l_x,join_l_y,join_r_x,join_r_y; |*/
+           /*| double last_x,last_y,last_l_x,last_l_y; |*/
+           /*| |// a := glyph "q" of "cmti12";|  |*/
+	   /*| first_x = 206.0; first_y = -194.0; |*/
+           /*| double ref_x,ref_y ; |*/
+	   /*| ref_x = first_x+f->flex_hint_data[0]; |*/
+	   /*| ref_y = first_y+f->flex_hint_data[1]; |*/
+           /*| printf("1:(%f, %f) 2:(%f,%f) 3:(%f,%f) 4:(%f,%f) 5:(%f,%f) 6:(%f,%f) 7:(%f,%f)\n", |*/
+	   /*| f->flex_hint_data[0],f->flex_hint_data[1], |*/
+	   /*| f->flex_hint_data[2],f->flex_hint_data[3], |*/
+	   /*| f->flex_hint_data[4],f->flex_hint_data[5], |*/
+	   /*| f->flex_hint_data[6],f->flex_hint_data[7], |*/
+	   /*| f->flex_hint_data[8],f->flex_hint_data[9], |*/
+	   /*| f->flex_hint_data[10],f->flex_hint_data[11], |*/
+	   /*| f->flex_hint_data[12],f->flex_hint_data[13]); |*/
+ 	   /*| printf("Reference=(%f,%f)\n",ref_x,ref_y); |*/
+	   /*| first_r_x = ref_x + f->flex_hint_data[2]; first_r_y    = ref_y + f->flex_hint_data[3];  |*/
+	   /*| join_l_x  = first_r_x + f->flex_hint_data[4]; join_l_y = first_r_y + f->flex_hint_data[5];  |*/
+	   /*| join_x    = join_l_x + f->flex_hint_data[6]; join_y    = join_l_y + f->flex_hint_data[7]; |*/
+	   /*| join_r_x  = join_x + f->flex_hint_data[8]; join_r_y    = join_y + f->flex_hint_data[9]; |*/
+	   /*| last_l_x  = join_r_x + f->flex_hint_data[10]; last_l_y = join_r_y + f->flex_hint_data[11]; |*/
+	   /*| last_x    = last_l_x + f->flex_hint_data[12]; last_y   = last_l_y + f->flex_hint_data[13]; |*/
+	   /*| printf("(%f,%f) .. (%f,%f) and (%f,%f) .. (%f,%f) .. (%f,%f) and (%f,%f) .. (%f,%f)\n", |*/
+           /*|   first_x,first_y,first_r_x,first_r_y, join_l_x,join_l_y, join_x,join_y, join_r_x,join_r_y, |*/
+	   /*|   last_l_x,last_l_y,last_x,last_y); |*/
 
            f->ignore_flex_hint = 0; 
 	   f->flex_hint_index = 0;

Modified: trunk/Build/source/texk/web2c/mplibdir/svgout.w
===================================================================
--- trunk/Build/source/texk/web2c/mplibdir/svgout.w	2017-02-15 22:12:27 UTC (rev 43236)
+++ trunk/Build/source/texk/web2c/mplibdir/svgout.w	2017-02-15 22:47:54 UTC (rev 43237)
@@ -881,7 +881,7 @@
                    mp_svg_open_starttag(mp,"path");
                    mp_svg_attribute(mp, "style", "fill-rule: evenodd;");
                    while (p!=NULL) {
-                     if (mp->svg->loc>0) mp->svg->loc--; /* drop a '\0' */
+                     if (mp->svg->loc>0) mp->svg->loc--; /* drop a '\\0' */
                      mp_svg_font_path_out(mp, gr_path_p((mp_fill_object *)p));
                      p=p->next;
                    }
@@ -922,7 +922,7 @@
   size_t l; /* string length */
   boolean transformed ;
   double ds; /* design size and scale factor for a text node */
-  /* clang: never read: fname = mp->font_ps_name[gr_font_n(p)]; */
+  /* clang: never read: |fname = mp->font_ps_name[gr_font_n(p)];| */
   s = (unsigned char *)gr_text_p(p);
   l = gr_text_l(p);
   transformed=(gr_txx_val(p)!=unity)||(gr_tyy_val(p)!=unity)||



More information about the tex-live-commits mailing list