summaryrefslogtreecommitdiff
path: root/metapost
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2003-01-28 00:00:00 +0100
committerHans Hagen <pragma@wxs.nl>2003-01-28 00:00:00 +0100
commite65a436deb332118831156075846acc80fb9d386 (patch)
tree361145fb042743a584c6bb7accc12e6e902088c6 /metapost
parent8de3b8a6a820ba65fe85f0cb83700b6282e61d71 (diff)
downloadcontext-e65a436deb332118831156075846acc80fb9d386.tar.gz
stable 2003.01.28
Diffstat (limited to 'metapost')
-rw-r--r--metapost/context/mp-core.mp24
-rw-r--r--metapost/context/mp-grph.mp190
-rw-r--r--metapost/context/mp-spec.mp7
-rw-r--r--metapost/context/mp-tool.mp9
4 files changed, 133 insertions, 97 deletions
diff --git a/metapost/context/mp-core.mp b/metapost/context/mp-core.mp
index 80e3a8eb5..5f1341a69 100644
--- a/metapost/context/mp-core.mp
+++ b/metapost/context/mp-core.mp
@@ -16,8 +16,8 @@ if known context_core : endinput ; fi ;
boolean context_core ; context_core := true ;
-pair lxy[], rxy[], cxy[], llxy[], lrxy[], ulxy[], urxy[] ;
-path pxy[] ;
+pair lxy[], rxy[], cxy[], llxy[], lrxy[], ulxy[], urxy[] ;
+path pxy[] ;
numeric hxy[], wxy[], dxy[], nxy[] ;
def box_found (expr n,x,y,w,h,d) =
@@ -397,6 +397,10 @@ if local_multi_par_area :
TextAreas[1] := TextAreas[0] ;
TextColumns[1] := TextColumns[0] ;
nxy[fpos] := nxy[tpos] := nxy[wpos] := nxy[ppos] := RealPageNumber ;
+
+%draw TextColumns[1] withcolor green ;
+%draw TextAreas[1] withcolor green ;
+
elseif ignore_multi_par_page :
RealPageNumber := fn ;
nxy[fpos] := nxy[tpos] := nxy[wpos] := nxy[ppos] := RealPageNumber ;
@@ -600,7 +604,6 @@ fi ;
% _pa_ := (xpart _pa_,ypart llcorner multipar);
%fi ;
-
(xpart _ur_ + par_hang_indent, ypart _ur_) --
(xpart _ur_ + par_hang_indent, ypart _pa_) --
(xpart _ur_, ypart _pa_)
@@ -836,6 +839,19 @@ fi ;
fi ;
+ elseif (nxy[tpos]=RealPageNumber) :
+
+ % outside text area, fall back / test on: pascal werkboek
+
+ multipar :=
+
+ llxy[fpos] --
+ lrxy[tpos] --
+ urxy[tpos] --
+ ulxy[fpos] -- cycle ;
+
+ save_multipar (i,1,multipar) ;
+
else :
multipar := if obey_multi_par_hang :
@@ -899,7 +915,7 @@ snapped_multi_pos(ulxy[tpos]) --
save_multipar (i,3,multipar) ;
else :
-
+
% handled later
fi ;
diff --git a/metapost/context/mp-grph.mp b/metapost/context/mp-grph.mp
index 8c94d68d0..957a60ec8 100644
--- a/metapost/context/mp-grph.mp
+++ b/metapost/context/mp-grph.mp
@@ -2,116 +2,124 @@
%D [ file=mp-grph.mp,
%D version=2000.12.14,
%D title=\CONTEXT\ \METAPOST\ graphics,
-%D subtitle=graphic text support,
+%D subtitle=graphic text 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 licen-en.pdf for
-%C details.
+%C therefore copyrighted by \PRAGMA. See licen-en.pdf for
+%C details.
%D Under construction.
-if unknown context_tool : input mp-tool ; fi ;
-if known context_grph : endinput ; fi ;
+if unknown context_tool : input mp-tool ; fi ;
+if known context_grph : endinput ; fi ;
-boolean context_grph ; context_grph := true ;
+boolean context_grph ; context_grph := true ;
-string CRLF ; CRLF := char 10 & char 13 ;
+string CRLF ; CRLF := char 10 & char 13 ;
-picture _currentpicture_ ;
+picture _currentpicture_ ;
def beginfig (expr c) =
begingroup
- charcode := c ;
- resetfig ;
- scantokens extra_beginfig ;
-enddef ;
+ charcode := c ;
+ resetfig ;
+ scantokens extra_beginfig ;
+enddef ;
def resetfig =
- clearxy ;
- clearit ;
+ clearxy ;
+ clearit ;
clearpen ;
pickup defaultpen ;
- interim linecap := linecap ;
- interim linejoin := linejoin ;
- interim miterlimit := miterlimit ;
- save _background_ ; color _background_ ; _background_ := background ;
+ interim linecap := linecap ;
+ interim linejoin := linejoin ;
+ interim miterlimit := miterlimit ;
+ save _background_ ; color _background_ ; _background_ := background ;
save background ; color background ; background := _background_ ;
drawoptions () ;
enddef ;
-def protectgraphicmacros =
- save showtext ;
+def protectgraphicmacros =
+ save showtext ;
save beginfig ; let beginfig = begingraphictextfig ;
save endfig ; let endfig = endgraphictextfig ;
- save end ; let end = relax ;
- interim prologues := prologues ;
+ save end ; let end = relax ;
+ interim prologues := prologues ;
resetfig ;
-enddef ;
+enddef ;
-numeric currentgraphictext ; currentgraphictext := 0 ;
+numeric currentgraphictext ; currentgraphictext := 0 ;
string graphictextformat ; graphictextformat := "plain" ;
-string graphictextstring ; graphictextstring := "" ;
+string graphictextstring ; graphictextstring := "" ;
string graphictextfile ; graphictextfile := "dummy.mpo" ;
-def savegraphictext (expr str) =
+def savegraphictext (expr str) =
graphictextfile := jobname & ".mpo" ;
if (graphictextstring<>"") :
write graphictextstring to graphictextfile ;
- graphictextstring := "" ;
- fi ;
+ graphictextstring := "" ;
+ fi ;
write str to graphictextfile ;
- let erasegraphictextfile = relax ;
-enddef ;
+ let erasegraphictextfile = relax ;
+enddef ;
-def erasegraphictextfile =
+def erasegraphictextfile =
graphictextfile := jobname & ".mpo" ;
write EOF to graphictextfile ;
- let erasegraphictextfile = relax ;
-enddef ;
+ let erasegraphictextfile = relax ;
+enddef ;
-extra_beginfig := extra_beginfig & " erasegraphictextfile ;" ;
+extra_beginfig := extra_beginfig & " erasegraphictextfile ;" ;
def begingraphictextfig (expr n) =
foundpicture := n ; scratchpicture := nullpicture ;
enddef ;
def endgraphictextfig =
- if foundpicture = currentgraphictext :
- expandafter endinput
- else :
- scratchpicture := nullpicture ;
+ if foundpicture = currentgraphictext :
+ expandafter endinput
+ else :
+ scratchpicture := nullpicture ;
fi ;
enddef ;
-def loadfigure primary filename =
- doloadfigure (filename)
-enddef ;
+def loadfigure primary filename =
+ doloadfigure (filename)
+enddef ;
def doloadfigure (expr filename) text figureattributes =
begingroup ;
- save figurenumber, figurepicture, number ;
- numeric figurenumber ; figurenumber := 1 ;
- picture figurepicture ; figurepicture := currentpicture ;
- def number primary n = hide(figurenumber := n) enddef ;
- protectgraphicmacros ;
- % defaults
+ save figurenumber, figurepicture, number, fixedplace ;
+ numeric figurenumber ; figurenumber := 0 ;
+ boolean figureshift ; figureshift := true ;
+ picture figurepicture ; figurepicture := currentpicture ;
+ def number primary n = hide(figurenumber := n) enddef ;
+ def fixedplace = hide(figureshift := false) enddef ;
+ protectgraphicmacros ;
+ % defaults
interim linecap := rounded ;
interim linejoin := rounded ;
interim miterlimit := 10 ;
- %
- currentpicture := nullpicture ;
- def beginfig (expr n) =
- currentpicture := nullpicture ;
- if figurenumber=n : let endfig = endinput ; fi ;
- enddef ;
- let endfig = relax ;
- readfile(filename) ;
- currentpicture := currentpicture shifted -llcorner currentpicture ;
- addto figurepicture also currentpicture figureattributes ;
- currentpicture := figurepicture ;
+ %
+ currentpicture := nullpicture ;
+ draw fullcircle figureattributes ; % expand number
+ currentpicture := nullpicture ;
+ def beginfig (expr n) =
+ currentpicture := nullpicture ;
+ if (figurenumber=n) or (figurenumber=0) :
+ let endfig = endinput ;
+ fi ;
+ enddef ;
+ let endfig = relax ;
+ readfile(filename) ;
+ if figureshift :
+ currentpicture := currentpicture shifted -llcorner currentpicture ;
+ fi ;
+ addto figurepicture also currentpicture figureattributes ;
+ currentpicture := figurepicture ;
endgroup ;
enddef ;
@@ -128,7 +136,7 @@ def dographictext (expr t) =
fi ;
currentgraphictext := currentgraphictext + 1 ;
savegraphictext ("\startTEXpage[scale=10000]" & t & "\stopTEXpage") ;
- dofinishgraphictext
+ dofinishgraphictext
enddef ;
def redographictext primary t =
@@ -139,37 +147,37 @@ def regraphictext (expr t) =
begingroup ;
save currentgraphictext ; numeric currentgraphictext ;
currentgraphictext := t ;
- dofinishgraphictext
+ dofinishgraphictext
enddef ;
-%D Believe it or not, but it took me half a day to uncover
+%D Believe it or not, but it took me half a day to uncover
%D the following neccessity:
-%D
-%D \starttypen
-%D save withfillcolor, withdrawcolor ;
-%D \stoptypen
-%D
-%D When we have more than one graphictext, these will be
-%D defined after the first graphic. For some obscure reason,
+%D
+%D \starttypen
+%D save withfillcolor, withdrawcolor ;
+%D \stoptypen
+%D
+%D When we have more than one graphictext, these will be
+%D defined after the first graphic. For some obscure reason,
%D this means that in the next graphic they will be called, but
-%D afterwards the data and boolean are not set. Don't ask me
-%D why.
+%D afterwards the data and boolean are not set. Don't ask me
+%D why.
def dofinishgraphictext text x_op_x =
protectgraphicmacros ;
- interim linecap := butt ; % normally rounded
- interim linejoin := mitered ; % normally rounded
- interim miterlimit := 10 ; % todo
+ interim linecap := butt ; % normally rounded
+ interim linejoin := mitered ; % normally rounded
+ interim miterlimit := 10 ; % todo
let normalwithshade = withshade ;
save foundpicture, scratchpicture, str ;
save fill, draw, withshade, reversefill, outlinefill ;
save withfillcolor, withdrawcolor ; % quite important
numeric foundpicture ; picture scratchpicture ; string str ;
def draw expr p =
- % the first, naive implementation was:
+ % the first, naive implementation was:
% addto scratchpicture doublepath p withpen currentpen ;
- % but it is better to turn lines into fills
- addto scratchpicture contour boundingbox
+ % but it is better to turn lines into fills
+ addto scratchpicture contour boundingbox
image (addto currentpicture doublepath p withpen currentpen) ;
enddef ;
def fill expr p =
@@ -247,22 +255,22 @@ def dofinishgraphictext text x_op_x =
endgroup ;
enddef ;
-def resetgraphictextdirective =
- graphictextstring := "" ;
-enddef ;
+def resetgraphictextdirective =
+ graphictextstring := "" ;
+enddef ;
-def graphictextdirective text t =
- graphictextstring := graphictextstring & t & CRLF ;
-enddef ;
+def graphictextdirective text t =
+ graphictextstring := graphictextstring & t & CRLF ;
+enddef ;
-endinput
+endinput
% example
-input mp-grph ;
+input mp-grph ;
- graphictextformat := "context" ;
-% graphictextformat := "plain" ;
+ graphictextformat := "context" ;
+% graphictextformat := "plain" ;
% graphictextformat := "latex" ; graphictextdirective "\documentclass[]{article}" ;
beginfig (1) ;
@@ -272,11 +280,11 @@ beginfig (1) ;
withdrawcolor blue
withfillcolor red
withpen pencircle scaled 2pt ;
-endfig ;
+endfig ;
-beginfig(1) ;
- loadfigure "gracht.mp" rotated 20 ;
- loadfigure "koe.mp" number 1 scaled 2 ;
-endfig ;
+beginfig(1) ;
+ loadfigure "gracht.mp" rotated 20 ;
+ loadfigure "koe.mp" number 1 scaled 2 ;
+endfig ;
end
diff --git a/metapost/context/mp-spec.mp b/metapost/context/mp-spec.mp
index dca7ffdbc..10118f2c0 100644
--- a/metapost/context/mp-spec.mp
+++ b/metapost/context/mp-spec.mp
@@ -261,11 +261,16 @@ enddef ;
%D Since a \type {fill p withshade s} syntax looks better
%D than some macro, we implement a new primary.
-primarydef p withshade sc =
+primarydef p withshade sc = % == p withcolor shadecolor(sh)
hide (_color_counter_ := _color_counter_ + 1)
p withcolor (_special_signal_/1000,_color_counter_/1000,sc/1000)
enddef ;
+vardef shadecolor(expr sc) =
+ hide (_color_counter_ := _color_counter_ + 1)
+ (_special_signal_/1000,_color_counter_/1000,sc/1000)
+enddef ;
+
%D Figure inclusion.
%numeric cef ; cef := 0 ;
diff --git a/metapost/context/mp-tool.mp b/metapost/context/mp-tool.mp
index 210c34632..b1fd6bf22 100644
--- a/metapost/context/mp-tool.mp
+++ b/metapost/context/mp-tool.mp
@@ -1999,7 +1999,7 @@ enddef ;
def addbackground text t =
begingroup ; save p ; picture p ;
p := currentpicture ; currentpicture := nullpicture ;
- fill boundingbox p t ; draw p ;
+ fill boundingbox p t ; addto currentpicture also p ;
endgroup ;
enddef ;
@@ -2048,6 +2048,13 @@ vardef unstringed (expr s) =
expandafter known scantokens(cleanstring(s))
enddef ;
+% new
+
+vardef colorpart(expr i) =
+ (redpart i, greenpart i,bluepart i)
+enddef ;
+
+
% done
endinput ;