fyodor 0.3.2 → 0.3.3

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: b25a6bf161f516497c5d250665582dc1f51b1ffbe324c86b84ecf37fb9f60d52
4
- data.tar.gz: 87a71fe8296a92cd30f69bf472a0d9953dc6ae17b2a66f06021b7397d8110f63
3
+ metadata.gz: 7fa1b1e78cc0ab15159e69a7f63c51ff94d549a618059395d29401ddc16ff45c
4
+ data.tar.gz: 325bfb536a54858e628a81094b707f7cd3f0be83d2cf613cf6b8b8de79b33015
5
5
  SHA512:
6
- metadata.gz: 0caea4ca106e2dd01470ae5bde25f7cd76f12b932d9693c1f6169b8655402073ad193ce2f5c334c7ee2183aa2e685ad9d9f9e3419deeea7cdf9a06a925266ce3
7
- data.tar.gz: 6f9303828a448bb10a2d3fbec48ef7ebe03c71c1a2a3b3e5a461f32793261a23dbd5f232b77c675e9638c7c7cca6ab084c1887b24876a7a2a746f12cdebbefae
6
+ metadata.gz: 4e5f8277ece0aa866131788f2702a1dc137cea14d86795e2c71c74947d9c532482b2bc0a89e34d7500af69a15642a774ce3a815882f835b4ce34cd155ec96af2
7
+ data.tar.gz: d8a7b83be1154a5385f8870e94f8973de8f8b744ffb09122d55dae9282b074ede788fba4ca1eccb9d1263786ad478c16d6d02a6bd1466e42aab603ed4fe22d53
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Fyodor
2
2
 
3
- Convert your Amazon Kindle highlights, notes and bookmarks into markdown files.
3
+ Convert your Amazon Kindle highlights, notes and bookmarks into markdown (or any format).
4
4
 
5
5
  ## What is Fyodor
6
6
 
