nwn-lib 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -109,3 +109,10 @@ Stuart Coyle <stuart.coyle@gmail.com> (1):
109
109
  ==== 0.4.0
110
110
  Bernhard Stoeckner <elven@swordcoast.net>:
111
111
  too many to sanely list, see README for migration information
112
+
113
+ ==== 0.4.1
114
+ Bernhard Stoeckner <elven@swordcoast.net> (3):
115
+ Field#field_value=: unbreak setting a new value
116
+ Scripting: add rudimentary ask method
117
+ scripts/clean_locstrs.rb: optimise a bit
118
+ 0.4.1-rel
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ include FileUtils
9
9
  # Configuration
10
10
  ##############################################################################
11
11
  NAME = "nwn-lib"
12
- VERS = "0.4.0"
12
+ VERS = "0.4.1"
13
13
  CLEAN.include ["**/.*.sw?", "pkg", ".config", "rdoc", "coverage"]
14
14
  RDOC_OPTS = ["--quiet", "--line-numbers", "--inline-source", '--title', \
15
15
  'nwn-lib: a ruby library for accessing NWN resource files', \
data/lib/nwn/gff/field.rb CHANGED
@@ -32,7 +32,7 @@ module NWN::Gff::Field
32
32
  alias :v :field_value
33
33
 
34
34
  def field_value= v
35
- Field.valid_for?(v, field_type) or raise ArgumentError,
35
+ NWN::Gff::Field.valid_for?(v, field_type) or raise ArgumentError,
36
36
  "Given field_value is not valid for type #{field_type.inspect}."
37
37
 
38
38
  self['value'] = v
data/lib/nwn/scripting.rb CHANGED
@@ -126,4 +126,47 @@ module NWN::Gff::Scripting
126
126
  end
127
127
  end
128
128
 
129
+
130
+ # Ask the user for something.
131
+ # +question+ the Question to ask
132
+ # +match+ a selection of answers to choose from (eg, a hash, the user would choose the key)
133
+ def ask question, match = nil
134
+ object = case match
135
+ when Array
136
+ i = 0 ; Hash[match.map {|x| [i+=1, x]}]
137
+
138
+ when Hash, Regexp, Fixnum, Float
139
+ match
140
+
141
+ else
142
+ raise NWN::Gff::GffError, "Do not know how to " +
143
+ "validate against #{match.class}"
144
+ end
145
+
146
+ ret = nil
147
+ while true
148
+ y object
149
+ $stderr.print File.basename($base_script) + ": " + question + " "
150
+ ret = $stdin.gets
151
+ ret = ret.rstrip
152
+
153
+ break if object.nil? || case object
154
+ when Hash
155
+ object.keys.index(ret) || (ret != "" && object.keys.index(ret.to_i))
156
+ when Regexp
157
+ ret =~ match
158
+ when Fixnum
159
+ ret =~ /^\d+$/
160
+ when Float
161
+ ret =~ /^\d+(.\d+)?$/
162
+ end
163
+ end
164
+
165
+ case match
166
+ when Float; ret.to_f
167
+ when Fixnum; ret.to_i
168
+ else; ret
169
+ end
170
+ end
171
+
129
172
  end
@@ -13,7 +13,26 @@ self.each_by_flat_path do |label, field|
13
13
  next unless field.is_a?(Gff::Cexolocstr)
14
14
  next if field.v.size == 0
15
15
 
16
- compactable = field.v.values.reject {|x| x == ""}.uniq.size < 2
16
+ val = field.v.dup
17
+
18
+ val.clear if field.has_str_ref?
19
+
20
+ # strip empty strings
21
+ val.reject! {|k,v|
22
+ v.strip == ""
23
+ }
24
+
25
+ rej_lid = ENV['NWN_LIB_CLEAN_LOCSTR_REJECT_LANGUAGES']
26
+ val.reject! {|k,v|
27
+ rej_lid.index(k.to_s)
28
+ } if rej_lid && rej_lid = rej_lid.split(/\s+/)
29
+
30
+ # Remove all duplicate values.
31
+ val.each {|k,v|
32
+ val.select {|kk,vv| vv == v}[0..-2].each {|kk,vv| val.delete(kk) }
33
+ }
34
+
35
+ compactable = val.size < 2
17
36
 
18
37
  unless will_output?
19
38
  unless compactable
@@ -27,16 +46,14 @@ self.each_by_flat_path do |label, field|
27
46
  str = nil
28
47
  unless compactable
29
48
  log "Cannot compact #{label}, because the contained strings are not unique."
30
- selection = ask "Use what string?", field.v
49
+ selection = ask "Use what string?", val
31
50
  log "Using: #{selection.inspect}"
32
- str = field.v[selection.to_i]
51
+ str = val[selection.to_i]
33
52
  else
34
- str = field.v[field.v.keys.sort[0]]
53
+ str = val[val.keys.sort[0]]
35
54
  end
36
55
  field.v.clear
37
- field.v[0] = str
38
-
39
- field.str_ref = Gff::Field::DEFAULT_STR_REF
56
+ field.v[0] = str if str
40
57
 
41
58
  count += 1
42
59
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nwn-lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernhard Stoeckner
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-03 00:00:00 +01:00
12
+ date: 2009-02-04 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15