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

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

[elpa] externals/osm 6ad4079bcb 2/3: osm-server: Add annotation and grou


From: ELPA Syncer
Subject: [elpa] externals/osm 6ad4079bcb 2/3: osm-server: Add annotation and group function
Date: Mon, 14 Mar 2022 12:57:51 -0400 (EDT)

branch: externals/osm
commit 6ad4079bcb59a0268bf54f3ba12b05d59eae1108
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    osm-server: Add annotation and group function
---
 osm.el | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 52 insertions(+), 10 deletions(-)

diff --git a/osm.el b/osm.el
index 84ede66205..030173a930 100644
--- a/osm.el
+++ b/osm.el
@@ -54,42 +54,49 @@
      :name "Mapnik"
      :description "Standard Mapnik map provided by OpenStreetMap"
      :url "https://%s.tile.openstreetmap.org/%z/%x/%y.png";
+     :group "Standard"
      :copyright ("Map data © 
{OpenStreetMap|https://www.openstreetmap.org/copyright} contributors"
                  "Map style: © {OpenStreetMap 
Standard|https://www.openstreetmap.org/copyright}";))
     (de
      :name "Mapnik(de)"
      :description "Localized Mapnik map provided by OpenStreetMap Germany"
      :url "https://%s.tile.openstreetmap.de/%z/%x/%y.png";
+     :group "Standard"
      :copyright ("Map data: © 
{OpenStreetMap|https://www.openstreetmap.org/copyright} contributors"
                  "Map style: © {OpenStreetMap 
Deutschland|https://www.openstreetmap.de/germanstyle.html}";))
     (fr
      :name "Mapnik(fr)"
      :description "Localized Mapnik map by OpenStreetMap France"
      :url "https://%s.tile.openstreetmap.fr/osmfr/%z/%x/%y.png";
+     :group "Standard"
      :copyright ("Map data: © 
{OpenStreetMap|https://www.openstreetmap.org/copyright} contributors"
                  "Map style: © {OpenStreetMap 
France|https://www.openstreetmap.fr/mentions-legales/}";))
     (humanitarian
      :name "Humanitarian"
      :description "Humanitarian map provided by OpenStreetMap France"
      :url "https://%s.tile.openstreetmap.fr/hot/%z/%x/%y.png";
+     :group "Special Purpose"
      :copyright ("Map data: © 
{OpenStreetMap|https://www.openstreetmap.org/copyright} contributors"
-                 "Map style: © {Yohan Boniface & Humanitarian OpenStreetMap 
Team|https://www.hotosm.org/updates/2013-09-29_a_new_window_on_openstreetmap_data}";))
+                 "Map style: © {Humanitarian OpenStreetMap 
Team|https://www.hotosm.org/updates/2013-09-29_a_new_window_on_openstreetmap_data}";))
     (cyclosm
      :name "CyclOSM"
      :description "Bicycle-oriented map provided by OpenStreetMap France"
      :url "https://%s.tile.openstreetmap.fr/cyclosm/%z/%x/%y.png";
+     :group "Transportation"
      :copyright ("Map data: © 
{OpenStreetMap|https://www.openstreetmap.org/copyright} contributors"
                  "Map style: © {CyclOSM|https://www.cyclosm.org/} 
contributors"))
     (openriverboatmap
      :name "OpenRiverBoatMap"
      :description "Waterways map provided by OpenStreetMap France"
      :url "https://%s.tile.openstreetmap.fr/openriverboatmap/%z/%x/%y.png";
+     :group "Transportation"
      :copyright ("Map data: © 
{OpenStreetMap|https://www.openstreetmap.org/copyright} contributors"
                  "Map style: © 
{OpenRiverBoatMap|https://github.com/tilery/OpenRiverboatMap}";))
     (opentopomap
      :name "OpenTopoMap"
      :description "Topographical map provided by OpenTopoMap"
      :url "https://%s.tile.opentopomap.org/%z/%x/%y.png";
+     :group "Topographical"
      :copyright ("Map data: © 
{OpenStreetMap|https://www.openstreetmap.org/copyright} contributors"
                  "Map style: © {OpenTopoMap|https://www.opentopomap.org} 
({CC-BY-SA|https://creativecommons.org/licenses/by-sa/3.0/})"
                  "Elevation data: {SRTM|https://www2.jpl.nasa.gov/srtm/}";))
@@ -97,30 +104,35 @@
      :name "ÖPNV" :max-zoom 18
      :description "Base layer with public transport information"
      :url "http://%s.tile.memomaps.de/tilegen/%z/%x/%y.png";
+     :group "Transportation"
      :copyright ("Map data: © 
{OpenStreetMap|https://www.openstreetmap.org/copyright} contributors"
                  "Map style: © {ÖPNVKarte|https://www.öpnvkarte.de}";))
     (stamen-watercolor
      :name "Stamen Watercolor"
      :description "Artistic map in watercolor style provided by Stamen"
      :url "https://stamen-tiles-%s.a.ssl.fastly.net/watercolor/%z/%x/%y.jpg";
+     :group "Artistic"
      :copyright ("Map data: © 
{OpenStreetMap|https://www.openstreetmap.org/copyright} contributors"
                  "Map style: © {Stamen Design|http://maps.stamen.com/} 
({CC-BY|https://creativecommons.org/licenses/by/3.0/})"))
     (stamen-terrain
      :name "Stamen Terrain" :max-zoom 18
      :description "Map with hill shading provided by Stamen"
      :url "https://stamen-tiles-%s.a.ssl.fastly.net/terrain/%z/%x/%y.png";
+     :group "Artistic"
      :copyright ("Map data: © 
{OpenStreetMap|https://www.openstreetmap.org/copyright} contributors"
                  "Map style: © {Stamen Design|http://maps.stamen.com/} 
({CC-BY|https://creativecommons.org/licenses/by/3.0/})"))
     (stamen-toner-dark
      :name "Stamen Toner Dark"
      :description "Artistic map in toner style provided by Stamen"
      :url "https://stamen-tiles-%s.a.ssl.fastly.net/toner/%z/%x/%y.png";
+     :group "Artistic"
      :copyright ("Map data: © 
{OpenStreetMap|https://www.openstreetmap.org/copyright} contributors"
                  "Map style: © {Stamen Design|http://maps.stamen.com/} 
({CC-BY|https://creativecommons.org/licenses/by/3.0/})"))
     (stamen-toner-light
      :name "Stamen Toner Lite"
      :description "Artistic map in toner style provided by Stamen"
      :url "https://stamen-tiles-%s.a.ssl.fastly.net/toner-lite/%z/%x/%y.png";
+     :group "Artistic"
      :copyright ("Map data: © 
{OpenStreetMap|https://www.openstreetmap.org/copyright} contributors"
                  "Map style: © {Stamen Design|http://maps.stamen.com/} 
({CC-BY|https://creativecommons.org/licenses/by/3.0/})")))
   "List of tile servers."
@@ -350,9 +362,9 @@ Should be at least 7 days according to the server usage 
policies."
   "Convert LAT/ZOOM to y coordinate in pixel."
   (floor (* 256 (expt 2.0 zoom) (osm--lat-to-normalized-y lat))))
 
-(defun osm--server-property (prop)
-  "Return server property PROP."
-  (or (plist-get (alist-get osm-server osm-server-list) prop)
+(defun osm--server-property (prop &optional server)
+  "Return server property PROP for SERVER."
+  (or (plist-get (alist-get (or server osm-server) osm-server-list) prop)
       (plist-get osm-server-defaults prop)))
 
 (defun osm--tile-url (x y zoom)
@@ -983,7 +995,10 @@ xmlns='http://www.w3.org/2000/svg' 
xmlns:xlink='http://www.w3.org/1999/xlink'>
                        (osm--format-link
                         (match-string 1 str)
                         (match-string 2 str)))
-                     (concat (string-join copyright " | ") "\n")))
+                     (concat (if (listp copyright)
+                                 (string-join copyright " | ")
+                               copyright)
+                             "\n")))
     (setq osm--copyright-overlay (make-overlay (point-min) (point-min)))
     (add-face-text-property
      0 (length copyright)
@@ -1314,6 +1329,24 @@ xmlns='http://www.w3.org/2000/svg' 
xmlns:xlink='http://www.w3.org/1999/xlink'>
   (setq osm--gpx-files (assoc-delete-all file osm--gpx-files))
   (osm--revert))
 
+(defun osm--server-annotation (cand)
+  "Annotation for server CAND."
+  (when-let* ((copyright (osm--server-property :copyright (get-text-property 0 
'osm--server cand)))
+              (str
+               (replace-regexp-in-string
+                "{\\(.*?\\)|.*?}"
+                (lambda (str) (match-string 1 str))
+                (if (listp copyright) (string-join copyright " | ") 
copyright))))
+    (concat (propertize " " 'display ` (space :align-to (- right ,(length str) 
2)))
+            " "
+            str)))
+
+(defun osm--server-group (cand transform)
+  "Group function for server CAND with candidate TRANSFORM."
+  (if transform
+      cand
+    (osm--server-property :group (get-text-property 0 'osm--server cand))))
+
 ;;;###autoload
 (defun osm-server (server)
   "Select tile SERVER."
@@ -1327,19 +1360,28 @@ xmlns='http://www.w3.org/2000/svg' 
xmlns:xlink='http://www.w3.org/1999/xlink'>
           (servers
            (mapcar
             (lambda (x)
-              (cons
+              (propertize
                (format fmt
                        (plist-get (cdr x) :name)
                        (or (plist-get (cdr x) :description) ""))
-               (car x)))
+               'osm--server (car x)))
             osm-server-list))
           (selected (completing-read
-                     "Server: " servers nil t nil nil
+                     "Server: "
+                     (lambda (str pred action)
+                       (if (eq action 'metadata)
+                           '(metadata
+                             (annotation-function . osm--server-annotation)
+                             (group-function . osm--server-group))
+                         (complete-with-action action servers str pred)))
+                     nil t nil nil
                      (format fmt
                              (osm--server-property :name)
                              (or (osm--server-property :description) "")))))
-     (list (or (cdr (assoc selected servers))
-               (error "No server selected")))))
+     (list
+      (get-text-property 0 'osm--server
+                         (or (car (member selected servers))
+                             (error "No server selected"))))))
   (osm--goto nil server))
 
 (dolist (sym (list #'osm-up #'osm-down #'osm-left #'osm-right



reply via email to

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