sqm2json 0.0.3 → 0.0.5

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
- SHA1:
3
- metadata.gz: e973a062c13629e9521d626426481b667b4e6b0e
4
- data.tar.gz: 66ac9e2c60e69dc69ca38465373dd0a265a5ae58
2
+ SHA256:
3
+ metadata.gz: f722dfb641b8674f1e73d490ce62a8b7c1ec426981d704f731c98642b43bd4ac
4
+ data.tar.gz: d3644e0ad66ddff412c1b52609e20ec05ff795ac5b8e4244b22cfd993d6d1edb
5
5
  SHA512:
6
- metadata.gz: e6d6f5ac71cc9625fda4cd788e78b0955ab5c6a01f50a47506cfbb76cdad4e031241c60f7708019c994c0dbcb4efc67ee0876bbf3e16d13f0b79b4c7c76bca60
7
- data.tar.gz: 4e4163637df825ebccac392065f2fa3b308bc4c7d5c33daf7b5a4957716318f537c23a22d4e505a12e9231bfd4995e750ff633c0e7c6ab986246e8e7bdd39145
6
+ metadata.gz: 9f2e069d53a0efe9942b6fba3060ac9584c501374e411be08b58c465701506e20fcd1c8dd9529cc49a6c88402960f92b1b24937e93b6a3f9f2a37b651f4c4ca4
7
+ data.tar.gz: 41ecb4372cce08f1b1d2657bf43b872f6cb0e0f089df3b3bda1c5764e4dd8757786999009ce5188f06e39774d526a1ffc3f30558d8e75d4d40f6814a7c20ec40
data/.gitignore CHANGED
@@ -3,4 +3,5 @@ doc/
3
3
  .idea/
4
4
  .yardoc/
5
5
  Gemfile.lock
6
- *.gem
6
+ *.gem
7
+ log/
@@ -1,4 +1,6 @@
1
+
1
2
  module Sqm2Json
3
+ # Provide JSON => SQM conversion
2
4
  module Reverse
3
5
 
4
6
  # Generate a SQM formatted output from given JSON document
@@ -6,13 +8,10 @@ module Sqm2Json
6
8
  # @return [String] SQM document as string
7
9
  def to_sqm(json)
8
10
  content = ''
9
- json.each { |k,v|
10
- content += get_element(k, v, 0)
11
- }
11
+ json.each { |k, v| content += get_element(k, v, 0) }
12
12
  content
13
13
  end
14
14
 
15
-
16
15
  # Convert any JSON element to SQM equivalent
17
16
  # @param [Object] key of JSON element
18
17
  # @param [Object] value of JSON element
@@ -20,28 +19,30 @@ module Sqm2Json
20
19
  # @return [String] SQM formatted element
21
20
  def get_element(key, value, level)
22
21
  content = ''
23
- level.times { content << "\t"}
22
+ level.times { content << "\t" }
24
23
 
25
- if value.is_a?(::Numeric)
26
- content << "#{key.to_s}=#{get_numeric(value)};\r\n"
27
- elsif value.is_a?(::String)
28
- content << "#{key.to_s}=\"#{value.gsub(/"/, '""').to_s}\";\r\n"
29
- elsif value.is_a?(::Array)
24
+ case value
25
+ when ::Numeric
26
+ content << "#{key}=#{get_numeric(value)};\r\n"
27
+ when ::String
28
+ content << "#{key}=\"#{value}\";\r\n"
29
+ when ::Array
30
30
  content << get_array(key, value, level)
31
- elsif value.is_a?(::Hash)
32
- content << "class #{key.to_s}\r\n"
33
- level.times { content << "\t"}
31
+ when ::Hash
32
+ content << "class #{key}\r\n"
33
+ level.times { content << "\t" }
34
34
  content << "{\r\n"
