cbeta 1.1.4 → 1.1.5

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 (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cbeta.rb +13 -1
  3. data/lib/cbeta/p5a_to_html.rb +83 -50
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a972d917a7ea7740faab2df02ea1ac8a3cf9655
4
- data.tar.gz: b33b9ed754edb7c633866ce14d1d466abd8da0c2
3
+ metadata.gz: 965c9247aa8e33b7270dee71d34cb7f5bed26915
4
+ data.tar.gz: afd561a1aa947591a92d28d4dbcf0d8b0c5b7a82
5
5
  SHA512:
6
- metadata.gz: c79de071049038ce9dc7ed01a9637926fc26496331a9466cb9998c210a48500a32cfa845729fca413afe491aec1639d8d96b174485d538e912d5d8ba94493bb4
7
- data.tar.gz: 6281dc6ef606ec0ea05c6ac7a832d2da272aa15a5a50b7324c3705b3cf1aa88189de8118e7c35e51de4510669bbe842a64ad738398535d6bda4c38c25c50e482
6
+ metadata.gz: 86b3692cf11c8c3a99f493c88ac303b88bd53126d0d23d741c02aa10440d1579740e2f6caf850ad99151dd69b88ac05c5c59640127410be10d39d33221eda180
7
+ data.tar.gz: bd2250ce8c318c9bdde3d01ab3ce8a6cdee4ed219f6ccf7113f2b046937da95419124aa432d3a71e37eebed12c1ed919d56c3d997018a07e6032dafc915099f4
@@ -38,10 +38,15 @@ class CBETA
38
38
  fn = File.join(File.dirname(__FILE__), 'data/canons.csv')
39
39
  text = File.read(fn)
40
40
  @canon_abbr = {}
41
+ @canon_nickname = {}
41
42
  CSV.parse(text, :headers => true) do |row|
43
+ id = row['id']
44
+ unless row['nickname'].nil?
45
+ @canon_nickname[id] = row['nickname']
46
+ end
42
47
  next if row['abbreviation'].nil?
43
48
  next if row['abbreviation'].empty?
44
- @canon_abbr[row['id']] = row['abbreviation']
49
+ @canon_abbr[id] = row['abbreviation']
45
50
  end
46
51
 
47
52
  fn = File.join(File.dirname(__FILE__), 'data/categories.json')
@@ -49,6 +54,13 @@ class CBETA
49
54
  @categories = JSON.parse(s)
50
55
  end
51
56
 
57
+ # @param id [String] 藏經 ID, 例如大正藏的 ID 是 "T"
58
+ # @return [String] 藏經短名,例如 "大正藏"
59
+ def get_canon_nickname(id)
60
+ return nil unless @canon_nickname.key? id
61
+ @canon_nickname[id]
62
+ end
63
+
52
64
  # 取得藏經略符
53
65
  #
54
66
  # @param id [String] 藏經 ID, 例如大正藏的 ID 是 "T"
@@ -450,8 +450,8 @@ class CBETA::P5aToHTML
450
450
  @pass << false
451
451
  s = traverse(e)
452
452
  @pass.pop
453
- @back[@juan] += "<span class='footnote_cb' id='n#{n}'>#{s}</span>\n"
454
- return "<a class='noteAnchor' href='#n#{n}'></a>"
453
+ @back[@juan] += "<span class='footnote cb' id='n#{n}'>#{s}</span>\n"
454
+ return "<a class='noteAnchor cb' href='#n#{n}'></a>"
455
455
  when 'rest'
456
456
  return ''
457
457
  else
@@ -463,12 +463,15 @@ class CBETA::P5aToHTML
463
463
  return '' if e['resp'].start_with? 'CBETA'
464
464
  end
465
465
 
466
- if e.has_attribute?('place') && e['place']=='inline'
467
- r = traverse(e)
468
- return "<span class='doube-line-note'>#{r}</span>"
469
- else
470
- return traverse(e)
466
+ r = traverse(e)
467
+ if e.has_attribute?('place')
468
+ if e['place']=='inline'
469
+ r = "<span class='doube-line-note'>#{r}</span>"
470
+ elsif e['place']=='interlinear'
471
+ r = "<span class='interlinear-note'>#{r}</span>"
472
+ end
471
473
  end
474
+ r
472
475
  end
473
476
 
474
477
  def handle_note_orig(e, anchor_type=nil)
@@ -476,18 +479,21 @@ class CBETA::P5aToHTML
476
479
  @pass << false
477
480
  s = traverse(e)
478
481
  @pass.pop
479
- @back[@juan] += "<span class='footnote_orig' id='n#{n}'>#{s}</span>\n"
480
482
 
481
- if @mod_notes.include? n
482
- return ''
483
- else
484
- label = case anchor_type
485
- when 'biao' then " data-label='標#{n[-2..-1]}'"
486
- when 'ke' then " data-label='科#{n[-2..-1]}'"
487
- else ''
488
- end
489
- return "<a class='noteAnchor' href='#n#{n}'#{label}></a>"
483
+ c = @series
484
+
485
+ # 如果 CBETA 沒有修訂,就跟底本的註一樣
486
+ c += " cb" unless @mod_notes.include? n
487
+
488
+ @back[@juan] += "<span class='footnote #{c}' id='n#{n}'>#{s}</span>\n"
489
+
490
+ label = case anchor_type
491
+ when 'biao' then " data-label='標#{n[-2..-1]}'"
492
+ when 'ke' then " data-label='科#{n[-2..-1]}'"
493
+ else ''
490
494
  end
495
+
496
+ return "<a class='noteAnchor #{c}' href='#n#{n}'#{label}></a>"
491
497
  end
492
498
 
493
499
  def handle_p(e)
@@ -534,39 +540,10 @@ class CBETA::P5aToHTML
534
540
  juans.each { |j|
535
541
  if j =~ /<juan (\d+)>$/
536
542
  juan_no = $1.to_i
537
- if @sutra_no.match(/^(T05|T06|T07)n0220/)
538
- fn = "#{$1}n0220_%03d.htm" % juan_no
539
- else
540
- fn = "#{@sutra_no}_%03d.htm" % juan_no
541
- end
542
- output_path = File.join(@out_folder, fn)
543
- fo = File.open(output_path, 'w')
544
- open = true
545
- s = <<eos
546
- <html>
547
- <head>
548
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
549
- <meta name="filename" content="#{fn}" />
550
- <title>#{@title}</title>
551
- </head>
552
- <body>
553
- <!--
554
- 來源 XML CBETA P5a: https://github.com/cbeta-org/xml-p5a.git
555
- 轉檔程式: https://rubygems.org/gems/cbeta #{Date.today}
556
- 說明文件: http://wiki.ddbc.edu.tw/pages/CBETA_XML_P5a_轉_HTML
557
- -->
558
- <div id='body'>
559
- eos
560
- fo.write(s)
561
- fo.write(buf)
562
- buf = ''
563
- elsif open
564
- fo.write(j + "\n</div><!-- end of div[@id='body'] -->\n")
565
- fo.write("<div id='back'>\n" + @back[juan_no] + "</div>\n")
566
- fo.write('</body></html>')
567
- fo.close
568
- else
543
+ elsif juan_no.nil?
569
544
  buf = j
545
+ else
546
+ write_juan(juan_no, buf+j)
570
547
  end
571
548
  }
572
549
  end
@@ -719,7 +696,13 @@ eos
719
696
 
720
697
  def read_mod_notes(doc)
721
698
  doc.xpath("//note[@type='mod']").each { |e|
722
- @mod_notes << e['n']
699
+ n = e['n']
700
+ @mod_notes << n
701
+
702
+ # 例 T01n0026_p0506b07, 原註標為 7, CBETA 修訂為 7a, 7b
703
+ n.match(/[a-z]$/) {
704
+ @mod_notes << n[0..-2]
705
+ }
723
706
  }
724
707
  end
725
708
 
@@ -732,6 +715,14 @@ eos
732
715
  @title = traverse(e, 'txt')
733
716
  @title = @title.split()[-1]
734
717
 
718
+ e = doc.at_xpath("//editionStmt/edition/date")
719
+ abort "找不到版本日期" if e.nil?
720
+ @edition_date = e.text.sub(/\$Date: (.*?) \$$/, '\1')
721
+
722
+ e = doc.at_xpath("//projectDesc/p[@lang='zh']")
723
+ abort "找不到貢獻者" if e.nil?
724
+ @contributors = e.text
725
+
735
726
  read_mod_notes(doc)
736
727
 
737
728
  root = doc.root()
@@ -754,5 +745,47 @@ eos
754
745
  }
