[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/org-real 30658462e8 005/188: org-real--merge and org-re
From: |
ELPA Syncer |
Subject: |
[elpa] externals/org-real 30658462e8 005/188: org-real--merge and org-real-world |
Date: |
Sun, 5 May 2024 22:55:48 -0400 (EDT) |
branch: externals/org-real
commit 30658462e86cd1e5a2a2e2f24128764514489488
Author: Amy Grinn <grinn.amy@gmail.com>
Commit: Amy Grinn <grinn.amy@gmail.com>
org-real--merge and org-real-world
---
garage.org | 4 +++
org-real.el | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------
tests.org | 2 +-
3 files changed, 97 insertions(+), 10 deletions(-)
diff --git a/garage.org b/garage.org
new file mode 100644
index 0000000000..92cf5f5a1f
--- /dev/null
+++ b/garage.org
@@ -0,0 +1,4 @@
+* Items in the garage
+ - [[real://garage/workbench?rel=in/wrench?rel=on][wrench]]
+ - [[real://garage/workbench?rel=in/ratchet?rel=on][ratchet]]
+ - [[real://garage/east wall?rel=in/rake?rel=on][rake]]
diff --git a/org-real.el b/org-real.el
index 17fc2d272f..62510d654e 100644
--- a/org-real.el
+++ b/org-real.el
@@ -60,7 +60,7 @@
(oset box :in-front t))
((string= rel "above")
(oset box :x-order (oref prev :x-order))
- (oset box :y-order (- 1 (oref prev :y-order)))
+ (oset box :y-order (- (oref prev :y-order) 1))
(oset box :behind (oref prev :behind)))
((string= rel "below")
(oset box :x-order (oref prev :x-order))
@@ -68,7 +68,7 @@
(oset box :behind (oref prev :behind))
(oset box :in-front (oref prev :in-front)))
((string= rel "to the left of")
- (oset box :x-order (- 1 (oref prev :x-order)))
+ (oset box :x-order (- (oref prev :x-order) 1))
(oset box :y-order (oref prev :y-order))
(oset box :behind (oref prev :behind))
(oset box :in-front (oref prev :in-front)))
@@ -113,6 +113,90 @@
tokens)))
(add-to-list 'containers (list :name host))))
+(defun org-real--parse-buffer ()
+ (let ((boxes '()))
+ (org-element-map (org-element-parse-buffer) 'link
+ (lambda (link)
+ (if (string= (org-element-property :type link) "real")
+ (add-to-list 'boxes
+ (org-real--create-box
+ (org-real--parse-url
+ (org-element-property :raw-link link)))
+ t))))
+ (org-real--merge boxes)))
+
+(defun org-real--merge (boxes)
+ (if (< (length boxes) 2)
+ (if (= 0 (length boxes))
+ (org-real--box)
+ (car boxes))
+ (let ((world (org-real--box))
+ box)
+ (while boxes
+ (setq box (pop boxes))
+ (org-real--merge-into box world))
+ world)))
+
+(defun org-real--merge-into (from to)
+ (let ((from-boxes (reverse (org-real--expand from)))
+ (to-boxes (reverse (org-real--expand to))))
+ (unless (seq-some
+ (lambda (from-box)
+ (seq-some
+ (lambda (to-box)
+ (when (and (slot-boundp from-box :name)
+ (slot-boundp to-box :name)
+ (string= (oref from-box :name) (oref to-box
:name)))
+ (mapc
+ (lambda (child)
+ (org-real--flex-add child to-box to))
+ (oref from-box :children))
+ t))
+ to-boxes))
+ from-boxes)
+ (org-real--flex-add from to to))))
+
+(defun org-real--flex-add (box parent world)
+ (let* ((cur-width (org-real--get-width world))
+ (siblings (oref parent :children))
+ (last-sibling (and siblings (seq-reduce
+ (lambda (max sibling)
+ (let ((max-x (oref max :x-order))
+ (max-y (oref max :y-order))
+ (sibling-x (oref sibling :x-order))
+ (sibling-y (oref sibling
:y-order)))
+ (if (> sibling-y max-y)
+ sibling
+ (if (and (= max-y sibling-y) (>
sibling-x max-x))
+ sibling
+ max))))
+ siblings
+ (org-real--box :y-order -9999)))))
+ (oset box :parent parent)
+ (object-add-to-list parent :children box)
+ (when last-sibling
+ (oset box :y-order (oref last-sibling :y-order))
+ (oset box :x-order (+ 1 (oref last-sibling :x-order)))
+ (let ((new-width (org-real--get-width world)))
+ (when (and (> new-width cur-width) (> new-width 80))
+ (oset box :y-order (+ 1 (oref last-sibling :y-order)))
+ (oset box :x-order 0))))))
+
+
+(defun org-real--expand (box)
+ (apply 'append (list box) (mapcar 'org-real--expand (oref box :children))))
+
+(defun org-real-world ()
+ (interactive)
+ (let* ((box (org-real--parse-buffer))
+ (width (org-real--get-width box))
+ (height (org-real--get-height box)))
+ (with-current-buffer-window "Org Real" nil nil
+ (dotimes (_ height) (insert (concat (make-string width ?\s) "\n")))
+ (org-real--draw box 0)
+ (special-mode))))
+
+
(org-link-set-parameters "real"
:follow #'org-real-follow)
@@ -270,7 +354,7 @@
(y-order (oref box :y-order))
(above (seq-filter
(lambda (child) (and (= x-order (oref child :x-order))
- (< y-order (oref child :y-order))))
+ (< (oref child :y-order) y-order)))
(oref parent :children)))
(directly-above (and above (seq-reduce
(lambda (max child)
@@ -280,7 +364,8 @@
above
(org-real--box :y-order -9999)))))
(if directly-above
- (+ (cdr org-real--margin) offset (org-real--get-top
directly-above))
+ (+ (org-real--get-top directly-above)
+ (org-real--get-height directly-above))
top)))))
(defun org-real--get-left (box)
@@ -293,7 +378,7 @@
(org-real--get-left parent)))
(to-the-left (seq-filter
(lambda (child) (and (= (oref box :y-order) (oref
child :y-order))
- (< (oref box :x-order) (oref
child :x-order))))
+ (< (oref child :x-order) (oref
box :x-order))))
(oref parent :children)))
(directly-left (and to-the-left
(seq-reduce
@@ -305,9 +390,7 @@
(org-real--box :x-order -9999)))))
(if directly-left
(+ (org-real--get-left directly-left)
- (if (slot-boundp directly-left :name)
- (length (oref directly-left :name))
- 0)
- offset)
+ (org-real--get-width directly-left)
+ (car org-real--margin))
left))))
diff --git a/tests.org b/tests.org
index 23fbdc5c9b..a33158061b 100644
--- a/tests.org
+++ b/tests.org
@@ -1,5 +1,5 @@
-* TODO Replace [[real://bathroom cabinet/third
shelf?rel=in/razors?rel=above/toothbrush?rel=to the left of][toothbrush]]
+* TODO Replace [[real://bathroom cabinet/second shelf?rel=in/third
shelf?rel=above/razors?rel=above/toothbrush?rel=to the left of][toothbrush]]
* SOMEDAY Get new tires for the [[real://shed/bike?rel=behind][bike]]
* Items to bring to the park
- [[real://closet/sunscreen?rel=in/mosquito spray?rel=in front of][mosquito
spray]]
- [elpa] externals/org-real 82abfcfe66 030/188: Satisfying elc compiler, (continued)
- [elpa] externals/org-real 82abfcfe66 030/188: Satisfying elc compiler, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 550dc94a04 041/188: Removed reference to org-real-box, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 326502dcb6 057/188: Renamed org-real-include-children to org-real-include-context, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real ecb6ab83f8 065/188: Merge branch 'next' into 'main', ELPA Syncer, 2024/05/05
- [elpa] externals/org-real bf5bb1b5a3 076/188: Added ability to collapse and expand boxes, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 31ad92ec6f 073/188: Bump version, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real cf813c2309 086/188: Added document container to org-real-headlines, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 65d594f81a 083/188: Added test framework, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 3234a332f8 089/188: Show diffs if test failed, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real c4213cffec 093/188: Merge branch 'next' into 'main', ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 30658462e8 005/188: org-real--merge and org-real-world,
ELPA Syncer <=
- [elpa] externals/org-real 163b943bdb 022/188: get-width compares children with margins included, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 1bf5d4b789 014/188: Standardized pretty printing for org-real-world and opening a link, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real f07defce45 027/188: Added apply function for rearranging other links, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 35bd2ffb8b 040/188: Merge into single file, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 7aa02cbfc5 042/188: v0.1.0, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 92759a5a63 035/188: Satisfying ELC compiler, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 5b072b22fc 059/188: Requirements before patches, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 1cdf75a535 061/188: More edge cases, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 5aa1d48508 072/188: Updated documentation, ELPA Syncer, 2024/05/05
- [elpa] externals/org-real 498121ff24 082/188: Satisfying elc compiler, ELPA Syncer, 2024/05/05