asciidoctor 0.1.4 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of asciidoctor might be problematic. Click here for more details.

Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.adoc +209 -25
  3. data/{LICENSE → LICENSE.adoc} +4 -3
  4. data/README.adoc +392 -395
  5. data/Rakefile +94 -137
  6. data/benchmark/benchmark.rb +127 -0
  7. data/benchmark/sample-data/mdbasics.adoc +334 -0
  8. data/bin/asciidoctor +5 -8
  9. data/bin/asciidoctor-safe +4 -8
  10. data/compat/asciidoc.conf +78 -11
  11. data/compat/font-awesome-3-compat.css +397 -0
  12. data/data/stylesheets/asciidoctor-default.css +399 -0
  13. data/data/stylesheets/coderay-asciidoctor.css +89 -0
  14. data/features/open_block.feature +92 -0
  15. data/features/pass_block.feature +66 -0
  16. data/features/step_definitions.rb +42 -0
  17. data/features/text_formatting.feature +55 -0
  18. data/features/xref.feature +116 -0
  19. data/lib/asciidoctor.rb +1155 -605
  20. data/lib/asciidoctor/abstract_block.rb +157 -71
  21. data/lib/asciidoctor/abstract_node.rb +150 -93
  22. data/lib/asciidoctor/attribute_list.rb +85 -90
  23. data/lib/asciidoctor/block.rb +51 -24
  24. data/lib/asciidoctor/callouts.rb +4 -7
  25. data/lib/asciidoctor/cli.rb +3 -0
  26. data/lib/asciidoctor/cli/invoker.rb +86 -76
  27. data/lib/asciidoctor/cli/options.rb +111 -61
  28. data/lib/asciidoctor/converter.rb +232 -0
  29. data/lib/asciidoctor/converter/base.rb +58 -0
  30. data/lib/asciidoctor/converter/composite.rb +66 -0
  31. data/lib/asciidoctor/converter/docbook45.rb +94 -0
  32. data/lib/asciidoctor/converter/docbook5.rb +684 -0
  33. data/lib/asciidoctor/converter/factory.rb +225 -0
  34. data/lib/asciidoctor/converter/html5.rb +1081 -0
  35. data/lib/asciidoctor/converter/template.rb +296 -0
  36. data/lib/asciidoctor/core_ext.rb +7 -0
  37. data/lib/asciidoctor/core_ext/object/nil_or_empty.rb +23 -0
  38. data/lib/asciidoctor/core_ext/string/chr.rb +6 -0
  39. data/lib/asciidoctor/core_ext/symbol/length.rb +6 -0
  40. data/lib/asciidoctor/document.rb +590 -304
  41. data/lib/asciidoctor/extensions.rb +1100 -308
  42. data/lib/asciidoctor/helpers.rb +109 -46
  43. data/lib/asciidoctor/inline.rb +16 -9
  44. data/lib/asciidoctor/list.rb +23 -15
  45. data/lib/asciidoctor/opal_ext.rb +4 -0
  46. data/lib/asciidoctor/opal_ext/comparable.rb +38 -0
  47. data/lib/asciidoctor/opal_ext/dir.rb +13 -0
  48. data/lib/asciidoctor/opal_ext/error.rb +2 -0
  49. data/lib/asciidoctor/opal_ext/file.rb +125 -0
  50. data/lib/asciidoctor/{lexer.rb → parser.rb} +646 -455
  51. data/lib/asciidoctor/path_resolver.rb +141 -77
  52. data/lib/asciidoctor/reader.rb +257 -187
  53. data/lib/asciidoctor/section.rb +12 -16
  54. data/lib/asciidoctor/stylesheets.rb +91 -0
  55. data/lib/asciidoctor/substitutors.rb +1548 -0
  56. data/lib/asciidoctor/table.rb +73 -57
  57. data/lib/asciidoctor/timings.rb +39 -0
  58. data/lib/asciidoctor/version.rb +1 -1
  59. data/man/asciidoctor.1 +22 -14
  60. data/man/asciidoctor.adoc +18 -10
  61. data/test/attributes_test.rb +314 -14
  62. data/test/blocks_test.rb +763 -118
  63. data/test/converter_test.rb +352 -0
  64. data/test/document_test.rb +518 -199
  65. data/test/extensions_test.rb +273 -103
  66. data/test/fixtures/asciidoc_index.txt +27 -13
  67. data/test/fixtures/basic-docinfo.xml +1 -1
  68. data/test/fixtures/chapter-a.adoc +3 -0
  69. data/test/fixtures/custom-backends/erb/html5/block_paragraph.html.erb +6 -0
  70. data/test/fixtures/docinfo.xml +1 -1
  71. data/test/fixtures/include-file.asciidoc +2 -0
  72. data/test/fixtures/master.adoc +5 -0
  73. data/test/invoker_test.rb +173 -61
  74. data/test/links_test.rb +97 -21
  75. data/test/lists_test.rb +181 -22
  76. data/test/options_test.rb +86 -2
  77. data/test/paragraphs_test.rb +47 -5
  78. data/test/{lexer_test.rb → parser_test.rb} +128 -57
  79. data/test/paths_test.rb +36 -1
  80. data/test/preamble_test.rb +25 -17
  81. data/test/reader_test.rb +404 -249
  82. data/test/sections_test.rb +623 -58
  83. data/test/substitutions_test.rb +609 -132
  84. data/test/tables_test.rb +198 -24
  85. data/test/test_helper.rb +101 -31
  86. data/test/text_test.rb +88 -31
  87. metadata +160 -64
  88. data/Gemfile +0 -12
  89. data/Guardfile +0 -18
  90. data/asciidoctor.gemspec +0 -143
  91. data/lib/asciidoctor/backends/_stylesheets.rb +0 -466
  92. data/lib/asciidoctor/backends/base_template.rb +0 -114
  93. data/lib/asciidoctor/backends/docbook45.rb +0 -774
  94. data/lib/asciidoctor/backends/docbook5.rb +0 -103
  95. data/lib/asciidoctor/backends/html5.rb +0 -1214
  96. data/lib/asciidoctor/renderer.rb +0 -259
  97. data/lib/asciidoctor/substituters.rb +0 -1083
  98. data/test/fixtures/asciidoc.txt +0 -105
  99. data/test/fixtures/ascshort.txt +0 -32
  100. data/test/fixtures/list_elements.asciidoc +0 -10
  101. data/test/renderer_test.rb +0 -162
