python parser with all code blocks
This commit is contained in:
parent
1f38085c8f
commit
5538af82c0
@ -188,24 +188,32 @@ position in the CONTENT."
|
||||
(origami-fold-root-node (funcall javadoc content)))))))
|
||||
|
||||
(defun origami-python-parser (create)
|
||||
"Parse python block of codes and invoke callback CREATE on parsed regions."
|
||||
(lambda (content)
|
||||
(with-temp-buffer
|
||||
(insert content)
|
||||
(python-mode)
|
||||
(goto-char (point-min))
|
||||
(beginning-of-defun -1)
|
||||
(let (beg (end (point-max)) offset acc)
|
||||
(while (not (= (point) end))
|
||||
(setq beg (point))
|
||||
(search-forward-regexp ":" nil t)
|
||||
(setq offset (- (point) beg))
|
||||
(end-of-defun)
|
||||
(backward-char)
|
||||
(setq end (point))
|
||||
(when (> offset 0)
|
||||
(setq acc (cons (funcall create beg end offset nil) acc)))
|
||||
(beginning-of-defun -1))
|
||||
(reverse acc)))))
|
||||
(defun origami-python-parser-one-level-blocks (wrap-beg wrap-end)
|
||||
"Parser one level python blocks of codes from WRAP-BEG to WRAP-END."
|
||||
(goto-char wrap-beg)
|
||||
(let ((beg wrap-beg) (prev -1) (end wrap-end) (offset 0) children acc)
|
||||
(while (and (< prev beg) (< beg end))
|
||||
(python-nav-forward-block)
|
||||
(setq prev beg) ;; if prev == beg, region has not next block
|
||||
(setq beg (point))
|
||||
|
||||
(save-excursion (python-nav-end-of-block) (setq end (point)))
|
||||
(save-excursion (python-nav-end-of-statement) (setq offset (- (point) beg)))
|
||||
(save-excursion
|
||||
(python-nav-forward-block)
|
||||
(when (and (< (point) end) (< prev beg)) (setq children t)))
|
||||
(when (and (< prev beg) (< beg end) (< end wrap-end))
|
||||
(setq acc (cons (funcall create beg end offset (and children (origami-python-parser-one-level-blocks beg end))) acc)))
|
||||
)
|
||||
(reverse acc)))
|
||||
(origami-python-parser-one-level-blocks (point-min) (point-max)))))
|
||||
|
||||
|
||||
(defun origami-lisp-parser (create regex)
|
||||
(lambda (content)
|
||||
|
Loading…
Reference in New Issue
Block a user