muwu 2.5.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 (126) hide show
  1. checksums.yaml +7 -0
  2. data/bin/muwu +5 -0
  3. data/lib/muwu.rb +38 -0
  4. data/lib/muwu/cli/cli.rb +143 -0
  5. data/lib/muwu/cli/cli_help.rb +28 -0
  6. data/lib/muwu/cli/help/compile +22 -0
  7. data/lib/muwu/cli/help/concat +8 -0
  8. data/lib/muwu/cli/help/heading +2 -0
  9. data/lib/muwu/cli/help/inspect +7 -0
  10. data/lib/muwu/cli/help/new +8 -0
  11. data/lib/muwu/cli/help/reset +14 -0
  12. data/lib/muwu/cli/help/summary +14 -0
  13. data/lib/muwu/controller/controller.rb +120 -0
  14. data/lib/muwu/controller/controller_interaction.rb +146 -0
  15. data/lib/muwu/default/default.rb +51 -0
  16. data/lib/muwu/destination/destination.rb +212 -0
  17. data/lib/muwu/destination_builder/destination_builder.rb +127 -0
  18. data/lib/muwu/helper/hash_helper.rb +37 -0
  19. data/lib/muwu/helper/html_href_helper.rb +101 -0
  20. data/lib/muwu/helper/outline_helper.rb +160 -0
  21. data/lib/muwu/helper/regexp_lib.rb +101 -0
  22. data/lib/muwu/helper/sanitizer_helper.rb +50 -0
  23. data/lib/muwu/manifest/manifest.rb +158 -0
  24. data/lib/muwu/manifest_builder/manifest_builder.rb +102 -0
  25. data/lib/muwu/manifest_task/contents.rb +42 -0
  26. data/lib/muwu/manifest_task/document_css.rb +25 -0
  27. data/lib/muwu/manifest_task/document_html.rb +69 -0
  28. data/lib/muwu/manifest_task/document_js.rb +25 -0
  29. data/lib/muwu/manifest_task/metadata.rb +35 -0
  30. data/lib/muwu/manifest_task/navigator.rb +29 -0
  31. data/lib/muwu/manifest_task/subcontents.rb +48 -0
  32. data/lib/muwu/manifest_task/text.rb +51 -0
  33. data/lib/muwu/manifest_task/text_item.rb +124 -0
  34. data/lib/muwu/manifest_task/title.rb +34 -0
  35. data/lib/muwu/manifest_task_builder/contents_builder.rb +88 -0
  36. data/lib/muwu/manifest_task_builder/document_css_builder.rb +63 -0
  37. data/lib/muwu/manifest_task_builder/document_html_builder.rb +210 -0
  38. data/lib/muwu/manifest_task_builder/document_js_builder.rb +69 -0
  39. data/lib/muwu/manifest_task_builder/metadata_builder.rb +118 -0
  40. data/lib/muwu/manifest_task_builder/navigator_builder.rb +78 -0
  41. data/lib/muwu/manifest_task_builder/subcontents_builder.rb +90 -0
  42. data/lib/muwu/manifest_task_builder/text_builder.rb +125 -0
  43. data/lib/muwu/manifest_task_builder/text_item_builder.rb +314 -0
  44. data/lib/muwu/manifest_task_builder/title_builder.rb +122 -0
  45. data/lib/muwu/project/project.rb +430 -0
  46. data/lib/muwu/project_builder/assets/config/css/base/html_elements.scss +138 -0
  47. data/lib/muwu/project_builder/assets/config/css/base/index.scss +11 -0
  48. data/lib/muwu/project_builder/assets/config/css/base/mixin_text_section_heading.scss +23 -0
  49. data/lib/muwu/project_builder/assets/config/css/base/section_muwu_contents.scss +58 -0
  50. data/lib/muwu/project_builder/assets/config/css/base/section_muwu_metadata.scss +17 -0
  51. data/lib/muwu/project_builder/assets/config/css/base/section_muwu_navigator.scss +13 -0
  52. data/lib/muwu/project_builder/assets/config/css/base/section_muwu_subcontents.scss +58 -0
  53. data/lib/muwu/project_builder/assets/config/css/base/section_muwu_text.scss +48 -0
  54. data/lib/muwu/project_builder/assets/config/css/base/section_muwu_title.scss +22 -0
  55. data/lib/muwu/project_builder/assets/config/css/colors/dark.scss +32 -0
  56. data/lib/muwu/project_builder/assets/config/css/colors/index.scss +1 -0
  57. data/lib/muwu/project_builder/assets/config/css/colors/light.scss +34 -0
  58. data/lib/muwu/project_builder/assets/config/css/extensions/index.scss +1 -0
  59. data/lib/muwu/project_builder/assets/config/css/index.scss +19 -0
  60. data/lib/muwu/project_builder/assets/config/css_debugger/debug_section_text.scss +27 -0
  61. data/lib/muwu/project_builder/project_reader.rb +144 -0
  62. data/lib/muwu/project_builder/project_reset_css.rb +95 -0
  63. data/lib/muwu/project_builder/project_starter.rb +27 -0
  64. data/lib/muwu/project_builder/project_validator.rb +157 -0
  65. data/lib/muwu/project_builder/project_writer.rb +127 -0
  66. data/lib/muwu/project_exception/css_manifest_file_not_found.rb +23 -0
  67. data/lib/muwu/project_exception/dry_output_recommended_with_multiple_documents.rb +19 -0
  68. data/lib/muwu/project_exception/metadata_file_not_found.rb +24 -0
  69. data/lib/muwu/project_exception/metadata_value_not_given.rb +42 -0
  70. data/lib/muwu/project_exception/multiple_documents_outlined_with_stdout.rb +18 -0
  71. data/lib/muwu/project_exception/multiple_formats_requested_with_stdout.rb +18 -0
  72. data/lib/muwu/project_exception/navigator_not_recommended_with_stdout.rb +23 -0
  73. data/lib/muwu/project_exception/navigators_will_be_generated_automatically.rb +23 -0
  74. data/lib/muwu/project_exception/option_key_not_understood.rb +23 -0
  75. data/lib/muwu/project_exception/option_not_validatable.rb +23 -0
  76. data/lib/muwu/project_exception/option_value_not_understood.rb +24 -0
  77. data/lib/muwu/project_exception/options_file_not_found.rb +24 -0
  78. data/lib/muwu/project_exception/outline_file_not_found.rb +24 -0
  79. data/lib/muwu/project_exception/outline_step_not_understood.rb +23 -0
  80. data/lib/muwu/project_exception/output_already_open.rb +18 -0
  81. data/lib/muwu/project_exception/output_not_open.rb +18 -0
  82. data/lib/muwu/project_exception/subcontents_will_be_generated_automatically copy.rb +23 -0
  83. data/lib/muwu/project_exception/target_project_folder_already_exists.rb +24 -0
  84. data/lib/muwu/project_exception/text_source_file_not_found.rb +26 -0
  85. data/lib/muwu/project_exception_handler/fatal.rb +39 -0
  86. data/lib/muwu/project_options/project_options.rb +54 -0
  87. data/lib/muwu/project_options_builder/project_option_validator.rb +37 -0
  88. data/lib/muwu/project_options_builder/project_option_validator_key.rb +56 -0
  89. data/lib/muwu/project_options_builder/project_option_validator_value.rb +300 -0
  90. data/lib/muwu/project_options_builder/project_options_reader.rb +80 -0
  91. data/lib/muwu/render_concat/render_concat.rb +80 -0
  92. data/lib/muwu/render_html/render_html.rb +101 -0
  93. data/lib/muwu/render_html/render_markup_to_html.rb +87 -0
  94. data/lib/muwu/render_html_builder/render_css_builder.rb +34 -0
  95. data/lib/muwu/render_html_builder/render_html_builder.rb +34 -0
  96. data/lib/muwu/render_html_builder/render_js_builder.rb +34 -0
  97. data/lib/muwu/render_html_partial/js_library/_init_bare.js +7 -0
  98. data/lib/muwu/render_html_partial/js_library/_zepto.min.js +2 -0
  99. data/lib/muwu/render_html_partial/js_library/init.js +10 -0
  100. data/lib/muwu/render_html_partial/js_library/navigation.js +140 -0
  101. data/lib/muwu/render_html_partial/render_contents.rb +369 -0
  102. data/lib/muwu/render_html_partial/render_document_css.rb +45 -0
  103. data/lib/muwu/render_html_partial/render_document_html.rb +397 -0
  104. data/lib/muwu/render_html_partial/render_document_js.rb +37 -0
  105. data/lib/muwu/render_html_partial/render_js_library.rb +54 -0
  106. data/lib/muwu/render_html_partial/render_metadata.rb +120 -0
  107. data/lib/muwu/render_html_partial/render_navigator.rb +136 -0
  108. data/lib/muwu/render_html_partial/render_subcontents.rb +374 -0
  109. data/lib/muwu/render_html_partial/render_text.rb +74 -0
  110. data/lib/muwu/render_html_partial/render_text_item.rb +230 -0
  111. data/lib/muwu/render_html_partial/render_title.rb +71 -0
  112. data/lib/muwu/render_html_partial_builder/render_contents_builder.rb +100 -0
  113. data/lib/muwu/render_html_partial_builder/render_document_css_builder.rb +46 -0
  114. data/lib/muwu/render_html_partial_builder/render_document_html_builder.rb +211 -0
  115. data/lib/muwu/render_html_partial_builder/render_document_js_builder.rb +52 -0
  116. data/lib/muwu/render_html_partial_builder/render_metadata_builder.rb +47 -0
  117. data/lib/muwu/render_html_partial_builder/render_navigator_builder.rb +74 -0
  118. data/lib/muwu/render_html_partial_builder/render_subcontents_builder.rb +85 -0
  119. data/lib/muwu/render_html_partial_builder/render_text_builder.rb +86 -0
  120. data/lib/muwu/render_html_partial_builder/render_text_item_builder.rb +274 -0
  121. data/lib/muwu/render_html_partial_builder/render_title_builder.rb +47 -0
  122. data/lib/muwu/render_inspector/render_inspector.rb +224 -0
  123. data/lib/muwu/var/deflistdiv.rb +239 -0
  124. data/lib/muwu_loader.rb +35 -0
  125. data/test/what_no_tests.md +5 -0
  126. metadata +251 -0
