File tree Expand file tree Collapse file tree 16 files changed +374
-231
lines changed Expand file tree Collapse file tree 16 files changed +374
-231
lines changed Original file line number Diff line number Diff line change
1
+ ruby '>=2.3.1'
1
2
source 'https://rubygems.org'
2
3
3
4
# Middleman
4
5
gem 'middleman' , '~>4.2.1'
5
6
gem 'middleman-syntax' , '~> 3.0.0'
6
7
gem 'middleman-autoprefixer' , '~> 2.7.0'
7
8
gem "middleman-sprockets" , "~> 4.1.0"
8
- gem "middleman-livereload"
9
9
gem 'rouge' , '~> 2.0.5'
10
- # gem 'redcarpet', '~> 3.4.0'
11
- gem 'maruku '
10
+ gem 'redcarpet' , '~> 3.4.0'
11
+ gem 'nokogiri' , '~> 1.6.8 '
Original file line number Diff line number Diff line change 20
20
concurrent-ruby (1.0.4 )
21
21
contracts (0.13.0 )
22
22
dotenv (2.2.0 )
23
- em-websocket (0.5.1 )
24
- eventmachine (>= 0.12.9 )
25
- http_parser.rb (~> 0.6.0 )
26
23
erubis (2.7.0 )
27
- eventmachine (1.2.3 )
28
24
execjs (2.7.0 )
29
25
fast_blank (1.0.0 )
30
26
fastimage (2.0.1 )
35
31
hamster (3.0.0 )
36
32
concurrent-ruby (~> 1.0 )
37
33
hashie (3.5.1 )
38
- http_parser.rb (0.6.0 )
39
34
i18n (0.7.0 )
40
35
kramdown (1.13.2 )
41
36
listen (3.0.8 )
42
37
rb-fsevent (~> 0.9 , >= 0.9.4 )
43
38
rb-inotify (~> 0.9 , >= 0.9.7 )
44
- maruku (0.7.3 )
45
39
memoist (0.15.0 )
46
40
middleman (4.2.1 )
47
41
coffee-script (~> 2.2 )
79
73
servolux
80
74
tilt (~> 2.0 )
81
75
uglifier (~> 3.0 )
82
- middleman-livereload (3.4.6 )
83
- em-websocket (~> 0.5.1 )
84
- middleman-core (>= 3.3 )
85
- rack-livereload (~> 0.3.15 )
86
76
middleman-sprockets (4.1.0 )
87
77
middleman-core (~> 4.0 )
88
78
sprockets (>= 3.0 )
89
79
middleman-syntax (3.0.0 )
90
80
middleman-core (>= 3.2 )
91
81
rouge (~> 2.0 )
82
+ mini_portile2 (2.1.0 )
92
83
minitest (5.10.1 )
84
+ nokogiri (1.6.8.1 )
85
+ mini_portile2 (~> 2.1.0 )
93
86
padrino-helpers (0.13.3.3 )
94
87
i18n (~> 0.6 , >= 0.6.7 )
95
88
padrino-support (= 0.13.3.3 )
99
92
parallel (1.10.0 )
100
93
public_suffix (2.0.5 )
101
94
rack (2.0.1 )
102
- rack-livereload (0.3.16 )
103
- rack
104
95
rb-fsevent (0.9.8 )
105
96
rb-inotify (0.9.8 )
106
97
ffi (>= 0.5.0 )
98
+ redcarpet (3.4.0 )
107
99
rouge (2.0.7 )
108
100
sass (3.4.23 )
109
101
servolux (0.12.0 )
@@ -122,13 +114,16 @@ PLATFORMS
122
114
ruby
123
115
124
116
DEPENDENCIES
125
- maruku
126
117
middleman (~> 4.2.1 )
127
118
middleman-autoprefixer (~> 2.7.0 )
128
- middleman-livereload
129
119
middleman-sprockets (~> 4.1.0 )
130
120
middleman-syntax (~> 3.0.0 )
121
+ nokogiri (~> 1.6.8 )
122
+ redcarpet (~> 3.4.0 )
131
123
rouge (~> 2.0.5 )
132
124
125
+ RUBY VERSION
126
+ ruby 2.4.0p0
127
+
133
128
BUNDLED WITH
134
- 1.14.6
129
+ 1.15.3
Original file line number Diff line number Diff line change @@ -5,10 +5,12 @@ Vagrant.configure(2) do |config|
5
5
config . vm . provision "bootstrap" ,
6
6
type : "shell" ,
7
7
inline : <<-SHELL
8
+ sudo apt-add-repository ppa:brightbox/ruby-ng
8
9
sudo apt-get update
9
- sudo apt-get install -yq ruby2.0 ruby2.0-dev pkg-config build-essential nodejs git libxml2-dev libxslt-dev
10
+ sudo apt-get install -yq ruby2.4 ruby2.4-dev
11
+ sudo apt-get install -yq pkg-config build-essential nodejs git libxml2-dev libxslt-dev
10
12
sudo apt-get autoremove -yq
11
- gem2.0 install --no-ri --no-rdoc bundler
13
+ gem2.4 install --no-ri --no-rdoc bundler
12
14
SHELL
13
15
14
16
# add the local user git config to the vm
@@ -34,6 +36,6 @@ Vagrant.configure(2) do |config|
34
36
echo "Starting up middleman at http://localhost:4567"
35
37
echo "If it does not come up, check the ~/middleman.log file for any error messages"
36
38
cd /vagrant
37
- bundle exec middleman server --force-polling --latency=1 &> ~/middleman.log &
39
+ bundle exec middleman server --watcher- force-polling --watcher -latency=1 &> ~/middleman.log &
38
40
SHELL
39
- end
41
+ end
Original file line number Diff line number Diff line change
1
+ # Unique header generation
2
+ require './lib/unique_head.rb'
3
+
1
4
# Markdown
2
- set :markdown_engine , :maruku
5
+ set :markdown_engine , :redcarpet
3
6
set :markdown ,
4
7
fenced_code_blocks : true ,
5
8
smartypants : true ,
6
9
disable_indented_code_blocks : true ,
7
10
prettify : true ,
8
11
tables : true ,
9
12
with_toc_data : true ,
10
- no_intra_emphasis : true
13
+ no_intra_emphasis : true ,
14
+ renderer : UniqueHeadCounter
11
15
12
16
# Assets
13
17
set :css_dir , 'stylesheets'
14
18
set :js_dir , 'javascripts'
15
19
set :images_dir , 'images'
16
20
set :fonts_dir , 'fonts'
17
21
18
- # Reload the browser automatically whenever files change
19
- activate :livereload
20
-
21
22
# Activate the syntax highlighter
22
23
activate :syntax
23
24
ready do
50
51
# Deploy Configuration
51
52
# If you want Middleman to listen on a different port, you can set that below
52
53
set :port , 4567
54
+
55
+ helpers do
56
+ require './lib/toc_data.rb'
57
+ end
Original file line number Diff line number Diff line change 1
1
module Multilang
2
2
def block_code ( code , full_lang_name )
3
- parts = full_lang_name . split ( '--' )
4
- rouge_lang_name = parts [ 0 ] || ""
5
- super ( code , rouge_lang_name ) . sub ( "highlight #{ rouge_lang_name } " ) do |match |
6
- match + " tab-" + full_lang_name
3
+ if full_lang_name
4
+ parts = full_lang_name . split ( '--' )
5
+ rouge_lang_name = ( parts ) ? parts [ 0 ] : "" # just parts[0] here causes null ref exception when no language specified
6
+ super ( code , rouge_lang_name ) . sub ( "highlight #{ rouge_lang_name } " ) do |match |
7
+ match + " tab-" + full_lang_name
8
+ end
9
+ else
10
+ super ( code , full_lang_name )
7
11
end
8
12
end
9
13
end
10
14
11
- #require 'middleman-core/renderers/redcarpet'
12
- #Middleman::Renderers::MiddlemanRedcarpetHTML.send :include, Multilang
13
-
14
- #require 'middleman-core/renderers/maruku'
15
- #Middleman::Renderers::Maruku.send :include, Multilang
15
+ require 'middleman-core/renderers/redcarpet'
16
+ Middleman ::Renderers ::MiddlemanRedcarpetHTML . send :include , Multilang
Original file line number Diff line number Diff line change
1
+ require 'nokogiri'
2
+
3
+ def toc_data ( page_content )
4
+ html_doc = Nokogiri ::HTML ::DocumentFragment . parse ( page_content )
5
+
6
+ # get a flat list of headers
7
+ headers = [ ]
8
+ html_doc . css ( 'h1, h2, h3' ) . each do |header |
9
+ headers . push ( {
10
+ id : header . attribute ( 'id' ) . to_s ,
11
+ content : header . children ,
12
+ level : header . name [ 1 ] . to_i ,
13
+ children : [ ]
14
+ } )
15
+ end
16
+
17
+ [ 3 , 2 ] . each do |header_level |
18
+ header_to_nest = nil
19
+ headers = headers . reject do |header |
20
+ if header [ :level ] == header_level
21
+ header_to_nest [ :children ] . push header if header_to_nest
22
+ true
23
+ else
24
+ header_to_nest = header if header [ :level ] < header_level
25
+ false
26
+ end
27
+ end
28
+ end
29
+ headers
30
+ end
Original file line number Diff line number Diff line change
1
+ # Unique header generation
2
+ require 'middleman-core/renderers/redcarpet'
3
+ class UniqueHeadCounter < Middleman ::Renderers ::MiddlemanRedcarpetHTML
4
+ def initialize
5
+ super
6
+ @head_count = { }
7
+ end
8
+ def header ( text , header_level )
9
+ friendly_text = text . parameterize
10
+ @head_count [ friendly_text ] ||= 0
11
+ @head_count [ friendly_text ] += 1
12
+ if @head_count [ friendly_text ] > 1
13
+ friendly_text += "-#{ @head_count [ friendly_text ] } "
14
+ end
15
+ return "<h#{ header_level } id='#{ friendly_text } '>#{ text } </h#{ header_level } >"
16
+ end
17
+ end
You can’t perform that action at this time.
0 commit comments