branch: externals/sketch-mode commit 4a4e2ba1c791937cfa1107d52497887126a14977 Author: Daniel Nicolai <dalanico...@gmail.com> Commit: Daniel Nicolai <dalanico...@gmail.com>
Implement import/snippet functionality --- README.org | 9 +- sketch-mode.el | 376 ++++++--- snippet-files/circuit_components.svg | 1417 ++++++++++++++++++++++++++++++++++ 3 files changed, 1701 insertions(+), 101 deletions(-) diff --git a/README.org b/README.org index 2dddf7f..43bc237 100644 --- a/README.org +++ b/README.org @@ -75,9 +75,10 @@ Add the following lines to =dotspacemacs-additional-packages= #+begin_src emacs-lisp :tangle yes - (sketch-mode :location (recipe - :fetcher github - :repo "dalanicolai/sketch-mode")) + (sketch-mode :location (recipe + :fetcher github + :repo "dalanicolai/sketch-mode" + :files ("*.el" "snippet-files"))) #+end_src Subsequently load the packages by adding the following line to =dotspacemacs/user-config= @@ -93,8 +94,6 @@ package, the usage is more or less self explanatory, it is wise to take note of the following comments: - - the undo/redo functionality is really basic, and does not work for all actions - (e.g. does not work yet when removing object or cropping images). - to remove an object (without using undo), you should toggle labels by pressing =l=, and then to remove an object enter its label after pressing =R=. diff --git a/sketch-mode.el b/sketch-mode.el index 418377a..9c7ca45 100644 --- a/sketch-mode.el +++ b/sketch-mode.el @@ -1,13 +1,12 @@ -;; sketch-mode.el --- Quickly create svg sketches using keyboard and mouse -*- lexical-binding: t; -*- +;;; sketch-mode.el --- Quickly create svg sketches using keyboard and mouse -*- lexical-binding: t; -*- ;; Copyright (C) 2021 Free Software Foundation, Inc. - ;; Author: D.L. Nicolai <dalanico...@gmail.com> ;; Created: 17 Jul 2021 ;; Version: 0 -;; Keywords: multimedia +;; Keywords: multimedia ;; URL: https://github.com/dalanicolai/sketch-mode ;; This file is not part of GNU Emacs. @@ -42,6 +41,9 @@ ;; TODO add functionality to customize markers +;; TODO Add options to hide transient suffixes (e.g. commands are trivial and could be hidden to get more drawing space. +;; unfortunately transient levels (de)activate instead of hide/show suffixes) + ;; TODO enable defining global svg settings (object properties) ;; TODO maybe transform relevant transient argument (strings) to variables @@ -73,6 +75,7 @@ ;;; Code: (require 'svg) (require 'transient) +(require 'seq) (defgroup sketch nil "Configure default sketch (object) properties." @@ -107,8 +110,12 @@ default: (800 . 600)." "Default grid line separation distance (integer)." :type 'integer) +(defcustom sketch-label-size 15 + "Size of object labels." + :type 'integer) + (defcustom sketch-default-shape 'line - "Default object type for `sketch-interactively.'" + "Default object type for `sketch-interactively'." :type '(choice (const :tag "Line" 'line) (const :tag "Rectangle" 'rectangle) @@ -121,21 +128,21 @@ If non-nil then snap to grid." :type 'boolean) (defcustom sketch-include-start-marker nil - "Start marker type" + "Start marker type." :type '(choice (const :tag "No marker" nil) (const :tag "Arrow" 'arrow) (const :tag "Dot" 'dot))) (defcustom sketch-include-mid-marker nil - "Mid marker type" + "Mid marker type." :type '(choice (const :tag "No marker" nil) (const :tag "Arrow" 'arrow) (const :tag "Dot" 'dot))) (defcustom sketch-include-end-marker nil - "End marker type" + "End marker type." :type '(choice (const :tag "No marker" nil) (const :tag "Arrow" 'arrow) @@ -187,7 +194,7 @@ STOPS is a list of percentage/color pairs." (defun sketch-group (id &rest args) (apply #'svg-group :id id - :transform "translate(0 0)" + :transform "translate(0,0)" args)) (define-minor-mode sketch-mode @@ -200,7 +207,9 @@ transient." ;; ([sketch drag-mouse-1] . sketch-interactively) ;; ([C-S-drag-mouse-1] . sketch-interactively) (,(kbd "C-c C-s") . sketch-transient)) - (undo-tree-mode)) + (if (boundp 'undo-tree-mode) + (undo-tree-mode) + (buffer-enable-undo))) (defun sketch-mapcons (fn &rest cons-cells) "Apply FN to list of car's and cdr's of CONS-CELLS. @@ -247,7 +256,9 @@ VEC should be a cons or a list containing only number elements." (defvar-local show-layers '(0)) (defun sketch--create-canvas (width height &optional grid-parameter) - "Create canvas for drawing svg using the mouse." + "Create canvas of size WIDTH x HEIGHT for drawing svg. +Optionally set a custom GRID-PARAMETER (default is value of +`sketch-default-grid-parameter')." (let ((width width) (height height)) (setq svg-canvas (svg-create width height :stroke "gray")) @@ -290,7 +301,7 @@ VEC should be a cons or a list containing only number elements." ;;;###autoload (defun sketch (arg) "Initialize or switch to (new) SVG image. -With prefix argument, create sketch using default (customizable) +With prefix ARG, create sketch using default (customizable) values" (interactive "P") (let ((buffer (get-buffer "*sketch*"))) @@ -325,9 +336,9 @@ values" (car choices)))) (cl-defmethod transient-infix-value ((obj sketch-variable:choices)) - "Return the value of OBJ's `value' slot if not nil, - else return value of OBJ's `default' slot if not nil, - else return nil" + "Return the value of OBJ's `value' slot if non-nil, +else return value of OBJ's `default' slot if non-nil, +else return nil" (let ((default (oref obj default))) (if-let ((value (oref obj value))) (concat (oref obj argument) value) @@ -458,8 +469,9 @@ values" [([sketch drag-mouse-1] "Draw object" sketch-interactively-1) ([sketch mouse-1] "Draw text" sketch-text-interactively) ([sketch C-S-drag-mouse-1] "Crop image" sketch-crop)] - [("T" "Transfrom object" sketch-modify-object) - ("r" "Remove object" sketch-remove-object)] + [("t" "Transform object" sketch-modify-object) + ("r" "Remove object" sketch-remove-object) + ("i" "Import object" sketch-import)] [("u" "Undo" sketch-undo) ("U" "Redo" sketch-redo)] [("d" "Show definition" sketch-show-definition) @@ -518,10 +530,10 @@ values" ;; (let ((variable (oref obj variable))) (oset obj value value) (setq sketch-show-labels value) - (magit-refresh) - (sketch-redraw) - (unless (or value transient--prefix) - (message "Unset %s" variable))) + (auto-revert-buffers) + (sketch-redraw)) + ;; (unless (or value transient--prefix) + ;; (message "Unset %s" variable))) (transient-define-infix sketch-cycle-labels () :description "Show labels" @@ -547,23 +559,35 @@ values" :x (+ (dom-attr node 'x) 2) :y (+ (dom-attr node 'y) (- (dom-attr node 'height) 2)) - :font-size 20 + :font-size sketch-label-size :stroke "red" :fill "red")) ('line (svg-text svg-labels (dom-attr node 'id) :x (dom-attr node 'x1) :y (dom-attr node 'y1) - :font-size 20 + :font-size sketch-label-size :stroke "red" :fill "red")) ((or 'circle 'ellipse) (svg-text svg-labels (dom-attr node 'id) :x (dom-attr node 'cx) :y (dom-attr node 'cy) - :font-size 20 + :font-size sketch-label-size :stroke "red" - :fill "red")))) + :fill "red")) + ('g (let ((s (dom-attr node + 'transform))) + (string-match "translate\(\\([0-9]*\\)[, ]*\\([0-9]*\\)" s) + (let ((x (match-string 1 s)) + (y (match-string 2 s))) + (svg-text svg-labels + (dom-attr node 'id) + :x x + :y y + :font-size sketch-label-size + :stroke "red" + :fill "red")))))) nodes) svg-labels)) @@ -591,7 +615,8 @@ values" ("line" "l") ("rectangle" "r") ("circle" "c") - ("ellipse" "e")))) + ("ellipse" "e") + ("group" "g")))) (idx 0) (label (concat prefix (number-to-string idx))) (labels (sketch-labels-list))) @@ -658,7 +683,7 @@ values" ;; (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 (subseq sketch-root 0 2) (list (nth (car show-layers) sketch-layers-list)))) + (setq sketch-root (append (seq-subseq sketch-root 0 2) (list (nth (car show-layers) sketch-layers-list)))) (dolist (layer (cdr show-layers)) (setq sketch-root (append sketch-root (list (nth layer sketch-layers-list))))) (setq sketch-svg (append svg-canvas @@ -680,6 +705,7 @@ values" (cddr coords))))))))) (prin1-to-string sketch-root)))) + (transient-define-suffix sketch-interactively-1 (event) (interactive "@e") (let* ((args (when transient-current-prefix (transient-args 'sketch-transient))) @@ -728,6 +754,42 @@ values" (sketch-labels-list))) (sketch-redraw)) +(transient-define-suffix sketch-insert-snippet (event) + (interactive "@e") + (let ((coords (posn-object-x-y (event-start event))) + (node (oref transient-current-prefix value)) + (label (sketch-create-label "group"))) + (dom-set-attribute node + 'transform + (format "translate(%s,%s)" (car coords) (cdr coords))) + (dom-set-attribute node + 'id + label) + (dom-append-child (nth active-layer sketch-layers-list) node) + (sketch-redraw) + (sketch-modify-object label))) + +(transient-define-prefix sketch-import (svg-file) + [([sketch mouse-1] "Insert snippet" sketch-insert-snippet)] + (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))))))) + (sketch-redraw) + (transient-setup 'sketch-import nil nil :value (car snippet))))) + +;; (transient-define-suffix sketch-import-object (svg-file) +;; (interactive "fImport object from file: ") + (define-minor-mode sketch-lisp-mode "Minor mode for svg lisp buffers." :lighter "sketch" @@ -769,21 +831,31 @@ values" ;; (defvar sketch-undo-redo nil) -(transient-define-suffix sketch-undo () - (interactive) - (undo-tree-undo) +(transient-define-suffix sketch-undo (&optional count) + (interactive "*p") + (cond ((fboundp 'evil-undo) + (evil-undo count)) + ((fboundp 'undo-tree-undo) + (undo-tree-undo)) + (t (undo))) (setq sketch-root (read (buffer-string))) - (setq sketch-layers-list (dom-elements sketch-root 'id "layer"))) + (setq sketch-layers-list (dom-elements sketch-root 'id "layer")) + (unless sketch-layers-list (sketch-add-layer))) ;; (let ((sketch-reverse (nreverse sketch-root))) ;; (push (pop sketch-reverse) sketch-undo-redo) ;; (setq sketch-root (nreverse sketch-reverse))) ;; (sketch-redraw)) -(transient-define-suffix sketch-redo () - (interactive) - (undo-tree-redo) +(transient-define-suffix sketch-redo (count) + (interactive "*p") + (cond ((fboundp 'evil-undo) + (evil-redo count)) + ((fboundp 'undo-tree-redo) + (undo-tree-redo)) + (t (user-error "This command requires `undo-tree' or `evil' to be available"))) (setq sketch-root (read (buffer-string))) - (setq sketch-layers-list (dom-elements sketch-root 'id "layer"))) + (setq sketch-layers-list (dom-elements sketch-root 'id "layer")) + (unless sketch-layers-list (sketch-add-layer))) ;; (let ((sketch-reverse (nreverse sketch-root))) ;; (push (pop sketch-undo-redo) sketch-reverse) ;; (setq sketch-root (nreverse sketch-reverse))) @@ -813,7 +885,7 @@ values" ;; (if sketch-include-end-marker ;; "url(#arrow)" ;; "none")))) - (apply #'svg-text sketch-root text :x (car coords) :y (cdr coords) object-props)) + (apply #'svg-text (nth active-layer sketch-layers-list) text :x (car coords) :y (cdr coords) object-props)) (sketch-redraw)) (transient-define-infix sketch-select-font () @@ -914,7 +986,7 @@ that should be added to the image. Initial value: (0)" (setq svg-canvas (svg-create new-width new-height :stroke "gray")) (svg-marker svg-canvas "arrow" 8 8 "black" t) (svg-rectangle svg-canvas 0 0 new-width new-height :fill "white") - (setq sketch-root (svg-translate "root" (car start-coords) (cdr start-coords))) + (setq sketch-root (sketch--svg-translate (car start-coords) (cdr start-coords))) (sketch-redraw))) (defun sketch-image (svg &rest props) @@ -941,40 +1013,147 @@ PROPS is passed on to `create-image' as its PROPS list." (cl-incf (alist-get coord props) amount)) (sketch-redraw object-def buffer)) +(defun sketch-parse-transform-value (value) + (let ((transforms (mapcar (lambda (val) + (split-string val "[(,)]" t)) + (split-string value)))) + (mapcar (lambda (x) + (cons (intern (car x)) (mapcar (lambda (val) + (string-to-number val)) + (cdr x)))) + transforms))) + +(defun sketch-format-transfrom-value (value) + (string-join (mapcar (lambda (x) (concat (symbol-name (car x)) + "(" + (number-to-string (cadr x)) + (if-let (y (caddr x)) + (concat "," (number-to-string y))) + ")")) + value) + " ")) + +(defun sketch-group-translate (buffer object-def direction &optional fast) + (let ((transform (sketch-parse-transform-value + (dom-attr object-def + 'transform))) + (amount (if fast + 10 + 1))) + (pcase direction + ('up (cl-decf (cadr (alist-get 'translate transform)) amount)) + ('down (cl-incf (cadr (alist-get 'translate transform)) amount))) + (dom-set-attribute object-def + 'transform + (sketch-format-transfrom-value transform)) + (sketch-redraw object-def buffer))) + +(defun sketch-group-scale (buffer object-def direction &optional fast) + (let ((transform (sketch-parse-transform-value + (dom-attr object-def + 'transform))) + (amount (if fast + 1 + 0.1))) + (unless (alist-get 'scale transform) + (push '(scale 1) transform)) + (pcase direction + ('up (cl-incf (car (alist-get 'scale transform)) amount)) + ('down (cl-decf (car (alist-get 'scale transform)) amount))) + (dom-set-attribute object-def + 'transform + (sketch-format-transfrom-value transform)) + (sketch-redraw object-def buffer))) + +(transient-define-suffix sketch-group-scale-up (args) + (interactive (list (oref transient-current-prefix value))) + (let* ((object (transient-arg-value "--object=" args)) + (buffer (transient-arg-value "--buffer=" args)) + (object-def (dom-by-id sketch-svg (format "^%s$" object)))) + (sketch-group-scale buffer (car object-def) 'up))) + +(transient-define-suffix sketch-group-scale-up-fast (args) + (interactive (list (oref transient-current-prefix value))) + (let* ((object (transient-arg-value "--object=" args)) + (buffer (transient-arg-value "--buffer=" args)) + (object-def (dom-by-id sketch-svg (format "^%s$" object)))) + (sketch-group-scale buffer (car object-def) 'up t))) + +(transient-define-suffix sketch-group-scale-down (args) + (interactive (list (oref transient-current-prefix value))) + (let* ((object (transient-arg-value "--object=" args)) + (buffer (transient-arg-value "--buffer=" args)) + (object-def (dom-by-id sketch-svg (format "^%s$" object)))) + (sketch-group-scale buffer (car object-def) 'down))) + +(transient-define-suffix sketch-group-scale-down-fast (args) + (interactive (list (oref transient-current-prefix value))) + (let* ((object (transient-arg-value "--object=" args)) + (buffer (transient-arg-value "--buffer=" args)) + (object-def (dom-by-id sketch-svg (format "^%s$" object)))) + (sketch-group-scale buffer (car object-def) 'down t))) + + ;; TODO 'refactor' subsequent suffixes (e.g. create general function/macro) (transient-define-suffix sketch-translate-down (args) - (interactive (list (oref transient-current-prefix :value))) + (interactive (list (oref transient-current-prefix value))) (let* ((object (transient-arg-value "--object=" args)) (buffer (transient-arg-value "--buffer=" args)) (object-def (dom-by-id sketch-svg (format "^%s$" object))) (props (cadar object-def))) - (sketch-translate-object buffer object-def props '(y1 y2) 1))) + (if (eq (caar object-def) 'g) + (sketch-group-translate buffer (car object-def) 'down) + (sketch-translate-object buffer + object-def + props + '(y1 y2) 1)))) (transient-define-suffix sketch-translate-fast-down (args) - (interactive (list (oref transient-current-prefix :value))) + (interactive (list (oref transient-current-prefix value))) (let* ((object (transient-arg-value "--object=" args)) (buffer (transient-arg-value "--buffer=" args)) (object-def (dom-by-id sketch-svg (format "^%s$" object))) (props (cadar object-def))) - (sketch-translate-object buffer object-def props '(y1 y2) 10))) + (if (eq (caar object-def) 'g) + (sketch-group-translate buffer (car object-def) 'down t) + (sketch-translate-object buffer + object-def + props + (pcase (caar object-def) + ('line '(y1 y2))) + 10)))) (transient-define-suffix sketch-translate-up (args) - (interactive (list (oref transient-current-prefix :value))) + (interactive (list (oref transient-current-prefix value))) (let* ((object (transient-arg-value "--object=" args)) (buffer (transient-arg-value "--buffer=" args)) (object-def (dom-by-id sketch-svg (format "^%s$" object))) (props (cadar object-def))) - (sketch-translate-object buffer object-def props '(y1 y2) -1))) + (if (eq (caar object-def) 'g) + (sketch-group-translate buffer (car object-def) 'up) + (sketch-translate-object buffer + object-def + props + (pcase (caar object-def) + ('line '(y1 y2))) + -1)))) (transient-define-suffix sketch-translate-fast-up (args) - (interactive (list (oref transient-current-prefix :value))) + (interactive (list (oref transient-current-prefix value))) (let* ((object (transient-arg-value "--object=" args)) (buffer (transient-arg-value "--buffer=" args)) (object-def (dom-by-id sketch-svg (format "^%s$" object))) (props (cadar object-def))) - (sketch-translate-object buffer object-def props '(y1 y2) -10))) - -(transient-define-prefix sketch-modify-object () + (if (eq (caar object-def) 'g) + (sketch-group-translate buffer (car object-def) 'up t) + (sketch-translate-object buffer + object-def + props + (pcase (caar object-def) + ('line '(y1 y2))) + -10)))) + +(transient-define-prefix sketch-modify-object (&optional group) "Set object properties." :transient-suffix 'transient--do-call ["Properties" @@ -982,12 +1161,16 @@ PROPS is passed on to `create-image' as its PROPS list." [[("<down>" "down" sketch-translate-down) ("<up>" "up" sketch-translate-up)] [("S-<down>" "fast down" sketch-translate-fast-down) - ("S-<up>" "fast up" sketch-translate-fast-up)]] + ("S-<up>" "fast up" sketch-translate-fast-up)] + [("u" "scale up" sketch-group-scale-up) + ("d" "scale up" sketch-group-scale-down)]] [("l" sketch-cycle-labels) ("q" "Quit" transient-quit-one)] (interactive) - (let* ((object (completing-read "Transform element with id: " - (sketch-labels-list))) + (let* ((object (if group + group + (completing-read "Transform element with id: " + (sketch-labels-list)))) (buffer (get-buffer-create (format "*sketch-object-%s*" object)))) (display-buffer buffer '(display-buffer-in-side-window . ((side . right) (window-width . 70)))) (pp (cadar (dom-by-id sketch-svg (format "^%s$" object))) buffer) @@ -1004,61 +1187,62 @@ PROPS is passed on to `create-image' as its PROPS list." (with-current-buffer buffer (erase-buffer) (pp lisp (current-buffer)) - (end-of-buffer))) + (goto-char (point-max)))) ;;; import/snippets +(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 (svg-file) +(defun sketch-snippets-add-labels (dom) (interactive "f") - (let (dom) - (with-temp-buffer "svg" - (insert-file-contents-literally svg-file) - (xml-remove-comments (point-min) (point-max)) - (setq dom (libxml-parse-xml-region (point-min) (point-max))) - (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))) - (unless sketch-mode - (user-error "Not in sketch-mode buffer")) - ;; (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 (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))) - (erase-buffer) ;; a (not exact) alternative is to use (kill-backward-chars 1) - (insert-image (svg-image dom)) - (print dom))) - - (provide 'sketch-mode) + (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))) + (unless sketch-mode + (user-error "Not in sketch-mode buffer")) + ;; (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))) + (erase-buffer) ;; a (not exact) alternative is to use (kill-backward-chars 1) + (insert-image (svg-image dom))) + +(provide 'sketch-mode) ;;; sketch-mode.el ends here diff --git a/snippet-files/circuit_components.svg b/snippet-files/circuit_components.svg new file mode 100644 index 0000000..5065cf5 --- /dev/null +++ b/snippet-files/circuit_components.svg @@ -0,0 +1,1417 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- created using Vector Blocks (http://bretmulvey.com/VectorBlocks) --> +<svg xmlns="http://www.w3.org/2000/svg" width="1400" height="2560"> + <g stroke="#000" stroke-width="2"> + <path d="m 1200.8104133605957,1098.3416372085921 16,0"/> + <path d="m 720.8104133605957,1178.3416372085921 16,0"/> + <path d="m 720.8104133605957,1162.3416372085921 16,0"/> + <path d="m 144.8104133605957,250.34163720859215 16,0"/> + </g> + <g transform="translate(0.8104133605957031 2.3416372085921466)" style="font-family: Sans-Serif" stroke-width="2" stroke="#000" fill="none"> + <text stroke="none" fill="#000" x="40" y="48" style="font-size: 16pt;text-anchor: start;font-weight: normal;">Vector Blocks Component Gallery</text> + <text stroke="none" fill="#000" x="40" y="78" style="font-size: 12pt;text-anchor: start;font-weight: normal;">From Vector Blocks browser-based circuit schematic editor at http://bretmulvey.com/VectorBlocks</text> + <text stroke="none" fill="#000" x="40" y="108" style="font-size: 8pt;text-anchor: start;font-weight: normal;">License: Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) </text> + <text stroke="none" fill="#000" x="40" y="124" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Schematics created using these components or derivates, or created using the Vector Blocks application,</text> + <text stroke="none" fill="#000" x="40" y="140" style="font-size: 8pt;text-anchor: start;font-weight: normal;">do not require attribution. Schematic drawing applications that incorporate these components as part of a</text> + <text stroke="none" fill="#000" x="40" y="156" style="font-size: 8pt;text-anchor: start;font-weight: normal;">graphics library require attribution as follows: "Some schematic symbols are derived from Vector Blocks at</text> + <text stroke="none" fill="#000" x="40" y="172" style="font-size: 8pt;text-anchor: start;font-weight: normal;">http://bretmulvey.com/VectorBlocks"</text> + <text stroke="none" fill="#000" x="200" y="252" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Simple wire</text> + <g transform="translate(112, 240)"> + <path d="m 8,16 0,-8 8,0"/> + </g> + <g transform="translate(80, 240)"> + <path d="m 8,0 0,16"/> + <path d="m 8,8 8,0"/> + <circle fill="#000" stroke="none" cy="8" cx="8" r="3"/> + </g> + <g transform="translate(48, 240)"> + <path d="m 0,8 16,0"/> + <path d="m 8,0 0,16"/> + <circle fill="#000" stroke="none" cy="8" cx="8" r="3"/> + </g> + <g transform="translate(48, 272)"> + <path d="m 0,8 16,0"/> + <path d="m 8,0 0,6"/> + <path d="m 8,16 0,-6"/> + </g> + <g transform="translate(112, 272)"> + <path d="m 0,8 8,0 32,32 8,0"/> + <path d="m 0,40 8,0 14,-14"/> + <path d="m 48,8 -8,0 -14,14"/> + </g> + <g transform="translate(112, 336)"> + <path d="m 0,8 8,0 32,32 0,8"/> + <path d="m 0,40 8,0 14,-14"/> + <path d="m 40,0 0,8 -14,14"/> + </g> + <text stroke="none" fill="#000" x="200" y="284" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Cross-overs</text> + <g fill="none" stroke-dasharray="1 2 2 2 2 2 2 2 1" transform="translate(144, 400)"> + <path d="m 0,8 16,0"/> + </g> + <g fill="none" stroke-dasharray="1 2 2 2 2 2 2 2 1" transform="translate(112, 400)"> + <path d="m 8,16 0,-8 8,0"/> + </g> + <text stroke="none" fill="#000" x="200" y="412" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Dotted wire</text> + <g transform="translate(144, 432) matrix(-1, 0, 0, -1, 16, 16)"> + <path d="m 0,8 16,0"/> + <path stroke-dasharray="2" d="m 7,0 10,0"/> + <path stroke-dasharray="2" d="m 7,16 10,0"/> + <ellipse ry="8" rx="4" cy="8" cx="8"/> + </g> + <g transform="translate(112, 432)"> + <path d="m 0,8 16,0"/> + <path stroke-dasharray="2" d="m -1,0 18,0"/> + <path stroke-dasharray="2" d="m -1,16 18,0"/> + </g> + <g fill="#000" transform="translate(80, 432)"> + <path d="m 0,8 16,0"/> + <path stroke-dasharray="2" d="m -1,0 18,0"/> + <path stroke-dasharray="2" d="m -1,16 18,0"/> + <circle cy="16" cx="8" r="2"/> + <path d="m 8,16 0,16"/> + </g> + <text stroke="none" fill="#000" x="200" y="444" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Shielded wire</text> + <g transform="translate(144, 480)"> + <path d="m 16,8 -2,0"/> + <path stroke-linejoin="bevel" d="m 7,2 8,6 -8,6"/> + </g> + <g transform="translate(128, 480)"> + <path d="m 0,8 8,0"/> + <path d="m 1,2 8,6 -8,6"/> + </g> + <g transform="translate(80, 480)"> + <path d="m 16,8 -1,0"/> + <path d="m 10,2 a 6.3,6.3 0 0 1 0,12"/> + </g> + <g transform="translate(64, 480)"> + <path d="m 0,8 5,0"/> + <circle fill="#FFF" cy="8" cx="8" r="3"/> + </g> + <g transform="translate(144, 512) matrix(-1, 0, 0, -1, 16, 16)"> + <path d="m 0,8 6,0"/> + <path d="m 6,0 a 8,8 0 0 0 0,8 a 8,8 0 0 1 0,8"/> + </g> + <g transform="translate(128, 512)"> + <path d="m 0,8 6,0"/> + <path d="m 6,0 a 8,8 0 0 0 0,8 a 8,8 0 0 1 0,8"/> + </g> + <g fill="#FFF" transform="translate(80, 512)"> + <path d="m 0,8 5,0"/> + <rect y="5" x="5" height="6" width="6"/> + </g> + <g fill="#000" transform="translate(48, 512)"> + <path d="m 0,8 5,0"/> + <rect y="5" x="5" height="6" width="6"/> + </g> + <text stroke="none" fill="#000" x="200" y="492" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Termination points</text> + <g transform="translate(112, 544)"> + <path d="m 0,8 12,0 2,4 4,-8 4,8 4,-8 4,8 4,-8 2,4 12,0"/> + </g> + <text stroke="none" fill="#000" x="200" y="556" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Resistor</text> + <g transform="translate(48, 544)"> + <path d="m 0,8 48,0"/> + <rect fill="#FFF" y="4" x="12" height="8" width="24"/> + </g> + <g transform="translate(112, 576)"> + <path d="m 0,8 12,0 2,4 4,-8 4,8 4,-8 4,8 4,-8 2,4 12,0"/> + <path d="m 15,17 19,-19"/> + <path d="m 29,-3 6,6 2,-8" fill="#000" stroke="none"/> + </g> + <g transform="translate(48, 576)"> + <path d="m 0,8 48,0"/> + <rect fill="#FFF" y="4" x="12" height="8" width="24"/> + <path d="m 15,17 19,-19"/> + <path d="m 29,-3 6,6 2,-8" fill="#000" stroke="none"/> + </g> + <g transform="translate(112, 608)"> + <path d="m 0,8 12,0 2,4 4,-8 4,8 4,-8 4,8 4,-8 2,4 12,0"/> + <path d="m 19,-2 4.5,-9"/> + <path fill="#000" stroke="none" d="m 18,0 0,-7.5 6,3 z"/> + <path d="m 27,-2 4.5,-9"/> + <path fill="#000" stroke="none" d="m 26,0 0,-7.5 6,3 z"/> + </g> + <g transform="translate(48, 608)"> + <path d="m 0,8 48,0"/> + <rect fill="#FFF" y="4" x="12" height="8" width="24"/> + <path d="m 19,-2 4.5,-9"/> + <path fill="#000" stroke="none" d="m 18,0 0,-7.5 6,3 z"/> + <path d="m 27,-2 4.5,-9"/> + <path fill="#000" stroke="none" d="m 26,0 0,-7.5 6,3 z"/> + </g> + <g transform="translate(112, 640)"> + <path d="m 0,8 12,0 2,4 4,-8 4,8 4,-8 4,8 4,-8 2,4 12,0"/> + <path d="m 7,17 8,0 19,-19"/> + </g> + <g transform="translate(48, 640)"> + <path d="m 0,8 48,0"/> + <rect fill="#FFF" y="4" x="12" height="8" width="24"/> + <path d="m 7,17 8,0 19,-19"/> + </g> + <g transform="translate(112, 672)"> + <path d="m 0,8 12,0 2,4 4,-8 4,8 4,-8 4,8 4,-8 2,4 12,0"/> + <path d="m 24,32 0,-12"/> + <path fill="#000" stroke="none" d="m 24,13 4,8 -8,0 z"/> + </g> + <g transform="translate(48, 672)"> + <path d="m 0,8 48,0"/> + <rect fill="#FFF" y="4" x="12" height="8" width="24"/> + <path d="m 24,32 0,-12"/> + <path fill="#000" stroke="none" d="m 24,13 4,8 -8,0 z"/> + </g> + <text stroke="none" fill="#000" x="200" y="588" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Variable resistor</text> + <text stroke="none" fill="#000" x="200" y="620" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Photoresistor</text> + <text stroke="none" fill="#000" x="200" y="652" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Thermistor</text> + <text stroke="none" fill="#000" x="200" y="684" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Potentiometer</text> + <g transform="translate(112, 720)"> + <path d="m 0,8 21,0"/> + <path d="m 21,0 0,16"/> + <path d="m 27,0 0,16"/> + <path d="m 27,8 21,0"/> + </g> + <g transform="translate(48, 720)"> + <path d="m 0,8 20,0"/> + <path stroke-width="6" d="m 19,-2 0,20"/> + <path stroke-width="6" d="m 29,-2 0,20"/> + <path d="m 48,8 -20,0"/> + </g> + <g transform="translate(112, 752)"> + <path d="m 0,8 22,0"/> + <path d="m 21,0 a 20,20 0 0 1 0,16"/> + <path d="m 27,0 0,16"/> + <path d="m 48,8 -21,0"/> + <path d="m 32,-2 8,0"/> + <path d="m 36,-6 0,8"/> + </g> + <g transform="translate(48, 752)"> + <path d="m 0,8 17,0"/> + <rect height="18" width="4" y="-1" x="27" fill="#FFF"/> + <path stroke-width="6" d="m 19,-2 0,20"/> + <path d="m 48,8 -17,0"/> + <path d="m 34,-2 8,0"/> + <path d="m 38,-6 0,8"/> + </g> + <g transform="translate(112, 784)"> + <path d="m 0,8 21,0"/> + <path d="m 21,0 0,16"/> + <path d="m 27,0 0,16"/> + <path d="m 48,8 -21,0"/> + <path d="m 15,17 19,-19"/> + <path d="m 29,-3 6,6 2,-8" fill="#000" stroke="none"/> + </g> + <g transform="translate(48, 784)"> + <path d="m 0,8 20,0"/> + <path stroke-width="6" d="m 19,-2 0,20"/> + <path stroke-width="6" d="m 29,-2 0,20"/> + <path d="m 48,8 -20,0"/> + <path d="m 12,20 24,-24"/> + <path d="m 31,-5 6,6 2,-8" fill="#000" stroke="none"/> + </g> + <g transform="translate(112, 816)"> + <path d="m 0,8 48,0"/> + <circle fill="#FFF" cy="8" cx="8" r="3"/> + <circle fill="#FFF" cy="8" cx="40" r="3"/> + <path d="m 16,4 16,0"/> + <path d="m 16,12 16,0"/> + <path d="m 24,12 0,20"/> + </g> + <text stroke="none" fill="#000" x="200" y="732" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Capacitor, unpolarized</text> + <text stroke="none" fill="#000" x="200" y="764" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Polarized capacitor</text> + <text stroke="none" fill="#000" x="200" y="796" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Variable capacitor</text> + <text stroke="none" fill="#000" x="200" y="828" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Feed-through capacitor</text> + <g transform="translate(112, 864)"> + <path d="m 0,8 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 l 8,0"/> + </g> + <g transform="translate(48, 864)"> + <path d="m 8,16 0,-8 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 l 0,8"/> + </g> + <g transform="translate(112, 896)"> + <path d="m 0,8 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 l 8,0"/> + <path d="m 12,20 24,-24"/> + <path d="m 31,-5 6,6 2,-8" fill="#000" stroke="none"/> + </g> + <g transform="translate(112, 928)"> + <path d="m 0,8 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 l 8,0"/> + <path d="m 24,8 0,8"/> + </g> + <g transform="translate(48, 928)"> + <path d="m 0,8 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 l 0,8"/> + </g> + <g transform="translate(80, 960)"> + <path d="m 8,16 0,-8 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 a 3,4 0 0 1 8,0 l 0,8"/> + </g> + <g transform="translate(128, 992)"> + <path d="m 8,5 16,0"/> + <path d="m 8,11 16,0"/> + </g> + <g fill="none" stroke-dasharray="0 2 4 4 4 2" transform="translate(128, 1024)"> + <path d="m 8,5 16,0"/> + <path d="m 8,11 16,0"/> + </g> + <g fill="#000" stroke="none" transform="translate(144, 1056)"> + <circle cy="0" cx="16" r="3"/> + </g> + <text stroke="none" fill="#000" x="200" y="876" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Inductor</text> + <text stroke="none" fill="#000" x="200" y="908" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Variable inductor</text> + <text stroke="none" fill="#000" x="200" y="940" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Tapped inductor</text> + <text stroke="none" fill="#000" x="200" y="972" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Longer-winding inductor</text> + <text stroke="none" fill="#000" x="200" y="1004" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Iron core</text> + <text stroke="none" fill="#000" x="200" y="1036" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Ferrite core</text> + <text stroke="none" fill="#000" x="200" y="1068" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Polarity dot</text> + <g fill="#000" transform="translate(112, 1088)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path d="m 32,0 0,16"/> + </g> + <g fill="#000" transform="translate(112, 1120)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path d="m 32,0 0,16"/> + <path d="m 19,-1 4.5,-9"/> + <path stroke="none" d="m 24.5,-12 0,7.5 -6,-3 z"/> + <path d="m 27,1 4.5,-9"/> + <path stroke="none" d="m 32.5,-10 0,7.5 -6,-3 z"/> + </g> + <g fill="#000" transform="translate(112, 1152)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path d="m 32,0 0,16"/> + <path d="m 20,-3 4.5,-9"/> + <path stroke="none" d="m 19,-1 0,-7.5 6,3 z"/> + <path d="m 28,-2 4.5,-9"/> + <path stroke="none" d="m 27,0 0,-7.5 6,3 z"/> + </g> + <g fill="#000" transform="translate(112, 1184)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path fill="none" d="m 36,-2 -4.5,2 1,16 -4.5,2"/> + </g> + <g fill="#000" transform="translate(112, 1216)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path fill="none" d="m 35.5,0 a 2,2 0 0 0 -4,0"/> + <path stroke-linecap="round" d="m 31.5,0 1,16"/> + <path fill="none" d="m 32.5,16 a 2,2 0 0 1 -4,0"/> + </g> + <g fill="#000" transform="translate(112, 1248)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path fill="none" d="m 28,0 4,0 0,16 -4,0"/> + </g> + <g fill="#000" transform="translate(112, 1280)"> + <path d="m 0,8 32,0"/> + <path d="m 36,8 12,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path d="m 32,0 0,16"/> + <path d="m 36,0 0,16"/> + </g> + <g fill="#000" transform="translate(112, 1312)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path d="m 32,0 0,16"/> + <path d="m 36,0 0,16"/> + </g> + <g fill="#FFF" transform="translate(48, 1088)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path d="m 32,0 0,16"/> + </g> + <g fill="#FFF" transform="translate(48, 1120)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path d="m 32,0 0,16"/> + <path d="m 19,-1 4.5,-9"/> + <path fill="#000" stroke="none" d="m 24.5,-12 0,7.5 -6,-3 z"/> + <path d="m 27,1 4.5,-9"/> + <path fill="#000" stroke="none" d="m 32.5,-10 0,7.5 -6,-3 z"/> + </g> + <g fill="#FFF" transform="translate(48, 1152)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path d="m 32,0 0,16"/> + <path d="m 20,-3 4.5,-9"/> + <path fill="#000" stroke="none" d="m 19,-1 0,-7.5 6,3 z"/> + <path d="m 28,-2 4.5,-9"/> + <path fill="#000" stroke="none" d="m 27,0 0,-7.5 6,3 z"/> + </g> + <g fill="#FFF" transform="translate(48, 1184)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path fill="none" d="m 36,-2 -4.5,2 1,16 -4.5,2"/> + </g> + <g fill="#FFF" transform="translate(48, 1216)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path fill="none" d="m 35.5,0 a 2,2 0 0 0 -4,0"/> + <path stroke-linecap="round" d="m 31.5,0 1,16"/> + <path fill="none" d="m 32.5,16 a 2,2 0 0 1 -4,0"/> + </g> + <g fill="#FFF" transform="translate(48, 1248)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path fill="none" d="m 28,0 4,0 0,16 -4,0"/> + </g> + <g fill="#FFF" transform="translate(48, 1280)"> + <path d="m 0,8 32,0"/> + <path d="m 36,8 12,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path d="m 32,0 0,16"/> + <path d="m 36,0 0,16"/> + </g> + <g fill="#FFF" transform="translate(48, 1312)"> + <path d="m 0,8 48,0"/> + <path d="m 31,8 -13,-6 0,12 13,-6"/> + <path d="m 32,0 0,16"/> + <path d="m 36,0 0,16"/> + </g> + <text stroke="none" fill="#000" x="200" y="1100" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Diode</text> + <text stroke="none" fill="#000" x="200" y="1132" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Light-emitted diode (LED)</text> + <text stroke="none" fill="#000" x="200" y="1164" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Photodiode</text> + <text stroke="none" fill="#000" x="200" y="1196" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Zener diode</text> + <text stroke="none" fill="#000" x="200" y="1228" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Schottky diode</text> + <text stroke="none" fill="#000" x="200" y="1260" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Tunnel diode</text> + <text stroke="none" fill="#000" x="200" y="1292" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Varicap</text> + <text stroke="none" fill="#000" x="200" y="1324" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Pin diode</text> + <g transform="translate(112, 1360)"> + <path d="m 0,8 48,0"/> + <path fill="#000" d="m 31,8 -13,-6 0,12 13,-6"/> + <path d="m 32,0 0,16"/> + <path d="m 32,8 8,-6 0,-18"/> + </g> + <g transform="translate(112, 1408)"> + <path d="m 0,8 16,0"/> + <path d="m 48,8 -16,0"/> + <path fill="#000" d="m 30,2 -14,-7 0,14 z"/> + <path fill="#000" d="m 18,14 14,-7 0,14 z"/> + <path d="m 32,-8 0,32"/> + <path d="m 16,-8 0,32"/> + <path d="m 32,2 8,-6 0,-12"/> + </g> + <g transform="translate(112, 1456)"> + <path d="m 0,8 16,0"/> + <path d="m 48,8 -16,0"/> + <path fill="#000" d="m 30,2 -14,-7 0,14 z"/> + <path fill="#000" d="m 18,14 14,-7 0,14 z"/> + <path d="m 32,-8 0,32"/> + <path d="m 16,-8 0,32"/> + </g> + <g transform="translate(48, 1360)"> + <path d="m 0,8 48,0"/> + <path fill="#FFF" d="m 31,8 -13,-6 0,12 13,-6"/> + <path d="m 32,0 0,16"/> + <path d="m 32,8 8,-6 0,-18"/> + </g> + <g transform="translate(48, 1408)"> + <path d="m 0,8 16,0"/> + <path d="m 48,8 -16,0"/> + <path fill="#FFF" d="m 30,2 -14,-7 0,14 z"/> + <path fill="#FFF" d="m 18,14 14,-7 0,14 z"/> + <path d="m 32,-8 0,32"/> + <path d="m 16,-8 0,32"/> + <path d="m 32,2 8,-6 0,-12"/> + </g> + <g transform="translate(48, 1456)"> + <path d="m 0,8 16,0"/> + <path d="m 48,8 -16,0"/> + <path fill="#FFF" d="m 30,2 -14,-7 0,14 z"/> + <path fill="#FFF" d="m 18,14 14,-7 0,14 z"/> + <path d="m 32,-8 0,32"/> + <path d="m 16,-8 0,32"/> + </g> + <text stroke="none" fill="#000" x="200" y="1372" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Silicon-controlled rectifier (SCR)</text> + <text stroke="none" fill="#000" x="200" y="1420" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Triode for alternating current (TRIAC)</text> + <text stroke="none" fill="#000" x="200" y="1468" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Diode for alternating current (DIAC)</text> + <g transform="translate(144, 1504)"> + <path d="m 8,0 0,4"/> + <path d="m 0,4 16,0"/> + <path d="m 2,8 12,0"/> + <path d="m 4,12 8,0"/> + </g> + <text stroke="none" fill="#000" x="200" y="1516" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Earth ground</text> + <g transform="translate(144, 1536)"> + <path d="m 8,0 0,4"/> + <path d="m -3.5,12 4,-8 16,0 -4,8"/> + <path d="m 4.5,12 4,-8"/> + </g> + <g fill="#FFF" transform="translate(144, 1568)"> + <path d="m 8,0 0,4"/> + <path d="m 3,4 10,0 -5,10 z"/> + </g> + <g transform="translate(144, 1600)"> + <path d="m 8,0 0,8"/> + <path d="m 0,8 16,0"/> + </g> + <text stroke="none" fill="#000" x="200" y="1548" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Chassis ground</text> + <text stroke="none" fill="#000" x="200" y="1580" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Signal ground</text> + <text stroke="none" fill="#000" x="200" y="1612" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Arbitrary ground</text> + <g transform="translate(144, 1632)"> + <path d="m 0,8 5,0"/> + <path d="m 5,2 0,12"/> + <path d="m 11,-4 0,24"/> + <path d="m 11,8 5,0"/> + </g> + <g transform="translate(112, 1664)"> + <path d="m 0,8 15,0"/> + <path d="m 15,2 0,12"/> + <path d="m 21,-4 0,24"/> + <path d="m 27,2 0,12"/> + <path d="m 33,-4 0,24"/> + <path d="m 33,8 15,0"/> + </g> + <g transform="translate(112, 1696)"> + <circle fill="#FFF" stroke-width="4" cy="24" cx="24" r="20"/> + <path d="m 0,24 4,0"/> + <path d="m 48,24 -4,0"/> + <path d="m 30,24 8,0"/> + <path d="m 34,20 0,8"/> + <path d="m 10,24 8,0"/> + </g> + <g transform="translate(112, 1760)"> + <circle fill="#FFF" stroke-width="4" cy="24" cx="24" r="20"/> + <path d="m 0,24 4,0"/> + <path d="m 48,24 -4,0"/> + <path d="m 10,24 a 8,8 0 0 1 14,0 a 8,8 0 0 0 14,0"/> + </g> + <g transform="translate(112, 1824)"> + <circle fill="#FFF" stroke-width="4" cy="24" cx="24" r="20"/> + <path d="m 0,24 4,0"/> + <path d="m 48,24 -4,0"/> + <path stroke-width="4" d="m 34,24 -22,0"/> + <path fill="#000" stroke="none" d="m 38,24 -10,-5 0,10 10,-5"/> + </g> + <g transform="translate(112, 1888)"> + <polygon fill="#FFF" points="4,24 24,9 44,24 24,39 4,24"/> + <path d="m 0,24 4,0"/> + <path d="m 48,24 -4,0"/> + <path d="m 30,24 8,0"/> + <path d="m 34,20 0,8"/> + <path d="m 10,24 8,0"/> + </g> + <g transform="translate(112, 1936)"> + <polygon fill="#FFF" points="4,24 24,9 44,24 24,39 4,24"/> + <path d="m 0,24 4,0"/> + <path d="m 48,24 -4,0"/> + <path stroke-width="4" d="m 34,24 -22,0"/> + <path fill="#000" stroke="none" d="m 38,24 -10,-5 0,10 10,-5"/> + </g> + <text stroke="none" fill="#000" x="200" y="1644" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Cell</text> + <text stroke="none" fill="#000" x="200" y="1676" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Battery</text> + <text stroke="none" fill="#000" x="200" y="1724" style="font-size: 8pt;text-anchor: start;font-weight: normal;">DC voltage source</text> + <text stroke="none" fill="#000" x="200" y="1788" style="font-size: 8pt;text-anchor: start;font-weight: normal;">AC voltage source</text> + <text stroke="none" fill="#000" x="200" y="1852" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Current source</text> + <text stroke="none" fill="#000" x="200" y="1916" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Dependent voltage source</text> + <text stroke="none" fill="#000" x="200" y="1964" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Dependent current source</text> + <g fill="#FFF" transform="translate(112, 2000)"> + <path d="m 0,8 12,0"/> + <path d="m 48,8 -12,0"/> + <circle cy="8" cx="12" r="3"/> + <circle cy="8" cx="36" r="3"/> + <path d="m 8,-2 32,0"/> + <path d="m 24,-2 0,-10"/> + </g> + <g fill="#FFF" transform="translate(112, 2048)"> + <path d="m 0,8 12,0"/> + <path d="m 48,8 -12,0"/> + <circle cy="8" cx="12" r="3"/> + <circle cy="8" cx="36" r="3"/> + <path d="m 8,13 32,0"/> + <path d="m 24,13 0,-10"/> + </g> + <g fill="#FFF" transform="translate(112, 2096)"> + <path d="m 0,8 12,0"/> + <path d="m 48,8 -12,0"/> + <path d="m 12,8 24.36,-10.57"/> + <circle cy="8" cx="12" r="3"/> + <circle cy="8" cx="36" r="3"/> + </g> + <g fill="#FFF" transform="translate(112, 2144)"> + <path d="m 0,8 12,0"/> + <path d="m 48,8 -12,0"/> + <path d="m 12,8 26,-5.4"/> + <circle cy="8" cx="12" r="3"/> + <circle cy="8" cx="36" r="3"/> + </g> + <g fill="#FFF" transform="translate(112, 2192)"> + <path d="m 0,8 8,0"/> + <path d="m 48,8 -8,0"/> + <path d="m 24,8 18,-5.8"/> + <path d="m 24,8 0,8"/> + <circle cy="8" cx="8" r="3"/> + <circle cy="8" cx="24" r="3"/> + <circle cy="8" cx="40" r="3"/> + </g> + <g fill="#FFF" transform="translate(32, 2176)"> + <path d="m 36,8 12,0"/> + <circle cy="8" cx="36" r="3"/> + <path d="m 36,40 12,0"/> + <circle cy="40" cx="36" r="3"/> + <path d="m 12,24 -12,0"/> + <path d="m 12,24 27,12"/> + <circle cy="24" cx="12" r="3"/> + </g> + <g transform="translate(112, 2240)"> + <path d="m 12,24 15,0"/> + <path d="m 34.6,24 -8,-4 0,8" fill="#000" stroke="none"/> + <path d="m 32,8 8,0 0,-8"/> + <circle fill="#FFF" cy="8" cx="32" r="3"/> + <path d="m 32,40 8,0 0,8"/> + <circle fill="#FFF" cy="40" cx="32" r="3"/> + <path d="m 37.6,24 10.4,0"/> + <circle fill="#FFF" cy="24" cx="37.6" r="3"/> + <path d="m 12,24 -12,0"/> + <circle fill="#FFF" cy="24" cx="12" r="3"/> + </g> + <g transform="translate(112, 2320)"> + <path d="m 12,24 10,0"/> + <path d="m 29.38,24 -8,-4 0,8" fill="#000" stroke="none"/> + <path d="m 12,24 -12,0"/> + <circle fill="#FFF" cy="24" cx="12" r="3"/> + <circle fill="#FFF" cy="3" cx="8" r="3"/> + <circle fill="#FFF" cy="45" cx="8" r="3"/> + <path d="M 25.63,40 40,40 40,48"/> + <circle fill="#FFF" cy="40.47" cx="25.63" r="3"/> + <path d="M 25.63,8 40,8 40,0"/> + <circle fill="#FFF" cy="7.53" cx="25.63" r="3"/> + <path d="M 33.38,24 48,24"/> + <circle fill="#FFF" cy="24" cx="33.38" r="3"/> + </g> + <g fill="#FFF" transform="translate(112, 2400)"> + <circle cy="12" cx="8" r="3"/> + <circle cy="12" cx="24" r="3"/> + <circle cy="12" cx="40" r="3"/> + <rect y="2" x="4" height="6" width="24"/> + </g> + <text stroke="none" fill="#000" x="200" y="2108" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Single-pole, single-throw switch, open (SPST)</text> + <text stroke="none" fill="#000" x="200" y="2156" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Single-pole, single-throw switch, closed (SPST)</text> + <text stroke="none" fill="#000" x="200" y="2012" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Momentary switch, normally open</text> + <text stroke="none" fill="#000" x="200" y="2060" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Momentary switch, normally closed</text> + <text stroke="none" fill="#000" x="200" y="2204" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Single-pole, double-throw switches (SPDT)</text> + <text stroke="none" fill="#000" x="200" y="2268" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Three-way switch</text> + <text stroke="none" fill="#000" x="200" y="2348" style="font-size: 8pt;text-anchor: start;font-weight: normal;">5-way switch</text> + <text stroke="none" fill="#000" x="200" y="2412" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Sliding switch (SPDT)</text> + <g transform="translate(512, 240)"> + <circle fill="white" cy="24" cx="29" r="23"/> + <line y2="38" y1="10" x2="23" x1="23" stroke-width="4"/> + <path d="m 0,24 23,0"/> + <path d="m 40,0 0,9 -18,9"/> + <path d="m 40,48 0,-9 -18,-9"/> + <path fill="#000" stroke="none" d="m 40,39 -6,-8 -4,8 10,0"/> + </g> + <g transform="translate(432, 240)"> + <line y2="38" y1="10" x2="23" x1="23" stroke-width="4"/> + <path d="m 0,24 23,0"/> + <path d="m 40,0 0,9 -18,9"/> + <path d="m 40,48 0,-9 -18,-9"/> + <path fill="#000" stroke="none" d="m 40,39 -6,-8 -4,8 10,0"/> + </g> + <g transform="translate(512, 304) matrix(1, 0, 0, -1, 0, 48)"> + <circle fill="white" cy="24" cx="29" r="23"/> + <line y2="38" y1="10" x2="23" x1="23" stroke-width="4"/> + <path d="m 0,24 23,0"/> + <path d="m 40,0 0,9 -18,9"/> + <path d="m 40,48 0,-9 -18,-9"/> + <path fill="#000" stroke="none" d="m 40,39 -6,-8 -4,8 10,0"/> + </g> + <g transform="translate(432, 304)"> + <line y2="38" y1="10" x2="23" x1="23" stroke-width="4"/> + <path d="m 0,24 23,0"/> + <path d="m 40,0 0,9 -18,9"/> + <path d="m 40,48 0,-9 -18,-9"/> + <path fill="#000" stroke="none" d="m 26,16 6,-8 4,8 -10,0"/> + </g> + <text stroke="none" fill="#000" x="600" y="252" style="font-size: 8pt;text-anchor: start;font-weight: normal;">NPN transistor</text> + <text stroke="none" fill="#000" x="600" y="316" style="font-size: 8pt;text-anchor: start;font-weight: normal;">PNP transistor</text> + <g transform="translate(512, 368)"> + <circle fill="#FFF" cy="24" cx="29" r="23"/> + <g stroke-width="3.6" stroke="#000" transform="translate(0, 10.6667) scale(0.555556)"> + <line y2="38" y1="10" x2="23" x1="23" stroke-width="4"/> + <path d="m 0,24 23,0"/> + <path d="m 72,9 -32,0 -18,9"/> + <path fill="#000" stroke="none" d="m 42,40 -9,-12 -6,12 15,0"/> + <line y2="54" y1="26" x2="55" x1="55" stroke-width="4"/> + <path d="m 22,30 20,10 13,0"/> + <path d="m 72,-19.2 0,44.2 -18,9"/> + <circle cy="9" cx="72" r="2.6"/> + <path d="m 72,67.2 0,-12.2 -18,-9"/> + <path fill="#000" stroke="none" d="m 74,56 -9,-12 -6,12 15,0"/> + </g> + </g> + <g stroke-width="3.6" stroke="#000" transform="translate(432, 368) translate(0, 10.6667) scale(0.555556)"> + <line y2="38" y1="10" x2="23" x1="23" stroke-width="4"/> + <path d="m 0,24 23,0"/> + <path d="m 72,9 -32,0 -18,9"/> + <path fill="#000" stroke="none" d="m 42,40 -9,-12 -6,12 15,0"/> + <line y2="54" y1="26" x2="55" x1="55" stroke-width="4"/> + <path d="m 22,30 20,10 13,0"/> + <path d="m 72,-19.2 0,44.2 -18,9"/> + <circle cy="9" cx="72" r="2.6"/> + <path d="m 72,67.2 0,-12.2 -18,-9"/> + <path fill="#000" stroke="none" d="m 74,56 -9,-12 -6,12 15,0"/> + </g> + <g transform="translate(512, 432)"> + <circle fill="#FFF" cy="24" cx="29" r="23"/> + <g stroke-width="3.6" stroke="#000" transform="translate(0, 1.77778) scale(0.555556)"> + <line y2="54" y1="26" x2="23" x1="23" stroke-width="4"/> + <path d="m 0,40 23,0"/> + <path d="m 55,24 -13,0 -20,10"/> + <path d="m 72,55 -32,0 -18,-9"/> + <circle cy="55" cx="72" r="2.6"/> + <path fill="#000" stroke="none" d="m 26,32 9,-12 6,12 -15,0"/> + <line y2="38" y1="10" x2="55" x1="55" stroke-width="4"/> + <path d="m 72,-3.2 0,12.2 -18,9"/> + <path d="m 72,83.2 0,-44.2 -18,-9"/> + <path fill="#000" stroke="none" d="m 58,16 9,-12 6,12 -15,0"/> + </g> + </g> + <g stroke-width="3.6" stroke="#000" transform="translate(432, 432) translate(0, 1.77778) scale(0.555556)"> + <line y2="54" y1="26" x2="23" x1="23" stroke-width="4"/> + <path d="m 0,40 23,0"/> + <path d="m 55,24 -13,0 -20,10"/> + <path d="m 72,55 -32,0 -18,-9"/> + <circle cy="55" cx="72" r="2.6"/> + <path fill="#000" stroke="none" d="m 26,32 9,-12 6,12 -15,0"/> + <line y2="38" y1="10" x2="55" x1="55" stroke-width="4"/> + <path d="m 72,-3.2 0,12.2 -18,9"/> + <path d="m 72,83.2 0,-44.2 -18,-9"/> + <path fill="#000" stroke="none" d="m 58,16 9,-12 6,12 -15,0"/> + </g> + <text stroke="none" fill="#000" x="600" y="380" style="font-size: 8pt;text-anchor: start;font-weight: normal;">NPN Darlington pair</text> + <text stroke="none" fill="#000" x="600" y="444" style="font-size: 8pt;text-anchor: start;font-weight: normal;">PNP Darlington pair</text> + <g transform="translate(512, 496)"> + <circle fill="white" cy="24" cx="29" r="23"/> + <path d="m 0,40 21,0 0,-33"/> + <path d="m 40,0 0,10 -13,0"/> + <path d="m 40,48 0,-10 -13,0"/> + <path d="m 40,38 0,-14 -13,0"/> + <path stroke-width="3" d="m 26.5,5 0,10"/> + <path stroke-width="3" d="m 26.5,19 0,10"/> + <path stroke-width="3" d="m 26.5,33 0,10"/> + <path fill="#000" stroke="none" d="m 29,24 8,4 0,-8 z"/> + </g> + <g transform="translate(432, 496)"> + <path d="m 0,40 21,0 0,-33"/> + <path d="m 40,0 0,10 -13,0"/> + <path d="m 40,48 0,-10 -13,0"/> + <path d="m 40,38 0,-14 -13,0"/> + <path stroke-width="3" d="m 26.5,5 0,10"/> + <path stroke-width="3" d="m 26.5,19 0,10"/> + <path stroke-width="3" d="m 26.5,33 0,10"/> + <path fill="#000" stroke="none" d="m 29,24 8,4 0,-8 z"/> + </g> + <g transform="translate(512, 560)"> + <circle fill="white" cy="24" cx="29" r="23"/> + <path d="m 0,8 21,0 0,34"/> + <path d="m 40,0 0,10 -13,0"/> + <path d="m 40,48 0,-10 -13,0"/> + <path d="m 40,10 0,14 -13,0"/> + <path stroke-width="3" d="m 26.5,5 0,10"/> + <path stroke-width="3" d="m 26.5,19 0,10"/> + <path stroke-width="3" d="m 26.5,33 0,10"/> + <path fill="#000" stroke="none" d="m 40,24 -8,4 0,-8 z"/> + </g> + <g transform="translate(432, 560)"> + <path d="m 0,8 21,0 0,34"/> + <path d="m 40,0 0,10 -13,0"/> + <path d="m 40,48 0,-10 -13,0"/> + <path d="m 40,10 0,14 -13,0"/> + <path stroke-width="3" d="m 26.5,5 0,10"/> + <path stroke-width="3" d="m 26.5,19 0,10"/> + <path stroke-width="3" d="m 26.5,33 0,10"/> + <path fill="#000" stroke="none" d="m 40,24 -8,4 0,-8 z"/> + </g> + <text stroke="none" fill="#000" x="600" y="508" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Enhancement-mode N-MOSFET</text> + <text stroke="none" fill="#000" x="600" y="572" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Enhancement-mode P-MOSFET</text> + <g transform="translate(512, 624)"> + <circle fill="white" cy="24" cx="29" r="23"/> + <path d="m 0,40 21,0 0,-33"/> + <path d="m 40,0 0,10 -13,0"/> + <path d="m 40,48 0,-10 -13,0"/> + <path d="m 40,38 0,-14 -13,0"/> + <path stroke-width="3" d="m 26.5,5 0,38"/> + <path fill="#000" stroke="none" d="m 29,24 8,4 0,-8 z"/> + </g> + <g transform="translate(432, 624)"> + <path d="m 0,40 21,0 0,-33"/> + <path d="m 40,0 0,10 -13,0"/> + <path d="m 40,48 0,-10 -13,0"/> + <path d="m 40,38 0,-14 -13,0"/> + <path stroke-width="3" d="m 26.5,5 0,38"/> + <path fill="#000" stroke="none" d="m 29,24 8,4 0,-8 z"/> + </g> + <g transform="translate(512, 688)"> + <circle fill="white" cy="24" cx="29" r="23"/> + <path d="m 0,8 21,0 0,34"/> + <path d="m 40,0 0,10 -13,0"/> + <path d="m 40,48 0,-10 -13,0"/> + <path d="m 40,10 0,14 -13,0"/> + <path stroke-width="3" d="m 26.5,5 0,38"/> + <path fill="#000" stroke="none" d="m 40,24 -8,4 0,-8 z"/> + </g> + <g transform="translate(432, 688)"> + <path d="m 0,8 21,0 0,34"/> + <path d="m 40,0 0,10 -13,0"/> + <path d="m 40,48 0,-10 -13,0"/> + <path d="m 40,10 0,14 -13,0"/> + <path stroke-width="3" d="m 26.5,5 0,38"/> + <path fill="#000" stroke="none" d="m 40,24 -8,4 0,-8 z"/> + </g> + <text stroke="none" fill="#000" x="600" y="700" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Depletion-mode P-MOSFET</text> + <text stroke="none" fill="#000" x="600" y="636" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Depletion-mode N-MOSFET</text> + <g transform="translate(512, 752)"> + <circle fill="white" cy="24" cx="29" r="23"/> + <path d="m 0,24 26,0"/> + <path d="m 40,0 0,14 -13,0"/> + <path d="m 40,48 0,-14 -13,0"/> + <path stroke-width="3" d="m 26.5,9 0,30"/> + <path fill="#000" stroke="none" d="m 22,24 -8,4 0,-8 z"/> + </g> + <g transform="translate(432, 752)"> + <path d="m 0,24 26,0"/> + <path d="m 40,0 0,14 -13,0"/> + <path d="m 40,48 0,-14 -13,0"/> + <path stroke-width="3" d="m 26.5,9 0,30"/> + <path fill="#000" stroke="none" d="m 22,24 -8,4 0,-8 z"/> + </g> + <g transform="translate(512, 816)"> + <circle fill="white" cy="24" cx="29" r="23"/> + <path d="m 0,24 26,0"/> + <path d="m 40,0 0,14 -13,0"/> + <path d="m 40,48 0,-14 -13,0"/> + <path stroke-width="3" d="m 26.5,9 0,30"/> + <path fill="#000" stroke="none" d="m 12,24 8,4 0,-8 z"/> + </g> + <g transform="translate(432, 816)"> + <path d="m 0,24 26,0"/> + <path d="m 40,0 0,14 -13,0"/> + <path d="m 40,48 0,-14 -13,0"/> + <path stroke-width="3" d="m 26.5,9 0,30"/> + <path fill="#000" stroke="none" d="m 12,24 8,4 0,-8 z"/> + </g> + <text stroke="none" fill="#000" x="600" y="764" style="font-size: 8pt;text-anchor: start;font-weight: normal;">N-JFET</text> + <text stroke="none" fill="#000" x="600" y="828" style="font-size: 8pt;text-anchor: start;font-weight: normal;">P-JFET</text> + <g transform="translate(480, 880)"> + <path fill="#FFF" d="m 8,8 0,64 64,-32 z"/> + <path d="m 13,56 8,0"/> + <path d="m 17,52 0,8"/> + <path d="m 13,24 8,0"/> + <path d="m 0,24 8,0"/> + <path d="m 0,56 8,0"/> + <path d="m 72,40 8,0"/> + </g> + <g transform="translate(480, 960)"> + <path fill="#FFF" d="m 8,8 0,64 64,-32 z"/> + <path d="m 0,24 8,0"/> + <path d="m 0,56 8,0"/> + <path d="m 72,40 8,0"/> + </g> + <g fill="#FFF" transform="translate(528, 1040)"> + <path d="m 32,24 -31,-15 0,30 z"/> + </g> + <g fill="#FFF" transform="translate(512, 1104)"> + <path d="m 0,1 24,0 a 23,23 0 0 1 0,46 l -24,0 z"/> + </g> + <g fill="#FFF" transform="translate(512, 1168)"> + <path d="m -3.5,1 19.5,0 a 40,46 0 0 1 32,23 a 40,46 0 0 1 -32,23 l -19.5,0 a 40,40 0 0 0 0,-46 z"/> + </g> + <g fill="#FFF" transform="translate(512, 1232)"> + <path fill="none" d="m -3.5,1 a 40,40 0 0 1 0,46"/> + <path d="m 2.5,1 13.5,0 a 40,46 0 0 1 32,23 a 40,46 0 0 1 -32,23 l -13.5,0 a 40,40 0 0 0 0,-46 z"/> + </g> + <g transform="translate(544, 1328)"> + <path d="m 3,12 8,0 4,-8"/> + <path d="m 19,4 -8,0 -4,8"/> + </g> + <text stroke="none" fill="#000" x="600" y="1308" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Negation of digital input or output</text> + <text stroke="none" fill="#000" x="600" y="1340" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Schmitt trigger</text> + <g fill="#FFF" transform="translate(544, 1296) matrix(-1, 0, 0, -1, 16, 16)"> + <path d="m 0,8 16,0"/> + <circle cy="8" cx="13" r="3"/> + </g> + <g fill="#FFF" transform="translate(496, 1296)"> + <path d="m 0,8 16,0"/> + <circle cy="8" cx="13" r="3"/> + </g> + <g fill="#FFF" transform="translate(736, 1136)"> + <path d="m 0,1 24,0 a 23,23 0 0 1 0,46 l -24,0 z"/> + </g> + <g fill="#FFF" transform="translate(784, 1152) matrix(-1, 0, 0, -1, 16, 16)"> + <path d="m 0,8 16,0"/> + <circle cy="8" cx="13" r="3"/> + </g> + <g fill="#FFF" transform="translate(720, 1136)"> + <path d="m 0,8 16,0"/> + <circle cy="8" cx="13" r="3"/> + </g> + <text stroke="none" fill="#000" x="760" y="1132" style="font-size: 8pt;text-anchor: middle;font-weight: normal;">Example</text> + <g transform="translate(512, 1376)"> + <rect fill="#FFF" height="16" width="48" y="0" x="0"/> + <path d="m 8,32 0,-24 c 1.6,-17 4.8,-17 6.4,0 c 1.6,17 4.8,17 6.4,0 c 1.6,-17 4.8,-17 6.4,0 c 1.6,17 4.8,17 6.4,0 c 1.6,-17 4.8,-17 6.4,0 l 0,24"/> + <rect stroke="none" fill="#FFF" height="14" width="10" y="1" x="1"/> + <rect stroke="none" fill="#FFF" height="14" width="8" y="1" x="17"/> + <rect stroke="none" fill="#FFF" height="14" width="8" y="1" x="30"/> + <rect stroke="none" fill="#FFF" height="14" width="4" y="1" x="43"/> + </g> + <g transform="translate(512, 1424)"> + <path d="m 0,8 8,0 0,8"/> + <path fill="#000" d="m 48,8 -15,0 2,3 2,-3"/> + <path fill="#000" d="m 48,24 -15,0 2,-3 2,3"/> + <path d="m 8,16 32,-3"/> + <circle fill="#FFF" cy="16" cx="8" r="3"/> + </g> + <text stroke="none" fill="#000" x="600" y="1388" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Solenoid or relay coil</text> + <text stroke="none" fill="#000" x="600" y="1436" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Relay contacts</text> + <g transform="translate(448, 1424)"> + <path d="m 48,24 -8,0"/> + <path fill="#000" d="m 48,8 -35,0 2,3 2,-3"/> + <path fill="#000" d="m 48,40 -35,0 2,-3 2,3"/> + <path d="m 40,24 -29.8,-12.1"/> + <circle fill="#FFF" cy="24" cx="40" r="3"/> + </g> + <g fill="#FFF" transform="translate(512, 1472)"> + <path d="m 0,24 48,0"/> + <circle cy="24" cx="24" r="16"/> + <path transform="rotate(45, 24, 24)" d="m 24,8 0,32"/> + <path transform="rotate(-45, 24, 24)" d="m 24,8 0,32"/> + </g> + <g fill="#FFF" transform="translate(512, 1520)"> + <path d="m 0,24 48,0"/> + <circle cy="24" cx="24" r="16"/> + <path transform="rotate(45, 24, 24)" d="m 24,8 0,32"/> + <path transform="rotate(-45, 24, 24)" d="m 24,8 0,32"/> + <path d="m 24,4 0,-6"/> + <path transform="rotate(45, 24, 24)" d="m 24,4 0,-6"/> + <path transform="rotate(-45, 24, 24)" d="m 24,4 0,-6"/> + <path d="m 24,44 0,6"/> + <path transform="rotate(45, 24, 24)" d="m 24,44 0,6"/> + <path transform="rotate(-45, 24, 24)" d="m 24,44 0,6"/> + </g> + <g fill="#FFF" transform="translate(512, 1584)"> + <path d="m 24,4 0,-6"/> + <path transform="rotate(45, 24, 24)" d="m 24,4 0,-6"/> + <path transform="rotate(-45, 24, 24)" d="m 24,4 0,-6"/> + <path d="m 24,44 0,6"/> + <path transform="rotate(45, 24, 24)" d="m 24,44 0,6"/> + <path transform="rotate(-45, 24, 24)" d="m 24,44 0,6"/> + </g> + <g fill="#FFF" transform="translate(512, 1648)"> + <circle cy="24" cx="24" r="16"/> + <path d="m 0,24 16,0 a 8,8 0 0 1 16,0 l 16,0"/> + </g> + <g transform="translate(448, 1648)"> + <circle fill="#FFF" cy="24" cx="24" r="16"/> + <path fill="none" d="m 0,24 16,0 c 5,0 10,-4 10,-8 q 0,-4 -2.1,-4"/> + <path fill="none" d="m 48,24 -16,0 c -5,0 -10,-4 -10,-8 q 0,-4 2.1,-4"/> + </g> + <g fill="#FFF" transform="translate(512, 1712)"> + <circle cy="24" cx="24" r="16"/> + <path d="m 0,24 16,0"/> + <path d="m 16,16 0,16"/> + <path d="m 48,24 -16,0"/> + <path d="m 32,16 0,16"/> + </g> + <g fill="#FFF" transform="translate(448, 1712)"> + <circle cy="24" cx="24" r="16"/> + <circle fill="#000" stroke="none" cy="30" cx="15" r="2.5"/> + <path d="m 0,24 20,0"/> + <path d="m 20,16 0,16"/> + <path d="m 48,24 -20,0"/> + <path d="m 28,16 0,16"/> + </g> + <g fill="#FFF" transform="translate(384, 1712)"> + <circle cy="24" cx="24" r="16"/> + <path d="m 0,24 16,0"/> + <path d="m 48,24 -16,0"/> + <path d="m 20,16 a 8.94,8.94 0 0 0 0,16 z"/> + <path d="m 28,16 a 8.94,8.94 0 0 1 0,16 z"/> + </g> + <g fill="#FFF" transform="translate(480, 1744)"> + <circle cy="24" cx="24" r="16"/> + <path d="m 0,24 16,0"/> + <path d="m 48,24 -16,0"/> + <path d="m 12,20 0,8"/> + <path d="m 36,20 0,8"/> + <circle cy="24" cx="16" r="3"/> + <circle cy="24" cx="32" r="3"/> + <circle fill="#000" stroke="none" cy="34" cx="24" r="2.5"/> + </g> + <g fill="#FFF" transform="translate(416, 1744)"> + <circle cy="24" cx="24" r="16"/> + <path d="m 0,24 16,0"/> + <path d="m 48,24 -16,0"/> + <circle cy="24" cx="16" r="3"/> + <circle cy="24" cx="32" r="3"/> + <circle fill="#000" stroke="none" cy="34" cx="24" r="2.5"/> + </g> + <text stroke="none" fill="#000" x="600" y="1740" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Neon lamps</text> + <text stroke="none" fill="#000" x="600" y="1676" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Incandescent lamps</text> + <text stroke="none" fill="#000" x="600" y="1612" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Lamp light</text> + <text stroke="none" fill="#000" x="600" y="924" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Operational amplifier or comparator</text> + <text stroke="none" fill="#000" x="600" y="1004" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Amplifier</text> + <text stroke="none" fill="#000" x="600" y="1068" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Digital buffer, or part of NOT gate symbol</text> + <text stroke="none" fill="#000" x="600" y="1132" style="font-size: 8pt;text-anchor: start;font-weight: normal;">AND gate</text> + <text stroke="none" fill="#000" x="600" y="1196" style="font-size: 8pt;text-anchor: start;font-weight: normal;">OR gate</text> + <text stroke="none" fill="#000" x="600" y="1260" style="font-size: 8pt;text-anchor: start;font-weight: normal;">XOR gate</text> + <text stroke="none" fill="#000" x="600" y="1500" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Lamp, unlit</text> + <text stroke="none" fill="#000" x="600" y="1548" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Lamp, lit</text> + <g fill="#FFF" transform="translate(480, 1824)"> + <circle stroke-width="3" r="40" cy="40" cx="40"/> + <path d="m 40,0 0,16"/> + <path stroke-width="4" d="m 24,16 32,0"/> + </g> + <g transform="translate(496, 1856)"> + <path d="m 24,80 0,-4 a 18,18 0 0 1 32,0 l 0,4"/> + </g> + <g transform="translate(496, 1888)"> + <path stroke-width="3" d="m 22,70 a 23,23 0 0 1 36,0"/> + <path d="m 0,72 20,0 3,-3"/> + </g> + <g transform="translate(496, 1968)"> + <path stroke-dasharray="4" stroke-width="3" d="m 18,48 48,0"/> + <path d="m 0,40 9,0 0,8 9,0"/> + </g> + <g transform="translate(496, 2000)"> + <path stroke-dasharray="4" stroke-width="3" d="m 18,40 48,0"/> + <path d="m 0,40 18,0"/> + </g> + <g transform="translate(496, 2016)"> + <path stroke-dasharray="4" stroke-width="3" d="m 18,48 48,0"/> + <path d="m 0,56 9,0 0,-8 9,0"/> + </g> + <g transform="translate(528, 2064)"> + <path stroke-width="1" d="m 18,24 -6,0 a 36,36 0 0 0 12,44"/> + <circle fill="#000" stroke="none" r="2.5" cy="68" cx="24"/> + </g> + <text stroke="none" fill="#000" x="600" y="1868" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Vacuum tube and anode</text> + <text stroke="none" fill="#000" x="600" y="1932" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Heating element</text> + <text stroke="none" fill="#000" x="600" y="2044" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Grid elements</text> + <text stroke="none" fill="#000" x="600" y="2108" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Supressor grid internal cathode connection</text> + <g fill="#FFF" transform="translate(720, 1920)"> + <circle stroke-width="3" r="40" cy="40" cx="40"/> + <path d="m 40,0 0,16"/> + <path stroke-width="4" d="m 24,16 32,0"/> + </g> + <g transform="translate(720, 1920) matrix(-1, 0, 0, 1, 80, 0)"> + <path stroke-width="3" d="m 22,70 a 23,23 0 0 1 36,0"/> + <path d="m 0,72 20,0 3,-3"/> + </g> + <g transform="translate(720, 1920) matrix(-1, 0, 0, 1, 80, 0)"> + <path stroke-dasharray="4" stroke-width="3" d="m 18,40 48,0"/> + <path d="m 0,40 18,0"/> + </g> + <g transform="translate(720, 1920) matrix(-1, 0, 0, 1, 80, 0)"> + <path stroke-dasharray="4" stroke-width="3" d="m 18,24 48,0"/> + <path d="m 0,24 18,0"/> + </g> + <text stroke="none" fill="#000" x="760" y="1900" style="font-size: 8pt;text-anchor: middle;font-weight: normal;">Example</text> + <g transform="translate(480, 2160)"> + <g fill="#FFF"> + <circle stroke-width="3" r="40" cy="40" cx="40"/> + <path d="m 40,0 0,16"/> + <path stroke-width="4" d="m 24,16 32,0"/> + </g> + <g> + <path d="m 24,80 0,-4 a 18,18 0 0 1 32,0 l 0,4"/> + </g> + <g> + <path stroke-width="3" d="m 22,70 a 23,23 0 0 1 36,0"/> + <path d="m 8,80 0,-6 10,0 5,-5"/> + </g> + </g> + <g transform="translate(480, 2256)"> + <g fill="#FFF"> + <circle stroke-width="3" r="40" cy="40" cx="40"/> + <path d="m 40,0 0,16"/> + <path stroke-width="4" d="m 24,16 32,0"/> + </g> + <g> + <path d="m 24,80 0,-4 a 18,18 0 0 1 32,0 l 0,4"/> + </g> + <g> + <path stroke-width="3" d="m 22,70 a 23,23 0 0 1 36,0"/> + <path d="m 8,80 0,-6 10,0 5,-5"/> + </g> + <g transform="matrix(-1, 0, 0, 1, 80, 0)"> + <path stroke-dasharray="4" stroke-width="3" d="m 18,40 48,0"/> + <path d="m 0,40 18,0"/> + </g> + </g> + <g transform="translate(480, 2352)"> + <g fill="#FFF"> + <circle stroke-width="3" r="40" cy="40" cx="40"/> + <path d="m 40,0 0,16"/> + <path stroke-width="4" d="m 24,16 32,0"/> + </g> + <g> + <path d="m 24,80 0,-4 a 18,18 0 0 1 32,0 l 0,4"/> + </g> + <g> + <path stroke-width="3" d="m 22,70 a 23,23 0 0 1 36,0"/> + <path d="m 8,80 0,-6 10,0 5,-5"/> + </g> + <g> + <path stroke-dasharray="4" stroke-width="3" d="m 18,48 48,0"/> + <path d="m 0,40 9,0 0,8 9,0"/> + </g> + <g transform="matrix(-1, 0, 0, 1, 80, 0)"> + <path stroke-dasharray="4" stroke-width="3" d="m 18,32 48,0"/> + <path d="m 0,40 9,0 0,-8 9,0"/> + </g> + </g> + <g transform="translate(480, 2448)"> + <g fill="#FFF"> + <circle stroke-width="3" r="40" cy="40" cx="40"/> + <path d="m 40,0 0,16"/> + <path stroke-width="4" d="m 24,16 32,0"/> + </g> + <g> + <path d="m 24,80 0,-4 a 18,18 0 0 1 32,0 l 0,4"/> + </g> + <g> + <path stroke-width="3" d="m 22,70 a 23,23 0 0 1 36,0"/> + <path d="m 8,80 0,-6 10,0 5,-5"/> + </g> + <g> + <path stroke-dasharray="4" stroke-width="3" d="m 18,56 48,0"/> + <path d="m 0,56 18,0"/> + </g> + <g transform="matrix(-1, 0, 0, 1, 80, 0)"> + <path stroke-dasharray="4" stroke-width="3" d="m 18,40 48,0"/> + <path d="m 0,40 18,0"/> + </g> + <g> + <path stroke-dasharray="4" stroke-width="3" d="m 18,24 48,0"/> + <path d="m 0,24 18,0"/> + </g> + <g transform="matrix(-1, 0, 0, 1, 80, 0)"> + <path stroke-width="1" d="m 18,24 -6,0 a 36,36 0 0 0 12,44"/> + <circle fill="#000" stroke="none" r="2.5" cy="68" cx="24"/> + </g> + </g> + <text stroke="none" fill="#000" x="824" y="1948" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Triode, heater omitted</text> + <text stroke="none" fill="#000" x="824" y="1964" style="font-size: 8pt;text-anchor: start;font-weight: normal;">All contacts on the right</text> + <g transform="translate(496, 1904)"> + <path stroke-width="3" d="m 22,70 a 23,23 0 0 1 36,0"/> + <path d="m 8,80 0,-6 10,0 5,-5"/> + </g> + <text stroke="none" fill="#000" x="600" y="1964" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Cathode</text> + <text stroke="none" fill="#000" x="600" y="2204" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Diode</text> + <text stroke="none" fill="#000" x="600" y="2300" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Triode</text> + <text stroke="none" fill="#000" x="600" y="2396" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Tetrode</text> + <text stroke="none" fill="#000" x="600" y="2492" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Pentode</text> + <g fill="#FFF" transform="translate(688, 2160)"> + <path stroke-width="3" d="m 40,0 80,0 a 40,40 0 0 1 0,80 l -80,0 a 40,40 0 0 1 0,-80"/> + <path d="m 40,0 0,16"/> + <path stroke-width="4" d="m 24,16 32,0"/> + <path d="m 120,0 0,16"/> + <path stroke-width="4" d="m 104,16 32,0"/> + </g> + <g fill="#FFF" transform="translate(736, 2288)"> + <path d="m 0,40 a 40,40 0 0 1 80,0 l 0,32 a 40,40 0 0 1 -80,0 l 0,-32"/> + <path d="m 40,0 0,16"/> + <path stroke-width="4" d="m 24,16 32,0"/> + </g> + <text stroke="none" fill="#000" x="696" y="2140" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Double-anode tube</text> + <text stroke="none" fill="#000" x="696" y="2284" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Long tube style</text> + <g transform="translate(896, 240)"> + <rect fill="#FFF" height="32" width="8" y="8" x="0"/> + <path d="m 0,40 64,0"/> + <path d="m 12,8 6,6 6,-6 40,0"/> + <circle fill="#000" stroke="none" cy="8" cx="64" r="3"/> + <circle fill="#000" stroke="none" cy="40" cx="64" r="3"/> + </g> + <g transform="translate(896, 304)"> + <rect fill="#FFF" height="32" width="8" y="8" x="0"/> + <path d="m 0,40 64,0"/> + <path d="m 12,8 6,6 6,-6 40,0"/> + <path d="m 24,24 6,-6 6,6 28,0"/> + <circle fill="#000" stroke="none" cy="8" cx="64" r="3"/> + <circle fill="#000" stroke="none" cy="24" cx="64" r="3"/> + <circle fill="#000" stroke="none" cy="40" cx="64" r="3"/> + </g> + <g transform="translate(896, 368)"> + <rect fill="#FFF" height="32" width="8" y="8" x="0"/> + <path d="m 0,40 64,0"/> + <path d="m 12,8 6,6 6,-6 40,0"/> + <path d="m 30,16 0,8 34,0"/> + <path fill="#000" stroke="none" d="m 30,9 4,8 -8,0 z"/> + <circle fill="#000" stroke="none" cy="8" cx="64" r="3"/> + <circle fill="#000" stroke="none" cy="24" cx="64" r="3"/> + <circle fill="#000" stroke="none" cy="40" cx="64" r="3"/> + </g> + <g transform="translate(896, 432)"> + <rect fill="#FFF" height="64" width="8" y="8" x="0"/> + <path d="m 0,72 64,0"/> + <path d="m 12,8 6,6 6,-6 40,0"/> + <path d="m 24,56 6,-6 6,6 28,0"/> + <path d="m 30,16 0,8 34,0"/> + <path fill="#000" stroke="none" d="m 30,9 4,8 -8,0 z"/> + <path d="m 46,48 0,-8 18,0"/> + <path fill="#000" stroke="none" d="m 46,55 4,-8 -8,0 z"/> + <circle fill="#000" stroke="none" cy="8" cx="64" r="3"/> + <circle fill="#000" stroke="none" cy="24" cx="64" r="3"/> + <circle fill="#000" stroke="none" cy="40" cx="64" r="3"/> + <circle fill="#000" stroke="none" cy="56" cx="64" r="3"/> + <circle fill="#000" stroke="none" cy="72" cx="64" r="3"/> + </g> + <g transform="translate(912, 528)"> + <circle r="8" cy="24" cx="24"/> + <circle r="16" cy="24" cx="24"/> + <path d="m 32,24 16,0"/> + <circle fill="#000" stroke="none" r="3" cy="24" cx="32"/> + <path d="m 24,40 0,8"/> + <circle fill="#000" stroke="none" r="3" cy="40" cx="24"/> + </g> + <g transform="translate(848, 528)"> + <circle r="8" cy="24" cx="24"/> + <circle r="16" cy="24" cx="24"/> + <path d="m 32,24 16,0"/> + <circle fill="#000" stroke="none" r="3" cy="24" cx="32"/> + <path d="m 8,24 -8,0"/> + <circle fill="#000" stroke="none" r="3" cy="24" cx="8"/> + </g> + <text stroke="none" fill="#000" x="1000" y="268" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Phone jack, 2-conductor</text> + <text stroke="none" fill="#000" x="1000" y="332" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Phone jack, 3-conductor</text> + <text stroke="none" fill="#000" x="1000" y="396" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Phone jack with NC connection</text> + <text stroke="none" fill="#000" x="1000" y="476" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Phone jack, 3-conductor, with NC connections</text> + <text stroke="none" fill="#000" x="1000" y="556" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Phono jacks</text> + <g fill="#FFF" transform="translate(912, 608)"> + <path d="m 0,8 17,0"/> + <path d="m 48,8 -17,0"/> + <path d="m 17,1 0,14"/> + <path d="m 31,1 0,14"/> + <rect height="16" width="6" y="0" x="21"/> + </g> + <g fill="#FFF" transform="translate(928, 640)"> + <path d="m 2,0 16,16 0,16 -16,16 z"/> + <path d="m 18,16 12,0 0,16 -12,0 z"/> + <path d="m 24,16 0,-16"/> + <path d="m 24,32 0,16"/> + </g> + <g transform="translate(912, 720)"> + <path d="m 0,8 8,0 a 18,18 0 1 1 32,0 l 8,0"/> + <circle fill="#FFF" cy="8" cx="8" r="5"/> + <circle fill="#FFF" cy="8" cx="40" r="5"/> + </g> + <g fill="#FFF" transform="translate(912, 752)"> + <path d="m 0,24 48,0"/> + <circle stroke-width="3" cy="24" cx="24" r="16"/> + </g> + <g fill="#FFF" transform="translate(912, 800)"> + <path d="m 0,24 48,0"/> + <rect height="12" width="8" y="18" x="4"/> + <rect height="12" width="8" y="18" x="36"/> + <circle cy="24" cx="24" r="16"/> + </g> + <g transform="translate(912, 864)"> + <path d="m 24,0 0,32"/> + <path d="m 0,0 48,0 -24,24 z"/> + </g> + <g transform="translate(928, 912) matrix(0, 1, -1, 0, 32, 0)"> + <path d="m 24,0 0,32"/> + <path d="m 0,0 48,0 -24,24 z"/> + </g> + <g transform="translate(912, 976)"> + <path d="m 0,8 8,0 a 10,10 0 0 1 16,0 a 10,10 0 0 0 16,0 l 8,0"/> + <circle fill="#FFF" cy="8" cx="8" r="3"/> + <circle fill="#FFF" cy="8" cx="40" r="3"/> + </g> + <g fill="#FFF" transform="translate(848, 976)"> + <rect height="8" width="24" y="4" x="12"/> + <path d="m 0,8 48,0"/> + </g> + <g transform="translate(912, 1008)"> + <path d="m 0,8 16,0"/> + <path d="m 48,8 -16,0"/> + <path d="m 12,4 a 16,16 0 0 1 24,0"/> + </g> + <text stroke="none" fill="#000" x="1000" y="620" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Crystal</text> + <text stroke="none" fill="#000" x="1000" y="668" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Speaker</text> + <text stroke="none" fill="#000" x="1000" y="716" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Headphones</text> + <text stroke="none" fill="#000" x="1000" y="780" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Generic two-terminal</text> + <text stroke="none" fill="#000" x="1000" y="828" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Motor</text> + <text stroke="none" fill="#000" x="1000" y="876" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Antenna</text> + <text stroke="none" fill="#000" x="1000" y="940" style="font-size: 8pt;text-anchor: start;font-weight: normal;">RF probe</text> + <text stroke="none" fill="#000" x="1000" y="988" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Fuse</text> + <text stroke="none" fill="#000" x="1000" y="1020" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Circuit breaker</text> + <g transform="translate(944, 1056)"> + <path d="m -1,8 4,0 a 6,6 0 0 0 10,0 l 4,0"/> + </g> + <g fill="#FFF" transform="translate(944, 1088)"> + <path d="m 8,3 -5,0 a 2,2 0 0 0 -2,2 l 0,6 a 2,2 0 0 0 2,2 l 5,0"/> + <path d="m 8,0 0,16"/> + </g> + <text stroke="none" fill="#000" x="1000" y="1068" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Integrated circuit pin 1 mark</text> + <text stroke="none" fill="#000" x="1000" y="1100" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Integrated circuit pin</text> + <g transform="translate(1200, 1040)"> + <path d="m -1,8 4,0 a 6,6 0 0 0 10,0 l 4,0"/> + </g> + <g fill="#FFF" transform="translate(1184, 1056)"> + <path d="m 8,3 -5,0 a 2,2 0 0 0 -2,2 l 0,6 a 2,2 0 0 0 2,2 l 5,0"/> + <path d="m 8,0 0,16"/> + </g> + <g fill="#FFF" transform="translate(1184, 1072)"> + <path d="m 8,3 -5,0 a 2,2 0 0 0 -2,2 l 0,6 a 2,2 0 0 0 2,2 l 5,0"/> + <path d="m 8,0 0,16"/> + </g> + <g fill="#FFF" transform="translate(1216, 1056) matrix(-1, 0, 0, -1, 16, 16)"> + <path d="m 8,3 -5,0 a 2,2 0 0 0 -2,2 l 0,6 a 2,2 0 0 0 2,2 l 5,0"/> + <path d="m 8,0 0,16"/> + </g> + <g fill="#FFF" transform="translate(1216, 1072) matrix(-1, 0, 0, -1, 16, 16)"> + <path d="m 8,3 -5,0 a 2,2 0 0 0 -2,2 l 0,6 a 2,2 0 0 0 2,2 l 5,0"/> + <path d="m 8,0 0,16"/> + </g> + <g transform="translate(1184, 1040)"> + <path d="m 8,16 0,-8 8,0"/> + </g> + <g transform="translate(1216, 1040) matrix(0, 1, -1, 0, 16, 0)"> + <path d="m 8,16 0,-8 8,0"/> + </g> + <g transform="translate(1184, 1088) matrix(0, -1, 1, 0, 0, 16)"> + <path d="m 8,16 0,-8 8,0"/> + </g> + <g transform="translate(1216, 1088) matrix(-1, 0, 0, -1, 16, 16)"> + <path d="m 8,16 0,-8 8,0"/> + </g> + <text stroke="none" fill="#000" x="1208" y="1116" style="font-size: 8pt;text-anchor: middle;font-weight: normal;">Example</text> + <g transform="translate(944, 1136)"> + <path d="m -1,0 18,0"/> + </g> + <g transform="translate(928, 1136)"> + <path d="m -1,0 18,0"/> + </g> + <g transform="translate(912, 1136)"> + <path d="m -1,0 18,0"/> + </g> + <g transform="translate(896, 1136)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="2 2" transform="translate(944, 1152)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="2 2" transform="translate(928, 1152)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="2 2" transform="translate(912, 1152)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="2 2" transform="translate(896, 1152)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="3 4 4 4 3" transform="translate(944, 1168)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="3 4 4 4 3" transform="translate(928, 1168)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="3 4 4 4 3" transform="translate(912, 1168)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="3 4 4 4 3" transform="translate(896, 1168)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="5 8 5" transform="translate(944, 1184)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="5 8 5" transform="translate(928, 1184)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="5 8 5" transform="translate(912, 1184)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="5 8 5" transform="translate(896, 1184)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="5 3 2 3 5" transform="translate(944, 1200)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="5 3 2 3 5" transform="translate(928, 1200)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="5 3 2 3 5" transform="translate(912, 1200)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-dasharray="5 3 2 3 5" transform="translate(896, 1200)"> + <path d="m -1,0 18,0"/> + </g> + <g stroke-width="1" stroke="#000" transform="translate(944, 1216)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-width="1" stroke="#000" transform="translate(928, 1216)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-width="1" stroke="#000" transform="translate(912, 1216)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-width="1" stroke="#000" transform="translate(896, 1216)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="1.5 2 2 2 2 2 2 2 1.5 " stroke-width="1" stroke="#000" transform="translate(944, 1232)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="1.5 2 2 2 2 2 2 2 1.5 " stroke-width="1" stroke="#000" transform="translate(928, 1232)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="1.5 2 2 2 2 2 2 2 1.5 " stroke-width="1" stroke="#000" transform="translate(912, 1232)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="1.5 2 2 2 2 2 2 2 1.5 " stroke-width="1" stroke="#000" transform="translate(896, 1232)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="2.5 4 4 4 2.5" stroke-width="1" stroke="#000" transform="translate(944, 1248)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="2.5 4 4 4 2.5" stroke-width="1" stroke="#000" transform="translate(928, 1248)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="2.5 4 4 4 2.5" stroke-width="1" stroke="#000" transform="translate(912, 1248)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="2.5 4 4 4 2.5" stroke-width="1" stroke="#000" transform="translate(896, 1248)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="4.5 8 4.5" stroke-width="1" stroke="#000" transform="translate(944, 1264)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="4.5 8 4.5" stroke-width="1" stroke="#000" transform="translate(928, 1264)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="4.5 8 4.5" stroke-width="1" stroke="#000" transform="translate(912, 1264)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="4.5 8 4.5" stroke-width="1" stroke="#000" transform="translate(896, 1264)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="4.5 3 2 3 4.5" stroke-width="1" stroke="#000" transform="translate(944, 1280)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="4.5 3 2 3 4.5" stroke-width="1" stroke="#000" transform="translate(928, 1280)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="4.5 3 2 3 4.5" stroke-width="1" stroke="#000" transform="translate(912, 1280)"> + <path d="m -0.5,0 17,0"/> + </g> + <g stroke-dasharray="4.5 3 2 3 4.5" stroke-width="1" stroke="#000" transform="translate(896, 1280)"> + <path d="m -0.5,0 17,0"/> + </g> + <text stroke="none" fill="#000" x="1000" y="1196" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Boxes and borders</text> + <g transform="translate(848, 1312)"> + <circle cy="56" cx="56" r="48"/> + </g> + <g transform="translate(864, 1328)"> + <circle cy="40" cx="40" r="40"/> + </g> + <g transform="translate(864, 1328)"> + <circle cy="40" cx="40" r="32"/> + </g> + <g transform="translate(880, 1344)"> + <circle cy="24" cx="24" r="24"/> + </g> + <g transform="translate(880, 1344)"> + <circle cy="24" cx="24" r="16"/> + </g> + <g transform="translate(896, 1360)"> + <circle cy="8" cx="8" r="8"/> + </g> + <text stroke="none" fill="#000" x="1000" y="1356" style="font-size: 8pt;text-anchor: start;font-weight: normal;">Circles</text> + </g> +</svg> \ No newline at end of file