@@ -1,14 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
3
+ require 'rubygems' if RUBY_VERSION < '1.9'
4
4
 
5
- if RUBY_VERSION < '1.9'
6
- require 'rubygems'
7
- end
8
- require 'asciidoctor'
9
- require 'asciidoctor/cli/options'
10
- require 'asciidoctor/cli/invoker'
5
+ require File.join File.dirname(__FILE__), '../lib/asciidoctor'
6
+ require 'asciidoctor/cli'
11
7
 
12
- invoker = Asciidoctor::Cli::Invoker.new(ARGV)
8
+ invoker = Asciidoctor::Cli::Invoker.new ARGV
9
+ GC.start
13
10
  invoker.invoke!
14
11
  exit invoker.code
@@ -1,16 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
3
+ require 'rubygems' if RUBY_VERSION < '1.9'
4
4
 
5
- if RUBY_VERSION < '1.9'
6
- require 'rubygems'
7
- end
8
- require 'asciidoctor'
9
- require 'asciidoctor/cli/options'
10
- require 'asciidoctor/cli/invoker'
5
+ require File.join File.dirname(__FILE__), '../lib/asciidoctor'
6
+ require 'asciidoctor/cli'
11
7
 
12
8
  options = Asciidoctor::Cli::Options.parse! ARGV
13
9
  options[:safe] = Asciidoctor::SafeMode::SAFE
