epubforge 0.0.10 → 0.0.11

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 (135) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +17 -10
  3. data/VERSION +1 -1
  4. data/bin/epubforge +1 -1
  5. data/config/actions/epub.rb +50 -0
  6. data/config/actions/forge.rb +34 -13
  7. data/config/actions/git.rb +106 -0
  8. data/config/actions/help.rb +13 -13
  9. data/config/actions/html.rb +33 -0
  10. data/config/actions/mobi.rb +60 -0
  11. data/config/actions/new.rb +182 -0
  12. data/config/actions/word_count.rb +26 -24
  13. data/config/{actions → actions_to_ignore}/generate.rb +1 -1
  14. data/config/{actions → actions_to_ignore}/generate_chapter.rb +0 -0
  15. data/config/{actions → actions_to_ignore}/git_backup.rb +2 -2
  16. data/config/{actions → actions_to_ignore}/globals.rb +1 -1
  17. data/config/{actions → actions_to_ignore}/kindle.rb +3 -3
  18. data/config/{actions → actions_to_ignore}/local_action.rb +1 -1
  19. data/config/{actions → actions_to_ignore}/mobify.rb +3 -3
  20. data/config/actions_to_ignore/notes_to_epub.rb +19 -0
  21. data/config/actions_to_ignore/notes_to_kindle.rb +18 -0
  22. data/config/{actions → actions_to_ignore}/spell.rb +1 -1
  23. data/config/{actions → actions_to_ignore}/version.rb +3 -3
  24. data/config/{actions → actions_to_ignore}/wrap_scene_notes_in_hidden_div.rb +1 -1
  25. data/config/converters/epub_to_mobi.calibre.rb +8 -0
  26. data/config/converters/epub_to_mobi.kindlegen.rb +11 -0
  27. data/config/html_translators/default_kramdown.html_translator.rb +9 -0
  28. data/config/html_translators/default_markdown.html_translator.rb +10 -0
  29. data/config/html_translators/default_markdown_pandoc.html_translator.rb +10 -0
  30. data/config/html_translators/default_textile_pandoc.html_translator.rb +8 -0
  31. data/config/html_translators/default_xhtml.html_translator.rb +7 -0
  32. data/config/html_translators/fallback_html.html_translator.rb +9 -0
  33. data/config/html_translators/fallback_markdown.html_translator.rb +8 -0
  34. data/config/html_translators/fallback_textile.html_translator.rb +7 -0
  35. data/config/html_translators/fallback_txt.html_translator.rb +8 -0
  36. data/config/html_translators/fallback_unknown.html_translator.rb +7 -0
  37. data/lib/epubforge.rb +37 -82
  38. data/lib/{action/thor_action.rb → epubforge/action/action.rb} +89 -69
  39. data/lib/epubforge/action/action2.rb +109 -0
  40. data/lib/epubforge/action/action_definition.rb +62 -0
  41. data/lib/epubforge/action/actions_lookup.rb +45 -0
  42. data/lib/epubforge/action/chatterbox.rb +93 -0
  43. data/lib/{action → epubforge/action}/cli_command.rb +2 -2
  44. data/lib/{action → epubforge/action}/cli_sequence.rb +0 -0
  45. data/lib/{action → epubforge/action}/file_transformer.rb +0 -0
  46. data/lib/{action → epubforge/action}/hooks_interface.rb +2 -2
  47. data/lib/{action → epubforge/action}/run_description.rb +12 -9
  48. data/lib/{action → epubforge/action}/runner.rb +23 -24
  49. data/lib/{epub → epubforge/builder}/assets/asset.rb +1 -1
  50. data/lib/{epub → epubforge/builder}/assets/font.rb +1 -1
  51. data/lib/epubforge/builder/assets/html.rb +9 -0
  52. data/lib/{epub → epubforge/builder}/assets/image.rb +1 -1
  53. data/lib/epubforge/builder/assets/markdown.rb +9 -0
  54. data/lib/{epub → epubforge/builder}/assets/page.rb +12 -4
  55. data/lib/{epub → epubforge/builder}/assets/stylesheet.rb +1 -1
  56. data/lib/epubforge/builder/assets/textile.rb +9 -0
  57. data/lib/epubforge/builder/assets/xhtml.rb +9 -0
  58. data/lib/epubforge/builder/builder.rb +134 -0
  59. data/lib/{epub/builder.rb → epubforge/builder/epub.rb} +58 -161
  60. data/lib/epubforge/builder/html.rb +22 -0
  61. data/lib/epubforge/builder/packager.rb +16 -0
  62. data/lib/epubforge/core_extensions/array.rb +2 -0
  63. data/lib/{core_extensions → epubforge/core_extensions}/kernel.rb +0 -0
  64. data/lib/epubforge/core_extensions/nil_class.rb +2 -0
  65. data/lib/epubforge/core_extensions/object.rb +24 -0
  66. data/lib/{core_extensions → epubforge/core_extensions}/string.rb +1 -5
  67. data/lib/{custom_helpers.rb → epubforge/custom_helpers.rb} +0 -1
  68. data/lib/{errors.rb → epubforge/exceptions/errors.rb} +0 -0
  69. data/lib/{project → epubforge/project}/project.rb +23 -17
  70. data/lib/epubforge/utils/action_loader.rb +8 -0
  71. data/lib/epubforge/utils/class_loader.rb +102 -0
  72. data/lib/epubforge/utils/converter.rb +94 -0
  73. data/lib/{utils → epubforge/utils}/downloader.rb +0 -0
  74. data/lib/{utils → epubforge/utils}/file_orderer.rb +0 -0
  75. data/lib/epubforge/utils/file_path.rb +8 -0
  76. data/lib/epubforge/utils/html_translator.rb +126 -0
  77. data/lib/epubforge/utils/html_translator_queue.rb +113 -0
  78. data/lib/epubforge/utils/htmlizer.rb +61 -0
  79. data/lib/{utils → epubforge/utils}/misc.rb +0 -0
  80. data/lib/epubforge/utils/root_path.rb +8 -0
  81. data/lib/epubforge/utils/settings.rb +147 -0
  82. data/lib/epubforge/utils/template_evaluator.rb +7 -0
  83. data/templates/{default/book/afterword.markdown.template → project/book/afterword.markdown} +0 -0
  84. data/templates/project/book/chapter-%0000chapter%.markdown.template +4 -0
  85. data/templates/{default → project}/book/cover.xhtml.template +2 -2
  86. data/templates/{default/book/foreword.markdown.template → project/book/foreword.markdown} +0 -0
  87. data/templates/{default → project}/book/images/cover.png +0 -0
  88. data/templates/{default/book/stylesheets/stylesheet.css.template → project/book/stylesheets/stylesheet.css} +0 -0
  89. data/templates/project/book/title_page.markdown.template +5 -0
  90. data/templates/project/notes/character.%character.name_for_file%.markdown.template +15 -0
  91. data/templates/{default → project}/notes/images/cover.png +0 -0
  92. data/templates/{default/notes/stylesheets/stylesheet.css.template → project/notes/stylesheets/stylesheet.css} +0 -0
  93. data/templates/{default → project}/settings/actions/local_action.rb.example +1 -1
  94. data/templates/project/settings/config.rb.template +70 -0
  95. data/templates/project/settings/html_translators/example_translator.rb +29 -0
  96. data/templates/{default → project}/settings/wordcount.template +1 -1
  97. data/test/answers01.yml +30 -0
  98. data/test/helper.rb +62 -39
  99. data/test/misc/config.rb +5 -7
  100. data/test/test_epubforge.rb +18 -14
  101. data/test/{test_htmlizers.rb → test_html_translators.rb} +4 -8
  102. data/test/test_template_evaluator.rb +42 -0
  103. data/test/test_utils.rb +0 -11
  104. metadata +186 -189
  105. data/config/actions/gitify.rb +0 -72
  106. data/config/actions/init.rb +0 -138
  107. data/config/actions/notes_to_epub.rb +0 -18
  108. data/config/actions/notes_to_kindle.rb +0 -17
  109. data/config/htmlizers.rb +0 -70
  110. data/lib/action/actions_lookup.rb +0 -45
  111. data/lib/core_extensions/array.rb +0 -5
  112. data/lib/core_extensions/nil_class.rb +0 -5
  113. data/lib/core_extensions/object.rb +0 -5
  114. data/lib/epub/assets/html.rb +0 -8
  115. data/lib/epub/assets/markdown.rb +0 -8
  116. data/lib/epub/assets/textile.rb +0 -8
  117. data/lib/epub/assets/xhtml.rb +0 -8
  118. data/lib/epub/packager.rb +0 -16
  119. data/lib/utils/action_loader.rb +0 -7
  120. data/lib/utils/class_loader.rb +0 -102
  121. data/lib/utils/directory_builder.rb +0 -181
  122. data/lib/utils/file_path.rb +0 -152
  123. data/lib/utils/html_translator.rb +0 -100
  124. data/lib/utils/html_translator_queue.rb +0 -70
  125. data/lib/utils/htmlizer.rb +0 -92
  126. data/lib/utils/root_path.rb +0 -20
  127. data/lib/utils/settings.rb +0 -146
  128. data/lib/utils/template_evaluator.rb +0 -20
  129. data/templates/default/book/chapter-%i%.markdown.sequence +0 -4
  130. data/templates/default/book/title_page.markdown.template +0 -4
  131. data/templates/default/notes/character.named.markdown.template +0 -4
  132. data/templates/default/payload.rb +0 -65
  133. data/templates/default/settings/config.rb.form +0 -55
  134. data/templates/default/settings/htmlizers.rb +0 -0
  135. data/test/test_directory_builder.rb +0 -141
