mieki256's diary



2018/03/07(水) [n年前の日記]

#1 [xyzzy] xyzzy のlispについてまだ勉強中

リンクのURLを変換する処理について、まだ試行錯誤中。

例としては…。以下のような記述があったとして。
 LINK http://hogefuga/~piyo/diary/201312203.html#201312203 piyo's diary - 記事名

以下のように変更したい。
 LINK #{2013,12,20,3} piyo's diary - 記事名

一応、こんな感じかなと。
(defun change-hnf-link-uri ()
  (interactive)
  (if (looking-at "^LINK http://keroro/.+#")
      (progn
        (delete-region (match-beginning 0) (match-end 0))
        (goto-bol)
        (insert "LINK #{")
        (forward-char 4) (insert ",")
        (forward-char 2) (insert ",")
        (forward-char 2) (insert ",")
        (forward-char 1) (insert "}"))))

(define-key *hnf-mode-map* '(#\C-c #\C-k) 'change-hnf-link-uri)

別のやり方も試してみたり。looking-at で探す際にグルーピングをしておいて、後で特定のフォーマットに並び替えて挿入。
;; 別のやり方
(defun change-hnf-link-uri-b ()
  (interactive)
  (if (looking-at "^LINK http://keroro/.+#")
      (progn
        (delete-region (match-beginning 0) (match-end 0))
        (goto-bol)
        (if (looking-at "^\\([0-9]\\{4\\}\\)\\([0-9]\\{2\\}\\)\\([0-9]\\{2\\}\\)\\([0-9]+\\)S\\([0-9]+\\)")
            (let ((yyyy (match-string 1)) (mm (match-string 2))
                  (dd (match-string 3)) (xx (match-string 4)) (yy (match-string 5)))
              (delete-region (match-beginning 0) (match-end 0))
              (goto-bol)
              (insert (format nil "LINK #{~A,~A,~A,~A,~A}" yyyy mm dd xx yy)))
          (if (looking-at "^\\([0-9]\\{4\\}\\)\\([0-9]\\{2\\}\\)\\([0-9]\\{2\\}\\)\\([0-9]+\\)")
              (let ((y (match-string 1)) (m (match-string 2))
                    (d (match-string 3)) (s (match-string 4)))
                (delete-region (match-beginning 0) (match-end 0))
                (goto-bol)
                (insert (format nil "LINK #{~A,~A,~A,~A}" y m d s)))
            )))))

正規表現のグルーピングを使うところでちょっとハマった。例えば、M-x replace-regexp などを使うときは、
\([0-9]\{4\}\)
みたいな書き方でいいのだけど。lispスクリプト(?)内に正規表現を書く際は、
\\([0-9]\\{4\\}\\)
といった感じに書かないといかんらしい。

つまり、
\(   \)   \{   \}
は、
\\(  \\)  \\{  \\}
と書くことになるようで。最初、そのことが分からなくて、「変だなー。マッチしないなー」と悩んでしまった…。

参考ページ。 :


以上です。

過去ログ表示

Prev - 2018/03 - Next
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

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project