Module: Sqm2Json
- Defined in:
- lib/sqm2json/version.rb,
lib/sqm2json/json2sqm.rb,
lib/sqm2json/sqm2json.rb
Defined Under Namespace
Modules: Reverse
Constant Summary collapse
- VERSION =
'0.0.3'
Class Method Summary collapse
Instance Method Summary collapse
-
#to_json(sqm_document) ⇒ Hash
Parse a given SQM file to JSON document NOTICE: the implementation is far from being perfect but just works.
Class Method Details
.get_supported_versions ⇒ Object
4 5 6 |
# File 'lib/sqm2json/version.rb', line 4 def self.get_supported_versions [12,51,52] end |
.is_version_supported?(version) ⇒ Boolean
8 9 10 |
# File 'lib/sqm2json/version.rb', line 8 def self.is_version_supported?(version) get_supported_versions.include?(version) end |
Instance Method Details
#to_json(sqm_document) ⇒ Hash
Parse a given SQM file to JSON document NOTICE: the implementation is far from being perfect but just works
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/sqm2json/sqm2json.rb', line 7 def to_json(sqm_document) content = sqm_document.delete("\r\n").delete("\t") content.gsub!(/(?<key>\w*)(\s)*=(\s)*(?<val>"");/, '\k<key>="ʉ";') # replace empty string values content.gsub!('""', '\"') # 2x" in init fields replaced by \" content.gsub!(/(?<key>[\w]+)(\[\])?=(?<val>".{0,}?([^\\]\";))/) { |m| pairs = m.split('=', 2) "\"#{pairs[0]}\": #{pairs[1].gsub(/;/,'ʊ').gsub(/,/,'ʎ').chomp('ʊ').gsub('""','\"').gsub(/\\([^"])/, '\\\\\\\\\1')}," } content.gsub!(/class (?<val>\w+)\s*\{/, '"\k<val>" : {') content.gsub!(/(?<key>\w*)=(?<val>[\w#+\-0-9 .,]+);/, '"\k<key>" : \k<val>,') content.gsub!(/(?<key>\w*)\[\]\s*=\s*\{(?<val>[\w#\+\-0-9 .,"]+)\};/, '"\k<key>" : [\k<val>],') content.gsub!(/\};/, '},') content.gsub!(/,\}/, '}') content.gsub!(/\}[;,]\}/, '}}') content.gsub!(/ʊ/, ';') if content.include? 'ʊ' content.gsub!(/ʎ/, ',') if content.include? 'ʎ' content.gsub!(/ʉ/, '') if content.include? 'ʉ' content.gsub!(/ɣ/, '\'') if content.include? 'ɣ' content = "{#{content.chomp('"').chomp(',')}}" ::JSON.parse(content, symbolize_names: true) end |