~mwshinn/+junk/notes

« back to all changes in this revision

Viewing changes to notes2-mode.el

  • Committer: Max Shinn
  • Date: 2014-03-15 04:45:16 UTC
  • Revision ID: trombonechamp@gmail.com-20140315044516-86mtq3hk2ifwvhdj
Draft doctype (with highlighting, strikeout, and feedback bubbles), more robust bold/underline, better comments, caching web-based commands

Show diffs side-by-side

added added

removed removed

Lines of Context:
894
894
(defvar notes2-italic-face 'notes2-italic-face
895
895
  "Face name to use for italic text.")
896
896
 
 
897
(defvar notes2-underline-face 'notes2-underline-face
 
898
  "Face name to use for underline text.")
 
899
 
897
900
(defvar notes2-bold-face 'notes2-bold-face
898
901
  "Face name to use for bold text.")
899
902
 
936
939
(defvar notes2-inline-code-face 'notes2-inline-code-face
937
940
  "Face name to use for inline code.")
938
941
 
 
942
(defvar notes2-highlight-face 'notes2-highlight-face
 
943
  "Face name to use for highlighted text.")
 
944
 
 
945
(defvar notes2-strikeout-face 'notes2-strikeout-face
 
946
  "Face name to use for struckout text.")
 
947
 
939
948
(defvar notes2-list-face 'notes2-list-face
940
949
  "Face name to use for list markers.")
941
950
 
985
994
  "Face for italic text."
986
995
  :group 'notes2-faces)
