sqm2json 0.0.4 → 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
2
  SHA256:
3
- metadata.gz: c02cdf58b8fca45cb20db6981aa66a4dae32f0e6dfd56ec930002a9d65b3cb54
4
- data.tar.gz: 123c9d72a99bd1fa376b17b278618fd243c09b327fedabaf05ac491354519bec
3
+ metadata.gz: f722dfb641b8674f1e73d490ce62a8b7c1ec426981d704f731c98642b43bd4ac
4
+ data.tar.gz: d3644e0ad66ddff412c1b52609e20ec05ff795ac5b8e4244b22cfd993d6d1edb
5
5
  SHA512:
6
- metadata.gz: aefc059a1453d1c58b3cd9e06b6dc35b8e44a2fb0e15897620f14f93e2c0ba48065c8136ef8bd44570443a21cca4bc6208d4a7b623949496bbc5b17cf80c4df9
7
- data.tar.gz: e97debfc0d9286cc562fb3e5aa0dc0a00147d63f2aae122a8cab100c926cf9389e9ee5657b8eb29321ad7873d41e241acee8fbb5a4a228ef590e9052dedac49d
6
+ metadata.gz: 9f2e069d53a0efe9942b6fba3060ac9584c501374e411be08b58c465701506e20fcd1c8dd9529cc49a6c88402960f92b1b24937e93b6a3f9f2a37b651f4c4ca4
7
+ data.tar.gz: 41ecb4372cce08f1b1d2657bf43b872f6cb0e0f089df3b3bda1c5764e4dd8757786999009ce5188f06e39774d526a1ffc3f30558d8e75d4d40f6814a7c20ec40
@@ -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.4'
2
+ VERSION = '0.0.5'
3
3
 
4
4
  def self.get_supported_versions
5
- [12,51,52,54]
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
@@ -23,6 +23,6 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency 'bundler', '~> 2.4'
24
24
  spec.add_development_dependency 'rake', '~> 13.2'
25
25
  spec.add_development_dependency 'rspec', '~> 3.13'
26
- spec.add_development_dependency 'rubocop'
26
+ spec.add_development_dependency 'rubocop', '~> 1.70'
27
27
  spec.add_development_dependency 'yard', '~> 0.9'
28
28
  end
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.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas FLINOIS
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-01 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
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: rubocop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1.70'
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: '0'
68
+ version: '1.70'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: yard
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -119,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
119
  - !ruby/object:Gem::Version
120
120
  version: '0'
121
121
  requirements: []
122
- rubygems_version: 3.4.10
122
+ rubygems_version: 3.5.18
123
123
  signing_key:
124
124
  specification_version: 4
125
125
  summary: This library aims at converting Arma's missions SQM format to JSON and vice-versa