Fix: string-to-int was removed in v26.1.
;;; gaphrase.el --- major mode for editing gaphrase dialog files -*- lexical-binding: t -*-
;; Copyright (C) 2019 by Oleksandr Gavenko <gavenkoa@gmail.com>
;; You can do anything with this file without any warranty.
;; Author: Oleksandr Gavenko <gavenkoa@gmail.com>
;; Maintainer: Oleksandr Gavenko <gavenkoa@gmail.com>
;; Created: 2019
;; Version: 0.1
;; Keywords: dict, dictionary
;;; Commentary:
;;
;; Mode can be installed by:
;;
;; (autoload 'gaphrase-mode "gaphrase")
;;
;; File association can be registered by:
;;
;; (add-to-list 'auto-mode-alist (cons "\\.gaphrase$" 'gaphrase-mode))
;;; Code:
(defvar gaphrase-font-lock-keywords
'(("^# [1-9][0-9]*" . font-lock-type-face)
("^## [1-9][0-9]*" . font-lock-warning-face)
("^- " . font-lock-keyword-face)))
(defun gaphrase-next-num ()
(save-excursion
(goto-char (point-min))
(let (beg end num)
(catch 'return
(when (looking-at "## \\([1-9][0-9]*\\)")
(setq beg (match-beginning 1)
end (match-end 1))
(setq num (string-to-number (buffer-substring beg end)))
(delete-region beg end)
(goto-char beg)
(setq num (1+ num))
(insert (int-to-string num))
(throw 'return num))
(insert "## 1\n")
1))))
(defun gaphrase-insert-template ()
(interactive)
(forward-line 0)
(when (looking-at "# ")
(forward-line 1))
(unless (re-search-forward "^# " (+ (point) 10240) t)
(goto-char (point-max)))
(forward-line 0)
(while (memq (char-before) '(?\ ?\n ?\t))
(delete-char -1))
(insert "\n# ")
(insert (int-to-string (gaphrase-next-num)))
(insert "\n- \n")
(backward-char))
(defun gaphrase-insert-sentence ()
(interactive)
(forward-line 1)
(while (not (or (eobp)
(eq (char-after) ?-)))
(forward-line 1))
(insert ?\n)
(backward-char)
(insert "- "))
(define-derived-mode gaphrase-mode fundamental-mode "gaphrase"
(setq font-lock-defaults '(gaphrase-font-lock-keywords))
(define-key (current-local-map) [C-return] 'gaphrase-insert-template)
(define-key (current-local-map) [S-return] 'gaphrase-insert-sentence))
(provide 'gaphrase)
;;; gaphrase.el ends here