@@ -17,9 +17,9 @@ To read more about the motivation and what problem it tries to solve, [check thi
17
17
  - Orders your entries by location/page on each book (the clippings file is ordered by time).
18
18
  - Easily configurable for your language, allowing you to get all features and beautiful output.
19
19
  - This software goes some length to be locale agnostic: basic parsing should work without configuration for any language. It should also work even if your clippings file has multiple locales.
20
- - Bookmarks are printed together and notes are formatted differently, for better visualization.
21
20
  - By default, output in a format that is clean and easy to edit/fiddle around: markdown.
22
- - Entirely customizable output, through templates, in the format you prefer.
21
+ - Bookmarks are placed together and notes are formatted differently, for better visualization.
22
+ - Entirely customizable output, in the format you prefer, through templates.
23
23
 
24
24
  This program is based on the clippings file generated by Kindle 2019, but should work with other models.
25
25
 
@@ -34,7 +34,7 @@ We are limited by the data Kindle makes available through `My Clippings.txt`. Th
34
34
 
35
35
  Install Ruby and run:
36
36
 
37
- ```
37
+ ```shell-session
38
38
  $ gem install fyodor
39
39
  ```
40
40
 
@@ -42,29 +42,29 @@ $ gem install fyodor
42
42
 
43
43
  Run:
44
44
 
45
- ```
45
+ ```shell-session
46
46
  $ gem update fyodor
47
47
  ```
48
48
 
49
49
  ## Configuration
50
50
 
51
- Fyodor has an optional configuration file, which is used for the following.
52
-
53
- ### Languages
54
-
55
- If your Kindle is not in English, you should tell Fyodor how some things are called by your `My Clippings.txt` (e.g. highlights, pages, etc). _Fyodor should still work without configuration, but you won't take advantage of many features, resulting in a dirtier output._
51
+ Fyodor reads an optional configuration file at `~/.config/fyodor/fyodor.toml` or `$XDG_CONFIG_HOME/fyodor/fyodor.toml`. This section describes the available parameters (none is required).
56
52
 
57
- 1. Download the sample config to `~/.config/fyodor/fyodor.toml` or `$XDG_CONFIG_HOME/fyodor/fyodor.toml`:
53
+ To download the [sample configuration](docs/fyodor.toml.sample):
58
54
 
59
- ```sh
55
+ ```shell-session
60
56
  $ curl https://raw.githubusercontent.com/rc2dev/fyodor/master/docs/fyodor.toml.sample --create-dirs -o ~/.config/fyodor/fyodor.toml
61
57
  ```
62
58
 
63
- 2. Open both the configuration and your `My Clippings.txt` in your preferred editor. Change the values in the `[parser]` section to mirror what you get in `My Clippings.txt`.
59
+ ### Languages
60
+
61
+ If your Kindle device is not set to English (US), you should tell Fyodor how some things are named on your `My Clippings.txt` (highlights, pages, etc). I went through some length to make Fyodor work regardless of this step. However, if you don't set this correctly, you won't take advantage of many features, resulting in a dirtier output.
62
+
63
+ Open both `fyodor.toml` and your `My Clippings.txt` in your preferred editor. Change the values in the `[parser]` section to mirror what you get in `My Clippings.txt`.
64
64
 
65
65
  For example, this is the configuration for Brazilian Portuguese:
66
66
 
67
- ```
67
+ ```toml
68
68
  [parser]
69
69
  highlight = "Seu destaque"
70
70
  note = "Sua nota"
@@ -77,35 +77,41 @@ time = "Adicionado:"
77
77
 
78
78
  ### Showing the time
79
79
 
80
- In the configuration file you can also set whether to print the time of each entry. On `[output]`, set `time` to `true` or `false`.
81
-
82
- ### Templating
83
-
84
- You may change the structure of the files output by Fyodor by providing your own template.
80
+ You can also set whether to print the time of each entry. Under `[output]`, set `time` to `true` or `false`:
85
81
 
86
- Simply place a ERB template at `~/.config/fyodor/template.erb` or `$XDG_CONFIG_HOME/fyodor/template.erb` and Fyodor will use it automatically.
87
-
88
- The default template can be found [here](share/template.erb). You can use any method or attribute available [on this class](lib/fyodor/output_generator.rb).
82
+ ```toml
83
+ [output]
84
+ time = true
85
+ ```
89
86
 
90
87
  ### Extension
91
88
 
92
- If you want to change the extension of the output files - typically after changing the template -, set `extension` on `fyodor.toml`. For example, to change it to HTML:
89
+ If you want to change the extension of the output files (typically after changing the template), set `extension` under `[output]`. For example, to change it to HTML:
93
90
 
94
91
  ```toml
95
92
  [output]
96
93
  extension = "html"
97
94
  ```
98
95
 
96
+ ## Templating
97
+
98
+ You may change the structure of the files output by Fyodor by providing your own template in any format you wish.
99
+
100
+ To do that, place a ERB template at `~/.config/fyodor/template.erb` or `$XDG_CONFIG_HOME/fyodor/template.erb` and Fyodor will use it automatically.
101
+
102
+ The default template can be found [here](share/template.erb). You can use any method or attribute available [on this class](lib/fyodor/output_generator.rb).
103
+
104
+
99
105
  ## Usage
100
106
 
101
- ```
107
+ ```shell-session
102
108
  $ fyodor CLIPPINGS_FILE [OUTPUT_DIR]
103
109
  ```
104
110
 
105
111
  Where:
106
112
 
107
113
  - `CLIPPINGS_FILE` is the path for `My Clippings.txt`.
108
- - `OUTPUT_DIR` is the directory to write the markdown files. If none is supplied, this will be `fyodor_output` under the current directory.
114
+ - `OUTPUT_DIR` is the directory to write the output files. If none is supplied, this will be `fyodor_output` under the current directory.
109
115
 
110
116
  ## PSA: HTML to markdown
111
117
 
data/lib/fyodor/book.rb CHANGED
@@ -15,7 +15,7 @@ module Fyodor
15
15
 
16
16
  @title = title
17
17
  @author = author
18
- @entries = SortedSet.new
18
+ @entries = Set.new
19
19
  @rej_dup = 0
20
20
  end
21
21
 
@@ -4,11 +4,9 @@ require "toml"
4
4
 
5
5
  module Fyodor
6
6
  class ConfigGetter
7
- CONFIG_NAME = "fyodor.toml"
8
- TEMPLATE_NAME = "template.erb"
9
7
  DEFAULT_TEMPLATE_PATH = File.dirname(__FILE__) + "/../../share/template.erb"
10
8
 
11
- DEFAULTS = {
9
+ DEFAULT_CONFIG = {
12
10
  "parser" => {
13
11
  "highlight" => "Your Highlight",
14
12
  "note" => "Your Note",
@@ -25,60 +23,48 @@ module Fyodor
25
23
  }
26
24
 
27
25
  def config
28
- @config ||= get_config
29
- end
30
-
31
-
32
- private
26
+ return @config if defined?(@config)
33
27
 
34
- def get_config
35
28
  Hash.include CoreExtensions::Hash::Merging
36
-
37
- @config_path = get_path(CONFIG_NAME)
38
- print_config_path
39
- user_config = @config_path.nil? ? {} : TOML.load_file(@config_path)
40
-
41
- config = DEFAULTS.deep_merge(user_config)
29
+ config = DEFAULT_CONFIG.deep_merge(user_config)
42
30
  config["output"]["template"] = template
43
31
 
44
- config
32
+ @config = config
45
33
  end
46
34
 
47
- def get_path(name)
48
- possible_dirs.each do |d|
49
- path = d + name
50
- return path if path.exist?
51
- end
52
35
 
53
- return nil
36
+ private
37
+
38
+ def config_dir
39
+ @config_dir ||= Pathname.new(ENV["XDG_CONFIG_HOME"] || "~/.config").expand_path + "fyodor"
54
40
  end
55
41
 
56
- def possible_dirs
57
- return @possible_dirs unless @possible_dirs.nil?
42
+ def user_config_path
43
+ config_dir + "fyodor.toml"
44
+ end
58
45
 
59
- @possible_dirs = []
60
- @possible_dirs << Pathname.new(ENV["XDG_CONFIG_HOME"]) + "fyodor" unless ENV["XDG_CONFIG_HOME"].nil?
61
- @possible_dirs << Pathname.new("~/.config/fyodor").expand_path
46
+ def user_template_path
47
+ config_dir + "template.erb"
62
48
  end
63
49
 
64
- def print_config_path
65
- if @config_path.nil?
66
- puts "No config found: using defaults.\n"
67
- else
68
- puts "Using config at #{@config_path}.\n"
50
+ def user_config
51
+ if user_config_path.exist?
52
+ puts "Using config at #{user_config_path}.\n"
53
+ return TOML.load_file(user_config_path)
69
54
  end
55
+
56
+ puts "No config found: using defaults.\n"
57
+ {}
70
58
  end
71
59
 
72
60
  def template
73
- template_path = get_path(TEMPLATE_NAME) || DEFAULT_TEMPLATE_PATH
74
-
75
- if template_path == DEFAULT_TEMPLATE_PATH
76
- puts "No template found: using default.\n\n"
77
- else
78
- puts "Using template at #{template_path}.\n\n"
61
+ if user_template_path.exist?
62
+ puts "Using custom template at #{user_template_path}.\n\n"
63
+ return File.read(user_template_path)
79
64
  end
80
65
 
81
- File.read(template_path)
66
+ puts "No custom template found: using default.\n\n"
67
+ File.read(DEFAULT_TEMPLATE_PATH)
82
68
  end
83
69
  end
84
70
  end
data/lib/fyodor/entry.rb CHANGED
@@ -48,20 +48,18 @@ module Fyodor
48
48
 
49
49
  # Override this method to use a SortedSet.
50
50
  def <=>(other)
51
- return @page_start <=> other.page_start if @loc_start == 0
51
+ return (@page_start <=> other.page_start) if @loc_start == 0
52
52
 
53
53
  @loc_start <=> other.loc_start
54
54
  end
55
55
 
56
56
  # Override the following methods for deduplication.
57
57
  def ==(other)
58
- return false if @type != other.type || @text != other.text
58
+ return false if (@type != other.type || @text != other.text)
59
59
 
60
- if desc_parsed? && other.desc_parsed?
61
- @loc == other.loc && @page == other.page
62
- else
63
- @desc == other.desc
64
- end
60
+ return (@loc == other.loc && @page == other.page) if desc_parsed? && other.desc_parsed?
61
+
62
+ @desc == other.desc
65
63
  end
66
64
 
67
65
  alias eql? ==
@@ -27,7 +27,7 @@ module Fyodor
27
27
 
28
28
  def render_entries(entries)
29
29
  output = ""
30
- entries.each do |entry|
30
+ entries.sort.each do |entry|
31
31
  output += "- #{item_text(entry)}\n\n"
32
32
  output += " #{item_desc(entry)}\n\n" unless item_desc(entry).empty?
33
33
  end
@@ -27,7 +27,7 @@ module Fyodor
27
27
 
28
28
  i = 2
29
29
  while(path.exist?)
30
- path = @output_dir + "${basename - #{i}.#{extension}"
30
+ path = @output_dir + "#{basename} - #{i}.#{extension}"
31
31
  i += 1
32
32
  end
33
33
 
@@ -1,3 +1,3 @@
1
1
  module Fyodor
2
- VERSION = "0.3.2".freeze
2
+ VERSION = "0.3.3".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fyodor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rafael Cavalcanti
@@ -38,7 +38,7 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.0'
41
- description: Parse Kindle clippings into markdown files
41
+ description: Parse Kindle clippings into markdown (or any format)
42
42
  email: dev@rafaelc.org
43
43
  executables:
44
44
  - fyodor
@@ -78,14 +78,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
78
  version: '2.5'
79
79
  - - "<"
80
80
  - !ruby/object:Gem::Version
81
- version: '3'
81
+ version: '4'
82
82
  required_rubygems_version: !ruby/object:Gem::Requirement
83
83
  requirements:
84
84
  - - ">="
85
85
  - !ruby/object:Gem::Version
86
86
  version: '0'
87
87
  requirements: []
88
- rubygems_version: 3.1.2
88
+ rubygems_version: 3.2.3
89
89
  signing_key:
90
90
  specification_version: 4
91
91
  summary: Kindle clippings parser