Hi If I am going to be flamed please do it quickly.... I am trying to write my own major mode and pretty much the most important thing at the moment is syntax highlighting, I will get round to indentation later... I have set up some key words to parse on and they get set in their given colours but I want to have the equivilent to the C mode whereby int abc; the "int" gets the font-lock-keyword-face and the "abc" gets the font-lock-variable-name-face I have a number of key words (equivilent to int / char / etc) and it is quite a limited list iclass reference schedule semantic These I can search for and set in the keyword face but I am unsure how to find the second word, whatever it may be, and I obviously dont want to highlight every second word!! I dont know lisp, I am just hacking about, looking at various modes, perl, make, etc and cutting and pasting untill it seems to work! However I suspec a syntax table or something has to be built up but with my lack of lisp knowledge I cant follow whats actually going on can anyone help? cheers John PS. Dont laugh, but here is a copy what I have done so far ;; ;; Here we define some variables that all major modes should define ;; (defvar tie-mode-hook nil) (defvar tie-mode-map nil "Keymap for TIE major mode") ;; ;; Here we're defining a default keymap if the user doesn't already have one ;; (if tie-mode-map nil (setq tie-mode-map (make-keymap))) ;; ;; Here, we append a definition to auto-mode-alist. ;; This tells emacs that when a buffer with a name ending with .tie is opened, ;; then tie-mode should be started in that buffer ;; (setq auto-mode-alist (append '(("\\.tie\\'" . tie-mode)) auto-mode-alist)) ;; ;; Here we have defined our minimal set of keywords for emacs to highlight ;; ;; TIE keywords... ;; coprocessor ctype field iclass interface opcode operand proto reference regfile ;; schedule semantic state table user_register ;; ;; Because font-lock is so resource-intensive, providing optimized regexps to ;; font-lock should provide a boost in performance. Not done here as it is still in the ;; "get it working phase!" ;; (defconst tie-font-lock-keywords-1 (list ;;'("^;.*$" . font-lock-preprocessor-face) '("^//.*$" . font-lock-comment-face) '("[^$]//.*$" . font-lock-comment-face) '("\\<\\(coprocessor\\|ctype\\|def\\|field\\|interface\\|opcode\\|operand\\| proto\\|regfile\\|state\\|table\\|use\\|user_register\\)\\>" . font-lock-keyword-face) '("\\<\\(iclass\\|reference\\|schedule\\|semantic\\)\\>" . font-lock-preprocessor-face) ;;'("\\( \\|state\\)[_A-Za-z0-9]*" . font-lock-function-name-face) ;; PUTS EVERYTHING IN BLUE ;;'("\\(state\\|opcode\\)\\b[_A-Za-z0-9]+\\b" . font-lock-function-name-face) ;;'("state\b[_A-Za-z0-9]*\b" . font-lock-function-name-face) ;;'("state[\t\s\w]*[_A-Za-z0-9]+" . font-lock-function-name-face) ;;'("state [_A-Za-z0-9]+" . font-lock-function-name-face) ;;'("\\(state\\)[_A-Za-z0-9]+[ \t]*\+?=" . font-lock-function-name-face) ;;'("\\( \\|state\\)[_A-Za-z0-9]+\?\\sw+\\" . font-lock-function-name-face) ) "Minimal highlighting expressions for TIE mode") ;; ;; Now I've defined the second level of highlighting. Note that the second level is appended to the first level, ;; resulting in a single keyword variable that matches everything in both levels. ;; ;; More TIE key words ;; assign in inout out wire ;; TIEadd TIEaddn TIEcmp TIEcsa TIEmac TIEmul TIEmulpp TIEmux TIEpsel TIEsel ;; (defconst tie-font-lock-keywords-2 (append tie-font-lock-keywords-1 (list '("\\<\\(assign\\|in\\|inout\\|out\\|wire\\)\\>" . font-lock-type-face) '("\\<\\(TIE\\(add\\|addn\\|cmp\\|csa\\|mac\\|mul\\|mulpp\\|mux\\|psel\\|sel \\)\\)\\>" . font-lock-string-face) )) "Additional Keywords to highlight in TIE mode") ;; ;; I've now defined more TIE constants. This completes the list of TIE keywords. ;; ;; Even more TIE key words ;; VAddr MemDataIn8 MemDataIn16 MemDataIn32 MemDataIn64 MemDataIn128 ;; MemDataOut8 MemDataOut16 MemDataOut32 MemDataOut64 MemDataOut128 ;; LoadByteDisable StoreByteDisable ;; (defconst tie-font-lock-keywords-3 (append tie-font-lock-keywords-2 (list '("\\<\\(VAddr\\|MemDataIn\\(8\\|16\\|32\\|64\\|128\\)\\|MemDataOut\\(8\\|16 \\|32\\|64\\|128\\)\\|LoadByteDisable\\|StoreByteDisable\\)\\>" . font-lock-variable-name-face) )) "All-out highlighting in TIE mode") ;; ;; Here I've defined the default level of highlighting to be the maximum which is my preference - and it is my mode!! ;; (defvar tie-font-lock-keywords tie-font-lock-keywords-3 "Default highlighting expressions for TIE mode") (defconst tie-comment-start-regexp "//\\|/\\*" "Dual comment value for `comment-start-regexp'.") ;; ;; And now to launch the major mode.... ;; (defun tie-mode () "Major mode for editing TIE files." (interactive) (kill-all-local-variables) (make-local-variable 'font-lock-defaults) (setq font-lock-defaults '(tie-font-lock-keywords)) (setq major-mode 'tie-mode) (setq mode-name "Tie") (run-hooks 'tie-mode-hooks)) (provide 'tie-mode)