ooxml_parser 0.17.0 → 0.18.0

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: 0237d3a93d29a2948634cd1e3f4c9c414347ee39176aad7d3c7e75e55b2a8314
4
- data.tar.gz: e423b10a5309aac333a95be460b863cc2cbea1449b866817dafbe427c092bf34
3
+ metadata.gz: 6796507c27e69629193c826ff39f2197557636fdf20775bbbccb04e8ed8ac4c3
4
+ data.tar.gz: a74a3ac6e3a50c57d0937fc50648f27e1dec5598c19b3550121c821cb0a603c5
5
5
  SHA512:
6
- metadata.gz: 22783602daacb4933c941023d39757fd4dddef2adc64dcd58e6ef70ad6141b764b300e65745b50691cf138e2b212ccbd8ed542d0cbbe8b62dc0cc905d47760ed
7
- data.tar.gz: 4a1843d681f5253234eeb4bf33c240db9ea46f2ab43f219a0a391297475a4f1716ba4b7915599bcb06ad41605071190e4788f6516ce43983c5d3f0846ea78dc8
6
+ metadata.gz: 7e3eb429ee586f7ad1559d43437baf090bd0e22268dc4ed069b99a1701e4310d7b5aaed5ace29cfd3a94f021acd5dbaee13ff31034a750a6f2c415fc8df2fe4a
7
+ data.tar.gz: 151a0bec140acf446d1ad5b7539fab41cab45bade87b9fa5dd0770808ee896db456174799a366cd49698af71682ffb0091cc7be85811b28b7f211e60757748c7
@@ -35,7 +35,7 @@ module OoxmlParser
35
35
 
36
36
  full_path_to_file = OOXMLDocumentObject.path_to_folder + OOXMLDocumentObject.root_subfolder + @path.gsub('..', '')
37
37
  if File.exist?(full_path_to_file)
38
- @content = IO.binread(full_path_to_file)
38
+ @content = File.binread(full_path_to_file)
39
39
  else
40
40
  warn "Couldn't find #{full_path_to_file} file on filesystem. Possible problem in original document"
41
41
  end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OoxmlParser
4
+ # Exception for Nokogiri parsing error
5
+ class NokogiriParsingException < StandardError; end
6
+ end
@@ -4,6 +4,7 @@ require 'filemagic' unless Gem.win_platform?
4
4
  require 'securerandom'
5
5
  require 'nokogiri'
6
6
  require 'zip'
7
+ require_relative 'ooxml_document_object/nokogiri_parsing_exception'
7
8
  require_relative 'ooxml_document_object/ooxml_document_object_helper'
8
9
  require_relative 'ooxml_document_object/ooxml_object_attribute_helper'
9
10
 
@@ -39,7 +40,12 @@ module OoxmlParser
39
40
 
40
41
  # @return [Nokogiri::XML::Document] result of parsing xml via nokogiri
41
42
  def parse_xml(xml_path)
42
- Nokogiri::XML(File.open(xml_path), &:strict)
43
+ xml = Nokogiri::XML(File.open(xml_path), &:strict)
44
+ unless xml.errors.empty?
45
+ raise NokogiriParsingException,
46
+ "Nokogiri found errors in file: #{xml_path}. Errors: #{xml.errors}"
47
+ end
48
+ xml
43
49
  end
44
50
 
45
51
  class << self
@@ -15,10 +15,6 @@ module OoxmlParser
15
15
  attr_reader :font_color
16
16
  # @return [OoxmlSize] space size
17
17
  attr_reader :space
18
- # @return [string] name of font
19
- attr_reader :font_name
20
- # @return [Float] font size
21
- attr_reader :font_size
22
18
  # @return [Symbol] baseline of run
23
19
  attr_reader :baseline
24
20
  # @return [Hyperlink] hyperlink of run
@@ -79,14 +75,7 @@ module OoxmlParser
79
75
  when 'strike'
80
76
  @font_style.strike = value_to_symbol(value)
81
77
  when 'baseline'
82
- case value.value.to_i
83
- when -25_000, -30_000
84
- @baseline = :subscript
85
- when 30_000
86
- @baseline = :superscript
87
- when 0
88
- @baseline = :baseline
89
- end
78
+ @baseline = parse_baseline(value)
90
79
  when 'cap'
91
80
  @caps = value.value.to_sym
92
81
  end
