jekyll-zettel 0.6.10 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80c15ccd85f0ce14846f04fab4b2b920dc94b2fae988de1ae795e5faac987c80
4
- data.tar.gz: d358e7f2535c707f154ca46964afc366bdceb8aea3867a7c2b9df27d6edef370
3
+ metadata.gz: 6dc8ae8e1d8e9f8b35d24f2a711c77e1cac2bf42a8a7b3dd33d363a23fee5518
4
+ data.tar.gz: 79ef605ddec8abf5b96258b743f5c15772ffcf4c029d32d67dd45c654442fe1f
5
5
  SHA512:
6
- metadata.gz: bac8b0c9347dd1c8a44694602936dc0aa3a7d5706f121aa4d3ce6861f5cd83063086e23e4e8aabbb55fc62944ba451121832080ae8b0cf157054c0d69e70f7e3
7
- data.tar.gz: 200801da51afae64af29e3a00bd424aeb5f8ab71f67389480552f41d52868c9d674d5aa0386f14952f05e1cc27d8ee2b283b8b7328c9e7c94392a2c917fd6e3c
6
+ metadata.gz: 49dfaef4d13597586bd7c198440e2bf81de9beecf9820b75321925fac61b2dd2390546f4e62510e94de8831eff84402c352e347e14fdf58f742b9ec83b36af9a
7
+ data.tar.gz: 41b2e42ac0ab78a5f8b28f3261aaa502e3d2fd42ddbd22e1b7fdbe0a80ef04600f6ffa022e0fb274d7af8725b6ef65b545277915d59ed80559156606429dae8c
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
1
  ## 0.1.0
2
2
 
3
3
  - Initial Import
4
+
5
+ ## 0.7.x
6
+
7
+ - Added inline citations
8
+
9
+ ### 0.7.1
10
+
11
+ - Changed inline citation regex to be compatible with pandoc [@<key>…]
12
+ - Emit warning when no reference for given _cite-key_ is found
13
+
14
+ ### 0.7.2
15
+
16
+ - Objektkatalog aliases.json mit Mapping von Tag Klarnamen und Alternativen wird jetzt generiert
17
+ - Log-Level beim Serialisieren der Objektkataloge auf debug gestellt
18
+ - Jetzt werden auch Links auf Keywords erkannt und automatisch mit der jeweiligen Glosse verlinkt
19
+ -
@@ -31,4 +31,5 @@ Gem::Specification.new do |spec|
31
31
  spec.add_runtime_dependency 'csl-styles', '>= 2.0', '< 3.0'
32
32
  spec.add_runtime_dependency 'fileutils', '>= 1.4', '< 2.0'
33
33
  spec.add_runtime_dependency 'jekyll', '>= 3.8', '< 5.0'
34
+ spec.add_runtime_dependency 'kramdown', '>=2.0', '< 3.0'
34
35
  end
