tex2id 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4dad00dd189b68420286a665d46d5747c7354e05b9daa9bfad36208e30732da2
4
+ data.tar.gz: 32f88f87b3bc74c14b0d465b70a8770ee9956cd35de5a0f54b7115a22a7c7c08
5
+ SHA512:
6
+ metadata.gz: 4d2d8a3771820624223bbbaaf080d9ad8bfba91994fcf368997bedba2e28885c29fcfad493b0b4c897073ebf8b6c13b6b6dd466ad1ad449bc23b49e599456aec
7
+ data.tar.gz: b1118c58521ca06af0727d433f01cfa6c73329520c5bb921e6807301568d559cf2c8807eac70a580ac8988bcb1b56e7d5e6151c09718c85712ed281c2c85b2f3
@@ -0,0 +1,43 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+ types:
9
+ - opened
10
+ - synchronize
11
+ - reopened
12
+
13
+ jobs:
14
+ test:
15
+ name: ${{ matrix.os }} ${{ matrix.ruby }}
16
+ runs-on: ${{ matrix.os }}
17
+ strategy:
18
+ fail-fast: false
19
+ matrix:
20
+ os:
21
+ - ubuntu-latest
22
+ - macos-latest
23
+ ruby:
24
+ - "3.1"
25
+ - "3.0"
26
+ - debug
27
+
28
+ steps:
29
+ - uses: actions/checkout@v3
30
+
31
+ - name: Set up Ruby
32
+ uses: ruby/setup-ruby@v1
33
+ with:
34
+ ruby-version: ${{ matrix.ruby }}
35
+
36
+ - run: bundle install
37
+
38
+ - run: rake spec
39
+
40
+ - run: rake build
41
+
42
+ - run: gem install pkg/*.gem
43
+ if: matrix.ruby != 'debug'
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format Fuubar
2
+ --color
3
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.3
4
+ - 2.1.7
5
+ - 2.0.0-p647
6
+ before_install: gem install bundler -v 1.10.6
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in tex2id.gemspec
4
+ gemspec
5
+
6
+ gem 'guard-rspec', require: false
data/Guardfile ADDED
@@ -0,0 +1,16 @@
1
+ guard :rspec, cmd: "bundle exec rspec" do
2
+ require "guard/rspec/dsl"
3
+ dsl = Guard::RSpec::Dsl.new(self)
4
+
5
+ # Feel free to open issues for suggestions and improvements
6
+
7
+ # RSpec files
8
+ rspec = dsl.rspec
9
+ watch(rspec.spec_helper) { rspec.spec_dir }
10
+ watch(rspec.spec_support) { rspec.spec_dir }
11
+ watch(rspec.spec_files)
12
+
13
+ # Ruby files
14
+ ruby = dsl.ruby
15
+ dsl.watch_spec_files_for(ruby.lib_files)
16
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Kenta Murata
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ [![Build Status](https://travis-ci.org/mrkn/tex2id.svg?branch=master)](https://travis-ci.org/mrkn/tex2id)
2
+
3
+ # Tex2id
4
+
5
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/tex2id`. To experiment with that code, run `bin/console` for an interactive prompt.
6
+
7
+ TODO: Delete this and the text above, and describe your gem
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ ```ruby
14
+ gem 'tex2id'
15
+ ```
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install tex2id
24
+
25
+ ## Usage
26
+
27
+ TODO: Write usage instructions here
28
+
29
+ ## Development
30
+
31
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
32
+
33
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
34
+
35
+ ## Contributing
36
+
37
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/tex2id.
38
+
39
+
40
+ ## License
41
+
42
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
43
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "tex2id"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
data/exe/tex2id ADDED
@@ -0,0 +1,5 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'tex2id/cli'
4
+
5
+ exit Tex2id::CLI.run(ARGV)
data/lib/tex2id/cli.rb ADDED
@@ -0,0 +1,79 @@
1
+ require 'tex2id'
2
+ require 'optparse'
3
+
4
+ class Tex2id::CLI
5
+ def self.run(argv)
6
+ self.new(argv).run
7
+ end
8
+
9
+ def initialize(argv)
10
+ @argv = argv
11
+ process_options
12
+ end
13
+
14
+ attr_reader :argv, :source_file, :output_file
15
+
16
+ def run
17
+ unless source_file
18
+ help($stdout)
19
+ return 1
20
+ end
21
+
22
+ converter = Tex2id::Converter.new(source, only_fix_md2inao: @only_fix_md2inao)
23
+ with_output_file_io do |io|
24
+ io.write converter.convert
25
+ end
26
+ 0
27
+ end
28
+
29
+ def help(io)
30
+ io.puts <<-END_HELP
31
+ Usage: #{$0} <source_file> [<output_file>]
32
+ END_HELP
33
+ end
34
+
35
+ private
36
+
37
+ def process_options
38
+ option_parser.parse!(argv)
39
+ @source_file = argv[0]
40
+ @output_file = argv[1]
41
+ end
42
+
43
+ def source
44
+ case source_file
45
+ when "-"
46
+ $stdin.set_encoding("Windows-31J:UTF-8")
47
+ $stdin.read
48
+ else
49
+ IO.read(source_file, mode: 'r:Windows-31J:UTF-8')
50
+ end
51
+ end
52
+
53
+ def with_output_file_io
54
+ begin
55
+ io = if output_file
56
+ File.open(output_file, 'w:Windows-31J:UTF-8')
57
+ else
58
+ $stdout.set_encoding("Windows-31J")
59
+ end
60
+ yield io
61
+ ensure
62
+ if output_file
63
+ io.close
64
+ else
65
+ $stdout.set_encoding("UTF-8")
66
+ end
67
+ end
68
+ end
69
+
70
+ def option_parser
71
+ OptionParser.new.tap do |opts|
72
+ opts.banner += " <source_file> [<output_file>]"
73
+ opts.version = Tex2id::VERSION
74
+ opts.separator ''
75
+ opts.separator 'Options:'
76
+ opts.on('-f', '--only-fix-md2inao', 'Only fix md2inao affected math') { |v| @only_fix_md2inao = v }
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,72 @@
1
+ module Tex2id::Converter::Constants
2
+ TOKEN_PATTERN = %r[
3
+ \\mathop\{\\mathrm\{([A-Za-z0-9]+)\}\}
4
+ # [0] roman mathop
5
+ |
6
+ \\([a-zA-Z]+)(?:\s|\{\})? # [1] macros
7
+ |
8
+ (\s+) # [2] whitespaces
9
+ |
10
+ _(?:
11
+ ([\w\d]) # [3] single character subscript
12
+ |
13
+ \{(
14
+ (?:\\\}|[^\}])+ # [4] multiple characters subscript
15
+ )\}
16
+ |
17
+ \\([a-zA-Z]+) # [5] single macro superscript
18
+ )
19
+ (?:
20
+ \^(?:
21
+ \{(
22
+ (?:\\\}|[^\}])+ # [6] multiple characters superscript
23
+ )\}
24
+ |
25
+ ([^{]) # [7] single character superscript
26
+ )
27
+ )?
28
+ |
29
+ \^(?:
30
+ \{(
31
+ (?:\\\}|[^\}])+ # [8] multiple characters superscript
32
+ )\}
33
+ |
34
+ ([^{]) # [9] single character superscript
35
+ )
36
+ |
37
+ (\') # [10] prime
38
+ |
39
+ ([-+](?:\d+(?:\.\d+)?|\\infty)) # [11] numbers
40
+ |
41
+ (.+?) # [12] other characters
42
+ ]mx
43
+
44
+ MACROS = {
45
+ 'dots' => '<cstyle:数式>...<cstyle:>',
46
+ 'cdots' => '<cstyle:数式><22EF><cstyle:>',
47
+ 'times' => '<cstyle:数式>×<cstyle:>',
48
+ 'quad' => '<cstyle:数式> <cstyle:>',
49
+ 'qquad' => '<cstyle:数式>  <cstyle:>',
50
+ 'alpha' => '<cstyle:数式><03B1><cstyle:>',
51
+ 'theta' => '<cstyle:数式><03B8><cstyle:>',
52
+ 'sigma' => '<cstyle:数式><F0BE><cstyle:>',
53
+ 'Delta' => '<cstyle:数式><ctk:-150><F0A2><ctk:><cstyle:>',
54
+ 'Theta' => '<cstyle:数式><F0A3><cstyle:>',
55
+ 'varepsilon' => '<cstyle:数式><F022><cstyle:>',
56
+ 'ell' => '<cstyle:数式><F060><cstyle:>',
57
+ 'infty' => '<cstyle:数式><F031><cstyle:>',
58
+ 'max' => '<cstyle:数式ローマン>max<cstyle:>',
59
+ 'min' => '<cstyle:数式ローマン>min<cstyle:>',
60
+ }.freeze
61
+
62
+ MACROS_IN_SUPERSCRIPT = {
63
+ "\\ell" => "<F060>",
64
+ }.freeze
65
+
66
+ CHAR_MAP = {
67
+ "'" => '<ctk:-300><F030><ctk:>',
68
+ "-" => "\u{2212}",
69
+ }.freeze
70
+
71
+ CHAR_MAP_PATTERN = /(#{Regexp.union(CHAR_MAP.keys)})/
72
+ end
@@ -0,0 +1,159 @@
1
+ class Tex2id::Converter
2
+ require 'tex2id/converter/constants'
3
+
4
+ include Constants
5
+
6
+ def initialize(source, only_fix_md2inao: false)
7
+ @source = source
8
+ @use_math = false
9
+ @only_fix_md2inao = only_fix_md2inao
10
+ @state_stack = []
11
+ @token_stack = []
12
+ end
13
+
14
+ def use_math? = @use_math
15
+
16
+ def convert
17
+ pass1 = check_use_math(@source)
18
+ if use_math?
19
+ convert_math(pass1)
20
+ else
21
+ pass1
22
+ end
23
+ end
24
+
25
+ def check_use_math(source)
26
+ source.sub(/\bUseMath:\s+(true|false)\b/m) {
27
+ @use_math = (Regexp.last_match[1] == "true")
28
+ ""
29
+ }
30
+ end
31
+
32
+ def convert_math(source)
33
+ pass1 = convert_display_math(source)
34
+ pass2 = convert_inline_math(pass1)
35
+ pass2
36
+ end
37
+
38
+ def convert_display_math(source)
39
+ source.gsub(/\$\$(.*?)\$\$/m) {
40
+ tex_source = fix_md2inao($1.strip)
41
+ next "$$#{tex_source}$$" if @only_fix_md2inao
42
+
43
+ if (m = /%filename:\s*(\S+)\s*\z/.match(tex_source))
44
+ "<CharStyle:赤字>画像を挿入:#{m[1]}<CharStyle:>"
45
+ else
46
+ [ "<pstyle:半行アキ>",
47
+ "<pstyle:数式>" + convert_tex_source(tex_source),
48
+ ].join("\n")
49
+ end
50
+ }.gsub(/<ParaStyle:本文>(<pstyle:半行アキ>)/) { $1 }
51
+ end
52
+
53
+ def convert_inline_math(source)
54
+ source.each_line.map { |line|
55
+ case line
56
+ when /\A<ParaStyle:リスト>/,
57
+ /\A<ParaStyle:リスト白文字>/
58
+ # do nothing
59
+ else
60
+ inline_commands = []
61
+ line.gsub!(/<CharStyle:コマンド>[^<]+<CharStyle:>/) do |matched|
62
+ id = inline_commands.length
63
+ inline_commands << matched
64
+ "<tex2id_inline_commands[#{id}]>"
65
+ end
66
+ line.gsub!(/\$(.*?)\$/) do
67
+ tex_source = fix_md2inao($1.strip)
68
+ if @only_fix_md2inao
69
+ "$" + tex_source + "$"
70
+ else
71
+ convert_tex_source(tex_source)
72
+ end
73
+ end
74
+ line.gsub!(/<tex2id_inline_commands\[(\d+)\]>/) do
75
+ inline_commands[$1.to_i]
76
+ end
77
+ end
78
+ line
79
+ }.join('')
80
+ end
81
+
82
+ def convert_tex_source(source)
83
+ buf = ""
84
+ result = ""
85
+
86
+ source.scan(TOKEN_PATTERN) do |token|
87
+ if buf.length > 0 && token[12].nil?
88
+ result << process_normal_characters(buf)
89
+ buf.clear
90
+ end
91
+
92
+ case
93
+ when (tok = token[0])
94
+ result << "<cstyle:数式ローマン>" + tok + "<cstyle:>"
95
+ when (tok = token[1])
96
+ result << process_macros(tok)
97
+ when (tok = token[2])
98
+ result << tok
99
+ when (tok = token[3] || token[4] || token[5])
100
+ tok = process_macros(tok) if token[5]
101
+ if (tok2 = token[6] || token[7])
102
+ result << process_superscript_on_subscript(tok2, tok)
103
+ else
104
+ result << "<cstyle:数式下付き>" + tok + "<cstyle:>"
105
+ end
106
+ when (tok = token[8] || token[9] || token[10])
107
+ result << "<cstyle:数式上付き>" + apply_char_map(tok) + "<cstyle:>"
108
+ when (tok = token[11])
109
+ result << process_number(tok)
110
+ when (tok = token[12])
111
+ buf << tok
112
+ end
113
+ end
114
+
115
+ result << process_normal_characters(buf) if buf.length > 0
116
+
117
+ result
118
+ end
119
+
120
+ def apply_char_map(s)
121
+ s = s.gsub(CHAR_MAP_PATTERN) do |matched|
122
+ CHAR_MAP[matched] || matched
123
+ end
124
+ end
125
+
126
+ def process_normal_characters(s)
127
+ s = apply_char_map(s)
128
+ "<cstyle:数式>" + s + "<cstyle:>"
129
+ end
130
+
131
+ def process_superscript_on_subscript(superscript, subscript)
132
+ converted_superscript = superscript.dup
133
+ MACROS_IN_SUPERSCRIPT.each do |key, value|
134
+ converted_superscript.gsub!(key, value)
135
+ end
136
+ "<cstyle:数式下付き><cr:1><crstr:#{converted_superscript}>#{subscript}<cr:><crstr:><cstyle:>"
137
+ end
138
+
139
+ def process_macros(s)
140
+ MACROS[s] || "\\#{s}"
141
+ end
142
+
143
+ def process_number(s)
144
+ # TODO: generalize the following
145
+ s.gsub!(/[-\u{2212}]\\infty/) {|x| "<ctk:-150>\u{2212}<ctk:><F031>" }
146
+ s.gsub!(/\\infty/) {|x| '<F031>' }
147
+ if s[0] == '-' || s[0] == "\u{2212}"
148
+ s[0,1] = "<ctk:-300>\u{2212}<ctk:>"
149
+ end
150
+ "<cstyle:数式>#{s}<cstyle:>"
151
+ end
152
+
153
+ def fix_md2inao(source)
154
+ source.dup.tap do |s|
155
+ s.gsub!(/<CharStyle:(?:イタリック(?:(変形斜体))?)?>/, '_')
156
+ s.gsub!(/(?:<005C>){2}/, '\\')
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,3 @@
1
+ module Tex2id
2
+ VERSION = "1.4.0"
3
+ end
data/lib/tex2id.rb ADDED
@@ -0,0 +1,10 @@
1
+ require "tex2id/version"
2
+
3
+ module Tex2id
4
+ def self.convert(source_filename)
5
+ source = IO.read(source_filename, mode: 'r:Windows-31J:UTF-8')
6
+ Converter.new(source).convert
7
+ end
8
+ end
9
+
10
+ require "tex2id/converter"
data/tex2id.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'tex2id/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "tex2id"
8
+ spec.version = Tex2id::VERSION
9
+ spec.authors = ["Kenta Murata"]
10
+ spec.email = ["mrkn@cookpad.com"]
11
+
12
+ spec.summary = %q{TeX 2 InDesign}
13
+ spec.description = %q{Convert TeX notation to InDesign markup.}
14
+ spec.homepage = "https://github.com/mrkn/tex2id"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler"
23
+ spec.add_development_dependency "rake"
24
+ spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "fuubar"
26
+
27
+ spec.required_ruby_version = '>= 3.0.0'
28
+ end
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tex2id
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.4.0
5
+ platform: ruby
6
+ authors:
7
+ - Kenta Murata
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-08-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: fuubar
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Convert TeX notation to InDesign markup.
70
+ email:
71
+ - mrkn@cookpad.com
72
+ executables:
73
+ - tex2id
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".github/workflows/ci.yml"
78
+ - ".gitignore"
79
+ - ".rspec"
80
+ - ".travis.yml"
81
+ - Gemfile
82
+ - Guardfile
83
+ - LICENSE.txt
84
+ - README.md
85
+ - Rakefile
86
+ - bin/console
87
+ - bin/setup
88
+ - exe/tex2id
89
+ - lib/tex2id.rb
90
+ - lib/tex2id/cli.rb
91
+ - lib/tex2id/converter.rb
92
+ - lib/tex2id/converter/constants.rb
93
+ - lib/tex2id/version.rb
94
+ - tex2id.gemspec
95
+ homepage: https://github.com/mrkn/tex2id
96
+ licenses:
97
+ - MIT
98
+ metadata: {}
99
+ post_install_message:
100
+ rdoc_options: []
101
+ require_paths:
102
+ - lib
103
+ required_ruby_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: 3.0.0
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ requirements: []
114
+ rubygems_version: 3.3.13
115
+ signing_key:
116
+ specification_version: 4
117
+ summary: TeX 2 InDesign
118
+ test_files: []