flame_channel_parser 4.1.1 → 4.2.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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +23 -0
- data/History.txt +13 -0
- data/flame_channel_parser.gemspec +5 -5
- data/lib/builder.rb +4 -2
- data/lib/channel.rb +1 -0
- data/lib/extractor.rb +4 -4
- data/lib/flame_channel_parser/version.rb +2 -1
- data/lib/flame_channel_parser.rb +3 -7
- data/lib/framecurve_writers/base.rb +7 -4
- data/lib/framecurve_writers/batch_timewarp.rb +6 -4
- data/lib/framecurve_writers/kronos.rb +4 -2
- data/lib/framecurve_writers/softfx_timewarp.rb +3 -1
- data/lib/inspector.rb +1 -0
- data/lib/interpolator.rb +2 -0
- data/lib/key.rb +1 -0
- data/lib/parser.rb +2 -0
- data/lib/segments.rb +3 -1
- data/lib/timewarp_extractor.rb +2 -0
- data/lib/xml_parser.rb +3 -6
- data/test/test_batch_timewarp_writer.rb +0 -2
- data/test/test_flame_builder.rb +1 -1
- data/test/test_flame_channel_parser.rb +1 -1
- data/test/test_inspector.rb +2 -2
- data/test/test_ractor.rb +30 -0
- metadata +42 -11
- data/.autotest +0 -23
- data/.travis.yml +0 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5310312580c16476d46b962fedb4517abefcffa77462be460e8a5368b277941a
|
|
4
|
+
data.tar.gz: 25b0cb4de7e741fb58589ef030e38c7cea6bb811784b33993b8a9e82604acbc2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 00acdb63e9791ef57d05023fb1235dcaabe7c6fdf15f0e1f82182e03cbdbf9579fe24a1c3e08a57480abcf20fba600399b3c206262591f3381c738534bb4520a
|
|
7
|
+
data.tar.gz: e9908c6a1cb2d07e40ee9a1539bc9463d03ee0870f2ebe66330bf075adc0a63de5099e9891b2fd20bd949492464fe033b392d4c0817de7d49ac73e6437307d28
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
- push
|
|
5
|
+
- pull_request
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test:
|
|
9
|
+
name: Ruby ${{ matrix.ruby }}
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
strategy:
|
|
12
|
+
fail-fast: false
|
|
13
|
+
matrix:
|
|
14
|
+
ruby:
|
|
15
|
+
- '2.6'
|
|
16
|
+
- '4.0'
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
- uses: ruby/setup-ruby@v1
|
|
20
|
+
with:
|
|
21
|
+
ruby-version: ${{ matrix.ruby }}
|
|
22
|
+
bundler-cache: true
|
|
23
|
+
- run: bundle exec rake test
|
data/History.txt
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
=== 4.2.1 / 2026-10-02
|
|
2
|
+
|
|
3
|
+
* Work with frozen string literals, add frozen_string_literal magic comments to all library files
|
|
4
|
+
* Fix the Regexp flags in the Batch timewarp writer (an Array of flags was taken as "ignore case")
|
|
5
|
+
|
|
6
|
+
=== 4.2.0 / 2026-10-02
|
|
7
|
+
|
|
8
|
+
* Make parsing, interpolation and Builder usable from within Ractors (Ruby 4.0+)
|
|
9
|
+
* Fix `FlameChannelParser.parse`, `XMLParser#parse` and the framecurve writers on Ruby 3+
|
|
10
|
+
(`Proc.new` without a block)
|
|
11
|
+
* Declare the dependencies on `matrix` and `rexml`, which are no longer default gems
|
|
12
|
+
* Require framecurve 2.2.4+
|
|
13
|
+
|
|
1
14
|
=== 4.1.0 / 2014-10-20
|
|
2
15
|
|
|
3
16
|
* Adds `flame_channel_inspect` for examining Flame setups
|
|
@@ -4,12 +4,12 @@ Gem::Specification.new do |s|
|
|
|
4
4
|
s.name = "flame_channel_parser"
|
|
5
5
|
s.version = FlameChannelParser::VERSION
|
|
6
6
|
|
|
7
|
-
s.
|
|
7
|
+
s.required_ruby_version = ">= 2.6"
|
|
8
8
|
s.authors = ["Julik Tarkhanov"]
|
|
9
9
|
s.date = Time.now.utc.strftime("%Y-%m-%d")
|
|
10
10
|
s.description = "Reads and interpolates animation channels in IFFS setups"
|
|
11
11
|
s.email = "me@julik.nl"
|
|
12
|
-
s.executables = ["
|
|
12
|
+
s.executables = Dir["bin/*"].map { |f| File.basename(f) }
|
|
13
13
|
s.extra_rdoc_files = [
|
|
14
14
|
"README.md"
|
|
15
15
|
]
|
|
@@ -17,12 +17,12 @@ Gem::Specification.new do |s|
|
|
|
17
17
|
s.homepage = "http://guerilla-di.org/flame-channel-parser/"
|
|
18
18
|
s.licenses = ["MIT"]
|
|
19
19
|
s.require_paths = ["lib"]
|
|
20
|
-
s.rubygems_version = "1.8.11"
|
|
21
20
|
s.summary = "A parser/interpolator for Flame/Smoke animation curves"
|
|
22
21
|
|
|
23
|
-
s.specification_version = 3
|
|
24
22
|
s.add_runtime_dependency("update_hints", ["~> 1.0"])
|
|
25
|
-
s.add_runtime_dependency("framecurve", ["~> 2"])
|
|
23
|
+
s.add_runtime_dependency("framecurve", ["~> 2", ">= 2.2.4"])
|
|
24
|
+
s.add_runtime_dependency("matrix")
|
|
25
|
+
s.add_runtime_dependency("rexml")
|
|
26
26
|
s.add_development_dependency("rake", [">= 0"])
|
|
27
27
|
s.add_development_dependency("cli_test", ["~> 1.0"])
|
|
28
28
|
s.add_development_dependency("test-unit")
|
data/lib/builder.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# shareable_constant_value: literal
|
|
1
3
|
# A Builder-like class for exporting Flame setups
|
|
2
4
|
class FlameChannelParser::Builder #< BasicObject
|
|
3
5
|
INDENT = "\t"
|
|
@@ -67,8 +69,8 @@ class FlameChannelParser::Builder #< BasicObject
|
|
|
67
69
|
end
|
|
68
70
|
|
|
69
71
|
def __camelize(s)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
+
@camelizations ||= {}
|
|
73
|
+
@camelizations[s] ||= s.to_s.gsub(/(^|_)(.)/) { $2.upcase }
|
|
72
74
|
end
|
|
73
75
|
|
|
74
76
|
def __flameize(v)
|
data/lib/channel.rb
CHANGED
data/lib/extractor.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# shareable_constant_value: literal
|
|
1
3
|
# Extracts and bakes a specific animation channel to a given buffer, one string per frame
|
|
2
4
|
class FlameChannelParser::Extractor
|
|
3
5
|
|
|
@@ -27,7 +29,7 @@ class FlameChannelParser::Extractor
|
|
|
27
29
|
end
|
|
28
30
|
|
|
29
31
|
def extract(path, options)
|
|
30
|
-
options = DEFAULTS.
|
|
32
|
+
options = DEFAULTS.merge(:destination => $stdout).merge(options)
|
|
31
33
|
File.open(path) do |f|
|
|
32
34
|
|
|
33
35
|
# Then parse
|
|
@@ -47,7 +49,6 @@ class FlameChannelParser::Extractor
|
|
|
47
49
|
|
|
48
50
|
DEFAULT_START_FRAME = 1
|
|
49
51
|
DEFAULTS = {
|
|
50
|
-
:destination => $stdout,
|
|
51
52
|
:start_frame => nil,
|
|
52
53
|
:end_frame => nil,
|
|
53
54
|
:channel => DEFAULT_CHANNEL_TO_EXTRACT,
|
|
@@ -105,8 +106,7 @@ class FlameChannelParser::Extractor
|
|
|
105
106
|
end
|
|
106
107
|
|
|
107
108
|
def compose_channel_not_found_message(for_channel, other_channels)
|
|
108
|
-
message = "Channel #{for_channel.inspect} not found in this setup (set the channel with the :channel option). Found other channels though
|
|
109
|
-
message << "\n"
|
|
109
|
+
message = "Channel #{for_channel.inspect} not found in this setup (set the channel with the :channel option). Found other channels though:\n"
|
|
110
110
|
message += other_channels.map{|c| "\t%s\n" % c.path }.join
|
|
111
111
|
end
|
|
112
112
|
|
data/lib/flame_channel_parser.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require File.dirname(__FILE__) + '/flame_channel_parser/version'
|
|
2
3
|
|
|
3
4
|
module FlameChannelParser
|
|
@@ -7,13 +8,8 @@ module FlameChannelParser
|
|
|
7
8
|
# Parse a Flame setup into an array of Channel objects.
|
|
8
9
|
# If a block is given to the method it will yield Channel
|
|
9
10
|
# objects one by one instead of accumulating them into an array (useful for big setups)
|
|
10
|
-
def self.parse(io)
|
|
11
|
-
|
|
12
|
-
if block_given?
|
|
13
|
-
c.new.parse(io, &Proc.new)
|
|
14
|
-
else
|
|
15
|
-
c.new.parse(io)
|
|
16
|
-
end
|
|
11
|
+
def self.parse(io, &blk)
|
|
12
|
+
get_parser_class(io).new.parse(io, &blk)
|
|
17
13
|
end
|
|
18
14
|
|
|
19
15
|
# Parse a Flame setup at passed path. Will return the channels instead of yielding them
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# Writes out a framecurve setup
|
|
2
3
|
class FlameChannelParser::FramecurveWriters::Base
|
|
3
4
|
class KeyWriter
|
|
@@ -12,14 +13,16 @@ class FlameChannelParser::FramecurveWriters::Base
|
|
|
12
13
|
|
|
13
14
|
end
|
|
14
15
|
|
|
16
|
+
# Kept as a frozen array in a class-level ivar so that it can be read from non-main Ractors
|
|
15
17
|
def self.inherited(by)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
writers = FlameChannelParser::FramecurveWriters::Base.instance_variable_get(:@writers) || []
|
|
19
|
+
FlameChannelParser::FramecurveWriters::Base.instance_variable_set(:@writers, (writers + [by]).freeze)
|
|
20
|
+
super
|
|
18
21
|
end
|
|
19
22
|
|
|
20
23
|
# Yields each defined writer class to the block
|
|
21
|
-
def self.with_each_writer
|
|
22
|
-
|
|
24
|
+
def self.with_each_writer(&blk)
|
|
25
|
+
FlameChannelParser::FramecurveWriters::Base.instance_variable_get(:@writers).each(&blk)
|
|
23
26
|
end
|
|
24
27
|
|
|
25
28
|
# Should return the desired extension for the exported file
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# shareable_constant_value: literal
|
|
1
3
|
# Writes out a Batch timewarp node setup
|
|
2
4
|
class FlameChannelParser::FramecurveWriters::BatchTimewarp < FlameChannelParser::FramecurveWriters::SoftfxTimewarp
|
|
3
5
|
|
|
4
|
-
TEMPLATE = File.dirname(__FILE__) + "/templates/BatchTW.xml"
|
|
5
|
-
TEMPLATE_KEY = File.dirname(__FILE__) + "/templates/key.xml"
|
|
6
|
+
TEMPLATE = (File.dirname(__FILE__) + "/templates/BatchTW.xml").freeze
|
|
7
|
+
TEMPLATE_KEY = (File.dirname(__FILE__) + "/templates/key.xml").freeze
|
|
6
8
|
|
|
7
9
|
def self.extension
|
|
8
10
|
'.timewarp_node'
|
|
@@ -13,7 +15,7 @@ class FlameChannelParser::FramecurveWriters::BatchTimewarp < FlameChannelParser:
|
|
|
13
15
|
yield(w)
|
|
14
16
|
keys = w.keys
|
|
15
17
|
|
|
16
|
-
keys_data = ''
|
|
18
|
+
keys_data = +''
|
|
17
19
|
keys.each_with_index do | k, idx |
|
|
18
20
|
keys_data << templatize(TEMPLATE_KEY, :frame => k[0].to_i, :value => k[1].to_f, :idx => idx)
|
|
19
21
|
end
|
|
@@ -31,7 +33,7 @@ class FlameChannelParser::FramecurveWriters::BatchTimewarp < FlameChannelParser:
|
|
|
31
33
|
t = File.read(file)
|
|
32
34
|
hash.each_pair do | pattern, value |
|
|
33
35
|
p = Regexp.escape('$%s' % pattern)
|
|
34
|
-
handle = Regexp.new(p,
|
|
36
|
+
handle = Regexp.new(p, Regexp::MULTILINE | Regexp::EXTENDED)
|
|
35
37
|
t.gsub!(handle, value.to_s)
|
|
36
38
|
end
|
|
37
39
|
raise "Not all substitutions done" if t.include?('$')
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# shareable_constant_value: literal
|
|
1
3
|
# Writes out a framecurve setup
|
|
2
4
|
class FlameChannelParser::FramecurveWriters::Kronos < FlameChannelParser::FramecurveWriters::SoftfxTimewarp
|
|
3
|
-
TOKEN = Regexp.new('__INSERT_FRAME_ANIM__')
|
|
4
|
-
TEMPLATE = File.dirname(__FILE__) + "/templates/SampleKronos.F_Kronos"
|
|
5
|
+
TOKEN = Regexp.new('__INSERT_FRAME_ANIM__').freeze
|
|
6
|
+
TEMPLATE = (File.dirname(__FILE__) + "/templates/SampleKronos.F_Kronos").freeze
|
|
5
7
|
|
|
6
8
|
def self.extension
|
|
7
9
|
'.F_Kronos'
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# shareable_constant_value: literal
|
|
1
3
|
# Writes out a framecurve setup
|
|
2
4
|
class FlameChannelParser::FramecurveWriters::SoftfxTimewarp < FlameChannelParser::FramecurveWriters::Base
|
|
3
5
|
DATETIME_FORMAT = '%a %b %d %H:%M:%S %Y'
|
|
4
|
-
TIME = Time.local(2011,12,28,14,50,05)
|
|
6
|
+
TIME = Time.local(2011,12,28,14,50,05).freeze
|
|
5
7
|
|
|
6
8
|
def self.extension
|
|
7
9
|
'.timewarp'
|
data/lib/inspector.rb
CHANGED
data/lib/interpolator.rb
CHANGED
data/lib/key.rb
CHANGED
data/lib/parser.rb
CHANGED
data/lib/segments.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# shareable_constant_value: literal
|
|
1
3
|
require "matrix"
|
|
2
4
|
|
|
3
5
|
module FlameChannelParser::Segments #:nodoc:
|
|
@@ -52,7 +54,7 @@ module FlameChannelParser::Segments #:nodoc:
|
|
|
52
54
|
[-2, 3, 0, 0],
|
|
53
55
|
[1, -2, 1, 0],
|
|
54
56
|
[1, -1, 0, 0]
|
|
55
|
-
].transpose
|
|
57
|
+
].transpose.freeze
|
|
56
58
|
|
|
57
59
|
def initialize(from_frame, to_frame, value1, value2, tangent1, tangent2)
|
|
58
60
|
|
data/lib/timewarp_extractor.rb
CHANGED
data/lib/xml_parser.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'rexml/document'
|
|
2
3
|
require "rexml/streamlistener"
|
|
3
4
|
|
|
@@ -73,17 +74,13 @@ class FlameChannelParser::XMLParser < FlameChannelParser::Parser
|
|
|
73
74
|
|
|
74
75
|
# Parses the setup passed in the IO. If a block is given to the method it will yield Channel
|
|
75
76
|
# objects one by one instead of accumulating them into an array (useful for big setups)
|
|
76
|
-
def parse(io)
|
|
77
|
+
def parse(io, &blk)
|
|
77
78
|
# Ok this is gothic BUT needed. What we do is we transform the XML setup into the OLD
|
|
78
79
|
# setup format, after which we run it through the OLD parser all the same.
|
|
79
80
|
# I am almost sure that ADSK does the same.
|
|
80
81
|
t = Tempfile.new("bx")
|
|
81
82
|
REXML::Document.parse_stream(io, XMLToSetup.new(t))
|
|
82
83
|
t.rewind
|
|
83
|
-
|
|
84
|
-
super(t, &Proc.new)
|
|
85
|
-
else
|
|
86
|
-
super(t)
|
|
87
|
-
end
|
|
84
|
+
super(t, &blk)
|
|
88
85
|
end
|
|
89
86
|
end
|
|
@@ -10,8 +10,6 @@ class TestBatchTimewarpWriter < Test::Unit::TestCase
|
|
|
10
10
|
key_writer.key(19, 102)
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
File.open(File.dirname(__FILE__) + "/timewarp_export_samples/BatchTW.timewarp_node", "wb"){|f| f.write(buf.string) }
|
|
14
|
-
|
|
15
13
|
assert_same_buffer File.open(File.dirname(__FILE__) + "/timewarp_export_samples/BatchTW.timewarp_node"), buf
|
|
16
14
|
end
|
|
17
15
|
|
data/test/test_flame_builder.rb
CHANGED
|
@@ -29,7 +29,7 @@ class TestFlameChannelParser < Test::Unit::TestCase
|
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def test_parsing_kronos_with_reports
|
|
32
|
-
logging_console = ""
|
|
32
|
+
logging_console = +""
|
|
33
33
|
data = File.open(File.dirname(__FILE__) + "/snaps/TW_TEST.F_Kronos")
|
|
34
34
|
parser = FlameChannelParser::Parser.new
|
|
35
35
|
parser.logger_proc = lambda do | log_message |
|
data/test/test_inspector.rb
CHANGED
|
@@ -12,7 +12,7 @@ class TestInspector < Test::Unit::TestCase
|
|
|
12
12
|
channels = FlameChannelParser.parse(data)
|
|
13
13
|
|
|
14
14
|
inspector = FlameChannelParser::Inspector.new(channels)
|
|
15
|
-
output = ''
|
|
15
|
+
output = +''
|
|
16
16
|
|
|
17
17
|
inspector.pretty_print(StringIO.new(output))
|
|
18
18
|
|
|
@@ -27,7 +27,7 @@ class TestInspector < Test::Unit::TestCase
|
|
|
27
27
|
channels = FlameChannelParser.parse(data)
|
|
28
28
|
|
|
29
29
|
inspector = FlameChannelParser::Inspector.new(channels)
|
|
30
|
-
output = ''
|
|
30
|
+
output = +''
|
|
31
31
|
|
|
32
32
|
inspector.pretty_print(StringIO.new(output))
|
|
33
33
|
|
data/test/test_ractor.rb
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require "helper"
|
|
2
|
+
|
|
3
|
+
class TestRactor < Test::Unit::TestCase
|
|
4
|
+
def test_parses_interpolates_and_builds_inside_a_ractor
|
|
5
|
+
omit "Needs Ruby 4.0+ Ractors" unless defined?(Ractor) && Ractor.method_defined?(:value)
|
|
6
|
+
|
|
7
|
+
path = File.dirname(__FILE__) + "/snaps/FLEM_curves_example.action"
|
|
8
|
+
expected = run_conversion(path)
|
|
9
|
+
|
|
10
|
+
experimental_warnings, Warning[:experimental] = Warning[:experimental], false
|
|
11
|
+
begin
|
|
12
|
+
from_ractor = Ractor.new(path) { |p| TestRactor.new("ractor").run_conversion(p) }.value
|
|
13
|
+
assert_equal expected, from_ractor
|
|
14
|
+
ensure
|
|
15
|
+
Warning[:experimental] = experimental_warnings
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def run_conversion(path)
|
|
20
|
+
channels = File.open(path, "rb") { |f| FlameChannelParser.parse(f) }
|
|
21
|
+
values = channels.reject(&:empty?).map do |channel|
|
|
22
|
+
interpolator = FlameChannelParser::Interpolator.new(channel)
|
|
23
|
+
(1..20).map { |frame| interpolator.sample_at(frame) }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
out = StringIO.new
|
|
27
|
+
FlameChannelParser::Builder.new(out).write_block!("Channel", "foo") { |b| b.some_value 1.0 }
|
|
28
|
+
[values, out.string]
|
|
29
|
+
end
|
|
30
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: flame_channel_parser
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.
|
|
4
|
+
version: 4.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Julik Tarkhanov
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 2026-10-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: update_hints
|
|
@@ -31,6 +30,9 @@ dependencies:
|
|
|
31
30
|
- - "~>"
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
32
|
version: '2'
|
|
33
|
+
- - ">="
|
|
34
|
+
- !ruby/object:Gem::Version
|
|
35
|
+
version: 2.2.4
|
|
34
36
|
type: :runtime
|
|
35
37
|
prerelease: false
|
|
36
38
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -38,6 +40,37 @@ dependencies:
|
|
|
38
40
|
- - "~>"
|
|
39
41
|
- !ruby/object:Gem::Version
|
|
40
42
|
version: '2'
|
|
43
|
+
- - ">="
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: 2.2.4
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: matrix
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
requirements:
|
|
50
|
+
- - ">="
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '0'
|
|
53
|
+
type: :runtime
|
|
54
|
+
prerelease: false
|
|
55
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
56
|
+
requirements:
|
|
57
|
+
- - ">="
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
version: '0'
|
|
60
|
+
- !ruby/object:Gem::Dependency
|
|
61
|
+
name: rexml
|
|
62
|
+
requirement: !ruby/object:Gem::Requirement
|
|
63
|
+
requirements:
|
|
64
|
+
- - ">="
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: '0'
|
|
67
|
+
type: :runtime
|
|
68
|
+
prerelease: false
|
|
69
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
70
|
+
requirements:
|
|
71
|
+
- - ">="
|
|
72
|
+
- !ruby/object:Gem::Version
|
|
73
|
+
version: '0'
|
|
41
74
|
- !ruby/object:Gem::Dependency
|
|
42
75
|
name: rake
|
|
43
76
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -84,15 +117,15 @@ description: Reads and interpolates animation channels in IFFS setups
|
|
|
84
117
|
email: me@julik.nl
|
|
85
118
|
executables:
|
|
86
119
|
- bake_flame_channel
|
|
120
|
+
- flame_channel_inspect
|
|
87
121
|
- framecurve_from_flame
|
|
88
122
|
- framecurve_to_flame
|
|
89
123
|
extensions: []
|
|
90
124
|
extra_rdoc_files:
|
|
91
125
|
- README.md
|
|
92
126
|
files:
|
|
93
|
-
- ".
|
|
127
|
+
- ".github/workflows/ci.yml"
|
|
94
128
|
- ".gitignore"
|
|
95
|
-
- ".travis.yml"
|
|
96
129
|
- Gemfile
|
|
97
130
|
- History.txt
|
|
98
131
|
- README.md
|
|
@@ -163,6 +196,7 @@ files:
|
|
|
163
196
|
- test/test_interpolator.rb
|
|
164
197
|
- test/test_key.rb
|
|
165
198
|
- test/test_kronos_timewarp_writer.rb
|
|
199
|
+
- test/test_ractor.rb
|
|
166
200
|
- test/test_segments.rb
|
|
167
201
|
- test/test_softfx_timewarp_writer.rb
|
|
168
202
|
- test/test_timewarp_extractor.rb
|
|
@@ -182,7 +216,6 @@ homepage: http://guerilla-di.org/flame-channel-parser/
|
|
|
182
216
|
licenses:
|
|
183
217
|
- MIT
|
|
184
218
|
metadata: {}
|
|
185
|
-
post_install_message:
|
|
186
219
|
rdoc_options: []
|
|
187
220
|
require_paths:
|
|
188
221
|
- lib
|
|
@@ -190,16 +223,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
190
223
|
requirements:
|
|
191
224
|
- - ">="
|
|
192
225
|
- !ruby/object:Gem::Version
|
|
193
|
-
version: '
|
|
226
|
+
version: '2.6'
|
|
194
227
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
228
|
requirements:
|
|
196
229
|
- - ">="
|
|
197
230
|
- !ruby/object:Gem::Version
|
|
198
231
|
version: '0'
|
|
199
232
|
requirements: []
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
signing_key:
|
|
203
|
-
specification_version: 3
|
|
233
|
+
rubygems_version: 4.0.3
|
|
234
|
+
specification_version: 4
|
|
204
235
|
summary: A parser/interpolator for Flame/Smoke animation curves
|
|
205
236
|
test_files: []
|
data/.autotest
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# -*- ruby -*-
|
|
2
|
-
|
|
3
|
-
require 'autotest/restart'
|
|
4
|
-
|
|
5
|
-
# Autotest.add_hook :initialize do |at|
|
|
6
|
-
# at.extra_files << "../some/external/dependency.rb"
|
|
7
|
-
#
|
|
8
|
-
# at.libs << ":../some/external"
|
|
9
|
-
#
|
|
10
|
-
# at.add_exception 'vendor'
|
|
11
|
-
#
|
|
12
|
-
# at.add_mapping(/dependency.rb/) do |f, _|
|
|
13
|
-
# at.files_matching(/test_.*rb$/)
|
|
14
|
-
# end
|
|
15
|
-
#
|
|
16
|
-
# %w(TestA TestB).each do |klass|
|
|
17
|
-
# at.extra_class_map[klass] = "test/test_misc.rb"
|
|
18
|
-
# end
|
|
19
|
-
# end
|
|
20
|
-
|
|
21
|
-
# Autotest.add_hook :run_command do |at|
|
|
22
|
-
# system "rake build"
|
|
23
|
-
# end
|