wortsammler 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ test/tmp
15
15
  test/version_tmp
16
16
  tmp
17
17
  testproject
18
+ wortsammler-gem.sublime-workspace
data/README.md CHANGED
@@ -110,7 +110,7 @@ The rakefile is in `<folder>/30_Sources/ZSUPP_Tools`
110
110
 
111
111
  - provide a sublime text package
112
112
  - improve documentation (it is flying around in German and needs to be
113
- consolidated)
113
+ consolidated, please refer to <https://github.com/bwl21/wortsammler/wiki>)
114
114
  - support epub
115
115
 
116
116
  ## contributing
@@ -128,4 +128,47 @@ The rakefile is in `<folder>/30_Sources/ZSUPP_Tools`
128
128
 
129
129
  - John Mc Farlane for [pandoc][]
130
130
 
131
+ ## Installation of the required software
132
+
133
+ ### Ruby
134
+
135
+ Please use Ruby 1.9.3
136
+
137
+ - windows
138
+ - download von [http://rubyinstaller.org/downloads/][]
139
+ - development kit installieren
140
+ [DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe][]
141
+
142
+ Das braucht man nur, wenn man den Windows-Debugger verwenden
143
+ muss. In den scripten ist rquire ruby-debug aukommentiert.
144
+
145
+ - mac: OSX 10.8 bereits installiert
146
+
147
+ ### pandoc
148
+
149
+ - Download [ttp://code.google.com/p/pandoc/downloads/list][]
150
+ - Installation [http://rubyinstaller.org/downloads/][1]
151
+ - Homepage [http://johnmacfarlane.net/pandoc/][pandoc]
152
+
153
+ ### TeX
154
+
155
+ - mac: download [http://tug.org/mactex/][]
156
+
157
+ - windows:
158
+
159
+ - [http://www.exomatik.net/U-Latex/USBTeXEnglish\#toc1][]
160
+ - [http://www.miktex.org/2.9/setup][]
161
+
162
+ Alternatively you can use
163
+
164
+ - [usbtex][]
165
+
131
166
  [pandoc]: http://johnmacfarlane.net/pandoc/
167
+ [http://rubyinstaller.org/downloads/]: http://rubyforge.org/frs/%20download.php/76277/rubyinstaller-1.8.7-p370.exe
168
+ [DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe]: https://github.com/downloads/oneclick/rubyinstaller/DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe
169
+ [ttp://code.google.com/p/pandoc/downloads/list]: http://code.google.com/p/pandoc/downloads/list
170
+ [1]: http://rubyinstaller.org/downloads/
171
+ [http://tug.org/mactex/]: http://tug.org/mactex/
172
+ [http://www.exomatik.net/U-Latex/USBTeXEnglish\#toc1]: http://www.exomatik.net/U-Latex/USBTeXEnglish#toc1
173
+ [http://www.miktex.org/2.9/setup]: http://www.miktex.org/2.9/setup
174
+ [usbtex]: http://www.exomatik.net/U-Latex/USBTeXEnglish
data/README.pdf CHANGED
Binary file
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ CLEAN << "testproject"
8
8
  desc "Run specs"
9
9
  RSpec::Core::RakeTask.new do |t|
10
10
  t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
11
- t.rspec_opts = ['-d -fd -fd --out ./testresults/wortsammler_testresults.log -fh --out ./testresults/wortsammler_testresults.html']
11
+ t.rspec_opts = ['-fd -fd --out ./testresults/wortsammler_testresults.log -fh --out ./testresults/wortsammler_testresults.html']
12
12
  # Put spec opts in a file named .rspec in root
13
13
  end
14
14
 
data/changelog.rb.txt ADDED
@@ -0,0 +1,9 @@
1
+ # 0.0.2
2
+
3
+ - support front matter (https://github.com/bwl21/wortsammler/issues/6)
4
+ - refactor low level api Step 1 (https://github.com/bwl21/wortsammler/issues/4)
5
+
6
+
7
+ # 0.0.1
8
+
9
+ - initial version
@@ -54,13 +54,13 @@ class TraceableSet
54
54
  }.join("\n\n")
55
55
  end
56
56
 
57
- # this generates the todo - list
58
-
59
- # TODO: add this method
60
-
61
- # this method processes all traces in a particular file
62
- # @param [String] mdFile name of the Markdown file which shall
63
- # be scanned.
57
+ #
58
+ # This factory method processes all traces in a particular markdown file
59
+ # and returns a TraceableSet
60
+ #
61
+ # @param mdFile [String] name of the markdown File which shall be scanned
62
+ #
63
+ # @return [TraceableSet] The set of traceables found in the markdown file
64
64
  def self.processTracesInMdFile(mdFile)
65
65
 
66
66
  parser=TraceInMarkdownParser.new
@@ -1,4 +1,4 @@
1
- #
1
+ #
2
2
  # This script converts the trace-References in a markdown file
3
3
  # to hot references.
4
4
  #
@@ -18,7 +18,6 @@ require 'nokogiri'
18
18
  require "rubyXL"
19
19
 
20
20
 
21
- #require 'ruby-debug' #if not RUBY_PLATFORM=="i386-mingw32"
22
21
 
23
22
  # TODO: make these patterns part of the configuration
24
23
 
@@ -38,7 +37,7 @@ INCLUDE_PDF_PATTERN = /^\s+~~PDF\s+"(.+)" \s+ "(.+)" \s* (\d*) \s* (\d+-\d+)?
38
37
 
39
38
  INCLUDE_MD_PATTERN = /^\s+~~MD\s+"(.+)" \s+ "(.+)" \s* (\d*) \s* (\d+-\d+)? \s* (clearpage|cleardoublepage)?~~/x
40
39
 
41
- SNIPPET_PATTERN = /~~SN \s+ (\w+)~~/x
40
+ SNIPPET_PATTERN = /(\s*)~~SN \s+ (\w+)~~/x
42
41
 
43
42
 
44
43
  #
@@ -206,17 +205,18 @@ end
206
205
  #
207
206
 
208
207
  class ProoConfig
209
- attr_reader :input, # An array with the input filenames
210
- :outdir, # directory where to place the output files
211
- :outname, # basis to determine the output files
212
- :format, # array of output formats
213
- :traceSortOrder, # Array of strings to determine the sort ord
214
- :vars, # hash of variables for pandoc
215
- :editions, # hash of editions for pandoc
216
- :snippets, # Array of strings to determine snippet filenames
208
+ attr_reader :input, # An array with the input filenames
209
+ :outdir, # directory where to place the output files
210
+ :outname, # basis to determine the output files
211
+ :format, # array of output formats
212
+ :traceSortOrder, # Array of strings to determine the sort ord
213
+ :vars, # hash of variables for pandoc
214
+ :editions, # hash of editions for pandoc
215
+ :snippets, # Array of strings to determine snippet filenames
217
216
  :upstream_tracefiles, # Array of strings to determine upstream tracefile names
218
217
  :downstream_tracefile, # String to save downstram filename
219
- :reqtracefile_base, # string to determine the requirements tracing results
218
+ :reqtracefile_base, # string to determine the requirements tracing results
219
+ :frontmatter, # Array of string to determine input filenames of frontmatter
220
220
  :rootdir, # String directory of the configuration file
221
221
  :stylefiles # Hash of stylefiles path to pandoc latex style file
222
222
 
@@ -268,6 +268,8 @@ class ProoConfig
268
268
 
269
269
  @upstream_tracefiles = selectedConfig[:upstream_tracefiles] || nil
270
270
  @upstream_tracefiles = @upstream_tracefiles.map{|file| File.expand_path("#{basePath}/#{file}")} unless @upstream_tracefiles.nil?
271
+ @frontmatter = selectedConfig[:frontmatter] || nil
272
+ @frontmatter = selectedConfig[:frontmatter].map{|file| File.expand_path("#{basePath}/#{file}")} unless @frontmatter.nil?
271
273
  @rootdir = basePath
272
274
 
273
275
  stylefiles = selectedConfig[:stylefiles] || nil
@@ -281,22 +283,21 @@ class ProoConfig
281
283
  @stylefiles = stylefiles.map{ |key,value| {key => expand_path.call(value)} }.reduce(:merge)
282
284
  end
283
285
 
284
- snippets = selectedConfig[:snippets]
286
+ snippets = selectedConfig[:snippets]
285
287
  if snippets.nil?
286
288
  @snippets = nil
287
289
  else
288
290
  @snippets = snippets.map{|file| File.expand_path("#{basePath}/#{file}")}
289
291
  end
290
292
  end
291
-
292
-
293
293
  end
294
294
 
295
295
 
296
-
297
296
  #
298
297
  # This class provides the major functionalites
298
+ #
299
299
  # Note that it is called PandocBeautifier for historical reasons
300
+ #
300
301
  # provides methods to Process a pandoc file
301
302
  #
302
303
 
@@ -331,7 +332,7 @@ class PandocBeautifier
331
332
  # perform the beautify
332
333
  # * process the file with pandoc
333
334
  # * revoke some quotes introduced by pandoc
334
- # @param [String] file the name of the file to be beieautified
335
+ # @param [String] file the name of the file to be beautified
335
336
  def beautify(file)
336
337
 
337
338
  @log.debug(" Cleaning: \"#{file}\"")
@@ -391,13 +392,20 @@ class PandocBeautifier
391
392
  def replace_snippets_in_text(text, snippets)
392
393
  changed=false
393
394
  text.gsub!(SNIPPET_PATTERN){|m|
394
- replacetext=snippets[$1.to_sym]
395
- if replacetext
395
+ unless $1.nil? then
396
+ replacetext_raw=snippets[$2.to_sym]
397
+ leading_whitespace=$1.split("\n",100)
398
+ leading_lines=leading_whitespace[0..-1].join("\n")
399
+ leading_spaces=leading_whitespace.last || ""
400
+ replacetext=leading_lines+replacetext_raw.gsub("\n", "\n#{leading_spaces}")
401
+ end
402
+
403
+ if replacetext_raw
396
404
  changed=true
397
- @log.debug("replaced snippet #{$1} with #{replacetext}")
405
+ @log.debug("replaced snippet #{$2} with #{replacetext}")
398
406
  else
399
407
  replacetext=m
400
- @log.warn("Snippet not found: #{$1}")
408
+ @log.warn("Snippet not found: #{$2}")
401
409
  end
402
410
  replacetext
403
411
  }
@@ -493,9 +501,10 @@ class PandocBeautifier
493
501
  # @param [String] output - the the name of the output file
494
502
  def collect_document(input, output)
495
503
  inputs=input.map{|xx| xx.esc.to_osPath }.join(" ") # qoute cond combine the inputs
504
+ inputname=File.basename(input.first)
496
505
 
497
506
  #now combine the input files
498
- @log.info("combining the input files")
507
+ @log.debug("combining the input files #{inputname} et al")
499
508
  cmd="pandoc -s -S -o #{output} --ascii #{inputs}" # note that inputs is already quoted
500
509
  system(cmd)
501
510
  if $?.success? then
@@ -504,10 +513,10 @@ class PandocBeautifier
504
513
  end
505
514
 
506
515
  #
507
- # This loads snippets from xlsx file
508
- # @param file [String] Filename of the xlsx file
516
+ # This loads snipptes from xlsx file
517
+ # @param [String] filename of the xlsx file
518
+ # @return [Hash] a hash with the snippetes
509
519
  #
510
- # @return [Hash] a hash with the snippets
511
520
  def load_snippets_from_xlsx(file)
512
521
  temp_filename = "#{@tempdir}/snippett.xlsx"
513
522
  FileUtils::copy(file, temp_filename)
@@ -538,6 +547,12 @@ class PandocBeautifier
538
547
 
539
548
  #
540
549
  # This generates the final document
550
+ #
551
+ # It actually does this in two steps:
552
+ #
553
+ # 1. process front matter to laTeX
554
+ # 2. process documents
555
+ #
541
556
  # @param [Array of String] input the input files to be processed in the given sequence
542
557
  # @param [String] outdir the output directory
543
558
  # @param [String] outname the base name of the output file. It is a basename in case the
@@ -547,13 +562,16 @@ class PandocBeautifier
547
562
  # @param [Hash] vars - the variables passed to pandoc
548
563
  # @param [Hash] editions - the editions to process; default nil - no edition processing
549
564
  # @param [Array of String] snippetfiles the list of files containing snippets
550
- def generateDocument(input, outdir, outname, format, vars, editions=nil, snippetfiles=nil, config=nil)
551
-
565
+ # @param [String] file path to frontmatter the file to processed as frontmatter
566
+ # @param [ProoConfig] config - the configuration file to be used
567
+ def generateDocument(input, outdir, outname, format, vars, editions=nil, snippetfiles=nil, frontmatter=nil, config=nil)
552
568
 
553
569
  # combine the input files
554
570
 
555
- temp_filename = "#{@tempdir}/x.md".to_osPath
571
+ temp_filename = "#{@tempdir}/x.md".to_osPath
572
+ temp_frontmatter = "#{@tempdir}/xfrontmatter.md".to_osPath unless frontmatter.nil?
556
573
  collect_document(input, temp_filename)
574
+ collect_document(frontmatter, temp_frontmatter) unless frontmatter.nil?
557
575
 
558
576
  # process the snippets
559
577
 
@@ -580,23 +598,43 @@ class PandocBeautifier
580
598
  replace_snippets_in_file(temp_filename, snippets)
581
599
  end
582
600
 
601
+ vars_frontmatter=vars.clone
602
+ vars_frontmatter[:usetoc] = "nousetoc"
603
+
583
604
 
584
605
  if editions.nil?
585
606
  # there are no editions
607
+ unless frontmatter.nil? then
608
+ render_document(temp_frontmatter, tempdir, temp_frontmatter, ["frontmatter"], vars_frontmatter)
609
+ vars[:frontmatter] = "#{tempdir}/#{temp_frontmatter}.latex"
610
+ end
586
611
  render_document(temp_filename, outdir, outname, format, vars, config)
587
612
  else
588
613
  # process the editions
589
614
  editions.each{|edition_name, properties|
590
615
  edition_out_filename = "#{outname}_#{properties[:filepart]}"
616
+ edition_temp_frontmatter = "#{@tempdir}/#{edition_out_filename}_frontmatter.md" unless frontmatter.nil?
591
617
  edition_temp_filename = "#{@tempdir}/#{edition_out_filename}.md"
592
618
  vars[:title] = properties[:title]
593
619
 
594
620
  if properties[:debug]
621
+ process_debug_info(temp_frontmatter, edition_temp_frontmatter, edition_name.to_s) unless frontmatter.nil?
595
622
  process_debug_info(temp_filename, edition_temp_filename, edition_name.to_s)
596
623
  lvars=vars.clone
597
624
  lvars[:linenumbers] = "true"
625
+ unless frontmatter.nil? # frontmatter
626
+ lvars[:usetoc] = "nousetoc"
627
+ render_document(edition_temp_frontmatter, @tempdir, "xfrontmatter", ["frontmatter"], lvars)
628
+ lvars[:usetoc] = vars[:usetoc] || "usetoc"
629
+ lvars[:frontmatter] = "#{@tempdir}/xfrontmatter.latex"
630
+ end
598
631
  render_document(edition_temp_filename, outdir, edition_out_filename, ["pdf", "latex"], lvars, config)
599
632
  else
633
+ unless frontmatter.nil? # frontmatter
634
+ filter_document_variant(temp_frontmatter, edition_temp_frontmatter, edition_name.to_s)
635
+ render_document(edition_temp_frontmatter, @tempdir, "xfrontmatter", ["frontmatter"], vars_frontmatter)
636
+ vars[:frontmatter]="#{@tempdir}/xfrontmatter.latex"
637
+ end
600
638
  filter_document_variant(temp_filename, edition_temp_filename, edition_name.to_s)
601
639
  render_document(edition_temp_filename, outdir, edition_out_filename, format, vars, config)
602
640
  end
@@ -604,13 +642,12 @@ class PandocBeautifier
604
642
  end
605
643
  end
606
644
 
607
-
608
- #
609
- # render a single file
610
- # @param input [String] path to the inputfile
611
- # @param outdir [String] path to the output directory
612
- # @param format [Array of String] formats
613
- #
645
+ #
646
+
647
+ # render a single file
648
+ # @param input [String] path to the inputfile
649
+ # @param outdir [String] path to the output directory
650
+ # @param format [Array of String] formats
614
651
  # @return [nil] no useful return value
615
652
  def render_single_document(input, outdir, format)
616
653
  outname=File.basename(input, ".*")
@@ -631,7 +668,6 @@ class PandocBeautifier
631
668
 
632
669
  def render_document(input, outdir, outname, format, vars, config=nil)
633
670
 
634
-
635
671
  #TODO: Clarify the following
636
672
  # on Windows, Tempdir contains a drive letter. But drive letter
637
673
  # seems not to work in pandoc -> pdf if the path separator ist forward
@@ -654,30 +690,51 @@ class PandocBeautifier
654
690
  outfileText = "#{outdir}/#{outname}.txt".to_osPath
655
691
  outfileSlide = "#{outdir}/#{outname}.slide.html".to_osPath
656
692
 
657
-
658
- localvars=vars.clone
693
+ if vars.has_key? :frontmatter
694
+ latexTitleInclude = "--include-before-body=#{vars[:frontmatter].esc}"
695
+ else
696
+ latexTitleInclude
697
+ end
659
698
 
660
699
  #todo: make config required, so it can be reduced to the else part
661
700
  if config.nil? then
662
701
  latexStyleFile = File.dirname(File.expand_path(__FILE__))+"/../../resources/default.latex"
663
702
  latexStyleFile = File.expand_path(latexStyleFile).to_osPath
703
+ css_style_file = File.dirname(File.expand_path(__FILE__))+"/../../resources/default.css"
704
+ css_style_file = File.expand_path(css_style_file).to_osPath
664
705
  else
665
706
  latexStyleFile = config.stylefiles[:latex]
707
+ css_style_file = config.stylefiles[:css]
666
708
  end
667
709
 
668
710
 
711
+ toc = "--toc"
712
+ toc = "" if vars[:usetoc]=="nousetoc"
669
713
 
670
- vars_string=localvars.map{|key, value| "-V #{key}=#{value.esc}"}.join(" ")
714
+ begin
715
+ vars_string=vars.map.map{|key, value| "-V #{key}=#{value.esc}"}.join(" ")
716
+ rescue
717
+ require 'pry';binding.pry
718
+ end
671
719
 
672
720
  @log.info("rendering #{outname} as [#{format.join(', ')}]")
673
721
 
674
- begin
722
+ begin
675
723
 
676
724
  if format.include?("pdf") then
677
725
  ReferenceTweaker.new("pdf").prepareFile(tempfile, tempfilePdf)
726
+ cmd="pandoc -S #{tempfilePdf.esc} #{toc} --standalone --latex-engine xelatex --number-sections #{vars_string}" +
727
+ " --template #{latexStyleFile.esc} --ascii -o #{outfilePdf.esc} #{latexTitleInclude}"
728
+ `#{cmd}`
729
+ end
730
+
731
+
732
+
733
+ if format.include?("frontmatter") then
734
+
735
+ ReferenceTweaker.new("pdf").prepareFile(tempfile, tempfilePdf)
678
736
 
679
- cmd="pandoc -S #{tempfilePdf.esc} --toc --standalone --latex-engine xelatex --number-sections #{vars_string}" +
680
- " --template #{latexStyleFile.esc} --ascii -o #{outfilePdf.esc}"
737
+ cmd="pandoc -S #{tempfilePdf.esc} --latex-engine xelatex #{vars_string} --ascii -o #{outfileLatex.esc}"
681
738
  `#{cmd}`
682
739
  end
683
740
 
@@ -685,8 +742,8 @@ class PandocBeautifier
685
742
 
686
743
  ReferenceTweaker.new("pdf").prepareFile(tempfile, tempfilePdf)
687
744
 
688
- cmd="pandoc -S #{tempfilePdf.esc} --toc --standalone --latex-engine xelatex --number-sections #{vars_string}" +
689
- " --template #{latexStyleFile.esc} --ascii -o #{outfileLatex.esc}"
745
+ cmd="pandoc -S #{tempfilePdf.esc} #{toc} --standalone --latex-engine xelatex --number #{vars_string}" +
746
+ " --template #{latexStyleFile.esc} --ascii -o #{outfileLatex.esc} #{latexTitleInclude}"
690
747
  `#{cmd}`
691
748
  end
692
749
 
@@ -704,6 +761,8 @@ class PandocBeautifier
704
761
  #todo: handle style file
705
762
  ReferenceTweaker.new("html").prepareFile(tempfile, tempfileHtml)
706
763
 
764
+ cmd="pandoc -S #{tempfileHtml.esc} #{toc} --standalone --self-contained --ascii --number #{vars_string}" +
765
+ " -o #{outfileDocx.esc}"
707
766
  cmd="pandoc -S #{tempfileHtml.esc} --toc --standalone --self-contained --ascii --number-sections #{vars_string}" +
708
767
  " -o #{outfileDocx.esc}"
709
768
  `#{cmd}`
@@ -736,10 +795,8 @@ class PandocBeautifier
736
795
  `#{cmd}`
737
796
  end
738
797
  rescue
739
-
740
798
  @log.error "failed to perform #{cmd}"
741
799
  #TODO make a try catch block kere
742
-
743
800
  end
744
801
  nil
745
802
  end