markdown_helper 1.8.0 → 1.9.0
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/.travis.yml +5 -5
- data/CODE_OF_CONDUCT.md +74 -74
- data/Gemfile.lock +2 -1
- data/LICENSE.txt +21 -21
- data/README.md +60 -47
- data/Rakefile +16 -13
- data/bin/_include +0 -1
- data/bin/_resolve +0 -1
- data/bin/markdown_helper +3 -0
- data/bin/setup +8 -8
- data/lib/markdown_helper.rb +329 -97
- data/lib/markdown_helper/version.rb +1 -1
- data/markdown/{README.template.md → readme/README.template.md} +25 -12
- data/markdown/{code_block_ruby_template.md → readme/code_block_ruby_template.md} +0 -0
- data/markdown/{highlight_ruby_template.md → readme/highlight_ruby_template.md} +0 -0
- data/markdown/readme/highlighted_ruby.md +12 -0
- data/markdown/{include.md → readme/include.md} +0 -0
- data/markdown/{include.rb → readme/include.rb} +0 -0
- data/markdown/{include_usage.rb → readme/include_usage.rb} +0 -0
- data/markdown/{resolve.md → readme/resolve.md} +0 -0
- data/markdown/{resolve_usage.rb → readme/resolve_usage.rb} +0 -0
- data/markdown/{verbatim_ruby_template.md → readme/verbatim_ruby_template.md} +0 -0
- data/markdown/use_cases/Rakefile +53 -23
- data/markdown/use_cases/include/diagnose_circular_includes/diagnose_circular_includes.err +26 -0
- data/markdown/use_cases/include/diagnose_circular_includes/diagnose_circular_includes.rb +65 -0
- data/markdown/use_cases/include/diagnose_circular_includes/include.rb +5 -0
- data/markdown/use_cases/include/diagnose_circular_includes/includer.md +1 -0
- data/markdown/use_cases/include/diagnose_circular_includes/includer_0.md +1 -0
- data/markdown/use_cases/include/diagnose_circular_includes/includer_1.md +1 -0
- data/markdown/use_cases/include/diagnose_circular_includes/includer_2.md +1 -0
- data/markdown/use_cases/include/diagnose_circular_includes/use_case.md +98 -0
- data/markdown/use_cases/include/diagnose_circular_includes/use_case_template.md +27 -0
- data/markdown/use_cases/include/diagnose_missing_includee/diagnose_missing_includee.err +26 -0
- data/markdown/use_cases/include/diagnose_missing_includee/diagnose_missing_includee.rb +67 -0
- data/markdown/use_cases/include/diagnose_missing_includee/include.rb +5 -0
- data/markdown/use_cases/include/diagnose_missing_includee/included.md +1 -0
- data/markdown/use_cases/include/diagnose_missing_includee/includer.md +1 -0
- data/markdown/use_cases/include/diagnose_missing_includee/includer_0.md +1 -0
- data/markdown/use_cases/include/diagnose_missing_includee/includer_1.md +1 -0
- data/markdown/use_cases/include/diagnose_missing_includee/includer_2.md +1 -0
- data/markdown/use_cases/include/diagnose_missing_includee/use_case.md +100 -0
- data/markdown/use_cases/include/diagnose_missing_includee/use_case_template.md +29 -0
- data/markdown/use_cases/include/include.rb +5 -0
- data/markdown/use_cases/include/include_code_block/hello.rb +8 -0
- data/markdown/use_cases/include/include_code_block/include_code_block.rb +79 -0
- data/markdown/use_cases/include/include_code_block/included.md +14 -0
- data/markdown/use_cases/include/include_code_block/includer.md +4 -0
- data/markdown/use_cases/include/include_code_block/use_case.md +108 -0
- data/markdown/use_cases/include/include_code_block/use_case_template.md +33 -0
- data/markdown/use_cases/include/include_generated_text/include_generated_text.rb +38 -0
- data/markdown/use_cases/include/include_generated_text/use_case.md +18 -0
- data/markdown/use_cases/include/include_generated_text/use_case_template.md +18 -0
- data/markdown/use_cases/include/include_highlighted_code/hello.rb +8 -0
- data/markdown/use_cases/include/include_highlighted_code/include_highlighted_code.rb +83 -0
- data/markdown/use_cases/include/include_highlighted_code/included.md +14 -0
- data/markdown/use_cases/include/include_highlighted_code/includer.md +4 -0
- data/markdown/use_cases/include/include_highlighted_code/use_case.md +110 -0
- data/markdown/use_cases/include/include_highlighted_code/use_case_template.md +35 -0
- data/markdown/use_cases/include/include_markdown/include_markdown.rb +81 -0
- data/markdown/use_cases/include/include_markdown/included.md +13 -0
- data/markdown/use_cases/include/include_markdown/includer.md +4 -0
- data/markdown/use_cases/include/include_markdown/markdown.md +10 -0
- data/markdown/use_cases/include/include_markdown/use_case.md +106 -0
- data/markdown/use_cases/include/include_markdown/use_case_template.md +33 -0
- data/markdown/use_cases/include/include_use_case.rb +110 -0
- data/markdown/use_cases/include/include_with_added_comments/include_with_added_comments.rb +43 -60
- data/markdown/use_cases/include/include_with_added_comments/included.md +2 -2
- data/markdown/use_cases/include/include_with_added_comments/use_case.md +56 -0
- data/markdown/use_cases/include/include_with_added_comments/{template.md → use_case_template.md} +20 -1
- data/markdown/use_cases/include/interface.md +25 -0
- data/markdown/use_cases/include/nest_inclusions/included.md +5 -0
- data/markdown/use_cases/include/nest_inclusions/includee.md +3 -0
- data/markdown/use_cases/include/nest_inclusions/includer.md +3 -0
- data/markdown/use_cases/include/nest_inclusions/nest_inclusions.rb +61 -0
- data/markdown/use_cases/include/nest_inclusions/nested_includee.md +1 -0
- data/markdown/use_cases/include/nest_inclusions/use_case.md +74 -0
- data/markdown/use_cases/include/nest_inclusions/use_case_template.md +23 -0
- data/markdown/use_cases/include/reuse_text/include.rb +5 -0
- data/markdown/use_cases/include/reuse_text/included.md +2 -5
- data/markdown/use_cases/include/reuse_text/includee.md +1 -0
- data/markdown/use_cases/include/reuse_text/includer.md +2 -5
- data/markdown/use_cases/include/reuse_text/reuse_text.rb +24 -77
- data/markdown/use_cases/include/reuse_text/use_case.md +69 -0
- data/markdown/use_cases/include/reuse_text/use_case_template.md +23 -0
- data/markdown/use_cases/resolve/gemify_images/gemify_images.rb +58 -29
- data/markdown/use_cases/resolve/gemify_images/template.md +4 -0
- data/markdown/use_cases/use_case.rb +45 -0
- data/markdown/use_cases/use_cases.md +9 -2
- data/markdown_helper.gemspec +1 -1
- metadata +70 -19
- data/markdown/highlighted_ruby.md +0 -12
- data/markdown/use_cases/include/include_generated_text/build.rb +0 -46
- data/markdown/use_cases/include/include_with_added_comments/include_with_added_comments.md +0 -37
- data/markdown/use_cases/include/reuse_text/reusable_text.md +0 -1
- data/markdown/use_cases/include/reuse_text/reuse_text.md +0 -54
- data/markdown/use_cases/include/reuse_text/template.md +0 -33
@@ -4,12 +4,21 @@
|
|
4
4
|
|
5
5
|
## What's New?
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
*
|
10
|
-
*
|
11
|
-
|
12
|
-
|
7
|
+
* The helper now checks whether the working directory is in a ```git``` project, and raises an exception if not.
|
8
|
+
|
9
|
+
* There is now a backtrace of inclusions when:
|
10
|
+
* An includee file cannot be read.
|
11
|
+
* A circular inclusion (direct or indirect) is found.
|
12
|
+
* The backtrace shows:
|
13
|
+
* Each includer file path.
|
14
|
+
* Its include description.
|
15
|
+
* The includee file path.
|
16
|
+
* File paths are relative to the git directory.
|
17
|
+
* Use cases are added:
|
18
|
+
* [Diagnose Missing Includee](markdown/use_cases/include/diagnose_missing_includee/use_case.md#diagnose-missing-includee).
|
19
|
+
* [Diagnose Circular Includes](markdown/use_cases/include/diagnose_circular_includes/use_case.md#diagnose-circular-includes).
|
20
|
+
|
21
|
+
## What's a Markdown Helper?
|
13
22
|
|
14
23
|
Class <code>MarkdownHelper</code> supports:
|
15
24
|
|
@@ -23,6 +32,10 @@ The markdown helper is a preprocessor that reads a markdown document (template)
|
|
23
32
|
|
24
33
|
The template can contain certain instructions that call for file inclusions and image resolutions.
|
25
34
|
|
35
|
+
### Restriction: ```git``` Only
|
36
|
+
|
37
|
+
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.
|
38
|
+
|
26
39
|
### Commented or Pristine?
|
27
40
|
|
28
41
|
By default, the output markdown has added comments that show:
|
@@ -35,7 +48,7 @@ You can suppress those comments using the <code>pristine</code> option.
|
|
35
48
|
|
36
49
|
## File Inclusion
|
37
50
|
|
38
|
-

|
39
52
|
|
40
53
|
This markdown helper enables file inclusion in GitHub markdown.
|
41
54
|
|
@@ -69,7 +82,7 @@ The markdown text is itself scanned for nested includes.
|
|
69
82
|
|
70
83
|
#### CLI
|
71
84
|
|
72
|
-
@[:code_block](
|
85
|
+
@[:code_block](../../bin/usage/include.txt)
|
73
86
|
|
74
87
|
#### API
|
75
88
|
|
@@ -95,7 +108,7 @@ where:
|
|
95
108
|
|
96
109
|
## Image Path Resolution
|
97
110
|
|
98
|
-

|
99
112
|
|
100
113
|
This markdown helper enables image path resolution in GitHub markdown.
|
101
114
|
|
@@ -109,7 +122,7 @@ This matters because when markdown becomes part of a Ruby gem, its images will h
|
|
109
122
|
|
110
123
|
#### CLI
|
111
124
|
|
112
|
-
@[:code_block](
|
125
|
+
@[:code_block](../../bin/usage/resolve.txt)
|
113
126
|
|
114
127
|
#### API
|
115
128
|
|
@@ -133,7 +146,7 @@ where:
|
|
133
146
|
|
134
147
|
## Image Attributes
|
135
148
|
|
136
|
-

|
137
150
|
|
138
151
|
This markdown helper enables HTML image attributes in GitHub markdown [image descriptions](https://github.github.com/gfm/#image-description).
|
139
152
|
|
@@ -145,7 +158,7 @@ Use the markdown helper to add image attributes in a markdown (</code>.md</code>
|
|
145
158
|
|
146
159
|
#### CLI
|
147
160
|
|
148
|
-
@[:code_block](
|
161
|
+
@[:code_block](../../bin/usage/resolve.txt)
|
149
162
|
|
150
163
|
#### API
|
151
164
|
|
File without changes
|
File without changes
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<!-- >>>>>> BEGIN GENERATED FILE (include): SOURCE highlight_ruby_template.md -->
|
2
|
+
<!-- >>>>>> BEGIN INCLUDED FILE (ruby): SOURCE markdown/readme/include.rb -->
|
3
|
+
```include.rb```:
|
4
|
+
```ruby
|
5
|
+
class RubyCode
|
6
|
+
def initialize
|
7
|
+
raise RuntimeError.new('I am only an example!')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
```
|
11
|
+
<!-- <<<<<< END INCLUDED FILE (ruby): SOURCE markdown/readme/include.rb -->
|
12
|
+
<!-- <<<<<< END GENERATED FILE (include): SOURCE highlight_ruby_template.md -->
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/markdown/use_cases/Rakefile
CHANGED
@@ -1,8 +1,14 @@
|
|
1
|
+
require_relative 'include/include_use_case'
|
1
2
|
|
2
3
|
namespace :build do
|
3
4
|
|
5
|
+
def camelize(snake_case_string)
|
6
|
+
snake_case_string.split('_').collect(&:capitalize).join
|
7
|
+
end
|
8
|
+
|
4
9
|
desc 'Build use case markdown'
|
5
10
|
task :use_cases do
|
11
|
+
# Page that links to use cases.
|
6
12
|
File.open('use_cases.md', 'w') do |use_case_file|
|
7
13
|
use_case_file.puts(<<EOT
|
8
14
|
# Use Cases
|
@@ -10,46 +16,70 @@ namespace :build do
|
|
10
16
|
EOT
|
11
17
|
)
|
12
18
|
dir_path = File.dirname(__FILE__)
|
13
|
-
use_case_file_paths = []
|
14
|
-
tbs_file_paths = []
|
15
19
|
Dir.chdir(dir_path) do
|
20
|
+
IncludeUseCase.write_interface_file
|
16
21
|
use_case_dirs = {
|
17
22
|
:include => %w/
|
18
23
|
reuse_text
|
19
24
|
include_with_added_comments
|
25
|
+
nest_inclusions
|
26
|
+
include_markdown
|
27
|
+
include_code_block
|
28
|
+
include_highlighted_code
|
29
|
+
include_generated_text
|
30
|
+
diagnose_missing_includee
|
31
|
+
diagnose_circular_includes
|
20
32
|
/,
|
21
|
-
:resolve => %w/
|
22
|
-
|
33
|
+
# :resolve => %w/
|
34
|
+
# resize_images
|
35
|
+
# resolve_with_added_comments
|
36
|
+
# gemify_images
|
37
|
+
# /
|
23
38
|
}
|
24
39
|
use_case_dirs.each_pair do |section, dir_names|
|
40
|
+
|
41
|
+
# Header for section, if any dirs therein.
|
25
42
|
use_case_file.puts(<<EOT
|
26
43
|
## #{section.to_s.capitalize}
|
27
44
|
|
28
45
|
EOT
|
29
46
|
) unless dir_names.empty?
|
47
|
+
|
48
|
+
backtrace_cases = %w/
|
49
|
+
diagnose_missing_includee
|
50
|
+
diagnose_circular_includes
|
51
|
+
/
|
30
52
|
dir_names.each do |dir_name|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
53
|
+
Dir.chdir("#{section}/#{dir_name}") do
|
54
|
+
# If the dir has a Ruby file, run it.
|
55
|
+
ruby_file_path = "#{dir_name}.rb"
|
56
|
+
if File.exist?(ruby_file_path)
|
57
|
+
class_name = camelize(dir_name)
|
58
|
+
command = "ruby -I . -r #{dir_name} -e #{class_name}.build"
|
59
|
+
if backtrace_cases.include?(dir_name)
|
60
|
+
command += " 2> #{dir_name}.err"
|
61
|
+
begin
|
62
|
+
system(command)
|
63
|
+
rescue
|
64
|
+
#
|
65
|
+
ensure
|
66
|
+
end
|
67
|
+
else
|
68
|
+
system(command)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# If the dir has a use case file, link to it.
|
73
|
+
use_case_file_path = 'use_case.md'
|
74
|
+
unless File.exist?(use_case_file_path)
|
75
|
+
message = "File #{dir_name}/use_case.md does not exist"
|
76
|
+
warn(message)
|
77
|
+
next
|
78
|
+
end
|
48
79
|
title_line = File.open(use_case_file_path).grep(/^#/).first.chomp
|
49
80
|
title = title_line.split(/\s/, 2).pop
|
50
81
|
use_case_file_name = File.basename(use_case_file_path)
|
51
|
-
|
52
|
-
use_case_anchor = use_case_name.gsub('_', '-')
|
82
|
+
use_case_anchor = dir_name.gsub('_', '-')
|
53
83
|
use_case_relative_url = File.join(
|
54
84
|
section.to_s,
|
55
85
|
dir_name,
|
@@ -0,0 +1,26 @@
|
|
1
|
+
include.rb: Includes are circular: (MarkdownHelper::CircularIncludeError)
|
2
|
+
Backtrace (innermost include first):
|
3
|
+
Level 0:
|
4
|
+
Includer:
|
5
|
+
Location: markdown/use_cases/include/diagnose_circular_includes/includer_2.md:1
|
6
|
+
Include description: @[:markdown](includer_0.md)
|
7
|
+
Includee:
|
8
|
+
File path: markdown/use_cases/include/diagnose_circular_includes/includer_0.md
|
9
|
+
Level 1:
|
10
|
+
Includer:
|
11
|
+
Location: markdown/use_cases/include/diagnose_circular_includes/includer_1.md:1
|
12
|
+
Include description: @[:markdown](includer_2.md)
|
13
|
+
Includee:
|
14
|
+
File path: markdown/use_cases/include/diagnose_circular_includes/includer_2.md
|
15
|
+
Level 2:
|
16
|
+
Includer:
|
17
|
+
Location: markdown/use_cases/include/diagnose_circular_includes/includer_0.md:1
|
18
|
+
Include description: @[:markdown](includer_1.md)
|
19
|
+
Includee:
|
20
|
+
File path: markdown/use_cases/include/diagnose_circular_includes/includer_1.md
|
21
|
+
Level 3:
|
22
|
+
Includer:
|
23
|
+
Location: includer.md:1
|
24
|
+
Include description: @[:markdown](includer_0.md)
|
25
|
+
Includee:
|
26
|
+
File path: markdown/use_cases/include/diagnose_circular_includes/includer_0.md
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require_relative '../include_use_case'
|
2
|
+
|
3
|
+
class DiagnoseCircularIncludes < IncludeUseCase
|
4
|
+
|
5
|
+
def self.build
|
6
|
+
|
7
|
+
use_case_name = File.basename(__FILE__, '.rb')
|
8
|
+
use_case = self.new(use_case_name)
|
9
|
+
|
10
|
+
use_case.write_ruby_file(pristine = true)
|
11
|
+
|
12
|
+
[
|
13
|
+
[0, 1],
|
14
|
+
[1, 2],
|
15
|
+
[2, 0],
|
16
|
+
].each do |indexes|
|
17
|
+
includer_index, includee_index = *indexes
|
18
|
+
includer_file_name = "includer_#{includer_index}.md"
|
19
|
+
includee_file_name = "includer_#{includee_index}.md"
|
20
|
+
if includer_index == 0
|
21
|
+
include_description = "@[:markdown](#{includer_file_name})\n"
|
22
|
+
File.write(INCLUDER_FILE_NAME, include_description)
|
23
|
+
end
|
24
|
+
include_description = "@[:markdown](#{includee_file_name})\n"
|
25
|
+
File.write(includer_file_name, include_description)
|
26
|
+
end
|
27
|
+
|
28
|
+
File.write(
|
29
|
+
TEMPLATE_FILE_NAME,
|
30
|
+
<<EOT
|
31
|
+
### Diagnose Circular Includes
|
32
|
+
|
33
|
+
Use the backtrace of inclusions to diagnose and correct circular inclusions: that is inclusions that directly or indirectly cause a file to include itself.
|
34
|
+
|
35
|
+
#### Files To Be Included
|
36
|
+
|
37
|
+
These files demonstrate nested inclusion, with circular inclusions.
|
38
|
+
|
39
|
+
@[markdown](includer_0.md)
|
40
|
+
|
41
|
+
@[markdown](includer_1.md)
|
42
|
+
|
43
|
+
@[markdown](includer_2.md)
|
44
|
+
|
45
|
+
#### Includer File
|
46
|
+
|
47
|
+
This file initiates the nested inclusions.
|
48
|
+
|
49
|
+
@[markdown](#{INCLUDER_FILE_NAME})
|
50
|
+
|
51
|
+
@[:markdown](../interface.md)
|
52
|
+
|
53
|
+
#### Error and Backtrace
|
54
|
+
|
55
|
+
Here's the resulting backtrace of inclusions.
|
56
|
+
|
57
|
+
@[:code_block](diagnose_circular_includes.err)
|
58
|
+
EOT
|
59
|
+
)
|
60
|
+
|
61
|
+
use_case.build
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
@[:markdown](includer_0.md)
|
@@ -0,0 +1 @@
|
|
1
|
+
@[:markdown](includer_1.md)
|
@@ -0,0 +1 @@
|
|
1
|
+
@[:markdown](includer_2.md)
|
@@ -0,0 +1 @@
|
|
1
|
+
@[:markdown](includer_0.md)
|
@@ -0,0 +1,98 @@
|
|
1
|
+
### Diagnose Circular Includes
|
2
|
+
|
3
|
+
Use the backtrace of inclusions to diagnose and correct circular inclusions: that is inclusions that directly or indirectly cause a file to include itself.
|
4
|
+
|
5
|
+
#### Files To Be Included
|
6
|
+
|
7
|
+
These files demonstrate nested inclusion, with circular inclusions.
|
8
|
+
|
9
|
+
```includer_0.md```:
|
10
|
+
```markdown
|
11
|
+
@[:markdown](includer_1.md)
|
12
|
+
```
|
13
|
+
|
14
|
+
```includer_1.md```:
|
15
|
+
```markdown
|
16
|
+
@[:markdown](includer_2.md)
|
17
|
+
```
|
18
|
+
|
19
|
+
```includer_2.md```:
|
20
|
+
```markdown
|
21
|
+
@[:markdown](includer_0.md)
|
22
|
+
```
|
23
|
+
|
24
|
+
#### Includer File
|
25
|
+
|
26
|
+
This file initiates the nested inclusions.
|
27
|
+
|
28
|
+
```includer.md```:
|
29
|
+
```markdown
|
30
|
+
@[:markdown](includer_0.md)
|
31
|
+
```
|
32
|
+
|
33
|
+
#### CLI
|
34
|
+
|
35
|
+
You can use the command-line interface to perform the inclusion.
|
36
|
+
|
37
|
+
##### Command
|
38
|
+
|
39
|
+
```sh
|
40
|
+
markdown_helper include --pristine includer.md included.md
|
41
|
+
```
|
42
|
+
|
43
|
+
(Option ```--pristine``` suppresses comment insertion.)
|
44
|
+
|
45
|
+
#### API
|
46
|
+
|
47
|
+
You can use the API to perform the inclusion.
|
48
|
+
|
49
|
+
##### Ruby Code
|
50
|
+
|
51
|
+
```include.rb```:
|
52
|
+
```ruby
|
53
|
+
require 'markdown_helper'
|
54
|
+
|
55
|
+
# Option :pristine suppresses comment insertion.
|
56
|
+
markdown_helper = MarkdownHelper.new(:pristine => true)
|
57
|
+
markdown_helper.include('includer.md', 'included.md')
|
58
|
+
```
|
59
|
+
|
60
|
+
##### Command
|
61
|
+
|
62
|
+
```sh
|
63
|
+
ruby include.rb
|
64
|
+
```
|
65
|
+
|
66
|
+
#### Error and Backtrace
|
67
|
+
|
68
|
+
Here's the resulting backtrace of inclusions.
|
69
|
+
|
70
|
+
```diagnose_circular_includes.err```:
|
71
|
+
```
|
72
|
+
include.rb: Includes are circular: (MarkdownHelper::CircularIncludeError)
|
73
|
+
Backtrace (innermost include first):
|
74
|
+
Level 0:
|
75
|
+
Includer:
|
76
|
+
Location: markdown/use_cases/include/diagnose_circular_includes/includer_2.md:1
|
77
|
+
Include description: @[:markdown](includer_0.md)
|
78
|
+
Includee:
|
79
|
+
File path: markdown/use_cases/include/diagnose_circular_includes/includer_0.md
|
80
|
+
Level 1:
|
81
|
+
Includer:
|
82
|
+
Location: markdown/use_cases/include/diagnose_circular_includes/includer_1.md:1
|
83
|
+
Include description: @[:markdown](includer_2.md)
|
84
|
+
Includee:
|
85
|
+
File path: markdown/use_cases/include/diagnose_circular_includes/includer_2.md
|
86
|
+
Level 2:
|
87
|
+
Includer:
|
88
|
+
Location: markdown/use_cases/include/diagnose_circular_includes/includer_0.md:1
|
89
|
+
Include description: @[:markdown](includer_1.md)
|
90
|
+
Includee:
|
91
|
+
File path: markdown/use_cases/include/diagnose_circular_includes/includer_1.md
|
92
|
+
Level 3:
|
93
|
+
Includer:
|
94
|
+
Location: includer.md:1
|
95
|
+
Include description: @[:markdown](includer_0.md)
|
96
|
+
Includee:
|
97
|
+
File path: markdown/use_cases/include/diagnose_circular_includes/includer_0.md
|
98
|
+
```
|
@@ -0,0 +1,27 @@
|
|
1
|
+
### Diagnose Circular Includes
|
2
|
+
|
3
|
+
Use the backtrace of inclusions to diagnose and correct circular inclusions: that is inclusions that directly or indirectly cause a file to include itself.
|
4
|
+
|
5
|
+
#### Files To Be Included
|
6
|
+
|
7
|
+
These files demonstrate nested inclusion, with circular inclusions.
|
8
|
+
|
9
|
+
@[markdown](includer_0.md)
|
10
|
+
|
11
|
+
@[markdown](includer_1.md)
|
12
|
+
|
13
|
+
@[markdown](includer_2.md)
|
14
|
+
|
15
|
+
#### Includer File
|
16
|
+
|
17
|
+
This file initiates the nested inclusions.
|
18
|
+
|
19
|
+
@[markdown](includer.md)
|
20
|
+
|
21
|
+
@[:markdown](../interface.md)
|
22
|
+
|
23
|
+
#### Error and Backtrace
|
24
|
+
|
25
|
+
Here's the resulting backtrace of inclusions.
|
26
|
+
|
27
|
+
@[:code_block](diagnose_circular_includes.err)
|