@@ -0,0 +1,125 @@
1
+ module Kramdown
2
+ module Parser
3
+ # Kramdown Parser mit inline Zitationen
4
+ class Citedown < Kramdown
5
+
6
+ def initialize(source, options)
7
+ super
8
+ site = Jekyll.sites[0]
9
+
10
+ @citeproc = site.config['citeproc']
11
+ @references = site.data['references']
12
+ @keywords = site.data['aliases']
13
+ @zettel = site.data['zettelkasten']
14
+
15
+ @span_parsers.unshift(:citation, :keyword)
16
+
17
+ # So geht’s mit <i>, <b>, <em> und <strong> weiter
18
+ # @span_parsers.delete(:emphasis)
19
+ end
20
+
21
+ CITATION = /\[@([\w,:]+)(;\s*(.*))?\]/.freeze
22
+
23
+ def parse_citation
24
+ start_line_number = @src.current_line_number
25
+ @src.pos += @src.matched_size
26
+
27
+ cite_key = @src[1]
28
+ note = @src[3]
29
+
30
+ if @references.key?(cite_key)
31
+ add_citation(cite_key, note, start_line_number)
32
+ else
33
+ log_warning('cite-key', cite_key)
34
+ end
35
+ end
36
+
37
+ def add_citation(cite_key, note, start_line_number)
38
+ citation = @citeproc.render :citation, id: cite_key, locator: note, label: :note
39
+ attributes = {
40
+ 'href' => "/zettel/#{@references[cite_key]['id']}/",
41
+ 'title' => @zettel[@references[cite_key]['id']]['title'],
42
+ 'class' => 'citation'
43
+ }
44
+ link = Element.new(:a, nil, attributes, location: start_line_number)
45
+
46
+ link.children << Element.new(:raw, "<sup>#{citation}</sup>")
47
+ @tree.children << link
48
+ end
49
+
50
+ define_parser(:citation, CITATION, '\[@')
51
+
52
+ KEYWORD = /\[#([\w]+)\]/.freeze
53
+
54
+ def parse_keyword
55
+ start_line_number = @src.current_line_number
56
+ @src.pos += @src.matched_size
57
+
58
+ keyword = @src[1]
59
+ if @keywords.key?(keyword)
60
+ add_keyword(keyword, start_line_number)
61
+ else
62
+ log_warning('keyword', keyword)
63
+ end
64
+ end
65
+
66
+ def add_keyword(keyword, start_line_number)
67
+ attributes = {
68
+ 'href' => "/glosse/#{@keywords[keyword]['slug']}/",
69
+ 'title' => @keywords[keyword]['tag'],
70
+ 'class' => 'keyword'
71
+ }
72
+ link = Element.new(:a, nil, attributes, location: start_line_number)
73
+
74
+ link.children << Element.new(:raw, keyword)
75
+ @tree.children << link
76
+ end
77
+
78
+ define_parser(:keyword, KEYWORD, '\[#')
79
+
80
+ def log_warning(catalog, entry)
81
+ Jekyll.logger.warn 'Zettel:', "Missing entry for #{catalog} `#{entry}`"
82
+ @tree.children << Element.new(:raw, "<span class=\"error\">Missing entry for #{catalog} `#{entry}`</span>")
83
+ end
84
+
85
+ end
86
+ end
87
+ end
88
+ # options => {
89
+ # :template => "",
90
+ # :auto_ids => true,
91
+ # :auto_id_stripping => false,
92
+ # :auto_id_prefix => "",
93
+ # :transliterated_header_ids => false,
94
+ # :parse_block_html => true,
95
+ # :parse_span_html => true,
96
+ # :html_to_native => false,
97
+ # :link_defs => {},
98
+ # :footnote_nr => 1,
99
+ # :entity_output => :as_char,
100
+ # :toc_levels => [1, 2, 3, 4, 5, 6],
101
+ # :line_width => 72,
102
+ # :latex_headers => ["section", "subsection", "subsubsection", "paragraph", "subparagraph", "subparagraph"],
103
+ # :smart_quotes => ["lsquo", "rsquo", "ldquo", "rdquo"],
104
+ # :typographic_symbols => {},
105
+ # :remove_block_html_tags => true,
106
+ # :remove_span_html_tags => false,
107
+ # :header_offset => 0,
108
+ # :syntax_highlighter => :rouge,
109
+ # :syntax_highlighter_opts => {
110
+ # :default_lang => "plaintext",
111
+ # :guess_lang => true
112
+ # },
113
+ # :math_engine => :mathjax,
114
+ # :math_engine_opts => {},
115
+ # :footnote_backlink => "▲",
116
+ # :footnote_backlink_inline => false,
117
+ # :footnote_prefix => "",
118
+ # :remove_line_breaks_for_cjk => false,
119
+ # :forbidden_inline_options => [:template],
120
+ # :input => "Citedown",
121
+ # :hard_wrap => false,
122
+ # :guess_lang => true,
123
+ # :show_warnings => false,
124
+ # :coderay => {}
125
+ # }
@@ -4,9 +4,10 @@ module Jekyll
4
4
  class Reference < Liquid::Tag
5
5
 
6
6
  def render(context)
7
- return unless context.registers[:page].key?('citekey')
7
+ doc = context.registers[:page]
8
+ return unless doc.key?('reference') && doc['reference'].key?('citation-key')
8
9
 
9
- context.registers[:site].config['citeproc'].render :bibliography, id: context.registers[:page]['citekey']
10
+ context.registers[:site].config['citeproc'].render :bibliography, id: doc['reference']['citation-key']
10
11
  end
11
12
  end
12
13
  end
@@ -42,13 +42,29 @@ module Jekyll
42
42
  end
43
43
 
44
44
  def register_reference(doc, file)
45
- if doc.data['reference'].include?('id')
46
- @site.data['references'][doc.data['reference']['id']] = doc.data['reference']
45
+ if doc.data['reference'].include?('citation-key') && doc.data['reference'].include?('id')
46
+ #
47
+ # Citeproc erwartet sich eine id, die dem citation-key entspricht,
48
+ # in den References (references.json) brauche ich jedoch die id des
49
+ # Zettels, um in diversen Anwendungen darauf referenzieren zu können.
50
+ # Also wird die id des Zettels zwischengespeichert und für die
51
+ # Registrierung bei Citeproc durch den citation-key ersetzt.
52
+ #
53
+ # ACHTUNG!
54
+ # Beim Übernehmen einer Reference aus Citavi muss die id manuell auf
55
+ # die id des Zettels gesetzt werden!
56
+ #
57
+ # store
58
+ id = doc.data['reference']['id']
59
+ @site.data['references'][doc.data['reference']['citation-key']] = doc.data['reference']
60
+ # set id for Citeproc and register Item
61
+ doc.data['reference']['id'] = doc.data['reference']['citation-key']
47
62
  @site.config['citeproc'].register doc.data['reference']
48
- doc.data['citekey'] = doc.data['reference']['id']
63
+ # restore
64
+ doc.data['reference']['id'] = id
49
65
  else
50
- Jekyll.logger.warn LOG_KEY, 'missing property @id'
51
- Jekyll.logger.warn '', "./#{file}"
66
+ Jekyll.logger.warn LOG_KEY, 'missing property @citation-key'
67
+ Jekyll.logger.warn '', file
52
68
  end
53
69
  end
54
70
 
@@ -10,17 +10,26 @@ module Jekyll
10
10
 
11
11
  def generate(site)
12
12
  @site = site
13
+
14
+ @site.data['aliases'] = {}
13
15
  @site.data['tags'] = {}
14
16
  @site.data['tag2glosse'] = {}
15
17
 
16
- site.pages.each do |page|
18
+ register
19
+
20
+ write_catalog 'aliases'
21
+ write_catalog 'tags'
22
+ write_catalog 'tag2glosse'
23
+ end
24
+
25
+ def register
26
+ @site.pages.each do |page|
17
27
  next unless SLUG_FORMAT.match?(page.path.to_s)
18
28
 
19
29
  register_tag(page)
30
+ register_tags(page)
31
+ register_aliases(page)
20
32
  end
21
-
22
- write_catalog 'tags'
23
- write_catalog 'tag2glosse'
24
33
  end
25
34
 
26
35
  def register_tag(doc)
@@ -33,17 +42,33 @@ module Jekyll
33
42
  'tags' => doc.data['tags']
34
43
  }
