jektex 0.0.4 → 0.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: db3eb57993f08e73ede3ba763410029942df4d4320c9d659c2b28fabd5a49f4e
4
- data.tar.gz: fd8756624b5ff039c66d0896c4c0316dfe4be10045ed412d80240ce17f2e98fd
3
+ metadata.gz: 290626aa91c28cc4961baf40ec00dde81928da68e0a923ee84999027e7f3c9b0
4
+ data.tar.gz: 4ec8d501a4ab6f1b068ec01bb21a7d84bd844a5bca7d105bdc0c9c6e2652eec8
5
5
  SHA512:
6
- metadata.gz: 6645b4a77ccfd8919db211dca542ef3a98ae1dfc9740c74580d74b62f5e1cbaea9ca07dabe14518c3b2cec2b68cfc3406cb5d1ec3a8c840e86b07302acaf7249
7
- data.tar.gz: 04b011d1f6e6a7dccc2de68f159ee74a0bdaf7944c7c39fb5d627942425c6665b98803abb601a696d50c1c6ac738cb629086c5149d1ffb8eec636e7e441c854b
6
+ metadata.gz: ccdddba235b4d0462ccb5e4d2ee4cbf5b97e9964c10fd0395e814635281563c6363a381422feeefdd9eb6a895877a47aba6fae95de36c98a6f710785ed18ba51
7
+ data.tar.gz: 4d0a8dad642c30c5f26ca5903d715e3728d918bb17fe1eaeaf3ce8ad814a25e9c50d0df15533522275665978971ee269164a2969cf73db9823b71b9ea29a7217
data/README.md CHANGED
@@ -13,7 +13,6 @@ Enjoy comfort of latex and markdown without cluttering your site with bloated ja
13
13
  - Does not interfere with Jekyll workflow and project structure
14
14
  - Marks invalid syntax in document
15
15
  - Prints location of invalid expression during rendering
16
- - Tags places within the rendered documents with syntax errors
17
16
  - Highly configurable but still having sensible defaults
18
17
 
19
18
  ## Usage
@@ -21,7 +20,6 @@ Enjoy comfort of latex and markdown without cluttering your site with bloated ja
21
20
  ### Notation
22
21
  **Inline formula**
23
22
  Put formula between two pairs of dolar signs (`$$`) inside of paragraph.
24
-
25
23
  ```latex
26
24
  Lorem ipsum dolor sit amet, consectetur $$e^{i\theta}=\cos(\theta)+i\sin(\theta)$$
27
25
  adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
@@ -44,40 +42,88 @@ display mode?
44
42
  This is how [kramdown](https://kramdown.gettalong.org/)(Jekyll's markdown parser) works
45
43
  so I decided to respect this convention. It makes this plugin more consistent and universal._
46
44
 
47
- ### Macros
48
- You can define global macros in your `_config.yml` file:
45
+ ### Config
46
+ Jektex si highly configurable from your `_config.yml` file
47
+
48
+ **Disabling cache**
49
+ You can disable caching with `disable_disk_cache = true` in `_config.yml`. Cache is
50
+ enabled by default. You can find more information on [Jekyll official website](https://jekyllrb.com/docs/configuration/options/).
49
51
 
52
+ **Setting cache location**
53
+ By default jektex cache will be saved in `.jekyll-cache` directory. This results in it's
54
+ deletion when you call `jekyll clean`. To prevent cache deletion or you just want to
55
+ change location of cache for another reason you can achieve that by specifying
56
+ `cache_dir` in `_config.yml`.
50
57
  ```yaml
