fenton-jekyll-boilerplate 0.0.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.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/README.md +31 -0
  4. data/_authors/steve-fenton.md +21 -0
  5. data/_data/language.yaml +49 -0
  6. data/_includes/analytics.html +3 -0
  7. data/_includes/breadcrumbs.html +19 -0
  8. data/_includes/footer.html +3 -0
  9. data/_includes/head.html +27 -0
  10. data/_includes/header.html +18 -0
  11. data/_includes/javascripts.html +1 -0
  12. data/_includes/navigation.html +36 -0
  13. data/_includes/skiplinks.html +5 -0
  14. data/_layouts/author.html +39 -0
  15. data/_layouts/default.html +15 -0
  16. data/_layouts/page.html +11 -0
  17. data/_layouts/post.html +37 -0
  18. data/_layouts/search.html +24 -0
  19. data/_plugins/breadcrumbs/breadcrumb_item.rb +29 -0
  20. data/_plugins/breadcrumbs.rb +82 -0
  21. data/_plugins/jekyll-paginate/pager.rb +141 -0
  22. data/_plugins/jekyll-paginate/pagination.rb +85 -0
  23. data/_plugins/liquid_language.rb +38 -0
  24. data/_plugins/liquid_regex.rb +17 -0
  25. data/_plugins/markdown.rb +17 -0
  26. data/_plugins/paging.rb +7 -0
  27. data/articles/index.html +70 -0
  28. data/assets/css/code.css +188 -0
  29. data/assets/css/main.css +552 -0
  30. data/assets/css/vars.css +81 -0
  31. data/assets/icons/android-chrome-192x192.png +0 -0
  32. data/assets/icons/android-chrome-512x512.png +0 -0
  33. data/assets/icons/apple-touch-icon.png +0 -0
  34. data/assets/icons/favicon-16x16.png +0 -0
  35. data/assets/icons/favicon-32x32.png +0 -0
  36. data/assets/icons/favicon.ico +0 -0
  37. data/assets/img/2022/09/surface-accessories-700.webp +0 -0
  38. data/assets/img/2022/09/surface-accessories.webp +0 -0
  39. data/assets/img/authors/steve-fenton.webp +0 -0
  40. data/assets/img/jekyll-and-hyde.webp +0 -0
  41. data/assets/img/lighthouse-scores.webp +0 -0
  42. data/assets/js/main.js +18 -0
  43. data/assets/js/modules/animation.js +41 -0
  44. data/assets/js/modules/click-blocks.js +35 -0
  45. data/assets/js/modules/events.js +19 -0
  46. data/assets/js/modules/focus.js +76 -0
  47. data/assets/js/modules/nav-expand.js +51 -0
  48. data/assets/js/modules/nav-mobile.js +104 -0
  49. data/assets/js/modules/nav-sticky.js +54 -0
  50. data/assets/js/modules/query.js +42 -0
  51. data/assets/js/modules/resizing.js +43 -0
  52. data/assets/js/modules/string.js +49 -0
  53. data/assets/js/search.js +154 -0
  54. data/assets/svg/down.svg +38 -0
  55. data/feed/atom.xml +39 -0
  56. data/search.json +38 -0
  57. data/sitemap/authors.xml +15 -0
  58. data/sitemap/pages.xml +15 -0
  59. data/sitemap/posts.xml +15 -0
  60. data/sitemap.xml +15 -0
  61. metadata +130 -0
