caxlsx 2.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 +7 -0
- data/.yardopts +9 -0
- data/.yardopts_guide +19 -0
- data/CHANGELOG.md +239 -0
- data/LICENSE +22 -0
- data/README.md +256 -0
- data/Rakefile +31 -0
- data/examples/2010_comments.rb +17 -0
- data/examples/anchor_swapping.rb +28 -0
- data/examples/auto_filter.rb +16 -0
- data/examples/basic_charts.rb +58 -0
- data/examples/chart_colors.rb +88 -0
- data/examples/colored_links.rb +59 -0
- data/examples/conditional_formatting/example_conditional_formatting.rb +74 -0
- data/examples/conditional_formatting/getting_barred.rb +37 -0
- data/examples/conditional_formatting/hitting_the_high_notes.rb +37 -0
- data/examples/conditional_formatting/scaled_colors.rb +39 -0
- data/examples/conditional_formatting/stop_and_go.rb +37 -0
- data/examples/data_validation.rb +50 -0
- data/examples/example.rb +777 -0
- data/examples/extractive.rb +45 -0
- data/examples/image1.jpeg +0 -0
- data/examples/ios_preview.rb +14 -0
- data/examples/page_setup.rb +11 -0
- data/examples/pivot_table.rb +39 -0
- data/examples/sheet_protection.rb +10 -0
- data/examples/skydrive/real_example.rb +63 -0
- data/examples/styles.rb +66 -0
- data/examples/underline.rb +13 -0
- data/examples/wrap_text.rb +21 -0
- data/lib/axlsx.rb +152 -0
- data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
- data/lib/axlsx/content_type/content_type.rb +26 -0
- data/lib/axlsx/content_type/default.rb +25 -0
- data/lib/axlsx/content_type/override.rb +25 -0
- data/lib/axlsx/doc_props/app.rb +235 -0
- data/lib/axlsx/doc_props/core.rb +39 -0
- data/lib/axlsx/drawing/ax_data_source.rb +26 -0
- data/lib/axlsx/drawing/axes.rb +61 -0
- data/lib/axlsx/drawing/axis.rb +187 -0
- data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
- data/lib/axlsx/drawing/bar_series.rb +82 -0
- data/lib/axlsx/drawing/cat_axis.rb +85 -0
- data/lib/axlsx/drawing/chart.rb +232 -0
- data/lib/axlsx/drawing/d_lbls.rb +90 -0
- data/lib/axlsx/drawing/drawing.rb +162 -0
- data/lib/axlsx/drawing/graphic_frame.rb +54 -0
- data/lib/axlsx/drawing/hyperlink.rb +102 -0
- data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
- data/lib/axlsx/drawing/line_chart.rb +99 -0
- data/lib/axlsx/drawing/line_series.rb +81 -0
- data/lib/axlsx/drawing/marker.rb +84 -0
- data/lib/axlsx/drawing/num_data.rb +52 -0
- data/lib/axlsx/drawing/num_data_source.rb +62 -0
- data/lib/axlsx/drawing/num_val.rb +32 -0
- data/lib/axlsx/drawing/one_cell_anchor.rb +98 -0
- data/lib/axlsx/drawing/pic.rb +205 -0
- data/lib/axlsx/drawing/picture_locking.rb +44 -0
- data/lib/axlsx/drawing/pie_3D_chart.rb +48 -0
- data/lib/axlsx/drawing/pie_series.rb +74 -0
- data/lib/axlsx/drawing/scaling.rb +60 -0
- data/lib/axlsx/drawing/scatter_chart.rb +74 -0
- data/lib/axlsx/drawing/scatter_series.rb +65 -0
- data/lib/axlsx/drawing/ser_axis.rb +45 -0
- data/lib/axlsx/drawing/series.rb +69 -0
- data/lib/axlsx/drawing/series_title.rb +23 -0
- data/lib/axlsx/drawing/str_data.rb +42 -0
- data/lib/axlsx/drawing/str_val.rb +32 -0
- data/lib/axlsx/drawing/title.rb +78 -0
- data/lib/axlsx/drawing/two_cell_anchor.rb +92 -0
- data/lib/axlsx/drawing/val_axis.rb +37 -0
- data/lib/axlsx/drawing/view_3D.rb +115 -0
- data/lib/axlsx/drawing/vml_drawing.rb +42 -0
- data/lib/axlsx/drawing/vml_shape.rb +66 -0
- data/lib/axlsx/package.rb +352 -0
- data/lib/axlsx/rels/relationship.rb +129 -0
- data/lib/axlsx/rels/relationships.rb +29 -0
- data/lib/axlsx/stylesheet/border.rb +71 -0
- data/lib/axlsx/stylesheet/border_pr.rb +71 -0
- data/lib/axlsx/stylesheet/cell_alignment.rb +134 -0
- data/lib/axlsx/stylesheet/cell_protection.rb +43 -0
- data/lib/axlsx/stylesheet/cell_style.rb +74 -0
- data/lib/axlsx/stylesheet/color.rb +78 -0
- data/lib/axlsx/stylesheet/dxf.rb +79 -0
- data/lib/axlsx/stylesheet/fill.rb +35 -0
- data/lib/axlsx/stylesheet/font.rb +148 -0
- data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
- data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
- data/lib/axlsx/stylesheet/num_fmt.rb +79 -0
- data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
- data/lib/axlsx/stylesheet/styles.rb +420 -0
- data/lib/axlsx/stylesheet/table_style.rb +54 -0
- data/lib/axlsx/stylesheet/table_style_element.rb +79 -0
- data/lib/axlsx/stylesheet/table_styles.rb +46 -0
- data/lib/axlsx/stylesheet/xf.rb +147 -0
- data/lib/axlsx/util/accessors.rb +64 -0
- data/lib/axlsx/util/constants.rb +392 -0
- data/lib/axlsx/util/options_parser.rb +15 -0
- data/lib/axlsx/util/parser.rb +44 -0
- data/lib/axlsx/util/serialized_attributes.rb +79 -0
- data/lib/axlsx/util/simple_typed_list.rb +203 -0
- data/lib/axlsx/util/storage.rb +146 -0
- data/lib/axlsx/util/validators.rb +300 -0
- data/lib/axlsx/version.rb +5 -0
- data/lib/axlsx/workbook/defined_name.rb +129 -0
- data/lib/axlsx/workbook/defined_names.rb +21 -0
- data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
- data/lib/axlsx/workbook/workbook.rb +354 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +246 -0
- data/lib/axlsx/workbook/worksheet/break.rb +37 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +416 -0
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +144 -0
- data/lib/axlsx/workbook/worksheet/cfvo.rb +62 -0
- data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
- data/lib/axlsx/workbook/worksheet/col.rb +144 -0
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
- data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
- data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
- data/lib/axlsx/workbook/worksheet/comment.rb +92 -0
- data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
- data/lib/axlsx/workbook/worksheet/data_bar.rb +131 -0
- data/lib/axlsx/workbook/worksheet/data_validation.rb +244 -0
- data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
- data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
- data/lib/axlsx/workbook/worksheet/header_footer.rb +54 -0
- data/lib/axlsx/workbook/worksheet/icon_set.rb +83 -0
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
- data/lib/axlsx/workbook/worksheet/page_margins.rb +99 -0
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +242 -0
- data/lib/axlsx/workbook/worksheet/pane.rb +141 -0
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +273 -0
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
- data/lib/axlsx/workbook/worksheet/print_options.rb +41 -0
- data/lib/axlsx/workbook/worksheet/protected_range.rb +49 -0
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
- data/lib/axlsx/workbook/worksheet/row.rb +172 -0
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
- data/lib/axlsx/workbook/worksheet/selection.rb +103 -0
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
- data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +69 -0
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +120 -0
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
- data/lib/axlsx/workbook/worksheet/table.rb +102 -0
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +51 -0
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +769 -0
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
- data/lib/schema/dc.xsd +118 -0
- data/lib/schema/dcmitype.xsd +52 -0
- data/lib/schema/dcterms.xsd +331 -0
- data/lib/schema/dml-chart.xsd +1499 -0
- data/lib/schema/dml-chartDrawing.xsd +146 -0
- data/lib/schema/dml-compatibility.xsd +14 -0
- data/lib/schema/dml-diagram.xsd +1091 -0
- data/lib/schema/dml-lockedCanvas.xsd +11 -0
- data/lib/schema/dml-main.xsd +3048 -0
- data/lib/schema/dml-picture.xsd +23 -0
- data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
- data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
- data/lib/schema/opc-contentTypes.xsd +42 -0
- data/lib/schema/opc-coreProperties.xsd +54 -0
- data/lib/schema/opc-digSig.xsd +49 -0
- data/lib/schema/opc-relationships.xsd +33 -0
- data/lib/schema/pml.xsd +1676 -0
- data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
- data/lib/schema/shared-bibliography.xsd +144 -0
- data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
- data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
- data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
- data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
- data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
- data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
- data/lib/schema/shared-math.xsd +582 -0
- data/lib/schema/shared-relationshipReference.xsd +25 -0
- data/lib/schema/sml.xsd +4434 -0
- data/lib/schema/vml-main.xsd +569 -0
- data/lib/schema/vml-officeDrawing.xsd +509 -0
- data/lib/schema/vml-presentationDrawing.xsd +12 -0
- data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
- data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
- data/lib/schema/wml.xsd +3644 -0
- data/lib/schema/xml.xsd +116 -0
- data/test/benchmark.rb +72 -0
- data/test/content_type/tc_content_type.rb +76 -0
- data/test/content_type/tc_default.rb +16 -0
- data/test/content_type/tc_override.rb +14 -0
- data/test/doc_props/tc_app.rb +43 -0
- data/test/doc_props/tc_core.rb +42 -0
- data/test/drawing/tc_axes.rb +8 -0
- data/test/drawing/tc_axis.rb +85 -0
- data/test/drawing/tc_bar_3D_chart.rb +71 -0
- data/test/drawing/tc_bar_series.rb +37 -0
- data/test/drawing/tc_cat_axis.rb +31 -0
- data/test/drawing/tc_cat_axis_data.rb +27 -0
- data/test/drawing/tc_chart.rb +110 -0
- data/test/drawing/tc_d_lbls.rb +57 -0
- data/test/drawing/tc_data_source.rb +17 -0
- data/test/drawing/tc_drawing.rb +80 -0
- data/test/drawing/tc_graphic_frame.rb +27 -0
- data/test/drawing/tc_hyperlink.rb +64 -0
- data/test/drawing/tc_line_3d_chart.rb +47 -0
- data/test/drawing/tc_line_chart.rb +39 -0
- data/test/drawing/tc_line_series.rb +30 -0
- data/test/drawing/tc_marker.rb +44 -0
- data/test/drawing/tc_named_axis_data.rb +27 -0
- data/test/drawing/tc_num_data.rb +31 -0
- data/test/drawing/tc_num_val.rb +29 -0
- data/test/drawing/tc_one_cell_anchor.rb +66 -0
- data/test/drawing/tc_pic.rb +107 -0
- data/test/drawing/tc_picture_locking.rb +72 -0
- data/test/drawing/tc_pie_3D_chart.rb +28 -0
- data/test/drawing/tc_pie_series.rb +32 -0
- data/test/drawing/tc_scaling.rb +36 -0
- data/test/drawing/tc_scatter_chart.rb +48 -0
- data/test/drawing/tc_scatter_series.rb +21 -0
- data/test/drawing/tc_ser_axis.rb +31 -0
- data/test/drawing/tc_series.rb +23 -0
- data/test/drawing/tc_series_title.rb +33 -0
- data/test/drawing/tc_str_data.rb +18 -0
- data/test/drawing/tc_str_val.rb +21 -0
- data/test/drawing/tc_title.rb +49 -0
- data/test/drawing/tc_two_cell_anchor.rb +36 -0
- data/test/drawing/tc_val_axis.rb +24 -0
- data/test/drawing/tc_view_3D.rb +54 -0
- data/test/drawing/tc_vml_drawing.rb +25 -0
- data/test/drawing/tc_vml_shape.rb +106 -0
- data/test/profile.rb +24 -0
- data/test/rels/tc_relationship.rb +44 -0
- data/test/rels/tc_relationships.rb +37 -0
- data/test/stylesheet/tc_border.rb +37 -0
- data/test/stylesheet/tc_border_pr.rb +32 -0
- data/test/stylesheet/tc_cell_alignment.rb +81 -0
- data/test/stylesheet/tc_cell_protection.rb +29 -0
- data/test/stylesheet/tc_cell_style.rb +57 -0
- data/test/stylesheet/tc_color.rb +43 -0
- data/test/stylesheet/tc_dxf.rb +81 -0
- data/test/stylesheet/tc_fill.rb +18 -0
- data/test/stylesheet/tc_font.rb +121 -0
- data/test/stylesheet/tc_gradient_fill.rb +72 -0
- data/test/stylesheet/tc_gradient_stop.rb +31 -0
- data/test/stylesheet/tc_num_fmt.rb +30 -0
- data/test/stylesheet/tc_pattern_fill.rb +43 -0
- data/test/stylesheet/tc_styles.rb +235 -0
- data/test/stylesheet/tc_table_style.rb +44 -0
- data/test/stylesheet/tc_table_style_element.rb +45 -0
- data/test/stylesheet/tc_table_styles.rb +29 -0
- data/test/stylesheet/tc_xf.rb +120 -0
- data/test/tc_axlsx.rb +72 -0
- data/test/tc_helper.rb +10 -0
- data/test/tc_package.rb +227 -0
- data/test/util/tc_serialized_attributes.rb +19 -0
- data/test/util/tc_simple_typed_list.rb +78 -0
- data/test/util/tc_validators.rb +186 -0
- data/test/workbook/tc_defined_name.rb +41 -0
- data/test/workbook/tc_shared_strings_table.rb +44 -0
- data/test/workbook/tc_workbook.rb +125 -0
- data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
- data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
- data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
- data/test/workbook/worksheet/tc_break.rb +49 -0
- data/test/workbook/worksheet/tc_cell.rb +319 -0
- data/test/workbook/worksheet/tc_cfvo.rb +31 -0
- data/test/workbook/worksheet/tc_col.rb +78 -0
- data/test/workbook/worksheet/tc_color_scale.rb +58 -0
- data/test/workbook/worksheet/tc_comment.rb +72 -0
- data/test/workbook/worksheet/tc_comments.rb +57 -0
- data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
- data/test/workbook/worksheet/tc_data_bar.rb +46 -0
- data/test/workbook/worksheet/tc_data_validation.rb +265 -0
- data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
- data/test/workbook/worksheet/tc_header_footer.rb +151 -0
- data/test/workbook/worksheet/tc_icon_set.rb +45 -0
- data/test/workbook/worksheet/tc_page_margins.rb +97 -0
- data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
- data/test/workbook/worksheet/tc_page_setup.rb +143 -0
- data/test/workbook/worksheet/tc_pane.rb +54 -0
- data/test/workbook/worksheet/tc_pivot_table.rb +120 -0
- data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
- data/test/workbook/worksheet/tc_print_options.rb +72 -0
- data/test/workbook/worksheet/tc_protected_range.rb +17 -0
- data/test/workbook/worksheet/tc_row.rb +117 -0
- data/test/workbook/worksheet/tc_selection.rb +55 -0
- data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
- data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
- data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
- data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
- data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
- data/test/workbook/worksheet/tc_table.rb +68 -0
- data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
- data/test/workbook/worksheet/tc_worksheet.rb +538 -0
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
- metadata +546 -0
data/lib/schema/xml.xsd
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
<?xml version='1.0'?>
|
|
2
|
+
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
|
3
|
+
|
|
4
|
+
<xs:annotation>
|
|
5
|
+
<xs:documentation>
|
|
6
|
+
See http://www.w3.org/XML/1998/namespace.html and
|
|
7
|
+
http://www.w3.org/TR/REC-xml for information about this namespace.
|
|
8
|
+
|
|
9
|
+
This schema document describes the XML namespace, in a form
|
|
10
|
+
suitable for import by other schema documents.
|
|
11
|
+
|
|
12
|
+
Note that local names in this namespace are intended to be defined
|
|
13
|
+
only by the World Wide Web Consortium or its subgroups. The
|
|
14
|
+
following names are currently defined in this namespace and should
|
|
15
|
+
not be used with conflicting semantics by any Working Group,
|
|
16
|
+
specification, or document instance:
|
|
17
|
+
|
|
18
|
+
base (as an attribute name): denotes an attribute whose value
|
|
19
|
+
provides a URI to be used as the base for interpreting any
|
|
20
|
+
relative URIs in the scope of the element on which it
|
|
21
|
+
appears; its value is inherited. This name is reserved
|
|
22
|
+
by virtue of its definition in the XML Base specification.
|
|
23
|
+
|
|
24
|
+
lang (as an attribute name): denotes an attribute whose value
|
|
25
|
+
is a language code for the natural language of the content of
|
|
26
|
+
any element; its value is inherited. This name is reserved
|
|
27
|
+
by virtue of its definition in the XML specification.
|
|
28
|
+
|
|
29
|
+
space (as an attribute name): denotes an attribute whose
|
|
30
|
+
value is a keyword indicating what whitespace processing
|
|
31
|
+
discipline is intended for the content of the element; its
|
|
32
|
+
value is inherited. This name is reserved by virtue of its
|
|
33
|
+
definition in the XML specification.
|
|
34
|
+
|
|
35
|
+
Father (in any context at all): denotes Jon Bosak, the chair of
|
|
36
|
+
the original XML Working Group. This name is reserved by
|
|
37
|
+
the following decision of the W3C XML Plenary and
|
|
38
|
+
XML Coordination groups:
|
|
39
|
+
|
|
40
|
+
In appreciation for his vision, leadership and dedication
|
|
41
|
+
the W3C XML Plenary on this 10th day of February, 2000
|
|
42
|
+
reserves for Jon Bosak in perpetuity the XML name
|
|
43
|
+
xml:Father
|
|
44
|
+
</xs:documentation>
|
|
45
|
+
</xs:annotation>
|
|
46
|
+
|
|
47
|
+
<xs:annotation>
|
|
48
|
+
<xs:documentation>This schema defines attributes and an attribute group
|
|
49
|
+
suitable for use by
|
|
50
|
+
schemas wishing to allow xml:base, xml:lang or xml:space attributes
|
|
51
|
+
on elements they define.
|
|
52
|
+
|
|
53
|
+
To enable this, such a schema must import this schema
|
|
54
|
+
for the XML namespace, e.g. as follows:
|
|
55
|
+
<schema . . .>
|
|
56
|
+
. . .
|
|
57
|
+
<import namespace="http://www.w3.org/XML/1998/namespace"
|
|
58
|
+
schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
|
|
59
|
+
|
|
60
|
+
Subsequently, qualified reference to any of the attributes
|
|
61
|
+
or the group defined below will have the desired effect, e.g.
|
|
62
|
+
|
|
63
|
+
<type . . .>
|
|
64
|
+
. . .
|
|
65
|
+
<attributeGroup ref="xml:specialAttrs"/>
|
|
66
|
+
|
|
67
|
+
will define a type which will schema-validate an instance
|
|
68
|
+
element with any of those attributes</xs:documentation>
|
|
69
|
+
</xs:annotation>
|
|
70
|
+
|
|
71
|
+
<xs:annotation>
|
|
72
|
+
<xs:documentation>In keeping with the XML Schema WG's standard versioning
|
|
73
|
+
policy, this schema document will persist at
|
|
74
|
+
http://www.w3.org/2001/03/xml.xsd.
|
|
75
|
+
At the date of issue it can also be found at
|
|
76
|
+
http://www.w3.org/2001/xml.xsd.
|
|
77
|
+
The schema document at that URI may however change in the future,
|
|
78
|
+
in order to remain compatible with the latest version of XML Schema
|
|
79
|
+
itself. In other words, if the XML Schema namespace changes, the version
|
|
80
|
+
of this document at
|
|
81
|
+
http://www.w3.org/2001/xml.xsd will change
|
|
82
|
+
accordingly; the version at
|
|
83
|
+
http://www.w3.org/2001/03/xml.xsd will not change.
|
|
84
|
+
</xs:documentation>
|
|
85
|
+
</xs:annotation>
|
|
86
|
+
|
|
87
|
+
<xs:attribute name="lang" type="xs:language">
|
|
88
|
+
<xs:annotation>
|
|
89
|
+
<xs:documentation>In due course, we should install the relevant ISO 2- and 3-letter
|
|
90
|
+
codes as the enumerated possible values . . .</xs:documentation>
|
|
91
|
+
</xs:annotation>
|
|
92
|
+
</xs:attribute>
|
|
93
|
+
|
|
94
|
+
<xs:attribute name="space" default="preserve">
|
|
95
|
+
<xs:simpleType>
|
|
96
|
+
<xs:restriction base="xs:NCName">
|
|
97
|
+
<xs:enumeration value="default"/>
|
|
98
|
+
<xs:enumeration value="preserve"/>
|
|
99
|
+
</xs:restriction>
|
|
100
|
+
</xs:simpleType>
|
|
101
|
+
</xs:attribute>
|
|
102
|
+
|
|
103
|
+
<xs:attribute name="base" type="xs:anyURI">
|
|
104
|
+
<xs:annotation>
|
|
105
|
+
<xs:documentation>See http://www.w3.org/TR/xmlbase/ for
|
|
106
|
+
information about this attribute.</xs:documentation>
|
|
107
|
+
</xs:annotation>
|
|
108
|
+
</xs:attribute>
|
|
109
|
+
|
|
110
|
+
<xs:attributeGroup name="specialAttrs">
|
|
111
|
+
<xs:attribute ref="xml:base"/>
|
|
112
|
+
<xs:attribute ref="xml:lang"/>
|
|
113
|
+
<xs:attribute ref="xml:space"/>
|
|
114
|
+
</xs:attributeGroup>
|
|
115
|
+
|
|
116
|
+
</xs:schema>
|
data/test/benchmark.rb
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/usr/bin/env ruby -s
|
|
2
|
+
$:.unshift "#{File.dirname(__FILE__)}/../lib"
|
|
3
|
+
require 'axlsx'
|
|
4
|
+
require 'csv'
|
|
5
|
+
require 'benchmark'
|
|
6
|
+
Axlsx::trust_input = true
|
|
7
|
+
row = []
|
|
8
|
+
input = (32..126).to_a.pack('U*').chars.to_a
|
|
9
|
+
20.times { row << input.shuffle.join}
|
|
10
|
+
times = 3000
|
|
11
|
+
Benchmark.bmbm(30) do |x|
|
|
12
|
+
|
|
13
|
+
x.report('axlsx_noautowidth') {
|
|
14
|
+
p = Axlsx::Package.new
|
|
15
|
+
p.workbook do |wb|
|
|
16
|
+
wb.add_worksheet do |sheet|
|
|
17
|
+
times.times do
|
|
18
|
+
sheet << row
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
p.use_autowidth = false
|
|
23
|
+
p.serialize("example_noautowidth.xlsx")
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
x.report('axlsx') {
|
|
27
|
+
p = Axlsx::Package.new
|
|
28
|
+
p.workbook do |wb|
|
|
29
|
+
wb.add_worksheet do |sheet|
|
|
30
|
+
times.times do
|
|
31
|
+
sheet << row
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
p.serialize("example_autowidth.xlsx")
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
x.report('axlsx_shared') {
|
|
39
|
+
p = Axlsx::Package.new
|
|
40
|
+
p.workbook do |wb|
|
|
41
|
+
wb.add_worksheet do |sheet|
|
|
42
|
+
times.times do
|
|
43
|
+
sheet << row
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
p.use_shared_strings = true
|
|
48
|
+
p.serialize("example_shared.xlsx")
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
x.report('axlsx_stream') {
|
|
52
|
+
p = Axlsx::Package.new
|
|
53
|
+
p.workbook do |wb|
|
|
54
|
+
wb.add_worksheet do |sheet|
|
|
55
|
+
times.times do
|
|
56
|
+
sheet << row
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
s = p.to_stream()
|
|
61
|
+
File.open('example_streamed.xlsx', 'w') { |f| f.write(s.read) }
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
x.report('csv') {
|
|
65
|
+
CSV.open("example.csv", "wb") do |csv|
|
|
66
|
+
times.times do
|
|
67
|
+
csv << row
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
}
|
|
71
|
+
end
|
|
72
|
+
File.delete("example.csv", "example_streamed.xlsx", "example_shared.xlsx", "example_autowidth.xlsx", "example_noautowidth.xlsx")
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
require 'tc_helper.rb'
|
|
3
|
+
|
|
4
|
+
class TestContentType < Test::Unit::TestCase
|
|
5
|
+
def setup
|
|
6
|
+
@package = Axlsx::Package.new
|
|
7
|
+
@doc = Nokogiri::XML(@package.send(:content_types).to_xml_string)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_valid_document
|
|
11
|
+
schema = Nokogiri::XML::Schema(File.open(Axlsx::CONTENT_TYPES_XSD))
|
|
12
|
+
assert(schema.validate(@doc).map{ |e| puts e.message; e.message }.empty?)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_pre_built_types
|
|
16
|
+
|
|
17
|
+
o_path = "//xmlns:Override[@ContentType='%s']"
|
|
18
|
+
d_path = "//xmlns:Default[@ContentType='%s']"
|
|
19
|
+
|
|
20
|
+
#default
|
|
21
|
+
assert_equal(@doc.xpath("//xmlns:Default").size, 2, "There should be 2 default types")
|
|
22
|
+
|
|
23
|
+
node = @doc.xpath(d_path % Axlsx::XML_CT).first
|
|
24
|
+
assert_equal(node["Extension"], "#{Axlsx::XML_EX}", "xml content type invalid")
|
|
25
|
+
|
|
26
|
+
node = @doc.xpath(d_path % Axlsx::RELS_CT).first
|
|
27
|
+
assert_equal(node["Extension"],"#{Axlsx::RELS_EX}", "relationships content type invalid")
|
|
28
|
+
|
|
29
|
+
#overrride
|
|
30
|
+
assert_equal(@doc.xpath("//xmlns:Override").size, 4, "There should be 4 Override types")
|
|
31
|
+
|
|
32
|
+
node = @doc.xpath(o_path % Axlsx::APP_CT).first
|
|
33
|
+
assert_equal(node["PartName"], "/#{Axlsx::APP_PN}", "App part name invalid")
|
|
34
|
+
|
|
35
|
+
node = @doc.xpath(o_path % Axlsx::CORE_CT).first
|
|
36
|
+
assert_equal(node["PartName"], "/#{Axlsx::CORE_PN}", "Core part name invalid")
|
|
37
|
+
|
|
38
|
+
node = @doc.xpath(o_path % Axlsx::STYLES_CT).first
|
|
39
|
+
assert_equal(node["PartName"], "/xl/#{Axlsx::STYLES_PN}", "Styles part name invalid")
|
|
40
|
+
|
|
41
|
+
node = @doc.xpath(o_path % Axlsx::WORKBOOK_CT).first
|
|
42
|
+
assert_equal(node["PartName"], "/#{Axlsx::WORKBOOK_PN}", "Workbook part invalid")
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_should_get_worksheet_for_worksheets
|
|
46
|
+
o_path = "//xmlns:Override[@ContentType='%s']"
|
|
47
|
+
|
|
48
|
+
ws = @package.workbook.add_worksheet
|
|
49
|
+
doc = Nokogiri::XML(@package.send(:content_types).to_xml_string)
|
|
50
|
+
assert_equal(doc.xpath("//xmlns:Override").size, 5, "adding a worksheet should add another type")
|
|
51
|
+
assert_equal(doc.xpath(o_path % Axlsx::WORKSHEET_CT).last["PartName"], "/xl/#{ws.pn}", "Worksheet part invalid")
|
|
52
|
+
|
|
53
|
+
ws = @package.workbook.add_worksheet
|
|
54
|
+
doc = Nokogiri::XML(@package.send(:content_types).to_xml_string)
|
|
55
|
+
assert_equal(doc.xpath("//xmlns:Override").size, 6, "adding workship should add another type")
|
|
56
|
+
assert_equal(doc.xpath(o_path % Axlsx::WORKSHEET_CT).last["PartName"], "/xl/#{ws.pn}", "Worksheet part invalid")
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_drawings_and_charts_need_content_types
|
|
61
|
+
o_path = "//xmlns:Override[@ContentType='%s']"
|
|
62
|
+
ws = @package.workbook.add_worksheet
|
|
63
|
+
|
|
64
|
+
c = ws.add_chart Axlsx::Pie3DChart
|
|
65
|
+
doc = Nokogiri::XML(@package.send(:content_types).to_xml_string)
|
|
66
|
+
assert_equal(doc.xpath("//xmlns:Override").size, 7, "expected 7 types got #{doc.css("Types Override").size}")
|
|
67
|
+
assert_equal(doc.xpath(o_path % Axlsx::DRAWING_CT).first["PartName"], "/xl/#{ws.drawing.pn}", "Drawing part name invlid")
|
|
68
|
+
assert_equal(doc.xpath(o_path % Axlsx::CHART_CT).last["PartName"], "/xl/#{c.pn}", "Chart part name invlid")
|
|
69
|
+
|
|
70
|
+
c = ws.add_chart Axlsx::Pie3DChart
|
|
71
|
+
doc = Nokogiri::XML(@package.send(:content_types).to_xml_string)
|
|
72
|
+
assert_equal(doc.xpath("//xmlns:Override").size, 8, "expected 7 types got #{doc.css("Types Override").size}")
|
|
73
|
+
assert_equal(doc.xpath(o_path % Axlsx::CHART_CT).last["PartName"], "/xl/#{c.pn}", "Chart part name invlid")
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
require 'tc_helper.rb'
|
|
3
|
+
|
|
4
|
+
class TestDefault < Test::Unit::TestCase
|
|
5
|
+
|
|
6
|
+
def test_content_type_restriction
|
|
7
|
+
assert_raise(ArgumentError, "raises argument error if invlalid ContentType is") { Axlsx::Default.new :ContentType=>"asdf" }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_to_xml_string
|
|
11
|
+
type = Axlsx::Default.new :Extension=>"xml", :ContentType=>Axlsx::XML_CT
|
|
12
|
+
doc = Nokogiri::XML(type.to_xml_string)
|
|
13
|
+
assert_equal(doc.xpath("Default[@ContentType='#{Axlsx::XML_CT}']").size, 1)
|
|
14
|
+
assert_equal(doc.xpath("Default[@Extension='xml']").size, 1)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
class TestOverride < Test::Unit::TestCase
|
|
3
|
+
|
|
4
|
+
def test_content_type_restriction
|
|
5
|
+
assert_raise(ArgumentError, "requires known content type") { Axlsx::Override.new :ContentType=>"asdf" }
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_to_xml
|
|
9
|
+
type = Axlsx::Override.new :PartName=>"somechart.xml", :ContentType=>Axlsx::CHART_CT
|
|
10
|
+
doc = Nokogiri::XML(type.to_xml_string)
|
|
11
|
+
assert_equal(doc.xpath("Override[@ContentType='#{Axlsx::CHART_CT}']").size, 1)
|
|
12
|
+
assert_equal(doc.xpath("Override[@PartName='somechart.xml']").size, 1)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestApp < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
options = {
|
|
6
|
+
:'Template' => 'Foo.xlt',
|
|
7
|
+
:'Manager' => 'Penny',
|
|
8
|
+
:'Company' => "Bob's Repair",
|
|
9
|
+
:'Pages' => 1,
|
|
10
|
+
:'Words' => 2,
|
|
11
|
+
:'Characters' => 7,
|
|
12
|
+
:'PresentationFormat' => 'any',
|
|
13
|
+
:'Lines' => 1,
|
|
14
|
+
:'Paragraphs' => 1,
|
|
15
|
+
:'Slides' => 4,
|
|
16
|
+
:'Notes' => 1,
|
|
17
|
+
:'TotalTime' => 2,
|
|
18
|
+
:'HidddenSlides' => 3,
|
|
19
|
+
:'MMClips' => 10,
|
|
20
|
+
:'ScaleCrop' => true,
|
|
21
|
+
:'LinksUpToDate' => true,
|
|
22
|
+
:'CharactersWithSpaces' => 9,
|
|
23
|
+
:'SharedDoc' => false,
|
|
24
|
+
:'HyperlinkBase' => 'foo',
|
|
25
|
+
:'HyperlInksChanged' => false,
|
|
26
|
+
:'Application' => 'axlsx',
|
|
27
|
+
:'AppVersion' => '1.1.5',
|
|
28
|
+
:'DocSecurity' => 0
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@app = Axlsx::App.new options
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
def test_valid_document
|
|
35
|
+
schema = Nokogiri::XML::Schema(File.open(Axlsx::APP_XSD))
|
|
36
|
+
doc = Nokogiri::XML(@app.to_xml_string)
|
|
37
|
+
errors = []
|
|
38
|
+
schema.validate(doc).each do |error|
|
|
39
|
+
errors << error
|
|
40
|
+
end
|
|
41
|
+
assert_equal(errors.size, 0, "app.xml invalid" + errors.map{ |e| e.message }.to_s)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestCore < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@core = Axlsx::Core.new
|
|
7
|
+
# could still see some false positives if the second changes between the next two calls
|
|
8
|
+
@time = Time.now.strftime('%Y-%m-%dT%H:%M:%SZ')
|
|
9
|
+
@doc = Nokogiri::XML(@core.to_xml_string)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_valid_document
|
|
13
|
+
schema = Nokogiri::XML::Schema(File.open(Axlsx::CORE_XSD))
|
|
14
|
+
errors = []
|
|
15
|
+
schema.validate(@doc).each do |error|
|
|
16
|
+
puts error.message
|
|
17
|
+
errors << error
|
|
18
|
+
end
|
|
19
|
+
assert_equal(errors.size, 0, "core.xml Invalid" + errors.map{ |e| e.message }.to_s)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_populates_created
|
|
23
|
+
assert_equal(@doc.xpath('//dcterms:created').text, @time, "dcterms:created incorrect")
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_created_as_option
|
|
27
|
+
time = Time.utc(2013, 1, 1, 12, 00)
|
|
28
|
+
c = Axlsx::Core.new :created => time
|
|
29
|
+
doc = Nokogiri::XML(c.to_xml_string)
|
|
30
|
+
assert_equal(doc.xpath('//dcterms:created').text, time.xmlschema, "dcterms:created incorrect")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_populates_default_name
|
|
34
|
+
assert_equal(@doc.xpath('//dc:creator').text, "axlsx", "Default name not populated")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_creator_as_option
|
|
38
|
+
c = Axlsx::Core.new :creator => "some guy"
|
|
39
|
+
doc = Nokogiri::XML(c.to_xml_string)
|
|
40
|
+
assert(doc.xpath('//dc:creator').text == "some guy")
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestAxes < Test::Unit::TestCase
|
|
4
|
+
def test_constructor_requires_cat_axis_first
|
|
5
|
+
assert_raise(ArgumentError) { Axlsx::Axes.new(:val_axis => Axlsx::ValAxis, :cat_axis => Axlsx::CatAxis) }
|
|
6
|
+
assert_nothing_raised { Axlsx::Axes.new(:cat_axis => Axlsx::CatAxis, :val_axis => Axlsx::ValAxis) }
|
|
7
|
+
end
|
|
8
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestAxis < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@axis = Axlsx::Axis.new :gridlines => false, :title => 'Foo'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def test_initialization
|
|
10
|
+
assert_equal(@axis.ax_pos, :b, "axis position default incorrect")
|
|
11
|
+
assert_equal(@axis.tick_lbl_pos, :nextTo, "tick label position default incorrect")
|
|
12
|
+
assert_equal(@axis.tick_lbl_pos, :nextTo, "tick label position default incorrect")
|
|
13
|
+
assert_equal(@axis.crosses, :autoZero, "tick label position default incorrect")
|
|
14
|
+
assert(@axis.scaling.is_a?(Axlsx::Scaling) && @axis.scaling.orientation == :minMax, "scaling default incorrect")
|
|
15
|
+
assert_equal('Foo', @axis.title.text)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_color
|
|
19
|
+
@axis.color = "00FF00"
|
|
20
|
+
@axis.cross_axis = Axlsx::CatAxis.new
|
|
21
|
+
str = '<?xml version="1.0" encoding="UTF-8"?>'
|
|
22
|
+
str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '" xmlns:a="' << Axlsx::XML_NS_A << '">'
|
|
23
|
+
doc = Nokogiri::XML(@axis.to_xml_string(str))
|
|
24
|
+
assert(doc.xpath("//a:srgbClr[@val='00FF00']"))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_cell_based_axis_title
|
|
28
|
+
p = Axlsx::Package.new
|
|
29
|
+
p.workbook.add_worksheet(:name=>'foosheet') do |sheet|
|
|
30
|
+
sheet.add_row ['battle victories']
|
|
31
|
+
sheet.add_row ['bird', 1, 2, 1]
|
|
32
|
+
sheet.add_row ['cat', 7, 9, 10]
|
|
33
|
+
sheet.add_chart(Axlsx::Line3DChart) do |chart|
|
|
34
|
+
chart.add_series :data => sheet['B2:D2'], :labels => sheet['B1']
|
|
35
|
+
chart.val_axis.title = sheet['A1']
|
|
36
|
+
assert_equal('battle victories', chart.val_axis.title.text)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_axis_position
|
|
42
|
+
assert_raise(ArgumentError, "requires valid axis position") { @axis.ax_pos = :nowhere }
|
|
43
|
+
assert_nothing_raised("accepts valid axis position") { @axis.ax_pos = :r }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_label_rotation
|
|
47
|
+
assert_raise(ArgumentError, "requires valid angle") { @axis.label_rotation = :nowhere }
|
|
48
|
+
assert_raise(ArgumentError, "requires valid angle") { @axis.label_rotation = 91 }
|
|
49
|
+
assert_raise(ArgumentError, "requires valid angle") { @axis.label_rotation = -91 }
|
|
50
|
+
assert_nothing_raised("accepts valid angle") { @axis.label_rotation = 45 }
|
|
51
|
+
assert_equal(@axis.label_rotation, 45 * 60000)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_tick_label_position
|
|
55
|
+
assert_raise(ArgumentError, "requires valid tick label position") { @axis.tick_lbl_pos = :nowhere }
|
|
56
|
+
assert_nothing_raised("accepts valid tick label position") { @axis.tick_lbl_pos = :high }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_format_code
|
|
60
|
+
assert_raise(ArgumentError, "requires valid format code") { @axis.format_code = :high }
|
|
61
|
+
assert_nothing_raised("accepts valid format code") { @axis.format_code = "00.##" }
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_crosses
|
|
65
|
+
assert_raise(ArgumentError, "requires valid crosses") { @axis.crosses = 1 }
|
|
66
|
+
assert_nothing_raised("accepts valid crosses") { @axis.crosses = :min }
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_gridlines
|
|
70
|
+
assert_raise(ArgumentError, "requires valid gridlines") { @axis.gridlines = 'alice' }
|
|
71
|
+
assert_nothing_raised("accepts valid crosses") { @axis.gridlines = false }
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_to_xml_string
|
|
75
|
+
@axis.cross_axis = Axlsx::CatAxis.new
|
|
76
|
+
str = '<?xml version="1.0" encoding="UTF-8"?>'
|
|
77
|
+
str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '" xmlns:a="' << Axlsx::XML_NS_A << '">'
|
|
78
|
+
doc = Nokogiri::XML(@axis.to_xml_string(str))
|
|
79
|
+
assert(doc.xpath('//a:noFill'))
|
|
80
|
+
assert(doc.xpath("//c:crosses[@val='#{@axis.crosses.to_s}']"))
|
|
81
|
+
assert(doc.xpath("//c:crossAx[@val='#{@axis.cross_axis.to_s}']"))
|
|
82
|
+
assert(doc.xpath("//a:bodyPr[@rot='#{@axis.label_rotation.to_s}']"))
|
|
83
|
+
assert(doc.xpath("//a:t[text()='Foo']"))
|
|
84
|
+
end
|
|
85
|
+
end
|