51
- # Jektex macros
52
- jektex-macros:
53
- - ["\\Q", "\\mathbb{Q}"]
54
- - ["\\C", "\\mathbb{C}"]
58
+ # Jektex cache dir location
59
+ jektex:
60
+ cache_dir: ".jektex-cache"
55
61
  ```
56
62
 
57
- ### Cache control
63
+ **Ignore**
64
+ By default jektex tries to render LaTeX in all files not excluded by Jekyll. But
65
+ sometimes you get in situation when you do not want to render some files. For example
66
+ _RSS feed_ with excerpts containing LaTeX. As a solution jektex offers `ignore` option.
67
+ You can use conventional wild cards using `*`. For example:
68
+ ```yaml
69
+ # Jektex ignore files
70
+ jektex:
71
+ ignore: ["*.xml", "README.md", "_drafts/*" ]
72
+ ```
58
73
 
59
- **Clearing cache**
60
- To clear cached expressions you have to delete `.jektex-cache` directory in your
61
- project directory.
74
+ This example configuration ignores all `.xml` files, `README.md` and all files
75
+ in `_drafts` directory.
62
76
 
63
- **Disabling cache**
64
- You can disable caching with `disable_disk_cache = false` in `_config.yml`. Cache is
65
- enabled by default.
77
+ Another option for ignoring specific posts is setting `jektex` tag in front matter of
78
+ post to `false`. For example:
79
+ ```yaml
80
+ ---
81
+ title: "How Jektex works"
82
+ category: "Development"
83
+ jektex: false
84
+ layout: post
85
+ ---
86
+ ```
66
87
 
67
- **Setting cache location**
68
- By default jektex cache will be saved in `.jekyll-cache` directory. This results in its
69
- deletion when you call `jekyll clean`. To prevent cache deletion or you just want to
70
- change location of cache from another reason you can achieve that specifying
71
- `jektex_cache_dir` in `_config.yml`.
88
+ Setting `jektex` tag to `true` or not setting at all will result in jektex rendering LaTeX
89
+ expressions in that post.
90
+
91
+ **Macros**
92
+ You can define global macros like this:
93
+ ```yaml
94
+ # Jektex macros
95
+ jektex:
96
+ macros:
97
+ - ["\\Q", "\\mathbb{Q}"]
98
+ - ["\\C", "\\mathbb{C}"]
99
+ ```
100
+ And yes you have to escape backlash(`\`) with another backlash. This is caused by
101
+ [yaml definition](https://yaml.org/). YOU SHOULD ALWAYS delete jektex cache after changing
102
+ definition of a macro for change to take effect.
72
103
 
73
- For example: `jektex_cache_dir: ".jektex-cache"`
104
+ **Complete examples**
105
+ Recommended config:
106
+ ```yaml
107
+ jektex:
108
+ cache_dir: ".jektex-cache"
109
+ ignore: ["*.xml"]
110
+ macros:
111
+ - ["\\Q", "\\mathbb{Q}"]
112
+ - ["\\C", "\\mathbb{C}"]
113
+ ```
114
+ Having no configuration is equivalent to this:
115
+ ```yaml
116
+ jektex:
117
+ cache_dir: ".jekyll-cache"
118
+ ignore: []
119
+ macros: []
120
+ ```
74
121
 
75
122
  ## Installation
76
123
  This plugin is available as a [RubyGem](https://rubygems.org/gems/jektex).
77
124
 
78
125
  **Using bundler**
79
126
  Add `jektex` to your `Gemfile` like this:
80
-
81
127
  ```ruby
82
128
  group :jekyll_plugins do
83
129
  gem "jektex"
@@ -100,6 +146,9 @@ and do not forget to add `katex.min.css` to you html head:
100
146
  ```html
101
147
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.css" integrity="sha384-MlJdn/WNKDGXveldHDdyRP1R4CTHr3FeuDNfhsLPYrq2t0UBkUdK2jyTnXPEK1NQ" crossorigin="anonymous">
102
148
  ```
