[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] 05/39: Ported from generic.el to define-derived-mode. Comment-cha
From: |
Phillip Lord |
Subject: |
[elpa] 05/39: Ported from generic.el to define-derived-mode. Comment-character is now "#" rather than fudged "# " Delimited URIs now recognised as strings Electric indentation added. Indentation engine improved. |
Date: |
Mon, 20 Oct 2014 08:22:30 +0000 |
phillord pushed a commit to branch externals/pabbrev
in repository elpa.
commit 8503333aaa52c440e666f43c75422b5fe9a630dd
Author: address@hidden <address@hidden>
Date: Sun Aug 26 22:53:10 2012 +0100
Ported from generic.el to define-derived-mode.
Comment-character is now "#" rather than fudged "# "
Delimited URIs now recognised as strings
Electric indentation added.
Indentation engine improved.
---
omn-mode.el | 180 ++++++++++++++++++++++++++++++++---------------------------
1 files changed, 98 insertions(+), 82 deletions(-)
diff --git a/omn-mode.el b/omn-mode.el
index ae12391..7ed9a3e 100644
--- a/omn-mode.el
+++ b/omn-mode.el
@@ -4,9 +4,9 @@
;; This file is not part of Emacs
-;; Author: Phillip Lord <address@hidden>
-;; Maintainer: Phillip Lord <address@hidden>
-;; Website: http://www.russet.org.uk
+;; Author: Phillip Lord <address@hidden>
+;; Maintainer: Phillip Lord <address@hidden>
+;; Website: http://www.russet.org.uk/blog
;; COPYRIGHT NOTICE
;;
@@ -44,36 +44,9 @@
See `imenu-generic-expression' for details")
-;; not sure if this bit is working yet!
-;; (defvar omn-mode-syntax-table
-;; (let ((st (make-syntax-table)))
-;; ;; underscores are valid separators in "words"
-;; (modify-syntax-entry ?\_ "w" st)
-;; ;; for name space prefixs
-;; (modify-syntax-entry ?\: "w" st)
-;; st)
-;; "Syntax table for `omn-mode'.")
-
-(defun omn-setup()
- (make-local-variable 'indent-line-function)
- (make-local-variable 'tab-to-tab-stop)
- (make-local-variable 'comment-start)
- (make-local-variable 'comment-end)
- (setq comment-start "#")
- (setq comment-end "")
-
- (let ((st (syntax-table)))
- ;; underscores are valid separators in "words"
- (modify-syntax-entry ?\_ "w" st)
- ;; for name space prefixs
- (modify-syntax-entry ?\: "w" st))
-
- (setq imenu-generic-expression omn-imenu-generic-expression)
- (setq indent-line-function 'omn-ident-line)
- (setq tab-stop-list '(4 8 12 16 20 24)))
;; indentation engine
-(defun omn-ident-line()
+(defun omn-indent-line()
(indent-line-to
(omn-determine-line-indent)))
@@ -82,29 +55,21 @@ See `imenu-generic-expression' for details")
(beginning-of-line)
(save-match-data
;; check the first word
- (re-search-forward "\\w+" (line-end-position) t)
- (let ((word (match-string 0))
- (start (match-beginning 0)))
+
+ (let ((match (re-search-forward "\\w+" (line-end-position) t)))
(cond
- ((not word)
+ ((not match)
(progn
(if (not (forward-line -1))
(omn-determine-line-indent)
0)))
- ;; basing this on font-lock isn't ideal, because only the bits of the
- ;; buffer that we have seen have been font locked. This is not a
- ;; problem for interactive use, but causes a problem when indenting
- ;; the entire buffer.
-
;; if it is string, ident should be 0.
- ((eq (get-text-property start 'face)
- font-lock-string-face)
+ ((nth 3 (syntax-ppss (point)))
0)
-
+
;; if it is a comment
- ((eq (get-text-property start 'face)
- font-lock-comment-face)
+ ((nth 4 (syntax-ppss (point)))
;; if there is a next line, indent the same as that
(cond
((eq 0 (forward-line 1))
@@ -116,22 +81,16 @@ See `imenu-generic-expression' for details")
(t 0)))
;; if it is one of Class:, Prefix: or so on, then indent should be 0
- ((member word omn-mode-entity-keywords)
+ ((member (match-string 0) omn-mode-entity-keywords)
0)
;; if it is Annotations:, SubClassOf: or so on, then indent should be
4
- ((member word omn-mode-property-keywords)
+ ((member (match-string 0) omn-mode-property-keywords)
4)
;; if it is something else, then 8
(t 8))))))
-
-
-
-
-
-
(defvar omn-mode-entity-keywords
'(
"Ontology:"
@@ -163,18 +122,18 @@ See `imenu-generic-expression' for details")
"Facts:"
))
+(add-to-list 'auto-mode-alist
+ '("\\.pomn$" . omn-mode))
-
-;; we should move this to derived mode now, since this is far from generic
-(define-generic-mode 'omn-mode
- '(("# " . nil))
-
- ;; keywords
- omn-mode-entity-keywords
- ;; a list of additional font lock info
- `(
- (
- ,(mapconcat
+(add-to-list 'auto-mode-alist
+ '("\\.omn$" . omn-mode))
+
+(defvar omn-font-lock-defaults
+ `(,
+ (concat "\\_<"
+ (regexp-opt omn-mode-entity-keywords t)
+ "\\_>")
+ (,(mapconcat
(lambda(x) x)
'("\\<some\\>"
"\\<only\\>"
@@ -185,29 +144,85 @@ See `imenu-generic-expression' for details")
)
"\\|")
. font-lock-type-face)
-
(
,(mapconcat
- (lambda(x) x)
- omn-mode-property-keywords
- "\\|")
- . font-lock-builtin-face)
-
+ (lambda(x) x)
+ omn-mode-property-keywords
+ "\\|")
+ . font-lock-builtin-face)
+ ("\\w+:\\w+" . font-lock-function-name-face)))
- ("\\w+:\\w+" . font-lock-function-name-face)
-
- )
-
-
+
+(defvar omn-mode-syntax-table
+ (let ((st (make-syntax-table)))
+ ;; string quotes
+ (modify-syntax-entry ?\" "\"" st)
+ ;; This is a bit underhand, but we define the < and > characters to be
+ ;; "generic-string" delimiters. This results in fontification for URLs
+ ;; which is no bad thing. Additionally, it makes the comment character
+ ;; work, as "#" is a valid in a URL. The semantics of this isn't quite
+ ;; right, because the two characters are not paired. So <url> is
+ ;; recognised, but so is <url< or >url>
+ (modify-syntax-entry ?\< "|" st)
+ (modify-syntax-entry ?\> "|" st)
+ ;; define comment characters for syntax
+ (modify-syntax-entry ?\# "<" st)
+ (modify-syntax-entry ?\n ">" st)
+ ;; underscores are valid separators in "words"
+ (modify-syntax-entry ?\_ "w" st)
+ ;; for name space prefixs
+ (modify-syntax-entry ?\: "w" st)
+ st))
+
+(defun omn-mode-electric-indent()
+ (interactive)
+ (self-insert-command 1)
+ (omn-mode-indent-here))
+
+(defun omn-mode-indent-here()
+ (let ((m (point-marker)))
+ (omn-indent-line)
+ (goto-char (marker-position m))))
+
+(defun omn-mode-electric-newline()
+ (interactive)
+ (newline)
+ (save-excursion
+ (forward-line -1)
+ (omn-indent-line)))
+
+(define-derived-mode omn-mode fundamental-mode "Omn"
+ "Doc string to add"
+
+ ;; font-lock stuff
+ (setq font-lock-defaults
+ '(omn-font-lock-defaults))
+
+ (make-local-variable 'comment-start)
+ (make-local-variable 'comment-end)
+ (make-local-variable 'comment-start-skip)
+ ;; set up commenting
+ (setq comment-start "#")
+ (setq comment-end "")
+ ;; no idea what this is about -- stolen from generic
+ (setq comment-start-skip "#+\\s-*")
+
+ (set-syntax-table omn-mode-syntax-table)
- ;; file spec
- (list "\\.omn$")
- ;; hooks
- '(omn-setup))
+ (setq imenu-generic-expression omn-imenu-generic-expression)
+ (make-local-variable 'indent-line-function)
+ (setq indent-line-function 'omn-indent-line))
+
+
+;; need to bind to return as well
+(mapc
+ (lambda(x)
+ (define-key omn-mode-map x 'omn-mode-electric-indent))
+ `(" " "," ":"))
+
+(define-key omn-mode-map (kbd "RET") 'omn-mode-electric-newline)
-(add-to-list 'auto-mode-alist
- '("\\.pomn$" . omn-mode))
@@ -221,4 +236,5 @@ See `imenu-generic-expression' for details")
;; Write a "command" interface, use annotation to mark each of the command
setMethods.
;;
;; Have the command interface return results between tags as lisp. We can eval
-;; this, and get the result in that way.
\ No newline at end of file
+;; this, and get the result in that way.
+
- [elpa] 10/39: Removed local hook as it's is long obsolete., (continued)
- [elpa] 10/39: Removed local hook as it's is long obsolete., Phillip Lord, 2014/10/20
- [elpa] 08/39: Minor code tweaks., Phillip Lord, 2014/10/20
- [elpa] 09/39: Added slime mode to excluded modes, Phillip Lord, 2014/10/20
- [elpa] 06/39: Prepared for Marmalade, Phillip Lord, 2014/10/20
- [elpa] 11/39: Initial Checkin, Phillip Lord, 2014/10/20
- [elpa] 12/39: Initial Checkin, Phillip Lord, 2014/10/20
- [elpa] 16/39: Clojure mode support added., Phillip Lord, 2014/10/20
- [elpa] 15/39: Documentation Updates., Phillip Lord, 2014/10/20
- [elpa] 13/39: Initial Checkin, Phillip Lord, 2014/10/20
- [elpa] 17/39: Version number added. Documentation fix. Indentation fix., Phillip Lord, 2014/10/20
- [elpa] 05/39: Ported from generic.el to define-derived-mode. Comment-character is now "#" rather than fudged "# " Delimited URIs now recognised as strings Electric indentation added. Indentation engine improved.,
Phillip Lord <=
- [elpa] 20/39: New keywords added., Phillip Lord, 2014/10/20
- [elpa] 18/39: Copes better with missing repos. Improved output., Phillip Lord, 2014/10/20
- [elpa] 19/39: Markdown support added., Phillip Lord, 2014/10/20
- [elpa] 21/39: Exclude nrepl mode., Phillip Lord, 2014/10/20
- [elpa] 14/39: Initial checkin., Phillip Lord, 2014/10/20
- [elpa] 23/39: Some code re-organisation. Checks whether pulse.el can cope with foreground pulse., Phillip Lord, 2014/10/20
- [elpa] 25/39: pabbrev-mode now sets inhibit-modification-hooks, Phillip Lord, 2014/10/20
- [elpa] 26/39: Improved keyboard handling., Phillip Lord, 2014/10/20
- [elpa] 22/39: Initial checkin, Phillip Lord, 2014/10/20
- [elpa] 27/39: Add cider-nrepl mode to ignored., Phillip Lord, 2014/10/20