markdown_helper 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile.lock +1 -1
  3. data/README.md +74 -208
  4. data/Rakefile +0 -1
  5. data/lib/markdown_helper.rb +115 -248
  6. data/lib/markdown_helper/version.rb +1 -1
  7. data/markdown/readme/README.template.md +43 -101
  8. data/markdown/readme/include.md +4 -0
  9. data/markdown/readme/include_usage.rb +1 -2
  10. data/markdown/use_cases/Rakefile +28 -31
  11. data/markdown/use_cases/include_files/diagnose_circular_includes/diagnose_circular_includes.err +1 -1
  12. data/markdown/use_cases/include_files/diagnose_circular_includes/use_case.md +1 -1
  13. data/markdown/use_cases/include_files/diagnose_circular_includes/{diagnose_circular_includes.rb → use_case_builder.rb} +1 -2
  14. data/markdown/use_cases/include_files/diagnose_missing_includee/diagnose_missing_includee.err +1 -1
  15. data/markdown/use_cases/include_files/diagnose_missing_includee/use_case.md +1 -1
  16. data/markdown/use_cases/include_files/diagnose_missing_includee/{diagnose_missing_includee.rb → use_case_builder.rb} +1 -2
  17. data/markdown/use_cases/include_files/include_code_block/{include_code_block.rb → use_case_builder.rb} +1 -2
  18. data/markdown/use_cases/include_files/include_generated_text/{include_generated_text.rb → use_case_builder.rb} +1 -2
  19. data/markdown/use_cases/include_files/include_highlighted_code/{include_highlighted_code.rb → use_case_builder.rb} +1 -2
  20. data/markdown/use_cases/include_files/include_markdown/{include_markdown.rb → use_case_builder.rb} +1 -2
  21. data/markdown/use_cases/include_files/include_page_toc/included.md +48 -0
  22. data/markdown/use_cases/include_files/include_page_toc/includer.md +16 -0
  23. data/markdown/use_cases/include_files/include_page_toc/markdown_0.md +8 -0
  24. data/markdown/use_cases/include_files/include_page_toc/markdown_1.md +8 -0
  25. data/markdown/use_cases/include_files/include_page_toc/use_case.md +212 -0
  26. data/markdown/use_cases/include_files/include_page_toc/use_case_builder.rb +121 -0
  27. data/markdown/use_cases/include_files/include_page_toc/use_case_template.md +46 -0
  28. data/markdown/use_cases/include_files/include_text_as_comment/{include_text_as_comment.rb → use_case_builder.rb} +1 -2
  29. data/markdown/use_cases/include_files/include_text_as_pre/{include_text_as_pre.rb → use_case_builder.rb} +1 -2
  30. data/markdown/use_cases/include_files/include_use_case.rb +2 -8
  31. data/markdown/use_cases/include_files/include_with_added_comments/{include_with_added_comments.rb → use_case_builder.rb} +2 -3
  32. data/markdown/use_cases/include_files/nest_inclusions/{nest_inclusions.rb → use_case_builder.rb} +1 -2
  33. data/markdown/use_cases/include_files/reuse_text/{reuse_text.rb → use_case_builder.rb} +3 -2
  34. data/markdown/use_cases/structure.md +10 -0
  35. data/markdown/use_cases/tables_of_contents/create_and_include_page_toc/included.md +44 -0
  36. data/markdown/use_cases/tables_of_contents/create_and_include_page_toc/page.md +7 -7
  37. data/markdown/use_cases/tables_of_contents/create_and_include_page_toc/toc.md +7 -7
  38. data/markdown/use_cases/tables_of_contents/create_and_include_page_toc/{create_and_include_page_toc.rb → use_case_builder.rb} +1 -2
  39. data/markdown/use_cases/tables_of_contents/create_page_toc_use_case.rb +1 -1
  40. data/markdown/use_cases/use_case.rb +14 -15
  41. data/markdown/use_cases/use_cases.md +2 -4
  42. data/markdown_helper.gemspec +0 -2
  43. metadata +24 -29
  44. data/bin/_resolve +0 -46
  45. data/bin/resolve +0 -49
  46. data/bin/usage/resolve.txt +0 -14
  47. data/images/html.png +0 -0
  48. data/markdown/readme/resolve_usage.rb +0 -12
  49. data/markdown/use_cases/include_files/diagnose_missing_includee/included.md +0 -1
  50. data/markdown/use_cases/resolve/gemify_images/gemify_images.md +0 -11
  51. data/markdown/use_cases/resolve/gemify_images/gemify_images.rb +0 -68
  52. data/markdown/use_cases/resolve/gemify_images/relative_image.md +0 -1
  53. data/markdown/use_cases/resolve/gemify_images/resolved_image.md +0 -1
  54. data/markdown/use_cases/resolve/gemify_images/template.md +0 -15
  55. data/markdown/use_cases/resolve/resize_images/template.md +0 -8