987
996
 
 
997
(defface notes2-underline-face
 
998
  '((t (:inherit underline)))
 
999
  "Face for underlined text."
 
1000
  :group 'notes2-faces)
 
1001
 
988
1002
(defface notes2-bold-face
989
1003
  '((t (:inherit bold)))
990
1004
  "Face for bold text."
1055
1069
  "Face for inline code."
1056
1070
  :group 'notes2-faces)
1057
1071
 
1058
 
(defface notes2-list-face
1059
 
  '((t (:inherit font-lock-builtin-face)))
 
1072
(defface notes2-highlight-face
 
1073
  '((t (:inherit font-lock-constant-face :background "#FFFF00" :foreground "#000000")))
 
1074
  "Face for highlighted text."
 
1075
  :group 'notes2-faces)
 
1076
 
 
1077
(defface notes2-strikeout-face
 
1078
  '((t (:inherit font-lock-builtin-face :strike-through t :foreground "#FF0000")))
1060
1079
  "Face for list item markers."
1061
1080
  :group 'notes2-faces)
1062
1081
 
1178
1197
  "\\(\\\"\\|[^\\]\\)\\(\\(\"+\\)\\(\\(.\\|\n[^\n]\\)*?[^\"]\\)\\3\\)\\([^\"]\\|\\\"\\)"
1179
1198
  "Regular expression for matching inline code fragments.")
1180
1199
 
 
1200
(defconst notes2-regex-highlight
 
1201
  "\\(\\|\\|[^\\]\\)\\(\\(|+\\)\\(\\(.\\|\n[^\n]\\)*?[^|]\\)\\3\\)\\([^|]\\|\\|\\)"
 
1202
  "Regular expression for matching highlighted fragments.")
 
1203
 
 
1204
(defconst notes2-regex-strikeout
 
1205
  "\\(\\~\\|[^\\]\\)\\(\\(~+\\)\\(\\(.\\|\n[^\n]\\)*?[^~]\\)\\3\\)\\([^~]\\|\\~\\)"
 
1206
  "Regular expression for matching strikeouts.")
 
1207
 
1181
1208
(defconst notes2-regex-pre
1182
1209
  "^\\(    \\|\t\\).*$"
1183
1210
  "Regular expression for matching preformatted text sections.")
1187
1214
  "Regular expression for matching list items.")
1188
1215
 
1189
1216
(defconst notes2-regex-bold
1190
 
  "\\*\\<.+?\\>\\*"
 
1217
  "\\(\\\\*\\|[^\\]\\)\\(\\(\\*+\\)\\(\\(.\\|\n[^\n]\\)*?[^\\*]\\)\\3\\)\\([^\\*]\\|\\\\*\\)"
1191
1218
  "Regular expression for matching bold text.
1192
1219
Group 1 matches the space or tab before the opening asterisk, if
1193
1220
any, ensuring it is at the start of a word.  Group 2 matches the
1210
1237
  "Regular expression for matching TODO notation.")
1211
1238
 
1212
1239
(defconst notes2-regex-italic
1213
 
  "\\([/_]\\)\\<.+?\\>\\1"
1214
 
  "Regular expression for matching italic text.  Underlined text
1215
 
  is called italic text for these purposes, since emacs cannot
1216
 
  draw italics.")
 
1240
  "\\(\\/\\|[^\\]\\)\\(\\(/+\\)\\(\\(.\\|\n[^\n]\\)*?[^/]\\)\\3\\)\\([^/]\\|\\/\\)"
 
1241
  "Regular expression for matching italic text.")
 
1242
 
 
1243
(defconst notes2-regex-underline
 
1244
  "\\(\\_\\|[^\\]\\)\\(\\(_+\\)\\(\\(.\\|\n[^\n]\\)*?[^_]\\)\\3\\)\\([^_]\\|\\_\\)"
 
1245
  "Regular expression for matching underlined text.")
1217
1246
 
1218
1247
(defconst notes2-regex-blockquote
1219
1248
  "^[ \t]*\\(>\\).*$"
1273
1302
   ;(cons 'notes2-match-pre-blocks '((0 notes2-pre-face)))
1274
1303
   ;(cons 'notes2-match-code 'notes2-inline-code-face)
1275
1304
   (cons notes2-regex-code 'notes2-inline-code-face)
 
1305
   (cons notes2-regex-highlight '(2 notes2-highlight-face))
 
1306
   (cons notes2-regex-strikeout '(2 notes2-strikeout-face))
1276
1307
   (cons 'notes2-match-comments '((0 notes2-comment-face)))
1277
1308
   (cons notes2-regex-title 'notes2-title-face)
1278
1309
   (cons notes2-regex-math-inline '(2 notes2-math-face))
1306
1337
                                      (4 notes2-link-face t)))
1307
1338
   (cons notes2-regex-update 'notes2-update-face)
1308
1339
   (cons notes2-regex-todo 'notes2-important-face)
1309
 
   (cons notes2-regex-bold 'notes2-bold-face)
1310
 
   (cons notes2-regex-italic 'notes2-italic-face)
 
1340
   (cons notes2-regex-bold '(2 notes2-bold-face))
 
1341
   (cons notes2-regex-italic '(2 notes2-italic-face))
 
1342
   (cons notes2-regex-underline '(2 notes2-underline-face))
1311
1343
   (cons notes2-regex-important '((1 notes2-important-face t)))
1312
1344
   )
1313
1345
  "Syntax highlighting for Notes2 files.")
3389
3421
  (save-window-excursion 
3390
3422
    (shell-command (concatenate 'string 
3391
3423
                                "okular " 
3392
 
                                (buffer-name)
 
3424
                                (buffer-file-name)
3393
3425
                                ".pdf &"))))
3394
3426
 
3395
3427
(defun notes2-latexify-notes ()
3396
3428
  "Run latexify-notes.pl and display the output in a new buffer."
3397
3429
  (interactive nil)
3398
 
  (shell-command (concatenate 'string "/opt/notes-bin/latexify-notes.pl " (buffer-name)))
 
3430
  (shell-command (concatenate 'string "/opt/notes-bin/latexify-notes.pl " (buffer-file-name)))
3399
3431
  )
3400
3432
 
3401
3433
 
3636
3668
      (forward-char 2)
3637
3669
      (looking-at "-> "))
3638
3670
    "   ")
 
3671
   ;; Captions for figures
 
3672
   ((save-excursion 
 
3673
      (re-search-backward "\n\n")
 
3674
      (forward-char 2)
 
3675
      (looking-at "<<"))
 
3676
    "  ")
 
3677
   ;; Math environment
 
3678
   ;; ((save-excursion 
 
3679
   ;;    (re-search-backward "\n\n")
 
3680
   ;;    (forward-char 2)
 
3681
   ;;    (looking-at "\\$\\$\\$"))
 
3682
   ;;  (match-string-no-properties 0))
3639
3683
   ;; Comment
3640
3684
   ((looking-at "^[ \t]*#[ \t]*")
3641
3685
    (match-string-no-properties 0))
3701
3745
  (setq tab-width 2)
3702
3746
  ;; Comments
3703
3747
  (make-local-variable 'comment-start)
3704
 
  (setq comment-start "/\\* ")
 
3748
  (setq comment-start "/\* ")
3705
3749
  (make-local-variable 'comment-end)
3706
 
  (setq comment-end " \\*/")
 
3750
  (setq comment-end " \*/")
3707
3751
  (make-local-variable 'comment-start-skip)
3708
3752
  (setq comment-start-skip "/\\*[ \t]*")
3709
3753
  (make-local-variable 'comment-column)
3727
3771
       'notes2-end-of-defun)
3728
3772
  ;; Paragraph filling
3729
3773
  (set (make-local-variable 'paragraph-start)
3730
 
       "\f\\|[ \t]*$\\|[ \t]*[*+-] \\|[ \t]*[0-9]+\\.\\|[ \t]*: ")
 
3774
       "\f\\|[ \t]*$\\|[ \t]*[*+-] \\|[ \t]*[0-9]+\\.\\|[ \t]*: \\|{\\|<")
3731
3775
  (set (make-local-variable 'paragraph-separate)
3732
3776
       "\\(?:[ \t\f]*\\)$")
3733
3777
  (set (make-local-variable 'adaptive-fill-first-line-regexp)