Use custom faces for everything
[scdoc-mode.git] / scdoc-mode.el
1 ;;; scdoc-mode.el --- Major mode for scdoc files -*- lexical-binding: t; -*-
2 ;; Copyright 2021 Armaan Bhojwani ISC license.
3
4 ;; Author: Armaan Bhojwani <me@armaanb.net>
5 ;; Maintainer: Armaan Bhojwani <me@armaanb.net>
6 ;; Created: May 30, 2021
7 ;; Version: 0.0.0
8 ;; URL: https://git.armaanb.net/scdoc-mode
9
10 ;;; Commentary:
11 ;; auto-fill-mode is reccomended.  Make sure to add the following to
12 ;; your init file:
13 ;;
14 ;; (autoload 'scdoc-mode "scdoc-mode" "Major mode for editing scdoc files" t)
15 ;; (add-to-list 'auto-mode-alist '("\\.scd\\'" . scdoc-mode))
16
17 ;;; Code:
18
19 (defface scdoc-level-1-face
20   '((t :inherit org-level-1))
21         "Face for scdoc level 1 headings."
22         :group 'scdoc-faces)
23 (defvar scdoc-level-1-face 'scdoc-level-1-face)
24
25 (defface scdoc-level-2-face
26   '((t :inherit org-level-2))
27         "Face for scdoc level 2 headings."
28         :group 'scdoc-faces)
29 (defvar scdoc-level-2-face 'org-level-2-face)
30
31 (defface scdoc-line-break-face
32   '((t :inherit font-lock-warning-face))
33         "Face for scdoc manual line break markers."
34         :group 'scdoc-faces)
35 (defvar scdoc-line-break-face 'scdoc-line-break-face)
36
37 (defface scdoc-underline-face
38   '((t :inherit underline))
39         "Face for scdoc underlined text."
40         :group 'scdoc-faces)
41 (defvar scdoc-underline-face 'scdoc-underline)
42
43 (defface scdoc-bold-face
44   '((t :weight extra-bold))
45         "Face for scdoc bolded text."
46         :group 'scdoc-faces)
47 (defvar scdoc-bold-face 'scdoc-bold-face)
48
49 (defface scdoc-man-face
50   '((t :inherit font-lock-builtin-face
51                          :weight extra-bold))
52         "Face for scdoc references to manpages."
53         :group 'scdoc-faces)
54 (defvar scdoc-man-face 'scdoc-man-face)
55
56 (defface scdoc-literal-face
57   '((t :inherit font-lock-comment-delimiter-face))
58         "Face for scdoc literal blocks."
59         :group 'scdoc-faces)
60 (defvar scdoc-literal-face 'scdoc-literal-face)
61
62 (defface scdoc-comment-face
63   '((t :inherit font-lock-comment-face))
64         "Face for scdoc comments."
65         :group 'scdoc-faces)
66 (defvar scdoc-comment-face 'scdoc-comment-face)
67
68 (defvar scdoc-faces
69         '(("^# .*" . scdoc-level-1) ; Heading 1
70                 ("^## .*" . scdoc-level-2) ; Heading 2
71                 ("++$" . scdoc-line-break-face) ; Line break
72                 ("\\(\\s-\\|^\\)_.*_" . scdoc-underline-face) ; Underlines
73                 ("\\*.*\\*" . scdoc-bold-face) ; Bold
74                 ("^```$" . scdoc-literal-face) ; Literal text
75                 ("^; .*" . scdoc-comment-face) ; Comments
76                 ("\\(\\s-\\|^\\)\\sw*\([0-9]\)" . scdoc-man-face) ; References to manpages
77                 ))
78
79 (define-derived-mode scdoc-mode text-mode "scdoc"
80         "Major mode for editing scdoc files."
81         (setq font-lock-defaults '(scdoc-faces)
82                                 fill-column 80))
83
84 (provide 'scdoc-mode)
85 ;;; scdoc-mode.el ends here