(in-package :fomus-test) (defun delete-whitespace (string) (cl-ppcre:regex-replace-all "\\s+" string "")) ;;; extract-content-for-checksum (defgeneric extract-content-for-checksum (backend file)) (defmethod extract-content-for-checksum (backend file) (declare (ignore backend)) (delete-whitespace (arnesi:read-string-from-file file))) (defmethod extract-content-for-checksum ((backend (eql :raw)) file) (let* ((file-content (arnesi:read-string-from-file file)) (version-form-end (multiple-value-bind (start end) (cl-ppcre:scan "\\(\\d+\\s+\\d+\\s+\\d+\\)" file-content) (declare (ignore start)) end))) (delete-whitespace (subseq file-content version-form-end)))) (defmethod extract-content-for-checksum ((backend (eql :data)) file) (let* ((file-content (arnesi:read-string-from-file file)) (version-form-end (multiple-value-bind (start end) (cl-ppcre:scan ";;\\s+FOMUS\\s+v\\d+\\.\\d+\\.\\d+\\s+Input Data File" file-content) (declare (ignore start)) end))) (delete-whitespace (subseq file-content version-form-end)))) (defmethod extract-content-for-checksum ((backend (eql :lilypond)) file) (let* ((file-content (arnesi:read-string-from-file file)) (version-line-end (multiple-value-bind (start end) (cl-ppcre:scan "%\\s+FOMUS\\s+v\\d+\\.\\d+\\.\\d+" file-content) (declare (ignore start)) end))) (delete-whitespace (subseq file-content version-line-end)))) (defmethod extract-content-for-checksum ((backend (eql :musicxml)) file) (let* ((file-content (arnesi:read-string-from-file file)) (version-line-end (multiple-value-bind (start end) (cl-ppcre:scan "FOMUS\\s+v\\d+\\.\\d+\\.\\d+" file-content) (declare (ignore start)) end))) (delete-whitespace (subseq file-content version-line-end)))) (defmethod extract-content-for-checksum ((backend (eql :cmn)) file) (let* ((file-content (arnesi:read-string-from-file file)) (version-line-end (multiple-value-bind (start end) (cl-ppcre:scan ";;\\s+FOMUS\\s+v\\d+\\.\\d+\\.\\d+" file-content) (declare (ignore start)) end))) (delete-whitespace (subseq file-content version-line-end)))) ;;; checksum (defgeneric checksum (backend)) (defmethod checksum (backend) (md5:md5sum-sequence (extract-content-for-checksum backend (backend-output-path backend *fomus-test-path*))))