@@ -107,8 +96,6 @@ module OoxmlParser
107
96
  @spacing = RunSpacing.new(parent: self).parse(node_child)
108
97
  when 'color'
109
98
  @color = OoxmlColor.new(parent: self).parse(node_child)
110
- when 'solidFill'
111
- @font_color = Color.new(parent: self).parse_color(node_child.xpath('*').first)
112
99
  when 'latin'
113
100
  @font_name = node_child.attribute('typeface').value
114
101
  when 'b'
@@ -140,9 +127,34 @@ module OoxmlParser
140
127
  end
141
128
  end
142
129
  @font_color = DocxColorScheme.new(parent: self).parse(node)
143
- @font_name = root_object.default_font_typeface if @font_name.empty?
144
- @font_size ||= root_object.default_font_size
145
130
  self
146
131
  end
132
+
133
+ # @return [Float] font size
134
+ def font_size
135
+ @font_size ||= root_object.default_font_size
136
+ end
137
+
138
+ # @return [String] name of font
139
+ def font_name
140
+ return @font_name unless @font_name.empty?
141
+
142
+ root_object.default_font_typeface
143
+ end
144
+
145
+ private
146
+
147
+ # @param value [Nokogiri::XML::Attr] nokogiri parameter to parse
148
+ # @return [Symbol] baseline value depending of type
149
+ def parse_baseline(value)
150
+ case value.value.to_i
151
+ when -25_000, -30_000
152
+ :subscript
153
+ when 30_000
154
+ :superscript
155
+ when 0
156
+ :baseline
157
+ end
158
+ end
147
159
  end
148
160
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OoxmlParser
4
+ # Class for parsing SlideLayout files
5
+ class SlideLayoutFile < OOXMLDocumentObject
6
+ # @return [CommonSlideData] common slide data
7
+ attr_reader :common_slide_data
8
+
9
+ # Parse SlideLayoutFile
10
+ # @param file [String] path to file to parse
11
+ # @return [SlideLayoutFile] result of parsing
12
+ def parse(file)
13
+ OOXMLDocumentObject.add_to_xmls_stack(file.gsub(OOXMLDocumentObject.path_to_folder, ''))
14
+ doc = parse_xml(file)
15
+ doc.xpath('p:sldLayout/*').each do |node_child|
16
+ case node_child.name
17
+ when 'cSld'
18
+ @common_slide_data = CommonSlideData.new(parent: self).parse(node_child)
19
+ end
20
+ end
21
+ OOXMLDocumentObject.xmls_stack.pop
22
+ self
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OoxmlParser
4
+ # method to help to work with SlideLayouts
5
+ module SlideLayoutsHelper
6
+ # @return [Array<String>] list of slide layouts files
7
+ def slide_layouts_files
8
+ Dir["#{OOXMLDocumentObject.path_to_folder}ppt/slideLayouts/*.xml"]
9
+ end
10
+
11
+ private
12
+
13
+ # Parse slide layouts file
14
+ def parse_slide_layouts
15
+ slide_layouts_files.each do |file|
16
+ @slide_layouts << SlideLayoutFile.new(parent: self).parse(file)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OoxmlParser
4
+ # Class for parsing SlideMaster files
5
+ class SlideMasterFile < OOXMLDocumentObject
6
+ # @return [CommonSlideData] common slide data
7
+ attr_reader :common_slide_data
8
+
9
+ # Parse SlideMaster
10
+ # @param file [String] path to file to parse
11
+ # @return [SlideMasterFile] result of parsing
12
+ def parse(file)
13
+ OOXMLDocumentObject.add_to_xmls_stack(file.gsub(OOXMLDocumentObject.path_to_folder, ''))
14
+ doc = parse_xml(file)
15
+ doc.xpath('p:sldMaster/*').each do |node_child|
16
+ case node_child.name
17
+ when 'cSld'
18
+ @common_slide_data = CommonSlideData.new(parent: self).parse(node_child)
19
+ end
20
+ end
21
+ OOXMLDocumentObject.xmls_stack.pop
22
+ self
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OoxmlParser
4
+ # method to help to work with SlideMasters
5
+ module SlideMastersHelper
6
+ # @return [Array<String>] list of slide masters files
7
+ def slide_masters_files
8
+ Dir["#{OOXMLDocumentObject.path_to_folder}ppt/slideMasters/*.xml"]
9
+ end
10
+
11
+ private
12
+
13
+ # Parse slide masters file
14
+ def parse_slide_masters
15
+ slide_masters_files.each do |file|
16
+ @slide_masters << SlideMasterFile.new(parent: self).parse(file)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -5,12 +5,18 @@ require_relative 'presentation/presentation_comments'
5
5
  require_relative 'presentation/presentation_helpers'
