ox 2.4.0 → 2.4.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ox might be problematic. Click here for more details.

@@ -6,6 +6,8 @@
6
6
  #ifndef __OX_SAX_H__
7
7
  #define __OX_SAX_H__
8
8
 
9
+ #include <stdbool.h>
10
+
9
11
  #include "sax_buf.h"
10
12
  #include "sax_has.h"
11
13
  #include "sax_stack.h"
@@ -18,6 +20,7 @@ typedef struct _SaxOptions {
18
20
  int smart;
19
21
  SkipMode skip;
20
22
  char strip_ns[64];
23
+ Hints hints;
21
24
  } *SaxOptions;
22
25
 
23
26
  typedef struct _SaxDrive {
@@ -27,8 +30,9 @@ typedef struct _SaxDrive {
27
30
  VALUE value_obj;
28
31
  struct _SaxOptions options;
29
32
  int err;
33
+ int blocked;
34
+ bool abort;
30
35
  struct _Has has;
31
- Hints hints;
32
36
  #if HAS_ENCODING_SUPPORT
33
37
  rb_encoding *encoding;
34
38
  #elif HAS_PRIVATE_ENCODING
@@ -5,6 +5,9 @@
5
5
 
6
6
  #include <string.h>
7
7
  #include <stdio.h>
8
+ #include <stdbool.h>
9
+
10
+ #include <ruby.h>
8
11
 
9
12
  #include "sax_hint.h"
10
13
 
@@ -26,127 +29,127 @@ static const char *table_0[] = { "table", 0 };
26
29
  static const char *tr_0[] = { "tr", 0 };
27
30
 
28
31
  static struct _Hint html_hint_array[] = {
29
- { "a", 0, 0, 0, 0 },
30
- { "abbr", 0, 0, 0, 0 },
31
- { "acronym", 0, 0, 0, 0 },
32
- { "address", 0, 0, 0, 0 },
33
- { "applet", 0, 0, 0, 0 },
34
- { "area", 1, 0, 0, map_0 },
35
- { "article", 0, 0, 0, 0 },
36
- { "aside", 0, 0, 0, 0 },
37
- { "audio", 0, 0, 0, 0 },
38
- { "b", 0, 0, 0, 0 },
39
- { "base", 1, 0, 0, head_0 },
40
- { "basefont", 1, 0, 0, head_0 },
41
- { "bdi", 0, 0, 0, 0 },
42
- { "bdo", 0, 1, 0, 0 },
43
- { "big", 0, 0, 0, 0 },
44
- { "blockquote", 0, 0, 0, 0 },
45
- { "body", 0, 0, 0, html_0 },
46
- { "br", 1, 0, 0, 0 },
47
- { "button", 0, 0, 0, 0 },
48
- { "canvas", 0, 0, 0, 0 },
49
- { "caption", 0, 0, 0, table_0 },
50
- { "center", 0, 0, 0, 0 },
51
- { "cite", 0, 0, 0, 0 },
52
- { "code", 0, 0, 0, 0 },
53
- { "col", 1, 0, 0, colgroup_0 },
54
- { "colgroup", 0, 0, 0, 0 },
55
- { "command", 1, 0, 0, 0 },
56
- { "datalist", 0, 0, 0, 0 },
57
- { "dd", 0, 0, 0, dl_0 },
58
- { "del", 0, 0, 0, 0 },
59
- { "details", 0, 0, 0, 0 },
60
- { "dfn", 0, 0, 0, 0 },
61
- { "dialog", 0, 0, 0, dt_th_0 },
62
- { "dir", 0, 0, 0, 0 },
63
- { "div", 0, 1, 0, 0 },
64
- { "dl", 0, 0, 0, 0 },
65
- { "dt", 0, 1, 0, dl_0 },
66
- { "em", 0, 0, 0, 0 },
67
- { "embed", 1, 0, 0, 0 },
68
- { "fieldset", 0, 0, 0, 0 },
69
- { "figcaption", 0, 0, 0, figure_0 },
70
- { "figure", 0, 0, 0, 0 },
71
- { "font", 0, 1, 0, 0 },
72
- { "footer", 0, 0, 0, 0 },
73
- { "form", 0, 0, 0, 0 },
74
- { "frame", 1, 0, 0, frameset_0 },
75
- { "frameset", 0, 0, 0, 0 },
76
- { "h1", 0, 0, 0, 0 },
77
- { "h2", 0, 0, 0, 0 },
78
- { "h3", 0, 0, 0, 0 },
79
- { "h4", 0, 0, 0, 0 },
80
- { "h5", 0, 0, 0, 0 },
81
- { "h6", 0, 0, 0, 0 },
82
- { "head", 0, 0, 0, html_0 },
83
- { "header", 0, 0, 0, 0 },
84
- { "hgroup", 0, 0, 0, 0 },
85
- { "hr", 1, 0, 0, 0 },
86
- { "html", 0, 0, 0, 0 },
87
- { "i", 0, 0, 0, 0 },
88
- { "iframe", 1, 0, 0, 0 },
89
- { "img", 1, 0, 0, 0 },
90
- { "input", 1, 0, 0, 0 }, // somewhere under a form_0
91
- { "ins", 0, 0, 0, 0 },
92
- { "kbd", 0, 0, 0, 0 },
93
- { "keygen", 1, 0, 0, 0 },
94
- { "label", 0, 0, 0, 0 }, // somewhere under a form_0
95
- { "legend", 0, 0, 0, fieldset_0 },
96
- { "li", 0, 0, 0, ol_ul_menu_0 },
97
- { "link", 1, 0, 0, head_0 },
98
- { "map", 0, 0, 0, 0 },
99
- { "mark", 0, 0, 0, 0 },
100
- { "menu", 0, 0, 0, 0 },
101
- { "meta", 1, 0, 0, head_0 },
102
- { "meter", 0, 0, 0, 0 },
103
- { "nav", 0, 0, 0, 0 },
104
- { "noframes", 0, 0, 0, 0 },
105
- { "noscript", 0, 0, 0, 0 },
106
- { "object", 0, 0, 0, 0 },
107
- { "ol", 0, 1, 0, 0 },
108
- { "optgroup", 0, 0, 0, 0 },
109
- { "option", 0, 0, 0, optgroup_select_datalist_0 },
110
- { "output", 0, 0, 0, 0 },
111
- { "p", 0, 0, 0, 0 },
112
- { "param", 1, 0, 0, 0 },
113
- { "pre", 0, 0, 0, 0 },
114
- { "progress", 0, 0, 0, 0 },
115
- { "q", 0, 0, 0, 0 },
116
- { "rp", 0, 0, 0, ruby_0 },
117
- { "rt", 0, 0, 0, ruby_0 },
118
- { "ruby", 0, 0, 0, 0 },
119
- { "s", 0, 0, 0, 0 },
120
- { "samp", 0, 0, 0, 0 },
121
- { "script", 0, 0, 1, 0 },
122
- { "section", 0, 1, 0, 0 },
123
- { "select", 0, 0, 0, 0 },
124
- { "small", 0, 0, 0, 0 },
125
- { "source", 0, 0, 0, audio_video_0 },
126
- { "span", 0, 1, 0, 0 },
127
- { "strike", 0, 0, 0, 0 },
128
- { "strong", 0, 0, 0, 0 },
129
- { "style", 0, 0, 0, 0 },
130
- { "sub", 0, 0, 0, 0 },
131
- { "summary", 0, 0, 0, details_0 },
132
- { "sup", 0, 0, 0, 0 },
133
- { "table", 0, 0, 0, 0 },
134
- { "tbody", 0, 0, 0, table_0 },
135
- { "td", 0, 0, 0, tr_0 },
136
- { "textarea", 0, 0, 0, 0 },
137
- { "tfoot", 0, 0, 0, table_0 },
138
- { "th", 0, 0, 0, tr_0 },
139
- { "thead", 0, 0, 0, table_0 },
140
- { "time", 0, 0, 0, 0 },
141
- { "title", 0, 0, 0, head_0 },
142
- { "tr", 0, 0, 0, table_0 },
143
- { "track", 1, 0, 0, audio_video_0 },
144
- { "tt", 0, 0, 0, 0 },
145
- { "u", 0, 0, 0, 0 },
146
- { "ul", 0, 0, 0, 0 },
147
- { "var", 0, 0, 0, 0 },
148
- { "video", 0, 0, 0, 0 },
149
- { "wbr", 1, 0, 0, 0 },
32
+ { "a", false, false, false, ActiveOverlay, NULL },
33
+ { "abbr", false, false, false, ActiveOverlay, NULL },
34
+ { "acronym", false, false, false, ActiveOverlay, NULL },
35
+ { "address", false, false, false, ActiveOverlay, NULL },
36
+ { "applet", false, false, false, ActiveOverlay, NULL },
37
+ { "area", true, false, false, ActiveOverlay, map_0 },
38
+ { "article", false, false, false, ActiveOverlay, NULL },
39
+ { "aside", false, false, false, ActiveOverlay, NULL },
40
+ { "audio", false, false, false, ActiveOverlay, NULL },
41
+ { "b", false, false, false, ActiveOverlay, NULL },
42
+ { "base", true, false, false, ActiveOverlay, head_0 },
43
+ { "basefont", true, false, false, ActiveOverlay, head_0 },
44
+ { "bdi", false, false, false, ActiveOverlay, NULL },
45
+ { "bdo", false, true, false, ActiveOverlay, NULL },
46
+ { "big", false, false, false, ActiveOverlay, NULL },
47
+ { "blockquote", false, false, false, ActiveOverlay, NULL },
48
+ { "body", false, false, false, ActiveOverlay, html_0 },
49
+ { "br", true, false, false, ActiveOverlay, NULL },
50
+ { "button", false, false, false, ActiveOverlay, NULL },
51
+ { "canvas", false, false, false, ActiveOverlay, NULL },
52
+ { "caption", false, false, false, ActiveOverlay, table_0 },
53
+ { "center", false, false, false, ActiveOverlay, NULL },
54
+ { "cite", false, false, false, ActiveOverlay, NULL },
55
+ { "code", false, false, false, ActiveOverlay, NULL },
56
+ { "col", true, false, false, ActiveOverlay, colgroup_0 },
57
+ { "colgroup", false, false, false, ActiveOverlay, NULL },
58
+ { "command", true, false, false, ActiveOverlay, NULL },
59
+ { "datalist", false, false, false, ActiveOverlay, NULL },
60
+ { "dd", false, false, false, ActiveOverlay, dl_0 },
61
+ { "del", false, false, false, ActiveOverlay, NULL },
62
+ { "details", false, false, false, ActiveOverlay, NULL },
63
+ { "dfn", false, false, false, ActiveOverlay, NULL },
64
+ { "dialog", false, false, false, ActiveOverlay, dt_th_0 },
65
+ { "dir", false, false, false, ActiveOverlay, NULL },
66
+ { "div", false, true, false, ActiveOverlay, NULL },
67
+ { "dl", false, false, false, ActiveOverlay, NULL },
68
+ { "dt", false, true, false, ActiveOverlay, dl_0 },
69
+ { "em", false, false, false, ActiveOverlay, NULL },
70
+ { "embed", true, false, false, ActiveOverlay, NULL },
71
+ { "fieldset", false, false, false, ActiveOverlay, NULL },
72
+ { "figcaption", false, false, false, ActiveOverlay, figure_0 },
73
+ { "figure", false, false, false, ActiveOverlay, NULL },
74
+ { "font", false, true, false, ActiveOverlay, NULL },
75
+ { "footer", false, false, false, ActiveOverlay, NULL },
76
+ { "form", false, false, false, ActiveOverlay, NULL },
77
+ { "frame", true, false, false, ActiveOverlay, frameset_0 },
78
+ { "frameset", false, false, false, ActiveOverlay, NULL },
79
+ { "h1", false, false, false, ActiveOverlay, NULL },
80
+ { "h2", false, false, false, ActiveOverlay, NULL },
81
+ { "h3", false, false, false, ActiveOverlay, NULL },
82
+ { "h4", false, false, false, ActiveOverlay, NULL },
83
+ { "h5", false, false, false, ActiveOverlay, NULL },
84
+ { "h6", false, false, false, ActiveOverlay, NULL },
85
+ { "head", false, false, false, ActiveOverlay, html_0 },
86
+ { "header", false, false, false, ActiveOverlay, NULL },
87
+ { "hgroup", false, false, false, ActiveOverlay, NULL },
88
+ { "hr", true, false, false, ActiveOverlay, NULL },
89
+ { "html", false, false, false, ActiveOverlay, NULL },
90
+ { "i", false, false, false, ActiveOverlay, NULL },
91
+ { "iframe", true, false, false, ActiveOverlay, NULL },
92
+ { "img", true, false, false, ActiveOverlay, NULL },
93
+ { "input", true, false, false, ActiveOverlay, NULL }, // somewhere under a form_0
94
+ { "ins", false, false, false, ActiveOverlay, NULL },
95
+ { "kbd", false, false, false, ActiveOverlay, NULL },
96
+ { "keygen", true, false, false, ActiveOverlay, NULL },
97
+ { "label", false, false, false, ActiveOverlay, NULL }, // somewhere under a form_0
98
+ { "legend", false, false, false, ActiveOverlay, fieldset_0 },
99
+ { "li", false, false, false, ActiveOverlay, ol_ul_menu_0 },
100
+ { "link", true, false, false, ActiveOverlay, head_0 },
101
+ { "map", false, false, false, ActiveOverlay, NULL },
102
+ { "mark", false, false, false, ActiveOverlay, NULL },
103
+ { "menu", false, false, false, ActiveOverlay, NULL },
104
+ { "meta", true, false, false, ActiveOverlay, head_0 },
105
+ { "meter", false, false, false, ActiveOverlay, NULL },
106
+ { "nav", false, false, false, ActiveOverlay, NULL },
107
+ { "noframes", false, false, false, ActiveOverlay, NULL },
108
+ { "noscript", false, false, false, ActiveOverlay, NULL },
109
+ { "object", false, false, false, ActiveOverlay, NULL },
110
+ { "ol", false, true, false, ActiveOverlay, NULL },
111
+ { "optgroup", false, false, false, ActiveOverlay, NULL },
112
+ { "option", false, false, false, ActiveOverlay, optgroup_select_datalist_0 },
113
+ { "output", false, false, false, ActiveOverlay, NULL },
114
+ { "p", false, false, false, ActiveOverlay, NULL },
115
+ { "param", true, false, false, ActiveOverlay, NULL },
116
+ { "pre", false, false, false, ActiveOverlay, NULL },
117
+ { "progress", false, false, false, ActiveOverlay, NULL },
118
+ { "q", false, false, false, ActiveOverlay, NULL },
119
+ { "rp", false, false, false, ActiveOverlay, ruby_0 },
120
+ { "rt", false, false, false, ActiveOverlay, ruby_0 },
121
+ { "ruby", false, false, false, ActiveOverlay, NULL },
122
+ { "s", false, false, false, ActiveOverlay, NULL },
123
+ { "samp", false, false, false, ActiveOverlay, NULL },
124
+ { "script", false, false, true, ActiveOverlay, NULL },
125
+ { "section", false, true, false, ActiveOverlay, NULL },
126
+ { "select", false, false, false, ActiveOverlay, NULL },
127
+ { "small", false, false, false, ActiveOverlay, NULL },
128
+ { "source", false, false, false, ActiveOverlay, audio_video_0 },
129
+ { "span", false, true, false, ActiveOverlay, NULL },
130
+ { "strike", false, false, false, ActiveOverlay, NULL },
131
+ { "strong", false, false, false, ActiveOverlay, NULL },
132
+ { "style", false, false, false, ActiveOverlay, NULL },
133
+ { "sub", false, false, false, ActiveOverlay, NULL },
134
+ { "summary", false, false, false, ActiveOverlay, details_0 },
135
+ { "sup", false, false, false, ActiveOverlay, NULL },
136
+ { "table", false, false, false, ActiveOverlay, NULL },
137
+ { "tbody", false, false, false, ActiveOverlay, table_0 },
138
+ { "td", false, false, false, ActiveOverlay, tr_0 },
139
+ { "textarea", false, false, false, ActiveOverlay, NULL },
140
+ { "tfoot", false, false, false, ActiveOverlay, table_0 },
141
+ { "th", false, false, false, ActiveOverlay, tr_0 },
142
+ { "thead", false, false, false, ActiveOverlay, table_0 },
143
+ { "time", false, false, false, ActiveOverlay, NULL },
144
+ { "title", false, false, false, ActiveOverlay, head_0 },
145
+ { "tr", false, false, false, ActiveOverlay, table_0 },
146
+ { "track", true, false, false, ActiveOverlay, audio_video_0 },
147
+ { "tt", false, false, false, ActiveOverlay, NULL },
148
+ { "u", false, false, false, ActiveOverlay, NULL },
149
+ { "ul", false, false, false, ActiveOverlay, NULL },
150
+ { "var", false, false, false, ActiveOverlay, NULL },
151
+ { "video", false, false, false, ActiveOverlay, NULL },
152
+ { "wbr", true, false, false, ActiveOverlay, NULL },
150
153
  };
151
154
  static struct _Hints html_hints = {
152
155
  "HTML",
@@ -159,6 +162,26 @@ ox_hints_html() {
159
162
  return &html_hints;
160
163
  }
161
164
 
165
+ Hints
166
+ ox_hints_dup(Hints h) {
167
+ Hints nh = ALLOC(struct _Hints);
168
+
169
+ nh->hints = ALLOC_N(struct _Hint, h->size);
170
+ memcpy(nh->hints, h->hints, sizeof(struct _Hint) * h->size);
171
+ nh->size = h->size;
172
+ nh->name = h->name;
173
+
174
+ return nh;
175
+ }
176
+
177
+ void
178
+ ox_hints_destroy(Hints h) {
179
+ if (NULL != h && &html_hints != h) {
180
+ xfree(h->hints);
181
+ xfree(h);
182
+ }
183
+ }
184
+
162
185
  Hint
163
186
  ox_hint_find(Hints hints, const char *name) {
164
187
  if (0 != hints) {
@@ -6,11 +6,22 @@
6
6
  #ifndef __OX_HINT_H__
7
7
  #define __OX_HINT_H__
8
8
 
9
+ #include <stdbool.h>
10
+
11
+ typedef enum {
12
+ ActiveOverlay = 0,
13
+ InactiveOverlay = 'i',
14
+ BlockOverlay = 'b',
15
+ OffOverlay = 'o',
16
+ AbortOverlay = 'a',
17
+ } Overlay;
18
+
9
19
  typedef struct _Hint {
10
20
  const char *name;
11
21
  char empty; // must be closed or close auto it, not error
12
22
  char nest; // nesting allowed
13
23
  char jump; // jump to end <script> ... </script>
24
+ char overlay;// Overlay
14
25
  const char **parents;
15
26
  } *Hint;
16
27
 
@@ -22,5 +33,7 @@ typedef struct _Hints {
22
33
 
23
34
  extern Hints ox_hints_html(void);
24
35
  extern Hint ox_hint_find(Hints hints, const char *name);
36
+ extern Hints ox_hints_dup(Hints h);
37
+ extern void ox_hints_destroy(Hints h);
25
38
 
26
39
  #endif /* __OX_HINT_H__ */
@@ -132,7 +132,14 @@ module Ox
132
132
  return [self] if path.nil?
133
133
  found = []
134
134
  pa = path.split('/')
135
- alocate(pa, found)
135
+ if '*' == path[0]
136
+ # a bit of a hack but it allows self to be checked as well
137
+ e = Element.new('')
138
+ e << self
139
+ e.alocate(pa, found)
140
+ else
141
+ alocate(pa, found)
142
+ end
136
143
  found
137
144
  end
138
145
 
@@ -46,6 +46,7 @@ module Ox
46
46
  # def value(value); end
47
47
  # def start_element(name); end
48
48
  # def end_element(name); end
49
+ # def abort(name); end
49
50
  #
50
51
  # Initializing _line_ attribute in the initializer will cause that variable to
51
52
  # be updated before each callback with the XML line number. The same is true
@@ -103,6 +104,9 @@ module Ox
103
104
 
104
105
  def error(message, line, column)
105
106
  end
107
+
108
+ def abort(name)
109
+ end
106
110
 
107
111
  end # Sax
108
112
  end # Ox
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Ox
3
3
  # Current version of the module.
4
- VERSION = '2.4.0'
4
+ VERSION = '2.4.1'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ox
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-04-14 00:00:00.000000000 Z
12
+ date: 2016-04-30 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! "A fast XML parser and object serializer that uses only standard C
15
15
  lib.\n \nOptimized XML (Ox), as the name implies was written to provide