forked from Difrex/idec.el
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathidec-parser.el
115 lines (92 loc) · 3.56 KB
/
idec-parser.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
;;; idec-parser.el --- This file part of GNU Emacs client for IDEC network
;; Copyright (c) 2017 Denis Zheleztsov
;; Author: Denis Zheleztsov <[email protected]>
;; Keywords: lisp,network,IDEC
;; Version: 0.1
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; In active developent.
;; Fetched node must be support modern IDEC extensions like /list.txt, /x/c, etc.
;;; Code:
;; Message fields pasing
(defun trim-string (string)
"Remove white spaces in beginning and ending of STRING;
White space here is any of: space, tab, Emacs newline (line feed, ASCII 10)."
(replace-regexp-in-string "\\`[ \t\n]*" "" (replace-regexp-in-string "[ \t\n]*\\'" "" string)))
(defun get-message-tags (msg)
"Get MSG tags."
;; (trim-string
(nth 0 (split-string msg "\n")))
(defun get-message-echo (msg)
"Get MSG echo."
;; (trim-string
(nth 1 (split-string msg "\n")))
(defun get-message-time (msg)
"Get MSG time."
(current-time-string
(car (read-from-string (nth 2 (split-string msg "\n"))))))
(defun get-message-author (msg)
"Get MSG author."
;; ;; (trim-string
(nth 3 (split-string msg "\n")))
(defun get-message-address (msg)
"Get MSG address."
;; (trim-string
(nth 4 (split-string msg "\n")))
(defun get-message-recipient (msg)
"Get MSG recipient."
;; (trim-string
(nth 5 (split-string msg "\n")))
(defun get-message-subj (msg)
"Get MSG subject."
;; (trim-string
(nth 6 (split-string msg "\n")))
(defun get-message-body (msg)
"Get MSG body text.
Return list with body content."
(-drop 8 (split-string msg "\n")))
(defun get-longest-field (field msg-list)
"Return longest FIELD in MSG-LIST."
(defvar field-legth '())
(defvar field-max nil)
(setq field-max 0)
(maphash (lambda (id msg)
(when (> (length (get-message-field msg field))
field-max)
(setq field-max (length (get-message-field msg field)))))
msg-list)
field-max)
(defun get-longest-string (lst)
"Get length of longest string from LST."
(let (max)
(setq max 0)
(dolist (str lst)
(message (number-to-string max))
(if (> (length str) max)
(setq max (length str))))
max))
(defun get-message-field (msg field)
"Get message MSG FIELD."
(defvar fields-hash (make-hash-table :test 'equal)
"Hashtable with MSG parsing functions.")
;; Define hashtable first
(puthash "tags" (get-message-tags msg) fields-hash)
(puthash "echo" (get-message-echo msg) fields-hash)
(puthash "time" (get-message-time msg) fields-hash)
(puthash "author" (get-message-author msg) fields-hash)
(puthash "address" (get-message-address msg) fields-hash)
(puthash "recipient" (get-message-recipient msg) fields-hash)
(puthash "subj" (get-message-subj msg) fields-hash)
(puthash "body" (get-message-body msg) fields-hash)
(gethash field fields-hash))
(provide 'idec-parser)
;;; idec-parser.el ends here