ipynbdiff 0.4.3 → 0.4.6
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 +4 -4
- data/lib/ipynb_symbol_map.rb +79 -16
- data/lib/output_transformer.rb +3 -7
- data/lib/transformer.rb +1 -0
- data/lib/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff3a6405d5c4034108fee997d678bee634a516f1d773b0aa9e8c7e4f50b7f28e
|
4
|
+
data.tar.gz: 3a80027ec239810e6b3daaa637fc338c5a34e3ae75c2f33043303eb6e16f6980
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d126961600c8073f2ead97b26d2879f987f15d6e3c74f0c9e2bd64c020bc8fd7963f4b50a69fd28c98728c645b595dbdda5883f4f56e18aa949df589e3787d0
|
7
|
+
data.tar.gz: 30e2c855b51de45ad2147419a455a4adc8f4f3cd30445f32a9667e3f17a072c3e59bcc8e603e34be2c7216e0b9671e2ed283e827780b4da25bff4be03f733ed6
|
data/lib/ipynb_symbol_map.rb
CHANGED
@@ -7,8 +7,8 @@ module IpynbDiff
|
|
7
7
|
# Creates a symbol map for a ipynb file (JSON format)
|
8
8
|
class IpynbSymbolMap
|
9
9
|
class << self
|
10
|
-
def parse(notebook)
|
11
|
-
IpynbSymbolMap.new(notebook).parse('')
|
10
|
+
def parse(notebook, objects_to_ignore = [])
|
11
|
+
IpynbSymbolMap.new(notebook, objects_to_ignore).parse('')
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -18,14 +18,17 @@ module IpynbDiff
|
|
18
18
|
|
19
19
|
VALUE_STOPPERS = [',', '[', ']', '{', '}', *WHITESPACE_CHARS].freeze
|
20
20
|
|
21
|
-
def initialize(notebook)
|
21
|
+
def initialize(notebook, objects_to_ignore = [])
|
22
22
|
@chars = notebook.chars
|
23
23
|
@current_line = 0
|
24
24
|
@char_idx = 0
|
25
25
|
@results = {}
|
26
|
+
@objects_to_ignore = objects_to_ignore
|
26
27
|
end
|
27
28
|
|
28
29
|
def parse(prefix = '.')
|
30
|
+
raise_if_file_ended
|
31
|
+
|
29
32
|
skip_whitespaces
|
30
33
|
|
31
34
|
if (c = current_char) == '"'
|
@@ -49,6 +52,8 @@ module IpynbDiff
|
|
49
52
|
current_should_be '['
|
50
53
|
|
51
54
|
loop do
|
55
|
+
raise_if_file_ended
|
56
|
+
|
52
57
|
break if skip_beginning(']')
|
53
58
|
|
54
59
|
new_prefix = "#{prefix}.#{i}"
|
@@ -67,13 +72,11 @@ module IpynbDiff
|
|
67
72
|
current_should_be '{'
|
68
73
|
|
69
74
|
loop do
|
70
|
-
|
75
|
+
raise_if_file_ended
|
71
76
|
|
72
|
-
|
73
|
-
|
74
|
-
new_prefix = "#{prefix}.#{prop_name}"
|
77
|
+
break if skip_beginning('}')
|
75
78
|
|
76
|
-
|
79
|
+
prop_name = parse_string(return_value: true)
|
77
80
|
|
78
81
|
next_and_skip_whitespaces
|
79
82
|
|
@@ -81,26 +84,34 @@ module IpynbDiff
|
|
81
84
|
|
82
85
|
next_and_skip_whitespaces
|
83
86
|
|
84
|
-
|
87
|
+
if @objects_to_ignore.include? prop_name
|
88
|
+
skip
|
89
|
+
else
|
90
|
+
new_prefix = "#{prefix}.#{prop_name}"
|
91
|
+
|
92
|
+
add_result(new_prefix, current_line)
|
93
|
+
|
94
|
+
parse(new_prefix)
|
95
|
+
end
|
85
96
|
end
|
86
97
|
end
|
87
98
|
|
88
|
-
def parse_string
|
99
|
+
def parse_string(return_value: false)
|
89
100
|
current_should_be '"'
|
90
101
|
init_idx = @char_idx
|
91
102
|
|
92
103
|
loop do
|
93
104
|
increment_char_index
|
94
105
|
|
95
|
-
|
106
|
+
raise_if_file_ended
|
96
107
|
|
97
|
-
if current_char == '"' &&
|
108
|
+
if current_char == '"' && !prev_backslash?
|
98
109
|
init_idx += 1
|
99
110
|
break
|
100
111
|
end
|
101
112
|
end
|
102
113
|
|
103
|
-
@chars[init_idx...@char_idx].join
|
114
|
+
@chars[init_idx...@char_idx].join if return_value
|
104
115
|
end
|
105
116
|
|
106
117
|
def add_result(key, line_number)
|
@@ -108,11 +119,12 @@ module IpynbDiff
|
|
108
119
|
end
|
109
120
|
|
110
121
|
def parse_value
|
111
|
-
increment_char_index until VALUE_STOPPERS.include?(current_char)
|
122
|
+
increment_char_index until raise_if_file_ended || VALUE_STOPPERS.include?(current_char)
|
112
123
|
end
|
113
124
|
|
114
125
|
def skip_whitespaces
|
115
126
|
while WHITESPACE_CHARS.include?(current_char)
|
127
|
+
raise_if_file_ended
|
116
128
|
check_for_new_line
|
117
129
|
increment_char_index
|
118
130
|
end
|
@@ -128,11 +140,13 @@ module IpynbDiff
|
|
128
140
|
end
|
129
141
|
|
130
142
|
def current_char
|
143
|
+
raise_if_file_ended
|
144
|
+
|
131
145
|
@chars[@char_idx]
|
132
146
|
end
|
133
147
|
|
134
|
-
def
|
135
|
-
@chars[@char_idx - 1]
|
148
|
+
def prev_backslash?
|
149
|
+
@chars[@char_idx - 1] == '\\' && @chars[@char_idx - 2] != '\\'
|
136
150
|
end
|
137
151
|
|
138
152
|
def current_should_be(another_char)
|
@@ -143,6 +157,55 @@ module IpynbDiff
|
|
143
157
|
@current_line += 1 if current_char == "\n"
|
144
158
|
end
|
145
159
|
|
160
|
+
def raise_if_file_ended
|
161
|
+
@char_idx >= @chars.size && raise(InvalidTokenError)
|
162
|
+
end
|
163
|
+
|
164
|
+
def skip
|
165
|
+
raise_if_file_ended
|
166
|
+
|
167
|
+
skip_whitespaces
|
168
|
+
|
169
|
+
if (c = current_char) == '"'
|
170
|
+
parse_string
|
171
|
+
elsif c == '['
|
172
|
+
skip_array
|
173
|
+
elsif c == '{'
|
174
|
+
skip_object
|
175
|
+
else
|
176
|
+
parse_value
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def skip_array
|
181
|
+
loop do
|
182
|
+
raise_if_file_ended
|
183
|
+
|
184
|
+
break if skip_beginning(']')
|
185
|
+
|
186
|
+
skip
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def skip_object
|
191
|
+
|
192
|
+
loop do
|
193
|
+
raise_if_file_ended
|
194
|
+
|
195
|
+
break if skip_beginning('}')
|
196
|
+
|
197
|
+
parse_string
|
198
|
+
|
199
|
+
next_and_skip_whitespaces
|
200
|
+
|
201
|
+
current_should_be ':'
|
202
|
+
|
203
|
+
next_and_skip_whitespaces
|
204
|
+
|
205
|
+
skip
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
146
209
|
def skip_beginning(closing_char)
|
147
210
|
|
148
211
|
check_for_new_line
|
data/lib/output_transformer.rb
CHANGED
@@ -52,24 +52,20 @@ module IpynbDiff
|
|
52
52
|
new_symbol = symbol_prefix / output_type
|
53
53
|
case output_type
|
54
54
|
when 'image/png', 'image/jpeg'
|
55
|
-
transform_image(output_type, output_element, new_symbol)
|
55
|
+
transform_image(output_type + ';base64', output_element, new_symbol)
|
56
56
|
when 'image/svg+xml'
|
57
|
-
|
57
|
+
transform_image(output_type + ';utf8', output_element, new_symbol)
|
58
58
|
when 'text/markdown', 'text/latex', 'text/plain', 'text'
|
59
59
|
transform_text(output_element, new_symbol)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
63
|
def transform_image(image_type, image_content, symbol)
|
64
|
-
_(symbol, " })")
|
65
|
-
end
|
66
|
-
|
67
|
-
def transform_svg(image_content, symbol)
|
68
64
|
lines = image_content.is_a?(Array) ? image_content : [image_content]
|
69
65
|
|
70
66
|
single_line = lines.map(&:strip).join.gsub(/\s+/, ' ')
|
71
67
|
|
72
|
-
_(symbol, " ")
|
73
69
|
end
|
74
70
|
|
75
71
|
def transform_text(text_content, symbol)
|
data/lib/transformer.rb
CHANGED
@@ -15,6 +15,7 @@ module IpynbDiff
|
|
15
15
|
include SymbolizedMarkdownHelper
|
16
16
|
|
17
17
|
@include_frontmatter = true
|
18
|
+
@objects_to_ignore = ['application/javascript', 'application/vnd.holoviews_load.v0+json']
|
18
19
|
|
19
20
|
def initialize(include_frontmatter: true)
|
20
21
|
@include_frontmatter = include_frontmatter
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ipynbdiff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eduardo Bonet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: diffy
|