text2isometric 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +90 -0
- data/Rakefile +2 -0
- data/bin/text2isometric +11 -0
- data/intro.graffle +0 -0
- data/isometric-blue-grid.graffle +0 -0
- data/lib/text2isometric.rb +123 -0
- data/lib/text2isometric/version.rb +3 -0
- data/templates/isometric-text.scpt +22 -0
- data/templates/text.html.erb +85 -0
- data/text2isometric.gemspec +24 -0
- metadata +100 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3c7412697d8bb4207c10cf0dad0a46179fd11bc1
|
4
|
+
data.tar.gz: 11a2eaa69fd83387296f0c524ee922645ce63f66
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b9fa367270814fcc1cc5b26c607b81a1f66659510af4c4e20540a46e103bba3e90d7a888f7c19cc0cbcd50256864f7f0226215d161bf3c6cd12305487434df5a
|
7
|
+
data.tar.gz: d66bac473f14b510aec29d4f1e36fdac4a9d3a5212e82c5dca219696bf4766671a47b96ee6e59c02829eb299ccf3881552902806a72d08bb71e0f93f3b1b1213
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2016 Pim Snel
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
# text2isometric
|
2
|
+
|
3
|
+
Experimental gem and applescript for OmniGraffle to generate isometric
|
4
|
+
texts. Motivation was the realization that OmniGraffle is not able to
|
5
|
+
create 3d texts compatible with the nice AWS 3D stencils I wanted to
|
6
|
+
use.
|
7
|
+
|
8
|
+
![image](http://picdrop.t3lab.com/98meGnW0WM.png)
|
9
|
+
|
10
|
+
It's a rather complex stack of technologies:
|
11
|
+
|
12
|
+
- 1 AppleScipt runs from OmniGraffle and will ask parameters
|
13
|
+
- 2 it than executes a ruby script that generates a html5 document with
|
14
|
+
the 3d texts in the right direction.
|
15
|
+
- 3 than it run webkit2png and imagemagick to export the result
|
16
|
+
- 4 the image is placed in OmniGraffle
|
17
|
+
|
18
|
+
Like I said is experimental. If you can make it better please help...
|
19
|
+
|
20
|
+
## Compatible Stencils
|
21
|
+
|
22
|
+
- Included is a blue isometric grid
|
23
|
+
- [AWS 3D](https://stenciltown.omnigroup.com/#stencil=aws-3d)
|
24
|
+
- [Three Dimensional](https://stenciltown.omnigroup.com/#stencil=three-dimensional)
|
25
|
+
- [Isometric](https://www.graffletopia.com/stencils/533)
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
## Installation
|
30
|
+
|
31
|
+
### install gem
|
32
|
+
|
33
|
+
```
|
34
|
+
$ gem install text2isometric
|
35
|
+
```
|
36
|
+
|
37
|
+
|
38
|
+
### install webkit2png & imagemagick
|
39
|
+
|
40
|
+
```
|
41
|
+
$ brew install webkit2png
|
42
|
+
$ brew install imagemagick
|
43
|
+
```
|
44
|
+
|
45
|
+
### install applescript
|
46
|
+
|
47
|
+
*Warning!!* In templates you will find an applescript called isometric-text.scpt.
|
48
|
+
You should tweak this to make it work on your computer.
|
49
|
+
|
50
|
+
```
|
51
|
+
$ text2isometric instgrafflescript
|
52
|
+
```
|
53
|
+
|
54
|
+
|
55
|
+
## Gem Usage
|
56
|
+
|
57
|
+
The text2isometric script has these options
|
58
|
+
|
59
|
+
```
|
60
|
+
$ text2isometric
|
61
|
+
|
62
|
+
Commands:
|
63
|
+
text2isometric cube # show cube with directions
|
64
|
+
text2isometric front TEXT # Generate text in front
|
65
|
+
text2isometric help [COMMAND] # Describe available commands or one specific command
|
66
|
+
text2isometric instgrafflescript # install omnigraffle applescript
|
67
|
+
text2isometric plane TEXT # Generate text in plane
|
68
|
+
text2isometric side TEXT # Generate text in side
|
69
|
+
text2isometric top TEXT # Generate text in top
|
70
|
+
text2isometric version # Display version
|
71
|
+
|
72
|
+
Options:
|
73
|
+
-c, [--color=COLOR] # text color css compatible, default black
|
74
|
+
-s, [--size=N] # text size in pixels, default 80
|
75
|
+
-f, [--font=FONT] # Font, default Arial
|
76
|
+
```
|
77
|
+
|
78
|
+
|
79
|
+
Maybe someday this will be more usable. Or the people at omnigroup will
|
80
|
+
add this functionality natively. I hope the last.
|
81
|
+
|
82
|
+
## Contributing
|
83
|
+
|
84
|
+
1. Fork it ( https://github.com/[my-github-username]/text2isometric/fork )
|
85
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
86
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
87
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
88
|
+
5. Create a new Pull Request
|
89
|
+
|
90
|
+
|
data/Rakefile
ADDED
data/bin/text2isometric
ADDED
data/intro.graffle
ADDED
Binary file
|
Binary file
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require "text2isometric/version"
|
2
|
+
require 'ostruct'
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
module Text2isometric
|
6
|
+
class Commands < Thor
|
7
|
+
class_option :color, :desc => 'text color css compatible, default black', :aliases => '-c', :type => :string
|
8
|
+
class_option :size, :desc => 'text size in pixels, default 80', :aliases => '-s', :type => :numeric
|
9
|
+
class_option :font, :desc => 'Font, default Arial', :aliases => '-f', :type => :string
|
10
|
+
|
11
|
+
def initialize(*args)
|
12
|
+
super
|
13
|
+
@output_dir = File.expand_path('~') + "/isometric"
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "version", "Display version"
|
17
|
+
def version
|
18
|
+
print Text2isometric::VERSION + "\n"
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "instgrafflescript", "install omnigraffle applescript"
|
22
|
+
def instgrafflescript
|
23
|
+
script_path = File.expand_path('../../templates/isometric-text.scpt',__FILE__)
|
24
|
+
dest_path = File.expand_path('~') + "/Library/Scripts/Applications/OmniGraffle/"
|
25
|
+
system "cp -v #{script_path} #{dest_path}"
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "side TEXT", "Generate text in side"
|
29
|
+
def side(text)
|
30
|
+
create_isometric(text, 'side')
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "plane TEXT", "Generate text in plane"
|
34
|
+
def plane(text)
|
35
|
+
create_isometric(text, 'plane')
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "front TEXT", "Generate text in front"
|
39
|
+
def front(text)
|
40
|
+
create_isometric(text, 'front')
|
41
|
+
end
|
42
|
+
|
43
|
+
desc "top TEXT", "Generate text in top"
|
44
|
+
def top(text)
|
45
|
+
create_isometric(text, 'top')
|
46
|
+
end
|
47
|
+
|
48
|
+
desc "cube", "show cube with directions"
|
49
|
+
def cube
|
50
|
+
cube = <<CUBE
|
51
|
+
.......
|
52
|
+
.... ....
|
53
|
+
.... ....
|
54
|
+
.... t ....
|
55
|
+
.... o ...
|
56
|
+
|... p ...|
|
57
|
+
| .... .... |
|
58
|
+
| .... .... |
|
59
|
+
| .... .... |
|
60
|
+
| f .... ... |
|
61
|
+
| r | |
|
62
|
+
| o | e |
|
63
|
+
| n | d |
|
64
|
+
| t | i |
|
65
|
+
| | s |
|
66
|
+
...... | .... e
|
67
|
+
..... | ..... n
|
68
|
+
..... | ..... a
|
69
|
+
....|.... l
|
70
|
+
. p
|
71
|
+
|
72
|
+
|
73
|
+
CUBE
|
74
|
+
print cube
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def create_isometric(text, axis)
|
80
|
+
system "rm -Rf #{@output_dir}"
|
81
|
+
system "mkdir -p #{@output_dir}"
|
82
|
+
|
83
|
+
r = {}
|
84
|
+
if options[:size]
|
85
|
+
r['size'] = options[:size]
|
86
|
+
else
|
87
|
+
r['size'] = '80'
|
88
|
+
end
|
89
|
+
|
90
|
+
unless options[:font].empty?
|
91
|
+
r['color'] = options[:color]
|
92
|
+
else
|
93
|
+
r['color'] = 'black'
|
94
|
+
end
|
95
|
+
|
96
|
+
unless options[:font].empty?
|
97
|
+
r['font'] = options[:font]
|
98
|
+
else
|
99
|
+
r['font'] = 'black'
|
100
|
+
end
|
101
|
+
|
102
|
+
r['text'] = text
|
103
|
+
r['transform_class'] = axis
|
104
|
+
|
105
|
+
erb_path = File.expand_path('../../templates/text.html.erb',__FILE__)
|
106
|
+
template = File.read(erb_path)
|
107
|
+
namespace = OpenStruct.new(
|
108
|
+
r:r
|
109
|
+
)
|
110
|
+
result = ERB.new(template).result(namespace.instance_eval { binding })
|
111
|
+
File.open("#{@output_dir}/text.html", 'w') { |file| file.write(result)}
|
112
|
+
|
113
|
+
#html -> png
|
114
|
+
system "/usr/local/bin/webkit2png -F --transparent -o #{@output_dir}/out #{@output_dir}/text.html"
|
115
|
+
system "/usr/local/bin/convert #{@output_dir}/out-full.png -define png:big-depth=16 -define png:color-type=6 -trim #{@output_dir}/trim.png"
|
116
|
+
system "mv #{@output_dir}/trim.png #{@output_dir}/isometric.png"
|
117
|
+
|
118
|
+
print "created:\n"
|
119
|
+
print "#{@output_dir}/isometric.png\n"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
set myAxis to choose from list {"side", "plane", "front", "top", "free"} with prompt "Please select which sound you like best" default items "side"
|
2
|
+
|
3
|
+
display dialog "Enter text" default answer myAxis
|
4
|
+
set myText to text returned of the result
|
5
|
+
|
6
|
+
display dialog "Enter text" default answer "--size 80 --color black --font 'Arial'"
|
7
|
+
set myOptions to text returned of the result
|
8
|
+
|
9
|
+
do shell script "/Users/pim/.rvm/bin/rvm default do text2isometric " & myAxis & " '" & myText & "' " & myOptions
|
10
|
+
|
11
|
+
tell application "Image Events"
|
12
|
+
set img to open "/Users/pim/test2isometric/isometric.png"
|
13
|
+
set my_dimensions to dimensions of img
|
14
|
+
set my_x to item 1 of my_dimensions as integer
|
15
|
+
set my_y to item 2 of my_dimensions as integer
|
16
|
+
end tell
|
17
|
+
|
18
|
+
tell application id "com.omnigroup.OmniGraffle6"
|
19
|
+
tell canvas of front window
|
20
|
+
make new shape at end of graphics with properties {fill:no fill, draws stroke:false, draws shadow:false, image scale:1, size:{my_x, my_y}, image:"/Users/pim/isometric/isometric.png"}
|
21
|
+
end tell
|
22
|
+
end tell
|
@@ -0,0 +1,85 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
<head>
|
6
|
+
|
7
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
8
|
+
|
9
|
+
<style type="text/css" media="screen">
|
10
|
+
|
11
|
+
body {
|
12
|
+
text-align: center;
|
13
|
+
font-family: sans-serif;
|
14
|
+
}
|
15
|
+
|
16
|
+
.cube {
|
17
|
+
position: absolute;
|
18
|
+
top: 90px;
|
19
|
+
left: 360px;
|
20
|
+
}
|
21
|
+
|
22
|
+
.face {
|
23
|
+
position: absolute;
|
24
|
+
/* border: 1px black solid;*/
|
25
|
+
xxxoverflow: hidden;
|
26
|
+
xxxfont-family: Arial;
|
27
|
+
xxxfont-size: 24px;
|
28
|
+
}
|
29
|
+
|
30
|
+
.plane {
|
31
|
+
top: 1000;
|
32
|
+
left: 8600px;
|
33
|
+
background: none;
|
34
|
+
color: #999;
|
35
|
+
/* -webkit-transform: matrix(0.8965754721680534, -0.5176380902050416, 0.8965754721680536, 0.5176380902050415, 0, 0);*/
|
36
|
+
-webkit-transform: rotate(-30deg) skewX(30deg) skewY(0deg) scaleY(0.87);
|
37
|
+
-ms-transform: rotate(-30deg) skewX(30deg) skewY(0deg) scaleY(0.87);
|
38
|
+
-moz-transform: rotate(-30deg) skewX(30deg) skewY(0deg) scaleY(0.87);
|
39
|
+
-o-transform: rotate(-30deg) skewX(30deg) skewY(0deg) scaleY(0.87);
|
40
|
+
transform: rotate(-30deg) skewX(30deg) skewY(0deg) scaleY(0.87);
|
41
|
+
}
|
42
|
+
|
43
|
+
.front {
|
44
|
+
top: 10650px;
|
45
|
+
left: 0;
|
46
|
+
background: none;
|
47
|
+
color: #333;
|
48
|
+
/* -webkit-transform: matrix(0.8965754721680536, 0.5176380902050415, 0, 1.035276180410083, 0, 0);*/
|
49
|
+
-webkit-transform: rotate(30deg) skewX(30deg) skewY(0deg);
|
50
|
+
-ms-transform: rotate(30deg) skewX(30deg) skewY(0deg);
|
51
|
+
-moz-transform: rotate(30deg) skewX(30deg) skewY(0deg);
|
52
|
+
-o-transform: rotate(30deg) skewX(30deg) skewY(0deg);
|
53
|
+
transform: rotate(30deg) skewX(30deg) skewY(0deg);
|
54
|
+
}
|
55
|
+
|
56
|
+
.side {
|
57
|
+
top: 10650px;
|
58
|
+
left: 172px;
|
59
|
+
background: none;
|
60
|
+
color: #666;
|
61
|
+
/* -webkit-transform: matrix(0.8965754721680536, -0.5176380902050415, 0, 1.035276180410083, 0, 0);*/
|
62
|
+
-webkit-transform: rotate(-30deg) skewX(-30deg) skewY(0deg);
|
63
|
+
-ms-transform: rotate(-30deg) skewX(-30deg) skewY(0deg);
|
64
|
+
-moz-transform: rotate(-30deg) skewX(-30deg) skewY(0deg);
|
65
|
+
-o-transform: rotate(-30deg) skewX(-30deg) skewY(0deg);
|
66
|
+
transform: rotate(-30deg) skewX(-30deg) skewY(0deg);
|
67
|
+
}
|
68
|
+
|
69
|
+
.top {
|
70
|
+
top: 1065px;
|
71
|
+
left: 172px;
|
72
|
+
background: none;
|
73
|
+
color: #666;
|
74
|
+
}
|
75
|
+
|
76
|
+
</style>
|
77
|
+
</head>
|
78
|
+
<body>
|
79
|
+
|
80
|
+
<div class="face <%= r['transform_class'] %> " style="color: <%= r['color'] %>; font:<%= r['size'] %>px <%= r['font'] %>;">
|
81
|
+
<%= r['text'] %>
|
82
|
+
</div>
|
83
|
+
|
84
|
+
</body>
|
85
|
+
</html>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'text2isometric/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "text2isometric"
|
8
|
+
spec.version = Text2isometric::VERSION
|
9
|
+
spec.authors = ["Pim Snel"]
|
10
|
+
spec.email = ["pim@lingewoud.nl"]
|
11
|
+
spec.summary = %q{Generates isometric images from text}
|
12
|
+
spec.description = %q{Generates isometric images from text using webkit2png}
|
13
|
+
spec.homepage = "https://github.com/mipmip/text2isometric"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
spec.add_runtime_dependency "thor", "~> 0.19"
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: text2isometric
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Pim Snel
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-01-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.7'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: thor
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.19'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.19'
|
55
|
+
description: Generates isometric images from text using webkit2png
|
56
|
+
email:
|
57
|
+
- pim@lingewoud.nl
|
58
|
+
executables:
|
59
|
+
- text2isometric
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- ".gitignore"
|
64
|
+
- Gemfile
|
65
|
+
- LICENSE.txt
|
66
|
+
- README.md
|
67
|
+
- Rakefile
|
68
|
+
- bin/text2isometric
|
69
|
+
- intro.graffle
|
70
|
+
- isometric-blue-grid.graffle
|
71
|
+
- lib/text2isometric.rb
|
72
|
+
- lib/text2isometric/version.rb
|
73
|
+
- templates/isometric-text.scpt
|
74
|
+
- templates/text.html.erb
|
75
|
+
- text2isometric.gemspec
|
76
|
+
homepage: https://github.com/mipmip/text2isometric
|
77
|
+
licenses:
|
78
|
+
- MIT
|
79
|
+
metadata: {}
|
80
|
+
post_install_message:
|
81
|
+
rdoc_options: []
|
82
|
+
require_paths:
|
83
|
+
- lib
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
requirements: []
|
95
|
+
rubyforge_project:
|
96
|
+
rubygems_version: 2.4.3
|
97
|
+
signing_key:
|
98
|
+
specification_version: 4
|
99
|
+
summary: Generates isometric images from text
|
100
|
+
test_files: []
|