From 73dd1c51aff08a045a08271cf51bacd2d07c802c Mon Sep 17 00:00:00 2001
From: Hans Hagen <pragma@wxs.nl>
Date: Wed, 30 Oct 2013 13:30:00 +0100
Subject: beta 2013.10.30 13:30

---
 metapost/context/base/mp-grap.mpiv | 10 ++++++----
 metapost/context/base/mp-mlib.mpiv | 24 ++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 4 deletions(-)

(limited to 'metapost')

diff --git a/metapost/context/base/mp-grap.mpiv b/metapost/context/base/mp-grap.mpiv
index 64e63b90c..81a410db2 100644
--- a/metapost/context/base/mp-grap.mpiv
+++ b/metapost/context/base/mp-grap.mpiv
@@ -359,7 +359,7 @@ vardef graph_set_bounds@#(expr l, h) =
   graph_clear_bounds@# ;
   if @#graph_coordinate_type>0 :
      @#low  = if unknown l :
-                whatever 
+                whatever
               else :
                 if abs @#graph_coordinate_type=log : graph_mlog fi if string l : scantokens fi l
               fi ;
@@ -369,7 +369,7 @@ vardef graph_set_bounds@#(expr l, h) =
                 if abs @#graph_coordinate_type=log : graph_mlog fi if string h : scantokens fi h
               fi ;
   else :
-    -@#high = if unknown l : 
+    -@#high = if unknown l :
                 whatever
               else :
                 if abs @#graph_coordinate_type=log : graph_mlog fi if string l : scantokens fi l
@@ -1075,6 +1075,8 @@ enddef ;
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
+% we could pass via variables and save escaping
+
 Ten_to0 =     1 ;
 Ten_to1 =    10 ;
 Ten_to2 =   100 ;
@@ -1082,7 +1084,7 @@ Ten_to3 =  1000 ;
 Ten_to4 = 10000 ;
 
 vardef escaped_format(expr s) =
-    "" for n=1 upto length(s) : &
+    "" for n=0 upto length(s) : &
         if ASCII substring (n,n+1) of s = 37 :
             "@"
         else :
@@ -1092,7 +1094,7 @@ vardef escaped_format(expr s) =
 enddef ;
 
 vardef strfmt(expr f, x) =
-    "\MPgraphformat{" & escaped_format(f) & "}{" & (if string x : x else : decimal x fi) & "}"
+    "\MPgraphformat{" & escaped_format(f) & "}{" & mfun_tagged_string(x) & "}"
 enddef ;
 
 vardef format(expr f, x) = textext(strfmt(f, x)) enddef ;
diff --git a/metapost/context/base/mp-mlib.mpiv b/metapost/context/base/mp-mlib.mpiv
index e667e4064..6139a63c2 100644
--- a/metapost/context/base/mp-mlib.mpiv
+++ b/metapost/context/base/mp-mlib.mpiv
@@ -841,3 +841,27 @@ def passvariable(expr key, value) =
         else                   : "2:" & key & "=" & value
         fi ;
 enddef ;
+
+vardef tostring(expr value) =
+    if     numeric   value : mfun_numeric_to_string(value)
+    elseif pair      value : mfun_pair_to_string(value)
+    elseif rgbcolor  value : mfun_rgbcolor_to_string(value)
+    elseif cmykcolor value : mfun_cmykcolor_to_string(value)
+    elseif boolean   value : mfun_boolean_to_string(value)
+    elseif path      value : mfun_path_to_string(value)
+    elseif transform value : mfun_transform_to_string(value)
+    else                   : value
+    fi
+enddef ;
+
+vardef mfun_tagged_string(expr value) =
+    if     numeric   value : "1:" & mfun_numeric_to_string(value)
+    elseif pair      value : "4:" & mfun_pair_to_string(value)
+    elseif rgbcolor  value : "5:" & mfun_rgbcolor_to_string(value)
+    elseif cmykcolor value : "6:" & mfun_cmykcolor_to_string(value)
+    elseif boolean   value : "3:" & mfun_boolean_to_string(value)
+    elseif path      value : "7:" & mfun_path_to_string(value)
+    elseif transform value : "8:" & mfun_transform_to_string(value)
+    else                   : "2:" & value
+    fi
+enddef ;
-- 
cgit v1.2.3