;Major mode for editting Renderman Rib files ;copyright 2005 Fred LeMaster fred.lemaster@gmail.com (defvar rib-mode-hook nil) ;;Define keymap (defvar rib-mode-map (let ((rib-mode-map (make-keymap))) (define-key rib-mode-map "\C-j" 'newline-and-indent) (define-key rib-mode-map "\M-r" 'rib-render-aqsis) (define-key rib-mode-map "\M-\C-f" 'forward-transform) rib-mode-map) "Keymap for RIB major mode") ;;Launch rib-mode when .rib files are opened (add-to-list 'auto-mode-alist '("\\.rib\\'" . rib-mode)) ;;Syntax highlighting (defconst rib-font-lock-keywords (list '("\\(A\\(?:r\\(?:chiveRecord\\|eaLightSource\\)\\|t\\(?:mosphere\\|tribute\\(?:Begin\\|End\\)?\\)\\)\\|B\\(?:asis\\|egin\\|ound\\)\\|C\\(?:lipping\\|o\\(?:lor\\(?:Samples\\)?\\|n\\(?:catTransform\\|e\\)\\|ordinateSystem\\)\\|ropWindow\\|ylinder\\)\\|D\\(?:e\\(?:clare\\|formation\\|pthOfField\\|tail\\(?:Range\\)?\\)\\|is\\(?:k\\|pla\\(?:cement\\|y\\)\\)\\)\\|E\\(?:nd\\|rrorHandler\\|x\\(?:posure\\|terior\\)\\)\\|F\\(?:ormat\\|rame\\(?:AspectRatio\\|Begin\\|End\\)\\)\\|Ge\\(?:neralPolygon\\|ometr\\(?:icApproximation\\|y\\)\\)\\|H\\(?:ider\\|yperboloid\\)\\|I\\(?:dentity\\|lluminate\\|\\(?:mage\\|nterio\\)r\\)\\|LightSource\\|M\\(?:a\\(?:ke\\(?:Bump\\|CubeFaceEnvironment\\|LatLongEnvironment\\|Shadow\\|Texture\\)\\|tte\\)\\|otion\\(?:Begin\\|End\\)\\)\\|NuPatch\\|O\\(?:bject\\(?:Begin\\|End\\|Instance\\)\\|p\\(?:acity\\|tion\\)\\|rientation\\)\\|P\\(?:a\\(?:raboloid\\|tch\\(?:Mesh\\)?\\)\\|erspective\\|ixel\\(?:Filter\\|Samples\\|Variance\\)\\|o\\(?:ints\\(?:\\(?:General\\)?Polygons\\)\\|lygon\\)\\|ro\\(?:cedural\\|jection\\)\\)\\|Quantize\\|R\\(?:e\\(?:lativeDetail\\|verseOrientation\\)\\|otate\\)\\|S\\(?:c\\(?:ale\\|reenWindow\\)\\|h\\(?:ading\\(?:Interpolation\\|Rate\\)\\|utter\\)\\|ides\\|kew\\|olid\\(?:Begin\\|End\\)\\|\\(?:pher\\|urfac\\)e\\)\\|T\\(?:extureCoordinates\\|orus\\|r\\(?:ans\\(?:form\\(?:Begin\\|End\\|Points\\)?\\|late\\)\\|imCurve\\)\\)\\|World\\(?:Begin\\|End\\)\\)" . font-lock-builtin-face))) ;;Indentation ;;Syntax Table (defvar rib-mode-syntax-table (let ((rib-mode-syntax-table (make-syntax-table))) (modify-syntax-entry ?# "< " rib-mode-syntax-table) (modify-syntax-entry ?\n "> " rib-mode-syntax-table) (modify-syntax-entry ?\\ "\\" rib-mode-syntax-table) (modify-syntax-entry ?\[ "(]" rib-mode-syntax-table) (modify-syntax-entry ?\] ")[" rib-mode-syntax-table) (modify-syntax-entry ?\" "\"" rib-mode-syntax-table) rib-mode-syntax-table) "Syntax table for rib-mode") (setq comment-start "#" comment-end "\n") (defun forward-transform (arg) (interactive "p") (search-forward "TransformBegin")) (defun rib-render-aqsis (args) "Render the ." (interactive "P") (let ((cmd (concat "aqsis -d " (buffer-file-name) " &"))) (message cmd) (shell-command cmd '()))) (defun rib-render-prman (args) "Render the RIB file rman.rib in the current directory." (interactive "P") (let ((cmd (concat "prman " (buffer-file-name) " &"))) (message cmd) (shell-command cmd '()))) (defun rib-mode () "Major mode for editting Renderman RIB files" (interactive) (kill-all-local-variables) (set-syntax-table rib-mode-syntax-table) (use-local-map rib-mode-map) (set (make-local-variable 'font-lock-defaults) '(rib-font-lock-keywords)) (setq major-mode 'rib-mode) (setq mode-name "RIB") (run-hooks 'rib-mode-hook)) ;(define-derived-mode rib-mode fundamental-mode "RIB" ; "Major mode for editting Renderman RIB files" ; (set-syntax-table rib-mode-syntax-table) ; (set (make-local-variable 'font-lock-defaults) '(rib-font-lock-keywords))) (provide 'rib-mode)