;;; recipe-mode.el --- major mode for foodtool's recipe files -*- lexical-binding: t; -*- ;; Copyright (C) 2021 ;; Author: ;; Keywords: files, data ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; ;;; Code: (eval-when-compile (require 'rx)) (setq recipe-highlights '( ("^ *#+.*$" . 'font-lock-comment-delimiter-face) ;; comment ("^ *@\\(.*\\)$" . (1 'font-lock-preprocessor-face)) ;; title ("\\[\\(.+?\\)\\]" . (1 'font-lock-builtin-face)) ;; duration ("= *[[:digit:]/]+\\([ [:graph:]]+?\\)$" . (1 'font-lock-builtin-face)) ;; quantity measurements ("^\\(.+?\\)=.+?$" . (1 'font-lock-variable-name-face)) ;; variable in assignment ("\\${\\(.+?\\)}" . (1 'font-lock-variable-name-face)) ;; variable in ${} ("\\$\\([^ {\n]+\\)" . (1 'font-lock-variable-name-face)) ;; single word variable ("=>\\(.*\\)" . (1 'font-lock-variable-name-face)) ;; step result ("^[ [:digit:]]*!" . 'font-lock-constant-face) ;; include ("@\\|-\\|>\\|+\\|=>" . 'font-lock-constant-face) ;; symbols ("^\\(.+?\\)$" . (1 'font-lock-variable-name-face)) ;; variable in assignment (no qty) )) (define-derived-mode recipe-mode prog-mode "rcp" "Mode for rcp files \\{recipe-mode-map}" ;;(setq-local font-lock-defaults '(conf-font-lock-keywords nil t nil nil)) (setq-local font-lock-defaults '(recipe-highlights)) (setq-local comment-use-syntax nil) (setq-local comment-start "#") (setq-local parse-sexp-ignore-comments t)) (add-to-list 'auto-mode-alist '("\\.rcp\\'" . recipe-mode)) (provide 'recipe-mode) ;;; recipe-mode.el ends here