diff options
Diffstat (limited to 'metapost')
-rw-r--r-- | metapost/context/mp-page.mp | 2 | ||||
-rw-r--r-- | metapost/context/mp-spec.mp | 65 | ||||
-rw-r--r-- | metapost/context/mp-tool.mp | 51 |
3 files changed, 85 insertions, 33 deletions
diff --git a/metapost/context/mp-page.mp b/metapost/context/mp-page.mp index 285f84c41..679b02ec6 100644 --- a/metapost/context/mp-page.mp +++ b/metapost/context/mp-page.mp @@ -38,6 +38,7 @@ PrintPaperHeight := 845.04684pt ; PrintPaperWidth := 597.50787pt ; TopSpace := 71.12546pt ; BackSpace := 71.13275pt ; +CutSpace := 0.0pt ; MakeupHeight := 711.3191pt ; MakeupWidth := 426.78743pt ; TopHeight := 0.0pt ; @@ -101,6 +102,7 @@ endfor ; def SwapPageState = if not OnRightPage : BackSpace := PaperWidth-MakeupWidth-BackSpace ; + CutSpace := PaperWidth-MakeupWidth-CutSpace ; i := LeftMarginWidth ; LeftMarginWidth := RightMarginWidth ; RightMarginWidth := i ; diff --git a/metapost/context/mp-spec.mp b/metapost/context/mp-spec.mp index a8dfb96b6..1ec8164bc 100644 --- a/metapost/context/mp-spec.mp +++ b/metapost/context/mp-spec.mp @@ -76,35 +76,84 @@ extra_endfig := " reset_extra_specials ; " & " insidefigure := false ; " ; -def _current_specials_ = - if insidefigure : _local_specials_ else : _global_specials_ fi +def set_extra_special (expr s) = + if insidefigure : + _local_specials_ := _local_specials_ & s ; + else : + _global_specials_ := _global_specials_ & s ; + fi enddef ; def flush_special (expr typ, siz, dat) = _special_counter_ := _special_counter_ + 1 ; if _inline_specials_ : - _current_specials_ := _current_specials_ - & "special " + set_extra_special + ( "special " & "(" & ditto & dat & " " & decimal _special_counter_ & " " & decimal typ & " " & decimal siz & " special" - & ditto & ");" ; + & ditto & ");" ) ; else : - _current_specials_ := _current_specials_ - & "special " + set_extra_special + ( "special " & "(" & ditto & "%%MetaPostSpecial: " & decimal siz & " " & dat & " " & decimal _special_counter_ & " " & decimal typ - & ditto & ");" ; + & ditto & ");" ) ; fi ; enddef ; +%D The next hack is needed in case you use a version of +%D \METAPOST\ that does not provide you the means to configure +%D the buffer size. Patrick Gundlach suggested to use arrays +%D in this case. + +boolean bufferhack ; bufferhack := false ; % true ; + +if bufferhack : + + string _global_specials_[] ; numeric _nof_global_specials_ ; + string _local_specials_[] ; numeric _nof_local_specials_ ; + + _nof_global_specials_ := _nof_local_specials_ := 0 ; + + vardef add_special_signal = % write the version number + if (_nof_global_specials_>0) or (_nof_local_specials_>0) : + special ("%%MetaPostSpecials: 1.0 " & decimal _special_signal_ ) ; + fi ; + enddef ; + + vardef add_extra_specials = + for i=1 upto _nof_global_specials_ : + scantokens _global_specials_[i] ; + endfor; + for i=1 upto _nof_local_specials_ : + scantokens _local_specials_[i] ; + endfor; + enddef ; + + vardef reset_extra_specials = + string _local_specials_[] ; _nof_local_specials_ := 0 ; + enddef ; + + def set_extra_special (expr s) = + if insidefigure : + _local_specials_[incr(_nof_local_specials_)] := s ; + else : + _global_specials_[incr(_nof_global_specials_)] := s ; + fi + enddef ; + +fi ; + +%D So far for this hack. + %D Shade allocation. vardef define_linear_shade (expr a, b, ca, cb) = diff --git a/metapost/context/mp-tool.mp b/metapost/context/mp-tool.mp index d259a240c..95a89bf54 100644 --- a/metapost/context/mp-tool.mp +++ b/metapost/context/mp-tool.mp @@ -225,42 +225,43 @@ enddef; numeric Pi ; Pi := 3.1415926 ; -def sqr (expr x) = (x*x) enddef ; -def log (expr x) = (if x=0: 0 else: mlog(x)/mlog(10) fi) enddef ; -def ln (expr x) = (if x=0: 0 else: mlog(x)/256 fi) enddef ; -def exp (expr x) = ((mexp 256)**x) enddef ; -def inv (expr x) = (if x=0: 0 else: x**-1 fi) enddef ; +vardef sqr primary x = (x*x) enddef ; +vardef log primary x = (if x=0: 0 else: mlog(x)/mlog(10) fi) enddef ; +vardef ln primary x = (if x=0: 0 else: mlog(x)/256 fi) enddef ; +vardef exp primary x = ((mexp 256)**x) enddef ; +vardef inv primary x = (if x=0: 0 else: x**-1 fi) enddef ; -def pow (expr x,p) = (x**p) enddef ; +vardef pow (expr x,p) = (x**p) enddef ; -def asin (expr x) = (x+(x**3)/6+3(x**5)/40) enddef ; -def acos (expr x) = (asin(-x)) enddef ; -def atan (expr x) = (x-(x**3)/3+(x**5)/5-(x**7)/7) enddef ; -def tand (expr x) = (sind(x)/cosd(x)) enddef ; +vardef asin primary x = (x+(x**3)/6+3(x**5)/40) enddef ; +vardef acos primary x = (asin(-x)) enddef ; +vardef atan primary x = (x-(x**3)/3+(x**5)/5-(x**7)/7) enddef ; +vardef tand primary x = (sind(x)/cosd(x)) enddef ; -%D Here are Taco Hoekwater's alternatives: +%D Here are Taco Hoekwater's alternatives (but +%D vardef'd and primaried). pi := 3.1415926 ; radian := 180/pi ; % 2pi*radian = 360 ; -def tand (expr x) = (sind(x)/cosd(x)) enddef ; -def cotd (expr x) = (cosd(x)/sind(x)) enddef ; +vardef tand primary x = (sind(x)/cosd(x)) enddef ; +vardef cotd primary x = (cosd(x)/sind(x)) enddef ; -def sin (expr x) = (sind(x*radian)) enddef ; -def cos (expr x) = (cosd(x*radian)) enddef ; -def tan (expr x) = (sin(x)/cos(x)) enddef ; -def cot (expr x) = (cos(x)/sin(x)) enddef ; +vardef sin primary x = (sind(x*radian)) enddef ; +vardef cos primary x = (cosd(x*radian)) enddef ; +vardef tan primary x = (sin(x)/cos(x)) enddef ; +vardef cot primary x = (cos(x)/sin(x)) enddef ; -def asin (expr x) = angle((1+-+x,x)) enddef ; -def acos (expr x) = angle((x,1+-+x)) enddef ; +vardef asin primary x = angle((1+-+x,x)) enddef ; +vardef acos primary x = angle((x,1+-+x)) enddef ; -def invsin (expr x) = ((asin(x))/radian) enddef ; -def invcos (expr x) = ((acos(x))/radian) enddef ; +vardef invsin primary x = ((asin(x))/radian) enddef ; +vardef invcos primary x = ((acos(x))/radian) enddef ; -def acosh (expr x) = ln(x+(x+-+1)) enddef ; -def asinh (expr x) = ln(x+(x++1)) enddef ; +vardef acosh primary x = ln(x+(x+-+1)) enddef ; +vardef asinh primary x = ln(x+(x++1)) enddef ; -vardef sinh primary x = save xx ; xx = exp xx ; (xx-1/xx)/2 enddef ; -vardef cosh primary x = save xx ; xx = exp xx ; (xx+1/xx)/2 enddef ; +vardef sinh primary x = save xx ; xx = exp xx ; (xx-1/xx)/2 enddef ; +vardef cosh primary x = save xx ; xx = exp xx ; (xx+1/xx)/2 enddef ; %D We provide two macros for drawing stripes across a shape. %D The first method (with the n suffix) uses another method, |