+;; Cf bovine--make-parser-1.
+(defun wisent--make-parser-1 (infile &optional outdir)
+ (if outdir (setq outdir (file-name-directory (expand-file-name outdir))))
+ (let ((packagename
+ ;; This is with-demoted-errors.
+ (condition-case err
+ (with-current-buffer (find-file-noselect infile)
+ (if outdir (setq default-directory outdir))
+ (semantic-grammar-create-package nil t))
+ (error (message "%s" (error-message-string err)) nil)))
+ output-data)
+ (when (setq output-data (assoc packagename wisent-make-parsers--parser-file-name))
+ (let ((additional-copyright (nth 1 output-data))
+ (additional-license (nth 2 output-data))
+ (filename (expand-file-name
+ (progn (string-match ".*/\\(.*\\)" packagename)
+ (match-string 1 packagename))
+ outdir))
+ copyright-end)
+ ;; Touch up the generated parsers for Emacs integration.
+ (with-temp-file filename
+ (insert-file-contents filename)
+ ;; Fix copyright header:
+ (goto-char (point-min))
+ (when additional-copyright
+ (re-search-forward "Copyright (C).*$")
+ (insert "\n;; " additional-copyright))
+ (re-search-forward "^;; Author:")
+ (setq copyright-end (match-beginning 0))
+ (re-search-forward "^;;; Code:\n")
+ (delete-region copyright-end (match-end 0))
+ (goto-char copyright-end)
+ (insert wisent-make-parsers--emacs-license)
+ (insert "\n\n;;; Commentary:
+;;
+;; This file was generated from admin/grammars/"
+ (file-name-nondirectory infile) ".")
+ (when additional-license
+ (insert "\n" additional-license))
+ (insert "\n\n;;; Code:\n")
+ (goto-char (point-min))
+ (delete-region (point-min) (line-end-position))
+ (insert ";;; " packagename
+ " --- Generated parser support file")
+ (re-search-forward ";;; \\(.*\\) ends here")
+ (replace-match packagename nil nil nil 1)
+ (delete-trailing-whitespace))))))
+