@@ -1,3 +1,3 @@
1
1
  class MarkdownHelper
2
- VERSION = '2.0.0'
2
+ VERSION = '2.1.0'
3
3
  end
@@ -1,37 +1,32 @@
1
1
  # Markdown Helper
2
2
 
3
- ![Gem Version](https://badge.fury.io/rb/markdown_helper.svg) [Visit gem markdown_helper](https://rubygems.org/gems/markdown_helper)
4
-
5
- ## Deprecated
6
-
7
- - Method ```:resolve```.
8
- - Command ```markdown_helper resolve```.
3
+ [![Gem](https://img.shields.io/gem/v/markdown_helper.svg?style=flat)](http://rubygems.org/gems/markdown_helper "View this project in Rubygems")
9
4
 
10
5
  ## What's New?
11
6
 
12
- Treatments for included file:
7
+ Page TOC (table of contents) is improved:
13
8
 
14
- - Support is added for including a file as a comment. See the [use case](markdown/use_cases/include_files/include_text_as_comment/use_case.md#include-text-as-comment).
15
- - Support is added for including a file as pre-formatted. See the [use case](markdown/use_cases/include_files/include_text_as_pre/use_case.md#include-text-as-pre).
9
+ - **Old**: You would first run the markdown helper to generate a page TOC, then run the helper a second time to include the page TOC where you want it.
10
+ - **New**: You specify the site for the page TOC in the page itself, and the page TOC is automatically generated and inserted there. See the [use case](markdown/use_cases/include_files/include_page_toc/use_case.md#include-page-toc)
16
11
 
17
- (The new version, 2.0.0, is not a major increment over version 1.9.9. Numbers just ran out.)
12
+ The old way is now deprecated.
13
+
14
+ @[:page_toc](## Contents)
18
15
 
19
16
  ## What's a Markdown Helper?
20
17
 
21
18
  Class <code>MarkdownHelper</code> supports:
22
19
 
23
20
  * [File inclusion](#file-inclusion): to include text from other files, as code-block or markdown.
24
- * [Page TOC](#page-toc): to create the table of contents for a markdown page.
25
- * [Image path resolution](#image-path-resolution): to resolve relative image paths to absolute URL paths (so they work even in gem documentation). [Deprecated]**
26
- * [Image attributes](#image-attributes): image attributes are passed through to an HTML <code>img</code> tag. [Deprecated]**
21
+ * [Page TOC](#page-toc): to create and insert the table of contents for a markdown page.
27
22
 
28
23
  ## How It Works
29
24
 
30
25
  The markdown helper is a preprocessor that reads a markdown document (template) and writes another markdown document.
31
26
 
32
- The template can contain certain instructions that call for file inclusions and image resolutions.
27
+ The template can contain certain instructions that call for file inclusions.
33
28
 
34
- ### Restriction: ```git``` Only
29
+ ### Restriction: ```git``` Only
35
30
 
36
31
  The helper works only in a ```git``` project: the working directory or one of ita parents must be a git directory -- one in which command ```git rev-parse --git-dir``` succeeds.
37
32
 
@@ -41,11 +36,10 @@ By default, the output markdown has added comments that show:
41
36
 
42
37
  * The path to the template file.
43
38
  * The path to each included file.
44
- * The image description (original) for each resolved image file path. [Deprecated]**
45
39
 
46
40
  You can suppress those comments using the <code>pristine</code> option.
47
41
 
48
- ## File Inclusion
42
+ ## File Inclusion
49
43
 
50
44
  <img src="images/include.png" alt="include_icon" width="50">
51
45
 
@@ -53,31 +47,41 @@ This markdown helper enables file inclusion in GitHub markdown.
53
47
 
54
48
  (Actually, this README file itself is built using file inclusion.)
55
49
 
56
- Use the markdown helper to merge external files into a markdown (</code>.md</code>) file.
50
+ See all [use cases](markdown/use_cases/use_cases.md#use-cases).
51
+
52
+ ### Re-use Text
53
+
54
+ Keep your markdown DRY (Don't Repeat Yourself) by re-using text. See the [use case](markdown/use_cases/include_files/reuse_text/use_case.md#reuse-text).
55
+
56
+ ### Include Generated Text
57
+
58
+ In particular, you can include text that's built during your "readme build." See the [use case](markdown/use_cases/include_files/include_generated_text/use_case.md#include-generated-text).
57
59
 
58
- See the [use cases](markdown/use_cases/use_cases.md#use-cases).
60
+ ### Nest Inclusions
61
+
62
+ You can nest inclusions. See the [use case](markdown/use_cases/include_files/nest_inclusions/use_case.md#nest-inclusions).
59
63
 
60
64
  ### Merged Text Formats
61
65
 
66
+ #### Markdown
67
+
68
+ You can include text that is to be treated simply as markdown. See the [use case](markdown/use_cases/include_files/include_markdown/use_case.md#include-markdown).
69
+
62
70
  #### Highlighted Code Block
63
71
 
64
- @[ruby](include.rb)
72
+ You can include a code block that's to be highlighted. See the [use case](markdown/use_cases/include_files/include_highlighted_code/use_case.md#include-highlighted-code).
65
73
 
66
74
  #### Plain Code Block
67
75
 
68
- @[:code_block](include.rb)
69
-
70
- [Note: In the gem documentation, RubyDoc.info chooses to highlight this code block regardless. Go figure.]
76
+ You can also include a code block without highlighting. See the [use case](markdown/use_cases/include_files/include_code_block/use_case.md#include-code-block).
71
77
 
72
78
  #### Comment
73
79
 
74
- Comment text is written into the output between the comment delimiters <code>\<!--</code> and <code>--></code>
75
-
76
- #### Markdown
80
+ You can include text that's to become a comment in the markdown. See the [use case](markdown/use_cases/include_files/include_text_as_comment/use_case.md#include-text-as-comment).
77
81
 
78
- Markdown text is included unadorned, and will be processed on GitHub as markdown.
82
+ ### Pre-Formattted Text
79
83
 
80
- The markdown text is itself scanned for nested includes.
84
+ You can include text that's pre-formatted. See the [use case](markdown/use_cases/include_files/include_text_as_pre/use_case.md#include-text-as-pre).
81
85
 
82
86
  ### Usage
83
87
 
@@ -101,93 +105,31 @@ where:
101
105
  * Highlighting mode such as <code>[ruby]</code>, to include a highlighted code block. This can be any Ace mode mentioned in [GitHub Languages](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml).
102
106
  * <code>[:code_block]</code>, to include a plain code block.
103
107
  * <code>[:markdown]</code>, to include text markdown (to be rendered as markdown).
108
+ * <code>[:comment]</code>, to insert text as a markdown comment.
109
+ * <code>[:pre]</code>, to include pre-formatted text.
104
110
  * *relative_file_path* points to the file to be included.
105
111
 
106
112
  ##### Example Include Descriptions
107
113
 
108
114
  @[code_block](include.md)
109
115
 
110
- ## Page TOC
111
-
112
- The markdown helper can create the table of contents for a markdown page.
113
- - The TOC is a tree of links to the headers on the page, suitable for inclusion with the page itself.
114
- - See the [use case](markdown/use_cases/tables_of_contents/create_and_include_page_toc/use_case.md#create-and-include-page-toc).
115
-
116
-
117
-
118
- ## Image Path Resolution **[Deprecated]**
119
-
120
- <img src="images/image.png" alt="image_icon" width="50">
121
-
122
- This markdown helper enables image path resolution in GitHub markdown.
123
-
124
- (Actually, this README file itself is built using image path resolution.)
125
-
126
- Use the markdown helper to resolve image relative paths in a markdown (</code>.md</code>) file.
127
-
128
- This matters because when markdown becomes part of a Ruby gem, its images will have been relocated in the documentation at RubyDoc.info, breaking the relative paths. The resolved (absolute) urls, however, will still be valid.
129
-
130
- ### Usage
131
-
132
- #### CLI
133
-
134
- @[:code_block](../../bin/usage/resolve.txt)
135
-
136
- #### API
137
-
138
- @[ruby](resolve_usage.rb)
139
-
140
- #### Image Descriptions
141
-
142
- Specify each image at the beginning of a line via an *image description*, which has the form:
143
-
144
- <code>![*alt_text*]\(</code>*relative_file_path* <code>|</code> *attributes*<code>)</code>
116
+ #### Page TOC
145
117
 
146
- where:
147
-
148
- * *alt_text* is the usual alt text for an HTML image.
149
- * *relative_file_path* points to the file to be included.
150
- * *attributes* specify image attributes. See [Image Attributes](#image-attributes) below.
151
-
152
- ##### Example Image Descriptions
118
+ You can specify the location for an automatically-generated page TOC (table of cotents). See the [use case](markdown/use_cases/include_files/include_page_toc/use_case.md#include-page-toc).
153
119
 
154
- @[code_block](resolve.md)
120
+ #### Diagnostics
155
121
 
156
- ## Image Attributes
122
+ ##### "Noisy" (Not Pristine)
157
123
 
158
- <img src="images/html.png" alt="html_icon" width="50">
124
+ By default, the markdown helper inserts comments indicating inclusions. See the [use case](markdown/use_cases/include_files/include_with_added_comments/use_case.md#include-with-added-comments).
159
125
 
160
- This markdown helper enables HTML image attributes in GitHub markdown [image descriptions](https://github.github.com/gfm/#image-description).
126
+ ##### Missing Includee File
161
127
 
162
- (Actually, this README file itself is built using image attributes.)
163
-
164
- Use the markdown helper to add image attributes in a markdown (</code>.md</code>) file.
165
-
166
- ### Usage
167
-
168
- #### CLI
169
-
170
- @[:code_block](../../bin/usage/resolve.txt)
171
-
172
- #### API
173
-
174
- @[ruby](resolve_usage.rb)
175
-
176
- #### Image Descriptions
177
-
178
- Specify each image at the beginning of a line via an *image description*, which has the form:
179
-
180
- <code>![*alt_text*]\(</code>*relative_file_path* <code>|</code> *attributes*<code>)</code>
181
-
182
- where:
183
-
184
- * *alt_text* is the usual alt text for an HTML image.
185
- * *relative_file_path* points to the file to be included.
186
- * *attributes* are whitespace-separated name-value pairs in the form *name*<code>=</code>*value*. These are passed through to the generated <code>img</code> HTML element.
128
+ A missing includee file causes an exception that shows an inclusion backtrace. See the [use case](markdown/use_cases/include_files/diagnose_missing_includee/use_case.md#diagnose-missing-includee).
187
129
 
188
- ##### Example Image Descriptions
130
+ ##### Circular Inclusion
189
131
 
190
- @[code_block](resolve.md)
132
+ A circular inclusion causes an exception that shows an inclusion backtrace. See the [use case](markdown/use_cases/include_files/diagnose_circular_includes/use_case.md#diagnose-circular-includes).
191
133
 
192
134
  ## What Should Be Next?
193
135
 
@@ -3,3 +3,7 @@
3
3
  @[:code_block](my_language.xyzzy)
4
4
 
5
5
  @[:markdown](my_markdown.md)
6
+
7
+ @[:comment](my_comment.txt)
8
+
9
+ @[:pre](my_preformatted.txt)
@@ -2,9 +2,8 @@ require 'markdown_helper'
2
2
 
3
3
  template_file_path = 'highlight_ruby_template.md'
4
4
  markdown_file_path = 'highlighted_ruby.md'
5
- markdown_helper = MarkdownHelper.new
6
- markdown_helper.include(template_file_path, markdown_file_path)
7
5
  # Pristine.
6
+ markdown_helper = MarkdownHelper.new
8
7
  markdown_helper.pristine = true
9
8
  markdown_helper.include(template_file_path, markdown_file_path)
10
9
  # Also pristine.
@@ -22,24 +22,23 @@ EOT
22
22
  use_case_dirs = {
23
23
  :include_files => %w/
24
24
  reuse_text
25
- include_with_added_comments
26
25
  nest_inclusions
27
26
  include_markdown
28
27
  include_code_block
29
28
  include_highlighted_code
29
+ include_page_toc
30
30
  include_text_as_comment
31
31
  include_text_as_pre
32
32
  include_generated_text
33
+ include_with_added_comments
33
34
  diagnose_missing_includee
34
35
  diagnose_circular_includes
35
36
  /,
36
- :tables_of_contents => %w/
37
- create_and_include_page_toc
38
- /,
39
- # :resolve => %w/
40
- # resize_images
41
- # resolve_with_added_comments
42
- # gemify_images
37
+
38
+ # include_page_toc
39
+
40
+ # :tables_of_contents => %w/
41
+ # create_and_include_page_toc
43
42
  # /,
44
43
  }
45
44
  use_case_dirs.each_pair do |section, dir_names|
@@ -52,40 +51,38 @@ EOT
52
51
  EOT
53
52
  ) unless dir_names.empty?
54
53
 
54
+ # Be careful with use case that has a backtrace.
55
55
  backtrace_cases = %w/
56
56
  diagnose_missing_includee
57
57
  diagnose_circular_includes
58
58
  /
59
+
60
+ # Each use case is in a separate directory.
59
61
  dir_names.each do |dir_name|
60
62
  Dir.chdir("#{section}/#{dir_name}") do
61
- # If the dir has a Ruby file, run it.
62
- ruby_file_path = "#{dir_name}.rb"
63
- if File.exist?(ruby_file_path)
64
- class_name = camelize(dir_name)
65
- command = "ruby -I . -r #{dir_name} -e #{class_name}.build"
66
- if backtrace_cases.include?(dir_name)
67
- command += " 2> #{dir_name}.err"
68
- begin
69
- system(command)
70
- rescue
71
- #
72
- ensure
73
- end
74
- else
63
+
64
+ # There should be a conventionally-named ruby file to build the use case.
65
+ fail dir_name unless File.exist?(UseCase::BUILDER_FILE_NAME)
66
+
67
+ # There should be a conventionally-named use-case template.
68
+ fail dir_name unless File.exist?(UseCase::TEMPLATE_FILE_NAME)
69
+
70
+ class_name = camelize(dir_name)
71
+ command = "ruby -I . -r #{UseCase::BUILDER_FILE_NAME} -e #{class_name}.build"
72
+ if backtrace_cases.include?(dir_name)
73
+ command += " 2> #{dir_name}.err"
74
+ begin
75
75
  system(command)
76
+ rescue
77
+ #
76
78
  end
79
+ else
80
+ system(command)
77
81
  end
78
82
 
79
- # If the dir has a use case file, link to it.
80
- use_case_file_path = 'use_case.md'
81
- unless File.exist?(use_case_file_path)
82
- message = "File #{dir_name}/use_case.md does not exist"
83
- warn(message)
84
- next
85
- end
86
- title_line = File.open(use_case_file_path).grep(/^#/).first.chomp
83
+ title_line = File.open(UseCase::TEMPLATE_FILE_NAME).grep(/^#/).first.chomp
87
84
  title = title_line.split(/\s/, 2).pop
88
- use_case_file_name = File.basename(use_case_file_path)
85
+ use_case_file_name = File.basename(UseCase::USE_CASE_FILE_NAME)
89
86
  use_case_anchor = dir_name.gsub('_', '-')
90
87
  use_case_relative_url = File.join(
91
88
  section.to_s,
@@ -1,4 +1,4 @@
1
- include.rb: Includes are circular: (MarkdownHelper::CircularIncludeError)
1
+ C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/markdown_helper-2.1.0/bin/_include: Includes are circular: (MarkdownHelper::CircularIncludeError)
2
2
  Backtrace (innermost include first):
3
3
  Level 0:
4
4
  Includer:
@@ -69,7 +69,7 @@ Here's the resulting backtrace of inclusions.
69
69
 
70
70
  ```diagnose_circular_includes.err```:
71
71
  ```
72
- include.rb: Includes are circular: (MarkdownHelper::CircularIncludeError)
72
+ C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/markdown_helper-2.1.0/bin/_include: Includes are circular: (MarkdownHelper::CircularIncludeError)
73
73
  Backtrace (innermost include first):
74
74
  Level 0:
75
75
  Includer:
@@ -4,8 +4,7 @@ class DiagnoseCircularIncludes < IncludeUseCase
4
4
 
5
5
  def self.build
6
6
 
7
- use_case_name = File.basename(__FILE__, '.rb')
8
- use_case = self.new(use_case_name)
7
+ use_case = self.new
9
8
 
10
9
  use_case.write_ruby_file(pristine = true)
11
10
 
@@ -1,4 +1,4 @@
1
- include.rb: Could not read include file, (MarkdownHelper::UnreadableInputError)
1
+ C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/markdown_helper-2.1.0/bin/_include: Could not read include file, (MarkdownHelper::UnreadableInputError)
2
2
  Backtrace (innermost include first):
3
3
  Level 0:
4
4
  Includer:
@@ -71,7 +71,7 @@ Here's the resulting backtrace of inclusions.
71
71
 
72
72
  ```diagnose_missing_includee.err```:
73
73
  ```
74
- include.rb: Could not read include file, (MarkdownHelper::UnreadableInputError)
74
+ C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/markdown_helper-2.1.0/bin/_include: Could not read include file, (MarkdownHelper::UnreadableInputError)
75
75
  Backtrace (innermost include first):
76
76
  Level 0:
77
77
  Includer:
@@ -4,8 +4,7 @@ class DiagnoseMissingIncludee < IncludeUseCase
4
4
 
5
5
  def self.build
6
6
 
7
- use_case_name = File.basename(__FILE__, '.rb')
8
- use_case = self.new(use_case_name)
7
+ use_case = self.new
9
8
 
10
9
  use_case.write_ruby_file(pristine = true)
11
10
 
@@ -4,8 +4,7 @@ class IncludeCodeBlock < IncludeUseCase
4
4
 
5
5
  def self.build
6
6
 
7
- use_case_name = File.basename(__FILE__, '.rb')
8
- use_case = self.new(use_case_name)
7
+ use_case = self.new
9
8
 
10
9
  includee_file_name = 'hello.rb'
11
10
 
@@ -4,8 +4,7 @@ class IncludeGeneratedText < IncludeUseCase
4
4
 
5
5
  def self.build
6
6
 
7
- use_case_name = File.basename(__FILE__, '.rb')
8
- use_case = self.new(use_case_name)
7
+ use_case = self.new
9
8
 
10
9
  use_case.files_to_write.store(
11
10
  TEMPLATE_FILE_NAME,
@@ -4,8 +4,7 @@ class IncludeHighlightedCode < IncludeUseCase
4
4
 
5
5
  def self.build
6
6
 
7
- use_case_name = File.basename(__FILE__, '.rb')
8
- use_case = self.new(use_case_name)
7
+ use_case = self.new
9
8
 
10
9
  use_case.write_includer_file
11
10
 
@@ -4,8 +4,7 @@ class IncludeMarkdown < IncludeUseCase
4
4
 
5
5
  def self.build
6
6
 
7
- use_case_name = File.basename(__FILE__, '.rb')
8
- use_case = self.new(use_case_name)
7
+ use_case = self.new
9
8
 
10
9
  includee_file_name = 'markdown.md'
11
10
 
@@ -0,0 +1,48 @@
1
+ <!-- >>>>>> BEGIN GENERATED FILE (include): SOURCE includer.md -->
2
+ # Page Title
3
+
4
+ ## Page Contents
5
+ - [Includer level-two title.](#includer-level-two-title)
6
+ - [Includer level-three title.](#includer-level-three-title)
7
+ - [Another includer level-three title.](#another-includer-level-three-title)
8
+ - [Another includer level-two title.](#another-includer-level-two-title)
9
+ - [Includee 0 level-two title.](#includee-0-level-two-title)
10
+ - [Includee 0 level-three title.](#includee-0-level-three-title)
11
+ - [Another includee 0 level-three title.](#another-includee-0-level-three-title)
12
+ - [Another includee 0 level-two title.](#another-includee-0-level-two-title)
13
+ - [Includee 1 level-two title.](#includee-1-level-two-title)
14
+ - [Includee 1 level-three title.](#includee-1-level-three-title)
15
+ - [Another includee 1 level-three title.](#another-includee-1-level-three-title)
16
+ - [Another includee 1 level-two title.](#another-includee-1-level-two-title)
17
+
18
+ ## Includer level-two title.
19
+
20
+ ### Includer level-three title.
21
+
22
+ ### Another includer level-three title.
23
+
24
+ ## Another includer level-two title.
25
+
26
+ <!-- >>>>>> BEGIN INCLUDED FILE (markdown): SOURCE markdown/use_cases/include_files/include_page_toc/markdown_0.md -->
27
+
28
+ ## Includee 0 level-two title.
29
+
30
+ ### Includee 0 level-three title.
31
+
32
+ ### Another includee 0 level-three title.
33
+
34
+ ## Another includee 0 level-two title.
35
+ <!-- <<<<<< END INCLUDED FILE (markdown): SOURCE markdown/use_cases/include_files/include_page_toc/markdown_0.md -->
36
+
37
+ <!-- >>>>>> BEGIN INCLUDED FILE (markdown): SOURCE markdown/use_cases/include_files/include_page_toc/markdown_1.md -->
38
+
39
+ ## Includee 1 level-two title.
40
+
41
+ ### Includee 1 level-three title.
42
+
43
+ ### Another includee 1 level-three title.
44
+
45
+ ## Another includee 1 level-two title.
46
+ <!-- <<<<<< END INCLUDED FILE (markdown): SOURCE markdown/use_cases/include_files/include_page_toc/markdown_1.md -->
47
+
48
+ <!-- <<<<<< END GENERATED FILE (include): SOURCE includer.md -->