summaryrefslogtreecommitdiff
path: root/tex/context/base/m-graph.mkiv
blob: c9223488480ecb08c720de7798fd86491a4db231 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
%D \module
%D   [       file=m-graph,
%D        version=2008.09.08,
%D          title=\CONTEXT\ Extra Modules,
%D       subtitle=\METAPOST\ graph module support,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA / Hans Hagen \& Ton Otten}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

% We just assume lua specification instead of the graph ones that
% are limited by what mp can do. We support @ as replacement for
% the percent symbol. We also add a specifier when no one is given.

\startluacode
    local function strip(s)
        return "\\times10^{"..(s:gsub("%+*0*","")).."}"
    end
    function metapost.format_n(fmt,str)
        fmt = fmt:gsub("@","%%")
        local initial, format, final = fmt:match("^(.-)(%%.-[%a])(.-)$")
        if format then
            str = fmt:format(str)
            str = str:gsub("e(.-)$",strip)
            str = ("%s\\mathematics{%s}%s"):format(initial,str,final)
        elseif not fmt:find("%%") then
            str = ("%"..fmt):format(str)
            str = str:gsub("e(.-)$",strip)
            str = ("\\mathematics{%s}"):format(str)
        end
        tex.sprint(str)
    end
\stopluacode

\unexpanded\long\def\MPgraphformat#1#2{\ctxlua{metapost.format_n("#1","#2")}}

\startMPinclusions
    input graph.mp ;
    vardef escaped_format(expr s) =
        "" for n=1 upto length(s) : &
            if ASCII substring (n,n+1) of s = 37 :
                "@"
            else :
                substring (n,n+1) of s
            fi
        endfor
    enddef ;
    vardef dofmt_@\#(expr f, x) =
        textext("\MPgraphformat{"&escaped_format(f)&"}{"&(if string x : x else: decimal x fi)&"}")
    enddef ;

    % vardef format(expr f, x) =
    %     textext("\MPgraphformatN{"&escaped_format(f)&"}{"&(if string x : x else: decimal x fi)&"}")
    % enddef;
    % vardef Mformat(expr f, x) =
    %    format(f,x)
    % enddef;
\stopMPinclusions

\endinput