summaryrefslogtreecommitdiff
path: root/ksh-biometry.el
blob: 0e5f1d71a0d820a3a4254da353aa4c26cdd73088 (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
(defun draw-biometry (param-name param param-age percentile)
  (let ((temp-script-file (make-temp-script
			   (format "%s %s" param-name param)
			   param-age (string-to-number percentile))))
    (message "Drawing %s..." temp-script-file)
    (shell-command
     (format "asy -f pdf -o %s %s" (file-name-directory temp-script-file) temp-script-file))
    (delete-file temp-script-file)
    (format "%s.pdf" temp-script-file)))

(defun make-temp-script (param param-age percentile)
  (let ((temp-script-file (make-temp-file "biometry")))
    (with-temp-file temp-script-file
      (insert "include \"biometry\";\n")
      (insert (format
	       "draw_biometry(\"%s\", \"%s\", %d);"
	       param param-age percentile)))
    temp-script-file))

(defun insert-biometry (readings)
  (princ
   (format "[[%s]]\n"
	   (crop-pdf
	    (combine-pdfs
	     (mapcar (lambda (reading)
			  (apply 'draw-biometry
				 (mapcar 'get-field reading))) readings))))))

(defun combine-pdfs (pdfs)
  (let ((temp-combination (make-temp-file "pdfjam" nil ".pdf")))
    (apply 'call-process "pdfjam" nil nil nil
	   "--nup" "4x1"
	   "--outfile" temp-combination pdfs)
    (mapc 'delete-file pdfs)
    temp-combination))

(defun crop-pdf (pdf)
  (message "Cropping %s..." pdf)
  (let ((output-pdf (format "%s-crop.pdf" (file-name-sans-extension pdf))))
    (shell-command (format "pdfcrop %s %s" pdf output-pdf))
    (delete-file pdf) output-pdf))