@@ -1,7 +0,0 @@
1
- module EpubForge
2
- module Utils
3
- class ActionLoader < ClassLoader
4
- namespace( "EpubForge::Action" )
5
- end
6
- end
7
- end
@@ -1,102 +0,0 @@
1
- module EpubForge
2
- module Utils
3
- # filepath string with metadata, representing a class
4
- # file that can be loaded.
5
- class ClassLoader < FunWith::Files::FilePath
6
- def self.loaded_classes
7
- @loaded_classes ||= []
8
- end
9
-
10
- def self.loaded_directories
11
- @loaded_directories ||= []
12
- end
13
-
14
- def self.namespace( nsp = nil )
15
- @namespace = nsp unless nsp.nil?
16
- @namespace
17
- end
18
-
19
- def class_name
20
- unless @class_name
21
- base = self.basename.to_s.split(".")[0].epf_camelize
22
- @class_name = "#{self.class.namespace}::#{base}"
23
- end
24
- @class_name
25
- end
26
-
27
- # Returns true if an error was raised when trying to require the file,
28
- # or if the expected class is not loaded after the file was required.
29
- # Proper naming is very important here.
30
- def require_me
31
- begin
32
- require self.to_s
33
- rescue NameError => e
34
- puts "Error encounterd while trying to load #{self.class_name} from #{self}"
35
- puts e.message
36
- puts e.backtrace.map{|line| "\t#{line}" }
37
- return false
38
- end
39
-
40
- return self.class_loaded?
41
- end
42
-
43
- def class_loaded?
44
- begin
45
- self.to_class
46
- return true
47
- rescue NameError # There's gotta be another way I should be doing this.
48
- return false
49
- end
50
- end
51
-
52
- def to_class
53
- return @klass unless @klass.nil?
54
- @klass = Utils::Misc.constantize( self.class_name )
55
- end
56
-
57
- def self.require_me( *loadables )
58
- @loaded_classes ||= []
59
- @loaded_directories ||= []
60
-
61
- for loadable in loadables
62
- loadable = self.new( loadable )
63
-
64
- if loadable.file?
65
- if loadable.require_me
66
- @loaded_classes << loadable.to_class
67
- else
68
- puts "Warning: Failed to load #{loadable.class_name} from file #{loadable}"
69
- end
70
- elsif loadable.directory?
71
- @loaded_directories << loadable
72
- loadable.glob( "**", "*.rb" ).each do |entry|
73
- self.require_me( entry )
74
- end
75
- else
76
- puts "Warning: Could not find file #{loadable} to load classes from."
77
- end
78
- end
79
- end
80
-
81
- # just loading all the files is simpler, and probably little harm from reloading. Plus, I want
82
- # to be able to split up existing ThorClasses across multiple files.
83
- def self.load_me( *loadables )
84
- silence_warnings do
85
- for loadable in loadables
86
- loadable = loadable.fwf_filepath
87
-
88
- if loadable.file?
89
- load( loadable )
90
- elsif loadable.directory?
91
- for entry in loadable.glob( :ext => "rb", :recursive => true )
92
- load( entry )
93
- end
94
- else
95
- puts "Warning: No idea what I'm trying to load (#{loadable}:#{loadable.class})"
96
- end
97
- end
98
- end
99
- end
100
- end
101
- end
102
- end
@@ -1,181 +0,0 @@
1
- module EpubForge
2
- module Utils
3
- class DirectoryBuilder
4
- attr_accessor :current_path, :current_file
5
-
6
- def initialize( path )
7
- @paths = []
8
- @current_path = path.fwf_filepath
9
- make_path
10
- end
11
-
12
- def self.create( path, &block )
13
- builder = self.new( path )
14
- yield builder if block_given?
15
- builder
16
- end
17
-
18
- def dir( *args, &block )
19
- descend( *args ) do
20
- yield if block_given?
21
- end
22
- end
23
-
24
- # block must be given
25
- def self.tmpdir( &block )
26
- if block_given?
27
- Dir.mktmpdir do |dir|
28
- self.create( dir ) do |builder|
29
- yield builder
30
- end
31
- end
32
- else
33
- self.create( Dir.mktmpdir )
34
- end
35
- end
36
-
37
- # Copies the given source file into a file in the current_path.
38
- # If a dest_name is given, the new file will be given that name.
39
- def copy( src_filepath, dst_name = nil )
40
- dst_filepath = dst_name ? @current_path.join( dst_name ) : @current_path
41
- FileUtils.copy( src_filepath, dst_filepath )
42
- end
43
-
44
- def file( name = nil, content = nil, &block )
45
- # if name && content
46
- # begin
47
- # f = open_file( name )
48
- # f << content
49
- # ensure
50
- # close_file
51
- # end
52
- if name
53
- open_file( name )
54
- @current_file << content if content
55
- if block_given?
56
- begin
57
- yield @current_file
58
- ensure
59
- close_file
60
- end
61
- end
62
- else
63
- @current_file
64
- end
65
- end
66
-
67
- def current_file
68
- @current_file ? FunWith::Files::FilePath.new( @current_file.path ) : nil
69
- end
70
-
71
- # if file not given, the result is appended to the current file.
72
- def download( url, file = nil )
73
- if file
74
- if file.fwf_filepath.relative?
75
- file = FunWith::Files::FilePath.new( @current_path, file )
76
- end
77
-
78
- File.open( file, "w" ) do |f|
79
- download_to_target( url, f )
80
- end
81
- elsif @current_file
82
- download_to_target( url, @current_file )
83
- else
84
- puts "No current file to append #{url} to."
85
- end
86
- end
87
-
88
- def template( src, dst, vars = {} )
89
- self.file( dst ) do |f|
90
- f << Utils::TemplateEvaluator.new( src, vars ).result
91
- end
92
- end
93
-
94
- protected
95
- def make_path
96
- FileUtils.mkdir_p( @current_path ) unless @current_path.exist?
97
- end
98
-
99
- def descend( *args, &block )
100
- if @current_path.directory?
101
- close_file
102
- @paths << @current_path
103
- @current_path = @paths.last.join( *args )
104
- make_path
105
- yield
106
- @current_path = @paths.pop
107
- close_file
108
- else
109
- raise "Cannot descend."
110
- end
111
- end
112
-
113
- def open_file( name )
114
- close_file
115
- @current_file = File.open( @current_path.join( name ), "w" )
116
- end
117
-
118
- def close_file
119
- if @current_file
120
- @current_file.flush
121
- @current_file.close
122
- end
123
-
124
- @current_file = nil
125
- end
126
-
127
- def download_to_target( url, file )
128
- Downloader.new.download( url, file )
129
- end
130
- end
131
- end
132
- end
133
-
134
-
135
- # sample code
136
- #
137
- # DirBuilder.create( '~/project' ) do |b| # starts by creating directory. If parent
138
- # # directories don't exist, they will soon.
139
- # # if you use DirBuilder.tmp('~/project'), a tempdir
140
- # # is created, and its contents relocated to ~/project when the
141
- # # block terminates.
142
- # b.dir("images") do # creates subdirectory "images"
143
- # for img in src_dir.entries.select{|img| img.extension == ".png"}
144
- # b.copy( src_dir.join( img.filename ) ) # copies a bunch of files from another directory
145
- # end # rises back to the initial '~/project directory
146
- #
147
- # b.copy( src_dir.join( "rorshach.xml" ) )
148
- # b.download( "dest.bash", "http://get.rvm.io" ) # downloads file directly beneath '~/project'
149
- # # maybe someday, though
150
- #
151
- # b.dir("text", "scenes") do # creates ~/project/text/scenes subdir
152
- # b.file( "adventure_time.txt" ) do |f|
153
- # f << "Fill this in later"
154
- # end
155
- #
156
- # # calling .file without feeding it a block leaves it open for writing,
157
- # # until either the enclosing block terminates or .file is called
158
- # # again with a string argument.
159
- # b.file( "another_brick.txt" )
160
- # b.file << "Hey, you!"
161
- # b.file << "Yes, you!"
162
- # b.file.push "Stand still, laddie!"
163
- #
164
- # b.template(templates_dir.join("blue_template.txt")) do |t|
165
- # t.var(:fname, "John")
166
- # t.var(:lname, "Macey")
167
- # t.var(:state, "Ohio")
168
- # t.vars(graduated: "2003")
169
- # t.vars(quot: "That wasn't my duck.", photo: "john.png", css: "font-family: arial")
170
- # end
171
- #
172
- # b.copy( [src_dir.join("abba.txt"), "baab.txt"] ) # contents of abba.txt copied into baab.txt
173
- #
174
- #
175
- # b.file( ".lockfile" ) # creates an empty file
176
- # end
177
- #
178
- # b.
179
- # end
180
- #
181
-
@@ -1,152 +0,0 @@
1
- module EpubForge
2
- module Utils
3
- class FilePath < Pathname
4
- def initialize( *args )
5
- super( File.join( *args ) )
6
- end
7
-
8
- # args implicitly joined to cwd
9
- def self.cwd( *args )
10
- Dir.pwd.fwf_filepath.join( *args )
11
- end
12
-
13
- def self.pwd( *args )
14
- self.cwd( *args )
15
- end
16
-
17
- def join( *args, &block )
18
- if block_given?
19
- yield self.class.new( super(*args) )
20
- else
21
- self.class.new( super(*args) )
22
- end
23
- end
24
-
25
- alias :exists? :exist?
26
-
27
- def up
28
- self.class.new( self.join("..") ).expand
29
- end
30
-
31
- # opts:
32
- # :class => [self.class] The class of objects you want returned (String, FilePath, ClassLoader, etc.)
33
- # Should probably be a subclass of FilePath or String. Class.init must accept a string
34
- # [representing a file path] as the sole argument.
35
- #
36
- # :recurse => [false]
37
- # :ext => [] A single symbol, or a list containing strings/symbols representing file name extensions.
38
- # No leading periods kthxbai.
39
- #
40
- # If opts not given, the user can still do it explicitly with arguments like .glob("**", "*.rb")
41
- def glob( *args )
42
- opts = args.last.is_a?(Hash) ? args.pop : {}
43
-
44
- recurser = opts[:recurse] ? "**" : nil
45
- extensions = case opts[:ext]
46
- when Symbol, String
47
- "*.#{opts[:ext]}"
48
- when Array
49
- extensions = opts[:ext].map(&:to_s).join(',')
50
- "*.{#{extensions}}"
51
- when NilClass
52
- nil
53
- end
54
-
55
- args += [recurser, extensions]
56
- args.compact!
57
-
58
- opts[:class] ||= self.class
59
- Dir.glob( self.join(*args) ).map{ |f| opts[:class].new(f) }
60
- end
61
-
62
- def expand
63
- self.class.new( File.expand_path( self ) )
64
- end
65
-
66
- def touch
67
- FileUtils.touch( self )
68
- return true
69
- rescue Errno::EACCESS
70
- return false
71
- end
72
-
73
- def touch_dir
74
- FileUtils.mkdir_p( self )
75
- return true
76
- rescue Errno::EEXIST
77
- return true
78
- rescue Errno::EACCESS
79
- return false
80
- end
81
-
82
- def write( content = nil, &block )
83
- File.open( self, "w" ) do |f|
84
- f << content if content
85
- if block_given?
86
- yield f
87
- end
88
- end
89
- end
90
-
91
- def append( content = nil, &block )
92
- File.open( self, "a" ) do |f|
93
- f << content if content
94
- if block_given?
95
- yield f
96
- end
97
- end
98
- end
99
-
100
- def grep( regex )
101
- return [] unless self.file?
102
- matching = []
103
- self.each_line do |line|
104
- matching.push( line ) if line.match( regex )
105
- end
106
- matching
107
- end
108
-
109
- # Not the same as zero?
110
- def empty?
111
- raise Exceptions::FileDoesNotExist unless self.exist?
112
-
113
- if self.file?
114
- File.size( self ) == 0
115
- elsif self.directory?
116
- self.glob( "**", "*" ).length == 0
117
- end
118
- end
119
-
120
- def basename_no_ext
121
- self.basename.to_s.split(".")[0..-2].join(".").fwf_filepath
122
- end
123
-
124
- def without_ext
125
- self.gsub(/\.#{self.ext}$/, '')
126
- end
127
-
128
- def ext
129
- self.basename.to_s.split(".").last || ""
130
- end
131
-
132
- def relative_path_from( ancestor_dir )
133
- depth = ancestor_dir.to_s.split(File::SEPARATOR).length
134
- relative_path = self.to_s.split(File::SEPARATOR)
135
- relative_path[(depth)..-1].join(File::SEPARATOR).fwf_filepath
136
- end
137
-
138
- def gsub( *args )
139
- self.to_s.gsub(*args).fwf_filepath
140
- end
141
-
142
- def gsub!( *args )
143
- new_str = self.to_s.gsub(*args)
144
- self.instance_variable_set(:@path, new_str)
145
- end
146
-
147
- def fwf_filepath
148
- self
149
- end
150
- end
151
- end
152
- end
@@ -1,100 +0,0 @@
1
- module EpubForge
2
- module Utils
3
- # An individual translator, which receives a filename, determines if it's up to the job
4
- # then returns the resulting HTML translation.
5
- class HtmlTranslator
6
- GROUP_NAMES = [:preferred, :user, :default, :fallback]
7
-
8
- def initialize
9
- group( :user )
10
- opts( "" )
11
- end
12
-
13
- def name( n = nil )
14
- @name = n if n
15
- @name
16
- end
17
-
18
- def group( g = nil )
19
- if g
20
- raise "group must be one of the following symbols: #{GROUP_NAMES.inspect}" unless GROUP_NAMES.include?(g)
21
- @group = g
22
- end
23
-
24
- @group
25
- end
26
-
27
- def executable executable_name = nil
28
- if executable_name
29
- @executable_name = Htmlizer.instance.location( executable_name ) || `which #{executable_name}`.strip
30
- end
31
- @executable_name || ""
32
- end
33
-
34
- def format f = nil
35
- @format = f if f
36
- @format
37
- end
38
-
39
- def cmd c = nil
40
- @cmd = c if c
41
- @cmd
42
- end
43
-
44
- def custom_proc( p = nil, &block )
45
- if block_given?
46
- @custom_proc = block
47
- else
48
- @custom_proc = c if c
49
- end
50
-
51
- @custom_proc
52
- end
53
-
54
- def opts o = nil
55
- @opts = o if o
56
- @opts
57
- end
58
-
59
- def installed?
60
- executable.length > 0
61
- end
62
-
63
- def handles_format?( f )
64
- @format == determine_file_format( f ) || @format == :unknown
65
- end
66
-
67
- def can_do_job?( f )
68
- installed? && handles_format?( f )
69
- end
70
-
71
- # opts allows you to override the normal command line arguments
72
- # Maybe a description of the job's requirements should be more
73
- # elaborate than just a filename. OTOH, simple can have its advantages.
74
- def translate( filename, opts = "" )
75
- return false unless can_do_job?( filename )
76
-
77
- result = ""
78
- if @custom_proc
79
- result += @custom_proc.call( filename, *opts )
80
- elsif @cmd
81
- exec_string = cmd.gsub( /\{\{f\}\}/, filename.to_s )
82
- opts = @opts if opts.epf_blank?
83
- exec_string.gsub!( /\{\{o\}\}/, opts )
84
- exec_string.gsub!( /\{\{x\}\}/, executable )
85
-
86
- result += `#{exec_string}`
87
- else
88
- return false
89
- end
90
-
91
- result += "\n\n<!-- generated from #{@format} by htmlizer #{@name} -->\n"
92
- result
93
- end
94
-
95
- def determine_file_format( file )
96
- file.fwf_filepath.ext.to_sym
97
- end
98
- end
99
- end
100
- end