emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/sketch-mode 80e01ba 2/2: Add first limited version of i


From: ELPA Syncer
Subject: [elpa] externals/sketch-mode 80e01ba 2/2: Add first limited version of import functionality
Date: Wed, 27 Oct 2021 10:57:31 -0400 (EDT)

branch: externals/sketch-mode
commit 80e01babeef97244c11848a0d5de35865c1b6dbb
Author: Daniel Nicolai <dalanicolai@gmail.com>
Commit: Daniel Nicolai <dalanicolai@gmail.com>

    Add first limited version of import functionality
---
 sketch-mode.el | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 93 insertions(+), 4 deletions(-)

diff --git a/sketch-mode.el b/sketch-mode.el
index ed43f04..e01270c 100644
--- a/sketch-mode.el
+++ b/sketch-mode.el
@@ -105,6 +105,8 @@
 
 (defvar sketch-call-buffer nil)
 
+(defvar sketch-snippet nil)
+
 (defvar sketch-lisp-buffer-name nil)
 (defvar sketch-side-window-max-width (lambda () (- 1 (/ (float (car
                                                                 (image-size
@@ -375,7 +377,8 @@ If value of variable ‘sketch-show-labels' is ‘layer', 
create ..."
                            ('polygon "g")
                            ('freehand "f")
                            ('text "t")
-                           ('group "g"))))
+                           ('group "g")
+                           ('snippet "s"))))
          (idx 0)
          (label (concat prefix (number-to-string idx)))
          (labels (sketch-labels-list)))
@@ -1244,14 +1247,14 @@ returned by the function 
`sketch-parse-transform-string'"
       (setq sketch-layers-list (dom-by-id sketch-root "layer"))
       (sketch-redraw))))
 
-(defun sketch-modify-object (&optional group)
+(defun sketch-modify-object (&optional node)
   (interactive)
   (let ((show-labels sketch-show-labels))
     (setq sketch-show-labels "all")
     (sketch-toolbar-refresh)
     (sketch-redraw)
-    (let* ((object-label (if group
-                             group
+    (let* ((object-label (if node
+                             node
                            (completing-read "Transform element with id: "
                                             (sketch-labels-list))))
            (buffer (get-buffer-create (format "*sketch-object-%s*" 
object-label))))
@@ -1732,6 +1735,92 @@ color."
       (while (yes-or-no-p "Different part?")
         (sketch-rotate-angle))))
 
+(defun sketch-snippet-get-dom (svg-file)
+  (interactive "fCreate dom from file: ")
+  (with-temp-buffer "svg"
+                    (insert-file-contents-literally svg-file)
+                    (xml-remove-comments (point-min) (point-max))
+                    (libxml-parse-xml-region (point-min) (point-max))))
+
+(defun sketch-snippets-add-ids (dom)
+  (let ((idx 0))
+    (dolist (n (dom-by-tag dom 'g))
+      (dom-set-attribute n 'id (number-to-string idx))
+      (setq idx (1+ idx)))))
+
+(defun sketch-snippets-add-labels (dom)
+  (interactive "f")
+  (sketch-snippets-add-ids dom)
+  (mapc (lambda (n)
+          (let* ((s (dom-attr n 'transform))
+                 (coords (when s
+                           (split-string
+                            (string-trim
+                             s
+                             "translate(" ")")
+                            ","))))
+            (svg-text dom
+                      (dom-attr n 'id)
+                      :x (car coords)
+                      :y (cadr coords)
+                      :font-size 10
+                      :stroke "red"
+                      :fill "red")))
+        (cdr (dom-by-tag dom 'g)))
+  ;; (save-current-buffer
+  ;; (when lisp-buffer
+  ;;   (sketch-update-lisp-window lisp lisp-buffer))
+  ;; (let ((lisp-window (or (get-buffer-window "*sketch-root*")
+  ;;                        (get-buffer-window lisp-buffer))))
+  ;;   (unless (string= (buffer-name (window-buffer lisp-window)) "*sketch*")
+  ;;     (if-let (buf (get-buffer"*sketch-root*"))
+  ;;         (sketch-update-lisp-window sketch-root buf)
+  ;;       (sketch-update-lisp-window lisp lisp-buffer))))
+  ;; (setq sketch-root (append (seq-subseq sketch-root 0 2) (list (nth (car 
show-layers) svg-layers))))
+  ;; (dolist (layer (cdr show-layers))
+  ;;   (setq sketch-root (append sketch-root (list (nth layer svg-layers)))))
+  ;; (setq sketch-svg (append svg-canvas
+  ;;                          (when sketch-show-grid (list sketch-grid))
+  ;;                          (when sketch-show-labels (list (sketch-labels)))
+  ;;                          (list sketch-root)))
+  (let ((inhibit-read-only t))
+    (erase-buffer) ;; a (not exact) alternative is to use (kill-backward-chars 
1)
+    (insert-image (svg-image dom))))
+
+(defun sketch-insert-snippet (coords)
+  ;; (interactive "@e")
+  (let (
+        ;; (coords (posn-object-x-y (event-start event)))
+        (label (sketch-create-label 'snippet)))
+    (dom-set-attribute sketch-snippet
+                       'transform
+                       (format "translate(%s,%s)" (car coords) (cdr coords)))
+    (dom-set-attribute sketch-snippet
+                       'id
+                       label)
+    (dom-append-child (nth sketch-active-layer sketch-layers-list) 
sketch-snippet)
+    (sketch-redraw)))
+    ;; (sketch-modify-object label)))
+
+(defun sketch-import (svg-file)
+  (interactive (list (let ((default-directory (concat
+                                               (file-name-directory 
(locate-library "sketch-mode"))
+                                               "snippet-files/")))
+                       (read-file-name "Import (object) from file: "))))
+  (let* ((dom (sketch-snippet-get-dom svg-file))
+         (has-groups (dom-by-tag dom 'g)))
+    (when has-groups (sketch-snippets-add-labels dom))
+    (let* ((idx (when has-groups (read-number "Number of object for import: 
")))
+           (snippet (if (dom-by-tag dom 'g)
+                        (dom-elements dom 'id (number-to-string idx))
+                      (list (dom-append-child
+                             (sketch-group (sketch-create-label 'group))
+                             (car (dom-children dom)))))))
+      (setq sketch-snippet (car snippet))
+      (sketch-redraw)
+      ;; (while (not (eq (car event) 'down-mouse-1))
+        (let ((event (read-event "Click mouse-1 to insert")))
+          (sketch-insert-snippet (posn-object-x-y (event-start event)))))))
 
 (add-hook 'org-ctrl-c-ctrl-c-final-hook 'sketch-org-toggle-image)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]