755
746
  r
756
747
  end
748
+
749
+ def write_juan(juan_no, body)
750
+ if @sutra_no.match(/^(T05|T06|T07)n0220/)
751
+ fn = "#{$1}n0220_%03d.htm" % juan_no
752
+ else
753
+ fn = "#{@sutra_no}_%03d.htm" % juan_no
754
+ end
755
+
756
+ html = <<eos
757
+ <html>
758
+ <head>
759
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
760
+ <meta name="filename" content="#{fn}" />
761
+ <title>#{@title}</title>
762
+ </head>
763
+ <body>
764
+ <!--
765
+ 來源 XML CBETA P5a: https://github.com/cbeta-org/xml-p5a.git
766
+ 轉檔程式: https://rubygems.org/gems/cbeta #{Date.today}
767
+ 說明文件: http://wiki.ddbc.edu.tw/pages/CBETA_XML_P5a_轉_HTML
768
+ -->
769
+ <div id='body'>
770
+ eos
771
+ html += body + "\n</div><!-- end of div[@id='body'] -->\n"
772
+ html += "<div id='back'>\n" + @back[juan_no] + "</div>\n"
773
+ html += "<div id='cbeta-copyright'><p>\n"
774
+
775
+ orig = @cbeta.get_canon_nickname(@series)
776
+ v = @vol.sub(/^[A-Z]0*([^0].*)$/, '\1')
777
+ n = @sutra_no.sub(/^[A-Z]\d{2,3}n0*([^0].*)$/, '\1')
778
+ html += "【經文資訊】#{orig}第 #{v} 冊 No. #{n} #{@title}<br/>\n"
779
+ html += "【版本記錄】CBETA 電子佛典 版本日期:#{@edition_date}<br/>\n"
780
+ html += "【編輯說明】本資料庫由中華電子佛典協會(CBETA)依#{orig}所編輯<br/>\n"
781
+
782
+ html += "【原始資料】#{@contributors}<br/>\n"
783
+ html += "【其他事項】本資料庫可自由免費流通,詳細內容請參閱【中華電子佛典協會資料庫版權宣告】\n"
784
+ html += "</p></div><!-- end of cbeta-copyright -->\n"
785
+ html += '</body></html>'
786
+
787
+ output_path = File.join(@out_folder, fn)
788
+ File.write(output_path, html)
789
+ end
757
790
 
758
791
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cbeta
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ray Chou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-07 00:00:00.000000000 Z
11
+ date: 2015-10-08 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby gem for use Chinese Buddhist Text resources made by CBETA (http://www.cbeta.org).
14
14
  email: zhoubx@gmail.com