summaryrefslogtreecommitdiff
path: root/metapost/context/base/mpiv/mp-lmtx.mpxl
diff options
context:
space:
mode:
Diffstat (limited to 'metapost/context/base/mpiv/mp-lmtx.mpxl')
-rw-r--r--metapost/context/base/mpiv/mp-lmtx.mpxl157
1 files changed, 105 insertions, 52 deletions
diff --git a/metapost/context/base/mpiv/mp-lmtx.mpxl b/metapost/context/base/mpiv/mp-lmtx.mpxl
index fe511b74f..359c60921 100644
--- a/metapost/context/base/mpiv/mp-lmtx.mpxl
+++ b/metapost/context/base/mpiv/mp-lmtx.mpxl
@@ -247,7 +247,7 @@ vardef lmt_do_axis =
enddef ;
presetparameters "outline" [
- content = "",
+ text = "",
kind = "draw",
fillcolor = "",
drawcolor = "",
@@ -273,22 +273,24 @@ vardef lmt_do_outline =
kind := "b" ;
elseif kind = "reverse" :
kind := "r" ;
+ elseif kind = "fillup" :
+ kind := "u" ;
fi ;
currentoutlinetext := currentoutlinetext + 1 ;
lua.mp.mf_outline_text(
currentoutlinetext,
if align = "" :
- getparameter "outline" "content",
+ getparameter "outline" "text",
else :
"\framed[align={" & align & "}"
if width > 0 :
& ",width=" & decimal width & "bp"
fi
if style <> "" :
- & ",foregroundstyle=" & style
+ & ",foregroundstyle={" & style & "}"
fi
& ",offset=none,frame=off]{"
- & (getparameter "outline" "content")
+ & (getparameter "outline" "text")
& "}",
fi,
kind
@@ -310,7 +312,7 @@ vardef lmt_do_outline =
withcolor getparameter "outline" "drawcolor"
);
elseif kind = "u" :
- mfun_do_outline_text_set_f (
+ mfun_do_outline_text_set_u (
withcolor getparameter "outline" "fillcolor"
);
elseif kind = "r" :
@@ -331,7 +333,7 @@ vardef lmt_do_outline =
enddef ;
presetparameters "followtext" [
- content = "",
+ text = "",
spread = true,
trace = false,
reverse = false,
@@ -344,24 +346,28 @@ def lmt_followtext = applyparameters "followtext" "lmt_do_followtext" enddef ;
vardef lmt_do_followtext =
image (
- save s_u ; string s_u ; s_u := getparameter "followtext" "autoscaleup" ;
- save s_d ; string s_d ; s_d := getparameter "followtext" "autoscaledown" ;
- save followtextalternative ; followtextalternative := if getparameter "followtext" "spread" : 1 else : 0 fi ;
- save tracingfollowtext ; tracingfollowtext := if getparameter "followtext" "trace" : 1 else : 0 fi ;
+ pushparameters "followtext" ;
+ save s_u ; string s_u ; s_u := getparameter "autoscaleup" ;
+ save s_d ; string s_d ; s_d := getparameter "autoscaledown" ;
+ save followtextalternative ; followtextalternative := if getparameter "spread" : 1 else : 0 fi ;
+ save tracingfollowtext ; tracingfollowtext := if getparameter "trace" : 1 else : 0 fi ;
save autoscaleupfollowtext ; autoscaleupfollowtext := if s_u = "yes" : 1 elseif s_u = "max" : 2 else : 0 fi ;
save autoscaledownfollowtext ; autoscaledownfollowtext := if s_d = "yes" : 1 elseif s_d = "max" : 2 else : 0 fi ;
draw followtext (
- if (getparameter "followtext" "reverse") : reverse fi getparameter "followtext" "path",
- getparameter "followtext" "content"
+ if (getparameter "reverse") : reverse fi (getparameter "path"),
+ getparameter "text"
) ;
+ popparameters ;
)
enddef ;
presetparameters "arrow" [
path = origin,
+ % pen = ...,
kind = "fill",
dimple = 1/5,
scale = 3/4,
+ penscale = 3,
length = 4,
angle = 45,
location = "end", % middle both
@@ -374,23 +380,32 @@ def lmt_arrow = applyparameters "arrow" "lmt_do_arrow" enddef ;
vardef lmt_do_arrow =
image (
- save a ; string a ; a := getparameter "arrow" "alternative" ;
- save l ; string l ; l := getparameter "arrow" "location" ;
- save k ; string k ; k := getparameter "arrow" "kind" ;
- save p ; path p ; p := getparameter "arrow" "path" ;
+ pushparameters "arrow" ;
+ save a ; string a ; a := getparameter "alternative" ;
+ save l ; string l ; l := getparameter "location" ;
+ save k ; string k ; k := getparameter "kind" ;
+ save p ; path p ; p := getparameter "path" ;
save ahvariant ; ahvariant := if a = "dimpled" : 1 elseif a = "curved" : 2 else : 0 fi ;
- save ahdimple ; ahdimple := getparameter "arrow" "dimple" ;
- save ahscale ; ahscale := getparameter "arrow" "scale" ;
- save ahangle ; ahangle := getparameter "arrow" "angle" ;
- save ahlength ; ahlength := getparameter "arrow" "length" ;
- if not getparameter "arrow" "headonly" :
+ save ahdimple ; ahdimple := getparameter "dimple" ;
+ save ahscale ; ahscale := getparameter "scale" ;
+ save ahangle ; ahangle := getparameter "angle" ;
+ save ahlength ; ahlength := getparameter "length" ;
+ if not getparameter "headonly" :
draw p ;
fi ;
+ if hasparameter "pen" :
+ % a cheat: we should have a type check in lua
+ if hasoption "pen" "auto" :
+ ahlength := (getparameter "penscale") * boundingradius(currentpen) ;
+ else :
+ ahlength := (getparameter "penscale") * boundingradius(getparameterpen "pen") ;
+ fi ;
+ fi ;
if k = "draw" : draw elseif k = "both" : filldraw else : fill fi
if l = "middle" :
midarrowhead p ;
elseif l = "percentage" :
- arrowheadonpath (p, (getparameter "arrow" "percentage")/100) ;
+ arrowheadonpath (p, (getparameter "percentage")/100) ;
elseif l = "both" :
arrowhead p ;
if k = "draw" : draw elseif k = "both" : filldraw else : fill fi
@@ -398,6 +413,7 @@ vardef lmt_do_arrow =
else :
arrowhead p ;
fi ;
+ popparameters ;
)
enddef ;
@@ -415,13 +431,14 @@ def lmt_placeholder = applyparameters "placeholder" "lmt_do_placeholder" enddef
def lmt_do_placeholder =
begingroup ;
+ pushparameters "placeholder" ;
save w, h, d, r, p, c, b, s, q, a ;
numeric w, h, d, r ; path p ; string s, a ;
- s := getparameter "placeholder" "color" ;
- w := getparameter "placeholder" "width" ;
- h := getparameter "placeholder" "height" ;
- r := getparameter "placeholder" "reduction" ;
- a := getparameter "placeholder" "alternative" ;
+ s := getparameter "color" ;
+ w := getparameter "width" ;
+ h := getparameter "height" ;
+ r := getparameter "reduction" ;
+ a := getparameter "alternative" ;
d := max(w,h) ;
if cmykcolor resolvedcolor(s) :
cmykcolor c, b ; b := (0,0,0,0)
@@ -445,6 +462,7 @@ def lmt_do_placeholder =
withcolor r[c randomized(.3,.9),b] ;
endfor ;
clip currentpicture to p ;
+ popparameters ;
endgroup ;
enddef ;
@@ -1239,7 +1257,8 @@ vardef lmt_do_chart_bar =
)
enddef ;
-% more complex than needed but i want to trace so i need the vars
+%D This one is more complex than needed but I want to trace so I need all those
+%D variables.
presetparameters "shade" [
alternative = "circular",
@@ -1258,6 +1277,8 @@ presetparameters "shade" [
] ;
+% TODO: pass colors as strings
+
def lmt_shade = applyparameters "shade" "lmt_do_shade" enddef ;
vardef lmt_do_shade =
@@ -1318,27 +1339,10 @@ vardef lmt_do_shade =
center_b := getparameter "origin" 2 ;
fi ;
fi
- if hasparameter "vector" :
- center_a := point (getparameter "vector" 1) of mfun_shade_path ;
- center_b := point (getparameter "vector" 2) of mfun_shade_path ;
- fi
if hasparameter "colors" :
color_a := getparameter "colors" 1 ;
color_b := getparameter "colors" 2 ;
fi
- if hasparameter "center" :
- if numeric getparameter "center" :
- center_a := center mfun_shade_path shifted (
- (getparameter "center") * bbwidth (mfun_shade_path)/2,
- (getparameter "center") * bbheight(mfun_shade_path)/2
- ) ;
- else :
- center_a := center mfun_shade_path shifted (
- (getparameter "center" 1) * bbwidth (mfun_shade_path)/2,
- (getparameter "center" 2) * bbheight(mfun_shade_path)/2
- ) ;
- fi
- fi
if hasparameter "direction" :
save a, b, bb ; path bb ;
bb := boundingbox(mfun_shade_path) ;
@@ -1369,6 +1373,26 @@ vardef lmt_do_shade =
center_b := point p_b of bb ;
fi
fi ;
+ if hasparameter "center" :
+ save cx, cy ;
+ if numeric getparameter "center" :
+ cx := getparameter "center" ;
+ cx := cy ;
+ % elseif pair getparameter "center" :
+ % cx := xpart getparameter "center" ;
+ % cy := ypart getparameter "center" ;
+ else :
+ cx := getparameter "center" 1 ;
+ cy := getparameter "center" 2 ;
+ fi
+ center_a := center mfun_shade_path shifted (
+ cx * bbwidth (mfun_shade_path)/2,
+ cy * bbheight(mfun_shade_path)/2
+ ) ;
+ elseif hasparameter "vector" :
+ center_a := point (getparameter "vector" 1) of mfun_shade_path ;
+ center_b := point (getparameter "vector" 2) of mfun_shade_path ;
+ fi
fill mfun_shade_path
withprescript "sh_domain=" & decimal domain_min & " " & decimal domain_max
withprescript "sh_transform=yes"
@@ -1380,12 +1404,14 @@ vardef lmt_do_shade =
withprescript "sh_set_y=" & ddecimal (mfun_shade_ny,mfun_shade_ly) %
if alternative = "linear" :
withprescript "sh_type=linear"
- withprescript "sh_factor=1"
+ % withprescript "sh_factor=1"
+ withprescript "sh_factor=" & decimal factor
withprescript "sh_center_a=" & ddecimal center_a
withprescript "sh_center_b=" & ddecimal center_b
else :
withprescript "sh_type=circular"
- withprescript "sh_factor=1.2"
+ % withprescript "sh_factor=1.2"
+ withprescript "sh_factor=" & decimal factor
withprescript "sh_center_a=" & ddecimal center_a
withprescript "sh_center_b=" & ddecimal center_b
withprescript "sh_radius_a=" & decimal radius_a
@@ -1394,11 +1420,13 @@ vardef lmt_do_shade =
if getparameter "trace" :
draw fullcircle scaled 1mm shifted center_a ;
draw fullsquare scaled 2mm shifted center_b ;
- draw textext.top("\strut\ttx center a") scaled .2 shifted center_a shifted (0, 2mm) ;
- draw textext.bot("\strut\ttx center b") scaled .2 shifted center_b shifted (0,-2mm) ;
+ draw textext.top("\strut\ttx center a") ysized LineHeight shifted center_a shifted (0, 2mm) ;
+ draw textext.bot("\strut\ttx center b") ysized LineHeight shifted center_b shifted (0,-2mm) ;
if alternative = "circular" :
- draw fullcircle scaled ( radius_a * 2) shifted center_a dashed evenly ;
- draw fullcircle scaled (factor * radius_b * 2) shifted -center_b dashed evenly ;
+% draw fullcircle scaled ( radius_a * 2) shifted center_a dashed evenly ;
+% draw fullcircle scaled (factor * radius_b * 2) shifted -center_b dashed evenly ;
+ draw fullcircle scaled ( radius_a) shifted center_a dashed evenly ;
+ draw fullcircle scaled (factor * radius_b) shifted -center_b dashed evenly ;
fi
fi
popparameters ;
@@ -1473,12 +1501,15 @@ boolean lmx_contour_loaded ; lmx_contour_loaded := false ;
def mfun_only_draw = addto currentpicture doublepath enddef ;
def mfun_only_fill = addto currentpicture contour enddef ;
def mfun_only_nodraw text t = addto currentpicture doublepath t withpostscript "collect" enddef ;
-def mfun_only_nofill text t = addto currentpicture contour t withpostscript "collect" enddef ;
+def mfun_only_nofill text t = addto currentpicture contour t withpostscript "evenodd" enddef ;
+def mfun_only_eofill text t = addto currentpicture contour t withpostscript "collect" enddef ;
def lmt_do_contour_shortcuts =
save D ; let D = mfun_only_draw ;
+ save E ; let E = mfun_only_eofill ;
save F ; let F = mfun_only_fill ;
save d ; let d = mfun_only_nodraw ;
+ save e ; let f = mfun_only_eofill ;
save f ; let f = mfun_only_nofill ;
save C ; let C = cycle ;
enddef ;
@@ -1975,3 +2006,25 @@ vardef lmt_do_contour =
)
enddef ;
+presetparameters "svg" [
+ filename = "",
+ width = 0,
+ height = 0,
+] ;
+
+def lmt_svg = applyparameters "svg" "lmt_do_svg" enddef ;
+
+vardef lmt_do_svg =
+ save w, h ;
+ w := getparameter "svg" "width" ;
+ h := getparameter "svg" "height" ;
+ image (
+ lua.mp.lmt_svg_include()
+ )
+ if w > 0 :
+ if h > 0 : xysized(w,h) else : xsized(w) fi
+ else :
+ if h > 0 : ysized(h) fi
+ fi
+enddef ;
+