typographical 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +100 -0
- data/_includes/analytics.html +6 -0
- data/_includes/copyenrich-hook.html +36 -0
- data/_includes/footer.html +10 -0
- data/_includes/head.html +32 -0
- data/_includes/navigation.html +15 -0
- data/_includes/related.html +34 -0
- data/_includes/share.html +21 -0
- data/_layouts/default.html +18 -0
- data/_layouts/home.html +31 -0
- data/_layouts/page.html +15 -0
- data/_layouts/post.html +60 -0
- data/_sass/typographical.scss +10 -0
- data/_sass/typographical/_base.scss +73 -0
- data/_sass/typographical/_catalogue.scss +39 -0
- data/_sass/typographical/_code.scss +46 -0
- data/_sass/typographical/_layout.scss +106 -0
- data/_sass/typographical/_multipage.scss +36 -0
- data/_sass/typographical/_pagination.scss +44 -0
- data/_sass/typographical/_post.scss +63 -0
- data/_sass/typographical/_syntax.scss +65 -0
- data/_sass/typographical/_tweaks.scss +147 -0
- data/_sass/typographical/_variables.scss +32 -0
- data/assets/apple-touch-icon.png +0 -0
- data/assets/copyenrich/copyenrich-filter.js +164 -0
- data/assets/copyenrich/copyenrich.js +127 -0
- data/assets/favicon-16x16.png +0 -0
- data/assets/favicon-32x32.png +0 -0
- data/assets/main.scss +5 -0
- metadata +184 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
// Colors
|
2
|
+
$default-shade: #222;
|
3
|
+
$default-color: #222;
|
4
|
+
$default-tint: #aaa;
|
5
|
+
$grey-1: #979797;
|
6
|
+
$grey-2: #e5e5e5;
|
7
|
+
$grey-3: #f9f9f9;
|
8
|
+
$white: #fff;
|
9
|
+
$blue: #4a9ae1;
|
10
|
+
$shadow-color: rgba(0, 0, 0, .2);
|
11
|
+
$code-color: #bf616a;
|
12
|
+
$accent-color: #ffd900;
|
13
|
+
$base-font-size: 1.3rem;
|
14
|
+
|
15
|
+
// Fonts
|
16
|
+
$serif-primary: Alegreya, 'Times New Roman', Times, serif;
|
17
|
+
$serif-secondary: Alegreya, Palatino, 'Palatino LT STD', 'Palatino Linotype', 'Book Antiqua', 'Georgia', serif;
|
18
|
+
$sans-serif: 'Alegreya Sans', Helvetica, Arial, sans-serif;
|
19
|
+
$monospaced: 'Fira Mono', Menlo, Consolas, monospace;
|
20
|
+
$sc-font: 'Alegreya SC';
|
21
|
+
|
22
|
+
@mixin box-sizing($type: border-box) {
|
23
|
+
-webkit-box-sizing: $type;
|
24
|
+
-moz-box-sizing: $type;
|
25
|
+
box-sizing: $type;
|
26
|
+
}
|
27
|
+
|
28
|
+
@mixin transition($args...) {
|
29
|
+
-webkit-transition: $args;
|
30
|
+
-moz-transition: $args;
|
31
|
+
transition: $args;
|
32
|
+
}
|
Binary file
|
@@ -0,0 +1,164 @@
|
|
1
|
+
/**
|
2
|
+
*
|
3
|
+
* Default filter to prepend and append Text.
|
4
|
+
*
|
5
|
+
*/
|
6
|
+
(function( window ) {
|
7
|
+
|
8
|
+
// create filter for prefix and postfix
|
9
|
+
window.filter_prefix_postfix = function( selection ) {
|
10
|
+
|
11
|
+
// load filter configuration
|
12
|
+
var copyenrich = window.copyenrich || {};
|
13
|
+
var clipboard_prefix = copyenrich.filter_prefix || '';
|
14
|
+
var clipboard_postfix = copyenrich.filter_postfix || '';
|
15
|
+
|
16
|
+
return clipboard_prefix + selection + clipboard_postfix;
|
17
|
+
};
|
18
|
+
|
19
|
+
})( window );
|
20
|
+
|
21
|
+
/**
|
22
|
+
*
|
23
|
+
* Minimal length required to perform text enrichment.
|
24
|
+
* If the minimum length is not reached, function will return FALSE
|
25
|
+
* which results in cancelation of all changes made and return the
|
26
|
+
* originally selected text.
|
27
|
+
*
|
28
|
+
*/
|
29
|
+
(function( window ) {
|
30
|
+
|
31
|
+
window.filter_minlength = function( selection ) {
|
32
|
+
|
33
|
+
// load filter configuration
|
34
|
+
var copyenrich = window.copyenrich || {};
|
35
|
+
var minlength = copyenrich.filter_minlength || 20;
|
36
|
+
|
37
|
+
if ( selection.length < minlength ) {
|
38
|
+
// Boolean FALSE means that no changes will be done at all.
|
39
|
+
return false;
|
40
|
+
};
|
41
|
+
|
42
|
+
return selection;
|
43
|
+
};
|
44
|
+
|
45
|
+
})( window );
|
46
|
+
|
47
|
+
/**
|
48
|
+
*
|
49
|
+
* User defined filters. They can be loaded from external file.
|
50
|
+
*
|
51
|
+
*/
|
52
|
+
(function( window ) {
|
53
|
+
|
54
|
+
window.filter_source_url = function( selection ) {
|
55
|
+
|
56
|
+
// load filter configuration
|
57
|
+
var copyenrich = window.copyenrich || {};
|
58
|
+
var postfix = copyenrich.filter_source_url || '';
|
59
|
+
|
60
|
+
return selection + postfix + location.href;
|
61
|
+
};
|
62
|
+
|
63
|
+
})( window );
|
64
|
+
|
65
|
+
/**
|
66
|
+
*
|
67
|
+
* Tracks the copied text with Google Analytics.
|
68
|
+
*
|
69
|
+
*/
|
70
|
+
(function( window ) {
|
71
|
+
|
72
|
+
window._gaq = window._gaq || [];
|
73
|
+
window.filter_analytics = function( selection ) {
|
74
|
+
// load filter configuration
|
75
|
+
var copyenrich = window.copyenrich || {};
|
76
|
+
var track_name = copyenrich.filter_analytics_name;
|
77
|
+
var track_value = copyenrich.filter_analytics_value;
|
78
|
+
|
79
|
+
window._gaq.push(['_trackEvent', track_name, track_value, selection]);
|
80
|
+
// return selection without modification
|
81
|
+
return selection;
|
82
|
+
};
|
83
|
+
|
84
|
+
})( window );
|
85
|
+
|
86
|
+
/**
|
87
|
+
*
|
88
|
+
* Inserts an Ad to the selection if certain words have been selected.
|
89
|
+
* Context based Ad insetion.
|
90
|
+
*
|
91
|
+
*/
|
92
|
+
(function( window ) {
|
93
|
+
|
94
|
+
window.filter_wordmatch_ad = function( selection ) {
|
95
|
+
|
96
|
+
// load filter configuration
|
97
|
+
var copyenrich = window.copyenrich || {};
|
98
|
+
// if these words are inside the selection, AdText will be inserted
|
99
|
+
var signal_words = copyenrich.filter_wordmatch_ad_signal_words || [ ];
|
100
|
+
var ad_text = copyenrich.filter_wordmatch_ad || '';
|
101
|
+
|
102
|
+
// try to match words inside selected text
|
103
|
+
var word = '';
|
104
|
+
var word_match = false;
|
105
|
+
|
106
|
+
var split = selection.split( ' ' );
|
107
|
+
for( var w = 0; w < split.length; w++ ) {
|
108
|
+
word = split[w].trim( ).replace( /[\.,\-;:\n\r]+/gi, '' );
|
109
|
+
|
110
|
+
for( var sw = 0; sw < signal_words.length; sw++ ) {
|
111
|
+
if ( signal_words[sw] == word ) {
|
112
|
+
word_match = true;
|
113
|
+
}
|
114
|
+
}
|
115
|
+
|
116
|
+
if ( word_match === true ) {
|
117
|
+
return selection + ad_text;
|
118
|
+
}
|
119
|
+
}
|
120
|
+
|
121
|
+
return selection;
|
122
|
+
};
|
123
|
+
|
124
|
+
})( window );
|
125
|
+
|
126
|
+
/**
|
127
|
+
*
|
128
|
+
* Enables script if at least one keyword is inside the selected text.
|
129
|
+
*
|
130
|
+
*/
|
131
|
+
(function( window ) {
|
132
|
+
|
133
|
+
window.filter_wordmatch_enabled = function( selection ) {
|
134
|
+
|
135
|
+
// load filter configuration
|
136
|
+
var copyenrich = window.copyenrich || {};
|
137
|
+
// if these words are inside the selection, script will be enabled
|
138
|
+
var signal_words = copyenrich.filter_wordmatch_enabled_signal_words || [ ];
|
139
|
+
|
140
|
+
// try to match words inside selected text
|
141
|
+
var word = '';
|
142
|
+
var word_match = false;
|
143
|
+
|
144
|
+
var split = selection.split( ' ' );
|
145
|
+
for( var w = 0; w < split.length; w++ ) {
|
146
|
+
word = split[w].trim( ).replace( /[\.,\-;:\n\r]+/gi, '' );
|
147
|
+
|
148
|
+
for( var sw = 0; sw < signal_words.length; sw++ ) {
|
149
|
+
if ( signal_words[sw] == word ) {
|
150
|
+
word_match = true;
|
151
|
+
}
|
152
|
+
}
|
153
|
+
}
|
154
|
+
|
155
|
+
// if signal words not found, disable all changes made by the script
|
156
|
+
if ( word_match !== true ) {
|
157
|
+
// Boolean FALSE means that no changes will be done at all.
|
158
|
+
return false;
|
159
|
+
}
|
160
|
+
|
161
|
+
return selection;
|
162
|
+
};
|
163
|
+
|
164
|
+
})( window );
|
@@ -0,0 +1,127 @@
|
|
1
|
+
/**
|
2
|
+
// Copyright (c) 2014 AKM3 GmbH
|
3
|
+
// http://www.akm3.com
|
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.
|
22
|
+
*/
|
23
|
+
(function( d, w ) {
|
24
|
+
|
25
|
+
// Version
|
26
|
+
w.version = '1.4';
|
27
|
+
|
28
|
+
// preparing filter array where filter calbacks are stored
|
29
|
+
w.copyenrichFilters = w.copyenrichFilters || [];
|
30
|
+
|
31
|
+
// register "copy" event
|
32
|
+
if ( w.addEventListener ) {
|
33
|
+
d.body.addEventListener( "copy", intercept_clipboard, true );
|
34
|
+
}
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Creates helper element, copies selected and modified text inthere
|
38
|
+
* and creates new selection with the new text.
|
39
|
+
*/
|
40
|
+
function intercept_clipboard( ) {
|
41
|
+
|
42
|
+
var clipboard_text = get_selection( );
|
43
|
+
var modified_clipboard_text = clipboard_text;
|
44
|
+
|
45
|
+
// Running filters on selection. Here all changes of the selected text are done.
|
46
|
+
// To stop filtering and restore original selection, any filter
|
47
|
+
// may return (boolean) FALSE.
|
48
|
+
|
49
|
+
if ( w.copyenrichFilters.length > 0 ) {
|
50
|
+
// running filters
|
51
|
+
for( var f = 0; f < w.copyenrichFilters.length; f++ ) {
|
52
|
+
try {
|
53
|
+
modified_clipboard_text = w.copyenrichFilters[f][0]( modified_clipboard_text );
|
54
|
+
console.log( 'Copyenrich executing filter: ' + f );
|
55
|
+
// breaking condition: returning (bool) FALSE means that no changes should be done at all
|
56
|
+
if ( modified_clipboard_text === false ) {
|
57
|
+
// Remove helper element
|
58
|
+
w.setTimeout( hide_clipboard_interceptor, 200 );
|
59
|
+
console.log( 'Copyenrich: filter triggered reset. No changes done.' );
|
60
|
+
// terminate here, undo all changes. filter told us to do so.
|
61
|
+
return;
|
62
|
+
}
|
63
|
+
|
64
|
+
} catch ( err ) {
|
65
|
+
console.log( '! Copyenrich filter caused an error. Current filter was: ' + w.copyenrichFilters[f][0] );
|
66
|
+
}
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
// Creates helper element outside the view
|
71
|
+
var top = ( w.pageYOffset || d.scrollTop );
|
72
|
+
var div = d.createElement( 'span' );
|
73
|
+
div.id = 'clipboard_interceptor';
|
74
|
+
div.style.position = 'absolute';
|
75
|
+
div.style.top = ( typeof top == 'undefined' ? 0 : top ) + 'px';
|
76
|
+
div.style.left = '-300px';
|
77
|
+
div.style.overflow = 'hidden';
|
78
|
+
div.style.width = '100px';
|
79
|
+
div.style.height = '100px';
|
80
|
+
d.body.appendChild( div );
|
81
|
+
|
82
|
+
// Modifies clipboard text and preselects it to be copied
|
83
|
+
if ( navigator.userAgent.indexOf( 'Firefox' ) > 0 ) {
|
84
|
+
div.innerHTML = modified_clipboard_text.replace( /\n/g, '<br>' );
|
85
|
+
} else {
|
86
|
+
// Creates textarea to store clipboard text
|
87
|
+
var textarea = d.createElement( 'textarea' );
|
88
|
+
div.appendChild( textarea );
|
89
|
+
|
90
|
+
textarea.innerHTML = modified_clipboard_text;
|
91
|
+
}
|
92
|
+
|
93
|
+
// Selects modified hidden text to be copied instead of original selection
|
94
|
+
if ( navigator.userAgent.indexOf( 'Firefox' ) > 0 ) {
|
95
|
+
var sel = w.getSelection( );
|
96
|
+
if( sel.rangeCount > 0 ) sel.removeAllRanges( );
|
97
|
+
var range = d.createRange( );
|
98
|
+
range.selectNode( div );
|
99
|
+
sel.addRange( range );
|
100
|
+
} else {
|
101
|
+
textarea.select( );
|
102
|
+
}
|
103
|
+
console.log( 'Copyenrich: done.' );
|
104
|
+
// Remove helper element
|
105
|
+
w.setTimeout( hide_clipboard_interceptor, 200 );
|
106
|
+
}
|
107
|
+
|
108
|
+
/**
|
109
|
+
* Gets selected Text
|
110
|
+
*/
|
111
|
+
function get_selection( ) {
|
112
|
+
|
113
|
+
var sel = w.getSelection( );
|
114
|
+
var selected_text = sel.toString( );
|
115
|
+
|
116
|
+
return selected_text;
|
117
|
+
}
|
118
|
+
|
119
|
+
/**
|
120
|
+
* Removes helper element
|
121
|
+
*/
|
122
|
+
function hide_clipboard_interceptor() {
|
123
|
+
var c = d.getElementById( 'clipboard_interceptor' );
|
124
|
+
c && c.parentNode.removeChild( c );
|
125
|
+
}
|
126
|
+
|
127
|
+
})( document, window );
|
Binary file
|
Binary file
|
data/assets/main.scss
ADDED
metadata
ADDED
@@ -0,0 +1,184 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: typographical
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ram Iyer
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-12-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: jekyll
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.8'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.8'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: jekyll-paginate
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.1'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: jekyll-feed
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.10.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.10.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: jekyll-seo-tag
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.5'
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 2.5.0
|
65
|
+
type: :runtime
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - "~>"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '2.5'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 2.5.0
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: jekyll-sitemap
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '1.2'
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 1.2.0
|
85
|
+
type: :runtime
|
86
|
+
prerelease: false
|
87
|
+
version_requirements: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '1.2'
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 1.2.0
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: bundler
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - "~>"
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '1.16'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - "~>"
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '1.16'
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: rake
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '12.0'
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '12.0'
|
123
|
+
description:
|
124
|
+
email:
|
125
|
+
- ramakrishnan.rkology@gmail.com
|
126
|
+
executables: []
|
127
|
+
extensions: []
|
128
|
+
extra_rdoc_files: []
|
129
|
+
files:
|
130
|
+
- LICENSE.txt
|
131
|
+
- README.md
|
132
|
+
- _includes/analytics.html
|
133
|
+
- _includes/copyenrich-hook.html
|
134
|
+
- _includes/footer.html
|
135
|
+
- _includes/head.html
|
136
|
+
- _includes/navigation.html
|
137
|
+
- _includes/related.html
|
138
|
+
- _includes/share.html
|
139
|
+
- _layouts/default.html
|
140
|
+
- _layouts/home.html
|
141
|
+
- _layouts/page.html
|
142
|
+
- _layouts/post.html
|
143
|
+
- _sass/typographical.scss
|
144
|
+
- _sass/typographical/_base.scss
|
145
|
+
- _sass/typographical/_catalogue.scss
|
146
|
+
- _sass/typographical/_code.scss
|
147
|
+
- _sass/typographical/_layout.scss
|
148
|
+
- _sass/typographical/_multipage.scss
|
149
|
+
- _sass/typographical/_pagination.scss
|
150
|
+
- _sass/typographical/_post.scss
|
151
|
+
- _sass/typographical/_syntax.scss
|
152
|
+
- _sass/typographical/_tweaks.scss
|
153
|
+
- _sass/typographical/_variables.scss
|
154
|
+
- assets/apple-touch-icon.png
|
155
|
+
- assets/copyenrich/copyenrich-filter.js
|
156
|
+
- assets/copyenrich/copyenrich.js
|
157
|
+
- assets/favicon-16x16.png
|
158
|
+
- assets/favicon-32x32.png
|
159
|
+
- assets/main.scss
|
160
|
+
homepage: https://iam.ramiyer.me
|
161
|
+
licenses:
|
162
|
+
- MIT
|
163
|
+
metadata: {}
|
164
|
+
post_install_message:
|
165
|
+
rdoc_options: []
|
166
|
+
require_paths:
|
167
|
+
- lib
|
168
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
173
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - ">="
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
requirements: []
|
179
|
+
rubyforge_project:
|
180
|
+
rubygems_version: 2.7.6
|
181
|
+
signing_key:
|
182
|
+
specification_version: 4
|
183
|
+
summary: A typography-focused theme based on Tale by Chester How.
|
184
|
+
test_files: []
|