35
44
  doc.data['slug'] = parts[:slug]
36
- register_tags(doc)
45
+ end
46
+
47
+ def register_aliases(doc)
48
+ @site.data['aliases'][doc.data['tag']] = {
49
+ 'slug' => doc.data['slug'],
50
+ 'tag' => doc.data['tag'],
51
+ 'description' => doc.data['description']
52
+ }
53
+ return unless doc.data.key?('aliases')
54
+
55
+ doc.data['aliases'].each do |item|
56
+ @site.data['aliases'][item] = {
57
+ 'slug' => doc.data['slug'],
58
+ 'tag' => doc.data['tag'],
59
+ 'description' => doc.data['description']
60
+ }
61
+ end
37
62
  end
38
63
 
39
64
  def register_tags(doc)
40
65
  return unless doc.data.key?('tags')
41
66
 
42
- doc.data['tags'].each { |tag|
67
+ doc.data['tags'].each do |tag|
43
68
  @site.data['tag2glosse'][tag] = [] unless @site.data['tag2glosse'].key?(tag)
44
69
 
45
70
  @site.data['tag2glosse'][tag] << doc.data['slug']
46
- }
71
+ end
47
72
  end
48
73
  end
49
74
  end
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module Zettel
3
- VERSION = '0.6.10'.freeze
3
+ VERSION = '0.7.2'.freeze
4
4
  end
