swift_twine_formatter 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e2272da7485deb67f7e7023bffbac8f87127c5555c21e692a5fe9e972b41eca6
4
+ data.tar.gz: bdc16f04960875eb0e4134b7bc315d0d14909de31506ca0efdd56cbfbd1651e3
5
+ SHA512:
6
+ metadata.gz: 1b1e4aeb431366dcea212bda82197b3e194e6dde51678ab71a4a22a50325a212f8caa37375f0a19e6d58262d608a995e788a392026bd94cc0acd4bc3bc359bdc
7
+ data.tar.gz: 64f085976f745a6bde6eaaf9bb926c6417ddbb14bf0d4174106866fe1cdfe05f3fc7555932f40b9f7a2e62a5ddf6fd2e2023584d68043bdb39a60379a0020753
data/lib/formatter.rb ADDED
@@ -0,0 +1,96 @@
1
+ # encoding: utf-8
2
+
3
+ # based on Apple formatter
4
+ # https://github.com/scelis/twine/blob/main/lib/twine/formatters/apple.rb
5
+
6
+ module Twine
7
+ module Formatters
8
+ class SwiftFormatter < Abstract
9
+ def format_name
10
+ 'swift'
11
+ end
12
+
13
+ def extension
14
+ '.strings'
15
+ end
16
+
17
+ def can_handle_directory?(path)
18
+ Dir.entries(path).any? { |item| /^.+\.lproj$/.match(item) }
19
+ end
20
+
21
+ def default_file_name
22
+ 'Localizable.strings'
23
+ end
24
+
25
+ def determine_language_given_path(path)
26
+ path_arr = path.split(File::SEPARATOR)
27
+ path_arr.each do |segment|
28
+ match = /^(.+)\.lproj$/.match(segment)
29
+ if match
30
+ if match[1] == "Base"
31
+ return @options[:developer_language]
32
+ else
33
+ return match[1]
34
+ end
35
+ end
36
+ end
37
+
38
+ return super
39
+ end
40
+
41
+ def output_path_for_language(lang)
42
+ "#{lang}.lproj"
43
+ end
44
+
45
+ def read(io, lang)
46
+ last_comment = nil
47
+ while line = io.gets
48
+ # matches a `key = "value"` line, where key may be quoted or unquoted. The former may also contain escaped characters
49
+ match = /^\s*((?:"(?:[^"\\]|\\.)+")|(?:[^"\s=]+))\s*=\s*"((?:[^"\\]|\\.)*)"/.match(line)
50
+ if match
51
+ key = match[1]
52
+ key = key[1..-2] if key[0] == '"' and key[-1] == '"'
53
+ key.gsub!('\\"', '"')
54
+ value = match[2]
55
+ value.gsub!('\\"', '"')
56
+ set_translation_for_key(key, lang, value)
57
+ if last_comment
58
+ set_comment_for_key(key, last_comment)
59
+ end
60
+ end
61
+
62
+ match = /\/\* (.*) \*\//.match(line)
63
+ if match
64
+ last_comment = match[1]
65
+ else
66
+ last_comment = nil
67
+ end
68
+ end
69
+ end
70
+
71
+ def format_header(lang)
72
+ "//\n// Apple Strings File\n// Generated by Twine #{Twine::VERSION}\n//\n// Language: #{lang}\n//"
73
+ end
74
+
75
+ def format_section_header(section)
76
+ "// MARK: - #{section.name}\n"
77
+ end
78
+
79
+ def key_value_pattern
80
+ "\"%{key}\" = \"%{value}\";"
81
+ end
82
+
83
+ def format_comment(definition, lang)
84
+ "/* #{definition.comment.gsub('*/', '* /')} */\n" if definition.comment
85
+ end
86
+
87
+ def format_key(key)
88
+ escape_quotes(key)
89
+ end
90
+
91
+ def format_value(value)
92
+ escape_quotes(value)
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,6 @@
1
+ require 'rubygems'
2
+ require 'twine'
3
+
4
+ require_relative 'formatter'
5
+
6
+ Twine::Formatters.formatters << Twine::Formatters::SwiftFormatter.new
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: swift_twine_formatter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sergei Romashenko
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-08-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: twine
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.1.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.1.3
27
+ description: Plugin to generate .strings files with classic comments and marks format.
28
+ email:
29
+ - romashenko.sergey@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - lib/formatter.rb
35
+ - lib/swift_twine_formatter.rb
36
+ homepage:
37
+ licenses:
38
+ - MIT
39
+ metadata: {}
40
+ post_install_message:
41
+ rdoc_options: []
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '2.4'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubygems_version: 3.4.17
56
+ signing_key:
57
+ specification_version: 4
58
+ summary: Plugin to generate .strings files with classic comments and marks format
59
+ test_files: []