103
- It is much better practice to download **css** file and loaded as an asset from your server directly.
149
+ It is much better practice to download **css** file and load it as an asset from your server directly.
104
150
  You can find more information on [KaTeX's website](https://katex.org/docs/browser.html).
105
151
 
152
+ ## Contributions and bug reports
153
+ Feel free to repost any bugs or even make feature request in [issues on official repository](https://github.com/yagarea/jektex/issues).
154
+ I am opened for pull requests as well.
data/lib/jektex/jektex.rb CHANGED
@@ -8,16 +8,34 @@ DEFAULT_CACHE_DIR = ".jekyll-cache"
8
8
  CACHE_FILE = "jektex-cache.marshal"
9
9
  KATEX = ExecJS.compile(open(PATH_TO_JS).read)
10
10
  PARSE_ERROR_PLACEHOLDER = "<b style='color: red;'>PARSE ERROR</b>"
11
+ FRONT_MATTER_TAG = "jektex"
11
12
  $global_macros = Hash.new
12
13
  $count_newly_generated_expressions = 0
13
14
  $path_to_cache = File.join(DEFAULT_CACHE_DIR, CACHE_FILE)
14
15
  $cache = nil
15
16
  $disable_disk_cache = false
17
+ $ignored = Array.new
18
+
19
+ def is_ignored?(page)
20
+ for patern in $ignored
21
+ if File.fnmatch?(patern, page.relative_path, File::FNM_DOTMATCH) then
22
+ return true
23
+ end
24
+ end
25
+ return false
26
+ end
27
+
28
+ def render(page)
29
+ # check if document is not set to be ignored
30
+ if page.data == nil or is_ignored?(page) or page.data[FRONT_MATTER_TAG] == "false" then
31
+ return page.output
32
+ end
16
33
 
17
- def convert(page)
18
34
  # convert HTML entities back to characters
19
35
  post = HTMLEntities.new.decode(page.output.to_s)
36
+ # render inline expressions
20
37
  post = post.gsub(/(\\\()((.|\n)*?)(?<!\\)\\\)/) { |m| escape_method($1, $2, page.path) }
38
+ # render display expressions
21
39
  post = post.gsub(/(\\\[)((.|\n)*?)(?<!\\)\\\]/) { |m| escape_method($1, $2, page.path) }
22
40
  return post
23
41
  end
@@ -52,7 +70,7 @@ def escape_method( type, string, doc_path )
52
70
  rescue SystemExit, Interrupt
53
71
  # save cache to disk
54
72
  File.open($path_to_cache, "w"){|to_file| Marshal.dump($cache, to_file)}
55
- # this stops jekyll being immune to interupts and kill command
73
+ # this stops jekyll being immune to interrupts and kill command
56
74
  raise
57
75
  rescue Exception => e
58
76
  # catch parse error
@@ -77,44 +95,58 @@ def print_stats
77
95
  end
78
96
 
79
97
  Jekyll::Hooks.register :pages, :post_render do |page|
80
- page.output = convert(page)
98
+ page.output = render(page)
81
99
  end
82
100
 
83
101
  Jekyll::Hooks.register :documents, :post_render do |doc|
84
- doc.output = convert(doc)
102
+ doc.output = render(doc)
85
103
  end
86
104
 
87
105
  Jekyll::Hooks.register :site, :after_init do |site|
88
- # load macros from config file
89
- if site.config["jektex-macros"] != nil
90
- for macro_definition in site.config["jektex-macros"]
106
+ if site.config["jektex"] == nil then
107
+ # if no config is defined make empty one
108
+ config = Hash.new
109
+ else
110
+ # load jektex config from config file
111
+ config = site.config["jektex"]
112
+ end
113
+ # load macros
114
+ if config["macros"] != nil then
115
+ for macro_definition in config["macros"]
91
116
  $global_macros[macro_definition[0]] = macro_definition[1]
92
117
  end
93
118
  end
119
+
94
120
  # print macro information
95
- if $global_macros.size == 0
121
+ if $global_macros.size == 0 then
96
122
  puts " LaTeX: no macros loaded"
97
123
  else
98
124
  puts " LaTeX: " + $global_macros.size.to_s + " macro" +
99
125
  ($global_macros.size == 1 ? "" : "s") + " loaded"
100
126
  end
101
127
 
102
- # check if cache is disable in config
103
- if site.config["disable_disk_cache"] != nil
104
- $disable_disk_cache = site.config["disable_disk_cache"]
128
+ # check if there is defined custom cache location in config
129
+ if config["cache_dir"] != nil then
130
+ $path_to_cache = File.join(config["cache_dir"].to_s, CACHE_FILE)
105
131
  end
106
132
 
107
- # check if there is defined custom cache location in config
108
- if site.config["jektex_cache_dir"] != nil
109
- $path_to_cache = File.join(site.config["jektex_cache_dir"].to_s, CACHE_FILE)
133
+ # load list of ignored files
134
+ if config["ignore"] != nil then
135
+ $ignored = config["ignore"]
110
136
  end
111
137
 
112
138
  # load content of cache file if it exists
113
- if(File.exist?($path_to_cache))
139
+ if(File.exist?($path_to_cache)) then
114
140
  $cache = File.open($path_to_cache, "r"){|from_file| Marshal.load(from_file)}
115
141
  else
116
142
  $cache = Hash.new
117
143
  end
144
+
145
+ # check if cache is disable in config
146
+ if site.config["disable_disk_cache"] != nil then
147
+ $disable_disk_cache = site.config["disable_disk_cache"]
148
+ end
149
+
118
150
  end
119
151
 
120
152
  Jekyll::Hooks.register :site, :after_reset do
@@ -1,3 +1,3 @@
1
1
  module Jektex
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jektex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Černý
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-18 00:00:00.000000000 Z
11
+ date: 2022-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: execjs