14
- invoker = Asciidoctor::Cli::Invoker.new(options)
10
+ invoker = Asciidoctor::Cli::Invoker.new options
15
11
  invoker.invoke!
16
12
  exit invoker.code
@@ -12,12 +12,39 @@ newline=\n
12
12
  backend-alias-html=html5
13
13
  apostrophe='
14
14
  asterisk=*
15
- caret=^
16
15
  backtick=`
16
+ brvbar=&#166;
17
+ caret=^
17
18
  # plus introduced in AsciiDoc 8.6.9
18
19
  plus=&#43;
19
20
  space=" "
20
21
  tilde=~
22
+ user-home={eval:os.path.expanduser('~')}
23
+ vbar=|
24
+ # NOTE use -a no-inline-literal to set compat-mode to default when using AsciiDoc Python
25
+ ifndef::no-inline-literal[]
26
+ compat-mode=legacy
27
+ endif::[]
28
+
29
+ [replacements]
30
+ # right single quote
31
+ (?<!\\)`'=&#8217;
32
+ # escaped right single quote
33
+ \\`'=`'
34
+
35
+ [quotes]
36
+ # disable single quotes as constrained formatting marks for emphasis
37
+ # this change can also be made in the document using the attribute entry :quotes.':
38
+ ifdef::compat-mode[]
39
+ '=
40
+ +=
41
+ ++=
42
+ `=
43
+ ``=#monospaced
44
+ `|`=monospaced
45
+ \##=#mark
46
+ \#=mark
47
+ endif::[]
21
48
 
22
49
  # enables markdown-style headings
23
50
  [titles]
@@ -28,6 +55,10 @@ sect3=^(====|####) +(?P<title>[\S].*?)(?: +\1)?$
28
55
  sect4=^(=====|#####) +(?P<title>[\S].*?)(?: +\1)?$
29
56
  sect5=^(======|######) +(?P<title>[\S].*?)(?: +\1)?$
30
57
 
58
+ # Disable subs on pass block by default
59
+ [blockdef-pass]
60
+ subs=none
61
+
31
62
  # enables fenced code blocks
32
63
  # FIXME I haven't sorted out yet how to do syntax highlighting
33
64
  [blockdef-fenced-code]
@@ -62,10 +93,28 @@ type=callout
62
93
  tags=callout
63
94
  style=arabic
64
95
 
65
- # enables literal block to be used as code block
96
+ # enables literal block to be used as source block
66
97
  [blockdef-literal]
67
98
  template::[source-filter-style]
68
99
 
100
+ # enables source block when source-highlighter is not defined
101
+ ifndef::source-highlighter[]
102
+ [source-filter-style]
103
+ source-style=template="listingblock",subs=("specialcharacters","callouts"),posattrs=("style","language","src_numbered","src_tab")
104
+
105
+ [paradef-default]
106
+ template::[source-filter-style]
107
+
108
+ [paradef-literal]
109
+ template::[source-filter-style]
110
+
111
+ [blockdef-open]
112
+ template::[source-filter-style]
113
+
114
+ [blockdef-listing]
115
+ template::[source-filter-style]
116
+ endif::source-highlighter[]
117
+
69
118
  [tabledef-csv]
70
119
  template::[tabledef-default]
71
120
  delimiter=^,={3,}$
@@ -77,6 +126,13 @@ delimiter=^:={3,}$
77
126
  format=dsv
78
127
 
79
128
  [macros]
129
+ ifdef::no-inline-literal[]
130
+ (?su)\\?\+\+(?P<passtext>.*?)\+\+=pass[specialcharacters]
131
+ (?su)(?<![+\w])(\\?\+(?P<passtext>\S|\S.*?\S)\+)(?![+\w])=pass[specialcharacters]
132
+ endif::no-inline-literal[]
133
+
134
+ # additional callout match behind line comments
135
+ #(?://|#|;;) ?\((?P<index>\d+)\)=callout
80
136
  # additional callout match for XML
81
137
  [\\]?&lt;!--(?P<index>\d+)--&gt;=callout
82
138
 
@@ -127,25 +183,26 @@ strong=<strong{1? class="{1}"}>|</strong>
127
183
  monospaced=<code{1? class="{1}"}>|</code>
128
184
  superscript=<sup{1? class="{1}"}>|</sup>
129
185
  subscript=<sub{1? class="{1}"}>|</sub>
186
+ mark={1=<mark>}{1?<span class="{1}">}|{1?</span>}{1=</mark>}
130
187
 
131
188
  [monospacedwords]
132
189
  <code>{words}</code>
133
190
 
134
191
  ifdef::linkattrs[]
135
192
  [http-inlinemacro]
136
- <a href="{name}:{target}"{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
193
+ <a href="{name}:{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
137
194
  [https-inlinemacro]
138
- <a href="{name}:{target}"{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
195
+ <a href="{name}:{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
139
196
  [ftp-inlinemacro]
140
- <a href="{name}:{target}"{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
197
+ <a href="{name}:{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
141
198
  [file-inlinemacro]
142
- <a href="{name}:{target}"{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
199
+ <a href="{name}:{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
143
200
  [irc-inlinemacro]
144
- <a href="{name}:{target}"{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
201
+ <a href="{name}:{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
145
202
  [mailto-inlinemacro]
146
- <a href="mailto:{target}"{role? class="{role}"}{window? target="{window}"}>{1={target}}</a>
203
+ <a href="mailto:{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={target}}</a>
147
204
  [link-inlinemacro]
148
- <a href="{target}"{role? class="{role}"}{window? target="{window}"}>{1={target}}</a>
205
+ <a href="{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={target}}</a>
149
206
  endif::linkattrs[]
150
207
 
151
208
  [listtags-numbered]
@@ -229,8 +286,8 @@ endif::[]
229
286
  # don't output attribution div if attribution or citetitle are both empty
230
287
  [attribution]
231
288
  {attribution,citetitle#}<div class="attribution">
232
- <cite>{citetitle}</cite>{attribution?<br>}
233
- &#8212; {attribution}
289
+ &#8212; {attribution}{citetitle?<br>}
290
+ <cite>{citetitle}</cite>
234
291
  {attribution,citetitle#}</div>
235
292
 
236
293
  # override to use blockquote element for content and cite element for cite title
@@ -258,6 +315,11 @@ template::[attribution]
258
315
  headdata=<th class="tableblock halign-{halign=left} valign-{valign=top}"{colspan@1:: colspan="{colspan}"}{rowspan@1:: rowspan="{rowspan}"}{cellbgcolor? style="background-color:{cellbgcolor};"}>|</th>
259
316
  bodydata=<td class="tableblock halign-{halign=left} valign-{valign=top}"{colspan@1:: colspan="{colspan}"}{rowspan@1:: rowspan="{rowspan}"}{cellbgcolor? style="background-color:{cellbgcolor};"}>|</td>
260
317
 
318
+ # override header cells to use th
319
+ [tabletags-header]
320
+ bodydata=<th class="tableblock halign-{halign=left} valign-{valign=top}" {colspan@1::colspan="{colspan}" }{rowspan@1::rowspan="{rowspan}" }>|</th>
321
+ paragraph=<p class="tableblock">|</p>
322
+
261
323
  [toc]
262
324
  <div id="toc">
263
325
  <div id="toctitle">{toc-title}</div>
@@ -281,6 +343,11 @@ ifdef::basebackend-docbook[]
281
343
  |
282
344
  </section>
283
345
 
346
+ [tags]
347
+ monospaced=<literal{1? role="{1}"}>|</literal>
348
+ subscript=<subscript{1? role="{1}"}>|</subscript>
349
+ superscript=<superscript{1? role="{1}"}>|</superscript>
350
+
284
351
  [button-inlinemacro]
285
352
  <guibutton>{1}</guibutton>
286
353
 
@@ -0,0 +1,397 @@
1
+ .fa-envelope-alt:before {
2
+ content: "\f003";
3
+ }
4
+ .fa-star-empty:before {
5
+ content: "\f006";
6
+ }
7
+ .fa-ok:before {
8
+ content: "\f00c";
9
+ }
10
+ .fa-remove:before {
11
+ content: "\f00d";
12
+ }
13
+ .fa-zoom-in:before {
14
+ content: "\f00e";
15
+ }
16
+ .fa-zoom-out:before {
17
+ content: "\f010";
18
+ }
19
+ .fa-off:before {
20
+ content: "\f011";
21
+ }
22
+ .fa-trash:before {
23
+ content: "\f014";
24
+ }
25
+ .fa-file-alt:before {
26
+ content: "\f016";
27
+ }
28
+ .fa-time:before {
29
+ content: "\f017";
30
+ }
31
+ .fa-download-alt:before {
32
+ content: "\f019";
33
+ }
34
+ .fa-download-alt:before {
35
+ content: "\f01a";
36
+ }
37
+ .fa-upload-alt:before {
38
+ content: "\f01b";
39
+ }
40
+ .fa-play-sign:before {
41
+ content: "\f01d";
42
+ }
43
+ .fa-indent-right-left:before {
44
+ content: "\f03b";
45
+ }
46
+ .fa-indent-right:before {
47
+ content: "\f03c";
48
+ }
49
+ .fa-facetime-video:before {
50
+ content: "\f03d";
51
+ }
52
+ .fa-picture:before {
53
+ content: "\f03e";
54
+ }
55
+ .fa-edit-sign-o:before {
56
+ content: "\f044";
57
+ }
58
+ .fa-share-alt-square-o:before {
59
+ content: "\f045";
60
+ }
61
+ .fa-ok-sign-o:before {
62
+ content: "\f046";
63
+ }
64
+ .fa-move:before {
65
+ content: "\f047";
66
+ }
67
+ .fa-plus-sign:before {
68
+ content: "\f055";
69
+ }
70
+ .fa-minus-sign:before {
71
+ content: "\f056";
72
+ }
73
+ .fa-remove-sign:before {
74
+ content: "\f057";
75
+ }
76
+ .fa-ok-sign:before {
77
+ content: "\f058";
78
+ }
79
+ .fa-question-sign:before {
80
+ content: "\f059";
81
+ }
82
+ .fa-info-sign:before {
83
+ content: "\f05a";
84
+ }
85
+ .fa-screenshot:before {
86
+ content: "\f05b";
87
+ }
88
+ .fa-remove-circle:before {
89
+ content: "\f05c";
90
+ }
91
+ .fa-ok-circle:before {
92
+ content: "\f05d";
93
+ }
94
+ .fa-ban-circle:before {
95
+ content: "\f05e";
96
+ }
97
+ .fa-share-alt:before {
98
+ content: "\f064";
99
+ }
100
+ .fa-resize-full:before {
101
+ content: "\f065";
102
+ }
103
+ .fa-resize-small:before {
104
+ content: "\f066";
105
+ }
106
+ .fa-exclamation-sign:before {
107
+ content: "\f06a";
108
+ }
109
+ .fa-eye-open:before {
110
+ content: "\f06e";
111
+ }
112
+ .fa-eye-open-close:before {
113
+ content: "\f070";
114
+ }
115
+ .fa-warning-sign:before {
116
+ content: "\f071";
117
+ }
118
+ .fa-folder-close:before {
119
+ content: "\f07b";
120
+ }
121
+ .fa-folder-close-close-altpen:before {
122
+ content: "\f07c";
123
+ }
124
+ .fa-move-v:before {
125
+ content: "\f07d";
126
+ }
127
+ .fa-move-h:before {
128
+ content: "\f07e";
129
+ }
130
+ .fa-bar-chart:before {
131
+ content: "\f080";
132
+ }
133
+ .fa-twitter-sign:before {
134
+ content: "\f081";
135
+ }
136
+ .fa-facebook-sign:before {
137
+ content: "\f082";
138
+ }
139
+ .fa-thumbs-up-alt:before {
140
+ content: "\f087";
141
+ }
142
+ .fa-thumbs-down-alt:before {
143
+ content: "\f088";
144
+ }
145
+ .fa-heart-empty:before {
146
+ content: "\f08a";
147
+ }
148
+ .fa-signout:before {
149
+ content: "\f08b";
150
+ }
151
+ .fa-linkedin-sign:before {
152
+ content: "\f08c";
153
+ }
154
+ .fa-pushpin:before {
155
+ content: "\f08d";
156
+ }
157
+ .fa-signin:before {
158
+ content: "\f090";
159
+ }
160
+ .fa-github-sign:before {
161
+ content: "\f092";
162
+ }
163
+ .fa-upload-alt:before {
164
+ content: "\f093";
165
+ }
166
+ .fa-lemon:before {
167
+ content: "\f094";
168
+ }
169
+ .fa-ok-empty:before {
170
+ content: "\f096";
171
+ }
172
+ .fa-bookmark-empty:before {
173
+ content: "\f097";
174
+ }
175
+ .fa-phone-sign:before {
176
+ content: "\f098";
177
+ }
178
+ .fa-hdd:before {
179
+ content: "\f0a0";
180
+ }
181
+ .fa-bell-alt:before {
182
+ content: "\f0f3";
183
+ }
184
+ .fa-hand-right:before {
185
+ content: "\f0a4";
186
+ }
187
+ .fa-hand-left:before {
188
+ content: "\f0a5";
189
+ }
190
+ .fa-hand-up:before {
191
+ content: "\f0a6";
192
+ }
193
+ .fa-hand-down:before {
194
+ content: "\f0a7";
195
+ }
196
+ .fa-circle-arrow-left:before {
197
+ content: "\f0a8";
198
+ }
199
+ .fa-circle-arrow-right:before {
200
+ content: "\f0a9";
201
+ }
202
+ .fa-circle-arrow-up:before {
203
+ content: "\f0aa";
204
+ }
205
+ .fa-circle-arrow-down:before {
206
+ content: "\f0ab";
207
+ }
208
+ .fa-fullscreen:before {
209
+ content: "\f0b2";
210
+ }
211
+ .fa-group:before {
212
+ content: "\f0c0";
213
+ }
214
+ .fa-beaker:before {
215
+ content: "\f0c3";
216
+ }
217
+ .fa-paper-clip:before {
218
+ content: "\f0c6";
219
+ }
220
+ .fa-sign-blank:before {
221
+ content: "\f0c8";
222
+ }
223
+ .fa-pinterest-sign:before {
224
+ content: "\f0d3";
225
+ }
226
+ .fa-google-plus-sign:before {
227
+ content: "\f0d4";
228
+ }
229
+ .fa-comment-alt:before {
230
+ content: "\f0e5";
231
+ }
232
+ .fa-comments-alt:before {
233
+ content: "\f0e6";
234
+ }
235
+ .fa-lightbulb:before {
236
+ content: "\f0eb";
237
+ }
238
+ .fa-bell-alt:before {
239
+ content: "\f0a2";
240
+ }
241
+ .fa-food:before {
242
+ content: "\f0f5";
243
+ }
244
+ .fa-file-text-alt:before {
245
+ content: "\f0f6";
246
+ }
247
+ .fa-building:before {
248
+ content: "\f0f7";
249
+ }
250
+ .fa-hospital:before {
251
+ content: "\f0f8";
252
+ }
253
+ .fa-h-sign:before {
254
+ content: "\f0fd";
255
+ }
256
+ .fa-plus-sign-alt:before {
257
+ content: "\f0fe";
258
+ }
259
+ .fa-double-angle-left:before {
260
+ content: "\f100";
261
+ }
262
+ .fa-double-angle-right:before {
263
+ content: "\f101";
264
+ }
265
+ .fa-double-angle-up:before {
266
+ content: "\f102";
267
+ }
268
+ .fa-double-angle-down:before {
269
+ content: "\f103";
270
+ }
271
+ .fa-circle-blank:before {
272
+ content: "\f10c";
273
+ }
274
+ .fa-folder-close-close-alt:before {
275
+ content: "\f114";
276
+ }
277
+ .fa-folder-close-close-altpen-o:before {
278
+ content: "\f115";
279
+ }
280
+ .fa-smile:before {
281
+ content: "\f118";
282
+ }
283
+ .fa-frown:before {
284
+ content: "\f119";
285
+ }
286
+ .fa-meh:before {
287
+ content: "\f11a";
288
+ }
289
+ .fa-keyboard:before {
290
+ content: "\f11c";
291
+ }
292
+ .fa-flag-alt:before {
293
+ content: "\f11d";
294
+ }
295
+ .fa-microphone-off:before {
296
+ content: "\f131";
297
+ }
298
+ .fa-calendar-empty:before {
299
+ content: "\f133";
300
+ }
301
+ .fa-chevron-sign-left:before {
302
+ content: "\f137";
303
+ }
304
+ .fa-chevron-sign-right:before {
305
+ content: "\f138";
306
+ }
307
+ .fa-chevron-sign-up:before {
308
+ content: "\f139";
309
+ }
310
+ .fa-chevron-sign-down:before {
311
+ content: "\f13a";
312
+ }
313
+ .fa-ellipsis-horizontal:before {
314
+ content: "\f141";
315
+ }
316
+ .fa-ellipsis-vertical:before {
317
+ content: "\f142";
318
+ }
319
+ .fa-rss-sign:before {
320
+ content: "\f143";
321
+ }
322
+ .fa-play-sign:before {
323
+ content: "\f144";
324
+ }
325
+ .fa-minus-sign-alt:before {
326
+ content: "\f146";
327
+ }
328
+ .fa-ok-minus:before {
329
+ content: "\f147";
330
+ }
331
+ .fa-ok-sign:before {
332
+ content: "\f14a";
333
+ }
334
+ .fa-edit-sign:before {
335
+ content: "\f14b";
336
+ }
337
+ .fa-external-link-sign:before {
338
+ content: "\f14c";
339
+ }
340
+ .fa-share-alt-square:before {
341
+ content: "\f14d";
342
+ }
343
+ .fa-collapse:before {
344
+ content: "\f150";
345
+ }
346
+ .fa-collapse-top:before {
347
+ content: "\f151";
348
+ }
349
+ .fa-resize-full:before {
350
+ content: "\f152";
351
+ }
352
+ .fa-cnyle:before,
353
+ .fa-cny:before {
354
+ content: "\f158";
355
+ }
356
+ .fa-sort-by-alphabet:before {
357
+ content: "\f15d";
358
+ }
359
+ .fa-sort-by-alphabet-alt:before {
360
+ content: "\f15e";
361
+ }
362
+ .fa-sort-by-attributes:before {
363
+ content: "\f160";
364
+ }
365
+ .fa-sort-by-attributes-alt:before {
366
+ content: "\f161";
367
+ }
368
+ .fa-sort-by-order:before {
369
+ content: "\f162";
370
+ }
371
+ .fa-sort-by-order-alt:before {
372
+ content: "\f163";
373
+ }
374
+ .fa-youtube-sign:before {
375
+ content: "\f166";
376
+ }
377
+ .fa-xing-sign:before {
378
+ content: "\f169";
379
+ }
380
+ .fa-stackexchange:before {
381
+ content: "\f16c";
382
+ }
383
+ .fa-bitbucket-sign:before {
384
+ content: "\f172";
385
+ }
386
+ .fa-tumblr-sign:before {
387
+ content: "\f174";
388
+ }
389
+ .fa-sun:before {
390
+ content: "\f185";
391
+ }
392
+ .fa-moon:before {
393
+ content: "\f186";
394
+ }
395
+ .fa-expand-alt:before {
396
+ content: "\f196";
397
+ }