35
- value.each{ |k,v|
35
+ value.each { |k, v|
36
36
  content << get_element(k, v, level + 1)
37
37
  }
38
- level.times { content << "\t"}
38
+ level.times { content << "\t" }
39
39
  content << "};\r\n"
40
+ else
41
+ raise "Invalid JSON element type: #{value.class}"
40
42
  end
41
43
  content
42
44
  end
43
45
 
44
-
45
46
  # Convert a JSON value array in SQM equivalent
46
47
  # @param [Object] key of JSON element
47
48
  # @param [Array] values of JSON element
@@ -49,43 +50,41 @@ module Sqm2Json
49
50
  # @return [String] SQM formatted array
50
51
  def get_array(key, values, level)
51
52
  content = ''
52
- content << "#{key.to_s}[]="
53
+ content << "#{key}[]="
53
54
  if values[0].is_a?(::Numeric)
54
55
  content << '{'
55
56
  values.each { |v|
56
57
  content << "#{get_numeric(v)},"
57
58
  }
58
59
  content.chomp!(',')
59
- content << "};\r\n"
60
60
  else
61
61
  content << "\r\n"
62
- level.times { content << "\t"}
62
+ level.times { content << "\t" }
63
63
  content << "{\r\n"
64
- values.each { |v|
65
- (level + 1).times {content << "\t"}
64
+ values.each do |v|
65
+ (level + 1).times {content << "\t" }
66
66
  content << "\"#{v.to_s}\",\r\n"
67
- }
67
+ end
68
68
  content.chomp!(",\r\n")
69
69
  content << "\r\n"
70
- level.times { content << "\t"}
71
- content << "};\r\n"
70
+ level.times { content << "\t" }
72
71
  end
72
+ content << "};\r\n"
73
73
  content
74
74
  end
75
75
 
76
-
77
76
  # Convert a JSON numeric value in SQM equivalent
78
77
  # @param [Object] value of JSON element
79
78
  # @return [String] SQM formatted numeric value
80
79
  def get_numeric(value)
81
- value.to_s.gsub(/(?<val>[0-9\.]+e-?)(?<exp>[0-9]+)/) { |m|
80
+ value.to_s.gsub(/(?<val>[0-9\.]+e[-\+]?)(?<exp>[0-9]+)/) do |m|
82
81
  arr = m.split(/e/)
83
82
  if arr[1][0] =~ /[0-9]/
84
83
  "#{arr[0]}e#{arr[1].rjust(3,'0')}"
85
84
  else
86
- "#{arr[0]}e#{arr[1][0]}#{arr[1][1..-1].rjust(3,'0')}"
85
+ "#{arr[0]}e#{arr[1][0]}#{arr[1][1..].rjust(3,'0')}"
87
86
  end
88
- }.to_s
87
+ end.to_s
89
88
  end
90
89
 
91
90
  end
@@ -1,3 +1,4 @@
1
+ # Provide SQM =>> JSON conversion
1
2
  module Sqm2Json
2
3
 
3
4
  # Parse a given SQM file to JSON document
@@ -6,28 +7,30 @@ module Sqm2Json
6
7
  # @return [Hash] JSON document
7
8
  def to_json(sqm_document)
8
9
  content = sqm_document.delete("\r\n").delete("\t")
9
-
10
- content.gsub!(/(?<key>\w*)(\s)*=(\s)*(?<val>"");/, '\k<key>="ʉ";') # replace empty string values
11
- content.gsub!('""', '\"') # 2x" in init fields replaced by \"
12
-
13
- content.gsub!(/(?<key>[\w]+)(\[\])?=(?<val>".{0,}?([^\\]\";))/) { |m|
14
- pairs = m.split('=', 2)
15
- "\"#{pairs[0]}\": #{pairs[1].gsub(/;/,'ʊ').gsub(/,/,'ʎ').chomp('ʊ').gsub('""','\"').gsub(/\\([^"])/, '\\\\\\\\\1')},"
16
- }
17
-
10
+ content.gsub!(/(?<key>\w*)\s*=\s*(?<val>"");/, '\k<key>="ʉ";') # replace empty string values
11
+ protect_special_chars_into_values(content)
18
12
  content.gsub!(/class (?<val>\w+)\s*\{/, '"\k<val>" : {')
19
13
  content.gsub!(/(?<key>\w*)=(?<val>[\w#+\-0-9 .,]+);/, '"\k<key>" : \k<val>,')
20
14
  content.gsub!(/(?<key>\w*)\[\]\s*=\s*\{(?<val>[\w#\+\-0-9 .,"]+)\};/, '"\k<key>" : [\k<val>],')
21
15
  content.gsub!(/\};/, '},')
22
16
  content.gsub!(/,\}/, '}')
23
17
  content.gsub!(/\}[;,]\}/, '}}')
24
- content.gsub!(/ʊ/, ';') if content.include? 'ʊ'
25
- content.gsub!(/ʎ/, ',') if content.include? 'ʎ'
26
- content.gsub!(/ʉ/, '') if content.include? 'ʉ'
27
- content.gsub!(/ɣ/, '\'') if content.include? 'ɣ'
28
- content = "{#{content.chomp('"').chomp(',')}}"
18
+ recover_special_chars_into_values(content)
19
+ ::JSON.parse("{#{content.chomp('"').chomp(',')}}", symbolize_names: true)
20
+ end
21
+
22
+ # Replace special characters into init-like fields before processing the structure
23
+ def protect_special_chars_into_values(content)
24
+ content.gsub!(/(\w+)(\[\])?\s*=\s*"(.{0,}?([^\\]))";/) do
25
+ "\"#{$1}\": \"#{$3.gsub(/;/, 'ʊ').gsub(/,/, 'ʎ').gsub('"', 'ƛ').gsub(/'/, 'ɣ').gsub(/\\([^"])/, '\\\\\\\\\1')}\","
26
+ end
27
+ end
29
28
 
30
- ::JSON.parse(content, symbolize_names: true)
29
+ # Recover protected special characters into init-like fields after processing the structure
30
+ def recover_special_chars_into_values(content)
31
+ content.gsub!(/"(\w+)(\[\])?"\s*:\s*"(.{0,}?([^\\])*)"(,)?/) do
32
+ "\"#{$1}\" : \"#{$3.gsub(/ʊ/, ';').gsub(/ʎ/, ',').gsub(/ƛ/, '\"').gsub(/ɣ/, '\'').gsub(/ʉ/, '')}#{$4}\""
33
+ end
31
34
  end
32
35
 
33
36
  end
@@ -1,11 +1,11 @@
1
1
  module Sqm2Json
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.5'
3
3
 
4
4
  def self.get_supported_versions
5
- [12,51,52]
5
+ [12, 51, 52, 54]
6
6
  end
7
7
 
8
- def self.is_version_supported?(version)
8
+ def self.version_supported?(version)
9
9
  get_supported_versions.include?(version)
10
10
  end
11
11
 
data/lib/sqm2json.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  require 'json'
2
2
  require 'sqm2json/json2sqm'
3
3
  require 'sqm2json/sqm2json'
4
- require 'sqm2json/version'
4
+ require 'sqm2json/version'
data/sqm2json.gemspec CHANGED
@@ -1,5 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'sqm2json/version'
5
6
 
@@ -10,17 +11,18 @@ Gem::Specification.new do |spec|
10
11
  spec.email = ['nicolas.flinois@gmail.com']
11
12
  spec.license = 'WTFPL v2'
12
13
 
13
- spec.summary = %q{This library aims at converting Arma's missions SQM format to JSON and vice-versa}
14
- spec.description = %q{The conversion of SQM format to JSON document and vice versa makes missions parsing easier: you can either browse your mission content, or modify it and generate a new valid mission.sqm file}
14
+ spec.summary = 'This library aims at converting Arma\'s missions SQM format to JSON and vice-versa'
15
+ spec.description = 'The conversion of SQM format to JSON document and vice versa makes missions parsing easier: ' \
16
+ 'you can either browse your mission content, or modify it and generate a new valid mission.sqm file'
15
17
  spec.homepage = 'https://github.com/nicolasFlinois/sqm2json'
16
18
 
17
19
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
20
  spec.require_paths = ['lib']
19
21
 
20
- spec.add_development_dependency 'bundler', '~> 1.11'
21
- spec.add_development_dependency 'rake', '~> 10.0'
22
- spec.add_development_dependency 'rspec', '~> 3.0'
23
- spec.add_development_dependency 'yard', '~> 0.8.7.6'
24
-
22
+ spec.required_ruby_version = '>= 2.7'
23
+ spec.add_development_dependency 'bundler', '~> 2.4'
24
+ spec.add_development_dependency 'rake', '~> 13.2'
25
+ spec.add_development_dependency 'rspec', '~> 3.13'
26
+ spec.add_development_dependency 'rubocop', '~> 1.70'
27
+ spec.add_development_dependency 'yard', '~> 0.9'
25
28
  end
26
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqm2json
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas FLINOIS
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-21 00:00:00.000000000 Z
11
+ date: 2025-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,56 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.11'
19
+ version: '2.4'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.11'
26
+ version: '2.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.2'
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: '10.0'
40
+ version: '13.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '3.13'
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: '3.0'
54
+ version: '3.13'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.70'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.70'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: yard
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: 0.8.7.6
75
+ version: '0.9'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: 0.8.7.6
82
+ version: '0.9'
69
83
  description: 'The conversion of SQM format to JSON document and vice versa makes missions
70
84
  parsing easier: you can either browse your mission content, or modify it and generate
71
85
  a new valid mission.sqm file'
@@ -90,7 +104,7 @@ homepage: https://github.com/nicolasFlinois/sqm2json
90
104
  licenses:
91
105
  - WTFPL v2
92
106
  metadata: {}
93
- post_install_message:
107
+ post_install_message:
94
108
  rdoc_options: []
95
109
  require_paths:
96
110
  - lib
@@ -98,17 +112,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
112
  requirements:
99
113
  - - ">="
100
114
  - !ruby/object:Gem::Version
101
- version: '0'
115
+ version: '2.7'
102
116
  required_rubygems_version: !ruby/object:Gem::Requirement
103
117
  requirements:
104
118
  - - ">="
105
119
  - !ruby/object:Gem::Version
106
120
  version: '0'
107
121
  requirements: []
108
- rubyforge_project:
109
- rubygems_version: 2.4.5.1
110
- signing_key:
122
+ rubygems_version: 3.5.18
123
+ signing_key:
111
124
  specification_version: 4
112
125
  summary: This library aims at converting Arma's missions SQM format to JSON and vice-versa
113
126
  test_files: []
114
- has_rdoc: