jazzy 0.7.3 → 0.7.4
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 +4 -4
- data/.rubocop.yml +6 -0
- data/CHANGELOG.md +72 -0
- data/CONTRIBUTING.md +3 -1
- data/Gemfile.lock +31 -29
- data/README.md +11 -10
- data/circle.yml +12 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Resources +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/SourceKittenFramework +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Commandant.framework/Commandant +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Commandant.framework/Resources +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Commandant.framework/Versions/Current +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Result.framework/Resources +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Result.framework/Result +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Result.framework/Versions/Current +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/Resources +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/SWXMLHash +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/Versions/Current +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Yams.framework/Resources +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Yams.framework/Versions/Current +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Yams.framework/Yams +1 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/Current +1 -0
- data/lib/jazzy/config.rb +16 -2
- data/lib/jazzy/doc_builder.rb +60 -8
- data/lib/jazzy/gem_version.rb +1 -1
- data/lib/jazzy/jazzy_markdown.rb +37 -25
- data/lib/jazzy/podspec_documenter.rb +3 -4
- data/lib/jazzy/search_builder.rb +21 -0
- data/lib/jazzy/source_declaration.rb +1 -1
- data/lib/jazzy/source_declaration/type.rb +7 -0
- data/lib/jazzy/source_document.rb +9 -0
- data/lib/jazzy/sourcekitten.rb +112 -60
- data/lib/jazzy/themes/apple/assets/js/jazzy.js +6 -0
- data/lib/jazzy/themes/fullwidth/assets/css/jazzy.css.scss +62 -0
- data/lib/jazzy/themes/fullwidth/assets/img/spinner.gif +0 -0
- data/lib/jazzy/themes/fullwidth/assets/js/jazzy.js +6 -0
- data/lib/jazzy/themes/fullwidth/assets/js/jazzy.search.js +62 -0
- data/lib/jazzy/themes/fullwidth/assets/js/lunr.min.js +6 -0
- data/lib/jazzy/themes/fullwidth/assets/js/typeahead.jquery.js +1538 -0
- data/lib/jazzy/themes/fullwidth/templates/doc.mustache +5 -0
- data/lib/jazzy/themes/fullwidth/templates/header.mustache +8 -0
- data/spec/integration_spec.rb +11 -9
- metadata +19 -4
- data/.travis.yml +0 -17
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/SourceKittenFramework +0 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Commandant.framework/Commandant +0 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Result.framework/Result +0 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/SWXMLHash +0 -0
- data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Yams.framework/Yams +0 -0
data/lib/jazzy/gem_version.rb
CHANGED
data/lib/jazzy/jazzy_markdown.rb
CHANGED
@@ -19,30 +19,40 @@ module Jazzy
|
|
19
19
|
"<h#{header_level} id='#{text_slug}'>#{text}</h#{header_level}>\n"
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
22
|
+
# List from
|
23
|
+
# https://github.com/apple/swift/blob/master/include/swift/Markup/SimpleFields.def
|
24
|
+
UNIQUELY_HANDLED_CALLOUTS = %w(parameters
|
25
|
+
parameter
|
26
|
+
returns).freeze
|
27
|
+
GENERAL_CALLOUTS = %w(attention
|
28
|
+
author
|
29
|
+
authors
|
30
|
+
bug
|
31
|
+
complexity
|
32
|
+
copyright
|
33
|
+
date
|
34
|
+
experiment
|
35
|
+
important
|
36
|
+
invariant
|
37
|
+
keyword
|
38
|
+
mutatingvariant
|
39
|
+
nonmutatingvariant
|
40
|
+
note
|
41
|
+
postcondition
|
42
|
+
precondition
|
43
|
+
recommended
|
44
|
+
recommendedover
|
45
|
+
remark
|
46
|
+
remarks
|
47
|
+
requires
|
48
|
+
see
|
49
|
+
seealso
|
50
|
+
since
|
51
|
+
todo
|
52
|
+
throws
|
53
|
+
version
|
54
|
+
warning).freeze
|
55
|
+
SPECIAL_LIST_TYPES = (UNIQUELY_HANDLED_CALLOUTS + GENERAL_CALLOUTS).freeze
|
46
56
|
|
47
57
|
SPECIAL_LIST_TYPE_REGEX = %r{
|
48
58
|
\A\s* # optional leading spaces
|
@@ -57,7 +67,9 @@ module Jazzy
|
|
57
67
|
def list_item(text, _list_type)
|
58
68
|
if text =~ SPECIAL_LIST_TYPE_REGEX
|
59
69
|
type = Regexp.last_match(2)
|
60
|
-
|
70
|
+
if UNIQUELY_HANDLED_CALLOUTS.include? type.downcase
|
71
|
+
return ELIDED_LI_TOKEN
|
72
|
+
end
|
61
73
|
return render_aside(type, text.sub(/#{Regexp.escape(type)}:\s+/, ''))
|
62
74
|
end
|
63
75
|
str = '<li>'
|
@@ -25,13 +25,12 @@ module Jazzy
|
|
25
25
|
|
26
26
|
targets.map do |t|
|
27
27
|
args = %W(doc --module-name #{podspec.module_name} -- -target #{t})
|
28
|
-
|
29
|
-
|
30
|
-
end
|
28
|
+
swift_version = (config.swift_version || '3')[0] + '.0'
|
29
|
+
args << "SWIFT_VERSION=\"#{swift_version}\""
|
31
30
|
SourceKitten.run_sourcekitten(args)
|
32
31
|
end
|
33
32
|
end
|
34
|
-
stdout.reduce([]) { |a, s| a + JSON.
|
33
|
+
stdout.reduce([]) { |a, s| a + JSON.parse(s) }.to_json
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Jazzy
|
2
|
+
module SearchBuilder
|
3
|
+
def self.build(source_module, output_dir)
|
4
|
+
decls = source_module.all_declarations.select do |d|
|
5
|
+
d.type && d.name && !d.name.empty?
|
6
|
+
end
|
7
|
+
index = Hash[decls.map do |d|
|
8
|
+
[d.url,
|
9
|
+
{
|
10
|
+
name: d.name,
|
11
|
+
abstract: d.abstract && d.abstract.split(/\n/).map(&:strip).first,
|
12
|
+
parent_name: d.parent_in_code && d.parent_in_code.name,
|
13
|
+
}.reject { |_, v| v.nil? || v.empty? }]
|
14
|
+
end
|
15
|
+
]
|
16
|
+
File.open(File.join(output_dir, 'search.json'), 'w') do |f|
|
17
|
+
f.write(index.to_json)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -23,6 +23,13 @@ module Jazzy
|
|
23
23
|
@type && @type[:jazzy]
|
24
24
|
end
|
25
25
|
|
26
|
+
def name_controlled_manually?
|
27
|
+
!kind.start_with?('source')
|
28
|
+
# "'source'.lang..." for Swift
|
29
|
+
# or "'source'kitten.source..." for Objective-C
|
30
|
+
# but not "Overview" for navigation groups.
|
31
|
+
end
|
32
|
+
|
26
33
|
def plural_name
|
27
34
|
name.pluralize
|
28
35
|
end
|
@@ -7,6 +7,15 @@ module Jazzy
|
|
7
7
|
attr_accessor :overview
|
8
8
|
attr_accessor :readme_path
|
9
9
|
|
10
|
+
def self.make_index(readme_path)
|
11
|
+
SourceDocument.new.tap do |sd|
|
12
|
+
sd.name = 'index'
|
13
|
+
sd.children = []
|
14
|
+
sd.type = SourceDeclaration::Type.new 'document.markdown'
|
15
|
+
sd.readme_path = readme_path
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
10
19
|
def config
|
11
20
|
Config.instance
|
12
21
|
end
|
data/lib/jazzy/sourcekitten.rb
CHANGED
@@ -11,6 +11,38 @@ require 'jazzy/source_mark'
|
|
11
11
|
|
12
12
|
ELIDED_AUTOLINK_TOKEN = '36f8f5912051ae747ef441d6511ca4cb'.freeze
|
13
13
|
|
14
|
+
def autolink_regex(middle_regex, after_highlight)
|
15
|
+
start_tag_re, end_tag_re =
|
16
|
+
if after_highlight
|
17
|
+
[/<span class="(?:n|kt|nc)">/, '</span>']
|
18
|
+
else
|
19
|
+
['<code>', '</code>']
|
20
|
+
end
|
21
|
+
/(#{start_tag_re})[ \t]*(#{middle_regex})[ \t]*(#{end_tag_re})/
|
22
|
+
end
|
23
|
+
|
24
|
+
class String
|
25
|
+
def autolink_block(doc_url, middle_regex, after_highlight)
|
26
|
+
gsub(autolink_regex(middle_regex, after_highlight)) do
|
27
|
+
original = Regexp.last_match(0)
|
28
|
+
start_tag, raw_name, end_tag = Regexp.last_match.captures
|
29
|
+
link_target = yield(raw_name)
|
30
|
+
|
31
|
+
if link_target &&
|
32
|
+
!link_target.type.extension? &&
|
33
|
+
link_target.url &&
|
34
|
+
link_target.url != doc_url.split('#').first && # Don't link to parent
|
35
|
+
link_target.url != doc_url # Don't link to self
|
36
|
+
start_tag +
|
37
|
+
"<a href=\"#{ELIDED_AUTOLINK_TOKEN}#{link_target.url}\">" +
|
38
|
+
raw_name + '</a>' + end_tag
|
39
|
+
else
|
40
|
+
original
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
14
46
|
module Jazzy
|
15
47
|
# This module interacts with the sourcekitten command-line executable
|
16
48
|
module SourceKitten
|
@@ -21,7 +53,8 @@ module Jazzy
|
|
21
53
|
def self.group_docs(docs)
|
22
54
|
custom_categories, docs = group_custom_categories(docs)
|
23
55
|
type_categories, uncategorized = group_type_categories(
|
24
|
-
docs, custom_categories.any? ? 'Other ' : ''
|
56
|
+
docs, custom_categories.any? ? 'Other ' : ''
|
57
|
+
)
|
25
58
|
custom_categories + type_categories + uncategorized
|
26
59
|
end
|
27
60
|
|
@@ -48,19 +81,32 @@ module Jazzy
|
|
48
81
|
make_group(
|
49
82
|
children,
|
50
83
|
type_category_prefix + type.plural_name,
|
51
|
-
"The following #{type.plural_name.downcase} are available globally."
|
84
|
+
"The following #{type.plural_name.downcase} are available globally.",
|
85
|
+
)
|
52
86
|
end
|
53
87
|
[group.compact, docs]
|
54
88
|
end
|
55
89
|
|
56
90
|
def self.make_group(group, name, abstract)
|
57
91
|
group.reject! { |doc| doc.name.empty? }
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
92
|
+
unless group.empty?
|
93
|
+
SourceDeclaration.new.tap do |sd|
|
94
|
+
sd.type = SourceDeclaration::Type.overview
|
95
|
+
sd.name = name
|
96
|
+
sd.abstract = abstract
|
97
|
+
sd.children = group
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.sanitize_filename(doc)
|
103
|
+
unsafe_filename = doc.name
|
104
|
+
sanitzation_enabled = Config.instance.use_safe_filenames
|
105
|
+
if sanitzation_enabled && !doc.type.name_controlled_manually?
|
106
|
+
return CGI.escape(unsafe_filename).gsub('_', '%5F').tr('%', '_')
|
107
|
+
else
|
108
|
+
return unsafe_filename
|
109
|
+
end
|
64
110
|
end
|
65
111
|
|
66
112
|
# rubocop:disable Metrics/MethodLength
|
@@ -72,7 +118,7 @@ module Jazzy
|
|
72
118
|
# Create HTML page for this doc if it has children or is root-level
|
73
119
|
doc.url = (
|
74
120
|
subdir_for_doc(doc) +
|
75
|
-
[doc
|
121
|
+
[sanitize_filename(doc) + '.html']
|
76
122
|
).join('/')
|
77
123
|
doc.children = make_doc_urls(doc.children)
|
78
124
|
else
|
@@ -198,11 +244,16 @@ module Jazzy
|
|
198
244
|
# rubocop:enable Metrics/CyclomaticComplexity
|
199
245
|
# rubocop:enable Metrics/PerceivedComplexity
|
200
246
|
|
201
|
-
def self.
|
247
|
+
def self.should_mark_undocumented(kind, filepath)
|
202
248
|
source_directory = Config.instance.source_directory.to_s
|
249
|
+
(filepath || '').start_with?(source_directory) &&
|
250
|
+
kind != 'source.lang.swift.decl.generic_type_param'
|
251
|
+
end
|
252
|
+
|
253
|
+
def self.process_undocumented_token(doc, declaration)
|
203
254
|
filepath = doc['key.filepath']
|
204
255
|
objc = Config.instance.objc_mode
|
205
|
-
if
|
256
|
+
if objc || should_mark_undocumented(doc['key.kind'], filepath)
|
206
257
|
@undocumented_decls << declaration
|
207
258
|
end
|
208
259
|
return nil if !documented_child?(doc) && @skip_undocumented
|
@@ -266,14 +317,14 @@ module Jazzy
|
|
266
317
|
# rubocop:enable Metrics/PerceivedComplexity
|
267
318
|
|
268
319
|
def self.make_substructure(doc, declaration)
|
269
|
-
if doc['key.substructure']
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
320
|
+
declaration.children = if doc['key.substructure']
|
321
|
+
make_source_declarations(
|
322
|
+
doc['key.substructure'],
|
323
|
+
declaration,
|
324
|
+
)
|
325
|
+
else
|
326
|
+
[]
|
327
|
+
end
|
277
328
|
end
|
278
329
|
|
279
330
|
# rubocop:disable Metrics/MethodLength
|
@@ -285,7 +336,8 @@ module Jazzy
|
|
285
336
|
Array(docs).each do |doc|
|
286
337
|
if doc.key?('key.diagnostic_stage')
|
287
338
|
declarations += make_source_declarations(
|
288
|
-
doc['key.substructure'], parent
|
339
|
+
doc['key.substructure'], parent
|
340
|
+
)
|
289
341
|
next
|
290
342
|
end
|
291
343
|
declaration = SourceDeclaration.new
|
@@ -296,7 +348,8 @@ module Jazzy
|
|
296
348
|
if declaration.type.swift_enum_case?
|
297
349
|
# Enum "cases" are thin wrappers around enum "elements".
|
298
350
|
declarations += make_source_declarations(
|
299
|
-
doc['key.substructure'], parent
|
351
|
+
doc['key.substructure'], parent
|
352
|
+
)
|
300
353
|
next
|
301
354
|
end
|
302
355
|
next unless declaration.type.should_document?
|
@@ -343,7 +396,7 @@ module Jazzy
|
|
343
396
|
# Merges redundant declarations when documenting podspecs.
|
344
397
|
def self.deduplicate_declarations(declarations)
|
345
398
|
duplicate_groups = declarations
|
346
|
-
.group_by { |d| deduplication_key(d) }
|
399
|
+
.group_by { |d| deduplication_key(d, declarations) }
|
347
400
|
.values
|
348
401
|
|
349
402
|
duplicate_groups.map do |group|
|
@@ -352,11 +405,18 @@ module Jazzy
|
|
352
405
|
end
|
353
406
|
end
|
354
407
|
|
408
|
+
# Returns true if an Objective-C declaration is mergeable.
|
409
|
+
def self.mergeable_objc?(decl, root_decls)
|
410
|
+
decl.type.objc_class? \
|
411
|
+
|| (decl.type.objc_category? \
|
412
|
+
&& name_match(decl.objc_category_name[0], root_decls))
|
413
|
+
end
|
414
|
+
|
355
415
|
# Two declarations get merged if they have the same deduplication key.
|
356
|
-
def self.deduplication_key(decl)
|
416
|
+
def self.deduplication_key(decl, root_decls)
|
357
417
|
if decl.type.swift_extensible? || decl.type.swift_extension?
|
358
418
|
[decl.usr, decl.name]
|
359
|
-
elsif decl
|
419
|
+
elsif mergeable_objc?(decl, root_decls)
|
360
420
|
name, _ = decl.objc_category_name || decl.name
|
361
421
|
[name, :objc_class_and_categories]
|
362
422
|
else
|
@@ -393,7 +453,8 @@ module Jazzy
|
|
393
453
|
decls = typedecls + extensions
|
394
454
|
decls.first.tap do |merged|
|
395
455
|
merged.children = deduplicate_declarations(
|
396
|
-
decls.flat_map(&:children).uniq
|
456
|
+
decls.flat_map(&:children).uniq,
|
457
|
+
)
|
397
458
|
merged.children.each do |child|
|
398
459
|
child.parent_in_code = merged
|
399
460
|
end
|
@@ -474,21 +535,8 @@ module Jazzy
|
|
474
535
|
# - method signatures after they've been processed by the highlighter
|
475
536
|
#
|
476
537
|
# The `after_highlight` flag is used to differentiate between the two modes.
|
477
|
-
# rubocop:disable Metrics/MethodLength
|
478
|
-
# rubocop:disable Metrics/PerceivedComplexity
|
479
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
480
538
|
def self.autolink_text(text, doc, root_decls, after_highlight = false)
|
481
|
-
|
482
|
-
if after_highlight
|
483
|
-
[/<span class="(?:n|kt)">/, '</span>']
|
484
|
-
else
|
485
|
-
['<code>', '</code>']
|
486
|
-
end
|
487
|
-
|
488
|
-
text.gsub(/(#{start_tag_re})[ \t]*([^\s]+)[ \t]*(#{end_tag_re})/) do
|
489
|
-
original = Regexp.last_match(0)
|
490
|
-
start_tag, raw_name, end_tag = Regexp.last_match.captures
|
491
|
-
|
539
|
+
text.autolink_block(doc.url, '[^\s]+', after_highlight) do |raw_name|
|
492
540
|
parts = raw_name
|
493
541
|
.split(/(?<!\.)\.(?!\.)/) # dot with no neighboring dots
|
494
542
|
.reject(&:empty?)
|
@@ -499,24 +547,24 @@ module Jazzy
|
|
499
547
|
name_match(first_part, root_decls)
|
500
548
|
|
501
549
|
# Traverse children via subsequence components, if any
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
550
|
+
name_traversal(parts, name_root)
|
551
|
+
end.autolink_block(doc.url, '[+-]\[\w+(?: ?\(\w+\))? [\w:]+\]',
|
552
|
+
after_highlight) do |raw_name|
|
553
|
+
match = raw_name.match(/([+-])\[(\w+(?: ?\(\w+\))?) ([\w:]+)\]/)
|
554
|
+
|
555
|
+
# Subject component can match any ancestor or top-level doc
|
556
|
+
subject = match[2].delete(' ')
|
557
|
+
name_root = ancestor_name_match(subject, doc) ||
|
558
|
+
name_match(subject, root_decls)
|
559
|
+
|
560
|
+
if name_root
|
561
|
+
# Look up the verb in the subject’s children
|
562
|
+
name_match(match[1] + match[3], name_root.children)
|
514
563
|
end
|
564
|
+
end.autolink_block(doc.url, '[+-]\w[\w:]*', after_highlight) do |raw_name|
|
565
|
+
name_match(raw_name, doc.children)
|
515
566
|
end
|
516
567
|
end
|
517
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
518
|
-
# rubocop:enable Metrics/PerceivedComplexity
|
519
|
-
# rubocop:enable Metrics/MethodLength
|
520
568
|
|
521
569
|
def self.autolink(docs, root_decls)
|
522
570
|
docs.each do |doc|
|
@@ -525,13 +573,17 @@ module Jazzy
|
|
525
573
|
doc.return = autolink_text(doc.return, doc, root_decls) if doc.return
|
526
574
|
doc.abstract = autolink_text(doc.abstract, doc, root_decls)
|
527
575
|
|
528
|
-
doc.declaration
|
529
|
-
doc.declaration
|
530
|
-
|
576
|
+
if doc.declaration
|
577
|
+
doc.declaration = autolink_text(
|
578
|
+
doc.declaration, doc, root_decls, true
|
579
|
+
)
|
580
|
+
end
|
531
581
|
|
532
|
-
doc.other_language_declaration
|
533
|
-
doc.other_language_declaration
|
534
|
-
|
582
|
+
if doc.other_language_declaration
|
583
|
+
doc.other_language_declaration = autolink_text(
|
584
|
+
doc.other_language_declaration, doc, root_decls, true
|
585
|
+
)
|
586
|
+
end
|
535
587
|
end
|
536
588
|
end
|
537
589
|
|
@@ -38,3 +38,9 @@ $(".token").click(function(event) {
|
|
38
38
|
}
|
39
39
|
event.preventDefault();
|
40
40
|
});
|
41
|
+
|
42
|
+
// Dumb down quotes within code blocks that delimit strings instead of quotations
|
43
|
+
// https://github.com/realm/jazzy/issues/714
|
44
|
+
$("code q").replaceWith(function () {
|
45
|
+
return ["\"", $(this).contents(), "\""];
|
46
|
+
});
|