emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master c31adb4 01/21: Initial commit


From: Stefan Monnier
Subject: [elpa] master c31adb4 01/21: Initial commit
Date: Tue, 18 Aug 2015 14:59:00 +0000

branch: master
commit c31adb4420a428c34971a9e9a2555244af912f93
Author: Ben Gamari <address@hidden>
Commit: Ben Gamari <address@hidden>

    Initial commit
---
 dts-mode.el |   72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 72 insertions(+), 0 deletions(-)

diff --git a/dts-mode.el b/dts-mode.el
new file mode 100644
index 0000000..e46c84b
--- /dev/null
+++ b/dts-mode.el
@@ -0,0 +1,72 @@
+;;; dts-mode.el --- A major emacs mode for editing Devicetree source code
+
+;; Version: 0.1.0
+;; Author: Ben Gamari <address@hidden>
+;; Url: http://github.com/bgamari/dts-mode
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License version 2 as
+;; published by the Free Software Foundation.
+
+(defconst dts-re-ident "[[:word:]_][[:word:][:multibyte:]_,[:digit:]-]*")
+(defun dts-re-word (inner) (concat "\\<" inner "\\>"))
+(defun dts-re-grab (inner) (concat "\\(" inner "\\)"))
+
+(defvar dts-mode-font-lock-keywords
+  `(
+    ;; names like `name: hi {`
+    (,(concat (dts-re-grab dts-re-ident) ":") 1 font-lock-variable-name-face)
+    ;; nodes
+    (,(concat (dts-re-grab dts-re-ident) "\\(@[[:digit:]]+\\)?[[:space:]]*{") 
1 font-lock-type-face)
+    ;; assignments
+    (,(concat (dts-re-grab dts-re-ident) "[[:space:]]*=") 1 
font-lock-variable-name-face)
+    (,(concat (dts-re-grab dts-re-ident) "[[:space:]]*;") 1 
font-lock-variable-name-face)
+    ;; references
+    (,(concat "\\&" (dts-re-grab dts-re-ident)) 1 font-lock-variable-name-face)
+    )
+  )
+
+(defvar dts-mode-syntax-table
+  (let ((table (make-syntax-table)))
+    (modify-syntax-entry ?<  "(" table)
+    (modify-syntax-entry ?>  ")" table)
+
+    (modify-syntax-entry ?&  "." table)
+    (modify-syntax-entry ?|  "." table)
+    (modify-syntax-entry ?&  "." table)
+    (modify-syntax-entry ?~  "." table)
+
+    ;; _ and , are both word characters
+    (modify-syntax-entry ?,  "_" table)
+    (modify-syntax-entry ?_  "w" table)
+
+    ;; Strings
+    (modify-syntax-entry ?\" "\"" table)
+    (modify-syntax-entry ?\\ "\\" table)
+
+    ;; Comments
+    (modify-syntax-entry ?/  ". 124b" table)
+    (modify-syntax-entry ?*  ". 23"   table)
+    (modify-syntax-entry ?\n "> b"    table)
+    (modify-syntax-entry ?\^m "> b"   table)
+
+    table))
+
+(define-derived-mode dts-mode prog-mode "Devicetree"
+  "Major mode for editing Devicetrees"
+  :group 'dts-mode
+  :syntax-table dts-mode-syntax-table
+
+  ;; Fonts
+  (setq-local font-lock-defaults '(dts-mode-font-lock-keywords nil nil nil 
nil))
+
+  (setq-local comment-start "/* ")
+  (setq-local comment-end   " */")
+  (setq-local indent-tabs-mode nil)
+  (setq-local comment-multi-line t)
+)
+
+(provide 'dts-mode)
+
+(add-to-list 'auto-mode-alist '("\\.dts\\'" . dts-mode))
+(add-to-list 'auto-mode-alist '("\\.dtsi\\'" . dts-mode))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]