private/mpost-op-2.rkt
#lang racket
(provide intersectiontimes
         intersectionpoint
         rotate
         shift
         scale
         xscale
         yscale
         zscale
         transform
         cutbefore
         cutafter)
;;------------------------------------
(require "mpost-variable.rkt")
(require "mpost-utils.rkt")
(require "mpost-type-funs.rkt")
(define-syntax-rule (def-op name type)
  (def-exp (name a b)
    type
    (to-string (list a 'name b))))
(def-op intersectiontimes ((type-> 'path 'path 'pair)))
(def-op intersectionpoint ((type-> 'path 'path 'pair)))
(define (transform-op-type x)
  (type-or (type-> x 'path 'path)
           (type-> x 'pair 'pair)
           (type-> x 'transform 'transform)
           (type-> x 'picture 'picture)
           (type-> x 'pen 'pen)))
(define-syntax-rule (def-T-op name op type)
  (def-exp (name a b) type (to-string (list b 'op a))))
(def-T-op rotate  rotated  ((transform-op-type 'numeric)))
(def-T-op shift shifted  ((transform-op-type 'pair)))
(def-T-op scale scaled  ((transform-op-type 'numeric)))
(def-T-op xscale xscaled ((transform-op-type 'numeric)))
(def-T-op yscale yscaled ((transform-op-type 'numeric)))
(def-T-op zscale zscaled ((transform-op-type 'pair)))
(def-T-op transform transformed ((transform-op-type 'transform)))
(def-op cutbefore ((type-> 'path 'path 'path)))
(def-op cutafter ((type-> 'path 'path 'path)))