@@ -0,0 +1,118 @@
1
+ module Muwu
2
+ module ManifestTaskBuilders
3
+ class MetadataBuilder
4
+
5
+
6
+ include Muwu
7
+ include Helper
8
+
9
+
10
+ attr_accessor(
11
+ :outline_fragment_metadata,
12
+ :parent_document,
13
+ :project,
14
+ :task
15
+ )
16
+
17
+
18
+ def self.build
19
+ builder = new
20
+ yield(builder)
21
+ builder.task
22
+ end
23
+
24
+
25
+ def initialize
26
+ @task = ManifestTask::Metadata.new
27
+ end
28
+
29
+
30
+ def build_from_outline(outline_fragment_metadata, parent_document)
31
+ @destination = parent_document.destination
32
+ @outline_fragment_metadata = outline_fragment_metadata
33
+ @parent_document = parent_document
34
+ @project = parent_document.project
35
+ phase_1_set_parent
36
+ phase_1_set_project
37
+ phase_2_set_destination
38
+ phase_2_set_metadata
39
+ phase_3_validate_metadata_values_exist
40
+ end
41
+
42
+
43
+ def phase_1_set_parent
44
+ @task.parent_document = @parent_document
45
+ end
46
+
47
+
48
+ def phase_1_set_project
49
+ @task.project = @project
50
+ end
51
+
52
+
53
+ def phase_2_set_destination
54
+ @task.destination = @destination
55
+ end
56
+
57
+
58
+ def phase_2_set_metadata
59
+ @task.metadata = determine_metadata
60
+ end
61
+
62
+
63
+ def phase_3_validate_metadata_values_exist
64
+ ProjectValidator.new(@project).validate_task_metadata(@task)
65
+ end
66
+
67
+
68
+
69
+ private
70
+
71
+
72
+ def determine_metadata
73
+ case @outline_fragment_metadata
74
+ when String
75
+ determine_metadata_all
76
+ when Hash
77
+ determine_metadata_selected
78
+ end
79
+ end
80
+
81
+
82
+ def determine_metadata_all
83
+ @project.metadata.merge(determine_metadata_date_of_this_edition)
84
+ end
85
+
86
+
87
+ def determine_metadata_selected
88
+ metadata = {}
89
+ keys = @outline_fragment_metadata.flatten[1]
90
+ keys.each do |key|
91
+ if key =~ RegexpLib.metadata_key_date_of_this_edition
92
+ metadata.merge!(determine_metadata_date_of_this_edition(key: key))
93
+ else
94
+ metadata.merge!(determine_metadata_selected_and_validate(key))
95
+ end
96
+ end
97
+ metadata
98
+ end
99
+
100
+
101
+ def determine_metadata_selected_and_validate(key)
102
+ metadata = @project.metadata.select { |k,v| k.downcase == key.downcase }
103
+ if metadata.empty?
104
+ metadata = {key => nil}
105
+ end
106
+ metadata
107
+ end
108
+
109
+
110
+ def determine_metadata_date_of_this_edition(key: 'date of this edition')
111
+ metadata = {key => @project.metadata["date of this edition"]}
112
+ metadata
113
+ end
114
+
115
+
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,78 @@
1
+ module Muwu
2
+ module ManifestTaskBuilders
3
+ class NavigatorBuilder
4
+
5
+
6
+ include Muwu
7
+
8
+
9
+ attr_accessor(
10
+ :document,
11
+ :navigator,
12
+ :outline_step,
13
+ :project
14
+ )
15
+
16
+ def self.build
17
+ builder = new
18
+ yield(builder)
19
+ builder.navigator
20
+ end
21
+
22
+
23
+ def initialize
24
+ @navigator = ManifestTask::Navigator.new
25
+ end
26
+
27
+
28
+ def build_from_outline(document)
29
+ @document = document
30
+ @project = document.project
31
+ set_destination
32
+ set_document_home_index
33
+ set_document_next_index
34
+ set_document_prev_index
35
+ set_heading
36
+ set_index
37
+ set_project
38
+ end
39
+
40
+
41
+ def set_destination
42
+ @navigator.destination = @document.destination
43
+ end
44
+
45
+
46
+ def set_document_home_index
47
+ @navigator.document_home_index = 0
48
+ end
49
+
50
+
51
+ def set_document_next_index
52
+ @navigator.document_next_index = (@document.index + 1) % @project.outline.length
53
+ end
54
+
55
+
56
+ def set_document_prev_index
57
+ @navigator.document_prev_index = (@document.index - 1) % @project.outline.length
58
+ end
59
+
60
+
61
+ def set_heading
62
+ @navigator.heading = @project.title
63
+ end
64
+
65
+
66
+ def set_index
67
+ @navigator.index = @document.index
68
+ end
69
+
70
+
71
+ def set_project
72
+ @navigator.project = @project
73
+ end
74
+
75
+
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,90 @@
1
+ module Muwu
2
+ module ManifestTaskBuilders
3
+ class SubcontentsBuilder
4
+
5
+
6
+ include Muwu
7
+ include Helper
8
+
9
+
10
+ attr_accessor(
11
+ :manifest_subcontents,
12
+ :outline_subcontents,
13
+ :parent_document,
14
+ :project
15
+ )
16
+
17
+
18
+ def self.build
19
+ builder = new
20
+ yield(builder)
21
+ builder.manifest_subcontents
22
+ end
23
+
24
+
25
+ def initialize
26
+ @manifest_subcontents = ManifestTask::Subcontents.new
27
+ end
28
+
29
+
30
+ def build_from_document(outline_step, parent_document)
31
+ @outline_subcontents = outline_step
32
+ @parent_document = parent_document
33
+ @project = parent_document.project
34
+ phase_1_set_parent
35
+ phase_1_set_project
36
+ phase_2_set_destination
37
+ phase_2_set_text_root_name
38
+ phase_3_set_item_depth_max
39
+ phase_3_set_will_render_section_numbers
40
+ end
41
+
42
+
43
+ def phase_1_set_parent
44
+ @manifest_subcontents.parent = @parent_document
45
+ end
46
+
47
+
48
+ def phase_1_set_project
49
+ @manifest_subcontents.project = @project
50
+ end
51
+
52
+
53
+ def phase_2_set_destination
54
+ @manifest_subcontents.destination = @parent_document.destination
55
+ end
56
+
57
+
58
+ def phase_2_set_text_root_name
59
+ @manifest_subcontents.text_root_name = determine_text_root_name
60
+ end
61
+
62
+
63
+ def phase_3_set_item_depth_max
64
+ @manifest_subcontents.item_depth_max = @project.options.render_sections_distinctly_depth_max
65
+ end
66
+
67
+
68
+ def phase_3_set_will_render_section_numbers
69
+ @manifest_subcontents.will_render_section_numbers = @project.options.render_section_numbers
70
+ end
71
+
72
+
73
+
74
+ private
75
+
76
+
77
+ def determine_text_root_name
78
+ components = @outline_subcontents.partition(RegexpLib.outline_text_plus_whitespace)
79
+ text_block_name = components[2].to_s.downcase.strip
80
+ if text_block_name == ''
81
+ text_block_name = @project.default_text_block_name
82
+ end
83
+ text_block_name
84
+ end
85
+
86
+
87
+
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,125 @@
1
+ module Muwu
2
+ module ManifestTaskBuilders
3
+ class TextBuilder
4
+
5
+
6
+ include Muwu
7
+ include Helper
8
+
9
+
10
+ attr_accessor(
11
+ :outline_text,
12
+ :parent_document,
13
+ :project,
14
+ :text
15
+ )
16
+
17
+
18
+ def self.build
19
+ builder = new
20
+ yield(builder)
21
+ builder.text
22
+ end
23
+
24
+
25
+ def initialize
26
+ @text = ManifestTask::Text.new
27
+ end
28
+
29
+
30
+ def build_from_outline(outline_text, parent_document)
31
+ @outline_text = outline_text
32
+ @parent_document = parent_document
33
+ @project = parent_document.project
34
+ set_project
35
+ set_destination
36
+ set_naming
37
+ set_numbering
38
+ set_sections
39
+ end
40
+
41
+
42
+ def set_destination
43
+ @text.destination = @parent_document.destination
44
+ end
45
+
46
+
47
+ def set_naming
48
+ @text.naming = [determine_text_block_name]
49
+ end
50
+
51
+
52
+ def set_numbering
53
+ @text.numbering = []
54
+ end
55
+
56
+
57
+ def set_project
58
+ @text.project = @project
59
+ end
60
+
61
+
62
+ def set_sections
63
+ @text.sections = build_sections
64
+ end
65
+
66
+
67
+
68
+ private
69
+
70
+
71
+ def build_sections
72
+ sections = []
73
+ child_steps = determine_text_block_steps
74
+ if child_steps.empty? == false
75
+ child_section_numbering = section_number_extend(@text.numbering)
76
+ child_steps.each do |step|
77
+ child_section_numbering = section_number_find(child_section_numbering, step)
78
+ sections << build_text_item(step, child_section_numbering)
79
+ end
80
+ end
81
+ sections
82
+ end
83
+
84
+
85
+ def build_text_item(step, section_numbering)
86
+ ManifestTaskBuilders::TextItemBuilder.build do |b|
87
+ b.build_from_outline_fragment_text(step, section_numbering, @text)
88
+ end
89
+ end
90
+
91
+
92
+ def determine_text_block_name
93
+ directive = @outline_text.flatten[0]
94
+ components = directive.partition(RegexpLib.outline_text_plus_whitespace)
95
+ text_block_name = components[2].to_s.downcase.strip
96
+ if text_block_name == ''
97
+ text_block_name = @project.default_text_block_name
98
+ end
99
+ text_block_name
100
+ end
101
+
102
+
103
+ def determine_text_block_steps
104
+ @outline_text.flatten[1]
105
+ end
106
+
107
+
108
+ def section_number_extend(number_incoming)
109
+ number_outgoing = number_incoming.clone
110
+ number_outgoing << 0
111
+ number_outgoing
112
+ end
113
+
114
+
115
+ def section_number_find(number_incoming, step)
116
+ number_outgoing = number_incoming.clone
117
+ sorted_outline_steps = @project.outline_text_blocks_named(@text.text_root_name)
118
+ number_outgoing[-1] = sorted_outline_steps.index(step) + 1
119
+ number_outgoing
120
+ end
121
+
122
+
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,314 @@
1
+ module Muwu
2
+ module ManifestTaskBuilders
3
+ class TextItemBuilder
4
+
5
+
6
+ include Muwu
7
+ include Helper
8
+
9
+
10
+ attr_accessor(
11
+ :heading_data,
12
+ :numbering,
13
+ :outline_fragment,
14
+ :parent_manifest_text,
15
+ :project,
16
+ :source_filename,
17
+ :text_item
18
+ )
19
+
20
+
21
+ def self.build
22
+ builder = new
23
+ yield(builder)
24
+ builder.text_item
25
+ end
26
+
27
+
28
+ def initialize
29
+ @text_item = ManifestTask::TextItem.new
30
+ end
31
+
32
+
33
+ def build_from_outline_fragment_text(outline_fragment, numbering, parent_manifest_text)
34
+ @numbering = numbering
35
+ @outline_fragment = outline_fragment
36
+ @parent_manifest_text = parent_manifest_text
37
+ @project = parent_manifest_text.project
38
+ phase_1_set_project
39
+ phase_2_set_source_filename
40
+ phase_3_set_heading
41
+ phase_4_set_destination
42
+ phase_4_set_naming
43
+ phase_4_set_numbering
44
+ phase_5_set_sections
45
+ phase_6_validate_file_presence
46
+ end
47
+
48
+
49
+ def phase_1_set_project
50
+ @text_item.project = @project
51
+ end
52
+
53
+
54
+ def phase_2_set_source_filename
55
+ @source_filename = determine_source_filename
56
+ @text_item.source_filename = @source_filename
57
+ end
58
+
59
+
60
+ def phase_3_set_heading
61
+ @heading_data = determine_heading_data
62
+ @text_item.heading = @heading_data[:heading]
63
+ @text_item.heading_origin = @heading_data[:origin]
64
+ end
65
+
66
+
67
+ def phase_4_set_destination
68
+ @text_item.destination = @parent_manifest_text.destination
69
+ end
70
+
71
+
72
+ def phase_4_set_naming
73
+ if Hash === @outline_fragment
74
+ @text_item.naming = [@parent_manifest_text.naming, SanitizerHelper.sanitize_text_item_path(outline_step)].flatten
75
+ else
76
+ @text_item.naming = [@parent_manifest_text.naming, @heading_data[:heading]].flatten
77
+ end
78
+ end
79
+
80
+
81
+ def phase_4_set_numbering
82
+ @text_item.numbering = @numbering
83
+ end
84
+
85
+
86
+ def phase_5_set_sections
87
+ if Hash === @outline_fragment
88
+ @text_item.sections = determine_sections
89
+ end
90
+ end
91
+
92
+
93
+ def phase_6_validate_file_presence
94
+ ProjectValidator.new(@project).validate_task_text_item(@text_item)
95
+ end
96
+
97
+
98
+
99
+ private
100
+
101
+
102
+ def build_text_item(step, section_numbering)
103
+ ManifestTaskBuilders::TextItemBuilder.build do |b|
104
+ b.build_from_outline_fragment_text(step, section_numbering, @text_item)
105
+ end
106
+ end
107
+
108
+
109
+ def determine_child_steps_from_outline
110
+ [@outline_step.flatten[1]].flatten
111
+ end
112
+
113
+
114
+ def determine_sections
115
+ sections = []
116
+ child_steps = [@outline_fragment.flatten[1]].flatten
117
+ if child_steps.empty? == false
118
+ child_section_numbering = section_number_extend(@text_item.numbering)
119
+ child_steps.each do |step|
120
+ child_section_numbering = section_number_increment(child_section_numbering)
121
+ sections << build_text_item(step, child_section_numbering)
122
+ end
123
+ end
124
+ sections
125
+ end
126
+
127
+
128
+ def determine_source_filename
129
+ if @project.outline_text_pathnames_are_explicit
130
+ determine_source_filename_explicitly
131
+ elsif @project.outline_text_pathnames_are_flexible
132
+ determine_source_filename_flexibly
133
+ elsif @project.outline_text_pathnames_are_implicit
134
+ determine_source_filename_implicitly
135
+ else
136
+ determine_source_filename_explicitly
137
+ end
138
+ end
139
+
140
+
141
+ def determine_source_filename_explicitly
142
+ filename = SanitizerHelper.sanitize_text_item_basename(outline_step)
143
+ filepath = ['text']
144
+ File.join([filepath, filename].flatten)
145
+ end
146
+
147
+
148
+ def determine_source_filename_flexibly
149
+ if OutlineHelper.new(outline_step).text_step_flexible_suggests_file
150
+ determine_source_filename_explicitly
151
+ else
152
+ determine_source_filename_implicitly
153
+ end
154
+ end
155
+
156
+
157
+ def determine_source_filename_implicitly
158
+ # filename = make_filename_implicitly(outline_step)
159
+ # filepath = make_filepath_implicitly
160
+ # File.join([filepath, filename].flatten)
161
+ determine_source_filename_cascade_implicitly
162
+ end
163
+
164
+
165
+ def determine_source_filename_cascade_implicitly
166
+ source_filename = ''
167
+ file_path = make_filepath_implicitly
168
+ file_basename = SanitizerHelper.sanitize_text_item_path(outline_step)
169
+ file_name_md = file_basename + '.md'
170
+ file_name_haml = file_basename + '.haml'
171
+ file_attempt_md = File.join([file_path, file_name_md].flatten)
172
+ file_attempt_haml = File.join([file_path, file_name_haml].flatten)
173
+ if File.exists?(file_attempt_md)
174
+ source_filename = file_attempt_md
175
+ elsif File.exists?(file_attempt_haml)
176
+ source_filename = file_attempt_haml
177
+ else
178
+ source_filename = file_attempt_md
179
+ end
180
+ source_filename
181
+ end
182
+
183
+
184
+ def determine_heading_data
185
+ if @text_item.source_file_does_exist
186
+ determine_heading_from_file
187
+ elsif @text_item.source_file_does_not_exist
188
+ determine_heading_from_file_basename_or_outline
189
+ end
190
+ end
191
+
192
+
193
+ def determine_heading_from_file
194
+ case File.extname(@text_item.source_filename_absolute).downcase
195
+ when '.haml'
196
+ determine_heading_from_file_haml
197
+ when '.md'
198
+ determine_heading_from_file_md
199
+ else
200
+ determine_heading_from_file_basename
201
+ end
202
+ end
203
+
204
+
205
+ def determine_heading_from_file_basename
206
+ heading = File.basename(@text_item.source_filename, '.*')
207
+ origin = :basename
208
+ { heading: heading, origin: origin }
209
+ end
210
+
211
+
212
+ def determine_heading_from_file_basename_or_outline
213
+ case @project.outline_text_pathnames
214
+ when 'explicit'
215
+ heading = File.basename(@text_item.source_filename, '.*')
216
+ origin = :basename
217
+ when 'flexible', 'implicit'
218
+ heading = outline_step
219
+ origin = :outline
220
+ else
221
+ heading = ''
222
+ origin = nil
223
+ end
224
+ { heading: heading, origin: origin }
225
+ end
226
+
227
+
228
+ def determine_heading_from_file_haml
229
+ first_line = File.open(@text_item.source_filename_absolute, 'r') { |f| f.gets("\n").to_s }
230
+ if first_line =~ RegexpLib.haml_heading
231
+ determine_heading_from_file_haml_first_line(first_line)
232
+ else
233
+ determine_heading_from_file_basename_or_outline
234
+ end
235
+ end
236
+
237
+
238
+ def determine_heading_from_file_haml_first_line(first_line)
239
+ heading = first_line.gsub(RegexpLib.haml_heading_plus_whitespace,'').strip
240
+ origin = :text_source
241
+ { heading: heading, origin: origin }
242
+ end
243
+
244
+
245
+ def determine_heading_from_file_md
246
+ first_line = File.open(@text_item.source_filename_absolute, 'r') { |f| f.gets("\n").to_s }
247
+ if first_line =~ RegexpLib.markdown_heading
248
+ determine_heading_from_file_md_first_line(first_line)
249
+ else
250
+ determine_heading_from_file_basename_or_outline
251
+ end
252
+ end
253
+
254
+
255
+ def determine_heading_from_file_md_first_line(first_line)
256
+ heading = first_line.gsub(RegexpLib.markdown_heading_plus_whitespace,'').strip
257
+ origin = :text_source
258
+ { heading: heading, origin: origin }
259
+ end
260
+
261
+
262
+ # def make_filename_implicitly(string)
263
+ # file_basename = SanitizerHelper.sanitize_text_item_path(string)
264
+ # filename = file_basename + '.md'
265
+ # filename
266
+ # end
267
+
268
+
269
+ def make_filepath_implicitly
270
+ path_from_project_home = ['text']
271
+ if @project.text_block_naming_is_simple
272
+ path_from_project_home.concat(@parent_manifest_text.naming_downcase_without_text_root)
273
+ elsif @project.text_block_naming_is_not_simple
274
+ path_from_project_home.concat(@parent_manifest_text.naming_downcase)
275
+ end
276
+ safe_path_from_project_home = SanitizerHelper.sanitize_text_item_path(path_from_project_home)
277
+ safe_path_from_project_home
278
+ end
279
+
280
+
281
+
282
+ def outline_step
283
+ case @outline_fragment
284
+ when Hash
285
+ @outline_fragment.flatten[0].to_s
286
+ else
287
+ @outline_fragment.to_s
288
+ end
289
+ end
290
+
291
+
292
+ def outline_step_sanitized
293
+ SanitizerHelper.sanitize_text_item_path(outline_step)
294
+ end
295
+
296
+
297
+ def section_number_extend(number_incoming)
298
+ number_outgoing = number_incoming.clone
299
+ number_outgoing << 0
300
+ number_outgoing
301
+ end
302
+
303
+
304
+ def section_number_increment(number_incoming)
305
+ number_outgoing = number_incoming.clone
306
+ number_outgoing[-1] = number_outgoing[-1].next
307
+ number_outgoing
308
+ end
309
+
310
+
311
+
312
+ end
313
+ end
314
+ end