6
6
  require_relative 'presentation/presentation_theme'
7
7
  require_relative 'presentation/slide'
8
+ require_relative 'presentation/slide_master_file'
9
+ require_relative 'presentation/slide_masters_helper'
10
+ require_relative 'presentation/slide_layout_file'
11
+ require_relative 'presentation/slide_layouts_helper'
8
12
  require_relative 'presentation/slide_size'
9
13
  require_relative 'presentation/table_styles'
10
14
  module OoxmlParser
11
15
  # Basic class for all parsed pptx data
12
16
  class Presentation < CommonDocumentStructure
13
17
  include PresentationHelpers
18
+ include SlideLayoutsHelper
19
+ include SlideMastersHelper
14
20
  attr_accessor :slides, :theme, :slide_size
15
21
  # @return [Relationships] relationships of presentation
16
22
  attr_accessor :relationships
@@ -20,10 +26,16 @@ module OoxmlParser
20
26
  attr_reader :comment_authors
21
27
  # @return [PresentationComments] comments of presentation
22
28
  attr_reader :comments
29
+ # @return [Array<SlideMasterFile>] list of slide master
30
+ attr_reader :slide_masters
31
+ # @return [Array<SlideLayout>] list of slide layouts
32
+ attr_reader :slide_layouts
23
33
 
24
34
  def initialize(params = {})
25
35
  @slides = []
26
36
  @comments = []
37
+ @slide_masters = []
38
+ @slide_layouts = []
27
39
  super
28
40
  end
29
41
 
@@ -56,6 +68,8 @@ module OoxmlParser
56
68
  end
57
69
  OOXMLDocumentObject.xmls_stack.pop
58
70
  @relationships = Relationships.new(parent: self).parse_file("#{OOXMLDocumentObject.path_to_folder}/ppt/_rels/presentation.xml.rels")
71
+ parse_slide_layouts
72
+ parse_slide_masters
59
73
  self
60
74
  end
61
75
  end
@@ -4,6 +4,6 @@ module OoxmlParser
4
4
  # This module holds the RuboCop version information.
5
5
  module Version
6
6
  # [String] Version of Gem
7
- STRING = '0.17.0'
7
+ STRING = '0.18.0'
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ooxml_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ONLYOFFICE
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-09-15 00:00:00.000000000 Z
13
+ date: 2021-11-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
@@ -305,6 +305,7 @@ files:
305
305
  - lib/ooxml_parser/common_parser/common_data/font_style.rb
306
306
  - lib/ooxml_parser/common_parser/common_data/hyperlink.rb
307
307
  - lib/ooxml_parser/common_parser/common_data/ooxml_document_object.rb
308
+ - lib/ooxml_parser/common_parser/common_data/ooxml_document_object/nokogiri_parsing_exception.rb
308
309
  - lib/ooxml_parser/common_parser/common_data/ooxml_document_object/ooxml_document_object_helper.rb
309
310
  - lib/ooxml_parser/common_parser/common_data/ooxml_document_object/ooxml_object_attribute_helper.rb
310
311
  - lib/ooxml_parser/common_parser/common_data/paragraph.rb
@@ -480,6 +481,10 @@ files:
480
481
  - lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/transition/sound_action/sound.rb
481
482
  - lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/transition_properties/transition_properties.rb
482
483
  - lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/transition_properties/transition_properties/wheel.rb
484
+ - lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide_layout_file.rb
485
+ - lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide_layouts_helper.rb
486
+ - lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide_master_file.rb
487
+ - lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide_masters_helper.rb
483
488
  - lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide_size.rb
484
489
  - lib/ooxml_parser/pptx_parser/pptx_data/presentation/table_styles.rb
485
490
  - lib/ooxml_parser/pptx_parser/pptx_parser.rb
@@ -589,7 +594,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
589
594
  - !ruby/object:Gem::Version
590
595
  version: '0'
591
596
  requirements: []
592
- rubygems_version: 3.2.27
597
+ rubygems_version: 3.2.29
593
598
  signing_key:
594
599
  specification_version: 4
595
600
  summary: OoxmlParser Gem