ss_syntax 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5a21295288305597b7d7f978ecde67b7cdad3744
4
+ data.tar.gz: a3acc7ad07484996d309abe79275377427da853b
5
+ SHA512:
6
+ metadata.gz: 4e525943492a19c196a238970697865a7a328c0ed909a26bc6766d3ee48e3e5887e2e48c80ec14b616649100ceaa9c2ac7b4b4108eb0cadf09929f8b40524710
7
+ data.tar.gz: 07bbcee5b069036aaf44cbd0f04f6f2a082a4c68e875d3f9cf3eac01ed0bf463c4564f78428db46254d3bbdcf745df058a00bfa2c2a165f2330240fc66b9d52b
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ vendor/
2
+ .bundle/
3
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ss_syntax.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,16 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ss_syntax (0.0.1)
5
+ slop
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ slop (3.6.0)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ ss_syntax!
data/README.md ADDED
@@ -0,0 +1,68 @@
1
+ # ss記法
2
+
3
+ ## 使い方
4
+
5
+ ```sh
6
+ $ sssy example/example.ss // default -t
7
+ $ sssy --html example/example.ss // puts html
8
+ ```
9
+
10
+ or
11
+
12
+ ```rb
13
+ require 'ss_syntax'
14
+
15
+ text = SsSyntax::SsSyntax.new(src).parse() # default :text
16
+ html = SsSyntax::SsSyntax.new(src, :html).parse()
17
+ ```
18
+
19
+ ## 各記法
20
+
21
+ ### 登場人物名ショートカット
22
+
23
+ ```
24
+ # * [ショートカット名] [名前]
25
+ # - [ショートカット名] [名前]
26
+ # これは本文には反映されない
27
+
28
+ * 1 男
29
+ * 2 女
30
+ - osana 幼 # 数字じゃなくてもいい
31
+ ```
32
+
33
+ ### 発言
34
+
35
+ ```
36
+ * 1 男
37
+
38
+ # 以下はどちらも同じ結果になる
39
+ 男: 今日は眠い
40
+ 1: 今日は眠い
41
+
42
+ # 結果
43
+ # 男「今日は眠い」
44
+ ```
45
+
46
+ ### 心の声
47
+
48
+ ```
49
+ * 1 男
50
+
51
+ 1_ 女は今日も可愛いなぁ
52
+
53
+ # 結果
54
+ # 男(女は今日も可愛いなぁ)
55
+ ```
56
+
57
+ ### 地の文
58
+
59
+ ```
60
+ そのまま書けばそれが地の文になる
61
+ ```
62
+
63
+ ### コメント
64
+
65
+ ```
66
+ # をつけるとその行はコメント扱いされる
67
+ # 本文には反映されない
68
+ ```
data/bin/sssy ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
4
+ require 'ss_syntax/command_builder'
5
+
6
+ SsSyntax::CommandBuilder.new(ARGV).parse
@@ -0,0 +1,8 @@
1
+ require 'ss_syntax'
2
+
3
+ src = File.open(File.expand_path('../example.ss', __FILE__), 'r').read
4
+ text = SsSyntax::SsSyntax.new(src).parse() # default :text
5
+ html = SsSyntax::SsSyntax.new(src, :html).parse()
6
+
7
+ puts text
8
+ puts html
@@ -0,0 +1,10 @@
1
+ # 登場人物
2
+ * 1 男
3
+ * 天使 小倉唯
4
+ - 2 幼
5
+
6
+ # 本編
7
+
8
+ 1: 小倉唯神
9
+ 2_ また男が変なこと言ってる…
10
+ 天使: それな
@@ -0,0 +1,34 @@
1
+ require 'slop'
2
+ require 'ss_syntax/parse'
3
+
4
+ module SsSyntax
5
+ class CommandBuilder
6
+ def initialize(arguments = ARGV)
7
+ @arguments = arguments
8
+ @options = options
9
+ end
10
+
11
+ def parse
12
+ file_path = ARGV[0]
13
+ return puts 'Please set ss file.' if file_path == nil
14
+
15
+ file = File.open(file_path, 'r')
16
+ text = file.read
17
+
18
+ if @options[:html]
19
+ puts Parse.new(text).to_h
20
+ else
21
+ puts Parse.new(text).to_s
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def options
28
+ Slop.parse!(@arguments, help: true) do
29
+ on("t", "text", "Generate format to text.")
30
+ on("html", "Generate format to html.")
31
+ end.to_hash
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,75 @@
1
+ require 'ss_syntax/parses/character'
2
+ require 'ss_syntax/parses/comment'
3
+ require 'ss_syntax/parses/heart_voice'
4
+ require 'ss_syntax/parses/remark'
5
+ require 'ss_syntax/parses/none'
6
+ require 'ss_syntax/parses/type'
7
+
8
+ module SsSyntax
9
+ class Parse
10
+ attr_reader :text, :characters
11
+
12
+ def initialize(text)
13
+ @text = text
14
+ @charactes = {}
15
+ @parse_text = parse_text
16
+ end
17
+
18
+ def to_s
19
+ @parse_text
20
+ end
21
+
22
+ def to_h
23
+ html_text = ''
24
+ @parse_text.each_line do |line|
25
+ line.chomp!
26
+ html_text += "<span>#{line}</span><br />"
27
+ end
28
+
29
+ html_text
30
+ end
31
+
32
+ private
33
+
34
+ def parse_text
35
+ parse_text = ''
36
+ @text.each_line do |line|
37
+ line.chomp!
38
+ case check_type(line)
39
+ when Parses::Type::Character
40
+ key, name = Parses::Character.get(line)
41
+ if key != nil && name != nil
42
+ @charactes[key] = name
43
+ end
44
+ when Parses::Type::Comment
45
+ when Parses::Type::HeartVoice
46
+ parse_text += Parses::HeartVoice.get(line, @charactes) + "\n"
47
+ when Parses::Type::Remark
48
+ parse_text += Parses::Remark.get(line, @charactes) + "\n"
49
+ when Parses::Type::None
50
+ parse_text += Parses::None.get(line) + "\n" if line != ''
51
+ else
52
+ raise 'not support type'
53
+ end
54
+ end
55
+
56
+ return parse_text
57
+ end
58
+
59
+ def check_type(line)
60
+ if Parses::Character.check(line)
61
+ return Parses::Type::Character
62
+ elsif Parses::Comment.check(line)
63
+ return Parses::Type::Comment
64
+ elsif Parses::HeartVoice.check(line)
65
+ return Parses::Type::HeartVoice
66
+ elsif Parses::Remark.check(line)
67
+ return Parses::Type::Remark
68
+ elsif Parses::None.check(line)
69
+ return Parses::Type::None
70
+ end
71
+
72
+ nil
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,19 @@
1
+ module SsSyntax
2
+ module Parses
3
+ class Character
4
+ def self.check(text)
5
+ if text.match(/^\*/) || text.match(/^-/)
6
+ return true
7
+ end
8
+
9
+ return false
10
+ end
11
+
12
+ def self.get(text)
13
+ match = text.match(/^\* (.+) (.+)/) || text.match(/^- (.+) (.+)/)
14
+ return nil, nil if match == nil
15
+ return match[1], match[2]
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ module SsSyntax
2
+ module Parses
3
+ class Comment
4
+ def self.check(text)
5
+ # TODO: 文の途中で#が出てきてもサポートする
6
+ if text.match(/^#/)
7
+ return true
8
+ end
9
+
10
+ return false
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ module SsSyntax
2
+ module Parses
3
+ class HeartVoice
4
+ def self.check(text)
5
+ if text.match(/.+_/)
6
+ return true
7
+ end
8
+
9
+ return false
10
+ end
11
+
12
+ def self.get(text, characters)
13
+ match = text.match(/(.+)_ (.+)/)
14
+ key, body = match[1], match[2]
15
+
16
+ return "#{characters[key]}(#{body})" if characters[key] != nil
17
+ return "#{key}(#{body})"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ module SsSyntax
2
+ module Parses
3
+ class None
4
+ def self.check(text)
5
+ return true
6
+ end
7
+
8
+ def self.get(text)
9
+ return text
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ module SsSyntax
2
+ module Parses
3
+ class Remark
4
+ def self.check(text)
5
+ if text.match(/.+:/)
6
+ return true
7
+ end
8
+
9
+ return false
10
+ end
11
+
12
+ def self.get(text, characters)
13
+ match = text.match(/(.+): (.+)/)
14
+ key, body = match[1], match[2]
15
+
16
+ return "#{characters[key]}「#{body}」" if characters[key] != nil
17
+ return "#{key}「#{body}」"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,10 @@
1
+ module SsSyntax
2
+ module Parses
3
+ module Type; end
4
+ Type::Character = 1
5
+ Type::Comment = 2
6
+ Type::HeartVoice = 3
7
+ Type::Remark = 4
8
+ Type::None = 5
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module SsSyntax
2
+ VERSION = "0.0.1"
3
+ end
data/lib/ss_syntax.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'ss_syntax/parse'
2
+
3
+ module SsSyntax
4
+ class SsSyntax
5
+ attr_reader :text, :type
6
+
7
+ def initialize(text, type = :text)
8
+ @text = text
9
+ @type = type
10
+ end
11
+
12
+ def parse()
13
+ parse = Parse.new(@text)
14
+ case @type
15
+ when :text
16
+ return parse.to_s
17
+ when :html
18
+ return parse.to_h
19
+ else
20
+ return parse.to_s
21
+ end
22
+ end
23
+ end
24
+ end
data/ss_syntax.gemspec ADDED
@@ -0,0 +1,19 @@
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'ss_syntax/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'ss_syntax'
7
+ s.version = SsSyntax::VERSION
8
+ s.summary = "Short Story Syntax"
9
+ s.authors = ["henteko"]
10
+ s.email = 'henteko07@gmail.com'
11
+ s.homepage = 'http://rubygems.org/gems/ss_syntax'
12
+ s.license = 'MIT'
13
+
14
+ s.files = `git ls-files -z`.split("\x0")
15
+ s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ s.require_paths = ["lib"]
17
+
18
+ s.add_dependency "slop"
19
+ end
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ss_syntax
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - henteko
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: slop
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description:
28
+ email: henteko07@gmail.com
29
+ executables:
30
+ - sssy
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".gitignore"
35
+ - Gemfile
36
+ - Gemfile.lock
37
+ - README.md
38
+ - bin/sssy
39
+ - example/example.rb
40
+ - example/example.ss
41
+ - lib/ss_syntax.rb
42
+ - lib/ss_syntax/command_builder.rb
43
+ - lib/ss_syntax/parse.rb
44
+ - lib/ss_syntax/parses/character.rb
45
+ - lib/ss_syntax/parses/comment.rb
46
+ - lib/ss_syntax/parses/heart_voice.rb
47
+ - lib/ss_syntax/parses/none.rb
48
+ - lib/ss_syntax/parses/remark.rb
49
+ - lib/ss_syntax/parses/type.rb
50
+ - lib/ss_syntax/version.rb
51
+ - ss_syntax.gemspec
52
+ homepage: http://rubygems.org/gems/ss_syntax
53
+ licenses:
54
+ - MIT
55
+ metadata: {}
56
+ post_install_message:
57
+ rdoc_options: []
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ requirements: []
71
+ rubyforge_project:
72
+ rubygems_version: 2.2.2
73
+ signing_key:
74
+ specification_version: 4
75
+ summary: Short Story Syntax
76
+ test_files: []