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 +7 -0
- data/Rakefile +1 -1
- data/lib/nwn/gff/field.rb +1 -1
- data/lib/nwn/scripting.rb +43 -0
- data/scripts/clean_locstrs.rb +24 -7
- metadata +2 -2
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.
|
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
|
data/scripts/clean_locstrs.rb
CHANGED
@@ -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
|
-
|
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?",
|
49
|
+
selection = ask "Use what string?", val
|
31
50
|
log "Using: #{selection.inspect}"
|
32
|
-
str =
|
51
|
+
str = val[selection.to_i]
|
33
52
|
else
|
34
|
-
str =
|
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.
|
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-
|
12
|
+
date: 2009-02-04 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|