@@ -0,0 +1,82 @@
1
+ require_relative 'breadcrumbs/breadcrumb_item.rb'
2
+
3
+ module Jekyll
4
+ module Breadcrumbs
5
+ @@config = {}
6
+ @@siteAddress = ""
7
+ @@sideAddresses = {}
8
+
9
+ def self.clearAddressCache
10
+ @@sideAddresses = {}
11
+ end
12
+
13
+ def self.loadAddressCache(site)
14
+ clearAddressCache
15
+ site.documents.each { |page| addAddressItem(page.url, page['nav-title'] || page['title'] || '') } # collection files including posts
16
+ site.pages.each { |page| addAddressItem(page.url, page['nav-title'] || page['title'] || '') } # pages
17
+ site.posts.docs.each { |page| addAddressItem(page.url, page['nav-title'] || page['title'] || '') } # posts
18
+ end
19
+
20
+ def self.addAddressItem(url, title)
21
+ key = createAddressCacheKey(url)
22
+ @@sideAddresses[key] = {:url => url, :title => title}
23
+ end
24
+
25
+ def self.findAddressItem(path)
26
+ key = createAddressCacheKey(path)
27
+ @@sideAddresses[key] if key
28
+ end
29
+
30
+ def self.createAddressCacheKey(path)
31
+ path.chomp("/").empty? ? "/" : path.chomp("/")
32
+ end
33
+
34
+ def self.buildSideBreadcrumbs(side, payload)
35
+ payload["breadcrumbs"] = []
36
+ return if side.url == @@siteAddress && root_hide === true
37
+
38
+ drop = Jekyll::Breadcrumbs::BreadcrumbItem
39
+ position = 0
40
+
41
+ path = side.url.chomp("/").split(/(?=\/)/)
42
+ -1.upto(path.size - 1) do |int|
43
+ joined_path = int == -1 ? "" : path[0..int].join
44
+ item = findAddressItem(joined_path)
45
+ if item
46
+ position += 1
47
+ item[:position] = position
48
+ item[:root_image] = root_image
49
+ payload["breadcrumbs"] << drop.new(item)
50
+ end
51
+ end
52
+ end
53
+
54
+ # Config
55
+ def self.loadConfig(site)
56
+ config = site.config["breadcrumbs"] || {"root" => {"hide" => false, "image" => false}}
57
+ root = config["root"]
58
+ @@config[:root_hide] = root["hide"] || false
59
+ @@config[:root_image] = root["image"] || false
60
+
61
+ @@siteAddress = site.config["baseurl"] || "/"
62
+ @@siteAddress = "/" if @@siteAddress.empty?
63
+ end
64
+
65
+ def self.root_hide
66
+ @@config[:root_hide]
67
+ end
68
+
69
+ def self.root_image
70
+ @@config[:root_image]
71
+ end
72
+ end
73
+ end
74
+
75
+ Jekyll::Hooks.register :site, :pre_render do |site, payload|
76
+ Jekyll::Breadcrumbs::loadConfig(site)
77
+ Jekyll::Breadcrumbs::loadAddressCache(site)
78
+ end
79
+
80
+ Jekyll::Hooks.register [:pages, :documents], :pre_render do |side, payload|
81
+ Jekyll::Breadcrumbs::buildSideBreadcrumbs(side, payload)
82
+ end
@@ -0,0 +1,141 @@
1
+ module Jekyll
2
+ module Paginate
3
+ class Pager
4
+ attr_reader :page, :per_page, :posts, :total_posts, :total_pages,
5
+ :previous_page, :previous_page_path, :next_page, :next_page_path
6
+
7
+ # Calculate the number of pages.
8
+ #
9
+ # all_posts - The Array of all Posts.
10
+ # per_page - The Integer of entries per page.
11
+ #
12
+ # Returns the Integer number of pages.
13
+ def self.calculate_pages(all_posts, per_page)
14
+ (all_posts.size.to_f / per_page.to_i).ceil
15
+ end
16
+
17
+ # Determine if pagination is enabled the site.
18
+ #
19
+ # site - the Jekyll::Site object
20
+ #
21
+ # Returns true if pagination is enabled, false otherwise.
22
+ def self.pagination_enabled?(site)
23
+ !site.config['paginate'].nil? &&
24
+ site.pages.size > 0
25
+ end
26
+
27
+ # Static: Determine if a page is a possible candidate to be a template page.
28
+ # Page's name must be `index.html` and exist in any of the directories
29
+ # between the site source and `paginate_path`.
30
+ #
31
+ # config - the site configuration hash
32
+ # page - the Jekyll::Page about which we're inquiring
33
+ #
34
+ # Returns true if the
35
+ def self.pagination_candidate?(config, page)
36
+ page_dir = File.dirname(File.expand_path(remove_leading_slash(page.path), config['source']))
37
+ paginate_path = remove_leading_slash(config['paginate_path'])
38
+ paginate_path = File.expand_path(paginate_path, config['source'])
39
+ page.name == 'index.html' &&
40
+ in_hierarchy(config['source'], page_dir, File.dirname(paginate_path))
41
+ end
42
+
43
+ # Determine if the subdirectories of the two paths are the same relative to source
44
+ #
45
+ # source - the site source
46
+ # page_dir - the directory of the Jekyll::Page
47
+ # paginate_path - the absolute paginate path (from root of FS)
48
+ #
49
+ # Returns whether the subdirectories are the same relative to source
50
+ def self.in_hierarchy(source, page_dir, paginate_path)
51
+ return false if paginate_path == File.dirname(paginate_path)
52
+ return false if paginate_path == Pathname.new(source).parent
53
+ page_dir == paginate_path ||
54
+ in_hierarchy(source, page_dir, File.dirname(paginate_path))
55
+ end
56
+
57
+ # Static: Return the pagination path of the page
58
+ #
59
+ # site - the Jekyll::Site object
60
+ # num_page - the pagination page number
61
+ #
62
+ # Returns the pagination path as a string
63
+ def self.paginate_path(site, num_page)
64
+ return nil if num_page.nil?
65
+ return Pagination.first_page_url(site) if num_page <= 1
66
+ format = site.config['paginate_path']
67
+ if format.include?(":num")
68
+ format = format.sub(':num', num_page.to_s)
69
+ else
70
+ raise ArgumentError.new("Invalid pagination path: '#{format}'. It must include ':num'.")
71
+ end
72
+ ensure_leading_slash(format)
73
+ end
74
+
75
+ # Static: Return a String version of the input which has a leading slash.
76
+ # If the input already has a forward slash in position zero, it will be
77
+ # returned unchanged.
78
+ #
79
+ # path - a String path
80
+ #
81
+ # Returns the path with a leading slash
82
+ def self.ensure_leading_slash(path)
83
+ path[0..0] == "/" ? path : "/#{path}"
84
+ end
85
+
86
+ # Static: Return a String version of the input without a leading slash.
87
+ #
88
+ # path - a String path
89
+ #
90
+ # Returns the input without the leading slash
91
+ def self.remove_leading_slash(path)
92
+ ensure_leading_slash(path)[1..-1]
93
+ end
94
+
95
+ # Initialize a new Pager.
96
+ #
97
+ # site - the Jekyll::Site object
98
+ # page - The Integer page number.
99
+ # all_posts - The Array of all the site's Posts.
100
+ # num_pages - The Integer number of pages or nil if you'd like the number
101
+ # of pages calculated.
102
+ def initialize(site, page, all_posts, num_pages = nil)
103
+ @page = page
104
+ @per_page = site.config['paginate'].to_i
105
+ @total_pages = num_pages || Pager.calculate_pages(all_posts, @per_page)
106
+
107
+ if @page > @total_pages
108
+ raise RuntimeError, "page number can't be greater than total pages: #{@page} > #{@total_pages}"
109
+ end
110
+
111
+ init = (@page - 1) * @per_page
112
+ offset = (init + @per_page - 1) >= all_posts.size ? all_posts.size : (init + @per_page - 1)
113
+
114
+ @total_posts = all_posts.size
115
+ @posts = all_posts[init..offset]
116
+ @previous_page = @page != 1 ? @page - 1 : nil
117
+ @previous_page_path = Pager.paginate_path(site, @previous_page)
118
+ @next_page = @page != @total_pages ? @page + 1 : nil
119
+ @next_page_path = Pager.paginate_path(site, @next_page)
120
+ end
121
+
122
+ # Convert this Pager's data to a Hash suitable for use by Liquid.
123
+ #
124
+ # Returns the Hash representation of this Pager.
125
+ def to_liquid
126
+ {
127
+ 'page' => page,
128
+ 'per_page' => per_page,
129
+ 'posts' => posts,
130
+ 'total_posts' => total_posts,
131
+ 'total_pages' => total_pages,
132
+ 'previous_page' => previous_page,
133
+ 'previous_page_path' => previous_page_path,
134
+ 'next_page' => next_page,
135
+ 'next_page_path' => next_page_path
136
+ }
137
+ end
138
+
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,85 @@
1
+ module Jekyll
2
+ module Paginate
3
+ class Pagination < Generator
4
+ # This generator is safe from arbitrary code execution.
5
+ safe true
6
+
7
+ # This generator should be passive with regard to its execution
8
+ priority :lowest
9
+
10
+ # Generate paginated pages if necessary.
11
+ #
12
+ # site - The Site.
13
+ #
14
+ # Returns nothing.
15
+ def generate(site)
16
+ if Pager.pagination_enabled?(site)
17
+ if template = self.class.template_page(site)
18
+ paginate(site, template)
19
+ else
20
+ Jekyll.logger.warn "Pagination:", "Pagination is enabled, but I couldn't find " +
21
+ "an index.html page to use as the pagination template. Skipping pagination."
22
+ end
23
+ end
24
+ end
25
+
26
+ # Paginates the blog's posts. Renders the index.html file into paginated
27
+ # directories, e.g.: page2/index.html, page3/index.html, etc and adds more
28
+ # site-wide data.
29
+ #
30
+ # site - The Site.
31
+ # page - The index.html Page that requires pagination.
32
+ #
33
+ # {"paginator" => { "page" => <Number>,
34
+ # "per_page" => <Number>,
35
+ # "posts" => [<Post>],
36
+ # "total_posts" => <Number>,
37
+ # "total_pages" => <Number>,
38
+ # "previous_page" => <Number>,
39
+ # "next_page" => <Number> }}
40
+ def paginate(site, page)
41
+ all_posts = site.site_payload['site']['posts'].reject { |post| post['hidden'] }
42
+ pages = Pager.calculate_pages(all_posts, site.config['paginate'].to_i)
43
+ (1..pages).each do |num_page|
44
+ pager = Pager.new(site, num_page, all_posts, pages)
45
+ if num_page > 1
46
+ newpage = Page.new(site, site.source, page.dir, page.name)
47
+ newpage.pager = pager
48
+ newpage.dir = Pager.paginate_path(site, num_page)
49
+ site.pages << newpage
50
+ else
51
+ page.pager = pager
52
+ end
53
+ end
54
+ end
55
+
56
+ # Static: Fetch the URL of the template page. Used to determine the
57
+ # path to the first pager in the series.
58
+ #
59
+ # site - the Jekyll::Site object
60
+ #
61
+ # Returns the url of the template page
62
+ def self.first_page_url(site)
63
+ if page = Pagination.template_page(site)
64
+ page.url
65
+ else
66
+ nil
67
+ end
68
+ end
69
+
70
+ # Public: Find the Jekyll::Page which will act as the pager template
71
+ #
72
+ # site - the Jekyll::Site object
73
+ #
74
+ # Returns the Jekyll::Page which will act as the pager template
75
+ def self.template_page(site)
76
+ site.pages.select do |page|
77
+ Pager.pagination_candidate?(site.config, page)
78
+ end.sort do |one, two|
79
+ two.path.size <=> one.path.size
80
+ end.first
81
+ end
82
+
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,38 @@
1
+ require 'liquid'
2
+
3
+ module Jekyll
4
+ module Language
5
+
6
+ @@lang = nil
7
+
8
+ # Supplies translated text
9
+ #
10
+ # Usage: {{ 'author' | t: 'recent_articles' }}
11
+ def t(section, item)
12
+ site = @context.registers[:site]
13
+
14
+ if @@lang == nil
15
+ # Access this fewer times by keeping it as a module variable
16
+ @@lang = Jekyll.configuration({})['language']
17
+ end
18
+
19
+ # Find text in the site language (for example 'fr-be')
20
+ text = site.data['language'][section][item][@@lang]
21
+
22
+ # Fall back to a more general version of the language (for example 'fr')
23
+ if text == nil and @@lang.include? '-'
24
+ fallback_lang = @@lang.split('-')[0];
25
+ text = site.data['language'][section][item][fallback_lang]
26
+ end
27
+
28
+ if text == nil
29
+ # Fallback to English text
30
+ text = site.data['language'][section][item]['en']
31
+ end
32
+
33
+ return text
34
+ end
35
+ end
36
+ end
37
+
38
+ Liquid::Template.register_filter(Jekyll::Language)
@@ -0,0 +1,17 @@
1
+ require 'liquid'
2
+
3
+ module Jekyll
4
+ module RegexReplace
5
+ def regex_replace(str, regex_search, value_replace)
6
+ regex = /#{regex_search}/
7
+ return str.gsub(regex, value_replace)
8
+ end
9
+
10
+ def regex_replace_once(str, regex_search, value_replace)
11
+ regex = /#{regex_search}/
12
+ return str.sub(regex, value_replace)
13
+ end
14
+ end
15
+ end
16
+
17
+ Liquid::Template.register_filter(Jekyll::RegexReplace)
@@ -0,0 +1,17 @@
1
+ Jekyll::Hooks.register :posts, :post_init do |item|
2
+ item.content = item.content
3
+ &.gsub(/^:::([a-z \-_]+)/, '<div class="\1" markdown="1">')
4
+ &.gsub(/^:::/, '</div>')
5
+ end
6
+
7
+ Jekyll::Hooks.register :pages, :post_init do |item|
8
+ item.content = item.content
9
+ &.gsub(/^:::([a-z \-_]+)/, '<div class="\1" markdown="1">')
10
+ &.gsub(/^:::/, '</div>')
11
+ end
12
+
13
+ Jekyll::Hooks.register :documents, :post_init do |item|
14
+ item.content = item.content
15
+ &.gsub(/^:::([a-z \-_]+)/, '<div class="\1" markdown="1">')
16
+ &.gsub(/^:::/, '</div>')
17
+ end
@@ -0,0 +1,7 @@
1
+ require "jekyll-paginate/pager"
2
+ require "jekyll-paginate/pagination"
3
+
4
+ module Jekyll
5
+ module Extensions
6
+ end
7
+ end
@@ -0,0 +1,70 @@
1
+ ---
2
+ layout: default
3
+ title: Articles
4
+ date: 2022-09-06
5
+ authors: steve-fenton
6
+ description: Articles about Jekyll Boilerplate.
7
+ nav-title: Articles
8
+ nav-level: 1
9
+ nav-order: 3000
10
+ published: true
11
+ nav-sitemap: true
12
+ nav-search: true
13
+ # Don't use permalink on list pages
14
+ ---
15
+ <main id="site-main">
16
+ <h1>{{ 'articles' | t: 'title' }}</h1>
17
+ {%- if site.paginate %}
18
+ {% assign posts = paginator.posts %}
19
+ {% else %}
20
+ {% assign posts = site.posts %}
21
+ {% endif %}
22
+ {%- if posts.size > 0 -%}
23
+ <ul class="post-list">
24
+ {%- assign date_format = site.date_format | default: "%b %-d, %Y" -%}
25
+ {%- for post in posts -%}
26
+ <li class="list-item" data-destination="{{ post.url | relative_url }}">
27
+ {%- if post.banner-image -%}
28
+ <img src="{{ post.banner-image }}" alt="{{ post.banner-image-alt }}" {% unless forloop.first %}loading="lazy"{% endunless %} />
29
+ {%- endif -%}
30
+ <div class="list-item-content">
31
+ <span class="post-meta">{{ post.date | date: date_format }}</span>
32
+ <h2>
33
+ <a href="{{ post.url | relative_url }}">
34
+ {{ post.title | escape }}
35
+ </a>
36
+ </h2>
37
+ {%- if site.show_excerpts -%}
38
+ {{ post.excerpt | default: post.description }}
39
+ {%- endif -%}
40
+ </div>
41
+ </li>
42
+ {%- endfor -%}
43
+ </ul>
44
+
45
+ {% if paginator.total_pages > 1 %}
46
+ <div class="post-paging">
47
+ {% if paginator.previous_page %}
48
+ <a href="{{ paginator.previous_page_path | relative_url }}">&laquo; {{ 'articles' | t: 'previous' }}</a>
49
+ {% else %}
50
+ <span>&laquo; {{ 'articles' | t: 'previous' }}</span>
51
+ {% endif %}
52
+
53
+ {% for page in (1..paginator.total_pages) %}
54
+ {% if page == paginator.page %}
55
+ <em>{{ page }}</em>
56
+ {% else %}
57
+ {% assign page_one_link = '/' | append: site.paginate_page | append: '1' | append: '/' %}
58
+ <a href="{{ site.paginate_path | relative_url | replace: ':num', page | replace: page_one_link, '/' }}">{{ page }}</a>
59
+ {% endif %}
60
+ {% endfor %}
61
+
62
+ {% if paginator.next_page %}
63
+ <a href="{{ paginator.next_page_path | relative_url }}">{{ 'articles' | t: 'next' }} &raquo;</a>
64
+ {% else %}
65
+ <span>{{ 'articles' | t: 'next' }} &raquo;</span>
66
+ {% endif %}
67
+ </div>
68
+ {% endif %}
69
+ {%- endif -%}
70
+ </main>
@@ -0,0 +1,188 @@
1
+ .highlight {
2
+ background: #FFF;
3
+ color: #333;
4
+ }
5
+
6
+ @media (prefers-color-scheme: dark) {
7
+ .highlight {
8
+ background: #f3f3f3;
9
+ color: #333;
10
+ }
11
+ }
12
+
13
+ /* Comment */
14
+ .highlight .c { color: #999988; font-style: italic }
15
+
16
+ /* Error */
17
+ .highlight .err { color: #a61717; background-color: #e3d2d2 }
18
+
19
+ /* Keyword */
20
+ .highlight .k { font-weight: bold }
21
+
22
+ /* Operator */
23
+ .highlight .o { font-weight: bold }
24
+
25
+ /* Comment.Multiline */
26
+ .highlight .cm { color: #999988; font-style: italic }
27
+
28
+ /* Comment.Preproc */
29
+ .highlight .cp { color: #999999; font-weight: bold }
30
+
31
+ /* Comment.Single */
32
+ .highlight .c1 { color: #999988; font-style: italic }
33
+
34
+ /* Comment.Special */
35
+ .highlight .cs { color: #999999; font-weight: bold; font-style: italic }
36
+
37
+ /* Generic.Deleted */
38
+ .highlight .gd { color: #000000; background-color: #ffdddd }
39
+
40
+ /* Generic.Deleted.Specific */
41
+ .highlight .gd .x { color: #000000; background-color: #ffaaaa }
42
+
43
+ /* Generic.Emph */
44
+ .highlight .ge { font-style: italic }
45
+
46
+ /* Generic.Error */
47
+ .highlight .gr { color: #aa0000 }
48
+
49
+ /* Generic.Heading */
50
+ .highlight .gh { color: #999999 }
51
+
52
+ /* Generic.Inserted */
53
+ .highlight .gi { color: #000000; background-color: #ddffdd }
54
+
55
+ /* Generic.Inserted.Specific */
56
+ .highlight .gi .x { color: #000000; background-color: #aaffaa }
57
+
58
+ /* Generic.Output */
59
+ .highlight .go { color: #888888 }
60
+
61
+ /* Generic.Prompt */
62
+ .highlight .gp { color: #555555 }
63
+
64
+ /* Generic.Strong */
65
+ .highlight .gs { font-weight: bold }
66
+
67
+ /* Generic.Subheading */
68
+ .highlight .gu { color: #aaaaaa }
69
+
70
+ /* Generic.Traceback */
71
+ .highlight .gt { color: #aa0000 }
72
+
73
+ /* Keyword.Constant */
74
+ .highlight .kc { font-weight: bold }
75
+
76
+ /* Keyword.Declaration */
77
+ .highlight .kd { font-weight: bold }
78
+
79
+ /* Keyword.Pseudo */
80
+ .highlight .kp { font-weight: bold }
81
+
82
+ /* Keyword.Reserved */
83
+ .highlight .kr { font-weight: bold }
84
+
85
+ /* Keyword.Type */
86
+ .highlight .kt { color: #445588; font-weight: bold }
87
+
88
+ /* Literal.Number */
89
+ .highlight .m { color: #009999 }
90
+
91
+ /* Literal.String */
92
+ .highlight .s { color: #d14 }
93
+
94
+ /* Name.Attribute */
95
+ .highlight .na { color: #008080 }
96
+
97
+ /* Name.Builtin */
98
+ .highlight .nb { color: #0086B3 }
99
+
100
+ /* Name.Class */
101
+ .highlight .nc { color: #445588; font-weight: bold }
102
+
103
+ /* Name.Constant */
104
+ .highlight .no { color: #008080 }
105
+
106
+ /* Name.Entity */
107
+ .highlight .ni { color: #800080 }
108
+
109
+ /* Name.Exception */
110
+ .highlight .ne { color: #990000; font-weight: bold }
111
+
112
+ /* Name.Function */
113
+ .highlight .nf { color: #990000; font-weight: bold }
114
+
115
+ /* Name.Namespace */
116
+ .highlight .nn { color: #555555 }
117
+
118
+ /* Name.Tag */
119
+ .highlight .nt { color: #000080 }
120
+
121
+ /* Name.Variable */
122
+ .highlight .nv { color: #008080 }
123
+
124
+ /* Operator.Word */
125
+ .highlight .ow { font-weight: bold }
126
+
127
+ /* Text.Whitespace */
128
+ .highlight .w { color: #bbbbbb }
129
+
130
+ /* Literal.Number.Float */
131
+ .highlight .mf { color: #009999 }
132
+
133
+ /* Literal.Number.Hex */
134
+ .highlight .mh { color: #009999 }
135
+
136
+ /* Literal.Number.Integer */
137
+ .highlight .mi { color: #009999 }
138
+
139
+ /* Literal.Number.Oct */
140
+ .highlight .mo { color: #009999 }
141
+
142
+ /* Literal.String.Backtick */
143
+ .highlight .sb { color: #d14 }
144
+
145
+ /* Literal.String.Char */
146
+ .highlight .sc { color: #d14 }
147
+
148
+ /* Literal.String.Doc */
149
+ .highlight .sd { color: #d14 }
150
+
151
+ /* Literal.String.Double */
152
+ .highlight .s2 { color: #d14 }
153
+
154
+ /* Literal.String.Escape */
155
+ .highlight .se { color: #d14 }
156
+
157
+ /* Literal.String.Heredoc */
158
+ .highlight .sh { color: #d14 }
159
+
160
+ /* Literal.String.Interpol */
161
+ .highlight .si { color: #d14 }
162
+
163
+ /* Literal.String.Other */
164
+ .highlight .sx { color: #d14 }
165
+
166
+ /* Literal.String.Regex */
167
+ .highlight .sr { color: #009926 }
168
+
169
+ /* Literal.String.Single */
170
+ .highlight .s1 { color: #d14 }
171
+
172
+ /* Literal.String.Symbol */
173
+ .highlight .ss { color: #990073 }
174
+
175
+ /* Name.Builtin.Pseudo */
176
+ .highlight .bp { color: #999999 }
177
+
178
+ /* Name.Variable.Class */
179
+ .highlight .vc { color: #008080 }
180
+
181
+ /* Name.Variable.Global */
182
+ .highlight .vg { color: #008080 }
183
+
184
+ /* Name.Variable.Instance */
185
+ .highlight .vi { color: #008080 }
186
+
187
+ /* Literal.Number.Integer.Long */
188
+ .highlight .il { color: #009999 }