song_pro 0.1.4 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a60d1b3170f1c93d6715aaf1e6ac32d4f7ea36279fd6337332e548f0d0b27ead
4
- data.tar.gz: d6f071f7c7be13424e9861279ddae1cc5edf5f7264dfad1a2bbd9ee66cfcd542
3
+ metadata.gz: 4a8912e61f72c53d7969bbb24900237db809601766d9c48cf2dd6ebf76eec3f2
4
+ data.tar.gz: bf71cf6ffed3faa98236eb696826c96934b6576cda6ca217c69d0d9a33f428ad
5
5
  SHA512:
6
- metadata.gz: 92826523e6724d3f5b94904302a0e2d037af838c6d0d0b5761de1b8a88241bccbd6c2a6be30b18c1eeca7b0e012119584204d7c33d72ffc79c574571ed8cddff
7
- data.tar.gz: e63ddc6b96e8538d74b6158fa6ddfa9f7688d9a3b374f82beec5a6381cb8729e41437ee26ea68335114b235ea9d41ff44896435fe31062c2e0a5667b1f68e03f
6
+ metadata.gz: 216a122140922b1de0745821ef16fa4caeb741ff95db6f1d1c35bf0320117a7f6f87e1d1239efede11a11951c14b325b11282863200642c5a0e06445113badfa
7
+ data.tar.gz: d7c977c87a85f3a508738d38783941236ec73f9e5eb3e6a79ecd4a8257c94c2d2788df80947b254c10992e903a702727bc0c65876f7e83339c889fb4fb507d82
@@ -0,0 +1,21 @@
1
+ name: Build
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+ - name: Set up Ruby
15
+ uses: ruby/setup-ruby@v1
16
+ with:
17
+ ruby-version: 2.7
18
+ - name: Install dependencies
19
+ run: bundle install
20
+ - name: Run tests
21
+ run: bundle exec rake
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.6.3
1
+ 2.7.3
data/.travis.yml CHANGED
@@ -1,5 +1,7 @@
1
+ ---
1
2
  sudo: false
2
3
  language: ruby
4
+ cache: bundler
3
5
  rvm:
4
- - 2.5.1
5
- before_install: gem install bundler -v 1.16.1
6
+ - 2.7.3
7
+ before_install: gem install bundler -v 2.2
data/Gemfile.lock CHANGED
@@ -1,57 +1,39 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- song_pro (0.1.4)
4
+ song_pro (0.1.9)
5
5
  markaby
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- ast (2.4.0)
11
- builder (3.2.3)
12
- diff-lcs (1.3)
13
- jaro_winkler (1.5.1)
10
+ builder (3.2.4)
11
+ diff-lcs (1.4.4)
14
12
  markaby (0.9.0)
15
13
  builder
16
- parallel (1.12.1)
17
- parser (2.5.1.2)
18
- ast (~> 2.4.0)
19
- powerpack (0.1.2)
20
- rainbow (3.0.0)
21
- rake (10.5.0)
22
- rspec (3.8.0)
23
- rspec-core (~> 3.8.0)
24
- rspec-expectations (~> 3.8.0)
25
- rspec-mocks (~> 3.8.0)
26
- rspec-core (3.8.0)
27
- rspec-support (~> 3.8.0)
28
- rspec-expectations (3.8.1)
14
+ rake (13.0.3)
15
+ rspec (3.10.0)
16
+ rspec-core (~> 3.10.0)
17
+ rspec-expectations (~> 3.10.0)
18
+ rspec-mocks (~> 3.10.0)
19
+ rspec-core (3.10.1)
20
+ rspec-support (~> 3.10.0)
21
+ rspec-expectations (3.10.1)
29
22
  diff-lcs (>= 1.2.0, < 2.0)
30
- rspec-support (~> 3.8.0)
31
- rspec-mocks (3.8.0)
23
+ rspec-support (~> 3.10.0)
24
+ rspec-mocks (3.10.2)
32
25
  diff-lcs (>= 1.2.0, < 2.0)
33
- rspec-support (~> 3.8.0)
34
- rspec-support (3.8.0)
35
- rubocop (0.58.2)
36
- jaro_winkler (~> 1.5.1)
37
- parallel (~> 1.10)
38
- parser (>= 2.5, != 2.5.1.1)
39
- powerpack (~> 0.1)
40
- rainbow (>= 2.2.2, < 4.0)
41
- ruby-progressbar (~> 1.7)
42
- unicode-display_width (~> 1.0, >= 1.0.1)
43
- ruby-progressbar (1.10.0)
44
- unicode-display_width (1.4.0)
26
+ rspec-support (~> 3.10.0)
27
+ rspec-support (3.10.2)
45
28
 
46
29
  PLATFORMS
47
30
  ruby
48
31
 
49
32
  DEPENDENCIES
