song_pro 0.1.4 → 0.1.9

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 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