glug 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8426da28bdb893a064adf7e2e79a72791af6520b115185c41766f03749697b1c
4
- data.tar.gz: f03ae85175a83109aa75db59225cc7086e28651814d826cc163c61889408e724
3
+ metadata.gz: bebac26dd70c1755650c029aba0ae0d5031018f167d4638c0c362595a6f7622d
4
+ data.tar.gz: 1d3ca7e158a4cef60d8d2934aea595bc1c5e570382ab71768c067a58082e3f94
5
5
  SHA512:
6
- metadata.gz: e232e3273af876c58257603c9c0245ffd6350aa8a75f136f2da556128c28f2384d86925db66feee5f76b5e1373b4d90b5fdd0ec0d827b6eafb8f58d635655a89
7
- data.tar.gz: b152ed4020b693e72998fa9b7ee1277e99dc8601e58a133a2aa03ee58d2d75bb27acf01ff1a8ad245cf5e6a14bb617589d4b267f7f988a35cfc6aed30f3bee96
6
+ metadata.gz: 7be8a1cb44b2ae801708166f4df56daa62b1874d8276e607b9504ac513ed50d312222c9f18c33eee53097d11247e7e4ff706f22c9397cbd6198bddba6909354d
7
+ data.tar.gz: 7d494d4030edca1328173d1b5f9e025df08350faaf4a23ee428c6897a802a977612b806ec36010461028d073236c668817113e77e0ef651d56e557744561232d
@@ -54,6 +54,7 @@ module Glug # :nodoc:
54
54
  def **(*args); Condition.new.from_key(:^ , self, args) end
55
55
  def in(*args); Condition.new.from_key(:in, self, [[:literal,args.flatten]]) end
56
56
  def [](*args); Condition.new.from_key(:at, args[0], [self]) end
57
+ def coerce(other); [Condition.new.just_value(other), self] end
57
58
 
58
59
  def initialize
59
60
  @values=[]
@@ -68,6 +69,11 @@ module Glug # :nodoc:
68
69
  @values = list
69
70
  self
70
71
  end
72
+ def just_value(val)
73
+ @operator = nil
74
+ @values = [val]
75
+ self
76
+ end
71
77
 
72
78
  def &(cond); merge(:all,cond) end
73
79
  def |(cond); merge(:any,cond) end
@@ -96,7 +102,8 @@ module Glug # :nodoc:
96
102
  # Encode into an array for GL JSON (recursive)
97
103
  def encode
98
104
  transform_underscores
99
- [@operator.to_s, *@values.map { |v| v.is_a?(Condition) ? v.encode : v } ]
105
+ values = @values.map { |v| v.is_a?(Condition) ? v.encode : v }
106
+ @operator.nil? ? values[0] : [@operator.to_s, *values]
100
107
  end
101
108
  def to_json(opts)
102
109
  encode.to_json(opts)
@@ -1,4 +1,8 @@
1
1
  require 'chroma'
2
+ require 'hsluv'
3
+
4
+ # Colour methods on Integer
5
+
2
6
  class Integer
3
7
  def chroma_hex(op,p)
4
8
  ("#"+to_s(16).rjust(6,'0')).paint.send(op,p).to_hex
@@ -6,4 +10,18 @@ class Integer
6
10
  def chroma(op,p)
7
11
  chroma_hex(op,p).gsub('#','0x').to_i(16)
8
12
  end
13
+ def to_hex_color
14
+ '#' + to_s(16).rjust(6,'0')
15
+ end
16
+ end
17
+
18
+ # Top-level colour generators
19
+
20
+ def hsluv(h,s,l)
21
+ arr = Hsluv.rgb_prepare(Hsluv.hsluv_to_rgb(h,s*100,l*100))
22
+ (arr[0]*256 + arr[1])*256 + arr[2]
23
+ end
24
+ def hsl(h,s,l)
25
+ rgb = Chroma::RgbGenerator::FromHslValues.new('hex6',h,s,l).generate[0]
26
+ ((rgb.r).to_i*256 + (rgb.g).to_i)*256 + rgb.b.to_i
9
27
  end