5
5
  end
data/lib/jekyll/zettel.rb CHANGED
@@ -3,6 +3,7 @@ require 'securerandom'
3
3
  require 'fileutils'
4
4
  require 'citeproc'
5
5
  require 'csl/styles'
6
+ require 'kramdown/parser/kramdown'
6
7
 
7
8
  module Jekyll
8
9
  # Jekyll zettel to your service
@@ -15,7 +16,7 @@ module Jekyll
15
16
  class Error < StandardError; end
16
17
 
17
18
  def write_catalog(object)
18
- Jekyll.logger.info LOG_KEY, "Created references in `#{@site.in_dest_dir('.objects', "#{object}.json")}`"
19
+ Jekyll.logger.debug LOG_KEY, "Created references in `#{@site.in_dest_dir('.objects', "#{object}.json")}`"
19
20
 
20
21
  page = Jekyll::PageWithoutAFile.new(@site, @site.source, '.objects', "#{object}.json").tap do |file|
21
22
  file.content = JSON.pretty_generate(@site.data[object.to_s])
@@ -89,6 +90,7 @@ end
89
90
  require 'jekyll/commands/scaffold'
90
91
  require 'jekyll/zettel/akteur'
91
92
  require 'jekyll/zettel/blatt'
93
+ require 'jekyll/zettel/citedown'
92
94
  require 'jekyll/zettel/globals'
93
95
  require 'jekyll/zettel/glosse'
94
96
  require 'jekyll/zettel/reference'
@@ -98,3 +100,4 @@ require 'jekyll/zettel/timeline'
98
100
  require 'jekyll/zettel/zeitleiste'
99
101
  require 'jekyll/zettel/zettel'
100
102
  require 'jekyll/zettel/zettelkasten'
103
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-zettel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.10
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Gerzabek
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-09 00:00:00.000000000 Z
11
+ date: 2022-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: citeproc-ruby
@@ -90,6 +90,26 @@ dependencies:
90
90
  - - "<"
91
91
  - !ruby/object:Gem::Version
92
92
  version: '5.0'
93
+ - !ruby/object:Gem::Dependency
94
+ name: kramdown
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '2.0'
100
+ - - "<"
101
+ - !ruby/object:Gem::Version
102
+ version: '3.0'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '2.0'
110
+ - - "<"
111
+ - !ruby/object:Gem::Version
112
+ version: '3.0'
93
113
  description: Coming soon…
94
114
  email:
95
115
  - michael.gerzabek@gmail.com
@@ -115,6 +135,7 @@ files:
115
135
  - lib/jekyll/zettel.rb
116
136
  - lib/jekyll/zettel/akteur.rb
117
137
  - lib/jekyll/zettel/blatt.rb
138
+ - lib/jekyll/zettel/citedown.rb
118
139
  - lib/jekyll/zettel/globals.rb
119
140
  - lib/jekyll/zettel/glosse.rb
120
141
  - lib/jekyll/zettel/reference.rb