yury-typograph 0.1.1
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.
- data/.gitignore +2 -0
- data/README +1 -0
- data/Rakefile +13 -0
- data/VERSION +1 -0
- data/lib/typograph.rb +23 -0
- data/lib/typograph/rules.rb +64 -0
- data/lib/typograph/rules/dash_rules.rb +41 -0
- data/lib/typograph/rules/etc_rules.rb +31 -0
- data/lib/typograph/rules/math_rules.rb +33 -0
- data/lib/typograph/rules/punchmark_rules.rb +45 -0
- data/lib/typograph/rules/quote_rules.rb +24 -0
- data/lib/typograph/string_sub_each.rb +20 -0
- data/test/typograph_test.rb +90 -0
- data/typograph.gemspec +52 -0
- metadata +67 -0
data/.gitignore
ADDED
data/README
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Ruby port of http://emuravjev.ru/works/tg php typograph
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
begin
|
2
|
+
require 'jeweler'
|
3
|
+
Jeweler::Tasks.new do |gemspec|
|
4
|
+
gemspec.name = "typograph"
|
5
|
+
gemspec.summary = "ruby html typograph"
|
6
|
+
gemspec.description = "apply some basic typography rules to text"
|
7
|
+
gemspec.email = "yury.korolev@gmail.com"
|
8
|
+
gemspec.homepage = "http://github.com/yury/typograph"
|
9
|
+
gemspec.authors = ["Yury Korolev"]
|
10
|
+
end
|
11
|
+
rescue LoadError
|
12
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
13
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.1
|
data/lib/typograph.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Typograph
|
2
|
+
autoload :Rules, 'typograph/rules'
|
3
|
+
|
4
|
+
@@rules = [Rules::QuoteRules.new,
|
5
|
+
Rules::DashRules.new,
|
6
|
+
Rules::PunchmarkRules.new,
|
7
|
+
Rules::MathRules.new,
|
8
|
+
Rules::EtcRules.new]
|
9
|
+
|
10
|
+
def self.run! text
|
11
|
+
for rule in @@rules
|
12
|
+
next if rule.disabled
|
13
|
+
text = rule.parse text
|
14
|
+
end
|
15
|
+
text
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.run text
|
19
|
+
self.run! text.dup
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
require 'typograph/string_sub_each'
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Typograph
|
2
|
+
module Rules
|
3
|
+
|
4
|
+
autoload :DashRules, 'typograph/rules/dash_rules'
|
5
|
+
autoload :EtcRules, 'typograph/rules/etc_rules'
|
6
|
+
autoload :MathRules, 'typograph/rules/math_rules'
|
7
|
+
autoload :PunchmarkRules, 'typograph/rules/punchmark_rules'
|
8
|
+
autoload :QuoteRules, 'typograph/rules/quote_rules'
|
9
|
+
|
10
|
+
# base class for all rules in typograph
|
11
|
+
class Rule
|
12
|
+
|
13
|
+
NBSP = " "
|
14
|
+
QUOTE_FIRS_OPEN = '«';
|
15
|
+
QUOTE_FIRS_CLOSE = '»';
|
16
|
+
QUOTE_CRAWSE_OPEN = '„';
|
17
|
+
QUOTE_CRAWSE_CLOSE = '“';
|
18
|
+
|
19
|
+
attr_accessor :disabled
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
@disabled = false
|
23
|
+
@rules = []
|
24
|
+
end
|
25
|
+
|
26
|
+
def add name, opts = {}
|
27
|
+
@rules << {:name => name, :opts => opts}
|
28
|
+
end
|
29
|
+
|
30
|
+
def pre_parse text
|
31
|
+
text
|
32
|
+
end
|
33
|
+
|
34
|
+
def post_parse text
|
35
|
+
text
|
36
|
+
end
|
37
|
+
|
38
|
+
def parse text
|
39
|
+
return text if self.disabled
|
40
|
+
|
41
|
+
text = self.pre_parse text
|
42
|
+
|
43
|
+
@rules.each do |rule|
|
44
|
+
opts = rule[:opts]
|
45
|
+
next if opts[:disabled]
|
46
|
+
replacement = opts[:replacement]
|
47
|
+
if replacement.class == Proc
|
48
|
+
text.sub_each! opts[:pattern], &replacement
|
49
|
+
else
|
50
|
+
text.gsub! opts[:pattern], opts[:replacement]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
self.post_parse text
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.run text
|
58
|
+
t = self.new
|
59
|
+
t.parse text
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Typograph
|
2
|
+
module Rules
|
3
|
+
|
4
|
+
class DashRules < Rule
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
super
|
8
|
+
|
9
|
+
add :m_dash,
|
10
|
+
:pattern => /([a-zа-я0-9]+|,|:|\)|»|\|")(\040|\t)(\-|—)(\s|$|<)/u,
|
11
|
+
:replacement => '\1 —\4'
|
12
|
+
|
13
|
+
add :m_dash_2,
|
14
|
+
:pattern => /(\n|\r|^|>)(\-|—)(\t|\040)/,
|
15
|
+
:replacement => '\1— '
|
16
|
+
|
17
|
+
add :m_dash_3,
|
18
|
+
:pattern => /(\.|!|\?|…)(\040|\t| )(\-|—)(\040|\t| )/,
|
19
|
+
:replacement => '\1 — '
|
20
|
+
|
21
|
+
add :years,
|
22
|
+
:pattern => /(с|по|период|середины|начала|начало|конца|конец|половины|в|между)(\s+| )([\d]{4})(-)([\d]{4})(г|гг)?/eui,
|
23
|
+
:replacement => lambda {|m| "#{m[1]}#{m[2]}#{build_years(m[3],m[5],m[4])}#{m[6]}" }
|
24
|
+
|
25
|
+
add :iz_za_pod,
|
26
|
+
:pattern => /(\s| |>)(из)(\040|\t| )\-?(за|под)([\.,!\?:;]|\040| )/uie,
|
27
|
+
:replacement => lambda {|m| "#{m[1] == NBSP ? " " : m[1]}#{m[2]}-#{m[4]}#{m[5] == NBSP ? " " : m[5]}" }
|
28
|
+
|
29
|
+
add :to_libo_nibud,
|
30
|
+
:pattern => /(\s|^| |>)(кто|кем|когда|зачем|почему|как|что|чем|где|чего|кого)\-?(\040|\t| )\-?(то|либо|нибудь)([\.,!?;]|\040| |$)/ui,
|
31
|
+
:replacement => lambda {|m| "#{m[1] == NBSP ? " " : m[1]}#{m[2]}-#{m[4]}#{m[5] == NBSP ? " " : m[5]}" }
|
32
|
+
end
|
33
|
+
|
34
|
+
def build_years start_date, end_date, sep
|
35
|
+
start_date = start_date.to_i
|
36
|
+
end_date = end_date.to_i
|
37
|
+
start_date >= end_date ? "#{start_date}#{sep}#{end_date}" : "#{start_date}–#{end_date}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Typograph
|
2
|
+
module Rules
|
3
|
+
|
4
|
+
class EtcRules < Rule
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
super
|
8
|
+
add :tm_replace,
|
9
|
+
:pattern => /([\040\t])?\(tm\)/i,
|
10
|
+
:replacement => '™'
|
11
|
+
|
12
|
+
# TODO: encrypted tags
|
13
|
+
#add :r_sign_replace,
|
14
|
+
# :pattern => /\(r\)/ei
|
15
|
+
|
16
|
+
|
17
|
+
add :copy_replace,
|
18
|
+
:pattern => /\((c|с)\)\s+/iu,
|
19
|
+
:replacement => '© '
|
20
|
+
|
21
|
+
add :acute_accent,
|
22
|
+
:pattern => /(у|е|ы|а|о|э|я|и|ю|ё)`(\w)/iu,
|
23
|
+
:replacement => '\1́\2'
|
24
|
+
|
25
|
+
#add :auto_links
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Typograph
|
2
|
+
module Rules
|
3
|
+
|
4
|
+
class MathRules < Rule
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
super
|
8
|
+
|
9
|
+
add :auto_times_x,
|
10
|
+
:pattern => /(\d+)(\040*)(x|х)(\040*)(\d+)/u,
|
11
|
+
:replacement => '\1×\5'
|
12
|
+
|
13
|
+
add :frac_1, # replaces 1/2 and 1/4
|
14
|
+
:pattern => /(\D)1\/(2|4)(\D)/,
|
15
|
+
:replacement => '\1&frac1\2;\3'
|
16
|
+
|
17
|
+
add :frac_3, # replaces 3/4
|
18
|
+
:pattern => /(\D)3\/4(\D)/,
|
19
|
+
:replacement => '\1¾\2'
|
20
|
+
|
21
|
+
add :not_equal,
|
22
|
+
:pattern => /!=/,
|
23
|
+
:replacement => '≠'
|
24
|
+
|
25
|
+
add :plus_minus,
|
26
|
+
:pattern => /\+-/,
|
27
|
+
:replacement => '±'
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Typograph
|
2
|
+
module Rules
|
3
|
+
|
4
|
+
class PunchmarkRules < Rule
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
super
|
8
|
+
|
9
|
+
add :auto_comma,
|
10
|
+
:pattern => /([a-zа-я])(\s| )(но|а)(\s| )/iu,
|
11
|
+
:replacement => '\1,\2\3\4'
|
12
|
+
|
13
|
+
add :punctuation_marks_limit,
|
14
|
+
:pattern => /([!.?]){4,}/,
|
15
|
+
:replacement => '\1\1\1'
|
16
|
+
|
17
|
+
add :punctuation_marks_base_limit,
|
18
|
+
:pattern => /([,:;]){2,}/,
|
19
|
+
:replacement => '\1'
|
20
|
+
|
21
|
+
add :hellip,
|
22
|
+
:pattern => /\.\.+/,
|
23
|
+
:replacement => '…'
|
24
|
+
|
25
|
+
add :eng_apostrophe,
|
26
|
+
:pattern => /(\s|^|>)([a-z]{2,})'([a-z]+)/i,
|
27
|
+
:replacement => '\1\2’\3'
|
28
|
+
|
29
|
+
add :fix_pmarks,
|
30
|
+
:pattern => /([a-zа-я0-9])(!|\.|\?){2}(\s|$|<)/iu,
|
31
|
+
:replacement => '\1\2\3'
|
32
|
+
|
33
|
+
add :fix_l_bracket,
|
34
|
+
:pattern => /(\()(\040|\t)+/,
|
35
|
+
:replacement => '\1'
|
36
|
+
|
37
|
+
add :fix_r_bracket,
|
38
|
+
:pattern => /(\040|\t)+(\))/,
|
39
|
+
:replacement => '\2'
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Typograph
|
2
|
+
module Rules
|
3
|
+
|
4
|
+
class QuoteRules < Rule
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
super
|
8
|
+
|
9
|
+
add :quotes_outside_a,
|
10
|
+
:pattern => /(<%%__.+?>)"(.+?)"(<\/%%__.+?>)/s,
|
11
|
+
:replacement => '"\1\2\3"'
|
12
|
+
|
13
|
+
add :open_quote,
|
14
|
+
:pattern => /(^|\(|\s)("|\\")(\S+)/iue,
|
15
|
+
:replacement => "\\1#{QUOTE_FIRS_OPEN}\\3"
|
16
|
+
|
17
|
+
add :close_quote,
|
18
|
+
:pattern => /([a-zа-я0-9]|\.|…|!|\?)("|\\")+(\.|…|;|:|\?|!|,|\s|\)|<\/|$)/uie,
|
19
|
+
:replacement => "\\1#{QUOTE_FIRS_CLOSE}\\3"
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "strscan"
|
2
|
+
|
3
|
+
class String
|
4
|
+
def sub_each regexp, &block
|
5
|
+
return unless block_given?
|
6
|
+
scanner = StringScanner.new self
|
7
|
+
while scanner.scan(regexp)
|
8
|
+
pre_match = scanner.pre_match
|
9
|
+
replacement = block[scanner]
|
10
|
+
new_pos = pre_match.length + replacement.length
|
11
|
+
scanner.string = pre_match << replacement << scanner.post_match
|
12
|
+
scanner.pos = new_pos
|
13
|
+
end
|
14
|
+
scanner.string
|
15
|
+
end
|
16
|
+
|
17
|
+
def sub_each! regexp, &block
|
18
|
+
self.replace(self.sub_each(regexp, &block))
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
|
3
|
+
require "test/unit"
|
4
|
+
require "typograph"
|
5
|
+
|
6
|
+
class TypographTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
include Typograph
|
9
|
+
include Typograph::Rules
|
10
|
+
|
11
|
+
def test_dash_rules
|
12
|
+
assert_equal "как-то", DashRules.run("как-то")
|
13
|
+
assert_equal "привет — привет", DashRules.run("привет - привет")
|
14
|
+
assert_equal "с 2000–3000", DashRules.run("с 2000-3000")
|
15
|
+
assert_equal "изза", DashRules.run("изза")
|
16
|
+
assert_equal " из-за ", DashRules.run(" из -за ")
|
17
|
+
assert_equal " как-то ", DashRules.run(" как- то ")
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_etc_rules
|
21
|
+
assert_equal "anjlab™", EtcRules.run("anjlab(tm)")
|
22
|
+
assert_equal "anjlab© ", EtcRules.run("anjlab(c) ")
|
23
|
+
assert_equal "приве́т", EtcRules.run("приве`т")
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_math_rules
|
27
|
+
assert_equal "2×5", MathRules.run("2x5")
|
28
|
+
assert_equal " ½ ", MathRules.run(" 1/2 ")
|
29
|
+
assert_equal " ¼ ", MathRules.run(" 1/4 ")
|
30
|
+
assert_equal " ¾ ", MathRules.run(" 3/4 ")
|
31
|
+
assert_equal " ¾≠½ ", MathRules.run(" 3/4!=1/2 ")
|
32
|
+
assert_equal " ¾ + ¼ + ½ ", MathRules.run(" 3/4 + 1/4 + 1/2 ")
|
33
|
+
assert_equal "±", MathRules.run("+-")
|
34
|
+
assert_equal "±5", MathRules.run("+-5")
|
35
|
+
end
|
36
|
+
|
37
|
+
# punchamark rules tests
|
38
|
+
def test_auto_comma
|
39
|
+
assert_equal "вы будете, а я нет", PunchmarkRules.run("вы будете а я нет")
|
40
|
+
assert_equal "вы будете, а я нет", PunchmarkRules.run("вы будете, а я нет")
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_punctuation_marks_limit
|
44
|
+
assert_equal "hello!!!", PunchmarkRules.run("hello!!!!!!!!!!!!!!!!!!")
|
45
|
+
assert_equal "WTF???", PunchmarkRules.run("WTF???????")
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_punctuation_marks_base_limit
|
49
|
+
assert_equal ":", PunchmarkRules.run(":::")
|
50
|
+
assert_equal ",", PunchmarkRules.run(",,")
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_hellip
|
54
|
+
assert_equal "…", PunchmarkRules.run("..")
|
55
|
+
assert_equal "…", PunchmarkRules.run("...")
|
56
|
+
assert_equal "…", PunchmarkRules.run("....")
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_eng_apostrophe
|
60
|
+
assert_equal "she’s", PunchmarkRules.run("she's")
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_fix_brackets
|
64
|
+
assert_equal "(круто)", PunchmarkRules.run("( круто )")
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_quote_rules
|
68
|
+
assert_equal "«как-то»", QuoteRules.run('"как-то"')
|
69
|
+
assert_equal "«как-то» «как-то»", QuoteRules.run('"как-то" "как-то"')
|
70
|
+
assert_equal "привет всем «крутым» штукам", QuoteRules.run('привет всем "крутым" штукам')
|
71
|
+
assert_equal "«как-то «как-то»", QuoteRules.run('"как-то "как-то""')
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_complex_processing
|
75
|
+
src = '"Кока-Кола" впервые появилась в СССР в 1979 году в
|
76
|
+
ходе подготовки Олимпийских игр в Москве. Её автор -
|
77
|
+
фармацевт Джон Стит Пембертон, бывший офицер американской
|
78
|
+
Армии конфедерации!!!! ( сам напиток был придуман в 1886 году
|
79
|
+
в штате Джорджия ) и дальше какая-то байда....'
|
80
|
+
|
81
|
+
dest = '«Кока-Кола» впервые появилась в СССР в 1979 году в
|
82
|
+
ходе подготовки Олимпийских игр в Москве. Её автор —
|
83
|
+
фармацевт Джон Стит Пембертон, бывший офицер американской
|
84
|
+
Армии конфедерации!!! (сам напиток был придуман в 1886 году
|
85
|
+
в штате Джорджия) и дальше какая-то байда…'
|
86
|
+
|
87
|
+
assert_equal dest, Typograph.run(src)
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
data/typograph.gemspec
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{typograph}
|
8
|
+
s.version = "0.1.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Yury Korolev"]
|
12
|
+
s.date = %q{2009-08-25}
|
13
|
+
s.description = %q{apply some basic typography rules to text}
|
14
|
+
s.email = %q{yury.korolev@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".gitignore",
|
20
|
+
"README",
|
21
|
+
"Rakefile",
|
22
|
+
"VERSION",
|
23
|
+
"lib/typograph.rb",
|
24
|
+
"lib/typograph/rules.rb",
|
25
|
+
"lib/typograph/rules/dash_rules.rb",
|
26
|
+
"lib/typograph/rules/etc_rules.rb",
|
27
|
+
"lib/typograph/rules/math_rules.rb",
|
28
|
+
"lib/typograph/rules/punchmark_rules.rb",
|
29
|
+
"lib/typograph/rules/quote_rules.rb",
|
30
|
+
"lib/typograph/string_sub_each.rb",
|
31
|
+
"test/typograph_test.rb",
|
32
|
+
"typograph.gemspec"
|
33
|
+
]
|
34
|
+
s.homepage = %q{http://github.com/yury/typograph}
|
35
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
36
|
+
s.require_paths = ["lib"]
|
37
|
+
s.rubygems_version = %q{1.3.5}
|
38
|
+
s.summary = %q{ruby html typograph}
|
39
|
+
s.test_files = [
|
40
|
+
"test/typograph_test.rb"
|
41
|
+
]
|
42
|
+
|
43
|
+
if s.respond_to? :specification_version then
|
44
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
45
|
+
s.specification_version = 3
|
46
|
+
|
47
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
48
|
+
else
|
49
|
+
end
|
50
|
+
else
|
51
|
+
end
|
52
|
+
end
|
metadata
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yury-typograph
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Yury Korolev
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-08-25 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: apply some basic typography rules to text
|
17
|
+
email: yury.korolev@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
files:
|
25
|
+
- .gitignore
|
26
|
+
- README
|
27
|
+
- Rakefile
|
28
|
+
- VERSION
|
29
|
+
- lib/typograph.rb
|
30
|
+
- lib/typograph/rules.rb
|
31
|
+
- lib/typograph/rules/dash_rules.rb
|
32
|
+
- lib/typograph/rules/etc_rules.rb
|
33
|
+
- lib/typograph/rules/math_rules.rb
|
34
|
+
- lib/typograph/rules/punchmark_rules.rb
|
35
|
+
- lib/typograph/rules/quote_rules.rb
|
36
|
+
- lib/typograph/string_sub_each.rb
|
37
|
+
- test/typograph_test.rb
|
38
|
+
- typograph.gemspec
|
39
|
+
has_rdoc: false
|
40
|
+
homepage: http://github.com/yury/typograph
|
41
|
+
licenses:
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options:
|
44
|
+
- --charset=UTF-8
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: "0"
|
52
|
+
version:
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "0"
|
58
|
+
version:
|
59
|
+
requirements: []
|
60
|
+
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 1.3.5
|
63
|
+
signing_key:
|
64
|
+
specification_version: 3
|
65
|
+
summary: ruby html typograph
|
66
|
+
test_files:
|
67
|
+
- test/typograph_test.rb
|