nwn-lib 0.4.0 → 0.4.1

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.
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