data/lib/glug/layer.rb CHANGED
@@ -68,7 +68,7 @@ module Glug # :nodoc:
68
68
  @uncascaded = nil # condition to add to non-cascaded layers
69
69
 
70
70
  @kv[:source] ||= stylesheet.sources.find {|k,v| v[:default] }[0]
71
- @kv[:source_layer] ||= args[:id]
71
+ @kv[:source_layer] ||= args[:id] if stylesheet.sources[@kv[:source]][:type]=="vector"
72
72
  @child_num = 0 # incremented sublayer suffix
73
73
  end
74
74
 
@@ -76,8 +76,10 @@ module Glug # :nodoc:
76
76
  # If we can match it to a GL property, it's an assignment:
77
77
  # otherwise it's an OSM key
78
78
  def method_missing(method_sym, *arguments)
79
- if EXPRESSIONS.include?(method_sym)
80
- return Condition.new.from_list(method_sym, arguments)
79
+ if @stylesheet.extensions.include?(method_sym)
80
+ self.instance_exec(*arguments, &@stylesheet.extensions[method_sym])
81
+ elsif EXPRESSIONS.include?(method_sym)
82
+ Condition.new.from_list(method_sym, arguments)
81
83
  elsif LAYOUT.include?(method_sym) || PAINT.include?(method_sym) || TOP_LEVEL.include?(method_sym)
82
84
  v = arguments.length==1 ? arguments[0] : arguments
83
85
  if v.is_a?(Proc) then v=v.call(@kv[method_sym]) end
@@ -87,7 +89,7 @@ module Glug # :nodoc:
87
89
  _add_cascade_condition(method_sym, v)
88
90
  end
89
91
  else
90
- return Condition.new.from_list("get", [method_sym])
92
+ Condition.new.from_list("get", [method_sym])
91
93
  end
92
94
  end
93
95
 
@@ -4,21 +4,29 @@ module Glug # :nodoc:
4
4
  # the main document object
5
5
 
6
6
  class Stylesheet
7
- attr_accessor :sources, :kv, :refs
7
+ attr_accessor :sources, :kv, :refs, :base_dir, :params, :extensions
8
8
 
9
- def initialize(&block)
9
+ def initialize(base_dir: nil, params: nil, &block)
10
10
  @sources = {}
11
11
  @kv = {}
12
12
  @layers = []
13
13
  @refs = {}
14
+ @extensions = {}
15
+ @base_dir = base_dir || ''
16
+ @params = params || {}
14
17
  instance_eval(&block)
15
18
  end
16
19
 
17
20
  # Set a property, e.g. 'bearing 29'
18
21
  def method_missing(method_sym, *arguments)
19
- @kv[method_sym] = arguments[0]
22
+ arg = arguments[0]
23
+ if arg.is_a?(Proc)
24
+ @extensions[method_sym] = arg
25
+ else
26
+ @kv[method_sym] = arguments[0]
27
+ end
20
28
  end
21
-
29
+
22
30
  # Add a source
23
31
  def source(source_name, opts={})
24
32
  @sources[source_name] = opts
@@ -46,5 +54,10 @@ module Glug # :nodoc:
46
54
  def _add_layer(layer)
47
55
  @layers << layer
48
56
  end
57
+
58
+ # Load file
59
+ def include_file(fn)
60
+ instance_eval(File.read(File.join(@base_dir, fn)))
61
+ end
49
62
  end
50
63
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glug
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Fairhurst
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-16 00:00:00.000000000 Z
11
+ date: 2025-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: neatjson
@@ -38,7 +38,21 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- description: Text-based markup for Mapbox GL styles
41
+ - !ruby/object:Gem::Dependency
42
+ name: hsluv
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Text-based markup for Mapbox/Maplibre GL styles
42
56
  email: richard@systemeD.net
43
57
  executables:
44
58
  - glug