50
- bundler (~> 1.16)
51
- rake (~> 10.0)
52
- rspec (~> 3.0)
53
- rubocop
33
+ bundler (>= 2.2.19)
34
+ rake (~> 13.0)
35
+ rspec (~> 3.8)
54
36
  song_pro!
55
37
 
56
38
  BUNDLED WITH
57
- 1.17.2
39
+ 2.2.21
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # SongPro for Ruby [![Build Status](https://travis-ci.org/spilth/song_pro.svg?branch=master)](https://travis-ci.org/spilth/song_pro)
1
+ # SongPro for Ruby ![Build](https://github.com/SongProOrg/songpro-ruby/workflows/Build/badge.svg?branch=master)
2
2
 
3
3
  [SongPro](https://songpro.org) is a text format for transcribing songs.
4
4
 
@@ -14,30 +14,36 @@ gem 'song_pro'
14
14
 
15
15
  And then execute:
16
16
 
17
- $ bundle
17
+ ```bash
18
+ $ bundle
19
+ ```
18
20
 
19
21
  Or install it yourself as:
20
22
 
21
- $ gem install song_pro
23
+ ```bash
24
+ $ gem install song_pro
25
+ ```
22
26
 
23
27
  ## Usage
24
28
 
25
- Given then file `bad-moon-rising.sng` with the following contents:
29
+ Given then file `escape-capsule.sng` with the following contents:
26
30
 
27
31
  ```
28
- @title=Bad Moon Rising
29
- @artist=Cleedence Clearwater Revival
32
+ @title=Escape Capsule
33
+ @artist=Brian Kelly
34
+ !bandcamp=https://spilth.bandcamp.com/track/escape-capsule-nashville-edition
30
35
 
31
- # Intro
36
+ # Verse 1
32
37
 
33
- [D][A][G][D]
38
+ Climb a-[D]board [A]
39
+ I've been [Bm]waiting for you [F#m]
40
+ Climb a-[G]board [D]
41
+ You'll be [Asus4]safe in [A7]here
34
42
 
35
- # Verse 1
43
+ # Chorus 1
36
44
 
37
- [D]I see a [A]bad [G]moon a-[D]rising
38
- [D]I see [A]trouble [G]on the [D]way
39
- [D]I see [A]earth-[G]quakes and [D]lightnin'
40
- [D]I see [A]bad [G]times to-[D]day
45
+ [G] I'm a [D]rocket [F#]made for your pro-[Bm]tection
46
+ You're [G]safe with me, un-[A]til you leave
41
47
  ```
42
48
 
43
49
  You can then parse the file to create a `Song` object:
@@ -45,18 +51,17 @@ You can then parse the file to create a `Song` object:
45
51
  ```ruby
46
52
  require 'song_pro'
47
53
 
48
- text = File.read('bad-moon-rising.sng')
54
+ text = File.read('escape-capsule.sng')
49
55
  song = SongPro.parse(text)
50
56
 
51
57
  puts song.title
52
- # Bad Moon Rising
58
+ # Escape Capsule
53
59
 
54
60
  puts song.artist
55
- # Creedence Clearwater Revival
61
+ # Brian Kelly
56
62
 
57
63
  puts song.sections[1].title
58
- # Verse 1
59
-
64
+ # Chorus 1
60
65
  ```
61
66
 
62
67
  ## Development
data/lib/song_pro.rb CHANGED
@@ -11,9 +11,11 @@ module SongPro
11
11
  SECTION_REGEX = /#\s*([^$]*)/
12
12
  ATTRIBUTE_REGEX = /@(\w*)=([^%]*)/
13
13
  CUSTOM_ATTRIBUTE_REGEX = /!(\w*)=([^%]*)/
14
- CHORDS_AND_LYRICS_REGEX = %r{(\[[\w#b\/]+\])?([\w\s',.!()_\-"]*)}i
14
+ CHORDS_AND_LYRICS_REGEX = %r{(\[[\w#b\/]+\])?([^\[]*)}i
15
+
15
16
  MEASURES_REGEX = %r{([\[[\w#b\/]+\]\s]+)[|]*}i
16
- CHORDS_REGEX = %r{\[([\w#b\/]+)\]?}i
17
+ CHORDS_REGEX = %r{\[([\w#b+\/]+)\]?}i
18
+ COMMENT_REGEX = />\s*([^$]*)/
17
19
 
18
20
  def self.parse(lines)
19
21
  song = Song.new
@@ -88,6 +90,10 @@ module SongPro
88
90
  end
89
91
 
90
92
  line.measures = measures
93
+ elsif text.start_with?('>')
94
+ matches = COMMENT_REGEX.match(text)
95
+ comment = matches[1].strip
96
+ line.comment = comment
91
97
  else
92
98
  captures = text.scan(CHORDS_AND_LYRICS_REGEX).flatten
93
99
 
@@ -95,7 +101,7 @@ module SongPro
95
101
  part = Part.new
96
102
  chord = pair[0]&.strip || ''
97
103
  part.chord = chord.delete('[').delete(']')
98
- part.lyric = pair[1]&.strip || ''
104
+ part.lyric = pair[1] || ''
99
105
 
100
106
  line.parts << part unless (part.chord == '') && (part.lyric == '')
101
107
  end
data/lib/song_pro/line.rb CHANGED
@@ -2,21 +2,25 @@
2
2
 
3
3
  module SongPro
4
4
  class Line
5
- attr_accessor :parts, :tablature, :measures
5
+ attr_accessor :parts, :tablature, :measures, :comment
6
6
 
7
7
  def initialize
8
8
  @parts = []
9
9
  @tablature = nil
10
10
  @measures = nil
11
+ @comment = nil
11
12
  end
12
13
 
13
14
  def tablature?
14
- return @tablature != nil
15
+ !@tablature.nil?
15
16
  end
16
17
 
17
18
  def measures?
18
- return @measures != nil
19
+ !@measures.nil?
19
20
  end
20
21
 
22
+ def comment?
23
+ !@comment.nil?
24
+ end
21
25
  end
22
- end
26
+ end
data/lib/song_pro/song.rb CHANGED
@@ -24,6 +24,18 @@ module SongPro
24
24
  @custom[key.to_sym] = value
25
25
  end
26
26
 
27
+ def chords
28
+ sections.collect do |section|
29
+ section.lines.collect do |line|
30
+ if line.measures?
31
+ line.measures.collect(&:chords)
32
+ else
33
+ line.parts.collect(&:chord)
34
+ end
35
+ end
36
+ end.flatten.uniq.reject(&:empty?)
37
+ end
38
+
27
39
  def to_html
28
40
  mab = Markaby::Builder.new(song: self)
29
41
  mab.div.song do
@@ -1,3 +1,3 @@
1
1
  module SongPro
2
- VERSION = '0.1.4'.freeze
2
+ VERSION = '0.1.9'.freeze
3
3
  end
data/song_pro.gemspec CHANGED
@@ -8,15 +8,13 @@ Gem::Specification.new do |spec|
8
8
  spec.name = 'song_pro'
9
9
  spec.version = SongPro::VERSION
10
10
  spec.authors = ['Brian Kelly']
11
- spec.email = ['polymonic@gmail.com ']
11
+ spec.email = ['polymonic@gmail.com']
12
12
 
13
13
  spec.summary = 'Converts SongPro files to HTML'
14
14
  spec.description = 'Provides classes for creating, parsing and rendering SongPro files'
15
15
  spec.homepage = 'https://songpro.org'
16
16
  spec.license = 'MIT'
17
17
 
18
- # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
19
- # to allow pushing to a single host or delete this section to allow pushing to any host.
20
18
  if spec.respond_to?(:metadata)
21
19
  spec.metadata['allowed_push_host'] = 'https://rubygems.org'
22
20
  else
@@ -27,13 +25,10 @@ Gem::Specification.new do |spec|
27
25
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
28
26
  f.match(%r{^(test|spec|features)/})
29
27
  end
30
- spec.bindir = 'exe'
31
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
28
  spec.require_paths = ['lib']
33
29
 
34
30
  spec.add_dependency 'markaby'
35
- spec.add_development_dependency 'bundler', '~> 1.16'
36
- spec.add_development_dependency 'rake', '~> 10.0'
37
- spec.add_development_dependency 'rspec', '~> 3.0'
38
- spec.add_development_dependency 'rubocop'
31
+ spec.add_development_dependency "bundler", ">= 2.2.19"
32
+ spec.add_development_dependency 'rake', '~> 13.0'
33
+ spec.add_development_dependency 'rspec', '~> 3.8'
39
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: song_pro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Kelly
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-27 00:00:00.000000000 Z
11
+ date: 2021-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: markaby
@@ -28,65 +28,52 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.16'
33
+ version: 2.2.19
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.16'
40
+ version: 2.2.19
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.0'
61
+ version: '3.8'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.0'
69
- - !ruby/object:Gem::Dependency
70
- name: rubocop
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
68
+ version: '3.8'
83
69
  description: Provides classes for creating, parsing and rendering SongPro files
84
70
  email:
85
- - 'polymonic@gmail.com '
71
+ - polymonic@gmail.com
86
72
  executables: []
87
73
  extensions: []
88
74
  extra_rdoc_files: []
89
75
  files:
76
+ - ".github/workflows/build.yml"
90
77
  - ".gitignore"
91
78
  - ".rspec"
92
79
  - ".ruby-version"
@@ -126,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
113
  - !ruby/object:Gem::Version
127
114
  version: '0'
128
115
  requirements: []
129
- rubygems_version: 3.0.3
116
+ rubygems_version: 3.1.6
130
117
  signing_key:
131
118
  specification_version: 4
132
119
  summary: Converts SongPro files to HTML