xsdvi 1.0.1 → 1.0.2
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/xsdvi/version.rb +1 -1
- data/lib/xsdvi/xsd_handler.rb +29 -2
- metadata +3 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 18eeeae820c78dedfff6555b6758c256c53deae9535753b8d147e6979c52b5b3
|
|
4
|
+
data.tar.gz: 47b6c9dbc1945d70e4c52e4c9acda1eb136c82ce0c41ad94fd9299a39ef5eaf4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 237505f45a65875c859dec77d8c7a6bacaa9c5d66348a4e1c3f3124b23dbd4e567739ee72d0f54d5db2e542e37eb07e5f96d5910a8ac31d8cb835ad445aba7de
|
|
7
|
+
data.tar.gz: 65446d4145a37342d139f5ab600c45a1750497fe276f870e69e09b1c89a09306701ee632d62b647b3f478ab4e63be07b92161068a2bc686ce8e5b4c2579ba52d
|
data/lib/xsdvi/version.rb
CHANGED
data/lib/xsdvi/xsd_handler.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "nokogiri"
|
|
4
|
+
require "set"
|
|
4
5
|
|
|
5
6
|
module Xsdvi
|
|
6
7
|
# Handles XSD parsing and tree building
|
|
@@ -23,6 +24,10 @@ module Xsdvi
|
|
|
23
24
|
@model_groups = {} # QName => group node
|
|
24
25
|
@attribute_groups = {} # QName => attributeGroup node
|
|
25
26
|
@elements = {} # QName => element node (for refs)
|
|
27
|
+
|
|
28
|
+
# Type extension/restriction chain tracking (prevents stack overflow)
|
|
29
|
+
@type_depth = 0
|
|
30
|
+
@type_ancestors = Set.new
|
|
26
31
|
end
|
|
27
32
|
|
|
28
33
|
def process_file(file_path)
|
|
@@ -298,7 +303,10 @@ module Xsdvi
|
|
|
298
303
|
# Process base type first (inherit content model)
|
|
299
304
|
if (base = extension_node["base"])
|
|
300
305
|
base_type = resolve_type(base)
|
|
301
|
-
|
|
306
|
+
if base_type && base_type.name == "complexType" && type_chain_enter(base)
|
|
307
|
+
process_complex_type_node(base_type)
|
|
308
|
+
type_chain_exit(base)
|
|
309
|
+
end
|
|
302
310
|
end
|
|
303
311
|
|
|
304
312
|
# Then process extension's own content
|
|
@@ -310,7 +318,10 @@ module Xsdvi
|
|
|
310
318
|
# Process base type first (inherit and potentially restrict content model)
|
|
311
319
|
if (base = restriction_node["base"])
|
|
312
320
|
base_type = resolve_type(base)
|
|
313
|
-
|
|
321
|
+
if base_type && base_type.name == "complexType" && type_chain_enter(base)
|
|
322
|
+
process_complex_type_node(base_type)
|
|
323
|
+
type_chain_exit(base)
|
|
324
|
+
end
|
|
314
325
|
end
|
|
315
326
|
|
|
316
327
|
# Then process restriction's own content
|
|
@@ -754,5 +765,21 @@ module Xsdvi
|
|
|
754
765
|
|
|
755
766
|
builder.level_up
|
|
756
767
|
end
|
|
768
|
+
|
|
769
|
+
MAX_TYPE_DEPTH = 100
|
|
770
|
+
|
|
771
|
+
def type_chain_enter(type_name)
|
|
772
|
+
return false if @type_depth >= MAX_TYPE_DEPTH
|
|
773
|
+
return false if @type_ancestors.include?(type_name)
|
|
774
|
+
|
|
775
|
+
@type_depth += 1
|
|
776
|
+
@type_ancestors.add(type_name)
|
|
777
|
+
true
|
|
778
|
+
end
|
|
779
|
+
|
|
780
|
+
def type_chain_exit(type_name)
|
|
781
|
+
@type_depth -= 1
|
|
782
|
+
@type_ancestors.delete(type_name)
|
|
783
|
+
end
|
|
757
784
|
end
|
|
758
785
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: xsdvi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: nokogiri
|
|
@@ -96,7 +95,6 @@ licenses:
|
|
|
96
95
|
- BSD-3-Clause
|
|
97
96
|
metadata:
|
|
98
97
|
rubygems_mfa_required: 'true'
|
|
99
|
-
post_install_message:
|
|
100
98
|
rdoc_options: []
|
|
101
99
|
require_paths:
|
|
102
100
|
- lib
|
|
@@ -111,8 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
111
109
|
- !ruby/object:Gem::Version
|
|
112
110
|
version: '0'
|
|
113
111
|
requirements: []
|
|
114
|
-
rubygems_version: 3.
|
|
115
|
-
signing_key:
|
|
112
|
+
rubygems_version: 3.6.9
|
|
116
113
|
specification_version: 4
|
|
117
114
|
summary: Generate SVG diagrams from XSD schemas
|
|
118
115
|
test_files: []
|