From: Andreas Beeker Date: Fri, 24 Jul 2015 21:47:55 +0000 (+0000) Subject: merged common_sl branch to trunk X-Git-Tag: REL_3_13_FINAL~207 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7481844c98f174b1a0cedc56385872b8f4e343a2;p=poi.git merged common_sl branch to trunk git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1692593 13f79535-47bb-0310-9956-ffa450edef68 --- 7481844c98f174b1a0cedc56385872b8f4e343a2 diff --cc build.xml index ca705de4b5,00b6a386b2..2eddf02ad4 --- a/build.xml +++ b/build.xml @@@ -107,6 -107,12 +107,11 @@@ under the License + - + + + + @@@ -702,7 -709,39 +708,39 @@@ - - ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- ++ diff --cc src/examples/src/org/apache/poi/hslf/examples/ApacheconEU08.java index 25f1eab9c5,ce6bf5db03..8ed05d7114 --- a/src/examples/src/org/apache/poi/hslf/examples/ApacheconEU08.java +++ b/src/examples/src/org/apache/poi/hslf/examples/ApacheconEU08.java @@@ -17,13 -17,16 +17,29 @@@ package org.apache.poi.hslf.examples; - import org.apache.poi.hslf.usermodel.*; - import org.apache.poi.hslf.model.*; - import org.apache.poi.hslf.record.TextHeaderAtom; - - import java.io.IOException; -import java.awt.*; ++import java.awt.Color; ++import java.awt.Dimension; ++import java.awt.Font; ++import java.awt.Graphics2D; ++import java.awt.Rectangle; import java.io.FileOutputStream; - import java.awt.*; + import java.io.IOException; + import java.util.List; + -import org.apache.poi.hslf.model.*; ++import org.apache.poi.hslf.model.Line; ++import org.apache.poi.hslf.model.PPGraphics2D; + import org.apache.poi.hslf.record.TextHeaderAtom; -import org.apache.poi.hslf.usermodel.*; ++import org.apache.poi.hslf.usermodel.HSLFAutoShape; ++import org.apache.poi.hslf.usermodel.HSLFGroupShape; ++import org.apache.poi.hslf.usermodel.HSLFSlide; ++import org.apache.poi.hslf.usermodel.HSLFSlideShow; ++import org.apache.poi.hslf.usermodel.HSLFTable; ++import org.apache.poi.hslf.usermodel.HSLFTableCell; ++import org.apache.poi.hslf.usermodel.HSLFTextBox; ++import org.apache.poi.hslf.usermodel.HSLFTextParagraph; ++import org.apache.poi.hslf.usermodel.HSLFTextRun; + import org.apache.poi.sl.usermodel.ShapeType; + import org.apache.poi.sl.usermodel.VerticalAlignment; /** * Presentation for Fast Feather Track on ApacheconEU 2008 diff --cc src/examples/src/org/apache/poi/hslf/examples/BulletsDemo.java index 3a97b61aa0,a047d8b80a..3c706e3e73 --- a/src/examples/src/org/apache/poi/hslf/examples/BulletsDemo.java +++ b/src/examples/src/org/apache/poi/hslf/examples/BulletsDemo.java @@@ -17,13 -17,10 +17,13 @@@ package org.apache.poi.hslf.examples; - import org.apache.poi.hslf.usermodel.SlideShow; - import org.apache.poi.hslf.usermodel.RichTextRun; - import org.apache.poi.hslf.model.Slide; - import org.apache.poi.hslf.model.TextBox; -import org.apache.poi.hslf.usermodel.*; -- import java.io.FileOutputStream; ++import org.apache.poi.hslf.usermodel.HSLFSlide; ++import org.apache.poi.hslf.usermodel.HSLFSlideShow; ++import org.apache.poi.hslf.usermodel.HSLFTextBox; ++import org.apache.poi.hslf.usermodel.HSLFTextParagraph; ++ /** * How to create a single-level bulleted list * and change some of the bullet attributes diff --cc src/examples/src/org/apache/poi/hslf/examples/CreateHyperlink.java index 0aa8db32de,8732152324..4e8219b260 --- a/src/examples/src/org/apache/poi/hslf/examples/CreateHyperlink.java +++ b/src/examples/src/org/apache/poi/hslf/examples/CreateHyperlink.java @@@ -17,11 -17,11 +17,13 @@@ package org.apache.poi.hslf.examples; - import org.apache.poi.hslf.usermodel.SlideShow; -import org.apache.poi.hslf.usermodel.*; --import org.apache.poi.hslf.model.*; -- ++import java.awt.Rectangle; import java.io.FileOutputStream; --import java.awt.*; ++ ++import org.apache.poi.hslf.usermodel.HSLFHyperlink; ++import org.apache.poi.hslf.usermodel.HSLFSlide; ++import org.apache.poi.hslf.usermodel.HSLFSlideShow; ++import org.apache.poi.hslf.usermodel.HSLFTextBox; /** * Demonstrates how to create hyperlinks in PowerPoint presentations @@@ -30,15 -30,15 +32,16 @@@ */ public final class CreateHyperlink { ++ @SuppressWarnings("unused") public static void main(String[] args) throws Exception { - SlideShow ppt = new SlideShow(); + HSLFSlideShow ppt = new HSLFSlideShow(); - Slide slideA = ppt.createSlide(); - Slide slideB = ppt.createSlide(); - Slide slideC = ppt.createSlide(); + HSLFSlide slideA = ppt.createSlide(); + HSLFSlide slideB = ppt.createSlide(); + HSLFSlide slideC = ppt.createSlide(); // link to a URL - TextBox textBox1 = new TextBox(); + HSLFTextBox textBox1 = new HSLFTextBox(); textBox1.setText("Apache POI"); textBox1.setAnchor(new Rectangle(100, 100, 200, 50)); diff --cc src/examples/src/org/apache/poi/hslf/examples/DataExtraction.java index a278e894b6,d1e9a21c27..3c50699b80 --- a/src/examples/src/org/apache/poi/hslf/examples/DataExtraction.java +++ b/src/examples/src/org/apache/poi/hslf/examples/DataExtraction.java @@@ -17,14 -17,14 +17,22 @@@ package org.apache.poi.hslf.examples; --import org.apache.poi.hslf.usermodel.*; --import org.apache.poi.hslf.model.*; ++import java.io.FileInputStream; ++import java.io.FileOutputStream; ++import java.io.InputStream; ++ ++import org.apache.poi.hslf.model.OLEShape; ++import org.apache.poi.hslf.usermodel.HSLFObjectData; ++import org.apache.poi.hslf.usermodel.HSLFPictureData; ++import org.apache.poi.hslf.usermodel.HSLFPictureShape; ++import org.apache.poi.hslf.usermodel.HSLFShape; ++import org.apache.poi.hslf.usermodel.HSLFSlide; ++import org.apache.poi.hslf.usermodel.HSLFSlideShow; ++import org.apache.poi.hslf.usermodel.HSLFSoundData; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hwpf.HWPFDocument; --import org.apache.poi.hwpf.usermodel.Range; import org.apache.poi.hwpf.usermodel.Paragraph; -- --import java.io.*; ++import org.apache.poi.hwpf.usermodel.Range; /** * Demonstrates how you can extract misc embedded data from a ppt file diff --cc src/examples/src/org/apache/poi/hslf/examples/Graphics2DDemo.java index 8d7921146a,cd900902d8..565c520e6c --- a/src/examples/src/org/apache/poi/hslf/examples/Graphics2DDemo.java +++ b/src/examples/src/org/apache/poi/hslf/examples/Graphics2DDemo.java @@@ -17,12 -17,12 +17,17 @@@ package org.apache.poi.hslf.examples; - import org.apache.poi.hslf.usermodel.SlideShow; -import org.apache.poi.hslf.usermodel.*; --import org.apache.poi.hslf.model.*; -- --import java.awt.*; ++import java.awt.Color; ++import java.awt.Font; ++import java.awt.Graphics2D; ++import java.awt.Rectangle; import java.io.FileOutputStream; ++import org.apache.poi.hslf.model.PPGraphics2D; ++import org.apache.poi.hslf.usermodel.HSLFGroupShape; ++import org.apache.poi.hslf.usermodel.HSLFSlide; ++import org.apache.poi.hslf.usermodel.HSLFSlideShow; ++ /** * Demonstrates how to draw into a slide using the HSLF Graphics2D driver. * diff --cc src/examples/src/org/apache/poi/hslf/examples/HeadersFootersDemo.java index 3ebcecc90f,b335e1f1e1..93b78ce81d --- a/src/examples/src/org/apache/poi/hslf/examples/HeadersFootersDemo.java +++ b/src/examples/src/org/apache/poi/hslf/examples/HeadersFootersDemo.java @@@ -16,12 -16,12 +16,12 @@@ ==================================================================== */ package org.apache.poi.hslf.examples; - import org.apache.poi.hslf.usermodel.SlideShow; - import org.apache.poi.hslf.model.HeadersFooters; - import org.apache.poi.hslf.model.Slide; - +import java.io.FileOutputStream; + ++import org.apache.poi.hslf.model.HeadersFooters; + import org.apache.poi.hslf.usermodel.HSLFSlide; + import org.apache.poi.hslf.usermodel.HSLFSlideShow; -import org.apache.poi.hslf.model.HeadersFooters; - -import java.io.FileOutputStream; + /** * Demonstrates how to set headers / footers * diff --cc src/examples/src/org/apache/poi/hslf/examples/Hyperlinks.java index 968426c513,9e88082508..c054d2e7ac --- a/src/examples/src/org/apache/poi/hslf/examples/Hyperlinks.java +++ b/src/examples/src/org/apache/poi/hslf/examples/Hyperlinks.java @@@ -17,13 -17,10 +17,14 @@@ package org.apache.poi.hslf.examples; - import org.apache.poi.hslf.usermodel.SlideShow; - import org.apache.poi.hslf.model.Slide; - import org.apache.poi.hslf.model.TextRun; - import org.apache.poi.hslf.model.Hyperlink; - import org.apache.poi.hslf.model.Shape; - import java.io.FileInputStream; + import java.util.List; + -import org.apache.poi.hslf.usermodel.*; ++import org.apache.poi.hslf.usermodel.HSLFHyperlink; ++import org.apache.poi.hslf.usermodel.HSLFShape; ++import org.apache.poi.hslf.usermodel.HSLFSlide; ++import org.apache.poi.hslf.usermodel.HSLFSlideShow; ++import org.apache.poi.hslf.usermodel.HSLFTextParagraph; /** * Demonstrates how to read hyperlinks from a presentation diff --cc src/examples/src/org/apache/poi/hslf/examples/PPT2PNG.java index 99037d3264,8981c64c3c..d8fe8f41f9 --- a/src/examples/src/org/apache/poi/hslf/examples/PPT2PNG.java +++ b/src/examples/src/org/apache/poi/hslf/examples/PPT2PNG.java @@@ -17,15 -17,16 +17,19 @@@ package org.apache.poi.hslf.examples; - import org.apache.poi.hslf.usermodel.*; - import org.apache.poi.hslf.model.*; -import java.awt.*; ++import java.awt.Color; ++import java.awt.Dimension; ++import java.awt.Graphics2D; ++import java.awt.RenderingHints; + import java.awt.geom.Rectangle2D; + import java.awt.image.BufferedImage; + import java.io.FileInputStream; + import java.io.FileOutputStream; import javax.imageio.ImageIO; - import java.io.FileOutputStream; - import java.io.FileInputStream; - import java.awt.*; - import java.awt.image.BufferedImage; - import java.awt.geom.Rectangle2D; + + import org.apache.poi.hslf.usermodel.HSLFSlide; + import org.apache.poi.hslf.usermodel.HSLFSlideShow; /** * Demonstrates how you can use HSLF to convert each slide into a PNG image diff --cc src/examples/src/org/apache/poi/hslf/examples/SoundFinder.java index b31019db94,3cdb101be5..75180c2d19 --- a/src/examples/src/org/apache/poi/hslf/examples/SoundFinder.java +++ b/src/examples/src/org/apache/poi/hslf/examples/SoundFinder.java @@@ -15,15 -15,13 +15,18 @@@ limitations under the License. ==================================================================== */ package org.apache.poi.hslf.examples; - import org.apache.poi.ddf.*; - import org.apache.poi.hslf.model.*; + import java.io.FileInputStream; -import java.util.Iterator; -import java.util.List; + -import org.apache.poi.ddf.*; -import org.apache.poi.hslf.record.*; -import org.apache.poi.hslf.usermodel.*; ++import org.apache.poi.ddf.EscherClientDataRecord; ++import org.apache.poi.ddf.EscherContainerRecord; ++import org.apache.poi.ddf.EscherRecord; +import org.apache.poi.hslf.record.InteractiveInfo; +import org.apache.poi.hslf.record.InteractiveInfoAtom; +import org.apache.poi.hslf.record.Record; - import org.apache.poi.hslf.usermodel.*; - import java.io.FileInputStream; - import java.util.Iterator; - import java.util.List; ++import org.apache.poi.hslf.usermodel.HSLFShape; ++import org.apache.poi.hslf.usermodel.HSLFSlide; ++import org.apache.poi.hslf.usermodel.HSLFSlideShow; ++import org.apache.poi.hslf.usermodel.HSLFSoundData; /** * For each slide iterate over shapes and found associated sound data. @@@ -58,16 -55,16 +60,12 @@@ public class SoundFinder int soundRef = -1; //dive into the shape container and search for InteractiveInfoAtom EscherContainerRecord spContainer = shape.getSpContainer(); -- List spchild = spContainer.getChildRecords(); -- for (Iterator it = spchild.iterator(); it.hasNext();) { -- EscherRecord obj = (EscherRecord) it.next(); ++ for (EscherRecord obj : spContainer.getChildRecords()) { if (obj.getRecordId() == EscherClientDataRecord.RECORD_ID) { byte[] data = obj.serialize(); -- Record[] records = Record.findChildRecords(data, 8, --data.length - 8); -- for (int j = 0; j < records.length; j++) { -- if (records[j] instanceof InteractiveInfo) { -- InteractiveInfoAtom info = ((InteractiveInfo)records[j]).getInteractiveInfoAtom(); ++ for (Record record : Record.findChildRecords(data, 8, data.length - 8)) { ++ if (record instanceof InteractiveInfo) { ++ InteractiveInfoAtom info = ((InteractiveInfo)record).getInteractiveInfoAtom(); if (info.getAction() == InteractiveInfoAtom.ACTION_MEDIA) { soundRef = info.getSoundRef(); } diff --cc src/examples/src/org/apache/poi/hslf/examples/TableDemo.java index 44935c05ac,93463aaa91..12f66e3c17 --- a/src/examples/src/org/apache/poi/hslf/examples/TableDemo.java +++ b/src/examples/src/org/apache/poi/hslf/examples/TableDemo.java @@@ -17,13 -17,14 +17,18 @@@ package org.apache.poi.hslf.examples; - import org.apache.poi.hslf.usermodel.SlideShow; - import org.apache.poi.hslf.usermodel.RichTextRun; -import org.apache.poi.hslf.usermodel.*; --import org.apache.poi.hslf.model.*; - - import java.awt.*; ++import java.awt.Color; +import java.io.FileOutputStream; + ++import org.apache.poi.hslf.model.Line; ++import org.apache.poi.hslf.usermodel.HSLFSlide; ++import org.apache.poi.hslf.usermodel.HSLFSlideShow; ++import org.apache.poi.hslf.usermodel.HSLFTable; ++import org.apache.poi.hslf.usermodel.HSLFTableCell; ++import org.apache.poi.hslf.usermodel.HSLFTextRun; + import org.apache.poi.sl.usermodel.TextParagraph.TextAlign; + import org.apache.poi.sl.usermodel.VerticalAlignment; + -import java.awt.*; -import java.io.FileOutputStream; - /** * Demonstrates how to create tables * diff --cc src/examples/src/org/apache/poi/hssf/usermodel/examples/EmeddedObjects.java index bb6f19d0a5,c656e7c5c6..9af41063eb --- a/src/examples/src/org/apache/poi/hssf/usermodel/examples/EmeddedObjects.java +++ b/src/examples/src/org/apache/poi/hssf/usermodel/examples/EmeddedObjects.java @@@ -16,21 -16,21 +16,23 @@@ ==================================================================== */ package org.apache.poi.hssf.usermodel.examples; --import org.apache.poi.hssf.usermodel.*; ++import java.io.FileInputStream; ++import java.util.Iterator; ++ ++import org.apache.poi.hslf.usermodel.HSLFSlideShow; ++import org.apache.poi.hslf.usermodel.HSLFSlideShowImpl; ++import org.apache.poi.hssf.usermodel.HSSFObjectData; ++import org.apache.poi.hssf.usermodel.HSSFWorkbook; ++import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.Entry; import org.apache.poi.poifs.filesystem.POIFSFileSystem; --import org.apache.poi.hwpf.HWPFDocument; - import org.apache.poi.hslf.HSLFSlideShow; - import org.apache.poi.hslf.usermodel.SlideShow; -import org.apache.poi.hslf.usermodel.HSLFSlideShow; -import org.apache.poi.hslf.usermodel.HSLFSlideShowImpl; -- --import java.io.FileInputStream; --import java.util.Iterator; /** * Demonstrates how you can extract embedded data from a .xls file */ public class EmeddedObjects { ++ @SuppressWarnings("unused") public static void main(String[] args) throws Exception { POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(args[0])); HSSFWorkbook workbook = new HSSFWorkbook(fs); @@@ -41,6 -41,6 +43,7 @@@ DirectoryNode dn = (DirectoryNode) obj.getDirectory(); HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(dn, fs, false); //System.out.println(entry.getName() + ": " + embeddedWorkbook.getNumberOfSheets()); ++ embeddedWorkbook.close(); } else if (oleName.equals("Document")) { DirectoryNode dn = (DirectoryNode) obj.getDirectory(); HWPFDocument embeddedWordDocument = new HWPFDocument(dn); @@@ -53,8 -53,8 +56,8 @@@ if(obj.hasDirectoryEntry()){ // The DirectoryEntry is a DocumentNode. Examine its entries to find out what it is DirectoryNode dn = (DirectoryNode) obj.getDirectory(); -- for (Iterator entries = dn.getEntries(); entries.hasNext();) { -- Entry entry = (Entry) entries.next(); ++ for (Iterator entries = dn.getEntries(); entries.hasNext();) { ++ Entry entry = entries.next(); //System.out.println(oleName + "." + entry.getName()); } } else { @@@ -64,5 -64,5 +67,6 @@@ } } } ++ workbook.close(); } } diff --cc src/examples/src/org/apache/poi/xslf/usermodel/DataExtraction.java index b7e08fc6f1,5437b5dea4..df29334d9d --- a/src/examples/src/org/apache/poi/xslf/usermodel/DataExtraction.java +++ b/src/examples/src/org/apache/poi/xslf/usermodel/DataExtraction.java @@@ -19,14 -19,14 +19,13 @@@ package org.apache.poi.xslf.usermodel; --import org.apache.poi.openxml4j.opc.PackagePart; -- --import java.awt.*; --import java.awt.geom.Rectangle2D; ++import java.awt.Dimension; import java.io.FileInputStream; import java.io.InputStream; import java.util.List; ++import org.apache.poi.openxml4j.opc.PackagePart; ++ /** * Demonstrates how you can extract data from a .pptx file * @@@ -34,6 -34,6 +33,7 @@@ */ public final class DataExtraction { ++ @SuppressWarnings("unused") public static void main(String args[]) throws Exception { if (args.length == 0) { @@@ -89,6 -88,6 +88,8 @@@ } } } ++ ++ ppt.close(); } } diff --cc src/examples/src/org/apache/poi/xslf/usermodel/MergePresentations.java index 994f94c259,994f94c259..38e9285013 --- a/src/examples/src/org/apache/poi/xslf/usermodel/MergePresentations.java +++ b/src/examples/src/org/apache/poi/xslf/usermodel/MergePresentations.java @@@ -40,11 -40,11 +40,15 @@@ public final class MergePresentations for(XSLFSlide srcSlide : src.getSlides()){ ppt.createSlide().importContent(srcSlide); } ++ ++ src.close(); } FileOutputStream out = new FileOutputStream("merged.pptx"); ppt.write(out); out.close(); ++ ++ ppt.close(); } } diff --cc src/examples/src/org/apache/poi/xslf/usermodel/PieChartDemo.java index de90c52d20,e399d3d0ed..df98b92964 --- a/src/examples/src/org/apache/poi/xslf/usermodel/PieChartDemo.java +++ b/src/examples/src/org/apache/poi/xslf/usermodel/PieChartDemo.java @@@ -63,11 -63,11 +63,12 @@@ public class PieChartDemo } BufferedReader modelReader = new BufferedReader(new FileReader(args[1])); ++ XMLSlideShow pptx = null; try { String chartTitle = modelReader.readLine(); // first line is chart title -- XMLSlideShow pptx = new XMLSlideShow(new FileInputStream(args[0])); - XSLFSlide slide = pptx.getSlides()[0]; ++ pptx = new XMLSlideShow(new FileInputStream(args[0])); + XSLFSlide slide = pptx.getSlides().get(0); // find chart in the slide XSLFChart chart = null; @@@ -157,6 -157,6 +158,7 @@@ wb.close(); } } finally { ++ if (pptx != null) pptx.close(); modelReader.close(); } } diff --cc src/examples/src/org/apache/poi/xslf/usermodel/Tutorial1.java index 93d437b913,f552ea88fc..60f5d7121d --- a/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial1.java +++ b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial1.java @@@ -56,17 -56,17 +56,19 @@@ public class Tutorial1 // we are going to add text by paragraphs. Clear the default placehoder text before that bodyPlaceholder.clearText(); XSLFTextParagraph p1 = bodyPlaceholder.addNewTextParagraph(); - p1.setLevel(0); + p1.setIndentLevel(0); p1.addNewTextRun().setText("Level1 text"); XSLFTextParagraph p2 = bodyPlaceholder.addNewTextParagraph(); - p2.setLevel(1); + p2.setIndentLevel(1); p2.addNewTextRun().setText("Level2 text"); XSLFTextParagraph p3 = bodyPlaceholder.addNewTextParagraph(); - p3.setLevel(3); - p3.setIndentLevel(3); ++ p3.setIndentLevel(2); p3.addNewTextRun().setText("Level3 text"); FileOutputStream out = new FileOutputStream("slides.pptx"); ppt.write(out); out.close(); ++ ++ ppt.close(); } } diff --cc src/examples/src/org/apache/poi/xslf/usermodel/Tutorial2.java index 373f01f33f,dcd0dea77c..af05962eeb --- a/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial2.java +++ b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial2.java @@@ -19,7 -19,7 +19,8 @@@ package org.apache.poi.xslf.usermodel; --import java.awt.*; ++import java.awt.Color; ++import java.awt.Rectangle; import java.io.FileOutputStream; import java.io.IOException; @@@ -78,5 -78,5 +79,7 @@@ public class Tutorial2 FileOutputStream out = new FileOutputStream("text.pptx"); ppt.write(out); out.close(); ++ ++ ppt.close(); } } diff --cc src/examples/src/org/apache/poi/xslf/usermodel/Tutorial3.java index a5e01387da,a5e01387da..54347b4c32 --- a/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial3.java +++ b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial3.java @@@ -19,7 -19,7 +19,7 @@@ package org.apache.poi.xslf.usermodel; --import java.awt.*; ++import java.awt.Rectangle; import java.io.FileOutputStream; import java.io.IOException; @@@ -43,5 -43,5 +43,7 @@@ public class Tutorial3 FileOutputStream out = new FileOutputStream("title.pptx"); ppt.write(out); out.close(); ++ ++ ppt.close(); } } diff --cc src/examples/src/org/apache/poi/xslf/usermodel/Tutorial4.java index ea4fba320c,926bc0d4bf..0742cddea4 --- a/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial4.java +++ b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial4.java @@@ -85,5 -87,5 +87,7 @@@ public class Tutorial4 FileOutputStream out = new FileOutputStream("table.pptx"); ppt.write(out); out.close(); ++ ++ ppt.close(); } } diff --cc src/examples/src/org/apache/poi/xslf/usermodel/Tutorial5.java index a64e25ad72,a64e25ad72..da7b980bde --- a/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial5.java +++ b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial5.java @@@ -46,5 -46,5 +46,7 @@@ public class Tutorial5 FileOutputStream out = new FileOutputStream("images.pptx"); ppt.write(out); out.close(); ++ ++ ppt.close(); } } diff --cc src/examples/src/org/apache/poi/xslf/usermodel/Tutorial6.java index fc278cbe90,fc278cbe90..e3fdd85df2 --- a/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial6.java +++ b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial6.java @@@ -19,7 -19,7 +19,7 @@@ package org.apache.poi.xslf.usermodel; --import java.awt.*; ++import java.awt.Rectangle; import java.io.FileOutputStream; import java.io.IOException; @@@ -55,5 -55,5 +55,7 @@@ public class Tutorial6 FileOutputStream out = new FileOutputStream("hyperlinks.pptx"); ppt.write(out); out.close(); ++ ++ ppt.close(); } } diff --cc src/examples/src/org/apache/poi/xslf/usermodel/Tutorial7.java index a80f23cad7,443d5684d6..26f822d1c7 --- a/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial7.java +++ b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial7.java @@@ -19,7 -19,7 +19,8 @@@ package org.apache.poi.xslf.usermodel; --import java.awt.*; ++import java.awt.Color; ++import java.awt.Rectangle; import java.io.FileOutputStream; import java.io.IOException; @@@ -81,5 -83,5 +84,7 @@@ public class Tutorial7 FileOutputStream out = new FileOutputStream("list.pptx"); ppt.write(out); out.close(); ++ ++ ppt.close(); } } diff --cc src/java/org/apache/poi/sl/draw/DrawFreeformShape.java index 0000000000,b8dd7c3f20..1c3d6c07b4 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/DrawFreeformShape.java +++ b/src/java/org/apache/poi/sl/draw/DrawFreeformShape.java @@@ -1,0 -1,26 +1,47 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw; + -import org.apache.poi.sl.usermodel.*; ++import java.awt.Graphics2D; ++import java.util.ArrayList; ++import java.util.Collection; ++import java.util.List; ++ ++import org.apache.poi.sl.draw.geom.Outline; ++import org.apache.poi.sl.draw.geom.Path; ++import org.apache.poi.sl.usermodel.FillStyle; ++import org.apache.poi.sl.usermodel.FreeformShape; ++import org.apache.poi.sl.usermodel.StrokeStyle; ++import org.apache.poi.sl.usermodel.TextParagraph; ++import org.apache.poi.sl.usermodel.TextRun; + + public class DrawFreeformShape>> extends DrawAutoShape { + public DrawFreeformShape(T shape) { + super(shape); + } ++ ++ protected Collection computeOutlines(Graphics2D graphics) { ++ List lst = new ArrayList(); ++ java.awt.Shape sh = shape.getPath(); ++ FillStyle fs = shape.getFillStyle(); ++ StrokeStyle ss = shape.getStrokeStyle(); ++ Path path = new Path(fs != null, ss != null); ++ lst.add(new Outline(sh, path)); ++ return lst; ++ } + } diff --cc src/java/org/apache/poi/sl/draw/DrawSimpleShape.java index 0000000000,e674166090..d62b93006d mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java +++ b/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java @@@ -1,0 -1,420 +1,417 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw; + + import java.awt.*; + import java.awt.geom.*; + import java.io.*; + import java.nio.charset.Charset; + import java.util.*; + import java.util.List; + + import javax.xml.bind.*; + import javax.xml.stream.*; + import javax.xml.stream.EventFilter; + import javax.xml.stream.events.StartElement; + import javax.xml.stream.events.XMLEvent; + + import org.apache.poi.sl.draw.binding.CTCustomGeometry2D; + import org.apache.poi.sl.draw.geom.*; + import org.apache.poi.sl.usermodel.*; + import org.apache.poi.sl.usermodel.LineDecoration.DecorationSize; + import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint; + import org.apache.poi.sl.usermodel.StrokeStyle.*; + import org.apache.poi.util.Units; + + + public class DrawSimpleShape extends DrawShape { + + public DrawSimpleShape(T shape) { + super(shape); + } + + @Override + public void draw(Graphics2D graphics) { + // RenderableShape rShape = new RenderableShape(this); + // rShape.render(graphics); + + DrawPaint drawPaint = DrawFactory.getInstance(graphics).getPaint(shape); + Paint fill = drawPaint.getPaint(graphics, shape.getFillStyle().getPaint()); + Paint line = drawPaint.getPaint(graphics, shape.getStrokeStyle().getPaint()); + BasicStroke stroke = getStroke(); // the stroke applies both to the shadow and the shape + graphics.setStroke(stroke); + + Collection elems = computeOutlines(graphics); + + // first paint the shadow + drawShadow(graphics, elems, fill, line); + + // then fill the shape interior + if (fill != null) { + graphics.setPaint(fill); + for (Outline o : elems) { + if (o.getPath().isFilled()){ + java.awt.Shape s = o.getOutline(); + graphics.setRenderingHint(Drawable.GRADIENT_SHAPE, s); + graphics.fill(s); + } + } + } + + // then draw any content within this shape (text, image, etc.) + drawContent(graphics); + + // then stroke the shape outline + if(line != null) { + graphics.setPaint(line); + for(Outline o : elems){ + if(o.getPath().isStroked()){ + java.awt.Shape s = o.getOutline(); + graphics.setRenderingHint(Drawable.GRADIENT_SHAPE, s); + graphics.draw(s); + } + } + } + + // draw line decorations + drawDecoration(graphics, line, stroke); + } + + protected void drawDecoration(Graphics2D graphics, Paint line, BasicStroke stroke) { + if(line == null) return; + graphics.setPaint(line); + + List lst = new ArrayList(); + LineDecoration deco = shape.getLineDecoration(); + Outline head = getHeadDecoration(graphics, deco, stroke); + if (head != null) lst.add(head); + Outline tail = getTailDecoration(graphics, deco, stroke); + if (tail != null) lst.add(tail); + + + for(Outline o : lst){ + java.awt.Shape s = o.getOutline(); + Path p = o.getPath(); + graphics.setRenderingHint(Drawable.GRADIENT_SHAPE, s); + + if(p.isFilled()) graphics.fill(s); + if(p.isStroked()) graphics.draw(s); + } + } + + protected Outline getTailDecoration(Graphics2D graphics, LineDecoration deco, BasicStroke stroke) { + DecorationSize tailLength = deco.getTailLength(); + DecorationSize tailWidth = deco.getTailWidth(); + + double lineWidth = Math.max(2.5, stroke.getLineWidth()); + + Rectangle2D anchor = getAnchor(graphics, shape); + double x2 = anchor.getX() + anchor.getWidth(), - y2 = anchor.getY() + anchor.getHeight(); ++ y2 = anchor.getY() + anchor.getHeight(); + + double alpha = Math.atan(anchor.getHeight() / anchor.getWidth()); + + AffineTransform at = new AffineTransform(); + java.awt.Shape shape = null; + Path p = null; + Rectangle2D bounds; - double scaleY = Math.pow(2, tailWidth.ordinal()); - double scaleX = Math.pow(2, tailLength.ordinal()); ++ final double scaleY = Math.pow(2, tailWidth.ordinal()+1); ++ final double scaleX = Math.pow(2, tailLength.ordinal()+1); + switch (deco.getTailShape()) { + case OVAL: + p = new Path(); + shape = new Ellipse2D.Double(0, 0, lineWidth * scaleX, lineWidth * scaleY); + bounds = shape.getBounds2D(); + at.translate(x2 - bounds.getWidth() / 2, y2 - bounds.getHeight() / 2); + at.rotate(alpha, bounds.getX() + bounds.getWidth() / 2, bounds.getY() + bounds.getHeight() / 2); + break; ++ case STEALTH: + case ARROW: - p = new Path(); ++ p = new Path(false, true); + GeneralPath arrow = new GeneralPath(); - arrow.moveTo((float) (-lineWidth * 3), (float) (-lineWidth * 2)); ++ arrow.moveTo((float) (-lineWidth * scaleX), (float) (-lineWidth * scaleY / 2)); + arrow.lineTo(0, 0); - arrow.lineTo((float) (-lineWidth * 3), (float) (lineWidth * 2)); ++ arrow.lineTo((float) (-lineWidth * scaleX), (float) (lineWidth * scaleY / 2)); + shape = arrow; + at.translate(x2, y2); + at.rotate(alpha); + break; + case TRIANGLE: + p = new Path(); - scaleY = tailWidth.ordinal() + 1; - scaleX = tailLength.ordinal() + 1; + GeneralPath triangle = new GeneralPath(); + triangle.moveTo((float) (-lineWidth * scaleX), (float) (-lineWidth * scaleY / 2)); + triangle.lineTo(0, 0); + triangle.lineTo((float) (-lineWidth * scaleX), (float) (lineWidth * scaleY / 2)); + triangle.closePath(); + shape = triangle; + at.translate(x2, y2); + at.rotate(alpha); + break; + default: + break; + } + + if (shape != null) { + shape = at.createTransformedShape(shape); + } + return shape == null ? null : new Outline(shape, p); + } + - Outline getHeadDecoration(Graphics2D graphics, LineDecoration deco, BasicStroke stroke) { ++ protected Outline getHeadDecoration(Graphics2D graphics, LineDecoration deco, BasicStroke stroke) { + DecorationSize headLength = deco.getHeadLength(); + DecorationSize headWidth = deco.getHeadWidth(); + + double lineWidth = Math.max(2.5, stroke.getLineWidth()); + + Rectangle2D anchor = getAnchor(graphics, shape); + double x1 = anchor.getX(), + y1 = anchor.getY(); + + double alpha = Math.atan(anchor.getHeight() / anchor.getWidth()); + + AffineTransform at = new AffineTransform(); + java.awt.Shape shape = null; + Path p = null; + Rectangle2D bounds; - double scaleY = 1; - double scaleX = 1; ++ final double scaleY = Math.pow(2, headWidth.ordinal()+1); ++ final double scaleX = Math.pow(2, headLength.ordinal()+1); + switch (deco.getHeadShape()) { + case OVAL: + p = new Path(); + shape = new Ellipse2D.Double(0, 0, lineWidth * scaleX, lineWidth * scaleY); + bounds = shape.getBounds2D(); + at.translate(x1 - bounds.getWidth() / 2, y1 - bounds.getHeight() / 2); + at.rotate(alpha, bounds.getX() + bounds.getWidth() / 2, bounds.getY() + bounds.getHeight() / 2); + break; + case STEALTH: + case ARROW: + p = new Path(false, true); + GeneralPath arrow = new GeneralPath(); - arrow.moveTo((float) (lineWidth * 3 * scaleX), (float) (-lineWidth * scaleY * 2)); ++ arrow.moveTo((float) (lineWidth * scaleX), (float) (-lineWidth * scaleY / 2)); + arrow.lineTo(0, 0); - arrow.lineTo((float) (lineWidth * 3 * scaleX), (float) (lineWidth * scaleY * 2)); ++ arrow.lineTo((float) (lineWidth * scaleX), (float) (lineWidth * scaleY / 2)); + shape = arrow; + at.translate(x1, y1); + at.rotate(alpha); + break; + case TRIANGLE: + p = new Path(); - scaleY = headWidth.ordinal() + 1; - scaleX = headLength.ordinal() + 1; + GeneralPath triangle = new GeneralPath(); + triangle.moveTo((float) (lineWidth * scaleX), (float) (-lineWidth * scaleY / 2)); + triangle.lineTo(0, 0); + triangle.lineTo((float) (lineWidth * scaleX), (float) (lineWidth * scaleY / 2)); + triangle.closePath(); + shape = triangle; + at.translate(x1, y1); + at.rotate(alpha); + break; + default: + break; + } + + if (shape != null) { + shape = at.createTransformedShape(shape); + } + return shape == null ? null : new Outline(shape, p); + } + + public BasicStroke getStroke() { + StrokeStyle strokeStyle = shape.getStrokeStyle(); + + float lineWidth = (float) strokeStyle.getLineWidth(); + if (lineWidth == 0.0f) lineWidth = 0.25f; // Both PowerPoint and OOo draw zero-length lines as 0.25pt + + LineDash lineDash = strokeStyle.getLineDash(); + if (lineDash == null) { + lineDash = LineDash.SOLID; + } + + int dashPatI[] = lineDash.pattern; + final float dash_phase = 0; + float[] dashPatF = null; + if (dashPatI != null) { + dashPatF = new float[dashPatI.length]; + for (int i=0; i outlines + , Paint fill + , Paint line + ) { + Shadow shadow = shape.getShadow(); + if (shadow == null || (fill == null && line == null)) return; + + SolidPaint shadowPaint = shadow.getFillStyle(); + Color shadowColor = DrawPaint.applyColorTransform(shadowPaint.getSolidColor()); + + double shapeRotation = shape.getRotation(); + if(shape.getFlipVertical()) { + shapeRotation += 180; + } + double angle = shadow.getAngle() - shapeRotation; + double dist = shadow.getDistance(); + double dx = dist * Math.cos(Math.toRadians(angle)); + double dy = dist * Math.sin(Math.toRadians(angle)); + + graphics.translate(dx, dy); + + for(Outline o : outlines){ + java.awt.Shape s = o.getOutline(); + Path p = o.getPath(); + graphics.setRenderingHint(Drawable.GRADIENT_SHAPE, s); + graphics.setPaint(shadowColor); + + if(fill != null && p.isFilled()){ + graphics.fill(s); + } else if (line != null && p.isStroked()) { + graphics.draw(s); + } + } + + graphics.translate(-dx, -dy); + } + + protected static CustomGeometry getCustomGeometry(String name) { + return getCustomGeometry(name, null); + } + + protected static CustomGeometry getCustomGeometry(String name, Graphics2D graphics) { + @SuppressWarnings("unchecked") + Map presets = (graphics == null) + ? null + : (Map)graphics.getRenderingHint(Drawable.PRESET_GEOMETRY_CACHE); + + if (presets == null) { + presets = new HashMap(); + if (graphics != null) { + graphics.setRenderingHint(Drawable.PRESET_GEOMETRY_CACHE, presets); + } + + String packageName = "org.apache.poi.sl.draw.binding"; + InputStream presetIS = Drawable.class.getResourceAsStream("presetShapeDefinitions.xml"); + Reader xml = new InputStreamReader( presetIS, Charset.forName("UTF-8") ); + + // StAX: + EventFilter startElementFilter = new EventFilter() { + @Override + public boolean accept(XMLEvent event) { + return event.isStartElement(); + } + }; + + try { + XMLInputFactory staxFactory = XMLInputFactory.newInstance(); + XMLEventReader staxReader = staxFactory.createXMLEventReader(xml); + XMLEventReader staxFiltRd = staxFactory.createFilteredReader(staxReader, startElementFilter); + // Ignore StartElement: + staxFiltRd.nextEvent(); + // JAXB: + JAXBContext jaxbContext = JAXBContext.newInstance(packageName); + Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); + + while (staxFiltRd.peek() != null) { + StartElement evRoot = (StartElement)staxFiltRd.peek(); + String cusName = evRoot.getName().getLocalPart(); + // XMLEvent ev = staxReader.nextEvent(); + JAXBElement el = unmarshaller.unmarshal(staxReader, CTCustomGeometry2D.class); + CTCustomGeometry2D cusGeom = el.getValue(); + + presets.put(cusName, new CustomGeometry(cusGeom)); + } + } catch (Exception e) { + throw new RuntimeException("Unable to load preset geometries.", e); + } + } + + return presets.get(name); + } + + protected Collection computeOutlines(Graphics2D graphics) { + + List lst = new ArrayList(); + CustomGeometry geom = shape.getGeometry(); + if(geom == null) { + return lst; + } + + Rectangle2D anchor = getAnchor(graphics, shape); + for (Path p : geom) { + + double w = p.getW() == -1 ? anchor.getWidth() * Units.EMU_PER_POINT : p.getW(); + double h = p.getH() == -1 ? anchor.getHeight() * Units.EMU_PER_POINT : p.getH(); + + // the guides in the shape definitions are all defined relative to each other, + // so we build the path starting from (0,0). + final Rectangle2D pathAnchor = new Rectangle2D.Double(0,0,w,h); + + Context ctx = new Context(geom, pathAnchor, shape); + + java.awt.Shape gp = p.getPath(ctx); + + // translate the result to the canvas coordinates in points + AffineTransform at = new AffineTransform(); + at.translate(anchor.getX(), anchor.getY()); + + double scaleX, scaleY; + if (p.getW() != -1) { + scaleX = anchor.getWidth() / p.getW(); + } else { + scaleX = 1.0 / Units.EMU_PER_POINT; + } + if (p.getH() != -1) { + scaleY = anchor.getHeight() / p.getH(); + } else { + scaleY = 1.0 / Units.EMU_PER_POINT; + } + + at.scale(scaleX, scaleY); + + java.awt.Shape canvasShape = at.createTransformedShape(gp); + + lst.add(new Outline(canvasShape, p)); + } + + return lst; + } + + } diff --cc src/java/org/apache/poi/sl/draw/DrawTextParagraph.java index 0000000000,e2db501e85..e4ce1d760a mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/DrawTextParagraph.java +++ b/src/java/org/apache/poi/sl/draw/DrawTextParagraph.java @@@ -1,0 -1,462 +1,462 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw; + + import java.awt.Color; + import java.awt.Graphics2D; + import java.awt.font.*; + import java.awt.geom.Rectangle2D; + import java.text.*; + import java.text.AttributedCharacterIterator.Attribute; + import java.util.*; + + import org.apache.poi.sl.usermodel.*; + import org.apache.poi.sl.usermodel.TextParagraph.BulletStyle; + import org.apache.poi.sl.usermodel.TextParagraph.TextAlign; + import org.apache.poi.sl.usermodel.TextRun.TextCap; + import org.apache.poi.util.Units; + + public class DrawTextParagraph implements Drawable { + protected TextParagraph paragraph; + double x, y; + protected List lines = new ArrayList(); + protected String rawText; + protected DrawTextFragment bullet; + protected int autoNbrIdx = 0; + + /** + * the highest line in this paragraph. Used for line spacing. + */ + protected double maxLineHeight; + + public DrawTextParagraph(TextParagraph paragraph) { + this.paragraph = paragraph; + } + + public void setPosition(double x, double y) { + // TODO: replace it, by applyTransform???? + this.x = x; + this.y = y; + } + + public double getY() { + return y; + } + + /** + * Sets the auto numbering index of the handled paragraph + * @param index the auto numbering index + */ + public void setAutoNumberingIdx(int index) { + autoNbrIdx = index; + } + + public void draw(Graphics2D graphics){ + if (lines.isEmpty()) return; + + Insets2D insets = paragraph.getParentShape().getInsets(); + double leftInset = insets.left; + double rightInset = insets.right; + double penY = y; + + boolean firstLine = true; + int indentLevel = paragraph.getIndentLevel(); + Double leftMargin = paragraph.getLeftMargin(); + if (leftMargin == null) { + // if the marL attribute is omitted, then a value of 347663 is implied + leftMargin = Units.toPoints(347663*(indentLevel+1)); + } + Double indent = paragraph.getIndent(); + if (indent == null) { + indent = Units.toPoints(347663*indentLevel); + } + Double rightMargin = paragraph.getRightMargin(); + if (rightMargin == null) { + rightMargin = 0d; + } + + //The vertical line spacing + Double spacing = paragraph.getLineSpacing(); + if (spacing == null) spacing = 100d; + + for(DrawTextFragment line : lines){ + double penX; + + if(firstLine) { + if (!isEmptyParagraph()) { + // TODO: find out character style for empty, but bulleted/numbered lines + bullet = getBullet(graphics, line.getAttributedString().getIterator()); + } + + if (bullet != null){ + bullet.setPosition(x + indent, penY); + bullet.draw(graphics); + // don't let text overlay the bullet and advance by the bullet width + double bulletWidth = bullet.getLayout().getAdvance() + 1; + penX = x + Math.max(leftMargin, indent+bulletWidth); + } else { + penX = x + indent; + } + } else { + penX = x + leftMargin; + } + + Rectangle2D anchor = DrawShape.getAnchor(graphics, paragraph.getParentShape()); + + TextAlign ta = paragraph.getTextAlign(); + if (ta == null) ta = TextAlign.LEFT; + switch (ta) { + case CENTER: + penX += (anchor.getWidth() - leftMargin - line.getWidth() - leftInset - rightInset) / 2; + break; + case RIGHT: + penX += (anchor.getWidth() - line.getWidth() - leftInset - rightInset); + break; + default: + break; + } + + line.setPosition(penX, penY); + line.draw(graphics); + + if(spacing > 0) { + // If linespacing >= 0, then linespacing is a percentage of normal line height. + penY += spacing*0.01* line.getHeight(); + } else { + // negative value means absolute spacing in points + penY += -spacing; + } + + firstLine = false; + } + + y = penY - y; + } + + public float getFirstLineHeight() { + return (lines.isEmpty()) ? 0 : lines.get(0).getHeight(); + } + + public float getLastLineHeight() { + return (lines.isEmpty()) ? 0 : lines.get(lines.size()-1).getHeight(); + } + + public boolean isEmptyParagraph() { + return (lines.isEmpty() || rawText.trim().isEmpty()); + } + + public void applyTransform(Graphics2D graphics) { + } + + public void drawContent(Graphics2D graphics) { + } + + /** + * break text into lines, each representing a line of text that fits in the wrapping width + * + * @param graphics + */ + protected void breakText(Graphics2D graphics){ + lines.clear(); + + DrawFactory fact = DrawFactory.getInstance(graphics); + StringBuilder text = new StringBuilder(); + AttributedString at = getAttributedString(graphics, text); + boolean emptyParagraph = ("".equals(text.toString().trim())); + + AttributedCharacterIterator it = at.getIterator(); + LineBreakMeasurer measurer = new LineBreakMeasurer(it, graphics.getFontRenderContext()); + for (;;) { + int startIndex = measurer.getPosition(); + + double wrappingWidth = getWrappingWidth(lines.size() == 0, graphics) + 1; // add a pixel to compensate rounding errors + // shape width can be smaller that the sum of insets (this was proved by a test file) + if(wrappingWidth < 0) wrappingWidth = 1; + + int nextBreak = text.indexOf("\n", startIndex + 1); - if(nextBreak == -1) nextBreak = it.getEndIndex(); ++ if (nextBreak == -1) nextBreak = it.getEndIndex(); + + TextLayout layout = measurer.nextLayout((float)wrappingWidth, nextBreak, true); + if (layout == null) { + // layout can be null if the entire word at the current position + // does not fit within the wrapping width. Try with requireNextWord=false. + layout = measurer.nextLayout((float)wrappingWidth, nextBreak, false); + } + + if(layout == null) { + // exit if can't break any more + break; + } + + int endIndex = measurer.getPosition(); + // skip over new line breaks (we paint 'clear' text runs not starting or ending with \n) + if(endIndex < it.getEndIndex() && text.charAt(endIndex) == '\n'){ + measurer.setPosition(endIndex + 1); + } + + TextAlign hAlign = paragraph.getTextAlign(); + if(hAlign == TextAlign.JUSTIFY || hAlign == TextAlign.JUSTIFY_LOW) { + layout = layout.getJustifiedLayout((float)wrappingWidth); + } + + AttributedString str = (emptyParagraph) + ? null // we will not paint empty paragraphs + : new AttributedString(it, startIndex, endIndex); + DrawTextFragment line = fact.getTextFragment(layout, str); + lines.add(line); + + maxLineHeight = Math.max(maxLineHeight, line.getHeight()); + + if(endIndex == it.getEndIndex()) break; + } + + rawText = text.toString(); + } + + protected DrawTextFragment getBullet(Graphics2D graphics, AttributedCharacterIterator firstLineAttr) { + BulletStyle bulletStyle = paragraph.getBulletStyle(); + if (bulletStyle == null) return null; + + String buCharacter; + AutoNumberingScheme ans = bulletStyle.getAutoNumberingScheme(); + if (ans != null) { + buCharacter = ans.format(autoNbrIdx); + } else { + buCharacter = bulletStyle.getBulletCharacter(); + } + if (buCharacter == null) return null; + + String buFont = bulletStyle.getBulletFont(); + if (buFont == null) buFont = paragraph.getDefaultFontFamily(); + assert(buFont != null); + + Color buColor = bulletStyle.getBulletFontColor(); + if (buColor == null) buColor = (Color)firstLineAttr.getAttribute(TextAttribute.FOREGROUND); + + float fontSize = (Float)firstLineAttr.getAttribute(TextAttribute.SIZE); + Double buSz = bulletStyle.getBulletFontSize(); + if (buSz == null) buSz = 100d; + if (buSz > 0) fontSize *= buSz* 0.01; + else fontSize = (float)-buSz; + + + AttributedString str = new AttributedString(buCharacter); + str.addAttribute(TextAttribute.FOREGROUND, buColor); + str.addAttribute(TextAttribute.FAMILY, buFont); + str.addAttribute(TextAttribute.SIZE, fontSize); + + TextLayout layout = new TextLayout(str.getIterator(), graphics.getFontRenderContext()); + DrawFactory fact = DrawFactory.getInstance(graphics); + return fact.getTextFragment(layout, str); + } + + protected String getRenderableText(TextRun tr) { + StringBuilder buf = new StringBuilder(); + TextCap cap = tr.getTextCap(); + String tabs = null; + for (char c : tr.getRawText().toCharArray()) { + if(c == '\t') { + if (tabs == null) { + tabs = tab2space(tr); + } + buf.append(tabs); + continue; + } + + switch (cap) { + case ALL: c = Character.toUpperCase(c); break; + case SMALL: c = Character.toLowerCase(c); break; + case NONE: break; + } + + buf.append(c); + } + + return buf.toString(); + } + + /** + * Replace a tab with the effective number of white spaces. + */ + private String tab2space(TextRun tr) { + AttributedString string = new AttributedString(" "); + String typeFace = tr.getFontFamily(); + if (typeFace == null) typeFace = "Lucida Sans"; + string.addAttribute(TextAttribute.FAMILY, typeFace); + + Double fs = tr.getFontSize(); + if (fs == null) fs = 12d; + string.addAttribute(TextAttribute.SIZE, fs.floatValue()); + + TextLayout l = new TextLayout(string.getIterator(), new FontRenderContext(null, true, true)); + double wspace = l.getAdvance(); + + Double tabSz = paragraph.getDefaultTabSize(); + if (tabSz == null) tabSz = wspace*4; + + int numSpaces = (int)Math.ceil(tabSz / wspace); + StringBuilder buf = new StringBuilder(); + for(int i = 0; i < numSpaces; i++) { + buf.append(' '); + } + return buf.toString(); + } + + + /** + * Returns wrapping width to break lines in this paragraph + * + * @param firstLine whether the first line is breaking + * + * @return wrapping width in points + */ + protected double getWrappingWidth(boolean firstLine, Graphics2D graphics){ + // internal margins for the text box + + Insets2D insets = paragraph.getParentShape().getInsets(); + double leftInset = insets.left; + double rightInset = insets.right; + + Rectangle2D anchor = DrawShape.getAnchor(graphics, paragraph.getParentShape()); + + int indentLevel = paragraph.getIndentLevel(); + Double leftMargin = paragraph.getLeftMargin(); + if (leftMargin == null) { + // if the marL attribute is omitted, then a value of 347663 is implied + leftMargin = Units.toPoints(347663*(indentLevel+1)); + } + Double indent = paragraph.getIndent(); + if (indent == null) { + indent = Units.toPoints(347663*indentLevel); + } + Double rightMargin = paragraph.getRightMargin(); + if (rightMargin == null) { + rightMargin = 0d; + } + + double width; + TextShape> ts = paragraph.getParentShape(); + if (!ts.getWordWrap()) { + // if wordWrap == false then we return the advance to the right border of the sheet + width = ts.getSheet().getSlideShow().getPageSize().getWidth() - anchor.getX(); + } else { + width = anchor.getWidth() - leftInset - rightInset - leftMargin - rightMargin; + if (firstLine) { + if (bullet != null){ + if (indent > 0) width -= indent; + } else { + if (indent > 0) width -= indent; // first line indentation + else if (indent < 0) { // hanging indentation: the first line start at the left margin + width += leftMargin; + } + } + } + } + + return width; + } + + private static class AttributedStringData { + Attribute attribute; + Object value; + int beginIndex, endIndex; + AttributedStringData(Attribute attribute, Object value, int beginIndex, int endIndex) { + this.attribute = attribute; + this.value = value; + this.beginIndex = beginIndex; + this.endIndex = endIndex; + } + } + + protected AttributedString getAttributedString(Graphics2D graphics, StringBuilder text){ + List attList = new ArrayList(); + if (text == null) text = new StringBuilder(); + + DrawFontManager fontHandler = (DrawFontManager)graphics.getRenderingHint(Drawable.FONT_HANDLER); + + for (TextRun run : paragraph){ + String runText = getRenderableText(run); + // skip empty runs + if (runText.isEmpty()) continue; + + int beginIndex = text.length(); + text.append(runText); + int endIndex = text.length(); + + Color fgColor = run.getFontColor(); + if (fgColor == null) fgColor = Color.BLACK; + attList.add(new AttributedStringData(TextAttribute.FOREGROUND, fgColor, beginIndex, endIndex)); + + // user can pass an custom object to convert fonts + String fontFamily = run.getFontFamily(); + @SuppressWarnings("unchecked") + Map fontMap = (Map)graphics.getRenderingHint(Drawable.FONT_MAP); + if (fontMap != null && fontMap.containsKey(fontFamily)) { + fontFamily = fontMap.get(fontFamily); + } + if(fontHandler != null) { + fontFamily = fontHandler.getRendererableFont(fontFamily, run.getPitchAndFamily()); + } + if (fontFamily == null) { + fontFamily = paragraph.getDefaultFontFamily(); + } + attList.add(new AttributedStringData(TextAttribute.FAMILY, fontFamily, beginIndex, endIndex)); + + Double fontSz = run.getFontSize(); + if (fontSz == null) fontSz = paragraph.getDefaultFontSize(); + attList.add(new AttributedStringData(TextAttribute.SIZE, fontSz.floatValue(), beginIndex, endIndex)); + + if(run.isBold()) { + attList.add(new AttributedStringData(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD, beginIndex, endIndex)); + } + if(run.isItalic()) { + attList.add(new AttributedStringData(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE, beginIndex, endIndex)); + } + if(run.isUnderlined()) { + attList.add(new AttributedStringData(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON, beginIndex, endIndex)); + attList.add(new AttributedStringData(TextAttribute.INPUT_METHOD_UNDERLINE, TextAttribute.UNDERLINE_LOW_TWO_PIXEL, beginIndex, endIndex)); + } + if(run.isStrikethrough()) { + attList.add(new AttributedStringData(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON, beginIndex, endIndex)); + } + if(run.isSubscript()) { + attList.add(new AttributedStringData(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUB, beginIndex, endIndex)); + } + if(run.isSuperscript()) { + attList.add(new AttributedStringData(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUPER, beginIndex, endIndex)); + } + } + + // ensure that the paragraph contains at least one character + // We need this trick to correctly measure text + if (text.length() == 0) { + Double fontSz = paragraph.getDefaultFontSize(); + text.append(" "); + attList.add(new AttributedStringData(TextAttribute.SIZE, fontSz.floatValue(), 0, 1)); + } + + AttributedString string = new AttributedString(text.toString()); + for (AttributedStringData asd : attList) { + string.addAttribute(asd.attribute, asd.value, asd.beginIndex, asd.endIndex); + } + + return string; + } + + + } diff --cc src/java/org/apache/poi/sl/draw/DrawTextShape.java index 0000000000,5862ac598c..3be880ec02 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/DrawTextShape.java +++ b/src/java/org/apache/poi/sl/draw/DrawTextShape.java @@@ -1,0 -1,179 +1,184 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw; + + import java.awt.Graphics2D; + import java.awt.geom.AffineTransform; + import java.awt.geom.Rectangle2D; + import java.awt.image.BufferedImage; + import java.util.*; + + import org.apache.poi.sl.usermodel.*; + import org.apache.poi.sl.usermodel.TextParagraph.BulletStyle; + import org.apache.poi.util.JvmBugs; + + public class DrawTextShape>> extends DrawSimpleShape { + + public DrawTextShape(T shape) { + super(shape); + } + + @Override + public void drawContent(Graphics2D graphics) { ++ fixFonts(graphics); ++ + Rectangle2D anchor = DrawShape.getAnchor(graphics, shape); + Insets2D insets = shape.getInsets(); + double x = anchor.getX() + insets.left; + double y = anchor.getY(); + + // remember the initial transform + AffineTransform tx = graphics.getTransform(); + + // Transform of text in flipped shapes is special. + // At this point the flip and rotation transform is already applied + // (see DrawShape#applyTransform ), but we need to restore it to avoid painting "upside down". + // See Bugzilla 54210. + + if(shape.getFlipVertical()){ + graphics.translate(anchor.getX(), anchor.getY() + anchor.getHeight()); + graphics.scale(1, -1); + graphics.translate(-anchor.getX(), -anchor.getY()); + + // text in vertically flipped shapes is rotated by 180 degrees + double centerX = anchor.getX() + anchor.getWidth()/2; + double centerY = anchor.getY() + anchor.getHeight()/2; + graphics.translate(centerX, centerY); + graphics.rotate(Math.toRadians(180)); + graphics.translate(-centerX, -centerY); + } + + // Horizontal flipping applies only to shape outline and not to the text in the shape. + // Applying flip second time restores the original not-flipped transform + if(shape.getFlipHorizontal()){ + graphics.translate(anchor.getX() + anchor.getWidth(), anchor.getY()); + graphics.scale(-1, 1); + graphics.translate(-anchor.getX() , -anchor.getY()); + } + + + // first dry-run to calculate the total height of the text + double textHeight = shape.getTextHeight(); + + switch (shape.getVerticalAlignment()){ + case TOP: + y += insets.top; + break; + case BOTTOM: + y += anchor.getHeight() - textHeight - insets.bottom; + break; + default: + case MIDDLE: + double delta = anchor.getHeight() - textHeight - insets.top - insets.bottom; + y += insets.top + delta/2; + break; + } + + drawParagraphs(graphics, x, y); + + // restore the transform + graphics.setTransform(tx); + } + + /** + * paint the paragraphs starting from top left (x,y) + * + * @return the vertical advance, i.e. the cumulative space occupied by the text + */ + public double drawParagraphs(Graphics2D graphics, double x, double y) { + DrawFactory fact = DrawFactory.getInstance(graphics); + Insets2D shapePadding = shape.getInsets(); + + double y0 = y; + Iterator> paragraphs = shape.iterator(); + + boolean isFirstLine = true; + for (int autoNbrIdx=0; paragraphs.hasNext(); autoNbrIdx++){ + TextParagraph p = paragraphs.next(); + DrawTextParagraph dp = fact.getDrawable(p); + BulletStyle bs = p.getBulletStyle(); + if (bs == null || bs.getAutoNumberingScheme() == null) { + autoNbrIdx = -1; + } else { + Integer startAt = bs.getAutoNumberingStartAt(); + if (startAt == null) startAt = 1; + // TODO: handle reset auto number indexes + if (startAt > autoNbrIdx) autoNbrIdx = startAt; + } + dp.setAutoNumberingIdx(autoNbrIdx); + dp.breakText(graphics); + + if (!isFirstLine) { + // the amount of vertical white space before the paragraph + Double spaceBefore = p.getSpaceBefore(); + if (spaceBefore == null) spaceBefore = 0d; + if(spaceBefore > 0) { + // positive value means percentage spacing of the height of the first line, e.g. + // the higher the first line, the bigger the space before the paragraph + y += spaceBefore*0.01*dp.getFirstLineHeight(); + } else { + // negative value means the absolute spacing in points + y += -spaceBefore; + } + } + isFirstLine = false; + + dp.setPosition(x, y); + dp.draw(graphics); + y += dp.getY(); + + if (paragraphs.hasNext()) { + Double spaceAfter = p.getSpaceAfter(); + if (spaceAfter == null) spaceAfter = 0d; + if(spaceAfter > 0) { + // positive value means percentage spacing of the height of the last line, e.g. + // the higher the last line, the bigger the space after the paragraph + y += spaceAfter*0.01*dp.getLastLineHeight(); + } else { + // negative value means the absolute spacing in points + y += -spaceAfter; + } + } + } + return y - y0; + } + + /** + * Compute the cumulative height occupied by the text + */ + public double getTextHeight(){ + // dry-run in a 1x1 image and return the vertical advance + BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); + Graphics2D graphics = img.createGraphics(); + fixFonts(graphics); + return drawParagraphs(graphics, 0, 0); + } + + @SuppressWarnings("unchecked") + private static void fixFonts(Graphics2D graphics) { + if (!JvmBugs.hasLineBreakMeasurerBug()) return; + Map fontMap = (Map)graphics.getRenderingHint(Drawable.FONT_MAP); - if (fontMap == null) fontMap = new HashMap(); - fontMap.put("Calibri", "Lucida Sans"); - fontMap.put("Cambria", "Lucida Bright"); - graphics.setRenderingHint(Drawable.FONT_MAP, fontMap); ++ if (fontMap == null) { ++ fontMap = new HashMap(); ++ graphics.setRenderingHint(Drawable.FONT_MAP, fontMap); ++ } ++ ++ if (!fontMap.containsKey("Calibri")) fontMap.put("Calibri", "Lucida Sans"); ++ if (!fontMap.containsKey("Cambria")) fontMap.put("Cambria", "Lucida Bright"); + } + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTAdjPoint2D.java index 0000000000,d7fc0ae07f..32ee2a03b0 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTAdjPoint2D.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTAdjPoint2D.java @@@ -1,0 -1,109 +1,109 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_AdjPoint2D complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_AdjPoint2D">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="x" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *       <attribute name="y" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_AdjPoint2D", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTAdjPoint2D { + - @XmlAttribute(name = "x", required = true) ++ @XmlAttribute(required = true) + protected String x; - @XmlAttribute(name = "y", required = true) ++ @XmlAttribute(required = true) + protected String y; + + /** + * Gets the value of the x property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getX() { + return x; + } + + /** + * Sets the value of the x property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setX(String value) { + this.x = value; + } + + public boolean isSetX() { + return (this.x!= null); + } + + /** + * Gets the value of the y property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getY() { + return y; + } + + /** + * Sets the value of the y property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setY(String value) { + this.y = value; + } + + public boolean isSetY() { + return (this.y!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTAngle.java index 0000000000,2da2373e25..2e39602dad mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTAngle.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTAngle.java @@@ -1,0 -1,70 +1,70 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_Angle complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_Angle">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="val" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Angle" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_Angle", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTAngle { + - @XmlAttribute(name = "val", required = true) ++ @XmlAttribute(required = true) + protected int val; + + /** + * Gets the value of the val property. + * + */ + public int getVal() { + return val; + } + + /** + * Sets the value of the val property. + * + */ + public void setVal(int value) { + this.val = value; + } + + public boolean isSetVal() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTColorMRU.java index 0000000000,8ec68ba085..973603de45 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTColorMRU.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTColorMRU.java @@@ -1,0 -1,106 +1,106 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import java.util.ArrayList; + import java.util.List; + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlElement; + import javax.xml.bind.annotation.XmlElements; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_ColorMRU complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_ColorMRU">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <group ref="{http://schemas.openxmlformats.org/drawingml/2006/main}EG_ColorChoice" maxOccurs="10" minOccurs="0"/>
+  *       </sequence>
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_ColorMRU", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "egColorChoice" + }) + public class CTColorMRU { + + @XmlElements({ - @XmlElement(name = "scrgbClr", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTScRgbColor.class), - @XmlElement(name = "srgbClr", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTSRgbColor.class), - @XmlElement(name = "hslClr", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTHslColor.class), ++ @XmlElement(name = "prstClr", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTPresetColor.class), + @XmlElement(name = "sysClr", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTSystemColor.class), - @XmlElement(name = "schemeClr", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTSchemeColor.class), - @XmlElement(name = "prstClr", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTPresetColor.class) ++ @XmlElement(name = "hslClr", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTHslColor.class), ++ @XmlElement(name = "srgbClr", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTSRgbColor.class), ++ @XmlElement(name = "scrgbClr", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTScRgbColor.class), ++ @XmlElement(name = "schemeClr", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTSchemeColor.class) + }) + protected List egColorChoice; + + /** + * Gets the value of the egColorChoice property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the egColorChoice property. + * + *

+ * For example, to add a new item, do as follows: + *

+      *    getEGColorChoice().add(newItem);
+      * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list - * {@link CTScRgbColor } - * {@link CTSRgbColor } - * {@link CTHslColor } ++ * {@link CTPresetColor } + * {@link CTSystemColor } ++ * {@link CTHslColor } ++ * {@link CTSRgbColor } ++ * {@link CTScRgbColor } + * {@link CTSchemeColor } - * {@link CTPresetColor } + * + * + */ + public List getEGColorChoice() { + if (egColorChoice == null) { + egColorChoice = new ArrayList(); + } + return this.egColorChoice; + } + + public boolean isSetEGColorChoice() { + return ((this.egColorChoice!= null)&&(!this.egColorChoice.isEmpty())); + } + + public void unsetEGColorChoice() { + this.egColorChoice = null; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTConnection.java index 0000000000,f5d5e17268..4af3fac719 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTConnection.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTConnection.java @@@ -1,0 -1,95 +1,95 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlSchemaType; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_Connection complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_Connection">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="id" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_DrawingElementId" />
+  *       <attribute name="idx" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_Connection", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTConnection { + - @XmlAttribute(name = "id", required = true) ++ @XmlAttribute(required = true) + protected long id; - @XmlAttribute(name = "idx", required = true) ++ @XmlAttribute(required = true) + @XmlSchemaType(name = "unsignedInt") + protected long idx; + + /** + * Gets the value of the id property. + * + */ + public long getId() { + return id; + } + + /** + * Sets the value of the id property. + * + */ + public void setId(long value) { + this.id = value; + } + + public boolean isSetId() { + return true; + } + + /** + * Gets the value of the idx property. + * + */ + public long getIdx() { + return idx; + } + + /** + * Sets the value of the idx property. + * + */ + public void setIdx(long value) { + this.idx = value; + } + + public boolean isSetIdx() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTConnectionSite.java index 0000000000,eae59a0f0a..7ec62972dd mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTConnectionSite.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTConnectionSite.java @@@ -1,0 -1,114 +1,114 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElement; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_ConnectionSite complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_ConnectionSite">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <element name="pos" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_AdjPoint2D"/>
+  *       </sequence>
+  *       <attribute name="ang" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjAngle" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_ConnectionSite", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "pos" + }) + public class CTConnectionSite { + + @XmlElement(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", required = true) + protected CTAdjPoint2D pos; - @XmlAttribute(name = "ang", required = true) ++ @XmlAttribute(required = true) + protected String ang; + + /** + * Gets the value of the pos property. + * + * @return + * possible object is + * {@link CTAdjPoint2D } + * + */ + public CTAdjPoint2D getPos() { + return pos; + } + + /** + * Sets the value of the pos property. + * + * @param value + * allowed object is + * {@link CTAdjPoint2D } + * + */ + public void setPos(CTAdjPoint2D value) { + this.pos = value; + } + + public boolean isSetPos() { + return (this.pos!= null); + } + + /** + * Gets the value of the ang property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAng() { + return ang; + } + + /** + * Sets the value of the ang property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAng(String value) { + this.ang = value; + } + + public boolean isSetAng() { + return (this.ang!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTEmbeddedWAVAudioFile.java index 0000000000,8787125f47..94d44ece22 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTEmbeddedWAVAudioFile.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTEmbeddedWAVAudioFile.java @@@ -1,0 -1,152 +1,152 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_EmbeddedWAVAudioFile complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_EmbeddedWAVAudioFile">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute ref="{http://schemas.openxmlformats.org/officeDocument/2006/relationships}embed use="required""/>
+  *       <attribute name="name" type="{http://www.w3.org/2001/XMLSchema}string" default="" />
+  *       <attribute name="builtIn" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_EmbeddedWAVAudioFile", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTEmbeddedWAVAudioFile { + - @XmlAttribute(name = "embed", namespace = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", required = true) ++ @XmlAttribute(namespace = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", required = true) + protected String embed; - @XmlAttribute(name = "name") ++ @XmlAttribute + protected String name; - @XmlAttribute(name = "builtIn") ++ @XmlAttribute + protected Boolean builtIn; + + /** + * Embedded Audio File Relationship ID + * + * @return + * possible object is + * {@link String } + * + */ + public String getEmbed() { + return embed; + } + + /** + * Sets the value of the embed property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setEmbed(String value) { + this.embed = value; + } + + public boolean isSetEmbed() { + return (this.embed!= null); + } + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + if (name == null) { + return ""; + } else { + return name; + } + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + public boolean isSetName() { + return (this.name!= null); + } + + /** + * Gets the value of the builtIn property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isBuiltIn() { + if (builtIn == null) { + return false; + } else { + return builtIn; + } + } + + /** + * Sets the value of the builtIn property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setBuiltIn(boolean value) { + this.builtIn = value; + } + + public boolean isSetBuiltIn() { + return (this.builtIn!= null); + } + + public void unsetBuiltIn() { + this.builtIn = null; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTFixedPercentage.java index 0000000000,d1ed283f5d..92f41aee89 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTFixedPercentage.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTFixedPercentage.java @@@ -1,0 -1,70 +1,70 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_FixedPercentage complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_FixedPercentage">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="val" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_FixedPercentage" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_FixedPercentage", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTFixedPercentage { + - @XmlAttribute(name = "val", required = true) ++ @XmlAttribute(required = true) + protected int val; + + /** + * Gets the value of the val property. + * + */ + public int getVal() { + return val; + } + + /** + * Sets the value of the val property. + * + */ + public void setVal(int value) { + this.val = value; + } + + public boolean isSetVal() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTGeomGuide.java index 0000000000,5622e4c28d..3df22093ca mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTGeomGuide.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTGeomGuide.java @@@ -1,0 -1,112 +1,112 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; + import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + + /** + *

Java class for CT_GeomGuide complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_GeomGuide">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="name" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_GeomGuideName" />
+  *       <attribute name="fmla" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_GeomGuideFormula" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_GeomGuide", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTGeomGuide { + - @XmlAttribute(name = "name", required = true) ++ @XmlAttribute(required = true) + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String name; - @XmlAttribute(name = "fmla", required = true) ++ @XmlAttribute(required = true) + protected String fmla; + + /** + * Gets the value of the name property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + public boolean isSetName() { + return (this.name!= null); + } + + /** + * Gets the value of the fmla property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getFmla() { + return fmla; + } + + /** + * Sets the value of the fmla property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFmla(String value) { + this.fmla = value; + } + + public boolean isSetFmla() { + return (this.fmla!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTGeomRect.java index 0000000000,3198f0410e..b1368be295 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTGeomRect.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTGeomRect.java @@@ -1,0 -1,171 +1,171 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_GeomRect complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_GeomRect">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="l" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *       <attribute name="t" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *       <attribute name="r" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *       <attribute name="b" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_GeomRect", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTGeomRect { + - @XmlAttribute(name = "l", required = true) ++ @XmlAttribute(required = true) + protected String l; - @XmlAttribute(name = "t", required = true) ++ @XmlAttribute(required = true) + protected String t; - @XmlAttribute(name = "r", required = true) ++ @XmlAttribute(required = true) + protected String r; - @XmlAttribute(name = "b", required = true) ++ @XmlAttribute(required = true) + protected String b; + + /** + * Gets the value of the l property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getL() { + return l; + } + + /** + * Sets the value of the l property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setL(String value) { + this.l = value; + } + + public boolean isSetL() { + return (this.l!= null); + } + + /** + * Gets the value of the t property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getT() { + return t; + } + + /** + * Sets the value of the t property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setT(String value) { + this.t = value; + } + + public boolean isSetT() { + return (this.t!= null); + } + + /** + * Gets the value of the r property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getR() { + return r; + } + + /** + * Sets the value of the r property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setR(String value) { + this.r = value; + } + + public boolean isSetR() { + return (this.r!= null); + } + + /** + * Gets the value of the b property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getB() { + return b; + } + + /** + * Sets the value of the b property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setB(String value) { + this.b = value; + } + + public boolean isSetB() { + return (this.b!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTGroupTransform2D.java index 0000000000,f06e1d8f99..6508613b16 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTGroupTransform2D.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTGroupTransform2D.java @@@ -1,0 -1,296 +1,296 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElement; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_GroupTransform2D complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_GroupTransform2D">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <element name="off" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_Point2D" minOccurs="0"/>
+  *         <element name="ext" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_PositiveSize2D" minOccurs="0"/>
+  *         <element name="chOff" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_Point2D" minOccurs="0"/>
+  *         <element name="chExt" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_PositiveSize2D" minOccurs="0"/>
+  *       </sequence>
+  *       <attribute name="rot" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Angle" default="0" />
+  *       <attribute name="flipH" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+  *       <attribute name="flipV" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_GroupTransform2D", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "off", + "ext", + "chOff", + "chExt" + }) + public class CTGroupTransform2D { + + @XmlElement(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + protected CTPoint2D off; + @XmlElement(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + protected CTPositiveSize2D ext; + @XmlElement(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + protected CTPoint2D chOff; + @XmlElement(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + protected CTPositiveSize2D chExt; - @XmlAttribute(name = "rot") ++ @XmlAttribute + protected Integer rot; - @XmlAttribute(name = "flipH") ++ @XmlAttribute + protected Boolean flipH; - @XmlAttribute(name = "flipV") ++ @XmlAttribute + protected Boolean flipV; + + /** + * Gets the value of the off property. + * + * @return + * possible object is + * {@link CTPoint2D } + * + */ + public CTPoint2D getOff() { + return off; + } + + /** + * Sets the value of the off property. + * + * @param value + * allowed object is + * {@link CTPoint2D } + * + */ + public void setOff(CTPoint2D value) { + this.off = value; + } + + public boolean isSetOff() { + return (this.off!= null); + } + + /** + * Gets the value of the ext property. + * + * @return + * possible object is + * {@link CTPositiveSize2D } + * + */ + public CTPositiveSize2D getExt() { + return ext; + } + + /** + * Sets the value of the ext property. + * + * @param value + * allowed object is + * {@link CTPositiveSize2D } + * + */ + public void setExt(CTPositiveSize2D value) { + this.ext = value; + } + + public boolean isSetExt() { + return (this.ext!= null); + } + + /** + * Gets the value of the chOff property. + * + * @return + * possible object is + * {@link CTPoint2D } + * + */ + public CTPoint2D getChOff() { + return chOff; + } + + /** + * Sets the value of the chOff property. + * + * @param value + * allowed object is + * {@link CTPoint2D } + * + */ + public void setChOff(CTPoint2D value) { + this.chOff = value; + } + + public boolean isSetChOff() { + return (this.chOff!= null); + } + + /** + * Gets the value of the chExt property. + * + * @return + * possible object is + * {@link CTPositiveSize2D } + * + */ + public CTPositiveSize2D getChExt() { + return chExt; + } + + /** + * Sets the value of the chExt property. + * + * @param value + * allowed object is + * {@link CTPositiveSize2D } + * + */ + public void setChExt(CTPositiveSize2D value) { + this.chExt = value; + } + + public boolean isSetChExt() { + return (this.chExt!= null); + } + + /** + * Gets the value of the rot property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public int getRot() { + if (rot == null) { + return 0; + } else { + return rot; + } + } + + /** + * Sets the value of the rot property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setRot(int value) { + this.rot = value; + } + + public boolean isSetRot() { + return (this.rot!= null); + } + + public void unsetRot() { + this.rot = null; + } + + /** + * Gets the value of the flipH property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isFlipH() { + if (flipH == null) { + return false; + } else { + return flipH; + } + } + + /** + * Sets the value of the flipH property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setFlipH(boolean value) { + this.flipH = value; + } + + public boolean isSetFlipH() { + return (this.flipH!= null); + } + + public void unsetFlipH() { + this.flipH = null; + } + + /** + * Gets the value of the flipV property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isFlipV() { + if (flipV == null) { + return false; + } else { + return flipV; + } + } + + /** + * Sets the value of the flipV property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setFlipV(boolean value) { + this.flipV = value; + } + + public boolean isSetFlipV() { + return (this.flipV!= null); + } + + public void unsetFlipV() { + this.flipV = null; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTHslColor.java index 0000000000,376d423ee3..53ced8d65d mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTHslColor.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTHslColor.java @@@ -1,0 -1,221 +1,221 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import java.util.ArrayList; + import java.util.List; + import javax.xml.bind.JAXBElement; + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElementRef; + import javax.xml.bind.annotation.XmlElementRefs; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_HslColor complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_HslColor">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <group ref="{http://schemas.openxmlformats.org/drawingml/2006/main}EG_ColorTransform" maxOccurs="unbounded" minOccurs="0"/>
+  *       </sequence>
+  *       <attribute name="hue" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_PositiveFixedAngle" />
+  *       <attribute name="sat" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Percentage" />
+  *       <attribute name="lum" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Percentage" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_HslColor", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "egColorTransform" + }) + public class CTHslColor { + + @XmlElementRefs({ - @XmlElementRef(name = "red", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "greenMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "gamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "invGamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "gray", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "comp", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lumMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "green", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "inv", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "satMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "sat", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alphaOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "greenOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "redOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alphaMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lumOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "satOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lum", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alpha", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "tint", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "redMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "shade", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false) ++ @XmlElementRef(name = "comp", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "satMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "tint", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "satOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lum", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "gray", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "gamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "inv", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "red", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alpha", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "greenOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "green", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "greenMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lumMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "redOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "invGamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alphaOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "redMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alphaMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lumOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "sat", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "shade", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class) + }) + protected List> egColorTransform; - @XmlAttribute(name = "hue", required = true) ++ @XmlAttribute(required = true) + protected int hue; - @XmlAttribute(name = "sat", required = true) ++ @XmlAttribute(required = true) + protected int sat; - @XmlAttribute(name = "lum", required = true) ++ @XmlAttribute(required = true) + protected int lum; + + /** + * Gets the value of the egColorTransform property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the egColorTransform property. + * + *

+ * For example, to add a new item, do as follows: + *

+      *    getEGColorTransform().add(newItem);
+      * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list - * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTAngle }{@code >} - * {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >} - * {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTAngle }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >} + * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} + * + * + */ + public List> getEGColorTransform() { + if (egColorTransform == null) { + egColorTransform = new ArrayList>(); + } + return this.egColorTransform; + } + + public boolean isSetEGColorTransform() { + return ((this.egColorTransform!= null)&&(!this.egColorTransform.isEmpty())); + } + + public void unsetEGColorTransform() { + this.egColorTransform = null; + } + + /** + * Gets the value of the hue property. + * + */ + public int getHue() { + return hue; + } + + /** + * Sets the value of the hue property. + * + */ + public void setHue(int value) { + this.hue = value; + } + + public boolean isSetHue() { + return true; + } + + /** + * Gets the value of the sat property. + * + */ + public int getSat() { + return sat; + } + + /** + * Sets the value of the sat property. + * + */ + public void setSat(int value) { + this.sat = value; + } + + public boolean isSetSat() { + return true; + } + + /** + * Gets the value of the lum property. + * + */ + public int getLum() { + return lum; + } + + /** + * Sets the value of the lum property. + * + */ + public void setLum(int value) { + this.lum = value; + } + + public boolean isSetLum() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTHyperlink.java index 0000000000,0c89f392ac..03e486af5d mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTHyperlink.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTHyperlink.java @@@ -1,0 -1,403 +1,403 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElement; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_Hyperlink complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_Hyperlink">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <element name="snd" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_EmbeddedWAVAudioFile" minOccurs="0"/>
+  *         <element name="extLst" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_OfficeArtExtensionList" minOccurs="0"/>
+  *       </sequence>
+  *       <attribute ref="{http://schemas.openxmlformats.org/officeDocument/2006/relationships}id"/>
+  *       <attribute name="invalidUrl" type="{http://www.w3.org/2001/XMLSchema}string" default="" />
+  *       <attribute name="action" type="{http://www.w3.org/2001/XMLSchema}string" default="" />
+  *       <attribute name="tgtFrame" type="{http://www.w3.org/2001/XMLSchema}string" default="" />
+  *       <attribute name="tooltip" type="{http://www.w3.org/2001/XMLSchema}string" default="" />
+  *       <attribute name="history" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+  *       <attribute name="highlightClick" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+  *       <attribute name="endSnd" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_Hyperlink", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "snd", + "extLst" + }) + public class CTHyperlink { + + @XmlElement(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + protected CTEmbeddedWAVAudioFile snd; + @XmlElement(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + protected CTOfficeArtExtensionList extLst; - @XmlAttribute(name = "id", namespace = "http://schemas.openxmlformats.org/officeDocument/2006/relationships") ++ @XmlAttribute(namespace = "http://schemas.openxmlformats.org/officeDocument/2006/relationships") + protected String id; - @XmlAttribute(name = "invalidUrl") ++ @XmlAttribute + protected String invalidUrl; - @XmlAttribute(name = "action") ++ @XmlAttribute + protected String action; - @XmlAttribute(name = "tgtFrame") ++ @XmlAttribute + protected String tgtFrame; - @XmlAttribute(name = "tooltip") ++ @XmlAttribute + protected String tooltip; - @XmlAttribute(name = "history") ++ @XmlAttribute + protected Boolean history; - @XmlAttribute(name = "highlightClick") ++ @XmlAttribute + protected Boolean highlightClick; - @XmlAttribute(name = "endSnd") ++ @XmlAttribute + protected Boolean endSnd; + + /** + * Gets the value of the snd property. + * + * @return + * possible object is + * {@link CTEmbeddedWAVAudioFile } + * + */ + public CTEmbeddedWAVAudioFile getSnd() { + return snd; + } + + /** + * Sets the value of the snd property. + * + * @param value + * allowed object is + * {@link CTEmbeddedWAVAudioFile } + * + */ + public void setSnd(CTEmbeddedWAVAudioFile value) { + this.snd = value; + } + + public boolean isSetSnd() { + return (this.snd!= null); + } + + /** + * Gets the value of the extLst property. + * + * @return + * possible object is + * {@link CTOfficeArtExtensionList } + * + */ + public CTOfficeArtExtensionList getExtLst() { + return extLst; + } + + /** + * Sets the value of the extLst property. + * + * @param value + * allowed object is + * {@link CTOfficeArtExtensionList } + * + */ + public void setExtLst(CTOfficeArtExtensionList value) { + this.extLst = value; + } + + public boolean isSetExtLst() { + return (this.extLst!= null); + } + + /** + * Drawing Object Hyperlink Target + * + * @return + * possible object is + * {@link String } + * + */ + public String getId() { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setId(String value) { + this.id = value; + } + + public boolean isSetId() { + return (this.id!= null); + } + + /** + * Gets the value of the invalidUrl property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getInvalidUrl() { + if (invalidUrl == null) { + return ""; + } else { + return invalidUrl; + } + } + + /** + * Sets the value of the invalidUrl property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setInvalidUrl(String value) { + this.invalidUrl = value; + } + + public boolean isSetInvalidUrl() { + return (this.invalidUrl!= null); + } + + /** + * Gets the value of the action property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAction() { + if (action == null) { + return ""; + } else { + return action; + } + } + + /** + * Sets the value of the action property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAction(String value) { + this.action = value; + } + + public boolean isSetAction() { + return (this.action!= null); + } + + /** + * Gets the value of the tgtFrame property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTgtFrame() { + if (tgtFrame == null) { + return ""; + } else { + return tgtFrame; + } + } + + /** + * Sets the value of the tgtFrame property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTgtFrame(String value) { + this.tgtFrame = value; + } + + public boolean isSetTgtFrame() { + return (this.tgtFrame!= null); + } + + /** + * Gets the value of the tooltip property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTooltip() { + if (tooltip == null) { + return ""; + } else { + return tooltip; + } + } + + /** + * Sets the value of the tooltip property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTooltip(String value) { + this.tooltip = value; + } + + public boolean isSetTooltip() { + return (this.tooltip!= null); + } + + /** + * Gets the value of the history property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isHistory() { + if (history == null) { + return true; + } else { + return history; + } + } + + /** + * Sets the value of the history property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setHistory(boolean value) { + this.history = value; + } + + public boolean isSetHistory() { + return (this.history!= null); + } + + public void unsetHistory() { + this.history = null; + } + + /** + * Gets the value of the highlightClick property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isHighlightClick() { + if (highlightClick == null) { + return false; + } else { + return highlightClick; + } + } + + /** + * Sets the value of the highlightClick property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setHighlightClick(boolean value) { + this.highlightClick = value; + } + + public boolean isSetHighlightClick() { + return (this.highlightClick!= null); + } + + public void unsetHighlightClick() { + this.highlightClick = null; + } + + /** + * Gets the value of the endSnd property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isEndSnd() { + if (endSnd == null) { + return false; + } else { + return endSnd; + } + } + + /** + * Sets the value of the endSnd property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setEndSnd(boolean value) { + this.endSnd = value; + } + + public boolean isSetEndSnd() { + return (this.endSnd!= null); + } + + public void unsetEndSnd() { + this.endSnd = null; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTOfficeArtExtension.java index 0000000000,ec864d3b53..62edc57b93 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTOfficeArtExtension.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTOfficeArtExtension.java @@@ -1,0 -1,122 +1,122 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAnyElement; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlSchemaType; + import javax.xml.bind.annotation.XmlType; + import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; + import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + import org.w3c.dom.Element; + + + /** + *

Java class for CT_OfficeArtExtension complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_OfficeArtExtension">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <any processContents='lax'/>
+  *       </sequence>
+  *       <attribute name="uri" type="{http://www.w3.org/2001/XMLSchema}token" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_OfficeArtExtension", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "any" + }) + public class CTOfficeArtExtension { + + @XmlAnyElement(lax = true) + protected Object any; - @XmlAttribute(name = "uri") ++ @XmlAttribute + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + @XmlSchemaType(name = "token") + protected String uri; + + /** + * Gets the value of the any property. + * + * @return + * possible object is + * {@link Object } + * {@link Element } + * + */ + public Object getAny() { + return any; + } + + /** + * Sets the value of the any property. + * + * @param value + * allowed object is + * {@link Object } + * {@link Element } + * + */ + public void setAny(Object value) { + this.any = value; + } + + public boolean isSetAny() { + return (this.any!= null); + } + + /** + * Gets the value of the uri property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getUri() { + return uri; + } + + /** + * Sets the value of the uri property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setUri(String value) { + this.uri = value; + } + + public boolean isSetUri() { + return (this.uri!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTPath2D.java index 0000000000,5294812967..25fcd49235 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTPath2D.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTPath2D.java @@@ -1,0 -1,303 +1,303 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import java.util.ArrayList; + import java.util.List; + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElement; + import javax.xml.bind.annotation.XmlElements; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_Path2D complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_Path2D">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <choice maxOccurs="unbounded" minOccurs="0">
+  *         <element name="close" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_Path2DClose"/>
+  *         <element name="moveTo" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_Path2DMoveTo"/>
+  *         <element name="lnTo" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_Path2DLineTo"/>
+  *         <element name="arcTo" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_Path2DArcTo"/>
+  *         <element name="quadBezTo" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_Path2DQuadBezierTo"/>
+  *         <element name="cubicBezTo" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_Path2DCubicBezierTo"/>
+  *       </choice>
+  *       <attribute name="w" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_PositiveCoordinate" default="0" />
+  *       <attribute name="h" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_PositiveCoordinate" default="0" />
+  *       <attribute name="fill" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_PathFillMode" default="norm" />
+  *       <attribute name="stroke" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+  *       <attribute name="extrusionOk" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_Path2D", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "closeOrMoveToOrLnTo" + }) + public class CTPath2D { + + @XmlElements({ - @XmlElement(name = "close", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTPath2DClose.class), - @XmlElement(name = "moveTo", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTPath2DMoveTo.class), + @XmlElement(name = "lnTo", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTPath2DLineTo.class), - @XmlElement(name = "arcTo", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTPath2DArcTo.class), ++ @XmlElement(name = "close", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTPath2DClose.class), ++ @XmlElement(name = "cubicBezTo", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTPath2DCubicBezierTo.class), + @XmlElement(name = "quadBezTo", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTPath2DQuadBezierTo.class), - @XmlElement(name = "cubicBezTo", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTPath2DCubicBezierTo.class) ++ @XmlElement(name = "arcTo", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTPath2DArcTo.class), ++ @XmlElement(name = "moveTo", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = CTPath2DMoveTo.class) + }) + protected List closeOrMoveToOrLnTo; - @XmlAttribute(name = "w") ++ @XmlAttribute + protected Long w; - @XmlAttribute(name = "h") ++ @XmlAttribute + protected Long h; - @XmlAttribute(name = "fill") ++ @XmlAttribute + protected STPathFillMode fill; - @XmlAttribute(name = "stroke") ++ @XmlAttribute + protected Boolean stroke; - @XmlAttribute(name = "extrusionOk") ++ @XmlAttribute + protected Boolean extrusionOk; + + /** + * Gets the value of the closeOrMoveToOrLnTo property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the closeOrMoveToOrLnTo property. + * + *

+ * For example, to add a new item, do as follows: + *

+      *    getCloseOrMoveToOrLnTo().add(newItem);
+      * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list - * {@link CTPath2DClose } - * {@link CTPath2DMoveTo } + * {@link CTPath2DLineTo } - * {@link CTPath2DArcTo } - * {@link CTPath2DQuadBezierTo } ++ * {@link CTPath2DClose } + * {@link CTPath2DCubicBezierTo } ++ * {@link CTPath2DQuadBezierTo } ++ * {@link CTPath2DArcTo } ++ * {@link CTPath2DMoveTo } + * + * + */ + public List getCloseOrMoveToOrLnTo() { + if (closeOrMoveToOrLnTo == null) { + closeOrMoveToOrLnTo = new ArrayList(); + } + return this.closeOrMoveToOrLnTo; + } + + public boolean isSetCloseOrMoveToOrLnTo() { + return ((this.closeOrMoveToOrLnTo!= null)&&(!this.closeOrMoveToOrLnTo.isEmpty())); + } + + public void unsetCloseOrMoveToOrLnTo() { + this.closeOrMoveToOrLnTo = null; + } + + /** + * Gets the value of the w property. + * + * @return + * possible object is + * {@link Long } + * + */ + public long getW() { + if (w == null) { + return 0L; + } else { + return w; + } + } + + /** + * Sets the value of the w property. + * + * @param value + * allowed object is + * {@link Long } + * + */ + public void setW(long value) { + this.w = value; + } + + public boolean isSetW() { + return (this.w!= null); + } + + public void unsetW() { + this.w = null; + } + + /** + * Gets the value of the h property. + * + * @return + * possible object is + * {@link Long } + * + */ + public long getH() { + if (h == null) { + return 0L; + } else { + return h; + } + } + + /** + * Sets the value of the h property. + * + * @param value + * allowed object is + * {@link Long } + * + */ + public void setH(long value) { + this.h = value; + } + + public boolean isSetH() { + return (this.h!= null); + } + + public void unsetH() { + this.h = null; + } + + /** + * Gets the value of the fill property. + * + * @return + * possible object is + * {@link STPathFillMode } + * + */ + public STPathFillMode getFill() { + if (fill == null) { + return STPathFillMode.NORM; + } else { + return fill; + } + } + + /** + * Sets the value of the fill property. + * + * @param value + * allowed object is + * {@link STPathFillMode } + * + */ + public void setFill(STPathFillMode value) { + this.fill = value; + } + + public boolean isSetFill() { + return (this.fill!= null); + } + + /** + * Gets the value of the stroke property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isStroke() { + if (stroke == null) { + return true; + } else { + return stroke; + } + } + + /** + * Sets the value of the stroke property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setStroke(boolean value) { + this.stroke = value; + } + + public boolean isSetStroke() { + return (this.stroke!= null); + } + + public void unsetStroke() { + this.stroke = null; + } + + /** + * Gets the value of the extrusionOk property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isExtrusionOk() { + if (extrusionOk == null) { + return true; + } else { + return extrusionOk; + } + } + + /** + * Sets the value of the extrusionOk property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setExtrusionOk(boolean value) { + this.extrusionOk = value; + } + + public boolean isSetExtrusionOk() { + return (this.extrusionOk!= null); + } + + public void unsetExtrusionOk() { + this.extrusionOk = null; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTPath2DArcTo.java index 0000000000,5464ee4d14..a4c325aa1f mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTPath2DArcTo.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTPath2DArcTo.java @@@ -1,0 -1,171 +1,171 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_Path2DArcTo complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_Path2DArcTo">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="wR" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *       <attribute name="hR" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *       <attribute name="stAng" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjAngle" />
+  *       <attribute name="swAng" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjAngle" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_Path2DArcTo", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTPath2DArcTo { + + @XmlAttribute(name = "wR", required = true) + protected String wr; + @XmlAttribute(name = "hR", required = true) + protected String hr; - @XmlAttribute(name = "stAng", required = true) ++ @XmlAttribute(required = true) + protected String stAng; - @XmlAttribute(name = "swAng", required = true) ++ @XmlAttribute(required = true) + protected String swAng; + + /** + * Gets the value of the wr property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getWR() { + return wr; + } + + /** + * Sets the value of the wr property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setWR(String value) { + this.wr = value; + } + + public boolean isSetWR() { + return (this.wr!= null); + } + + /** + * Gets the value of the hr property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getHR() { + return hr; + } + + /** + * Sets the value of the hr property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setHR(String value) { + this.hr = value; + } + + public boolean isSetHR() { + return (this.hr!= null); + } + + /** + * Gets the value of the stAng property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStAng() { + return stAng; + } + + /** + * Sets the value of the stAng property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStAng(String value) { + this.stAng = value; + } + + public boolean isSetStAng() { + return (this.stAng!= null); + } + + /** + * Gets the value of the swAng property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSwAng() { + return swAng; + } + + /** + * Sets the value of the swAng property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSwAng(String value) { + this.swAng = value; + } + + public boolean isSetSwAng() { + return (this.swAng!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTPercentage.java index 0000000000,e1a74b53e5..7ca8c1fec5 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTPercentage.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTPercentage.java @@@ -1,0 -1,70 +1,70 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_Percentage complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_Percentage">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="val" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Percentage" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_Percentage", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTPercentage { + - @XmlAttribute(name = "val", required = true) ++ @XmlAttribute(required = true) + protected int val; + + /** + * Gets the value of the val property. + * + */ + public int getVal() { + return val; + } + + /** + * Sets the value of the val property. + * + */ + public void setVal(int value) { + this.val = value; + } + + public boolean isSetVal() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTPoint2D.java index 0000000000,06cbfbc7aa..ae87986035 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTPoint2D.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTPoint2D.java @@@ -1,0 -1,93 +1,93 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_Point2D complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_Point2D">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="x" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Coordinate" />
+  *       <attribute name="y" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Coordinate" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_Point2D", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTPoint2D { + - @XmlAttribute(name = "x", required = true) ++ @XmlAttribute(required = true) + protected long x; - @XmlAttribute(name = "y", required = true) ++ @XmlAttribute(required = true) + protected long y; + + /** + * Gets the value of the x property. + * + */ + public long getX() { + return x; + } + + /** + * Sets the value of the x property. + * + */ + public void setX(long value) { + this.x = value; + } + + public boolean isSetX() { + return true; + } + + /** + * Gets the value of the y property. + * + */ + public long getY() { + return y; + } + + /** + * Sets the value of the y property. + * + */ + public void setY(long value) { + this.y = value; + } + + public boolean isSetY() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTPoint3D.java index 0000000000,3cbeb670f9..e14c6ba4f2 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTPoint3D.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTPoint3D.java @@@ -1,0 -1,116 +1,116 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_Point3D complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_Point3D">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="x" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Coordinate" />
+  *       <attribute name="y" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Coordinate" />
+  *       <attribute name="z" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Coordinate" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_Point3D", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTPoint3D { + - @XmlAttribute(name = "x", required = true) ++ @XmlAttribute(required = true) + protected long x; - @XmlAttribute(name = "y", required = true) ++ @XmlAttribute(required = true) + protected long y; - @XmlAttribute(name = "z", required = true) ++ @XmlAttribute(required = true) + protected long z; + + /** + * Gets the value of the x property. + * + */ + public long getX() { + return x; + } + + /** + * Sets the value of the x property. + * + */ + public void setX(long value) { + this.x = value; + } + + public boolean isSetX() { + return true; + } + + /** + * Gets the value of the y property. + * + */ + public long getY() { + return y; + } + + /** + * Sets the value of the y property. + * + */ + public void setY(long value) { + this.y = value; + } + + public boolean isSetY() { + return true; + } + + /** + * Gets the value of the z property. + * + */ + public long getZ() { + return z; + } + + /** + * Sets the value of the z property. + * + */ + public void setZ(long value) { + this.z = value; + } + + public boolean isSetZ() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTPolarAdjustHandle.java index 0000000000,646dad5b58..9547ca9881 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTPolarAdjustHandle.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTPolarAdjustHandle.java @@@ -1,0 -1,273 +1,273 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElement; + import javax.xml.bind.annotation.XmlType; + import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; + import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + + /** + *

Java class for CT_PolarAdjustHandle complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_PolarAdjustHandle">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <element name="pos" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_AdjPoint2D"/>
+  *       </sequence>
+  *       <attribute name="gdRefR" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_GeomGuideName" />
+  *       <attribute name="minR" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *       <attribute name="maxR" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *       <attribute name="gdRefAng" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_GeomGuideName" />
+  *       <attribute name="minAng" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjAngle" />
+  *       <attribute name="maxAng" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjAngle" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_PolarAdjustHandle", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "pos" + }) + public class CTPolarAdjustHandle { + + @XmlElement(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", required = true) + protected CTAdjPoint2D pos; - @XmlAttribute(name = "gdRefR") ++ @XmlAttribute + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String gdRefR; - @XmlAttribute(name = "minR") ++ @XmlAttribute + protected String minR; - @XmlAttribute(name = "maxR") ++ @XmlAttribute + protected String maxR; - @XmlAttribute(name = "gdRefAng") ++ @XmlAttribute + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String gdRefAng; - @XmlAttribute(name = "minAng") ++ @XmlAttribute + protected String minAng; - @XmlAttribute(name = "maxAng") ++ @XmlAttribute + protected String maxAng; + + /** + * Gets the value of the pos property. + * + * @return + * possible object is + * {@link CTAdjPoint2D } + * + */ + public CTAdjPoint2D getPos() { + return pos; + } + + /** + * Sets the value of the pos property. + * + * @param value + * allowed object is + * {@link CTAdjPoint2D } + * + */ + public void setPos(CTAdjPoint2D value) { + this.pos = value; + } + + public boolean isSetPos() { + return (this.pos!= null); + } + + /** + * Gets the value of the gdRefR property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getGdRefR() { + return gdRefR; + } + + /** + * Sets the value of the gdRefR property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setGdRefR(String value) { + this.gdRefR = value; + } + + public boolean isSetGdRefR() { + return (this.gdRefR!= null); + } + + /** + * Gets the value of the minR property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getMinR() { + return minR; + } + + /** + * Sets the value of the minR property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMinR(String value) { + this.minR = value; + } + + public boolean isSetMinR() { + return (this.minR!= null); + } + + /** + * Gets the value of the maxR property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getMaxR() { + return maxR; + } + + /** + * Sets the value of the maxR property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMaxR(String value) { + this.maxR = value; + } + + public boolean isSetMaxR() { + return (this.maxR!= null); + } + + /** + * Gets the value of the gdRefAng property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getGdRefAng() { + return gdRefAng; + } + + /** + * Sets the value of the gdRefAng property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setGdRefAng(String value) { + this.gdRefAng = value; + } + + public boolean isSetGdRefAng() { + return (this.gdRefAng!= null); + } + + /** + * Gets the value of the minAng property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getMinAng() { + return minAng; + } + + /** + * Sets the value of the minAng property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMinAng(String value) { + this.minAng = value; + } + + public boolean isSetMinAng() { + return (this.minAng!= null); + } + + /** + * Gets the value of the maxAng property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getMaxAng() { + return maxAng; + } + + /** + * Sets the value of the maxAng property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMaxAng(String value) { + this.maxAng = value; + } + + public boolean isSetMaxAng() { + return (this.maxAng!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTPositiveFixedAngle.java index 0000000000,962db95137..94348d9bff mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTPositiveFixedAngle.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTPositiveFixedAngle.java @@@ -1,0 -1,70 +1,70 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_PositiveFixedAngle complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_PositiveFixedAngle">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="val" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_PositiveFixedAngle" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_PositiveFixedAngle", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTPositiveFixedAngle { + - @XmlAttribute(name = "val", required = true) ++ @XmlAttribute(required = true) + protected int val; + + /** + * Gets the value of the val property. + * + */ + public int getVal() { + return val; + } + + /** + * Sets the value of the val property. + * + */ + public void setVal(int value) { + this.val = value; + } + + public boolean isSetVal() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTPositiveFixedPercentage.java index 0000000000,001f01adce..de659159e1 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTPositiveFixedPercentage.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTPositiveFixedPercentage.java @@@ -1,0 -1,70 +1,70 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_PositiveFixedPercentage complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_PositiveFixedPercentage">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="val" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_PositiveFixedPercentage" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_PositiveFixedPercentage", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTPositiveFixedPercentage { + - @XmlAttribute(name = "val", required = true) ++ @XmlAttribute(required = true) + protected int val; + + /** + * Gets the value of the val property. + * + */ + public int getVal() { + return val; + } + + /** + * Sets the value of the val property. + * + */ + public void setVal(int value) { + this.val = value; + } + + public boolean isSetVal() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTPositivePercentage.java index 0000000000,8fc61f301f..7b377e1444 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTPositivePercentage.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTPositivePercentage.java @@@ -1,0 -1,70 +1,70 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_PositivePercentage complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_PositivePercentage">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="val" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_PositivePercentage" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_PositivePercentage", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTPositivePercentage { + - @XmlAttribute(name = "val", required = true) ++ @XmlAttribute(required = true) + protected int val; + + /** + * Gets the value of the val property. + * + */ + public int getVal() { + return val; + } + + /** + * Sets the value of the val property. + * + */ + public void setVal(int value) { + this.val = value; + } + + public boolean isSetVal() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTPositiveSize2D.java index 0000000000,c8d76e6e56..210fd925a5 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTPositiveSize2D.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTPositiveSize2D.java @@@ -1,0 -1,93 +1,93 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_PositiveSize2D complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_PositiveSize2D">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="cx" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_PositiveCoordinate" />
+  *       <attribute name="cy" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_PositiveCoordinate" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_PositiveSize2D", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTPositiveSize2D { + - @XmlAttribute(name = "cx", required = true) ++ @XmlAttribute(required = true) + protected long cx; - @XmlAttribute(name = "cy", required = true) ++ @XmlAttribute(required = true) + protected long cy; + + /** + * Gets the value of the cx property. + * + */ + public long getCx() { + return cx; + } + + /** + * Sets the value of the cx property. + * + */ + public void setCx(long value) { + this.cx = value; + } + + public boolean isSetCx() { + return true; + } + + /** + * Gets the value of the cy property. + * + */ + public long getCy() { + return cy; + } + + /** + * Sets the value of the cy property. + * + */ + public void setCy(long value) { + this.cy = value; + } + + public boolean isSetCy() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTPresetColor.java index 0000000000,e240a711a0..595d1c5968 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTPresetColor.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTPresetColor.java @@@ -1,0 -1,183 +1,183 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import java.util.ArrayList; + import java.util.List; + import javax.xml.bind.JAXBElement; + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElementRef; + import javax.xml.bind.annotation.XmlElementRefs; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_PresetColor complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_PresetColor">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <group ref="{http://schemas.openxmlformats.org/drawingml/2006/main}EG_ColorTransform" maxOccurs="unbounded" minOccurs="0"/>
+  *       </sequence>
+  *       <attribute name="val" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_PresetColorVal" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_PresetColor", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "egColorTransform" + }) + public class CTPresetColor { + + @XmlElementRefs({ - @XmlElementRef(name = "redOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "invGamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "greenOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "green", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alphaMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "inv", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "gray", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alpha", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "shade", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lumOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "comp", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alphaOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "satOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "sat", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "red", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "redMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "tint", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "greenMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "gamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "satMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lumMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lum", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false) ++ @XmlElementRef(name = "shade", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "satOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alphaMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "green", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "red", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "gray", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lum", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "invGamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "comp", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lumOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "greenOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "sat", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "redMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "greenMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lumMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alpha", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alphaOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "inv", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "gamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "tint", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "satMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "redOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class) + }) + protected List> egColorTransform; - @XmlAttribute(name = "val") ++ @XmlAttribute + protected STPresetColorVal val; + + /** + * Gets the value of the egColorTransform property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the egColorTransform property. + * + *

+ * For example, to add a new item, do as follows: + *

+      *    getEGColorTransform().add(newItem);
+      * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >} - * {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTAngle }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTAngle }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >} - * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * + * + */ + public List> getEGColorTransform() { + if (egColorTransform == null) { + egColorTransform = new ArrayList>(); + } + return this.egColorTransform; + } + + public boolean isSetEGColorTransform() { + return ((this.egColorTransform!= null)&&(!this.egColorTransform.isEmpty())); + } + + public void unsetEGColorTransform() { + this.egColorTransform = null; + } + + /** + * Gets the value of the val property. + * + * @return + * possible object is + * {@link STPresetColorVal } + * + */ + public STPresetColorVal getVal() { + return val; + } + + /** + * Sets the value of the val property. + * + * @param value + * allowed object is + * {@link STPresetColorVal } + * + */ + public void setVal(STPresetColorVal value) { + this.val = value; + } + + public boolean isSetVal() { + return (this.val!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTPresetGeometry2D.java index 0000000000,b55b02ea07..234bbd95f9 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTPresetGeometry2D.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTPresetGeometry2D.java @@@ -1,0 -1,114 +1,114 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElement; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_PresetGeometry2D complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_PresetGeometry2D">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <element name="avLst" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_GeomGuideList" minOccurs="0"/>
+  *       </sequence>
+  *       <attribute name="prst" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_ShapeType" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_PresetGeometry2D", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "avLst" + }) + public class CTPresetGeometry2D { + + @XmlElement(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + protected CTGeomGuideList avLst; - @XmlAttribute(name = "prst", required = true) ++ @XmlAttribute(required = true) + protected STShapeType prst; + + /** + * Gets the value of the avLst property. + * + * @return + * possible object is + * {@link CTGeomGuideList } + * + */ + public CTGeomGuideList getAvLst() { + return avLst; + } + + /** + * Sets the value of the avLst property. + * + * @param value + * allowed object is + * {@link CTGeomGuideList } + * + */ + public void setAvLst(CTGeomGuideList value) { + this.avLst = value; + } + + public boolean isSetAvLst() { + return (this.avLst!= null); + } + + /** + * Gets the value of the prst property. + * + * @return + * possible object is + * {@link STShapeType } + * + */ + public STShapeType getPrst() { + return prst; + } + + /** + * Sets the value of the prst property. + * + * @param value + * allowed object is + * {@link STShapeType } + * + */ + public void setPrst(STShapeType value) { + this.prst = value; + } + + public boolean isSetPrst() { + return (this.prst!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTPresetTextShape.java index 0000000000,f7082b353b..0a6135fc90 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTPresetTextShape.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTPresetTextShape.java @@@ -1,0 -1,114 +1,114 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElement; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_PresetTextShape complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_PresetTextShape">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <element name="avLst" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_GeomGuideList" minOccurs="0"/>
+  *       </sequence>
+  *       <attribute name="prst" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_TextShapeType" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_PresetTextShape", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "avLst" + }) + public class CTPresetTextShape { + + @XmlElement(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + protected CTGeomGuideList avLst; - @XmlAttribute(name = "prst", required = true) ++ @XmlAttribute(required = true) + protected STTextShapeType prst; + + /** + * Gets the value of the avLst property. + * + * @return + * possible object is + * {@link CTGeomGuideList } + * + */ + public CTGeomGuideList getAvLst() { + return avLst; + } + + /** + * Sets the value of the avLst property. + * + * @param value + * allowed object is + * {@link CTGeomGuideList } + * + */ + public void setAvLst(CTGeomGuideList value) { + this.avLst = value; + } + + public boolean isSetAvLst() { + return (this.avLst!= null); + } + + /** + * Gets the value of the prst property. + * + * @return + * possible object is + * {@link STTextShapeType } + * + */ + public STTextShapeType getPrst() { + return prst; + } + + /** + * Sets the value of the prst property. + * + * @param value + * allowed object is + * {@link STTextShapeType } + * + */ + public void setPrst(STTextShapeType value) { + this.prst = value; + } + + public boolean isSetPrst() { + return (this.prst!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTRatio.java index 0000000000,3a951c1f1f..4a61b88cb9 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTRatio.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTRatio.java @@@ -1,0 -1,93 +1,93 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_Ratio complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_Ratio">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="n" use="required" type="{http://www.w3.org/2001/XMLSchema}long" />
+  *       <attribute name="d" use="required" type="{http://www.w3.org/2001/XMLSchema}long" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_Ratio", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTRatio { + - @XmlAttribute(name = "n", required = true) ++ @XmlAttribute(required = true) + protected long n; - @XmlAttribute(name = "d", required = true) ++ @XmlAttribute(required = true) + protected long d; + + /** + * Gets the value of the n property. + * + */ + public long getN() { + return n; + } + + /** + * Sets the value of the n property. + * + */ + public void setN(long value) { + this.n = value; + } + + public boolean isSetN() { + return true; + } + + /** + * Gets the value of the d property. + * + */ + public long getD() { + return d; + } + + /** + * Sets the value of the d property. + * + */ + public void setD(long value) { + this.d = value; + } + + public boolean isSetD() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTRelativeRect.java index 0000000000,e332bd83c9..a8b82c4744 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTRelativeRect.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTRelativeRect.java @@@ -1,0 -1,203 +1,203 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_RelativeRect complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_RelativeRect">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="l" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Percentage" default="0" />
+  *       <attribute name="t" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Percentage" default="0" />
+  *       <attribute name="r" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Percentage" default="0" />
+  *       <attribute name="b" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Percentage" default="0" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_RelativeRect", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTRelativeRect { + - @XmlAttribute(name = "l") ++ @XmlAttribute + protected Integer l; - @XmlAttribute(name = "t") ++ @XmlAttribute + protected Integer t; - @XmlAttribute(name = "r") ++ @XmlAttribute + protected Integer r; - @XmlAttribute(name = "b") ++ @XmlAttribute + protected Integer b; + + /** + * Gets the value of the l property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public int getL() { + if (l == null) { + return 0; + } else { + return l; + } + } + + /** + * Sets the value of the l property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setL(int value) { + this.l = value; + } + + public boolean isSetL() { + return (this.l!= null); + } + + public void unsetL() { + this.l = null; + } + + /** + * Gets the value of the t property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public int getT() { + if (t == null) { + return 0; + } else { + return t; + } + } + + /** + * Sets the value of the t property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setT(int value) { + this.t = value; + } + + public boolean isSetT() { + return (this.t!= null); + } + + public void unsetT() { + this.t = null; + } + + /** + * Gets the value of the r property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public int getR() { + if (r == null) { + return 0; + } else { + return r; + } + } + + /** + * Sets the value of the r property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setR(int value) { + this.r = value; + } + + public boolean isSetR() { + return (this.r!= null); + } + + public void unsetR() { + this.r = null; + } + + /** + * Gets the value of the b property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public int getB() { + if (b == null) { + return 0; + } else { + return b; + } + } + + /** + * Sets the value of the b property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setB(int value) { + this.b = value; + } + + public boolean isSetB() { + return (this.b!= null); + } + + public void unsetB() { + this.b = null; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTSRgbColor.java index 0000000000,ef920d601a..cd2f337fdb mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTSRgbColor.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTSRgbColor.java @@@ -1,0 -1,186 +1,186 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import java.util.ArrayList; + import java.util.List; + import javax.xml.bind.JAXBElement; + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElementRef; + import javax.xml.bind.annotation.XmlElementRefs; + import javax.xml.bind.annotation.XmlType; + import javax.xml.bind.annotation.adapters.HexBinaryAdapter; + import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + + /** + *

Java class for CT_SRgbColor complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_SRgbColor">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <group ref="{http://schemas.openxmlformats.org/drawingml/2006/main}EG_ColorTransform" maxOccurs="unbounded" minOccurs="0"/>
+  *       </sequence>
+  *       <attribute name="val" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_HexBinary3" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_SRgbColor", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "egColorTransform" + }) + public class CTSRgbColor { + + @XmlElementRefs({ - @XmlElementRef(name = "comp", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lumOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "gray", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "greenMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "satMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "redMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alphaMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "inv", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "tint", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lumMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "invGamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "shade", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alphaOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "satOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "gamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lum", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alpha", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "red", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "greenOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "sat", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "green", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "redOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false) ++ @XmlElementRef(name = "shade", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "invGamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "redOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lumOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "redMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alpha", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "inv", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "red", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alphaMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alphaOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "green", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "gray", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "sat", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lum", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "gamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "tint", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "satMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lumMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "greenOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "comp", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "satOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "greenMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class) + }) + protected List> egColorTransform; - @XmlAttribute(name = "val", required = true) ++ @XmlAttribute(required = true) + @XmlJavaTypeAdapter(HexBinaryAdapter.class) + protected byte[] val; + + /** + * Gets the value of the egColorTransform property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the egColorTransform property. + * + *

+ * For example, to add a new item, do as follows: + *

+      *    getEGColorTransform().add(newItem);
+      * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list - * {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >} - * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >} - * {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTAngle }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTAngle }{@code >} + * + * + */ + public List> getEGColorTransform() { + if (egColorTransform == null) { + egColorTransform = new ArrayList>(); + } + return this.egColorTransform; + } + + public boolean isSetEGColorTransform() { + return ((this.egColorTransform!= null)&&(!this.egColorTransform.isEmpty())); + } + + public void unsetEGColorTransform() { + this.egColorTransform = null; + } + + /** + * Gets the value of the val property. + * + * @return + * possible object is + * {@link String } + * + */ + public byte[] getVal() { + return val; + } + + /** + * Sets the value of the val property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVal(byte[] value) { - this.val = value; ++ this.val = ((byte[]) value); + } + + public boolean isSetVal() { + return (this.val!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTScRgbColor.java index 0000000000,335e4b2912..2cb3986eb1 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTScRgbColor.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTScRgbColor.java @@@ -1,0 -1,221 +1,221 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import java.util.ArrayList; + import java.util.List; + import javax.xml.bind.JAXBElement; + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElementRef; + import javax.xml.bind.annotation.XmlElementRefs; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_ScRgbColor complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_ScRgbColor">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <group ref="{http://schemas.openxmlformats.org/drawingml/2006/main}EG_ColorTransform" maxOccurs="unbounded" minOccurs="0"/>
+  *       </sequence>
+  *       <attribute name="r" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Percentage" />
+  *       <attribute name="g" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Percentage" />
+  *       <attribute name="b" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Percentage" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_ScRgbColor", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "egColorTransform" + }) + public class CTScRgbColor { + + @XmlElementRefs({ - @XmlElementRef(name = "redMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "gray", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "satMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "green", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "sat", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "tint", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "gamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "inv", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "comp", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "satOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "red", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "greenOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lumMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alphaMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lumOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lum", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "redOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "greenMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "shade", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "invGamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alphaOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alpha", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false) ++ @XmlElementRef(name = "sat", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lumOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lumMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "satMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "gray", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "tint", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alphaMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "gamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alphaOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "comp", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "shade", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "redOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "red", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "satOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "green", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "greenOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alpha", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lum", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "inv", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "invGamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "greenMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "redMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class) + }) + protected List> egColorTransform; - @XmlAttribute(name = "r", required = true) ++ @XmlAttribute(required = true) + protected int r; - @XmlAttribute(name = "g", required = true) ++ @XmlAttribute(required = true) + protected int g; - @XmlAttribute(name = "b", required = true) ++ @XmlAttribute(required = true) + protected int b; + + /** + * Gets the value of the egColorTransform property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the egColorTransform property. + * + *

+ * For example, to add a new item, do as follows: + *

+      *    getEGColorTransform().add(newItem);
+      * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >} - * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTAngle }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >} - * {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTAngle }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >} + * + * + */ + public List> getEGColorTransform() { + if (egColorTransform == null) { + egColorTransform = new ArrayList>(); + } + return this.egColorTransform; + } + + public boolean isSetEGColorTransform() { + return ((this.egColorTransform!= null)&&(!this.egColorTransform.isEmpty())); + } + + public void unsetEGColorTransform() { + this.egColorTransform = null; + } + + /** + * Gets the value of the r property. + * + */ + public int getR() { + return r; + } + + /** + * Sets the value of the r property. + * + */ + public void setR(int value) { + this.r = value; + } + + public boolean isSetR() { + return true; + } + + /** + * Gets the value of the g property. + * + */ + public int getG() { + return g; + } + + /** + * Sets the value of the g property. + * + */ + public void setG(int value) { + this.g = value; + } + + public boolean isSetG() { + return true; + } + + /** + * Gets the value of the b property. + * + */ + public int getB() { + return b; + } + + /** + * Sets the value of the b property. + * + */ + public void setB(int value) { + this.b = value; + } + + public boolean isSetB() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTSchemeColor.java index 0000000000,7febaad838..ac8fb5c27d mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTSchemeColor.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTSchemeColor.java @@@ -1,0 -1,183 +1,183 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import java.util.ArrayList; + import java.util.List; + import javax.xml.bind.JAXBElement; + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElementRef; + import javax.xml.bind.annotation.XmlElementRefs; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_SchemeColor complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_SchemeColor">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <group ref="{http://schemas.openxmlformats.org/drawingml/2006/main}EG_ColorTransform" maxOccurs="unbounded" minOccurs="0"/>
+  *       </sequence>
+  *       <attribute name="val" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_SchemeColorVal" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_SchemeColor", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "egColorTransform" + }) + public class CTSchemeColor { + + @XmlElementRefs({ - @XmlElementRef(name = "lumMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "inv", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "satMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "shade", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "gray", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "satOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "sat", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alphaOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "red", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "tint", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "green", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "greenOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "redMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alpha", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alphaMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lum", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lumOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "redOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "gamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "greenMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "comp", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "invGamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false) ++ @XmlElementRef(name = "redMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "redOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "comp", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "sat", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "satMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "gray", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "tint", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alpha", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "red", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "greenOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "greenMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "inv", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lumOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "gamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alphaMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "green", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alphaOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lum", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lumMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "shade", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "satOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "invGamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class) + }) + protected List> egColorTransform; - @XmlAttribute(name = "val", required = true) ++ @XmlAttribute(required = true) + protected STSchemeColorVal val; + + /** + * Gets the value of the egColorTransform property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the egColorTransform property. + * + *

+ * For example, to add a new item, do as follows: + *

+      *    getEGColorTransform().add(newItem);
+      * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTAngle }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >} + * {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} + * + * + */ + public List> getEGColorTransform() { + if (egColorTransform == null) { + egColorTransform = new ArrayList>(); + } + return this.egColorTransform; + } + + public boolean isSetEGColorTransform() { + return ((this.egColorTransform!= null)&&(!this.egColorTransform.isEmpty())); + } + + public void unsetEGColorTransform() { + this.egColorTransform = null; + } + + /** + * Gets the value of the val property. + * + * @return + * possible object is + * {@link STSchemeColorVal } + * + */ + public STSchemeColorVal getVal() { + return val; + } + + /** + * Sets the value of the val property. + * + * @param value + * allowed object is + * {@link STSchemeColorVal } + * + */ + public void setVal(STSchemeColorVal value) { + this.val = value; + } + + public boolean isSetVal() { + return (this.val!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTSphereCoords.java index 0000000000,a29d744465..7f03d0dac2 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTSphereCoords.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTSphereCoords.java @@@ -1,0 -1,116 +1,116 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_SphereCoords complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_SphereCoords">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="lat" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_PositiveFixedAngle" />
+  *       <attribute name="lon" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_PositiveFixedAngle" />
+  *       <attribute name="rev" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_PositiveFixedAngle" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_SphereCoords", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTSphereCoords { + - @XmlAttribute(name = "lat", required = true) ++ @XmlAttribute(required = true) + protected int lat; - @XmlAttribute(name = "lon", required = true) ++ @XmlAttribute(required = true) + protected int lon; - @XmlAttribute(name = "rev", required = true) ++ @XmlAttribute(required = true) + protected int rev; + + /** + * Gets the value of the lat property. + * + */ + public int getLat() { + return lat; + } + + /** + * Sets the value of the lat property. + * + */ + public void setLat(int value) { + this.lat = value; + } + + public boolean isSetLat() { + return true; + } + + /** + * Gets the value of the lon property. + * + */ + public int getLon() { + return lon; + } + + /** + * Sets the value of the lon property. + * + */ + public void setLon(int value) { + this.lon = value; + } + + public boolean isSetLon() { + return true; + } + + /** + * Gets the value of the rev property. + * + */ + public int getRev() { + return rev; + } + + /** + * Sets the value of the rev property. + * + */ + public void setRev(int value) { + this.rev = value; + } + + public boolean isSetRev() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTSystemColor.java index 0000000000,adf0d16b2e..e9c21832da mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTSystemColor.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTSystemColor.java @@@ -1,0 -1,219 +1,219 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import java.util.ArrayList; + import java.util.List; + import javax.xml.bind.JAXBElement; + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElementRef; + import javax.xml.bind.annotation.XmlElementRefs; + import javax.xml.bind.annotation.XmlType; + import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; + import javax.xml.bind.annotation.adapters.HexBinaryAdapter; + import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + + /** + *

Java class for CT_SystemColor complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_SystemColor">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <group ref="{http://schemas.openxmlformats.org/drawingml/2006/main}EG_ColorTransform" maxOccurs="unbounded" minOccurs="0"/>
+  *       </sequence>
+  *       <attribute name="val" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_SystemColorVal" />
+  *       <attribute name="lastClr" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_HexBinary3" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_SystemColor", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "egColorTransform" + }) + public class CTSystemColor { + + @XmlElementRefs({ - @XmlElementRef(name = "alphaMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "satMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lumMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lum", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "sat", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "red", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "invGamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "greenMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "comp", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "lumOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "greenOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alphaOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "green", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "inv", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "alpha", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "shade", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "redOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "blue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "redMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "hueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "gray", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "gamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "tint", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false), - @XmlElementRef(name = "satOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class, required = false) ++ @XmlElementRef(name = "gray", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "green", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "shade", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lumMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alphaMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "redMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "sat", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alphaOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "red", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "greenOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "satOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "gamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "redOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hue", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "satMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lum", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "comp", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "invGamma", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "hueOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "alpha", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "greenMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "inv", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "blueMod", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "tint", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class), ++ @XmlElementRef(name = "lumOff", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", type = JAXBElement.class) + }) + protected List> egColorTransform; - @XmlAttribute(name = "val", required = true) ++ @XmlAttribute(required = true) + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String val; - @XmlAttribute(name = "lastClr") ++ @XmlAttribute + @XmlJavaTypeAdapter(HexBinaryAdapter.class) + protected byte[] lastClr; + + /** + * Gets the value of the egColorTransform property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the egColorTransform property. + * + *

+ * For example, to add a new item, do as follows: + *

+      *    getEGColorTransform().add(newItem);
+      * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list - * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >} - * {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >} - * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} - * {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTAngle }{@code >} - * {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >} - * {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >} + * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >} ++ * {@link JAXBElement }{@code <}{@link CTPercentage }{@code >} + * + * + */ + public List> getEGColorTransform() { + if (egColorTransform == null) { + egColorTransform = new ArrayList>(); + } + return this.egColorTransform; + } + + public boolean isSetEGColorTransform() { + return ((this.egColorTransform!= null)&&(!this.egColorTransform.isEmpty())); + } + + public void unsetEGColorTransform() { + this.egColorTransform = null; + } + + /** + * Gets the value of the val property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVal() { + return val; + } + + /** + * Sets the value of the val property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVal(String value) { + this.val = value; + } + + public boolean isSetVal() { + return (this.val!= null); + } + + /** + * Gets the value of the lastClr property. + * + * @return + * possible object is + * {@link String } + * + */ + public byte[] getLastClr() { + return lastClr; + } + + /** + * Sets the value of the lastClr property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setLastClr(byte[] value) { - this.lastClr = value; ++ this.lastClr = ((byte[]) value); + } + + public boolean isSetLastClr() { + return (this.lastClr!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTTransform2D.java index 0000000000,38ec50e654..dd1dcb501e mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTTransform2D.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTTransform2D.java @@@ -1,0 -1,232 +1,232 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElement; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_Transform2D complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_Transform2D">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <element name="off" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_Point2D" minOccurs="0"/>
+  *         <element name="ext" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_PositiveSize2D" minOccurs="0"/>
+  *       </sequence>
+  *       <attribute name="rot" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Angle" default="0" />
+  *       <attribute name="flipH" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+  *       <attribute name="flipV" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_Transform2D", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "off", + "ext" + }) + public class CTTransform2D { + + @XmlElement(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + protected CTPoint2D off; + @XmlElement(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + protected CTPositiveSize2D ext; - @XmlAttribute(name = "rot") ++ @XmlAttribute + protected Integer rot; - @XmlAttribute(name = "flipH") ++ @XmlAttribute + protected Boolean flipH; - @XmlAttribute(name = "flipV") ++ @XmlAttribute + protected Boolean flipV; + + /** + * Gets the value of the off property. + * + * @return + * possible object is + * {@link CTPoint2D } + * + */ + public CTPoint2D getOff() { + return off; + } + + /** + * Sets the value of the off property. + * + * @param value + * allowed object is + * {@link CTPoint2D } + * + */ + public void setOff(CTPoint2D value) { + this.off = value; + } + + public boolean isSetOff() { + return (this.off!= null); + } + + /** + * Gets the value of the ext property. + * + * @return + * possible object is + * {@link CTPositiveSize2D } + * + */ + public CTPositiveSize2D getExt() { + return ext; + } + + /** + * Sets the value of the ext property. + * + * @param value + * allowed object is + * {@link CTPositiveSize2D } + * + */ + public void setExt(CTPositiveSize2D value) { + this.ext = value; + } + + public boolean isSetExt() { + return (this.ext!= null); + } + + /** + * Gets the value of the rot property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public int getRot() { + if (rot == null) { + return 0; + } else { + return rot; + } + } + + /** + * Sets the value of the rot property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setRot(int value) { + this.rot = value; + } + + public boolean isSetRot() { + return (this.rot!= null); + } + + public void unsetRot() { + this.rot = null; + } + + /** + * Gets the value of the flipH property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isFlipH() { + if (flipH == null) { + return false; + } else { + return flipH; + } + } + + /** + * Sets the value of the flipH property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setFlipH(boolean value) { + this.flipH = value; + } + + public boolean isSetFlipH() { + return (this.flipH!= null); + } + + public void unsetFlipH() { + this.flipH = null; + } + + /** + * Gets the value of the flipV property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isFlipV() { + if (flipV == null) { + return false; + } else { + return flipV; + } + } + + /** + * Sets the value of the flipV property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setFlipV(boolean value) { + this.flipV = value; + } + + public boolean isSetFlipV() { + return (this.flipV!= null); + } + + public void unsetFlipV() { + this.flipV = null; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTVector3D.java index 0000000000,03c5fb8e44..d7f744ba6c mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTVector3D.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTVector3D.java @@@ -1,0 -1,116 +1,116 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlType; + + + /** + *

Java class for CT_Vector3D complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_Vector3D">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <attribute name="dx" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Coordinate" />
+  *       <attribute name="dy" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Coordinate" />
+  *       <attribute name="dz" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_Coordinate" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_Vector3D", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main") + public class CTVector3D { + - @XmlAttribute(name = "dx", required = true) ++ @XmlAttribute(required = true) + protected long dx; - @XmlAttribute(name = "dy", required = true) ++ @XmlAttribute(required = true) + protected long dy; - @XmlAttribute(name = "dz", required = true) ++ @XmlAttribute(required = true) + protected long dz; + + /** + * Gets the value of the dx property. + * + */ + public long getDx() { + return dx; + } + + /** + * Sets the value of the dx property. + * + */ + public void setDx(long value) { + this.dx = value; + } + + public boolean isSetDx() { + return true; + } + + /** + * Gets the value of the dy property. + * + */ + public long getDy() { + return dy; + } + + /** + * Sets the value of the dy property. + * + */ + public void setDy(long value) { + this.dy = value; + } + + public boolean isSetDy() { + return true; + } + + /** + * Gets the value of the dz property. + * + */ + public long getDz() { + return dz; + } + + /** + * Sets the value of the dz property. + * + */ + public void setDz(long value) { + this.dz = value; + } + + public boolean isSetDz() { + return true; + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/CTXYAdjustHandle.java index 0000000000,85c30bac54..2b22a58814 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/CTXYAdjustHandle.java +++ b/src/java/org/apache/poi/sl/draw/binding/CTXYAdjustHandle.java @@@ -1,0 -1,273 +1,273 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.annotation.XmlAccessType; + import javax.xml.bind.annotation.XmlAccessorType; + import javax.xml.bind.annotation.XmlAttribute; + import javax.xml.bind.annotation.XmlElement; + import javax.xml.bind.annotation.XmlType; + import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; + import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + + /** + *

Java class for CT_XYAdjustHandle complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+  * <complexType name="CT_XYAdjustHandle">
+  *   <complexContent>
+  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+  *       <sequence>
+  *         <element name="pos" type="{http://schemas.openxmlformats.org/drawingml/2006/main}CT_AdjPoint2D"/>
+  *       </sequence>
+  *       <attribute name="gdRefX" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_GeomGuideName" />
+  *       <attribute name="minX" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *       <attribute name="maxX" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *       <attribute name="gdRefY" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_GeomGuideName" />
+  *       <attribute name="minY" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *       <attribute name="maxY" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_AdjCoordinate" />
+  *     </restriction>
+  *   </complexContent>
+  * </complexType>
+  * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "CT_XYAdjustHandle", namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", propOrder = { + "pos" + }) + public class CTXYAdjustHandle { + + @XmlElement(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", required = true) + protected CTAdjPoint2D pos; - @XmlAttribute(name = "gdRefX") ++ @XmlAttribute + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String gdRefX; - @XmlAttribute(name = "minX") ++ @XmlAttribute + protected String minX; - @XmlAttribute(name = "maxX") ++ @XmlAttribute + protected String maxX; - @XmlAttribute(name = "gdRefY") ++ @XmlAttribute + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String gdRefY; - @XmlAttribute(name = "minY") ++ @XmlAttribute + protected String minY; - @XmlAttribute(name = "maxY") ++ @XmlAttribute + protected String maxY; + + /** + * Gets the value of the pos property. + * + * @return + * possible object is + * {@link CTAdjPoint2D } + * + */ + public CTAdjPoint2D getPos() { + return pos; + } + + /** + * Sets the value of the pos property. + * + * @param value + * allowed object is + * {@link CTAdjPoint2D } + * + */ + public void setPos(CTAdjPoint2D value) { + this.pos = value; + } + + public boolean isSetPos() { + return (this.pos!= null); + } + + /** + * Gets the value of the gdRefX property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getGdRefX() { + return gdRefX; + } + + /** + * Sets the value of the gdRefX property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setGdRefX(String value) { + this.gdRefX = value; + } + + public boolean isSetGdRefX() { + return (this.gdRefX!= null); + } + + /** + * Gets the value of the minX property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getMinX() { + return minX; + } + + /** + * Sets the value of the minX property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMinX(String value) { + this.minX = value; + } + + public boolean isSetMinX() { + return (this.minX!= null); + } + + /** + * Gets the value of the maxX property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getMaxX() { + return maxX; + } + + /** + * Sets the value of the maxX property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMaxX(String value) { + this.maxX = value; + } + + public boolean isSetMaxX() { + return (this.maxX!= null); + } + + /** + * Gets the value of the gdRefY property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getGdRefY() { + return gdRefY; + } + + /** + * Sets the value of the gdRefY property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setGdRefY(String value) { + this.gdRefY = value; + } + + public boolean isSetGdRefY() { + return (this.gdRefY!= null); + } + + /** + * Gets the value of the minY property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getMinY() { + return minY; + } + + /** + * Sets the value of the minY property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMinY(String value) { + this.minY = value; + } + + public boolean isSetMinY() { + return (this.minY!= null); + } + + /** + * Gets the value of the maxY property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getMaxY() { + return maxY; + } + + /** + * Sets the value of the maxY property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMaxY(String value) { + this.maxY = value; + } + + public boolean isSetMaxY() { + return (this.maxY!= null); + } + + } diff --cc src/java/org/apache/poi/sl/draw/binding/ObjectFactory.java index 0000000000,8c6f9c217c..896fb24761 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/draw/binding/ObjectFactory.java +++ b/src/java/org/apache/poi/sl/draw/binding/ObjectFactory.java @@@ -1,0 -1,2023 +1,2023 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.draw.binding; + + import javax.xml.bind.JAXBElement; + import javax.xml.bind.annotation.XmlElementDecl; + import javax.xml.bind.annotation.XmlRegistry; + import javax.xml.namespace.QName; + + + /** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the org.apache.poi.sl.draw.binding package. + *

An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ + @XmlRegistry + public class ObjectFactory { + + private final static QName _CTSRgbColorAlpha_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "alpha"); + private final static QName _CTSRgbColorLum_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "lum"); + private final static QName _CTSRgbColorGamma_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "gamma"); + private final static QName _CTSRgbColorInvGamma_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "invGamma"); - private final static QName _CTSRgbColorAlphaMod_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "alphaMod"); + private final static QName _CTSRgbColorRedOff_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "redOff"); ++ private final static QName _CTSRgbColorAlphaMod_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "alphaMod"); + private final static QName _CTSRgbColorAlphaOff_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "alphaOff"); + private final static QName _CTSRgbColorGreenOff_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "greenOff"); - private final static QName _CTSRgbColorHue_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "hue"); + private final static QName _CTSRgbColorRedMod_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "redMod"); ++ private final static QName _CTSRgbColorHue_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "hue"); + private final static QName _CTSRgbColorSatOff_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "satOff"); + private final static QName _CTSRgbColorGreenMod_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "greenMod"); + private final static QName _CTSRgbColorSat_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "sat"); + private final static QName _CTSRgbColorBlue_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "blue"); + private final static QName _CTSRgbColorRed_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "red"); + private final static QName _CTSRgbColorSatMod_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "satMod"); - private final static QName _CTSRgbColorBlueMod_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "blueMod"); + private final static QName _CTSRgbColorHueOff_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "hueOff"); ++ private final static QName _CTSRgbColorBlueMod_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "blueMod"); + private final static QName _CTSRgbColorShade_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "shade"); + private final static QName _CTSRgbColorLumMod_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "lumMod"); + private final static QName _CTSRgbColorInv_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "inv"); + private final static QName _CTSRgbColorLumOff_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "lumOff"); + private final static QName _CTSRgbColorTint_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "tint"); + private final static QName _CTSRgbColorGreen_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "green"); + private final static QName _CTSRgbColorComp_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "comp"); + private final static QName _CTSRgbColorBlueOff_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "blueOff"); + private final static QName _CTSRgbColorHueMod_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "hueMod"); + private final static QName _CTSRgbColorGray_QNAME = new QName("http://schemas.openxmlformats.org/drawingml/2006/main", "gray"); + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.apache.poi.sl.draw.binding + * + */ + public ObjectFactory() { + } + + /** - * Create an instance of {@link CTPath2DQuadBezierTo } ++ * Create an instance of {@link CTPositiveSize2D } + * + */ - public CTPath2DQuadBezierTo createCTPath2DQuadBezierTo() { - return new CTPath2DQuadBezierTo(); ++ public CTPositiveSize2D createCTPositiveSize2D() { ++ return new CTPositiveSize2D(); + } + + /** - * Create an instance of {@link CTCustomGeometry2D } ++ * Create an instance of {@link CTSphereCoords } + * + */ - public CTCustomGeometry2D createCTCustomGeometry2D() { - return new CTCustomGeometry2D(); ++ public CTSphereCoords createCTSphereCoords() { ++ return new CTSphereCoords(); + } + + /** - * Create an instance of {@link CTPolarAdjustHandle } ++ * Create an instance of {@link CTPositivePercentage } + * + */ - public CTPolarAdjustHandle createCTPolarAdjustHandle() { - return new CTPolarAdjustHandle(); ++ public CTPositivePercentage createCTPositivePercentage() { ++ return new CTPositivePercentage(); + } + + /** - * Create an instance of {@link CTPath2DClose } ++ * Create an instance of {@link CTAdjPoint2D } + * + */ - public CTPath2DClose createCTPath2DClose() { - return new CTPath2DClose(); ++ public CTAdjPoint2D createCTAdjPoint2D() { ++ return new CTAdjPoint2D(); + } + + /** - * Create an instance of {@link CTPoint2D } ++ * Create an instance of {@link CTPath2DCubicBezierTo } + * + */ - public CTPoint2D createCTPoint2D() { - return new CTPoint2D(); ++ public CTPath2DCubicBezierTo createCTPath2DCubicBezierTo() { ++ return new CTPath2DCubicBezierTo(); + } + + /** - * Create an instance of {@link CTInverseTransform } ++ * Create an instance of {@link CTEmbeddedWAVAudioFile } + * + */ - public CTInverseTransform createCTInverseTransform() { - return new CTInverseTransform(); ++ public CTEmbeddedWAVAudioFile createCTEmbeddedWAVAudioFile() { ++ return new CTEmbeddedWAVAudioFile(); + } + + /** - * Create an instance of {@link CTPercentage } ++ * Create an instance of {@link CTPresetGeometry2D } + * + */ - public CTPercentage createCTPercentage() { - return new CTPercentage(); ++ public CTPresetGeometry2D createCTPresetGeometry2D() { ++ return new CTPresetGeometry2D(); + } + + /** - * Create an instance of {@link CTSystemColor } ++ * Create an instance of {@link CTSchemeColor } + * + */ - public CTSystemColor createCTSystemColor() { - return new CTSystemColor(); ++ public CTSchemeColor createCTSchemeColor() { ++ return new CTSchemeColor(); + } + + /** - * Create an instance of {@link CTConnectionSite } ++ * Create an instance of {@link CTInverseTransform } + * + */ - public CTConnectionSite createCTConnectionSite() { - return new CTConnectionSite(); ++ public CTInverseTransform createCTInverseTransform() { ++ return new CTInverseTransform(); + } + + /** - * Create an instance of {@link CTColor } ++ * Create an instance of {@link CTScRgbColor } + * + */ - public CTColor createCTColor() { - return new CTColor(); ++ public CTScRgbColor createCTScRgbColor() { ++ return new CTScRgbColor(); + } + + /** + * Create an instance of {@link CTPositiveFixedAngle } + * + */ + public CTPositiveFixedAngle createCTPositiveFixedAngle() { + return new CTPositiveFixedAngle(); + } + + /** - * Create an instance of {@link CTFixedPercentage } ++ * Create an instance of {@link CTInverseGammaTransform } + * + */ - public CTFixedPercentage createCTFixedPercentage() { - return new CTFixedPercentage(); ++ public CTInverseGammaTransform createCTInverseGammaTransform() { ++ return new CTInverseGammaTransform(); + } + + /** - * Create an instance of {@link CTHslColor } ++ * Create an instance of {@link CTColorMRU } + * + */ - public CTHslColor createCTHslColor() { - return new CTHslColor(); ++ public CTColorMRU createCTColorMRU() { ++ return new CTColorMRU(); + } + + /** - * Create an instance of {@link CTConnection } ++ * Create an instance of {@link CTPath2DArcTo } + * + */ - public CTConnection createCTConnection() { - return new CTConnection(); ++ public CTPath2DArcTo createCTPath2DArcTo() { ++ return new CTPath2DArcTo(); + } + + /** - * Create an instance of {@link CTPath2DLineTo } ++ * Create an instance of {@link CTSystemColor } + * + */ - public CTPath2DLineTo createCTPath2DLineTo() { - return new CTPath2DLineTo(); ++ public CTSystemColor createCTSystemColor() { ++ return new CTSystemColor(); + } + + /** - * Create an instance of {@link CTTransform2D } ++ * Create an instance of {@link CTGroupTransform2D } + * + */ - public CTTransform2D createCTTransform2D() { - return new CTTransform2D(); ++ public CTGroupTransform2D createCTGroupTransform2D() { ++ return new CTGroupTransform2D(); + } + + /** - * Create an instance of {@link CTPositivePercentage } ++ * Create an instance of {@link CTPoint2D } + * + */ - public CTPositivePercentage createCTPositivePercentage() { - return new CTPositivePercentage(); ++ public CTPoint2D createCTPoint2D() { ++ return new CTPoint2D(); + } + + /** - * Create an instance of {@link CTVector3D } ++ * Create an instance of {@link CTGeomRect } + * + */ - public CTVector3D createCTVector3D() { - return new CTVector3D(); ++ public CTGeomRect createCTGeomRect() { ++ return new CTGeomRect(); + } + + /** - * Create an instance of {@link CTSphereCoords } ++ * Create an instance of {@link CTScale2D } + * + */ - public CTSphereCoords createCTSphereCoords() { - return new CTSphereCoords(); ++ public CTScale2D createCTScale2D() { ++ return new CTScale2D(); + } + + /** - * Create an instance of {@link CTPath2D } ++ * Create an instance of {@link CTGeomGuide } + * + */ - public CTPath2D createCTPath2D() { - return new CTPath2D(); ++ public CTGeomGuide createCTGeomGuide() { ++ return new CTGeomGuide(); + } + + /** - * Create an instance of {@link CTGroupTransform2D } ++ * Create an instance of {@link CTXYAdjustHandle } + * + */ - public CTGroupTransform2D createCTGroupTransform2D() { - return new CTGroupTransform2D(); ++ public CTXYAdjustHandle createCTXYAdjustHandle() { ++ return new CTXYAdjustHandle(); + } + + /** - * Create an instance of {@link CTGrayscaleTransform } ++ * Create an instance of {@link CTCustomGeometry2D } + * + */ - public CTGrayscaleTransform createCTGrayscaleTransform() { - return new CTGrayscaleTransform(); ++ public CTCustomGeometry2D createCTCustomGeometry2D() { ++ return new CTCustomGeometry2D(); + } + + /** - * Create an instance of {@link CTRatio } ++ * Create an instance of {@link CTOfficeArtExtension } + * + */ - public CTRatio createCTRatio() { - return new CTRatio(); ++ public CTOfficeArtExtension createCTOfficeArtExtension() { ++ return new CTOfficeArtExtension(); + } + + /** - * Create an instance of {@link CTSRgbColor } ++ * Create an instance of {@link CTGrayscaleTransform } + * + */ - public CTSRgbColor createCTSRgbColor() { - return new CTSRgbColor(); ++ public CTGrayscaleTransform createCTGrayscaleTransform() { ++ return new CTGrayscaleTransform(); + } + + /** - * Create an instance of {@link CTGeomGuideList } ++ * Create an instance of {@link CTPath2DClose } + * + */ - public CTGeomGuideList createCTGeomGuideList() { - return new CTGeomGuideList(); ++ public CTPath2DClose createCTPath2DClose() { ++ return new CTPath2DClose(); + } + + /** + * Create an instance of {@link CTComplementTransform } + * + */ + public CTComplementTransform createCTComplementTransform() { + return new CTComplementTransform(); + } + + /** - * Create an instance of {@link CTPath2DCubicBezierTo } - * - */ - public CTPath2DCubicBezierTo createCTPath2DCubicBezierTo() { - return new CTPath2DCubicBezierTo(); - } - - /** - * Create an instance of {@link CTXYAdjustHandle } ++ * Create an instance of {@link CTPoint3D } + * + */ - public CTXYAdjustHandle createCTXYAdjustHandle() { - return new CTXYAdjustHandle(); ++ public CTPoint3D createCTPoint3D() { ++ return new CTPoint3D(); + } + + /** - * Create an instance of {@link CTPresetColor } ++ * Create an instance of {@link CTPositiveFixedPercentage } + * + */ - public CTPresetColor createCTPresetColor() { - return new CTPresetColor(); ++ public CTPositiveFixedPercentage createCTPositiveFixedPercentage() { ++ return new CTPositiveFixedPercentage(); + } + + /** - * Create an instance of {@link CTOfficeArtExtension } ++ * Create an instance of {@link CTPath2D } + * + */ - public CTOfficeArtExtension createCTOfficeArtExtension() { - return new CTOfficeArtExtension(); ++ public CTPath2D createCTPath2D() { ++ return new CTPath2D(); + } + + /** - * Create an instance of {@link CTSchemeColor } ++ * Create an instance of {@link CTAdjustHandleList } + * + */ - public CTSchemeColor createCTSchemeColor() { - return new CTSchemeColor(); ++ public CTAdjustHandleList createCTAdjustHandleList() { ++ return new CTAdjustHandleList(); + } + + /** + * Create an instance of {@link CTConnectionSiteList } + * + */ + public CTConnectionSiteList createCTConnectionSiteList() { + return new CTConnectionSiteList(); + } + + /** - * Create an instance of {@link CTPath2DArcTo } ++ * Create an instance of {@link CTPresetTextShape } + * + */ - public CTPath2DArcTo createCTPath2DArcTo() { - return new CTPath2DArcTo(); ++ public CTPresetTextShape createCTPresetTextShape() { ++ return new CTPresetTextShape(); + } + + /** - * Create an instance of {@link CTPath2DList } ++ * Create an instance of {@link CTSRgbColor } + * + */ - public CTPath2DList createCTPath2DList() { - return new CTPath2DList(); ++ public CTSRgbColor createCTSRgbColor() { ++ return new CTSRgbColor(); + } + + /** - * Create an instance of {@link CTAngle } ++ * Create an instance of {@link CTPath2DMoveTo } + * + */ - public CTAngle createCTAngle() { - return new CTAngle(); ++ public CTPath2DMoveTo createCTPath2DMoveTo() { ++ return new CTPath2DMoveTo(); + } + + /** - * Create an instance of {@link CTScale2D } ++ * Create an instance of {@link CTRelativeRect } + * + */ - public CTScale2D createCTScale2D() { - return new CTScale2D(); ++ public CTRelativeRect createCTRelativeRect() { ++ return new CTRelativeRect(); + } + + /** - * Create an instance of {@link CTPositiveSize2D } ++ * Create an instance of {@link CTPath2DList } + * + */ - public CTPositiveSize2D createCTPositiveSize2D() { - return new CTPositiveSize2D(); ++ public CTPath2DList createCTPath2DList() { ++ return new CTPath2DList(); + } + + /** - * Create an instance of {@link CTOfficeArtExtensionList } ++ * Create an instance of {@link CTPolarAdjustHandle } + * + */ - public CTOfficeArtExtensionList createCTOfficeArtExtensionList() { - return new CTOfficeArtExtensionList(); ++ public CTPolarAdjustHandle createCTPolarAdjustHandle() { ++ return new CTPolarAdjustHandle(); + } + + /** - * Create an instance of {@link CTHyperlink } ++ * Create an instance of {@link CTPercentage } + * + */ - public CTHyperlink createCTHyperlink() { - return new CTHyperlink(); ++ public CTPercentage createCTPercentage() { ++ return new CTPercentage(); + } + + /** - * Create an instance of {@link CTPoint3D } ++ * Create an instance of {@link CTHslColor } + * + */ - public CTPoint3D createCTPoint3D() { - return new CTPoint3D(); ++ public CTHslColor createCTHslColor() { ++ return new CTHslColor(); + } + + /** - * Create an instance of {@link CTInverseGammaTransform } ++ * Create an instance of {@link CTRatio } + * + */ - public CTInverseGammaTransform createCTInverseGammaTransform() { - return new CTInverseGammaTransform(); ++ public CTRatio createCTRatio() { ++ return new CTRatio(); + } + + /** - * Create an instance of {@link CTPositiveFixedPercentage } ++ * Create an instance of {@link CTGeomGuideList } + * + */ - public CTPositiveFixedPercentage createCTPositiveFixedPercentage() { - return new CTPositiveFixedPercentage(); ++ public CTGeomGuideList createCTGeomGuideList() { ++ return new CTGeomGuideList(); + } + + /** - * Create an instance of {@link CTGeomRect } ++ * Create an instance of {@link CTTransform2D } + * + */ - public CTGeomRect createCTGeomRect() { - return new CTGeomRect(); ++ public CTTransform2D createCTTransform2D() { ++ return new CTTransform2D(); + } + + /** - * Create an instance of {@link CTPresetTextShape } ++ * Create an instance of {@link CTGammaTransform } + * + */ - public CTPresetTextShape createCTPresetTextShape() { - return new CTPresetTextShape(); ++ public CTGammaTransform createCTGammaTransform() { ++ return new CTGammaTransform(); + } + + /** - * Create an instance of {@link CTColorMRU } ++ * Create an instance of {@link CTPath2DQuadBezierTo } + * + */ - public CTColorMRU createCTColorMRU() { - return new CTColorMRU(); ++ public CTPath2DQuadBezierTo createCTPath2DQuadBezierTo() { ++ return new CTPath2DQuadBezierTo(); + } + + /** - * Create an instance of {@link CTPath2DMoveTo } ++ * Create an instance of {@link CTAngle } + * + */ - public CTPath2DMoveTo createCTPath2DMoveTo() { - return new CTPath2DMoveTo(); ++ public CTAngle createCTAngle() { ++ return new CTAngle(); + } + + /** - * Create an instance of {@link CTEmbeddedWAVAudioFile } ++ * Create an instance of {@link CTConnectionSite } + * + */ - public CTEmbeddedWAVAudioFile createCTEmbeddedWAVAudioFile() { - return new CTEmbeddedWAVAudioFile(); ++ public CTConnectionSite createCTConnectionSite() { ++ return new CTConnectionSite(); + } + + /** - * Create an instance of {@link CTScRgbColor } ++ * Create an instance of {@link CTHyperlink } + * + */ - public CTScRgbColor createCTScRgbColor() { - return new CTScRgbColor(); ++ public CTHyperlink createCTHyperlink() { ++ return new CTHyperlink(); + } + + /** - * Create an instance of {@link CTPresetGeometry2D } ++ * Create an instance of {@link CTFixedPercentage } + * + */ - public CTPresetGeometry2D createCTPresetGeometry2D() { - return new CTPresetGeometry2D(); ++ public CTFixedPercentage createCTFixedPercentage() { ++ return new CTFixedPercentage(); + } + + /** - * Create an instance of {@link CTGeomGuide } ++ * Create an instance of {@link CTPath2DLineTo } + * + */ - public CTGeomGuide createCTGeomGuide() { - return new CTGeomGuide(); ++ public CTPath2DLineTo createCTPath2DLineTo() { ++ return new CTPath2DLineTo(); + } + + /** - * Create an instance of {@link CTRelativeRect } ++ * Create an instance of {@link CTColor } + * + */ - public CTRelativeRect createCTRelativeRect() { - return new CTRelativeRect(); ++ public CTColor createCTColor() { ++ return new CTColor(); + } + + /** - * Create an instance of {@link CTAdjustHandleList } ++ * Create an instance of {@link CTPresetColor } + * + */ - public CTAdjustHandleList createCTAdjustHandleList() { - return new CTAdjustHandleList(); ++ public CTPresetColor createCTPresetColor() { ++ return new CTPresetColor(); + } + + /** - * Create an instance of {@link CTAdjPoint2D } ++ * Create an instance of {@link CTVector3D } + * + */ - public CTAdjPoint2D createCTAdjPoint2D() { - return new CTAdjPoint2D(); ++ public CTVector3D createCTVector3D() { ++ return new CTVector3D(); + } + + /** - * Create an instance of {@link CTGammaTransform } ++ * Create an instance of {@link CTOfficeArtExtensionList } + * + */ - public CTGammaTransform createCTGammaTransform() { - return new CTGammaTransform(); ++ public CTOfficeArtExtensionList createCTOfficeArtExtensionList() { ++ return new CTOfficeArtExtensionList(); ++ } ++ ++ /** ++ * Create an instance of {@link CTConnection } ++ * ++ */ ++ public CTConnection createCTConnection() { ++ return new CTConnection(); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alpha", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorAlpha(CTPositiveFixedPercentage value) { + return new JAXBElement(_CTSRgbColorAlpha_QNAME, CTPositiveFixedPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lum", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorLum(CTPercentage value) { + return new JAXBElement(_CTSRgbColorLum_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gamma", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorGamma(CTGammaTransform value) { + return new JAXBElement(_CTSRgbColorGamma_QNAME, CTGammaTransform.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "invGamma", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorInvGamma(CTInverseGammaTransform value) { + return new JAXBElement(_CTSRgbColorInvGamma_QNAME, CTInverseGammaTransform.class, CTSRgbColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaMod", scope = CTSRgbColor.class) - public JAXBElement createCTSRgbColorAlphaMod(CTPositivePercentage value) { - return new JAXBElement(_CTSRgbColorAlphaMod_QNAME, CTPositivePercentage.class, CTSRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redOff", scope = CTSRgbColor.class) ++ public JAXBElement createCTSRgbColorRedOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorRedOff_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redOff", scope = CTSRgbColor.class) - public JAXBElement createCTSRgbColorRedOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorRedOff_QNAME, CTPercentage.class, CTSRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaMod", scope = CTSRgbColor.class) ++ public JAXBElement createCTSRgbColorAlphaMod(CTPositivePercentage value) { ++ return new JAXBElement(_CTSRgbColorAlphaMod_QNAME, CTPositivePercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaOff", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorAlphaOff(CTFixedPercentage value) { + return new JAXBElement(_CTSRgbColorAlphaOff_QNAME, CTFixedPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenOff", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorGreenOff(CTPercentage value) { + return new JAXBElement(_CTSRgbColorGreenOff_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hue", scope = CTSRgbColor.class) - public JAXBElement createCTSRgbColorHue(CTPositiveFixedAngle value) { - return new JAXBElement(_CTSRgbColorHue_QNAME, CTPositiveFixedAngle.class, CTSRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redMod", scope = CTSRgbColor.class) ++ public JAXBElement createCTSRgbColorRedMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorRedMod_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redMod", scope = CTSRgbColor.class) - public JAXBElement createCTSRgbColorRedMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorRedMod_QNAME, CTPercentage.class, CTSRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hue", scope = CTSRgbColor.class) ++ public JAXBElement createCTSRgbColorHue(CTPositiveFixedAngle value) { ++ return new JAXBElement(_CTSRgbColorHue_QNAME, CTPositiveFixedAngle.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satOff", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorSatOff(CTPercentage value) { + return new JAXBElement(_CTSRgbColorSatOff_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenMod", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorGreenMod(CTPercentage value) { + return new JAXBElement(_CTSRgbColorGreenMod_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "sat", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorSat(CTPercentage value) { + return new JAXBElement(_CTSRgbColorSat_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blue", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorBlue(CTPercentage value) { + return new JAXBElement(_CTSRgbColorBlue_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "red", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorRed(CTPercentage value) { + return new JAXBElement(_CTSRgbColorRed_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satMod", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorSatMod(CTPercentage value) { + return new JAXBElement(_CTSRgbColorSatMod_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTAngle }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueMod", scope = CTSRgbColor.class) - public JAXBElement createCTSRgbColorBlueMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorBlueMod_QNAME, CTPercentage.class, CTSRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueOff", scope = CTSRgbColor.class) ++ public JAXBElement createCTSRgbColorHueOff(CTAngle value) { ++ return new JAXBElement(_CTSRgbColorHueOff_QNAME, CTAngle.class, CTSRgbColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTAngle }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueOff", scope = CTSRgbColor.class) - public JAXBElement createCTSRgbColorHueOff(CTAngle value) { - return new JAXBElement(_CTSRgbColorHueOff_QNAME, CTAngle.class, CTSRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueMod", scope = CTSRgbColor.class) ++ public JAXBElement createCTSRgbColorBlueMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorBlueMod_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "shade", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorShade(CTPositiveFixedPercentage value) { + return new JAXBElement(_CTSRgbColorShade_QNAME, CTPositiveFixedPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumMod", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorLumMod(CTPercentage value) { + return new JAXBElement(_CTSRgbColorLumMod_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "inv", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorInv(CTInverseTransform value) { + return new JAXBElement(_CTSRgbColorInv_QNAME, CTInverseTransform.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumOff", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorLumOff(CTPercentage value) { + return new JAXBElement(_CTSRgbColorLumOff_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "tint", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorTint(CTPositiveFixedPercentage value) { + return new JAXBElement(_CTSRgbColorTint_QNAME, CTPositiveFixedPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "green", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorGreen(CTPercentage value) { + return new JAXBElement(_CTSRgbColorGreen_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "comp", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorComp(CTComplementTransform value) { + return new JAXBElement(_CTSRgbColorComp_QNAME, CTComplementTransform.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueOff", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorBlueOff(CTPercentage value) { + return new JAXBElement(_CTSRgbColorBlueOff_QNAME, CTPercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueMod", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorHueMod(CTPositivePercentage value) { + return new JAXBElement(_CTSRgbColorHueMod_QNAME, CTPositivePercentage.class, CTSRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gray", scope = CTSRgbColor.class) + public JAXBElement createCTSRgbColorGray(CTGrayscaleTransform value) { + return new JAXBElement(_CTSRgbColorGray_QNAME, CTGrayscaleTransform.class, CTSRgbColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alpha", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorAlpha(CTPositiveFixedPercentage value) { - return new JAXBElement(_CTSRgbColorAlpha_QNAME, CTPositiveFixedPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lum", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorLum(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorLum_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lum", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorLum(CTPercentage value) { - return new JAXBElement(_CTSRgbColorLum_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alpha", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorAlpha(CTPositiveFixedPercentage value) { ++ return new JAXBElement(_CTSRgbColorAlpha_QNAME, CTPositiveFixedPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gamma", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorGamma(CTGammaTransform value) { - return new JAXBElement(_CTSRgbColorGamma_QNAME, CTGammaTransform.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gamma", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorGamma(CTGammaTransform value) { ++ return new JAXBElement(_CTSRgbColorGamma_QNAME, CTGammaTransform.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "invGamma", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorInvGamma(CTInverseGammaTransform value) { - return new JAXBElement(_CTSRgbColorInvGamma_QNAME, CTInverseGammaTransform.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "invGamma", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorInvGamma(CTInverseGammaTransform value) { ++ return new JAXBElement(_CTSRgbColorInvGamma_QNAME, CTInverseGammaTransform.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaMod", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorAlphaMod(CTPositivePercentage value) { - return new JAXBElement(_CTSRgbColorAlphaMod_QNAME, CTPositivePercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaMod", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorAlphaMod(CTPositivePercentage value) { ++ return new JAXBElement(_CTSRgbColorAlphaMod_QNAME, CTPositivePercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redOff", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorRedOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorRedOff_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redOff", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorRedOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorRedOff_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaOff", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorAlphaOff(CTFixedPercentage value) { - return new JAXBElement(_CTSRgbColorAlphaOff_QNAME, CTFixedPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaOff", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorAlphaOff(CTFixedPercentage value) { ++ return new JAXBElement(_CTSRgbColorAlphaOff_QNAME, CTFixedPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenOff", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorGreenOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorGreenOff_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenOff", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorGreenOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorGreenOff_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hue", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorHue(CTPositiveFixedAngle value) { - return new JAXBElement(_CTSRgbColorHue_QNAME, CTPositiveFixedAngle.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redMod", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorRedMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorRedMod_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redMod", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorRedMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorRedMod_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hue", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorHue(CTPositiveFixedAngle value) { ++ return new JAXBElement(_CTSRgbColorHue_QNAME, CTPositiveFixedAngle.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satOff", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorSatOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorSatOff_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satOff", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorSatOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorSatOff_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenMod", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorGreenMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorGreenMod_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenMod", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorGreenMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorGreenMod_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "sat", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorSat(CTPercentage value) { - return new JAXBElement(_CTSRgbColorSat_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blue", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorBlue(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorBlue_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blue", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorBlue(CTPercentage value) { - return new JAXBElement(_CTSRgbColorBlue_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "sat", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorSat(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorSat_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "red", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorRed(CTPercentage value) { - return new JAXBElement(_CTSRgbColorRed_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "red", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorRed(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorRed_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satMod", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorSatMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorSatMod_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satMod", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorSatMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorSatMod_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueMod", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorBlueMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorBlueMod_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueMod", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorBlueMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorBlueMod_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTAngle }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueOff", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorHueOff(CTAngle value) { - return new JAXBElement(_CTSRgbColorHueOff_QNAME, CTAngle.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueOff", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorHueOff(CTAngle value) { ++ return new JAXBElement(_CTSRgbColorHueOff_QNAME, CTAngle.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "shade", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorShade(CTPositiveFixedPercentage value) { - return new JAXBElement(_CTSRgbColorShade_QNAME, CTPositiveFixedPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "shade", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorShade(CTPositiveFixedPercentage value) { ++ return new JAXBElement(_CTSRgbColorShade_QNAME, CTPositiveFixedPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumMod", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorLumMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorLumMod_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumMod", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorLumMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorLumMod_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "inv", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorInv(CTInverseTransform value) { - return new JAXBElement(_CTSRgbColorInv_QNAME, CTInverseTransform.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "inv", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorInv(CTInverseTransform value) { ++ return new JAXBElement(_CTSRgbColorInv_QNAME, CTInverseTransform.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumOff", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorLumOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorLumOff_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumOff", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorLumOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorLumOff_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "tint", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorTint(CTPositiveFixedPercentage value) { - return new JAXBElement(_CTSRgbColorTint_QNAME, CTPositiveFixedPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "tint", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorTint(CTPositiveFixedPercentage value) { ++ return new JAXBElement(_CTSRgbColorTint_QNAME, CTPositiveFixedPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "green", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorGreen(CTPercentage value) { - return new JAXBElement(_CTSRgbColorGreen_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "green", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorGreen(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorGreen_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "comp", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorComp(CTComplementTransform value) { - return new JAXBElement(_CTSRgbColorComp_QNAME, CTComplementTransform.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "comp", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorComp(CTComplementTransform value) { ++ return new JAXBElement(_CTSRgbColorComp_QNAME, CTComplementTransform.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueOff", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorBlueOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorBlueOff_QNAME, CTPercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueOff", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorBlueOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorBlueOff_QNAME, CTPercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueMod", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorHueMod(CTPositivePercentage value) { - return new JAXBElement(_CTSRgbColorHueMod_QNAME, CTPositivePercentage.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueMod", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorHueMod(CTPositivePercentage value) { ++ return new JAXBElement(_CTSRgbColorHueMod_QNAME, CTPositivePercentage.class, CTSystemColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gray", scope = CTSchemeColor.class) - public JAXBElement createCTSchemeColorGray(CTGrayscaleTransform value) { - return new JAXBElement(_CTSRgbColorGray_QNAME, CTGrayscaleTransform.class, CTSchemeColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gray", scope = CTSystemColor.class) ++ public JAXBElement createCTSystemColorGray(CTGrayscaleTransform value) { ++ return new JAXBElement(_CTSRgbColorGray_QNAME, CTGrayscaleTransform.class, CTSystemColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alpha", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorAlpha(CTPositiveFixedPercentage value) { - return new JAXBElement(_CTSRgbColorAlpha_QNAME, CTPositiveFixedPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lum", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorLum(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorLum_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lum", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorLum(CTPercentage value) { - return new JAXBElement(_CTSRgbColorLum_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alpha", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorAlpha(CTPositiveFixedPercentage value) { ++ return new JAXBElement(_CTSRgbColorAlpha_QNAME, CTPositiveFixedPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gamma", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorGamma(CTGammaTransform value) { - return new JAXBElement(_CTSRgbColorGamma_QNAME, CTGammaTransform.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gamma", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorGamma(CTGammaTransform value) { ++ return new JAXBElement(_CTSRgbColorGamma_QNAME, CTGammaTransform.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "invGamma", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorInvGamma(CTInverseGammaTransform value) { - return new JAXBElement(_CTSRgbColorInvGamma_QNAME, CTInverseGammaTransform.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "invGamma", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorInvGamma(CTInverseGammaTransform value) { ++ return new JAXBElement(_CTSRgbColorInvGamma_QNAME, CTInverseGammaTransform.class, CTSchemeColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaMod", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorAlphaMod(CTPositivePercentage value) { - return new JAXBElement(_CTSRgbColorAlphaMod_QNAME, CTPositivePercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redOff", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorRedOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorRedOff_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redOff", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorRedOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorRedOff_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaMod", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorAlphaMod(CTPositivePercentage value) { ++ return new JAXBElement(_CTSRgbColorAlphaMod_QNAME, CTPositivePercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaOff", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorAlphaOff(CTFixedPercentage value) { - return new JAXBElement(_CTSRgbColorAlphaOff_QNAME, CTFixedPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaOff", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorAlphaOff(CTFixedPercentage value) { ++ return new JAXBElement(_CTSRgbColorAlphaOff_QNAME, CTFixedPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenOff", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorGreenOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorGreenOff_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenOff", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorGreenOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorGreenOff_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hue", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorHue(CTPositiveFixedAngle value) { - return new JAXBElement(_CTSRgbColorHue_QNAME, CTPositiveFixedAngle.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hue", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorHue(CTPositiveFixedAngle value) { ++ return new JAXBElement(_CTSRgbColorHue_QNAME, CTPositiveFixedAngle.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redMod", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorRedMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorRedMod_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redMod", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorRedMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorRedMod_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satOff", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorSatOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorSatOff_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satOff", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorSatOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorSatOff_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenMod", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorGreenMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorGreenMod_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenMod", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorGreenMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorGreenMod_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "sat", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorSat(CTPercentage value) { - return new JAXBElement(_CTSRgbColorSat_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blue", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorBlue(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorBlue_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blue", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorBlue(CTPercentage value) { - return new JAXBElement(_CTSRgbColorBlue_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "sat", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorSat(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorSat_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "red", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorRed(CTPercentage value) { - return new JAXBElement(_CTSRgbColorRed_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "red", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorRed(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorRed_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satMod", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorSatMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorSatMod_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satMod", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorSatMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorSatMod_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTAngle }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueMod", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorBlueMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorBlueMod_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueOff", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorHueOff(CTAngle value) { ++ return new JAXBElement(_CTSRgbColorHueOff_QNAME, CTAngle.class, CTSchemeColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTAngle }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueOff", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorHueOff(CTAngle value) { - return new JAXBElement(_CTSRgbColorHueOff_QNAME, CTAngle.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueMod", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorBlueMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorBlueMod_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "shade", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorShade(CTPositiveFixedPercentage value) { - return new JAXBElement(_CTSRgbColorShade_QNAME, CTPositiveFixedPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "shade", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorShade(CTPositiveFixedPercentage value) { ++ return new JAXBElement(_CTSRgbColorShade_QNAME, CTPositiveFixedPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumMod", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorLumMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorLumMod_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumMod", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorLumMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorLumMod_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "inv", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorInv(CTInverseTransform value) { - return new JAXBElement(_CTSRgbColorInv_QNAME, CTInverseTransform.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "inv", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorInv(CTInverseTransform value) { ++ return new JAXBElement(_CTSRgbColorInv_QNAME, CTInverseTransform.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumOff", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorLumOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorLumOff_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumOff", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorLumOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorLumOff_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "tint", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorTint(CTPositiveFixedPercentage value) { - return new JAXBElement(_CTSRgbColorTint_QNAME, CTPositiveFixedPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "tint", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorTint(CTPositiveFixedPercentage value) { ++ return new JAXBElement(_CTSRgbColorTint_QNAME, CTPositiveFixedPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "green", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorGreen(CTPercentage value) { - return new JAXBElement(_CTSRgbColorGreen_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "green", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorGreen(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorGreen_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "comp", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorComp(CTComplementTransform value) { - return new JAXBElement(_CTSRgbColorComp_QNAME, CTComplementTransform.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "comp", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorComp(CTComplementTransform value) { ++ return new JAXBElement(_CTSRgbColorComp_QNAME, CTComplementTransform.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueOff", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorBlueOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorBlueOff_QNAME, CTPercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueOff", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorBlueOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorBlueOff_QNAME, CTPercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueMod", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorHueMod(CTPositivePercentage value) { - return new JAXBElement(_CTSRgbColorHueMod_QNAME, CTPositivePercentage.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueMod", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorHueMod(CTPositivePercentage value) { ++ return new JAXBElement(_CTSRgbColorHueMod_QNAME, CTPositivePercentage.class, CTSchemeColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gray", scope = CTScRgbColor.class) - public JAXBElement createCTScRgbColorGray(CTGrayscaleTransform value) { - return new JAXBElement(_CTSRgbColorGray_QNAME, CTGrayscaleTransform.class, CTScRgbColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gray", scope = CTSchemeColor.class) ++ public JAXBElement createCTSchemeColorGray(CTGrayscaleTransform value) { ++ return new JAXBElement(_CTSRgbColorGray_QNAME, CTGrayscaleTransform.class, CTSchemeColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alpha", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorAlpha(CTPositiveFixedPercentage value) { - return new JAXBElement(_CTSRgbColorAlpha_QNAME, CTPositiveFixedPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lum", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorLum(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorLum_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lum", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorLum(CTPercentage value) { - return new JAXBElement(_CTSRgbColorLum_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alpha", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorAlpha(CTPositiveFixedPercentage value) { ++ return new JAXBElement(_CTSRgbColorAlpha_QNAME, CTPositiveFixedPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gamma", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorGamma(CTGammaTransform value) { - return new JAXBElement(_CTSRgbColorGamma_QNAME, CTGammaTransform.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gamma", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorGamma(CTGammaTransform value) { ++ return new JAXBElement(_CTSRgbColorGamma_QNAME, CTGammaTransform.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "invGamma", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorInvGamma(CTInverseGammaTransform value) { - return new JAXBElement(_CTSRgbColorInvGamma_QNAME, CTInverseGammaTransform.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "invGamma", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorInvGamma(CTInverseGammaTransform value) { ++ return new JAXBElement(_CTSRgbColorInvGamma_QNAME, CTInverseGammaTransform.class, CTScRgbColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaMod", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorAlphaMod(CTPositivePercentage value) { - return new JAXBElement(_CTSRgbColorAlphaMod_QNAME, CTPositivePercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redOff", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorRedOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorRedOff_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redOff", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorRedOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorRedOff_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaMod", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorAlphaMod(CTPositivePercentage value) { ++ return new JAXBElement(_CTSRgbColorAlphaMod_QNAME, CTPositivePercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaOff", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorAlphaOff(CTFixedPercentage value) { - return new JAXBElement(_CTSRgbColorAlphaOff_QNAME, CTFixedPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaOff", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorAlphaOff(CTFixedPercentage value) { ++ return new JAXBElement(_CTSRgbColorAlphaOff_QNAME, CTFixedPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenOff", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorGreenOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorGreenOff_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenOff", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorGreenOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorGreenOff_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hue", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorHue(CTPositiveFixedAngle value) { - return new JAXBElement(_CTSRgbColorHue_QNAME, CTPositiveFixedAngle.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hue", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorHue(CTPositiveFixedAngle value) { ++ return new JAXBElement(_CTSRgbColorHue_QNAME, CTPositiveFixedAngle.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redMod", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorRedMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorRedMod_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redMod", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorRedMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorRedMod_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satOff", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorSatOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorSatOff_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satOff", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorSatOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorSatOff_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenMod", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorGreenMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorGreenMod_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenMod", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorGreenMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorGreenMod_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "sat", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorSat(CTPercentage value) { - return new JAXBElement(_CTSRgbColorSat_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "sat", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorSat(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorSat_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blue", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorBlue(CTPercentage value) { - return new JAXBElement(_CTSRgbColorBlue_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blue", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorBlue(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorBlue_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "red", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorRed(CTPercentage value) { - return new JAXBElement(_CTSRgbColorRed_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "red", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorRed(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorRed_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satMod", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorSatMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorSatMod_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satMod", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorSatMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorSatMod_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTAngle }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueMod", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorBlueMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorBlueMod_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueOff", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorHueOff(CTAngle value) { ++ return new JAXBElement(_CTSRgbColorHueOff_QNAME, CTAngle.class, CTScRgbColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTAngle }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueOff", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorHueOff(CTAngle value) { - return new JAXBElement(_CTSRgbColorHueOff_QNAME, CTAngle.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueMod", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorBlueMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorBlueMod_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "shade", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorShade(CTPositiveFixedPercentage value) { - return new JAXBElement(_CTSRgbColorShade_QNAME, CTPositiveFixedPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "shade", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorShade(CTPositiveFixedPercentage value) { ++ return new JAXBElement(_CTSRgbColorShade_QNAME, CTPositiveFixedPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumMod", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorLumMod(CTPercentage value) { - return new JAXBElement(_CTSRgbColorLumMod_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumMod", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorLumMod(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorLumMod_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "inv", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorInv(CTInverseTransform value) { - return new JAXBElement(_CTSRgbColorInv_QNAME, CTInverseTransform.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "inv", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorInv(CTInverseTransform value) { ++ return new JAXBElement(_CTSRgbColorInv_QNAME, CTInverseTransform.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumOff", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorLumOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorLumOff_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumOff", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorLumOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorLumOff_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "tint", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorTint(CTPositiveFixedPercentage value) { - return new JAXBElement(_CTSRgbColorTint_QNAME, CTPositiveFixedPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "tint", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorTint(CTPositiveFixedPercentage value) { ++ return new JAXBElement(_CTSRgbColorTint_QNAME, CTPositiveFixedPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "green", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorGreen(CTPercentage value) { - return new JAXBElement(_CTSRgbColorGreen_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "green", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorGreen(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorGreen_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "comp", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorComp(CTComplementTransform value) { - return new JAXBElement(_CTSRgbColorComp_QNAME, CTComplementTransform.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "comp", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorComp(CTComplementTransform value) { ++ return new JAXBElement(_CTSRgbColorComp_QNAME, CTComplementTransform.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueOff", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorBlueOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorBlueOff_QNAME, CTPercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueOff", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorBlueOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorBlueOff_QNAME, CTPercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueMod", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorHueMod(CTPositivePercentage value) { - return new JAXBElement(_CTSRgbColorHueMod_QNAME, CTPositivePercentage.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueMod", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorHueMod(CTPositivePercentage value) { ++ return new JAXBElement(_CTSRgbColorHueMod_QNAME, CTPositivePercentage.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gray", scope = CTSystemColor.class) - public JAXBElement createCTSystemColorGray(CTGrayscaleTransform value) { - return new JAXBElement(_CTSRgbColorGray_QNAME, CTGrayscaleTransform.class, CTSystemColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gray", scope = CTScRgbColor.class) ++ public JAXBElement createCTScRgbColorGray(CTGrayscaleTransform value) { ++ return new JAXBElement(_CTSRgbColorGray_QNAME, CTGrayscaleTransform.class, CTScRgbColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alpha", scope = CTHslColor.class) + public JAXBElement createCTHslColorAlpha(CTPositiveFixedPercentage value) { + return new JAXBElement(_CTSRgbColorAlpha_QNAME, CTPositiveFixedPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lum", scope = CTHslColor.class) + public JAXBElement createCTHslColorLum(CTPercentage value) { + return new JAXBElement(_CTSRgbColorLum_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gamma", scope = CTHslColor.class) + public JAXBElement createCTHslColorGamma(CTGammaTransform value) { + return new JAXBElement(_CTSRgbColorGamma_QNAME, CTGammaTransform.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "invGamma", scope = CTHslColor.class) + public JAXBElement createCTHslColorInvGamma(CTInverseGammaTransform value) { + return new JAXBElement(_CTSRgbColorInvGamma_QNAME, CTInverseGammaTransform.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaMod", scope = CTHslColor.class) + public JAXBElement createCTHslColorAlphaMod(CTPositivePercentage value) { + return new JAXBElement(_CTSRgbColorAlphaMod_QNAME, CTPositivePercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redOff", scope = CTHslColor.class) + public JAXBElement createCTHslColorRedOff(CTPercentage value) { + return new JAXBElement(_CTSRgbColorRedOff_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaOff", scope = CTHslColor.class) + public JAXBElement createCTHslColorAlphaOff(CTFixedPercentage value) { + return new JAXBElement(_CTSRgbColorAlphaOff_QNAME, CTFixedPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenOff", scope = CTHslColor.class) + public JAXBElement createCTHslColorGreenOff(CTPercentage value) { + return new JAXBElement(_CTSRgbColorGreenOff_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hue", scope = CTHslColor.class) + public JAXBElement createCTHslColorHue(CTPositiveFixedAngle value) { + return new JAXBElement(_CTSRgbColorHue_QNAME, CTPositiveFixedAngle.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redMod", scope = CTHslColor.class) + public JAXBElement createCTHslColorRedMod(CTPercentage value) { + return new JAXBElement(_CTSRgbColorRedMod_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satOff", scope = CTHslColor.class) + public JAXBElement createCTHslColorSatOff(CTPercentage value) { + return new JAXBElement(_CTSRgbColorSatOff_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenMod", scope = CTHslColor.class) + public JAXBElement createCTHslColorGreenMod(CTPercentage value) { + return new JAXBElement(_CTSRgbColorGreenMod_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "sat", scope = CTHslColor.class) - public JAXBElement createCTHslColorSat(CTPercentage value) { - return new JAXBElement(_CTSRgbColorSat_QNAME, CTPercentage.class, CTHslColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blue", scope = CTHslColor.class) ++ public JAXBElement createCTHslColorBlue(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorBlue_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blue", scope = CTHslColor.class) - public JAXBElement createCTHslColorBlue(CTPercentage value) { - return new JAXBElement(_CTSRgbColorBlue_QNAME, CTPercentage.class, CTHslColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "sat", scope = CTHslColor.class) ++ public JAXBElement createCTHslColorSat(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorSat_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "red", scope = CTHslColor.class) + public JAXBElement createCTHslColorRed(CTPercentage value) { + return new JAXBElement(_CTSRgbColorRed_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satMod", scope = CTHslColor.class) + public JAXBElement createCTHslColorSatMod(CTPercentage value) { + return new JAXBElement(_CTSRgbColorSatMod_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueMod", scope = CTHslColor.class) + public JAXBElement createCTHslColorBlueMod(CTPercentage value) { + return new JAXBElement(_CTSRgbColorBlueMod_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTAngle }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueOff", scope = CTHslColor.class) + public JAXBElement createCTHslColorHueOff(CTAngle value) { + return new JAXBElement(_CTSRgbColorHueOff_QNAME, CTAngle.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "shade", scope = CTHslColor.class) + public JAXBElement createCTHslColorShade(CTPositiveFixedPercentage value) { + return new JAXBElement(_CTSRgbColorShade_QNAME, CTPositiveFixedPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumMod", scope = CTHslColor.class) + public JAXBElement createCTHslColorLumMod(CTPercentage value) { + return new JAXBElement(_CTSRgbColorLumMod_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "inv", scope = CTHslColor.class) + public JAXBElement createCTHslColorInv(CTInverseTransform value) { + return new JAXBElement(_CTSRgbColorInv_QNAME, CTInverseTransform.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumOff", scope = CTHslColor.class) + public JAXBElement createCTHslColorLumOff(CTPercentage value) { + return new JAXBElement(_CTSRgbColorLumOff_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "tint", scope = CTHslColor.class) + public JAXBElement createCTHslColorTint(CTPositiveFixedPercentage value) { + return new JAXBElement(_CTSRgbColorTint_QNAME, CTPositiveFixedPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "green", scope = CTHslColor.class) + public JAXBElement createCTHslColorGreen(CTPercentage value) { + return new JAXBElement(_CTSRgbColorGreen_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "comp", scope = CTHslColor.class) + public JAXBElement createCTHslColorComp(CTComplementTransform value) { + return new JAXBElement(_CTSRgbColorComp_QNAME, CTComplementTransform.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueOff", scope = CTHslColor.class) + public JAXBElement createCTHslColorBlueOff(CTPercentage value) { + return new JAXBElement(_CTSRgbColorBlueOff_QNAME, CTPercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueMod", scope = CTHslColor.class) + public JAXBElement createCTHslColorHueMod(CTPositivePercentage value) { + return new JAXBElement(_CTSRgbColorHueMod_QNAME, CTPositivePercentage.class, CTHslColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gray", scope = CTHslColor.class) + public JAXBElement createCTHslColorGray(CTGrayscaleTransform value) { + return new JAXBElement(_CTSRgbColorGray_QNAME, CTGrayscaleTransform.class, CTHslColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alpha", scope = CTPresetColor.class) - public JAXBElement createCTPresetColorAlpha(CTPositiveFixedPercentage value) { - return new JAXBElement(_CTSRgbColorAlpha_QNAME, CTPositiveFixedPercentage.class, CTPresetColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lum", scope = CTPresetColor.class) ++ public JAXBElement createCTPresetColorLum(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorLum_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lum", scope = CTPresetColor.class) - public JAXBElement createCTPresetColorLum(CTPercentage value) { - return new JAXBElement(_CTSRgbColorLum_QNAME, CTPercentage.class, CTPresetColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alpha", scope = CTPresetColor.class) ++ public JAXBElement createCTPresetColorAlpha(CTPositiveFixedPercentage value) { ++ return new JAXBElement(_CTSRgbColorAlpha_QNAME, CTPositiveFixedPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTGammaTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gamma", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorGamma(CTGammaTransform value) { + return new JAXBElement(_CTSRgbColorGamma_QNAME, CTGammaTransform.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTInverseGammaTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "invGamma", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorInvGamma(CTInverseGammaTransform value) { + return new JAXBElement(_CTSRgbColorInvGamma_QNAME, CTInverseGammaTransform.class, CTPresetColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaMod", scope = CTPresetColor.class) - public JAXBElement createCTPresetColorAlphaMod(CTPositivePercentage value) { - return new JAXBElement(_CTSRgbColorAlphaMod_QNAME, CTPositivePercentage.class, CTPresetColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redOff", scope = CTPresetColor.class) ++ public JAXBElement createCTPresetColorRedOff(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorRedOff_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** - * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} ++ * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redOff", scope = CTPresetColor.class) - public JAXBElement createCTPresetColorRedOff(CTPercentage value) { - return new JAXBElement(_CTSRgbColorRedOff_QNAME, CTPercentage.class, CTPresetColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaMod", scope = CTPresetColor.class) ++ public JAXBElement createCTPresetColorAlphaMod(CTPositivePercentage value) { ++ return new JAXBElement(_CTSRgbColorAlphaMod_QNAME, CTPositivePercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTFixedPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "alphaOff", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorAlphaOff(CTFixedPercentage value) { + return new JAXBElement(_CTSRgbColorAlphaOff_QNAME, CTFixedPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenOff", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorGreenOff(CTPercentage value) { + return new JAXBElement(_CTSRgbColorGreenOff_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedAngle }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hue", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorHue(CTPositiveFixedAngle value) { + return new JAXBElement(_CTSRgbColorHue_QNAME, CTPositiveFixedAngle.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "redMod", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorRedMod(CTPercentage value) { + return new JAXBElement(_CTSRgbColorRedMod_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satOff", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorSatOff(CTPercentage value) { + return new JAXBElement(_CTSRgbColorSatOff_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "greenMod", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorGreenMod(CTPercentage value) { + return new JAXBElement(_CTSRgbColorGreenMod_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "sat", scope = CTPresetColor.class) - public JAXBElement createCTPresetColorSat(CTPercentage value) { - return new JAXBElement(_CTSRgbColorSat_QNAME, CTPercentage.class, CTPresetColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blue", scope = CTPresetColor.class) ++ public JAXBElement createCTPresetColorBlue(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorBlue_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ - @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blue", scope = CTPresetColor.class) - public JAXBElement createCTPresetColorBlue(CTPercentage value) { - return new JAXBElement(_CTSRgbColorBlue_QNAME, CTPercentage.class, CTPresetColor.class, value); ++ @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "sat", scope = CTPresetColor.class) ++ public JAXBElement createCTPresetColorSat(CTPercentage value) { ++ return new JAXBElement(_CTSRgbColorSat_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "red", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorRed(CTPercentage value) { + return new JAXBElement(_CTSRgbColorRed_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "satMod", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorSatMod(CTPercentage value) { + return new JAXBElement(_CTSRgbColorSatMod_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueMod", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorBlueMod(CTPercentage value) { + return new JAXBElement(_CTSRgbColorBlueMod_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTAngle }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueOff", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorHueOff(CTAngle value) { + return new JAXBElement(_CTSRgbColorHueOff_QNAME, CTAngle.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "shade", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorShade(CTPositiveFixedPercentage value) { + return new JAXBElement(_CTSRgbColorShade_QNAME, CTPositiveFixedPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumMod", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorLumMod(CTPercentage value) { + return new JAXBElement(_CTSRgbColorLumMod_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTInverseTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "inv", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorInv(CTInverseTransform value) { + return new JAXBElement(_CTSRgbColorInv_QNAME, CTInverseTransform.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "lumOff", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorLumOff(CTPercentage value) { + return new JAXBElement(_CTSRgbColorLumOff_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositiveFixedPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "tint", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorTint(CTPositiveFixedPercentage value) { + return new JAXBElement(_CTSRgbColorTint_QNAME, CTPositiveFixedPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "green", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorGreen(CTPercentage value) { + return new JAXBElement(_CTSRgbColorGreen_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTComplementTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "comp", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorComp(CTComplementTransform value) { + return new JAXBElement(_CTSRgbColorComp_QNAME, CTComplementTransform.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "blueOff", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorBlueOff(CTPercentage value) { + return new JAXBElement(_CTSRgbColorBlueOff_QNAME, CTPercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTPositivePercentage }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "hueMod", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorHueMod(CTPositivePercentage value) { + return new JAXBElement(_CTSRgbColorHueMod_QNAME, CTPositivePercentage.class, CTPresetColor.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link CTGrayscaleTransform }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/main", name = "gray", scope = CTPresetColor.class) + public JAXBElement createCTPresetColorGray(CTGrayscaleTransform value) { + return new JAXBElement(_CTSRgbColorGray_QNAME, CTGrayscaleTransform.class, CTPresetColor.class, value); + } + + } diff --cc src/java/org/apache/poi/sl/usermodel/FreeformShape.java index 0000000000,e0843a11a1..ec288854a2 mode 000000,100644..100644 --- a/src/java/org/apache/poi/sl/usermodel/FreeformShape.java +++ b/src/java/org/apache/poi/sl/usermodel/FreeformShape.java @@@ -1,0 -1,22 +1,42 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.sl.usermodel; + ++import java.awt.geom.GeneralPath; ++ + public interface FreeformShape> extends AutoShape { ++ /** ++ * Gets the shape path. ++ *

++ * The path is translated in the shape's coordinate system, i.e. ++ * freeform.getPath().getBounds2D() equals to freeform.getAnchor() ++ * (small discrepancies are possible due to rounding errors) ++ *

++ * ++ * @return the path ++ */ ++ GeneralPath getPath(); + ++ /** ++ * Set the shape path ++ * ++ * @param path shape outline ++ * @return the number of points written ++ */ ++ int setPath(GeneralPath path); + } diff --cc src/java/org/apache/poi/util/Units.java index d402156abd,d7f211db6c..c871fc0a31 --- a/src/java/org/apache/poi/util/Units.java +++ b/src/java/org/apache/poi/util/Units.java @@@ -20,8 -20,24 +20,30 @@@ package org.apache.poi.util * @author Yegor Kozlov */ public class Units { ++ /** ++ * In Escher absolute distances are specified in ++ * English Metric Units (EMUs), occasionally referred to as A units; ++ * there are 360000 EMUs per centimeter, 914400 EMUs per inch, 12700 EMUs per point. ++ */ public static final int EMU_PER_PIXEL = 9525; public static final int EMU_PER_POINT = 12700; ++ public static final int EMU_PER_CENTIMETER = 360000; + + /** + * Master DPI (576 pixels per inch). + * Used by the reference coordinate system in PowerPoint (HSLF) + */ + public static final int MASTER_DPI = 576; + + /** + * Pixels DPI (96 pixels per inch) + */ + public static final int PIXEL_DPI = 96; + + /** + * Points DPI (72 pixels per inch) + */ + public static final int POINT_DPI = 72; /** * Converts points to EMUs @@@ -49,10 -65,38 +71,51 @@@ * * @see [MS-OSHARED] - 2.2.1.6 FixedPoint */ - public static double fixedPointToDecimal(int fixedPoint) { + public static double fixedPointToDouble(int fixedPoint) { int i = (fixedPoint >> 16); int f = (fixedPoint >> 0) & 0xFFFF; - double decimal = (i + f/65536.0); - return decimal; + double floatPoint = (i + f/65536d); + return floatPoint; + } + + /** + * Converts a value of type floating point to a FixedPoint + * + * @param floatPoint + * @return fixedPoint + * + * @see [MS-OSHARED] - 2.2.1.6 FixedPoint + */ + public static int doubleToFixedPoint(double floatPoint) { + int i = (int)Math.floor(floatPoint); + int f = (int)((floatPoint % 1d)*65536d); + int fixedPoint = (i << 16) | (f & 0xFFFF); + return fixedPoint; + } + + public static double masterToPoints(int masterDPI) { + double points = masterDPI; + points *= POINT_DPI; + points /= MASTER_DPI; + return points; + } + + public static int pointsToMaster(double points) { + points *= MASTER_DPI; + points /= POINT_DPI; + return (int)points; + } ++ ++ public static int pointsToPixel(double points) { ++ points *= PIXEL_DPI; ++ points /= POINT_DPI; ++ return (int)points; ++ } ++ ++ public static double pixelToPoints(int pixel) { ++ double points = pixel; ++ points *= POINT_DPI; ++ points /= PIXEL_DPI; ++ return points; + } } diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java index b1c6be4573,6bdca81d6f..ae2ed3a09c --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java @@@ -17,41 -17,20 +17,47 @@@ package org.apache.poi.xslf.usermodel; import java.awt.Dimension; -import java.io.*; -import java.util.*; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; - import java.util.*; ++import java.util.ArrayList; ++import java.util.Collections; ++import java.util.HashMap; ++import java.util.List; ++import java.util.Map; import java.util.regex.Pattern; -import org.apache.poi.*; +import org.apache.poi.POIXMLDocument; +import org.apache.poi.POIXMLDocumentPart; +import org.apache.poi.POIXMLException; - import org.apache.poi.POIXMLRelation; import org.apache.poi.openxml4j.exceptions.OpenXML4JException; -import org.apache.poi.openxml4j.opc.*; -import org.apache.poi.sl.usermodel.*; -import org.apache.poi.util.*; +import org.apache.poi.openxml4j.opc.OPCPackage; +import org.apache.poi.openxml4j.opc.PackagePart; +import org.apache.poi.openxml4j.opc.PackagePartName; +import org.apache.poi.openxml4j.opc.TargetMode; ++import org.apache.poi.sl.usermodel.MasterSheet; ++import org.apache.poi.sl.usermodel.Resources; ++import org.apache.poi.sl.usermodel.SlideShow; +import org.apache.poi.util.Beta; +import org.apache.poi.util.IOUtils; +import org.apache.poi.util.Internal; +import org.apache.poi.util.POILogFactory; +import org.apache.poi.util.POILogger; +import org.apache.poi.util.PackageHelper; +import org.apache.poi.util.Units; import org.apache.poi.xslf.XSLFSlideShow; -import org.apache.xmlbeans.*; +import org.apache.xmlbeans.XmlException; +import org.apache.xmlbeans.XmlObject; +import org.apache.xmlbeans.XmlOptions; import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraphProperties; import org.openxmlformats.schemas.officeDocument.x2006.relationships.STRelationshipId; -import org.openxmlformats.schemas.presentationml.x2006.main.*; +import org.openxmlformats.schemas.presentationml.x2006.main.CTNotesMasterIdList; +import org.openxmlformats.schemas.presentationml.x2006.main.CTNotesMasterIdListEntry; +import org.openxmlformats.schemas.presentationml.x2006.main.CTPresentation; +import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdList; +import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdListEntry; +import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideSize; +import org.openxmlformats.schemas.presentationml.x2006.main.PresentationDocument; /** * High level representation of a ooxml slideshow. diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFBackground.java index 604c9dff3a,bfa3f31ec0..e40494da2d --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFBackground.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFBackground.java @@@ -17,19 -17,15 +17,19 @@@ package org.apache.poi.xslf.usermodel; - import org.apache.xmlbeans.XmlObject; - import org.openxmlformats.schemas.drawingml.x2006.main.CTBackgroundFillStyleList; - import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor; - import org.openxmlformats.schemas.drawingml.x2006.main.CTStyleMatrixReference; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTransform2D; - import org.openxmlformats.schemas.presentationml.x2006.main.CTBackground; - -import java.awt.*; +import java.awt.Color; +import java.awt.Dimension; - import java.awt.Graphics2D; - import java.awt.Paint; import java.awt.geom.Rectangle2D; + import org.apache.poi.sl.draw.DrawPaint; -import org.apache.poi.sl.usermodel.*; ++import org.apache.poi.sl.usermodel.Background; ++import org.apache.poi.sl.usermodel.ColorStyle; ++import org.apache.poi.sl.usermodel.FillStyle; ++import org.apache.poi.sl.usermodel.PaintStyle; + import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint; + import org.openxmlformats.schemas.drawingml.x2006.main.CTTransform2D; + import org.openxmlformats.schemas.presentationml.x2006.main.CTBackground; + /** * Background shape * diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java index c0f4762c7e,527cef781d..09e05d9648 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java @@@ -21,19 -27,9 +27,15 @@@ import org.apache.poi.sl.usermodel.Colo import org.apache.poi.util.Beta; import org.apache.poi.util.Internal; import org.apache.xmlbeans.XmlObject; -import org.openxmlformats.schemas.drawingml.x2006.main.*; +import org.openxmlformats.schemas.drawingml.x2006.main.CTColor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTHslColor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetColor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTSRgbColor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTScRgbColor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTSystemColor; import org.w3c.dom.Node; - import java.awt.Color; - import java.util.HashMap; - import java.util.Map; - /** * Encapsulates logic to read color definitions from DrawingML and convert them to java.awt.Color * diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java index a95e0bbb92,a95e0bbb92..07a84caa52 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java @@@ -24,6 -24,6 +24,7 @@@ import java.awt.geom.GeneralPath import java.awt.geom.PathIterator; import java.awt.geom.Rectangle2D; ++import org.apache.poi.sl.usermodel.FreeformShape; import org.apache.poi.util.Beta; import org.apache.poi.util.Units; import org.apache.xmlbeans.XmlObject; @@@ -47,18 -47,18 +48,13 @@@ import org.openxmlformats.schemas.prese * @author Yegor Kozlov */ @Beta --public class XSLFFreeformShape extends XSLFAutoShape { ++public class XSLFFreeformShape extends XSLFAutoShape implements FreeformShape { /*package*/ XSLFFreeformShape(CTShape shape, XSLFSheet sheet) { super(shape, sheet); } -- /** -- * Set the shape path -- * -- * @param path shape outline -- * @return the number of points written -- */ ++ @Override public int setPath(GeneralPath path) { CTPath2D ctPath = CTPath2D.Factory.newInstance(); @@@ -110,16 -110,16 +106,7 @@@ return numPoints; } -- /** -- * Gets the shape path. -- *

-- * The path is translated in the shape's coordinate system, i.e. -- * freeform.getPath().getBounds2D() equals to freeform.getAnchor() -- * (small discrepancies are possible due to rounding errors) -- *

-- * -- * @return the path -- */ ++ @Override @SuppressWarnings("deprecation") public GeneralPath getPath() { GeneralPath path = new GeneralPath(); diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java index 529bacf734,608cb3adba..b17799a82f --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java @@@ -27,16 -32,9 +32,12 @@@ import org.apache.poi.util.Beta import org.apache.poi.util.Units; import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlObject; -import org.openxmlformats.schemas.drawingml.x2006.main.*; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObjectData; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPoint2D; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTransform2D; import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrame; - import javax.xml.namespace.QName; - import java.awt.Graphics2D; - import java.awt.geom.Rectangle2D; - /** * @author Yegor Kozlov */ diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java index 2ad699b408,18191a5d7e..4fc9e0f748 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java @@@ -19,29 -19,17 +19,31 @@@ package org.apache.poi.xslf.usermodel; + import java.awt.geom.Rectangle2D; -import java.util.*; ++import java.util.ArrayList; ++import java.util.Iterator; ++import java.util.List; + import java.util.regex.Pattern; + -import org.apache.poi.openxml4j.opc.*; +import org.apache.poi.openxml4j.opc.PackagePart; +import org.apache.poi.openxml4j.opc.PackageRelationship; +import org.apache.poi.openxml4j.opc.TargetMode; + import org.apache.poi.sl.usermodel.GroupShape; -import org.apache.poi.util.*; +import org.apache.poi.util.Beta; ++import org.apache.poi.util.POILogFactory; ++import org.apache.poi.util.POILogger; +import org.apache.poi.util.Units; import org.apache.xmlbeans.XmlObject; -import org.openxmlformats.schemas.drawingml.x2006.main.*; -import org.openxmlformats.schemas.presentationml.x2006.main.*; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGroupShapeProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGroupTransform2D; +import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPoint2D; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; +import org.openxmlformats.schemas.presentationml.x2006.main.CTConnector; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShapeNonVisual; +import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; - import java.awt.Graphics2D; - import java.awt.geom.AffineTransform; - import java.awt.geom.Rectangle2D; - import java.util.Iterator; - import java.util.List; - import java.util.regex.Pattern; - /** * Represents a group shape that consists of many shapes grouped together. * diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotes.java index 0a33132e28,7296d1d450..6fb98c07db --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotes.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotes.java @@@ -21,14 -23,13 +23,15 @@@ import java.util.List import org.apache.poi.POIXMLDocumentPart; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.openxml4j.opc.PackageRelationship; + import org.apache.poi.sl.usermodel.Notes; import org.apache.poi.util.Beta; import org.apache.xmlbeans.XmlException; -import org.openxmlformats.schemas.presentationml.x2006.main.*; +import org.openxmlformats.schemas.presentationml.x2006.main.CTCommonSlideData; +import org.openxmlformats.schemas.presentationml.x2006.main.CTNotesSlide; +import org.openxmlformats.schemas.presentationml.x2006.main.NotesDocument; @Beta - public final class XSLFNotes extends XSLFSheet { + public final class XSLFNotes extends XSLFSheet implements Notes { private CTNotesSlide _notes; /** diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java index 7ade4f948d,3b6053b0bd..98c3b7c9fe --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java @@@ -20,12 -20,12 +20,14 @@@ package org.apache.poi.xslf.usermodel; import java.io.IOException; + import java.io.OutputStream; -import org.apache.poi.*; +import org.apache.poi.POIXMLDocumentPart; +import org.apache.poi.POIXMLException; +import org.apache.poi.POIXMLRelation; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.openxml4j.opc.PackageRelationship; + import org.apache.poi.sl.usermodel.PictureData; import org.apache.poi.util.Beta; import org.apache.poi.util.IOUtils; diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShadow.java index 42dc360cd6,0b0e4f0aad..85e85b6a46 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShadow.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShadow.java @@@ -17,6 -17,12 +17,14 @@@ package org.apache.poi.xslf.usermodel; + import java.awt.Color; + import java.awt.geom.Rectangle2D; + + import org.apache.poi.sl.draw.DrawPaint; -import org.apache.poi.sl.usermodel.*; ++import org.apache.poi.sl.usermodel.ColorStyle; ++import org.apache.poi.sl.usermodel.PaintStyle; + import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint; ++import org.apache.poi.sl.usermodel.Shadow; import org.apache.poi.util.Units; import org.openxmlformats.schemas.drawingml.x2006.main.CTOuterShadowEffect; import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor; diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java index 82addf7ddb,6a9637b2c8..2e169638fd --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java @@@ -19,13 -19,24 +19,32 @@@ package org.apache.poi.xslf.usermodel; - import java.awt.Graphics2D; - import java.awt.geom.AffineTransform; - import java.awt.geom.Rectangle2D; + import java.io.IOException; + import java.io.InputStream; + import java.util.Arrays; + import java.util.Comparator; + import org.apache.poi.openxml4j.exceptions.InvalidFormatException; + import org.apache.poi.openxml4j.opc.PackagePart; + import org.apache.poi.openxml4j.opc.PackageRelationship; -import org.apache.poi.sl.usermodel.*; ++import org.apache.poi.sl.usermodel.ColorStyle; ++import org.apache.poi.sl.usermodel.PaintStyle; + import org.apache.poi.sl.usermodel.PaintStyle.GradientPaint; + import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint; + import org.apache.poi.sl.usermodel.PaintStyle.TexturePaint; ++import org.apache.poi.sl.usermodel.PlaceableShape; ++import org.apache.poi.sl.usermodel.Shape; import org.apache.poi.util.Beta; import org.apache.poi.util.Internal; + import org.apache.poi.xslf.model.PropertyFetcher; import org.apache.xmlbeans.XmlObject; + import org.openxmlformats.schemas.drawingml.x2006.main.*; -import org.openxmlformats.schemas.presentationml.x2006.main.*; ++import org.openxmlformats.schemas.presentationml.x2006.main.CTApplicationNonVisualDrawingProps; ++import org.openxmlformats.schemas.presentationml.x2006.main.CTBackground; ++import org.openxmlformats.schemas.presentationml.x2006.main.CTBackgroundProperties; ++import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder; ++import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; ++import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType; /** * Base super-class class for all shapes in PresentationML diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java index 35100d1194,651a31ad66..9549baf469 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java @@@ -16,42 -16,28 +16,46 @@@ ==================================================================== */ package org.apache.poi.xslf.usermodel; + import java.awt.Graphics2D; -import java.io.*; -import java.util.*; ++import java.io.IOException; ++import java.io.InputStream; ++import java.io.OutputStream; ++import java.util.ArrayList; ++import java.util.HashMap; ++import java.util.Iterator; ++import java.util.List; ++import java.util.Map; + import java.util.regex.Pattern; + + import javax.xml.namespace.QName; + import org.apache.poi.POIXMLDocumentPart; import org.apache.poi.POIXMLException; + import org.apache.poi.openxml4j.exceptions.InvalidFormatException; -import org.apache.poi.openxml4j.opc.*; +import org.apache.poi.openxml4j.opc.OPCPackage; +import org.apache.poi.openxml4j.opc.PackagePart; ++import org.apache.poi.openxml4j.opc.PackagePartName; +import org.apache.poi.openxml4j.opc.PackageRelationship; +import org.apache.poi.openxml4j.opc.TargetMode; - import org.apache.poi.openxml4j.exceptions.InvalidFormatException; + import org.apache.poi.sl.draw.DrawFactory; + import org.apache.poi.sl.draw.Drawable; + import org.apache.poi.sl.usermodel.Sheet; -import org.apache.poi.util.*; +import org.apache.poi.util.Beta; +import org.apache.poi.util.IOUtils; +import org.apache.poi.util.Internal; import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlOptions; import org.openxmlformats.schemas.officeDocument.x2006.relationships.STRelationshipId; -import org.openxmlformats.schemas.presentationml.x2006.main.*; +import org.openxmlformats.schemas.presentationml.x2006.main.CTCommonSlideData; +import org.openxmlformats.schemas.presentationml.x2006.main.CTConnector; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrame; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape; +import org.openxmlformats.schemas.presentationml.x2006.main.CTPicture; +import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder; +import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; - import javax.xml.namespace.QName; - import java.awt.Graphics2D; - import java.awt.geom.AffineTransform; - import java.io.IOException; - import java.io.InputStream; - import java.io.OutputStream; - import java.util.ArrayList; - import java.util.HashMap; - import java.util.Iterator; - import java.util.List; - import java.util.Map; - import java.util.regex.Pattern; - @Beta - public abstract class XSLFSheet extends POIXMLDocumentPart implements XSLFShapeContainer { + public abstract class XSLFSheet extends POIXMLDocumentPart implements XSLFShapeContainer, Sheet { private XSLFCommonSlideData _commonSlideData; private XSLFDrawing _drawing; private List _shapes; diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java index d6cfa7fba3,a48b14581a..79fbffe76a --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java @@@ -19,6 -19,22 +19,25 @@@ package org.apache.poi.xslf.usermodel; + import static org.apache.poi.sl.usermodel.PaintStyle.TRANSPARENT_PAINT; + + import java.awt.Color; + import java.awt.geom.Rectangle2D; + + import javax.xml.stream.XMLStreamException; + import javax.xml.stream.XMLStreamReader; + -import org.apache.poi.sl.draw.geom.*; ++import org.apache.poi.openxml4j.opc.PackagePart; ++import org.apache.poi.sl.draw.geom.CustomGeometry; ++import org.apache.poi.sl.draw.geom.Guide; ++import org.apache.poi.sl.draw.geom.PresetGeometries; + import org.apache.poi.sl.usermodel.*; + import org.apache.poi.sl.usermodel.LineDecoration.DecorationShape; + import org.apache.poi.sl.usermodel.LineDecoration.DecorationSize; + import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint; + import org.apache.poi.sl.usermodel.StrokeStyle.LineCap; + import org.apache.poi.sl.usermodel.StrokeStyle.LineCompound; + import org.apache.poi.sl.usermodel.StrokeStyle.LineDash; import org.apache.poi.util.Beta; import org.apache.poi.util.Units; import org.apache.poi.xslf.model.PropertyFetcher; @@@ -292,6 -223,48 +226,62 @@@ public abstract class XSLFSimpleShape e return null; } + protected PaintStyle getLinePaint() { + PropertyFetcher fetcher = new PropertyFetcher() { + public boolean fetch(XSLFShape shape) { + CTLineProperties spPr = shape.getSpPr().getLn(); + if (spPr != null) { + if (spPr.isSetNoFill()) { + setValue(TRANSPARENT_PAINT); // use it as 'nofill' value + return true; + } - PaintStyle paint = getPaint(spPr, null); - if (paint != null) { - setValue(paint); - return true; ++ ++ PaintStyle paint = null; ++ PackagePart pp = getSheet().getPackagePart(); ++ for (XmlObject obj : spPr.selectPath("*")) { ++ paint = selectPaint(obj, null, pp); ++ if (paint != null) { ++ setValue(paint); ++ return true; ++ } ++ } ++ ++ CTShapeStyle style = shape.getSpStyle(); ++ if (style != null) { ++ paint = selectPaint(style.getLnRef()); ++ if (paint != null) { ++ setValue(paint); ++ return true; ++ } + } + } + return false; + + } + }; + fetchShapeProperty(fetcher); + + PaintStyle paint = fetcher.getValue(); + if (paint != null) return paint; + + // line color was not found, check if it is defined in the theme + CTShapeStyle style = getSpStyle(); + if (style == null) return TRANSPARENT_PAINT; + + // get a reference to a line style within the style matrix. + CTStyleMatrixReference lnRef = style.getLnRef(); + int idx = (int)lnRef.getIdx(); + CTSchemeColor phClr = lnRef.getSchemeClr(); + if(idx > 0){ + XSLFTheme theme = getSheet().getTheme(); + XmlObject lnProps = theme.getXmlObject(). + getThemeElements().getFmtScheme().getLnStyleLst().selectPath("*")[idx - 1]; + paint = getPaint(lnProps, phClr); + } + + return paint == null ? TRANSPARENT_PAINT : paint; + } + /** * * @param width line width in points. 0 means no line diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java index f2d4b6eff1,abab57b0b5..83024ee2ef --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java @@@ -19,26 -22,16 +22,26 @@@ import java.io.IOException import org.apache.poi.POIXMLDocumentPart; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.openxml4j.opc.PackageRelationship; + import org.apache.poi.sl.draw.DrawFactory; + import org.apache.poi.sl.draw.Drawable; + import org.apache.poi.sl.usermodel.Slide; import org.apache.poi.util.Beta; import org.apache.xmlbeans.XmlException; -import org.openxmlformats.schemas.drawingml.x2006.main.*; -import org.openxmlformats.schemas.presentationml.x2006.main.*; ++import org.openxmlformats.schemas.drawingml.x2006.main.CTBlip; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGroupShapeProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGroupTransform2D; +import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPoint2D; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; - import org.openxmlformats.schemas.drawingml.x2006.main.CTBlip; ++import org.openxmlformats.schemas.presentationml.x2006.main.CTBackground; +import org.openxmlformats.schemas.presentationml.x2006.main.CTCommonSlideData; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShapeNonVisual; +import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide; +import org.openxmlformats.schemas.presentationml.x2006.main.SldDocument; - import org.openxmlformats.schemas.presentationml.x2006.main.CTBackground; - - import java.awt.Graphics2D; - import java.io.IOException; @Beta - public final class XSLFSlide extends XSLFSheet { + public final class XSLFSlide extends XSLFSheet implements Slide { private final CTSlide _slide; private XSLFSlideLayout _layout; private XSLFComments _comments; diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideLayout.java index f8cd23ccde,65487bd45b..b408d529ec --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideLayout.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideLayout.java @@@ -16,6 -16,6 +16,8 @@@ ==================================================================== */ package org.apache.poi.xslf.usermodel; ++import java.io.IOException; ++ import org.apache.poi.POIXMLDocumentPart; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.openxml4j.opc.PackageRelationship; @@@ -27,10 -28,10 +30,8 @@@ import org.openxmlformats.schemas.prese import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideLayout; import org.openxmlformats.schemas.presentationml.x2006.main.SldLayoutDocument; --import java.io.IOException; -- @Beta - public class XSLFSlideLayout extends XSLFSheet { + public class XSLFSlideLayout extends XSLFSheet implements MasterSheet { private CTSlideLayout _layout; private XSLFSlideMaster _master; diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideMaster.java index d4383c4d9f,830a531a24..26b5dc0a03 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideMaster.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideMaster.java @@@ -16,6 -16,6 +16,10 @@@ ==================================================================== */ package org.apache.poi.xslf.usermodel; ++import java.io.IOException; ++import java.util.HashMap; ++import java.util.Map; ++ import org.apache.poi.POIXMLDocumentPart; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.openxml4j.opc.PackageRelationship; @@@ -29,10 -30,10 +34,6 @@@ import org.openxmlformats.schemas.prese import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMasterTextStyles; import org.openxmlformats.schemas.presentationml.x2006.main.SldMasterDocument; --import java.io.IOException; --import java.util.HashMap; --import java.util.Map; -- /** * Slide master object associated with this layout. *

diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java index 13d80aea02,994a6034f1..45000a1c3e --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java @@@ -17,43 -17,15 +17,19 @@@ package org.apache.poi.xslf.usermodel; import java.awt.Color; - import java.awt.Graphics2D; - import java.awt.font.LineBreakMeasurer; - import java.awt.font.TextAttribute; - import java.awt.font.TextLayout; - import java.awt.geom.Rectangle2D; - import java.text.AttributedCharacterIterator; - import java.text.AttributedString; -import java.util.*; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; - import java.util.Map; - import org.apache.poi.sl.usermodel.TextPainter; + import org.apache.poi.sl.usermodel.AutoNumberingScheme; + import org.apache.poi.sl.usermodel.TextParagraph; -import org.apache.poi.util.*; +import org.apache.poi.util.Beta; +import org.apache.poi.util.Internal; +import org.apache.poi.util.Units; import org.apache.poi.xslf.model.ParagraphPropertyFetcher; + import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlObject; - import org.openxmlformats.schemas.drawingml.x2006.main.CTColor; - import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun; - import org.openxmlformats.schemas.drawingml.x2006.main.CTSRgbColor; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextAutonumberBullet; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBulletSizePercent; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBulletSizePoint; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharBullet; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextField; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextFont; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextLineBreak; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextNormalAutofit; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraphProperties; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextSpacing; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextTabStop; - import org.openxmlformats.schemas.drawingml.x2006.main.CTTextTabStopList; - import org.openxmlformats.schemas.drawingml.x2006.main.STTextAlignType; - import org.openxmlformats.schemas.drawingml.x2006.main.STTextAutonumberScheme; + import org.openxmlformats.schemas.drawingml.x2006.main.*; import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder; import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType; diff --cc src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java index d5ae1a2527,d1eb19e805..ae5470c796 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java @@@ -19,30 -19,20 +19,30 @@@ package org.apache.poi.xslf.usermodel; - import java.awt.Graphics2D; - import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; - import java.awt.image.BufferedImage; -import java.util.*; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import org.apache.poi.POIXMLException; + import org.apache.poi.sl.draw.DrawFactory; + import org.apache.poi.sl.draw.DrawTextShape; -import org.apache.poi.sl.usermodel.*; ++import org.apache.poi.sl.usermodel.Insets2D; ++import org.apache.poi.sl.usermodel.TextShape; ++import org.apache.poi.sl.usermodel.VerticalAlignment; import org.apache.poi.util.Beta; import org.apache.poi.util.Units; import org.apache.poi.xslf.model.PropertyFetcher; import org.apache.poi.xslf.model.TextBodyPropertyFetcher; import org.apache.xmlbeans.XmlObject; -import org.openxmlformats.schemas.drawingml.x2006.main.*; -import org.openxmlformats.schemas.presentationml.x2006.main.*; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBodyProperties; ++import org.openxmlformats.schemas.drawingml.x2006.main.CTTextListStyle; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph; +import org.openxmlformats.schemas.drawingml.x2006.main.STTextAnchoringType; +import org.openxmlformats.schemas.drawingml.x2006.main.STTextVerticalType; +import org.openxmlformats.schemas.drawingml.x2006.main.STTextWrappingType; - import org.openxmlformats.schemas.presentationml.x2006.main.CTApplicationNonVisualDrawingProps; +import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder; - import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; - import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType; /** * Represents a shape that can hold text. diff --cc src/resources/main/org/apache/poi/sl/draw/geom/presetShapeDefinitions.xml index 0000000000,0000000000..4a3a0701d3 new file mode 100644 --- /dev/null +++ b/src/resources/main/org/apache/poi/sl/draw/geom/presetShapeDefinitions.xml @@@ -1,0 -1,0 +1,19906 @@@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ diff --cc src/resources/ooxml/org/apache/poi/xslf/usermodel/presetShapeDefinitions.xml index 4a3a0701d3,4a3a0701d3..0000000000 deleted file mode 100644,100644 --- a/src/resources/ooxml/org/apache/poi/xslf/usermodel/presetShapeDefinitions.xml +++ /dev/null @@@ -1,19906 -1,19906 +1,0 @@@ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- diff --cc src/scratchpad/src/org/apache/poi/hslf/blip/EMF.java index a2c3598fb5,5d3a45e658..582d9ab453 --- a/src/scratchpad/src/org/apache/poi/hslf/blip/EMF.java +++ b/src/scratchpad/src/org/apache/poi/hslf/blip/EMF.java @@@ -17,16 -17,16 +17,16 @@@ package org.apache.poi.hslf.blip; - import org.apache.poi.hslf.model.Picture; - import org.apache.poi.hslf.model.Shape; -import org.apache.poi.hslf.usermodel.HSLFPictureShape; -import org.apache.poi.hslf.usermodel.HSLFShape; --import org.apache.poi.hslf.exceptions.HSLFException; -- --import java.io.ByteArrayOutputStream; --import java.io.InputStream; import java.io.ByteArrayInputStream; ++import java.io.ByteArrayOutputStream; import java.io.IOException; ++import java.io.InputStream; import java.util.zip.InflaterInputStream; ++import org.apache.poi.hslf.exceptions.HSLFException; ++import org.apache.poi.hslf.usermodel.HSLFPictureShape; ++import org.apache.poi.util.Units; ++ /** * Represents EMF (Windows Enhanced Metafile) picture data. * @@@ -67,7 -67,7 +67,7 @@@ public final class EMF extends Metafil header.wmfsize = data.length; //we don't have a EMF reader in java, have to set default image size 200x200 header.bounds = new java.awt.Rectangle(0, 0, 200, 200); - header.size = new java.awt.Dimension(header.bounds.width*Shape.EMU_PER_POINT, header.bounds.height*Shape.EMU_PER_POINT); - header.size = new java.awt.Dimension(header.bounds.width*HSLFShape.EMU_PER_POINT, header.bounds.height*HSLFShape.EMU_PER_POINT); ++ header.size = new java.awt.Dimension(header.bounds.width*Units.EMU_PER_POINT, header.bounds.height*Units.EMU_PER_POINT); header.zipsize = compressed.length; byte[] checksum = getChecksum(data); diff --cc src/scratchpad/src/org/apache/poi/hslf/blip/PICT.java index 848d994422,bebbcf450f..da478c9ddd --- a/src/scratchpad/src/org/apache/poi/hslf/blip/PICT.java +++ b/src/scratchpad/src/org/apache/poi/hslf/blip/PICT.java @@@ -23,8 -23,8 +23,8 @@@ import java.io.IOException import java.util.zip.InflaterInputStream; import org.apache.poi.hslf.exceptions.HSLFException; - import org.apache.poi.hslf.model.Picture; - import org.apache.poi.hslf.model.Shape; + import org.apache.poi.hslf.usermodel.HSLFPictureShape; -import org.apache.poi.hslf.usermodel.HSLFShape; ++import org.apache.poi.util.Units; /** * Represents Macintosh PICT picture data. @@@ -82,8 -82,8 +82,8 @@@ public final class PICT extends Metafil header.wmfsize = data.length - 512; //we don't have a PICT reader in java, have to set default image size 200x200 header.bounds = new java.awt.Rectangle(0, 0, 200, 200); - header.size = new java.awt.Dimension(header.bounds.width*Shape.EMU_PER_POINT, - header.bounds.height*Shape.EMU_PER_POINT); - header.size = new java.awt.Dimension(header.bounds.width*HSLFShape.EMU_PER_POINT, - header.bounds.height*HSLFShape.EMU_PER_POINT); ++ header.size = new java.awt.Dimension(header.bounds.width*Units.EMU_PER_POINT, ++ header.bounds.height*Units.EMU_PER_POINT); header.zipsize = compressed.length; byte[] checksum = getChecksum(data); diff --cc src/scratchpad/src/org/apache/poi/hslf/blip/WMF.java index 0e8c16078d,e4f3b3914e..a6d52ad8b7 --- a/src/scratchpad/src/org/apache/poi/hslf/blip/WMF.java +++ b/src/scratchpad/src/org/apache/poi/hslf/blip/WMF.java @@@ -17,14 -17,14 +17,18 @@@ package org.apache.poi.hslf.blip; ++import java.io.ByteArrayInputStream; ++import java.io.ByteArrayOutputStream; ++import java.io.IOException; ++import java.io.InputStream; ++import java.io.OutputStream; ++import java.util.zip.InflaterInputStream; ++ ++import org.apache.poi.hslf.exceptions.HSLFException; ++import org.apache.poi.hslf.usermodel.HSLFPictureShape; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.POILogger; - import org.apache.poi.hslf.model.Picture; - import org.apache.poi.hslf.model.Shape; -import org.apache.poi.hslf.usermodel.HSLFPictureShape; -import org.apache.poi.hslf.usermodel.HSLFShape; --import org.apache.poi.hslf.exceptions.HSLFException; -- --import java.io.*; --import java.util.zip.InflaterInputStream; ++import org.apache.poi.util.Units; /** * Represents a WMF (Windows Metafile) picture data. @@@ -78,7 -78,7 +82,7 @@@ public final class WMF extends Metafil header.wmfsize = data.length - aldus.getSize(); header.bounds = new java.awt.Rectangle((short)aldus.left, (short)aldus.top, (short)aldus.right-(short)aldus.left, (short)aldus.bottom-(short)aldus.top); //coefficient to translate from WMF dpi to 96pdi - int coeff = 96*Shape.EMU_PER_POINT/aldus.inch; - int coeff = 96*HSLFShape.EMU_PER_POINT/aldus.inch; ++ int coeff = 96*Units.EMU_PER_POINT/aldus.inch; header.size = new java.awt.Dimension(header.bounds.width*coeff, header.bounds.height*coeff); header.zipsize = compressed.length; diff --cc src/scratchpad/src/org/apache/poi/hslf/model/Polygon.java index 09637a65ee,25f93a4e89..2a26973463 --- a/src/scratchpad/src/org/apache/poi/hslf/model/Polygon.java +++ b/src/scratchpad/src/org/apache/poi/hslf/model/Polygon.java @@@ -18,7 -18,10 +18,11 @@@ package org.apache.poi.hslf.model; import org.apache.poi.ddf.*; + import org.apache.poi.hslf.usermodel.*; + import org.apache.poi.sl.usermodel.ShapeContainer; + import org.apache.poi.sl.usermodel.ShapeType; import org.apache.poi.util.LittleEndian; ++import org.apache.poi.util.Units; import java.awt.geom.Point2D; @@@ -72,8 -75,8 +76,8 @@@ public final class Polygon extends HSLF float top = findSmallest(yPoints); EscherOptRecord opt = getEscherOptRecord(); -- opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__RIGHT, (int)((right - left)*POINT_DPI/MASTER_DPI))); -- opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__BOTTOM, (int)((bottom - top)*POINT_DPI/MASTER_DPI))); ++ opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__RIGHT, Units.pointsToMaster(right - left))); ++ opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__BOTTOM, Units.pointsToMaster(bottom - top))); for (int i = 0; i < xPoints.length; i++) { xPoints[i] += -left; @@@ -89,13 -92,13 +93,13 @@@ for (int i = 0; i < numpoints; i++) { byte[] data = new byte[4]; -- LittleEndian.putShort(data, 0, (short)(xPoints[i]*POINT_DPI/MASTER_DPI)); -- LittleEndian.putShort(data, 2, (short)(yPoints[i]*POINT_DPI/MASTER_DPI)); ++ LittleEndian.putShort(data, 0, (short)Units.pointsToMaster(xPoints[i])); ++ LittleEndian.putShort(data, 2, (short)Units.pointsToMaster(yPoints[i])); verticesProp.setElement(i, data); } byte[] data = new byte[4]; -- LittleEndian.putShort(data, 0, (short)(xPoints[0]*POINT_DPI/MASTER_DPI)); -- LittleEndian.putShort(data, 2, (short)(yPoints[0]*POINT_DPI/MASTER_DPI)); ++ LittleEndian.putShort(data, 0, (short)Units.pointsToMaster(xPoints[0])); ++ LittleEndian.putShort(data, 2, (short)Units.pointsToMaster(yPoints[0])); verticesProp.setElement(numpoints, data); opt.addEscherProperty(verticesProp); diff --cc src/scratchpad/src/org/apache/poi/hslf/record/TxMasterStyleAtom.java index 966c8eb8e3,54e7529d5d..a93069ff50 --- a/src/scratchpad/src/org/apache/poi/hslf/record/TxMasterStyleAtom.java +++ b/src/scratchpad/src/org/apache/poi/hslf/record/TxMasterStyleAtom.java @@@ -52,8 -52,8 +52,8 @@@ public final class TxMasterStyleAtom ex private static long _type = 4003; private byte[] _data; - private TextPropCollection[] prstyles; - private TextPropCollection[] chstyles; + private List paragraphStyles; - private List charStylesyles; ++ private List charStyles; protected TxMasterStyleAtom(byte[] source, int start, int len) { _header = new byte[8]; @@@ -98,8 -98,8 +98,8 @@@ * * @return character styles defined in this record */ - public TextPropCollection[] getCharacterStyles(){ - return chstyles; + public List getCharacterStyles(){ - return charStylesyles; ++ return charStyles; } /** @@@ -137,15 -137,18 +137,18 @@@ short levels = LittleEndian.getShort(_data, 0); pos += LittleEndian.SHORT_SIZE; - prstyles = new TextPropCollection[levels]; - chstyles = new TextPropCollection[levels]; + paragraphStyles = new ArrayList(levels); - charStylesyles = new ArrayList(levels); ++ charStyles = new ArrayList(levels); for(short j = 0; j < levels; j++) { - + TextPropCollection prprops = new TextPropCollection(0, TextPropType.paragraph); // getParagraphProps(type, j) if (type >= TextHeaderAtom.CENTRE_BODY_TYPE) { // Fetch the 2 byte value, that is safe to ignore for some types of text - short val = LittleEndian.getShort(_data, pos); + short indentLevel = LittleEndian.getShort(_data, pos); + prprops.setIndentLevel(indentLevel); pos += LittleEndian.SHORT_SIZE; + } else { + prprops.setIndentLevel((short)-1); } head = LittleEndian.getInt(_data, pos); @@@ -156,9 -159,9 +159,9 @@@ head = LittleEndian.getInt(_data, pos); pos += LittleEndian.INT_SIZE; - TextPropCollection chprops = new TextPropCollection(0); - pos += chprops.buildTextPropList( head, getCharacterProps(type, j), _data, pos); - chstyles[j] = chprops; + TextPropCollection chprops = new TextPropCollection(0, TextPropType.character); // getCharacterProps(type, j) + pos += chprops.buildTextPropList( head, _data, pos); - charStylesyles.add(chprops); ++ charStyles.add(chprops); } } diff --cc src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFreeformShape.java index 0000000000,5128b55307..7a2cd9bdf8 mode 000000,100644..100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFreeformShape.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFreeformShape.java @@@ -1,0 -1,264 +1,254 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.hslf.usermodel; + + import java.awt.geom.AffineTransform; + import java.awt.geom.GeneralPath; + import java.awt.geom.PathIterator; + import java.awt.geom.Point2D; + import java.awt.geom.Rectangle2D; + import java.util.ArrayList; + import java.util.Arrays; + import java.util.List; + + import org.apache.poi.ddf.EscherArrayProperty; + import org.apache.poi.ddf.EscherContainerRecord; + import org.apache.poi.ddf.EscherOptRecord; + import org.apache.poi.ddf.EscherProperties; + import org.apache.poi.ddf.EscherSimpleProperty; ++import org.apache.poi.sl.usermodel.FreeformShape; + import org.apache.poi.sl.usermodel.ShapeContainer; + import org.apache.poi.sl.usermodel.ShapeType; + import org.apache.poi.util.LittleEndian; + import org.apache.poi.util.POILogger; ++import org.apache.poi.util.Units; + + /** + * A "Freeform" shape. + * + *

+ * Shapes drawn with the "Freeform" tool have cubic bezier curve segments in the smooth sections + * and straight-line segments in the straight sections. This object closely corresponds to java.awt.geom.GeneralPath. + *

+ * @author Yegor Kozlov + */ -public final class HSLFFreeformShape extends HSLFAutoShape { ++public final class HSLFFreeformShape extends HSLFAutoShape implements FreeformShape { + + public static final byte[] SEGMENTINFO_MOVETO = new byte[]{0x00, 0x40}; + public static final byte[] SEGMENTINFO_LINETO = new byte[]{0x00, (byte)0xAC}; + public static final byte[] SEGMENTINFO_ESCAPE = new byte[]{0x01, 0x00}; + public static final byte[] SEGMENTINFO_ESCAPE2 = new byte[]{0x01, 0x20}; + public static final byte[] SEGMENTINFO_CUBICTO = new byte[]{0x00, (byte)0xAD}; + public static final byte[] SEGMENTINFO_CUBICTO2 = new byte[]{0x00, (byte)0xB3}; //OpenOffice inserts 0xB3 instead of 0xAD. + public static final byte[] SEGMENTINFO_CLOSE = new byte[]{0x01, (byte)0x60}; + public static final byte[] SEGMENTINFO_END = new byte[]{0x00, (byte)0x80}; + + /** + * Create a Freeform object and initialize it from the supplied Record container. + * + * @param escherRecord EscherSpContainer container which holds information about this shape + * @param parent the parent of the shape + */ + protected HSLFFreeformShape(EscherContainerRecord escherRecord, ShapeContainer parent){ + super(escherRecord, parent); + + } + + /** + * Create a new Freeform. This constructor is used when a new shape is created. + * + * @param parent the parent of this Shape. For example, if this text box is a cell + * in a table then the parent is Table. + */ + public HSLFFreeformShape(ShapeContainer parent){ + super((EscherContainerRecord)null, parent); + _escherContainer = createSpContainer(ShapeType.NOT_PRIMITIVE, parent instanceof HSLFGroupShape); + } + + /** + * Create a new Freeform. This constructor is used when a new shape is created. + * + */ + public HSLFFreeformShape(){ + this(null); + } + - /** - * Set the shape path - * - * @param path - */ - public void setPath(GeneralPath path) - { ++ @Override ++ public int setPath(GeneralPath path) { + Rectangle2D bounds = path.getBounds2D(); + PathIterator it = path.getPathIterator(new AffineTransform()); + + List segInfo = new ArrayList(); + List pntInfo = new ArrayList(); + boolean isClosed = false; ++ int numPoints = 0; + while (!it.isDone()) { + double[] vals = new double[6]; + int type = it.currentSegment(vals); + switch (type) { + case PathIterator.SEG_MOVETO: + pntInfo.add(new Point2D.Double(vals[0], vals[1])); + segInfo.add(SEGMENTINFO_MOVETO); ++ numPoints++; + break; + case PathIterator.SEG_LINETO: + pntInfo.add(new Point2D.Double(vals[0], vals[1])); + segInfo.add(SEGMENTINFO_LINETO); + segInfo.add(SEGMENTINFO_ESCAPE); ++ numPoints++; + break; + case PathIterator.SEG_CUBICTO: + pntInfo.add(new Point2D.Double(vals[0], vals[1])); + pntInfo.add(new Point2D.Double(vals[2], vals[3])); + pntInfo.add(new Point2D.Double(vals[4], vals[5])); + segInfo.add(SEGMENTINFO_CUBICTO); + segInfo.add(SEGMENTINFO_ESCAPE2); ++ numPoints++; + break; + case PathIterator.SEG_QUADTO: + //TODO: figure out how to convert SEG_QUADTO into SEG_CUBICTO + logger.log(POILogger.WARN, "SEG_QUADTO is not supported"); + break; + case PathIterator.SEG_CLOSE: + pntInfo.add(pntInfo.get(0)); + segInfo.add(SEGMENTINFO_LINETO); + segInfo.add(SEGMENTINFO_ESCAPE); + segInfo.add(SEGMENTINFO_LINETO); + segInfo.add(SEGMENTINFO_CLOSE); + isClosed = true; ++ numPoints++; + break; + } + + it.next(); + } + if(!isClosed) segInfo.add(SEGMENTINFO_LINETO); + segInfo.add(new byte[]{0x00, (byte)0x80}); + + EscherOptRecord opt = getEscherOptRecord(); + opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__SHAPEPATH, 0x4)); + + EscherArrayProperty verticesProp = new EscherArrayProperty((short)(EscherProperties.GEOMETRY__VERTICES + 0x4000), false, null); + verticesProp.setNumberOfElementsInArray(pntInfo.size()); + verticesProp.setNumberOfElementsInMemory(pntInfo.size()); + verticesProp.setSizeOfElements(0xFFF0); + for (int i = 0; i < pntInfo.size(); i++) { + Point2D.Double pnt = pntInfo.get(i); + byte[] data = new byte[4]; - LittleEndian.putShort(data, 0, (short)((pnt.getX() - bounds.getX())*MASTER_DPI/POINT_DPI)); - LittleEndian.putShort(data, 2, (short)((pnt.getY() - bounds.getY())*MASTER_DPI/POINT_DPI)); ++ LittleEndian.putShort(data, 0, (short)Units.pointsToMaster(pnt.getX() - bounds.getX())); ++ LittleEndian.putShort(data, 2, (short)Units.pointsToMaster(pnt.getY() - bounds.getY())); + verticesProp.setElement(i, data); + } + opt.addEscherProperty(verticesProp); + + EscherArrayProperty segmentsProp = new EscherArrayProperty((short)(EscherProperties.GEOMETRY__SEGMENTINFO + 0x4000), false, null); + segmentsProp.setNumberOfElementsInArray(segInfo.size()); + segmentsProp.setNumberOfElementsInMemory(segInfo.size()); + segmentsProp.setSizeOfElements(0x2); + for (int i = 0; i < segInfo.size(); i++) { + byte[] seg = segInfo.get(i); + segmentsProp.setElement(i, seg); + } + opt.addEscherProperty(segmentsProp); + - opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__RIGHT, (int)(bounds.getWidth()*MASTER_DPI/POINT_DPI))); - opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__BOTTOM, (int)(bounds.getHeight()*MASTER_DPI/POINT_DPI))); ++ opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__RIGHT, Units.pointsToMaster(bounds.getWidth()))); ++ opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__BOTTOM, Units.pointsToMaster(bounds.getHeight()))); + + opt.sortProperties(); + + setAnchor(bounds); ++ ++ return numPoints; + } + - /** - * Gets the freeform path - * - * @return the freeform path - */ - public GeneralPath getPath(){ ++ @Override ++ public GeneralPath getPath(){ + EscherOptRecord opt = getEscherOptRecord(); + opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__SHAPEPATH, 0x4)); + + EscherArrayProperty verticesProp = getEscherProperty(opt, (short)(EscherProperties.GEOMETRY__VERTICES + 0x4000)); + if(verticesProp == null) verticesProp = getEscherProperty(opt, EscherProperties.GEOMETRY__VERTICES); + + EscherArrayProperty segmentsProp = getEscherProperty(opt, (short)(EscherProperties.GEOMETRY__SEGMENTINFO + 0x4000)); + if(segmentsProp == null) segmentsProp = getEscherProperty(opt, EscherProperties.GEOMETRY__SEGMENTINFO); + ++ // return empty path if either GEOMETRY__VERTICES or GEOMETRY__SEGMENTINFO is missing, see Bugzilla 54188 ++ GeneralPath path = new GeneralPath(); ++ + //sanity check + if(verticesProp == null) { + logger.log(POILogger.WARN, "Freeform is missing GEOMETRY__VERTICES "); - return null; ++ return path; + } + if(segmentsProp == null) { + logger.log(POILogger.WARN, "Freeform is missing GEOMETRY__SEGMENTINFO "); - return null; ++ return path; + } + - GeneralPath path = new GeneralPath(); + int numPoints = verticesProp.getNumberOfElementsInArray(); + int numSegments = segmentsProp.getNumberOfElementsInArray(); + for (int i = 0, j = 0; i < numSegments && j < numPoints; i++) { + byte[] elem = segmentsProp.getElement(i); + if(Arrays.equals(elem, SEGMENTINFO_MOVETO)){ + byte[] p = verticesProp.getElement(j++); + short x = LittleEndian.getShort(p, 0); + short y = LittleEndian.getShort(p, 2); - path.moveTo( - ((float)x*POINT_DPI/MASTER_DPI), - ((float)y*POINT_DPI/MASTER_DPI)); ++ path.moveTo(Units.masterToPoints(x), Units.masterToPoints(y)); + } else if (Arrays.equals(elem, SEGMENTINFO_CUBICTO) || Arrays.equals(elem, SEGMENTINFO_CUBICTO2)){ + i++; + byte[] p1 = verticesProp.getElement(j++); + short x1 = LittleEndian.getShort(p1, 0); + short y1 = LittleEndian.getShort(p1, 2); + byte[] p2 = verticesProp.getElement(j++); + short x2 = LittleEndian.getShort(p2, 0); + short y2 = LittleEndian.getShort(p2, 2); + byte[] p3 = verticesProp.getElement(j++); + short x3 = LittleEndian.getShort(p3, 0); + short y3 = LittleEndian.getShort(p3, 2); + path.curveTo( - ((float)x1*POINT_DPI/MASTER_DPI), ((float)y1*POINT_DPI/MASTER_DPI), - ((float)x2*POINT_DPI/MASTER_DPI), ((float)y2*POINT_DPI/MASTER_DPI), - ((float)x3*POINT_DPI/MASTER_DPI), ((float)y3*POINT_DPI/MASTER_DPI)); ++ Units.masterToPoints(x1), Units.masterToPoints(y1), ++ Units.masterToPoints(x2), Units.masterToPoints(y2), ++ Units.masterToPoints(x3), Units.masterToPoints(y3)); + + } else if (Arrays.equals(elem, SEGMENTINFO_LINETO)){ + i++; + byte[] pnext = segmentsProp.getElement(i); + if(Arrays.equals(pnext, SEGMENTINFO_ESCAPE)){ + if(j + 1 < numPoints){ + byte[] p = verticesProp.getElement(j++); + short x = LittleEndian.getShort(p, 0); + short y = LittleEndian.getShort(p, 2); - path.lineTo( - ((float)x*POINT_DPI/MASTER_DPI), ((float)y*POINT_DPI/MASTER_DPI)); ++ path.lineTo(Units.masterToPoints(x), Units.masterToPoints(y)); + } + } else if (Arrays.equals(pnext, SEGMENTINFO_CLOSE)){ + path.closePath(); + } + } + } - return path; - } - - public java.awt.Shape getOutline(){ - GeneralPath path = getPath(); - if(path == null) { - // return empty path if either GEOMETRY__VERTICES or GEOMETRY__SEGMENTINFO is missing, see Bugzilla 54188 - return new GeneralPath(); - } - ++ + Rectangle2D anchor = getAnchor2D(); + Rectangle2D bounds = path.getBounds2D(); + AffineTransform at = new AffineTransform(); + at.translate(anchor.getX(), anchor.getY()); + at.scale( + anchor.getWidth()/bounds.getWidth(), + anchor.getHeight()/bounds.getHeight() + ); - return at.createTransformedShape(path); ++ return new GeneralPath(at.createTransformedShape(path)); + } + } diff --cc src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFGroupShape.java index 0000000000,5133ff1229..ae343f22c1 mode 000000,100644..100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFGroupShape.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFGroupShape.java @@@ -1,0 -1,275 +1,280 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.hslf.usermodel; + + import java.awt.geom.Rectangle2D; + import java.util.*; + + import org.apache.poi.ddf.*; + import org.apache.poi.sl.usermodel.*; + import org.apache.poi.util.LittleEndian; + import org.apache.poi.util.POILogger; ++import org.apache.poi.util.Units; + + /** + * Represents a group of shapes. + * + * @author Yegor Kozlov + */ + public class HSLFGroupShape extends HSLFShape implements GroupShape { + + /** + * Create a new ShapeGroup. This constructor is used when a new shape is created. + * + */ + public HSLFGroupShape(){ + this(null, null); + _escherContainer = createSpContainer(false); + } + + /** + * Create a ShapeGroup object and initilize it from the supplied Record container. + * + * @param escherRecord EscherSpContainer container which holds information about this shape + * @param parent the parent of the shape + */ + protected HSLFGroupShape(EscherContainerRecord escherRecord, ShapeContainer parent){ + super(escherRecord, parent); + } + + @Override + public List getShapes() { + return getShapeList(); + } + + /** + * Sets the anchor (the bounding box rectangle) of this shape. + * All coordinates should be expressed in Master units (576 dpi). + * + * @param anchor new anchor + */ + public void setAnchor(java.awt.Rectangle anchor){ + + EscherClientAnchorRecord clientAnchor = getEscherChild(EscherClientAnchorRecord.RECORD_ID); + //hack. internal variable EscherClientAnchorRecord.shortRecord can be + //initialized only in fillFields(). We need to set shortRecord=false; + byte[] header = new byte[16]; + LittleEndian.putUShort(header, 0, 0); + LittleEndian.putUShort(header, 2, 0); + LittleEndian.putInt(header, 4, 8); + clientAnchor.fillFields(header, 0, null); + - clientAnchor.setFlag((short)(anchor.y*MASTER_DPI/POINT_DPI)); - clientAnchor.setCol1((short)(anchor.x*MASTER_DPI/POINT_DPI)); - clientAnchor.setDx1((short)((anchor.width + anchor.x)*MASTER_DPI/POINT_DPI)); - clientAnchor.setRow1((short)((anchor.height + anchor.y)*MASTER_DPI/POINT_DPI)); ++ clientAnchor.setFlag((short)Units.pointsToMaster(anchor.y)); ++ clientAnchor.setCol1((short)Units.pointsToMaster(anchor.x)); ++ clientAnchor.setDx1((short)Units.pointsToMaster(anchor.width + anchor.x)); ++ clientAnchor.setRow1((short)Units.pointsToMaster(anchor.height + anchor.y)); + + EscherSpgrRecord spgr = getEscherChild(EscherSpgrRecord.RECORD_ID); + - spgr.setRectX1(anchor.x*MASTER_DPI/POINT_DPI); - spgr.setRectY1(anchor.y*MASTER_DPI/POINT_DPI); - spgr.setRectX2((anchor.x + anchor.width)*MASTER_DPI/POINT_DPI); - spgr.setRectY2((anchor.y + anchor.height)*MASTER_DPI/POINT_DPI); ++ spgr.setRectX1(Units.pointsToMaster(anchor.x)); ++ spgr.setRectY1(Units.pointsToMaster(anchor.y)); ++ spgr.setRectX2(Units.pointsToMaster(anchor.x + anchor.width)); ++ spgr.setRectY2(Units.pointsToMaster(anchor.y + anchor.height)); + } + + @Override + public void setInteriorAnchor(Rectangle2D anchor){ + EscherSpgrRecord spgr = getEscherChild(EscherSpgrRecord.RECORD_ID); + - int x1 = (int)Math.round(anchor.getX()*MASTER_DPI/POINT_DPI); - int y1 = (int)Math.round(anchor.getY()*MASTER_DPI/POINT_DPI); - int x2 = (int)Math.round((anchor.getX() + anchor.getWidth())*MASTER_DPI/POINT_DPI); - int y2 = (int)Math.round((anchor.getY() + anchor.getHeight())*MASTER_DPI/POINT_DPI); ++ int x1 = Units.pointsToMaster(anchor.getX()); ++ int y1 = Units.pointsToMaster(anchor.getY()); ++ int x2 = Units.pointsToMaster(anchor.getX() + anchor.getWidth()); ++ int y2 = Units.pointsToMaster(anchor.getY() + anchor.getHeight()); + + spgr.setRectX1(x1); + spgr.setRectY1(y1); + spgr.setRectX2(x2); + spgr.setRectY2(y2); + + } + + @Override + public Rectangle2D getInteriorAnchor(){ + EscherSpgrRecord rec = getEscherChild(EscherSpgrRecord.RECORD_ID); - double x = rec.getRectX1()*POINT_DPI/MASTER_DPI; - double y = rec.getRectY1()*POINT_DPI/MASTER_DPI; - double width = (rec.getRectX2()-rec.getRectX1())*POINT_DPI/MASTER_DPI; - double height = (rec.getRectY2()-rec.getRectY1())*POINT_DPI/MASTER_DPI; - return new Rectangle2D.Double(x,y,width,height); ++ double x1 = Units.masterToPoints(rec.getRectX1()); ++ double y1 = Units.masterToPoints(rec.getRectY1()); ++ double x2 = Units.masterToPoints(rec.getRectX2()); ++ double y2 = Units.masterToPoints(rec.getRectY2()); ++ return new Rectangle2D.Double(x1,y1,x2-x1,y2-y1); + } + + /** + * Create a new ShapeGroup and create an instance of EscherSpgrContainer which represents a group of shapes + */ + protected EscherContainerRecord createSpContainer(boolean isChild) { + EscherContainerRecord spgr = new EscherContainerRecord(); + spgr.setRecordId(EscherContainerRecord.SPGR_CONTAINER); + spgr.setOptions((short)15); + + //The group itself is a shape, and always appears as the first EscherSpContainer in the group container. + EscherContainerRecord spcont = new EscherContainerRecord(); + spcont.setRecordId(EscherContainerRecord.SP_CONTAINER); + spcont.setOptions((short)15); + + EscherSpgrRecord spg = new EscherSpgrRecord(); + spg.setOptions((short)1); + spcont.addChildRecord(spg); + + EscherSpRecord sp = new EscherSpRecord(); + short type = (short)((ShapeType.NOT_PRIMITIVE.nativeId << 4) + 2); + sp.setOptions(type); + sp.setFlags(EscherSpRecord.FLAG_HAVEANCHOR | EscherSpRecord.FLAG_GROUP); + spcont.addChildRecord(sp); + + EscherClientAnchorRecord anchor = new EscherClientAnchorRecord(); + spcont.addChildRecord(anchor); + + spgr.addChildRecord(spcont); + return spgr; + } + + /** + * Add a shape to this group. + * + * @param shape - the Shape to add + */ + public void addShape(HSLFShape shape){ + _escherContainer.addChildRecord(shape.getSpContainer()); + + HSLFSheet sheet = getSheet(); + shape.setSheet(sheet); + shape.setShapeId(sheet.allocateShapeId()); + shape.afterInsert(sheet); + } + + /** + * Moves this ShapeGroup to the specified location. + *

+ * @param x the x coordinate of the top left corner of the shape in new location + * @param y the y coordinate of the top left corner of the shape in new location + */ + public void moveTo(int x, int y){ + java.awt.Rectangle anchor = getAnchor(); + int dx = x - anchor.x; + int dy = y - anchor.y; + anchor.translate(dx, dy); + setAnchor(anchor); + + + for (HSLFShape shape : getShapes()) { + java.awt.Rectangle chanchor = shape.getAnchor(); + chanchor.translate(dx, dy); + shape.setAnchor(chanchor); + } + } + + /** + * Returns the anchor (the bounding box rectangle) of this shape group. + * All coordinates are expressed in points (72 dpi). + * + * @return the anchor of this shape group + */ + public Rectangle2D getAnchor2D(){ + EscherClientAnchorRecord clientAnchor = getEscherChild(EscherClientAnchorRecord.RECORD_ID); - Rectangle2D anchor; ++ int x1,y1,x2,y2; + if(clientAnchor == null){ + logger.log(POILogger.INFO, "EscherClientAnchorRecord was not found for shape group. Searching for EscherChildAnchorRecord."); + EscherChildAnchorRecord rec = getEscherChild(EscherChildAnchorRecord.RECORD_ID); - double x = rec.getDx1()*POINT_DPI/MASTER_DPI; - double y = rec.getDy1()*POINT_DPI/MASTER_DPI; - double width = (rec.getDx2()-rec.getDx1())*POINT_DPI/MASTER_DPI; - double height = (rec.getDy2()-rec.getDy1())*POINT_DPI/MASTER_DPI; - anchor = new Rectangle2D.Double(x,y,width,height); ++ x1 = rec.getDx1(); ++ y1 = rec.getDy1(); ++ x2 = rec.getDx2(); ++ y2 = rec.getDy2(); + } else { - double x = clientAnchor.getCol1()*POINT_DPI/MASTER_DPI; - double y = clientAnchor.getFlag()*POINT_DPI/MASTER_DPI; - double width = (clientAnchor.getDx1() - clientAnchor.getCol1())*POINT_DPI/MASTER_DPI ; - double height = (clientAnchor.getRow1() - clientAnchor.getFlag())*POINT_DPI/MASTER_DPI; - anchor = new Rectangle2D.Double(x,y,width,height); ++ x1 = clientAnchor.getCol1(); ++ y1 = clientAnchor.getFlag(); ++ x2 = clientAnchor.getDx1(); ++ y2 = clientAnchor.getRow1(); + } ++ Rectangle2D anchor= new Rectangle2D.Double( ++ (x1 == -1 ? -1 : Units.masterToPoints(x1)), ++ (y1 == -1 ? -1 : Units.masterToPoints(y1)), ++ (x2 == -1 ? -1 : Units.masterToPoints(x2-x1)), ++ (y2 == -1 ? -1 : Units.masterToPoints(y2-y1)) ++ ); + + return anchor; + } + + /** + * Return type of the shape. + * In most cases shape group type is {@link org.apache.poi.hslf.model.ShapeTypes#NotPrimitive} + * + * @return type of the shape. + */ + public ShapeType getShapeType(){ + EscherSpRecord spRecord = getEscherChild(EscherSpRecord.RECORD_ID); + int nativeId = spRecord.getOptions() >> 4; + return ShapeType.forId(nativeId, false); + } + + /** + * Returns null - shape groups can't have hyperlinks + * + * @return null. + */ + public HSLFHyperlink getHyperlink(){ + return null; + } + + @Override + public T getEscherChild(int recordId){ + EscherContainerRecord groupInfoContainer = (EscherContainerRecord)_escherContainer.getChild(0); + return groupInfoContainer.getChildById((short)recordId); + } + + public Iterator iterator() { + return getShapeList().iterator(); + } + + public boolean removeShape(HSLFShape shape) { + // TODO: implement! + throw new UnsupportedOperationException(); + } + + /** + * @return the shapes contained in this group container + */ + protected List getShapeList() { + // Out escher container record should contain several + // SpContainers, the first of which is the group shape itself + Iterator iter = _escherContainer.getChildIterator(); + + // Don't include the first SpContainer, it is always NotPrimitive + if (iter.hasNext()) { + iter.next(); + } + List shapeList = new ArrayList(); + while (iter.hasNext()) { + EscherRecord r = iter.next(); + if(r instanceof EscherContainerRecord) { + // Create the Shape for it + EscherContainerRecord container = (EscherContainerRecord)r; + HSLFShape shape = HSLFShapeFactory.createShape(container, this); + shape.setSheet(getSheet()); + shapeList.add( shape ); + } else { + // Should we do anything special with these non + // Container records? + logger.log(POILogger.ERROR, "Shape contained non container escher record, was " + r.getClass().getName()); + } + } + + return shapeList; + } + + } diff --cc src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFPictureShape.java index 0000000000,03a9861ae6..5db610af00 mode 000000,100644..100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFPictureShape.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFPictureShape.java @@@ -1,0 -1,272 +1,284 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.hslf.usermodel; + + import java.awt.Insets; ++import java.awt.geom.Rectangle2D; + import java.awt.image.BufferedImage; + import java.io.ByteArrayInputStream; + import java.io.IOException; + import java.util.List; + + import javax.imageio.ImageIO; + -import org.apache.poi.ddf.*; ++import org.apache.poi.ddf.EscherBSERecord; ++import org.apache.poi.ddf.EscherComplexProperty; ++import org.apache.poi.ddf.EscherContainerRecord; ++import org.apache.poi.ddf.EscherOptRecord; ++import org.apache.poi.ddf.EscherProperties; ++import org.apache.poi.ddf.EscherRecord; ++import org.apache.poi.ddf.EscherSimpleProperty; ++import org.apache.poi.ddf.EscherSpRecord; + import org.apache.poi.hslf.blip.Bitmap; + import org.apache.poi.hslf.record.Document; -import org.apache.poi.sl.usermodel.*; -import org.apache.poi.util.*; ++import org.apache.poi.sl.usermodel.PictureShape; ++import org.apache.poi.sl.usermodel.ShapeContainer; ++import org.apache.poi.sl.usermodel.ShapeType; ++import org.apache.poi.util.POILogger; ++import org.apache.poi.util.StringUtil; ++import org.apache.poi.util.Units; + + + /** + * Represents a picture in a PowerPoint document. + * + * @author Yegor Kozlov + */ + public class HSLFPictureShape extends HSLFSimpleShape implements PictureShape { + + /** + * Windows Enhanced Metafile (EMF) + */ + public static final int EMF = 2; + + /** + * Windows Metafile (WMF) + */ + public static final int WMF = 3; + + /** + * Macintosh PICT + */ + public static final int PICT = 4; + + /** + * JPEG + */ + public static final int JPEG = 5; + + /** + * PNG + */ + public static final int PNG = 6; + + /** + * Windows DIB (BMP) + */ + public static final byte DIB = 7; + + /** + * Create a new Picture + * + * @param idx the index of the picture + */ + public HSLFPictureShape(int idx){ + this(idx, null); + } + + /** + * Create a new Picture + * + * @param idx the index of the picture + * @param parent the parent shape + */ + public HSLFPictureShape(int idx, ShapeContainer parent) { + super(null, parent); + _escherContainer = createSpContainer(idx, parent instanceof HSLFGroupShape); + } + + /** + * Create a Picture object + * + * @param escherRecord the EscherSpContainer record which holds information about + * this picture in the Slide + * @param parent the parent shape of this picture + */ + protected HSLFPictureShape(EscherContainerRecord escherRecord, ShapeContainer parent){ + super(escherRecord, parent); + } + + /** + * Returns index associated with this picture. + * Index starts with 1 and points to a EscherBSE record which + * holds information about this picture. + * + * @return the index to this picture (1 based). + */ + public int getPictureIndex(){ + EscherOptRecord opt = getEscherOptRecord(); + EscherSimpleProperty prop = getEscherProperty(opt, EscherProperties.BLIP__BLIPTODISPLAY); + return prop == null ? 0 : prop.getPropertyValue(); + } + + /** + * Create a new Picture and populate the inital structure of the EscherSp record which holds information about this picture. + + * @param idx the index of the picture which refers to EscherBSE container. + * @return the create Picture object + */ + protected EscherContainerRecord createSpContainer(int idx, boolean isChild) { + _escherContainer = super.createSpContainer(isChild); + _escherContainer.setOptions((short)15); + + EscherSpRecord spRecord = _escherContainer.getChildById(EscherSpRecord.RECORD_ID); + spRecord.setOptions((short)((ShapeType.FRAME.nativeId << 4) | 0x2)); + + //set default properties for a picture + EscherOptRecord opt = getEscherOptRecord(); + setEscherProperty(opt, EscherProperties.PROTECTION__LOCKAGAINSTGROUPING, 0x800080); + + //another weird feature of powerpoint: for picture id we must add 0x4000. + setEscherProperty(opt, (short)(EscherProperties.BLIP__BLIPTODISPLAY + 0x4000), idx); + + return _escherContainer; + } + + /** + * Resize this picture to the default size. + * For PNG and JPEG resizes the image to 100%, + * for other types sets the default size of 200x200 pixels. + */ + public void setDefaultSize(){ + HSLFPictureData pict = getPictureData(); + if (pict instanceof Bitmap){ + BufferedImage img = null; + try { + img = ImageIO.read(new ByteArrayInputStream(pict.getData())); + } + catch (IOException e){} + catch (NegativeArraySizeException ne) {} + + if(img != null) { + // Valid image, set anchor from it - setAnchor(new java.awt.Rectangle(0, 0, img.getWidth()*POINT_DPI/PIXEL_DPI, img.getHeight()*POINT_DPI/PIXEL_DPI)); ++ setAnchor(new Rectangle2D.Double(0, 0, Units.pixelToPoints(img.getWidth()), Units.pixelToPoints(img.getHeight()))); + } else { + // Invalid image, go with the default metafile size - setAnchor(new java.awt.Rectangle(0, 0, 200, 200)); ++ setAnchor(new Rectangle2D.Double(0, 0, 200, 200)); + } + } else { + //default size of a metafile picture is 200x200 - setAnchor(new java.awt.Rectangle(50, 50, 200, 200)); ++ setAnchor(new Rectangle2D.Double(50, 50, 200, 200)); + } + } + + @Override + public HSLFPictureData getPictureData(){ + HSLFSlideShow ppt = getSheet().getSlideShow(); + HSLFPictureData[] pict = ppt.getPictureData(); + + EscherBSERecord bse = getEscherBSERecord(); + if (bse == null){ + logger.log(POILogger.ERROR, "no reference to picture data found "); + } else { + for ( int i = 0; i < pict.length; i++ ) { + if (pict[i].getOffset() == bse.getOffset()){ + return pict[i]; + } + } + logger.log(POILogger.ERROR, "no picture found for our BSE offset " + bse.getOffset()); + } + return null; + } + + protected EscherBSERecord getEscherBSERecord(){ + HSLFSlideShow ppt = getSheet().getSlideShow(); + Document doc = ppt.getDocumentRecord(); + EscherContainerRecord dggContainer = doc.getPPDrawingGroup().getDggContainer(); + EscherContainerRecord bstore = HSLFShape.getEscherChild(dggContainer, EscherContainerRecord.BSTORE_CONTAINER); + if(bstore == null) { + logger.log(POILogger.DEBUG, "EscherContainerRecord.BSTORE_CONTAINER was not found "); + return null; + } + List lst = bstore.getChildRecords(); + int idx = getPictureIndex(); + if (idx == 0){ + logger.log(POILogger.DEBUG, "picture index was not found, returning "); + return null; + } + return (EscherBSERecord)lst.get(idx-1); + } + + /** + * Name of this picture. + * + * @return name of this picture + */ + public String getPictureName(){ + EscherOptRecord opt = getEscherOptRecord(); + EscherComplexProperty prop = getEscherProperty(opt, EscherProperties.BLIP__BLIPFILENAME); + if (prop == null) return null; + String name = StringUtil.getFromUnicodeLE(prop.getComplexData()); + return name.trim(); + } + + /** + * Name of this picture. + * + * @param name of this picture + */ + public void setPictureName(String name){ + EscherOptRecord opt = getEscherOptRecord(); + byte[] data = StringUtil.getToUnicodeLE(name + '\u0000'); + EscherComplexProperty prop = new EscherComplexProperty(EscherProperties.BLIP__BLIPFILENAME, false, data); + opt.addEscherProperty(prop); + } + + /** + * By default set the orininal image size + */ + protected void afterInsert(HSLFSheet sh){ + super.afterInsert(sh); + + EscherBSERecord bse = getEscherBSERecord(); + bse.setRef(bse.getRef() + 1); + + java.awt.Rectangle anchor = getAnchor(); + if (anchor.equals(new java.awt.Rectangle())){ + setDefaultSize(); + } + } + + /** + * The anchor specified by {@link #getLogicalAnchor2D()} is the displayed size, + * i.e. the size of the already clipped image + */ + @Override + public Insets getClipping() { + EscherOptRecord opt = getEscherOptRecord(); + + double top = getFractProp(opt, EscherProperties.BLIP__CROPFROMTOP); + double bottom = getFractProp(opt, EscherProperties.BLIP__CROPFROMBOTTOM); + double left = getFractProp(opt, EscherProperties.BLIP__CROPFROMLEFT); + double right = getFractProp(opt, EscherProperties.BLIP__CROPFROMRIGHT); + + // if all crop values are zero (the default) then no crop rectangle is set, return null + return (top==0 && bottom==0 && left==0 && right==0) + ? null + : new Insets((int)(top*100000), (int)(left*100000), (int)(bottom*100000), (int)(right*100000)); + } + + /** + * @return the fractional property or 0 if not defined + */ + private static double getFractProp(EscherOptRecord opt, short propertyId) { + EscherSimpleProperty prop = getEscherProperty(opt, propertyId); + if (prop == null) return 0; + int fixedPoint = prop.getPropertyValue(); + return Units.fixedPointToDouble(fixedPoint); + } + } diff --cc src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFShape.java index 0000000000,2ecb7efe91..635402319c mode 000000,100644..100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFShape.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFShape.java @@@ -1,0 -1,515 +1,490 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.hslf.usermodel; + + import java.awt.Color; + import java.awt.Graphics2D; + import java.awt.geom.Rectangle2D; + import java.util.Iterator; + + import org.apache.poi.ddf.*; + import org.apache.poi.hslf.record.ColorSchemeAtom; + import org.apache.poi.hslf.record.RecordTypes; + import org.apache.poi.sl.usermodel.*; + import org.apache.poi.util.*; + + /** + *

+ * Represents a Shape which is the elemental object that composes a drawing. + * This class is a wrapper around EscherSpContainer which holds all information + * about a shape in PowerPoint document. + *

+ *

+ * When you add a shape, you usually specify the dimensions of the shape and the position + * of the upper'left corner of the bounding box for the shape relative to the upper'left + * corner of the page, worksheet, or slide. Distances in the drawing layer are measured + * in points (72 points = 1 inch). + *

+ *

+ * + * @author Yegor Kozlov + */ + public abstract class HSLFShape implements Shape { + + // For logging + protected POILogger logger = POILogFactory.getLogger(this.getClass()); + - /** - * In Escher absolute distances are specified in - * English Metric Units (EMUs), occasionally referred to as A units; - * there are 360000 EMUs per centimeter, 914400 EMUs per inch, 12700 EMUs per point. - */ - public static final int EMU_PER_INCH = 914400; - public static final int EMU_PER_POINT = 12700; - public static final int EMU_PER_CENTIMETER = 360000; - - /** - * Master DPI (576 pixels per inch). - * Used by the reference coordinate system in PowerPoint. - */ - public static final int MASTER_DPI = 576; - - /** - * Pixels DPI (96 pixels per inch) - */ - public static final int PIXEL_DPI = 96; - - /** - * Points DPI (72 pixels per inch) - */ - public static final int POINT_DPI = 72; - + /** + * Either EscherSpContainer or EscheSpgrContainer record + * which holds information about this shape. + */ + protected EscherContainerRecord _escherContainer; + + /** + * Parent of this shape. + * null for the topmost shapes. + */ + protected ShapeContainer _parent; + + /** + * The Sheet this shape belongs to + */ + protected HSLFSheet _sheet; + + /** + * Fill + */ + protected HSLFFill _fill; + + /** + * Create a Shape object. This constructor is used when an existing Shape is read from from a PowerPoint document. + * + * @param escherRecord EscherSpContainer container which holds information about this shape + * @param parent the parent of this Shape + */ + protected HSLFShape(EscherContainerRecord escherRecord, ShapeContainer parent){ + _escherContainer = escherRecord; + _parent = parent; + } + + /** + * Creates the lowerlevel escher records for this shape. + */ + protected abstract EscherContainerRecord createSpContainer(boolean isChild); + + /** + * @return the parent of this shape + */ + public ShapeContainer getParent(){ + return _parent; + } + + /** + * @return name of the shape. + */ + public String getShapeName(){ + return getShapeType().nativeName; + } + + /** + * @return type of the shape. + * @see org.apache.poi.hslf.record.RecordTypes + */ + public ShapeType getShapeType(){ + EscherSpRecord spRecord = getEscherChild(EscherSpRecord.RECORD_ID); + return ShapeType.forId(spRecord.getShapeType(), false); + } + + /** + * @param type type of the shape. + * @see org.apache.poi.hslf.record.RecordTypes + */ + public void setShapeType(ShapeType type){ + EscherSpRecord spRecord = getEscherChild(EscherSpRecord.RECORD_ID); + spRecord.setShapeType( (short) type.nativeId ); + spRecord.setVersion( (short) 0x2 ); + } + + /** + * Returns the anchor (the bounding box rectangle) of this shape. + * All coordinates are expressed in points (72 dpi). + * + * @return the anchor of this shape + */ + public java.awt.Rectangle getAnchor(){ + Rectangle2D anchor2d = getAnchor2D(); + return anchor2d.getBounds(); + } + + /** + * Returns the anchor (the bounding box rectangle) of this shape. + * All coordinates are expressed in points (72 dpi). + * + * @return the anchor of this shape + */ + public Rectangle2D getAnchor2D(){ + EscherSpRecord spRecord = getEscherChild(EscherSpRecord.RECORD_ID); + int flags = spRecord.getFlags(); - int x,y,w,h; ++ int x1,y1,x2,y2; + EscherChildAnchorRecord childRec = getEscherChild(EscherChildAnchorRecord.RECORD_ID); + boolean useChildRec = ((flags & EscherSpRecord.FLAG_CHILD) != 0); + if (useChildRec && childRec != null){ - x = childRec.getDx1(); - y = childRec.getDy1(); - w = childRec.getDx2()-childRec.getDx1(); - h = childRec.getDy2()-childRec.getDy1(); ++ x1 = childRec.getDx1(); ++ y1 = childRec.getDy1(); ++ x2 = childRec.getDx2(); ++ y2 = childRec.getDy2(); + } else { + if (useChildRec) { + logger.log(POILogger.WARN, "EscherSpRecord.FLAG_CHILD is set but EscherChildAnchorRecord was not found"); + } + EscherClientAnchorRecord clientRec = getEscherChild(EscherClientAnchorRecord.RECORD_ID); - x = clientRec.getFlag(); - y = clientRec.getCol1(); - w = clientRec.getDx1()-clientRec.getFlag(); - h = clientRec.getRow1()-clientRec.getCol1(); ++ x1 = clientRec.getCol1(); ++ y1 = clientRec.getFlag(); ++ x2 = clientRec.getDx1(); ++ y2 = clientRec.getRow1(); + } + + // TODO: find out where this -1 value comes from at #57820 (link to ms docs?) - Rectangle2D anchor = new Rectangle2D.Float( - (float)(x == -1 ? -1 : Units.masterToPoints(x)), - (float)(y == -1 ? -1 : Units.masterToPoints(y)), - (float)(w == -1 ? -1 : Units.masterToPoints(w)), - (float)(h == -1 ? -1 : Units.masterToPoints(h)) ++ Rectangle2D anchor = new Rectangle2D.Double( ++ (x1 == -1 ? -1 : Units.masterToPoints(x1)), ++ (y1 == -1 ? -1 : Units.masterToPoints(y1)), ++ (x2 == -1 ? -1 : Units.masterToPoints(x2-x1)), ++ (y2 == -1 ? -1 : Units.masterToPoints(y2-y1)) + ); + + return anchor; + } + + /** + * Sets the anchor (the bounding box rectangle) of this shape. + * All coordinates should be expressed in points (72 dpi). + * + * @param anchor new anchor + */ + public void setAnchor(Rectangle2D anchor){ + int x = Units.pointsToMaster(anchor.getX()); + int y = Units.pointsToMaster(anchor.getY()); + int w = Units.pointsToMaster(anchor.getWidth() + anchor.getX()); + int h = Units.pointsToMaster(anchor.getHeight() + anchor.getY()); + EscherSpRecord spRecord = getEscherChild(EscherSpRecord.RECORD_ID); + int flags = spRecord.getFlags(); + if ((flags & EscherSpRecord.FLAG_CHILD) != 0){ + EscherChildAnchorRecord rec = (EscherChildAnchorRecord)getEscherChild(EscherChildAnchorRecord.RECORD_ID); + rec.setDx1(x); + rec.setDy1(y); + rec.setDx2(w); + rec.setDy2(h); + } else { + EscherClientAnchorRecord rec = (EscherClientAnchorRecord)getEscherChild(EscherClientAnchorRecord.RECORD_ID); - rec.setFlag((short)x); - rec.setCol1((short)y); ++ rec.setCol1((short)x); ++ rec.setFlag((short)y); + rec.setDx1((short)w); + rec.setRow1((short)h); + } + + } + + /** + * Moves the top left corner of the shape to the specified point. + * + * @param x the x coordinate of the top left corner of the shape + * @param y the y coordinate of the top left corner of the shape + */ + public void moveTo(float x, float y){ + Rectangle2D anchor = getAnchor2D(); + anchor.setRect(x, y, anchor.getWidth(), anchor.getHeight()); + setAnchor(anchor); + } + + /** + * Helper method to return escher child by record ID + * + * @return escher record or null if not found. + */ + public static T getEscherChild(EscherContainerRecord owner, int recordId){ + return owner.getChildById((short)recordId); + } + + public T getEscherChild(int recordId){ + return _escherContainer.getChildById((short)recordId); + } + + /** + * Returns escher property by id. + * + * @return escher property or null if not found. + */ + public static T getEscherProperty(EscherOptRecord opt, int propId){ + if (opt == null) return null; + return opt.lookup(propId); + } + + /** + * Set an escher property for this shape. + * + * @param opt The opt record to set the properties to. + * @param propId The id of the property. One of the constants defined in EscherOptRecord. + * @param value value of the property. If value = -1 then the property is removed. + */ + public static void setEscherProperty(EscherOptRecord opt, short propId, int value){ + java.util.List props = opt.getEscherProperties(); + for ( Iterator iterator = props.iterator(); iterator.hasNext(); ) { + if (iterator.next().getPropertyNumber() == propId){ + iterator.remove(); + break; + } + } + if (value != -1) { + opt.addEscherProperty(new EscherSimpleProperty(propId, value)); + opt.sortProperties(); + } + } + + /** + * Set an simple escher property for this shape. + * + * @param propId The id of the property. One of the constants defined in EscherOptRecord. + * @param value value of the property. If value = -1 then the property is removed. + */ + public void setEscherProperty(short propId, int value){ + EscherOptRecord opt = getEscherOptRecord(); + setEscherProperty(opt, propId, value); + } + + /** + * Get the value of a simple escher property for this shape. + * + * @param propId The id of the property. One of the constants defined in EscherOptRecord. + */ + public int getEscherProperty(short propId){ + EscherOptRecord opt = getEscherOptRecord(); + EscherSimpleProperty prop = getEscherProperty(opt, propId); + return prop == null ? 0 : prop.getPropertyValue(); + } + + /** + * Get the value of a simple escher property for this shape. + * + * @param propId The id of the property. One of the constants defined in EscherOptRecord. + */ + public int getEscherProperty(short propId, int defaultValue){ + EscherOptRecord opt = getEscherOptRecord(); + EscherSimpleProperty prop = getEscherProperty(opt, propId); + return prop == null ? defaultValue : prop.getPropertyValue(); + } + + /** + * @return The shape container and it's children that can represent this + * shape. + */ + public EscherContainerRecord getSpContainer(){ + return _escherContainer; + } + + /** + * Event which fires when a shape is inserted in the sheet. + * In some cases we need to propagate changes to upper level containers. + *
+ * Default implementation does nothing. + * + * @param sh - owning shape + */ + protected void afterInsert(HSLFSheet sh){ + if(_fill != null) { + _fill.afterInsert(sh); + } + } + + /** + * @return the SlideShow this shape belongs to + */ + public HSLFSheet getSheet(){ + return _sheet; + } + + /** + * Assign the SlideShow this shape belongs to + * + * @param sheet owner of this shape + */ + public void setSheet(HSLFSheet sheet){ + _sheet = sheet; + } + + Color getColor(short colorProperty, short opacityProperty, int defaultColor){ + EscherOptRecord opt = getEscherOptRecord(); + EscherSimpleProperty p = getEscherProperty(opt, colorProperty); + if(p == null && defaultColor == -1) return null; + + int val = (p == null) ? defaultColor : p.getPropertyValue(); + + EscherColorRef ecr = new EscherColorRef(val); + + boolean fPaletteIndex = ecr.hasPaletteIndexFlag(); + boolean fPaletteRGB = ecr.hasPaletteRGBFlag(); + boolean fSystemRGB = ecr.hasSystemRGBFlag(); + boolean fSchemeIndex = ecr.hasSchemeIndexFlag(); + boolean fSysIndex = ecr.hasSysIndexFlag(); + + int rgb[] = ecr.getRGB(); + + HSLFSheet sheet = getSheet(); + if (fSchemeIndex && sheet != null) { + //red is the index to the color scheme + ColorSchemeAtom ca = sheet.getColorScheme(); + int schemeColor = ca.getColor(ecr.getSchemeIndex()); + + rgb[0] = (schemeColor >> 0) & 0xFF; + rgb[1] = (schemeColor >> 8) & 0xFF; + rgb[2] = (schemeColor >> 16) & 0xFF; + } else if (fPaletteIndex){ + //TODO + } else if (fPaletteRGB){ + //TODO + } else if (fSystemRGB){ + //TODO + } else if (fSysIndex){ + //TODO + } + + double alpha = getAlpha(opacityProperty); + return new Color(rgb[0], rgb[1], rgb[2], (int)(alpha*255.0)); + } + + double getAlpha(short opacityProperty) { + EscherOptRecord opt = getEscherOptRecord(); + EscherSimpleProperty op = getEscherProperty(opt, opacityProperty); + int defaultOpacity = 0x00010000; + int opacity = (op == null) ? defaultOpacity : op.getPropertyValue(); + return Units.fixedPointToDouble(opacity); + } + + Color toRGB(int val){ + int a = (val >> 24) & 0xFF; + int b = (val >> 16) & 0xFF; + int g = (val >> 8) & 0xFF; + int r = (val >> 0) & 0xFF; + + if(a == 0xFE){ + // Color is an sRGB value specified by red, green, and blue fields. + } else if (a == 0xFF){ + // Color is undefined. + } else { + // index in the color scheme + ColorSchemeAtom ca = getSheet().getColorScheme(); + int schemeColor = ca.getColor(a); + + r = (schemeColor >> 0) & 0xFF; + g = (schemeColor >> 8) & 0xFF; + b = (schemeColor >> 16) & 0xFF; + } + return new Color(r, g, b); + } + + /** + * @return id for the shape. + */ + public int getShapeId(){ + EscherSpRecord spRecord = getEscherChild(EscherSpRecord.RECORD_ID); + return spRecord == null ? 0 : spRecord.getShapeId(); + } + + /** + * Sets shape ID + * + * @param id of the shape + */ + public void setShapeId(int id){ + EscherSpRecord spRecord = getEscherChild(EscherSpRecord.RECORD_ID); + if(spRecord != null) spRecord.setShapeId(id); + } + + /** + * Fill properties of this shape + * + * @return fill properties of this shape + */ + public HSLFFill getFill(){ + if(_fill == null) { + _fill = new HSLFFill(this); + } + return _fill; + } + + public FillStyle getFillStyle() { + return getFill().getFillStyle(); + } + + /** + * Returns the hyperlink assigned to this shape + * + * @return the hyperlink assigned to this shape + * or null if not found. + */ + public HSLFHyperlink getHyperlink(){ + return HSLFHyperlink.find(this); + } + + public void draw(Graphics2D graphics){ + logger.log(POILogger.INFO, "Rendering " + getShapeName()); + } + + public EscherOptRecord getEscherOptRecord() { + EscherOptRecord opt = getEscherChild(EscherOptRecord.RECORD_ID); + if (opt == null) { + opt = getEscherChild(RecordTypes.EscherUserDefined); + } + return opt; + } + + public boolean getFlipHorizontal(){ + EscherSpRecord spRecord = getEscherChild(EscherSpRecord.RECORD_ID); + return (spRecord.getFlags()& EscherSpRecord.FLAG_FLIPHORIZ) != 0; + } + + public void setFlipHorizontal(boolean flip) { + EscherSpRecord spRecord = getEscherChild(EscherSpRecord.RECORD_ID); + int flag = spRecord.getFlags() | EscherSpRecord.FLAG_FLIPHORIZ; + spRecord.setFlags(flag); + } + + public boolean getFlipVertical(){ + EscherSpRecord spRecord = getEscherChild(EscherSpRecord.RECORD_ID); + return (spRecord.getFlags()& EscherSpRecord.FLAG_FLIPVERT) != 0; + } + + public void setFlipVertical(boolean flip) { + EscherSpRecord spRecord = getEscherChild(EscherSpRecord.RECORD_ID); + int flag = spRecord.getFlags() | EscherSpRecord.FLAG_FLIPVERT; + spRecord.setFlags(flag); + } + + public double getRotation(){ + int rot = getEscherProperty(EscherProperties.TRANSFORM__ROTATION); + return Units.fixedPointToDouble(rot); + } + + public void setRotation(double theta){ + int rot = Units.doubleToFixedPoint(theta % 360.0); + setEscherProperty(EscherProperties.TRANSFORM__ROTATION, rot); + } + + public boolean isPlaceholder() { + return false; + } + } diff --cc src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java index 0000000000,ec7de6635c..0fbc38a9ee mode 000000,100644..100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java @@@ -1,0 -1,1166 +1,1167 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.hslf.usermodel; + + import java.awt.Dimension; + import java.io.ByteArrayInputStream; + import java.io.ByteArrayOutputStream; + import java.io.File; + import java.io.FileInputStream; + import java.io.IOException; + import java.io.InputStream; + import java.io.OutputStream; + import java.util.*; + + import org.apache.poi.ddf.EscherBSERecord; + import org.apache.poi.ddf.EscherContainerRecord; + import org.apache.poi.ddf.EscherOptRecord; + import org.apache.poi.ddf.EscherRecord; + import org.apache.poi.hpsf.ClassID; + import org.apache.poi.hslf.exceptions.CorruptPowerPointFileException; + import org.apache.poi.hslf.exceptions.HSLFException; + import org.apache.poi.hslf.model.*; + import org.apache.poi.hslf.record.Document; + import org.apache.poi.hslf.record.DocumentAtom; + import org.apache.poi.hslf.record.ExAviMovie; + import org.apache.poi.hslf.record.ExControl; + import org.apache.poi.hslf.record.ExEmbed; + import org.apache.poi.hslf.record.ExEmbedAtom; + import org.apache.poi.hslf.record.ExHyperlink; + import org.apache.poi.hslf.record.ExHyperlinkAtom; + import org.apache.poi.hslf.record.ExMCIMovie; + import org.apache.poi.hslf.record.ExObjList; + import org.apache.poi.hslf.record.ExObjListAtom; + import org.apache.poi.hslf.record.ExOleObjAtom; + import org.apache.poi.hslf.record.ExOleObjStg; + import org.apache.poi.hslf.record.ExVideoContainer; + import org.apache.poi.hslf.record.FontCollection; + import org.apache.poi.hslf.record.FontEntityAtom; + import org.apache.poi.hslf.record.HeadersFootersContainer; + import org.apache.poi.hslf.record.PersistPtrHolder; + import org.apache.poi.hslf.record.PositionDependentRecord; + import org.apache.poi.hslf.record.PositionDependentRecordContainer; + import org.apache.poi.hslf.record.Record; + import org.apache.poi.hslf.record.RecordContainer; + import org.apache.poi.hslf.record.RecordTypes; + import org.apache.poi.hslf.record.SlideListWithText; + import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet; + import org.apache.poi.hslf.record.SlidePersistAtom; + import org.apache.poi.hslf.record.UserEditAtom; + import org.apache.poi.poifs.filesystem.DirectoryNode; + import org.apache.poi.poifs.filesystem.POIFSFileSystem; + import org.apache.poi.sl.usermodel.*; + import org.apache.poi.util.POILogFactory; + import org.apache.poi.util.POILogger; ++import org.apache.poi.util.Units; + + /** + * This class is a friendly wrapper on top of the more scary HSLFSlideShow. + * + * TODO: - figure out how to match notes to their correct sheet (will involve + * understanding DocSlideList and DocNotesList) - handle Slide creation cleaner + * + * @author Nick Burch + * @author Yegor kozlov + */ + public final class HSLFSlideShow implements SlideShow { + // What we're based on + private HSLFSlideShowImpl _hslfSlideShow; + + // Pointers to the most recent versions of the core records + // (Document, Notes, Slide etc) + private Record[] _mostRecentCoreRecords; + // Lookup between the PersitPtr "sheet" IDs, and the position + // in the mostRecentCoreRecords array + private Map _sheetIdToCoreRecordsLookup; + + // Records that are interesting + private Document _documentRecord; + + // Friendly objects for people to deal with + private final List _masters = new ArrayList(); + private final List _titleMasters = new ArrayList(); + private final List _slides = new ArrayList(); + private final List _notes = new ArrayList(); + private FontCollection _fonts; + + // For logging + private POILogger logger = POILogFactory.getLogger(this.getClass()); + + + /* =============================================================== + * Setup Code + * =============================================================== + */ + + + /** + * Constructs a Powerpoint document from the underlying + * HSLFSlideShow object. Finds the model stuff from this + * + * @param hslfSlideShow the HSLFSlideShow to base on + */ + public HSLFSlideShow(HSLFSlideShowImpl hslfSlideShow) { + // Get useful things from our base slideshow + _hslfSlideShow = hslfSlideShow; + + // Handle Parent-aware Records + for (Record record : _hslfSlideShow.getRecords()) { + if(record instanceof RecordContainer){ + RecordContainer.handleParentAwareRecords((RecordContainer)record); + } + } + + // Find the versions of the core records we'll want to use + findMostRecentCoreRecords(); + + // Build up the model level Slides and Notes + buildSlidesAndNotes(); + } + + /** + * Constructs a new, empty, Powerpoint document. + */ + public HSLFSlideShow() { + this(HSLFSlideShowImpl.create()); + } + + /** + * Constructs a Powerpoint document from an input stream. + */ + public HSLFSlideShow(InputStream inputStream) throws IOException { + this(new HSLFSlideShowImpl(inputStream)); + } + + /** + * Use the PersistPtrHolder entries to figure out what is the "most recent" + * version of all the core records (Document, Notes, Slide etc), and save a + * record of them. Do this by walking from the oldest PersistPtr to the + * newest, overwriting any references found along the way with newer ones + */ + private void findMostRecentCoreRecords() { + // To start with, find the most recent in the byte offset domain + Map mostRecentByBytes = new HashMap(); + for (Record record : _hslfSlideShow.getRecords()) { + if (record instanceof PersistPtrHolder) { + PersistPtrHolder pph = (PersistPtrHolder) record; + + // If we've already seen any of the "slide" IDs for this + // PersistPtr, remove their old positions + int[] ids = pph.getKnownSlideIDs(); + for (int id : ids) { + if (mostRecentByBytes.containsKey(id)) { + mostRecentByBytes.remove(id); + } + } + + // Now, update the byte level locations with their latest values + Map thisSetOfLocations = pph.getSlideLocationsLookup(); + for (int id : ids) { + mostRecentByBytes.put(id, thisSetOfLocations.get(id)); + } + } + } + + // We now know how many unique special records we have, so init + // the array + _mostRecentCoreRecords = new Record[mostRecentByBytes.size()]; + + // We'll also want to be able to turn the slide IDs into a position + // in this array + _sheetIdToCoreRecordsLookup = new HashMap(); + Integer[] allIDs = mostRecentByBytes.keySet().toArray(new Integer[mostRecentByBytes.size()]); + Arrays.sort(allIDs); + for (int i = 0; i < allIDs.length; i++) { + _sheetIdToCoreRecordsLookup.put(allIDs[i], i); + } + + Map mostRecentByBytesRev = new HashMap(mostRecentByBytes.size()); + for (Map.Entry me : mostRecentByBytes.entrySet()) { + mostRecentByBytesRev.put(me.getValue(), me.getKey()); + } + + // Now convert the byte offsets back into record offsets + for (Record record : _hslfSlideShow.getRecords()) { + if (!(record instanceof PositionDependentRecord)) continue; + + PositionDependentRecord pdr = (PositionDependentRecord) record; + int recordAt = pdr.getLastOnDiskOffset(); + + Integer thisID = mostRecentByBytesRev.get(recordAt); + + if (thisID == null) continue; + + // Bingo. Now, where do we store it? + int storeAt = _sheetIdToCoreRecordsLookup.get(thisID); + + // Tell it its Sheet ID, if it cares + if (pdr instanceof PositionDependentRecordContainer) { + PositionDependentRecordContainer pdrc = (PositionDependentRecordContainer) record; + pdrc.setSheetId(thisID); + } + + // Finally, save the record + _mostRecentCoreRecords[storeAt] = record; + } + + // Now look for the interesting records in there + for (Record record : _mostRecentCoreRecords) { + // Check there really is a record at this number + if (record != null) { + // Find the Document, and interesting things in it + if (record.getRecordType() == RecordTypes.Document.typeID) { + _documentRecord = (Document) record; + _fonts = _documentRecord.getEnvironment().getFontCollection(); + } + } else { + // No record at this number + // Odd, but not normally a problem + } + } + } + + /** + * For a given SlideAtomsSet, return the core record, based on the refID + * from the SlidePersistAtom + */ + private Record getCoreRecordForSAS(SlideAtomsSet sas) { + SlidePersistAtom spa = sas.getSlidePersistAtom(); + int refID = spa.getRefID(); + return getCoreRecordForRefID(refID); + } + + /** + * For a given refID (the internal, 0 based numbering scheme), return the + * core record + * + * @param refID + * the refID + */ + private Record getCoreRecordForRefID(int refID) { + Integer coreRecordId = _sheetIdToCoreRecordsLookup.get(refID); + if (coreRecordId != null) { + Record r = _mostRecentCoreRecords[coreRecordId]; + return r; + } + logger.log(POILogger.ERROR, + "We tried to look up a reference to a core record, but there was no core ID for reference ID " + + refID); + return null; + } + + /** + * Build up model level Slide and Notes objects, from the underlying + * records. + */ + private void buildSlidesAndNotes() { + // Ensure we really found a Document record earlier + // If we didn't, then the file is probably corrupt + if (_documentRecord == null) { + throw new CorruptPowerPointFileException( + "The PowerPoint file didn't contain a Document Record in its PersistPtr blocks. It is probably corrupt."); + } + + // Fetch the SlideListWithTexts in the most up-to-date Document Record + // + // As far as we understand it: + // * The first SlideListWithText will contain a SlideAtomsSet + // for each of the master slides + // * The second SlideListWithText will contain a SlideAtomsSet + // for each of the slides, in their current order + // These SlideAtomsSets will normally contain text + // * The third SlideListWithText (if present), will contain a + // SlideAtomsSet for each Notes + // These SlideAtomsSets will not normally contain text + // + // Having indentified the masters, slides and notes + their orders, + // we have to go and find their matching records + // We always use the latest versions of these records, and use the + // SlideAtom/NotesAtom to match them with the StyleAtomSet + + SlideListWithText masterSLWT = _documentRecord.getMasterSlideListWithText(); + SlideListWithText slidesSLWT = _documentRecord.getSlideSlideListWithText(); + SlideListWithText notesSLWT = _documentRecord.getNotesSlideListWithText(); + + // Find master slides + // These can be MainMaster records, but oddly they can also be + // Slides or Notes, and possibly even other odd stuff.... + // About the only thing you can say is that the master details are in + // the first SLWT. + SlideAtomsSet[] masterSets = new SlideAtomsSet[0]; + if (masterSLWT != null) { + masterSets = masterSLWT.getSlideAtomsSets(); + + for (SlideAtomsSet sas : masterSets) { + Record r = getCoreRecordForSAS(sas); + int sheetNo = sas.getSlidePersistAtom().getSlideIdentifier(); + if (r instanceof org.apache.poi.hslf.record.Slide) { + HSLFTitleMaster master = new HSLFTitleMaster((org.apache.poi.hslf.record.Slide) r, + sheetNo); + master.setSlideShow(this); + _titleMasters.add(master); + } else if (r instanceof org.apache.poi.hslf.record.MainMaster) { + HSLFSlideMaster master = new HSLFSlideMaster((org.apache.poi.hslf.record.MainMaster) r, + sheetNo); + master.setSlideShow(this); + _masters.add(master); + } + } + } + + // Having sorted out the masters, that leaves the notes and slides + + // Start by finding the notes records to go with the entries in + // notesSLWT + org.apache.poi.hslf.record.Notes[] notesRecords; + SlideAtomsSet[] notesSets = new SlideAtomsSet[0]; + Map slideIdToNotes = new HashMap(); + if (notesSLWT == null) { + // None + notesRecords = new org.apache.poi.hslf.record.Notes[0]; + } else { + // Match up the records and the SlideAtomSets + notesSets = notesSLWT.getSlideAtomsSets(); + List notesRecordsL = + new ArrayList(); + for (int i = 0; i < notesSets.length; i++) { + // Get the right core record + Record r = getCoreRecordForSAS(notesSets[i]); + + // Ensure it really is a notes record + if (r == null || r instanceof org.apache.poi.hslf.record.Notes) { + if (r == null) { + logger.log(POILogger.WARN, "A Notes SlideAtomSet at " + i + + " said its record was at refID " + + notesSets[i].getSlidePersistAtom().getRefID() + + ", but that record didn't exist - record ignored."); + } + // we need to add also null-records, otherwise the index references to other existing + // don't work anymore + org.apache.poi.hslf.record.Notes notesRecord = (org.apache.poi.hslf.record.Notes) r; + notesRecordsL.add(notesRecord); + + // Record the match between slide id and these notes + SlidePersistAtom spa = notesSets[i].getSlidePersistAtom(); + int slideId = spa.getSlideIdentifier(); + slideIdToNotes.put(slideId, i); + } else { + logger.log(POILogger.ERROR, "A Notes SlideAtomSet at " + i + + " said its record was at refID " + + notesSets[i].getSlidePersistAtom().getRefID() + + ", but that was actually a " + r); + } + } + notesRecords = new org.apache.poi.hslf.record.Notes[notesRecordsL.size()]; + notesRecords = notesRecordsL.toArray(notesRecords); + } + + // Now, do the same thing for our slides + org.apache.poi.hslf.record.Slide[] slidesRecords; + SlideAtomsSet[] slidesSets = new SlideAtomsSet[0]; + if (slidesSLWT == null) { + // None + slidesRecords = new org.apache.poi.hslf.record.Slide[0]; + } else { + // Match up the records and the SlideAtomSets + slidesSets = slidesSLWT.getSlideAtomsSets(); + slidesRecords = new org.apache.poi.hslf.record.Slide[slidesSets.length]; + for (int i = 0; i < slidesSets.length; i++) { + // Get the right core record + Record r = getCoreRecordForSAS(slidesSets[i]); + + // Ensure it really is a slide record + if (r instanceof org.apache.poi.hslf.record.Slide) { + slidesRecords[i] = (org.apache.poi.hslf.record.Slide) r; + } else { + logger.log(POILogger.ERROR, "A Slide SlideAtomSet at " + i + + " said its record was at refID " + + slidesSets[i].getSlidePersistAtom().getRefID() + + ", but that was actually a " + r); + } + } + } + + // Finally, generate model objects for everything + // Notes first + for (org.apache.poi.hslf.record.Notes n : notesRecords) { + HSLFNotes hn = null; + if (n != null) { + hn = new HSLFNotes(n); + hn.setSlideShow(this); + } + _notes.add(hn); + } + // Then slides + for (int i = 0; i < slidesRecords.length; i++) { + SlideAtomsSet sas = slidesSets[i]; + int slideIdentifier = sas.getSlidePersistAtom().getSlideIdentifier(); + + // Do we have a notes for this? + HSLFNotes notes = null; + // Slide.SlideAtom.notesId references the corresponding notes slide. + // 0 if slide has no notes. + int noteId = slidesRecords[i].getSlideAtom().getNotesID(); + if (noteId != 0) { + Integer notesPos = slideIdToNotes.get(noteId); + if (notesPos != null) { + notes = _notes.get(notesPos); + } else { + logger.log(POILogger.ERROR, "Notes not found for noteId=" + noteId); + } + } + + // Now, build our slide + HSLFSlide hs = new HSLFSlide(slidesRecords[i], notes, sas, slideIdentifier, (i + 1)); + hs.setSlideShow(this); + _slides.add(hs); + } + } + + /** + * Writes out the slideshow file the is represented by an instance of this + * class + * + * @param out + * The OutputStream to write to. + * @throws IOException + * If there is an unexpected IOException from the passed in + * OutputStream + */ + public void write(OutputStream out) throws IOException { + // check for text paragraph modifications + for (HSLFSlide sl : getSlides()) { + for (HSLFShape sh : sl.getShapes()) { + if (!(sh instanceof HSLFTextShape)) continue; + HSLFTextShape hts = (HSLFTextShape)sh; + boolean isDirty = false; + for (HSLFTextParagraph p : hts.getTextParagraphs()) { + isDirty |= p.isDirty(); + } + if (isDirty) hts.storeText(); + } + } + + + _hslfSlideShow.write(out); + } + + /* + * =============================================================== + * Accessor Code + * =============================================================== + */ + + /** + * Returns an array of the most recent version of all the interesting + * records + */ + public Record[] getMostRecentCoreRecords() { + return _mostRecentCoreRecords; + } + + /** + * Returns an array of all the normal Slides found in the slideshow + */ + @Override + public List getSlides() { + return _slides; + } + + /** + * Returns an array of all the normal Notes found in the slideshow + */ + public List getNotes() { + return _notes; + } + + /** + * Returns an array of all the normal Slide Masters found in the slideshow + */ + @Override + public List getSlideMasters() { + return _masters; + } + + /** + * Returns an array of all the normal Title Masters found in the slideshow + */ + public List getTitleMasters() { + return _titleMasters; + } + + /** + * Returns the data of all the pictures attached to the SlideShow + */ + public HSLFPictureData[] getPictureData() { + return _hslfSlideShow.getPictures(); + } + + /** + * Returns the data of all the embedded OLE object in the SlideShow + */ + public HSLFObjectData[] getEmbeddedObjects() { + return _hslfSlideShow.getEmbeddedObjects(); + } + + /** + * Returns the data of all the embedded sounds in the SlideShow + */ + public HSLFSoundData[] getSoundData() { + return HSLFSoundData.find(_documentRecord); + } + + /** + * Return the current page size + */ + public Dimension getPageSize() { + DocumentAtom docatom = _documentRecord.getDocumentAtom(); - int pgx = (int) docatom.getSlideSizeX() * HSLFShape.POINT_DPI / HSLFShape.MASTER_DPI; - int pgy = (int) docatom.getSlideSizeY() * HSLFShape.POINT_DPI / HSLFShape.MASTER_DPI; ++ int pgx = (int)Units.masterToPoints((int)docatom.getSlideSizeX()); ++ int pgy = (int)Units.masterToPoints((int)docatom.getSlideSizeY()); + return new Dimension(pgx, pgy); + } + + /** + * Change the current page size + * + * @param pgsize + * page size (in points) + */ + public void setPageSize(Dimension pgsize) { + DocumentAtom docatom = _documentRecord.getDocumentAtom(); - docatom.setSlideSizeX(pgsize.width * HSLFShape.MASTER_DPI / HSLFShape.POINT_DPI); - docatom.setSlideSizeY(pgsize.height * HSLFShape.MASTER_DPI / HSLFShape.POINT_DPI); ++ docatom.setSlideSizeX(Units.pointsToMaster(pgsize.width)); ++ docatom.setSlideSizeY(Units.pointsToMaster(pgsize.height)); + } + + /** + * Helper method for usermodel: Get the font collection + */ + protected FontCollection getFontCollection() { + return _fonts; + } + + /** + * Helper method for usermodel and model: Get the document record + */ + public Document getDocumentRecord() { + return _documentRecord; + } + + /* + * =============================================================== + * Re-ordering Code + * =============================================================== + */ + + /** + * Re-orders a slide, to a new position. + * + * @param oldSlideNumber + * The old slide number (1 based) + * @param newSlideNumber + * The new slide number (1 based) + */ + public void reorderSlide(int oldSlideNumber, int newSlideNumber) { + // Ensure these numbers are valid + if (oldSlideNumber < 1 || newSlideNumber < 1) { + throw new IllegalArgumentException("Old and new slide numbers must be greater than 0"); + } + if (oldSlideNumber > _slides.size() || newSlideNumber > _slides.size()) { + throw new IllegalArgumentException( + "Old and new slide numbers must not exceed the number of slides (" + + _slides.size() + ")"); + } + + // The order of slides is defined by the order of slide atom sets in the + // SlideListWithText container. + SlideListWithText slwt = _documentRecord.getSlideSlideListWithText(); + SlideAtomsSet[] sas = slwt.getSlideAtomsSets(); + + SlideAtomsSet tmp = sas[oldSlideNumber - 1]; + sas[oldSlideNumber - 1] = sas[newSlideNumber - 1]; + sas[newSlideNumber - 1] = tmp; + + Collections.swap(_slides, oldSlideNumber - 1, newSlideNumber - 1); + _slides.get(newSlideNumber - 1).setSlideNumber(newSlideNumber); + _slides.get(oldSlideNumber - 1).setSlideNumber(oldSlideNumber); + + ArrayList lst = new ArrayList(); + for (SlideAtomsSet s : sas) { + lst.add(s.getSlidePersistAtom()); + lst.addAll(Arrays.asList(s.getSlideRecords())); + } + + Record[] r = lst.toArray(new Record[lst.size()]); + slwt.setChildRecord(r); + } + + /** + * Removes the slide at the given index (0-based). + *

+ * Shifts any subsequent slides to the left (subtracts one from their slide + * numbers). + *

+ * + * @param index + * the index of the slide to remove (0-based) + * @return the slide that was removed from the slide show. + */ + public HSLFSlide removeSlide(int index) { + int lastSlideIdx = _slides.size() - 1; + if (index < 0 || index > lastSlideIdx) { + throw new IllegalArgumentException("Slide index (" + index + ") is out of range (0.." + + lastSlideIdx + ")"); + } + + SlideListWithText slwt = _documentRecord.getSlideSlideListWithText(); + SlideAtomsSet[] sas = slwt.getSlideAtomsSets(); + + List records = new ArrayList(); + List sa = new ArrayList(Arrays.asList(sas)); + + HSLFSlide removedSlide = _slides.remove(index); + _notes.remove(removedSlide.getNotes()); + sa.remove(index); + + int i=0; + for (HSLFSlide s : _slides) s.setSlideNumber(i++); + + for (SlideAtomsSet s : sa) { + records.add(s.getSlidePersistAtom()); + records.addAll(Arrays.asList(s.getSlideRecords())); + } + if (sa.isEmpty()) { + _documentRecord.removeSlideListWithText(slwt); + } else { + slwt.setSlideAtomsSets(sa.toArray(new SlideAtomsSet[sa.size()])); + slwt.setChildRecord(records.toArray(new Record[records.size()])); + } + + // if the removed slide had notes - remove references to them too + + int notesId = (removedSlide != null) ? removedSlide.getSlideRecord().getSlideAtom().getNotesID() : 0; + if (notesId != 0) { + SlideListWithText nslwt = _documentRecord.getNotesSlideListWithText(); + records = new ArrayList(); + ArrayList na = new ArrayList(); + for (SlideAtomsSet ns : nslwt.getSlideAtomsSets()) { + if (ns.getSlidePersistAtom().getSlideIdentifier() == notesId) continue; + na.add(ns); + records.add(ns.getSlidePersistAtom()); + if (ns.getSlideRecords() != null) { + records.addAll(Arrays.asList(ns.getSlideRecords())); + } + } + if (na.isEmpty()) { + _documentRecord.removeSlideListWithText(nslwt); + } else { + nslwt.setSlideAtomsSets(na.toArray(new SlideAtomsSet[na.size()])); + nslwt.setChildRecord(records.toArray(new Record[records.size()])); + } + } + + return removedSlide; + } + + /* + * =============================================================== + * Addition Code + * =============================================================== + */ + + /** + * Create a blank Slide. + * + * @return the created Slide + */ + public HSLFSlide createSlide() { + SlideListWithText slist = null; + + // We need to add the records to the SLWT that deals + // with Slides. + // Add it, if it doesn't exist + slist = _documentRecord.getSlideSlideListWithText(); + if (slist == null) { + // Need to add a new one + slist = new SlideListWithText(); + slist.setInstance(SlideListWithText.SLIDES); + _documentRecord.addSlideListWithText(slist); + } + + // Grab the SlidePersistAtom with the highest Slide Number. + // (Will stay as null if no SlidePersistAtom exists yet in + // the slide, or only master slide's ones do) + SlidePersistAtom prev = null; + for (SlideAtomsSet sas : slist.getSlideAtomsSets()) { + SlidePersistAtom spa = sas.getSlidePersistAtom(); + if (spa.getSlideIdentifier() < 0) { + // This is for a master slide + // Odd, since we only deal with the Slide SLWT + } else { + // Must be for a real slide + if (prev == null) { + prev = spa; + } + if (prev.getSlideIdentifier() < spa.getSlideIdentifier()) { + prev = spa; + } + } + } + + // Set up a new SlidePersistAtom for this slide + SlidePersistAtom sp = new SlidePersistAtom(); + + // First slideId is always 256 + sp.setSlideIdentifier(prev == null ? 256 : (prev.getSlideIdentifier() + 1)); + + // Add this new SlidePersistAtom to the SlideListWithText + slist.addSlidePersistAtom(sp); + + // Create a new Slide + HSLFSlide slide = new HSLFSlide(sp.getSlideIdentifier(), sp.getRefID(), _slides.size() + 1); + slide.setSlideShow(this); + slide.onCreate(); + + // Add in to the list of Slides + _slides.add(slide); + logger.log(POILogger.INFO, "Added slide " + _slides.size() + " with ref " + sp.getRefID() + + " and identifier " + sp.getSlideIdentifier()); + + // Add the core records for this new Slide to the record tree + org.apache.poi.hslf.record.Slide slideRecord = slide.getSlideRecord(); + int psrId = addPersistentObject(slideRecord); + sp.setRefID(psrId); + slideRecord.setSheetId(psrId); + + slide.setMasterSheet(_masters.get(0)); + // All done and added + return slide; + } + + /** + * Adds a picture to this presentation and returns the associated index. + * + * @param data + * picture data + * @param format + * the format of the picture. One of constans defined in the + * Picture class. + * @return the index to this picture (1 based). + */ + public int addPicture(byte[] data, int format) throws IOException { + byte[] uid = HSLFPictureData.getChecksum(data); + + EscherContainerRecord bstore; + + EscherContainerRecord dggContainer = _documentRecord.getPPDrawingGroup().getDggContainer(); + bstore = (EscherContainerRecord) HSLFShape.getEscherChild(dggContainer, + EscherContainerRecord.BSTORE_CONTAINER); + if (bstore == null) { + bstore = new EscherContainerRecord(); + bstore.setRecordId(EscherContainerRecord.BSTORE_CONTAINER); + + dggContainer.addChildBefore(bstore, EscherOptRecord.RECORD_ID); + } else { + Iterator iter = bstore.getChildIterator(); + for (int i = 0; iter.hasNext(); i++) { + EscherBSERecord bse = (EscherBSERecord) iter.next(); + if (Arrays.equals(bse.getUid(), uid)) { + return i + 1; + } + } + } + + HSLFPictureData pict = HSLFPictureData.create(format); + pict.setData(data); + + int offset = _hslfSlideShow.addPicture(pict); + + EscherBSERecord bse = new EscherBSERecord(); + bse.setRecordId(EscherBSERecord.RECORD_ID); + bse.setOptions((short) (0x0002 | (format << 4))); + bse.setSize(pict.getRawData().length + 8); + bse.setUid(uid); + + bse.setBlipTypeMacOS((byte) format); + bse.setBlipTypeWin32((byte) format); + + if (format == HSLFPictureShape.EMF) + bse.setBlipTypeMacOS((byte) HSLFPictureShape.PICT); + else if (format == HSLFPictureShape.WMF) + bse.setBlipTypeMacOS((byte) HSLFPictureShape.PICT); + else if (format == HSLFPictureShape.PICT) + bse.setBlipTypeWin32((byte) HSLFPictureShape.WMF); + + bse.setRef(0); + bse.setOffset(offset); + bse.setRemainingData(new byte[0]); + + bstore.addChildRecord(bse); + int count = bstore.getChildRecords().size(); + bstore.setOptions((short) ((count << 4) | 0xF)); + + return count; + } + + /** + * Adds a picture to this presentation and returns the associated index. + * + * @param pict + * the file containing the image to add + * @param format + * the format of the picture. One of constans defined in the + * Picture class. + * @return the index to this picture (1 based). + */ + public int addPicture(File pict, int format) throws IOException { + int length = (int) pict.length(); + byte[] data = new byte[length]; + FileInputStream is = null; + try { + is = new FileInputStream(pict); + is.read(data); + } finally { + if(is != null) is.close(); + } + return addPicture(data, format); + } + + /** + * Add a font in this presentation + * + * @param font + * the font to add + * @return 0-based index of the font + */ + public int addFont(PPFont font) { + FontCollection fonts = getDocumentRecord().getEnvironment().getFontCollection(); + int idx = fonts.getFontIndex(font.getFontName()); + if (idx == -1) { + idx = fonts.addFont(font.getFontName(), font.getCharSet(), font.getFontFlags(), font + .getFontType(), font.getPitchAndFamily()); + } + return idx; + } + + /** + * Get a font by index + * + * @param idx + * 0-based index of the font + * @return of an instance of PPFont or null if not + * found + */ + public PPFont getFont(int idx) { + FontCollection fonts = getDocumentRecord().getEnvironment().getFontCollection(); + for (Record ch : fonts.getChildRecords()) { + if (ch instanceof FontEntityAtom) { + FontEntityAtom atom = (FontEntityAtom) ch; + if (atom.getFontIndex() == idx) { + return new PPFont(atom); + } + } + } + return null; + } + + /** + * get the number of fonts in the presentation + * + * @return number of fonts + */ + public int getNumberOfFonts() { + return getDocumentRecord().getEnvironment().getFontCollection().getNumberOfFonts(); + } + + /** + * Return Header / Footer settings for slides + * + * @return Header / Footer settings for slides + */ + public HeadersFooters getSlideHeadersFooters() { + // detect if this ppt was saved in Office2007 + String tag = getSlideMasters().get(0).getProgrammableTag(); + boolean ppt2007 = "___PPT12".equals(tag); + + HeadersFootersContainer hdd = null; + for (Record ch : _documentRecord.getChildRecords()) { + if (ch instanceof HeadersFootersContainer + && ((HeadersFootersContainer) ch).getOptions() == HeadersFootersContainer.SlideHeadersFootersContainer) { + hdd = (HeadersFootersContainer) ch; + break; + } + } + boolean newRecord = false; + if (hdd == null) { + hdd = new HeadersFootersContainer(HeadersFootersContainer.SlideHeadersFootersContainer); + newRecord = true; + } + return new HeadersFooters(hdd, this, newRecord, ppt2007); + } + + /** + * Return Header / Footer settings for notes + * + * @return Header / Footer settings for notes + */ + public HeadersFooters getNotesHeadersFooters() { + // detect if this ppt was saved in Office2007 + String tag = getSlideMasters().get(0).getProgrammableTag(); + boolean ppt2007 = "___PPT12".equals(tag); + + HeadersFootersContainer hdd = null; + for (Record ch : _documentRecord.getChildRecords()) { + if (ch instanceof HeadersFootersContainer + && ((HeadersFootersContainer) ch).getOptions() == HeadersFootersContainer.NotesHeadersFootersContainer) { + hdd = (HeadersFootersContainer) ch; + break; + } + } + boolean newRecord = false; + if (hdd == null) { + hdd = new HeadersFootersContainer(HeadersFootersContainer.NotesHeadersFootersContainer); + newRecord = true; + } + if (ppt2007 && !_notes.isEmpty()) { + return new HeadersFooters(hdd, _notes.get(0), newRecord, ppt2007); + } + return new HeadersFooters(hdd, this, newRecord, ppt2007); + } + + /** + * Add a movie in this presentation + * + * @param path + * the path or url to the movie + * @return 0-based index of the movie + */ + public int addMovie(String path, int type) { + ExMCIMovie mci; + switch (type) { + case MovieShape.MOVIE_MPEG: + mci = new ExMCIMovie(); + break; + case MovieShape.MOVIE_AVI: + mci = new ExAviMovie(); + break; + default: + throw new IllegalArgumentException("Unsupported Movie: " + type); + } + + ExVideoContainer exVideo = mci.getExVideo(); + exVideo.getExMediaAtom().setMask(0xE80000); + exVideo.getPathAtom().setText(path); + + int objectId = addToObjListAtom(mci); + exVideo.getExMediaAtom().setObjectId(objectId); + + return objectId; + } + + /** + * Add a control in this presentation + * + * @param name + * name of the control, e.g. "Shockwave Flash Object" + * @param progId + * OLE Programmatic Identifier, e.g. + * "ShockwaveFlash.ShockwaveFlash.9" + * @return 0-based index of the control + */ + public int addControl(String name, String progId) { + ExControl ctrl = new ExControl(); + ctrl.setProgId(progId); + ctrl.setMenuName(name); + ctrl.setClipboardName(name); + + ExOleObjAtom oleObj = ctrl.getExOleObjAtom(); + oleObj.setDrawAspect(ExOleObjAtom.DRAW_ASPECT_VISIBLE); + oleObj.setType(ExOleObjAtom.TYPE_CONTROL); + oleObj.setSubType(ExOleObjAtom.SUBTYPE_DEFAULT); + + int objectId = addToObjListAtom(ctrl); + oleObj.setObjID(objectId); + return objectId; + } + + /** + * Add a hyperlink to this presentation + * + * @return 0-based index of the hyperlink + */ + public int addHyperlink(HSLFHyperlink link) { + ExHyperlink ctrl = new ExHyperlink(); + ExHyperlinkAtom obj = ctrl.getExHyperlinkAtom(); + if(link.getType() == HSLFHyperlink.LINK_SLIDENUMBER) { + ctrl.setLinkURL(link.getAddress(), 0x30); + } else { + ctrl.setLinkURL(link.getAddress()); + } + ctrl.setLinkTitle(link.getTitle()); + + int objectId = addToObjListAtom(ctrl); + link.setId(objectId); + obj.setNumber(objectId); + + return objectId; + } + + /** + * Add a embedded object to this presentation + * + * @return 0-based index of the embedded object + */ + public int addEmbed(POIFSFileSystem poiData) { + DirectoryNode root = poiData.getRoot(); + + // prepare embedded data + if (new ClassID().equals(root.getStorageClsid())) { + // need to set class id + Map olemap = getOleMap(); + ClassID classID = null; + for (Map.Entry entry : olemap.entrySet()) { + if (root.hasEntry(entry.getKey())) { + classID = entry.getValue(); + break; + } + } + if (classID == null) { + throw new IllegalArgumentException("Unsupported embedded document"); + } + + root.setStorageClsid(classID); + } + + ExEmbed exEmbed = new ExEmbed(); + // remove unneccessary infos, so we don't need to specify the type + // of the ole object multiple times + Record children[] = exEmbed.getChildRecords(); + exEmbed.removeChild(children[2]); + exEmbed.removeChild(children[3]); + exEmbed.removeChild(children[4]); + + ExEmbedAtom eeEmbed = exEmbed.getExEmbedAtom(); + eeEmbed.setCantLockServerB(true); + + ExOleObjAtom eeAtom = exEmbed.getExOleObjAtom(); + eeAtom.setDrawAspect(ExOleObjAtom.DRAW_ASPECT_VISIBLE); + eeAtom.setType(ExOleObjAtom.TYPE_EMBEDDED); + // eeAtom.setSubType(ExOleObjAtom.SUBTYPE_EXCEL); + // should be ignored?!?, see MS-PPT ExOleObjAtom, but Libre Office sets it ... + eeAtom.setOptions(1226240); + + ExOleObjStg exOleObjStg = new ExOleObjStg(); + try { + final String OLESTREAM_NAME = "\u0001Ole"; + if (!root.hasEntry(OLESTREAM_NAME)) { + // the following data was taken from an example libre office document + // beside this "\u0001Ole" record there were several other records, e.g. CompObj, + // OlePresXXX, but it seems, that they aren't neccessary + byte oleBytes[] = { 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + poiData.createDocument(new ByteArrayInputStream(oleBytes), OLESTREAM_NAME); + } + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + poiData.writeFilesystem(bos); + exOleObjStg.setData(bos.toByteArray()); + } catch (IOException e) { + throw new HSLFException(e); + } + + int psrId = addPersistentObject(exOleObjStg); + exOleObjStg.setPersistId(psrId); + eeAtom.setObjStgDataRef(psrId); + + int objectId = addToObjListAtom(exEmbed); + eeAtom.setObjID(objectId); + return objectId; + } + + protected int addToObjListAtom(RecordContainer exObj) { + ExObjList lst = (ExObjList) _documentRecord.findFirstOfType(RecordTypes.ExObjList.typeID); + if (lst == null) { + lst = new ExObjList(); + _documentRecord.addChildAfter(lst, _documentRecord.getDocumentAtom()); + } + ExObjListAtom objAtom = lst.getExObjListAtom(); + // increment the object ID seed + int objectId = (int) objAtom.getObjectIDSeed() + 1; + objAtom.setObjectIDSeed(objectId); + + lst.addChildAfter(exObj, objAtom); + + return objectId; + } + + protected static Map getOleMap() { + Map olemap = new HashMap(); + olemap.put("PowerPoint Document", ClassID.PPT_SHOW); + olemap.put("Workbook", ClassID.EXCEL97); // as per BIFF8 spec + olemap.put("WORKBOOK", ClassID.EXCEL97); // Typically from third party programs + olemap.put("BOOK", ClassID.EXCEL97); // Typically odd Crystal Reports exports + // ... to be continued + return olemap; + } + + protected int addPersistentObject(PositionDependentRecord slideRecord) { + slideRecord.setLastOnDiskOffset(HSLFSlideShowImpl.UNSET_OFFSET); + _hslfSlideShow.appendRootLevelRecord((Record)slideRecord); + + // For position dependent records, hold where they were and now are + // As we go along, update, and hand over, to any Position Dependent + // records we happen across + Map interestingRecords = + new HashMap(); + + try { + _hslfSlideShow.updateAndWriteDependantRecords(null,interestingRecords); + } catch (IOException e) { + throw new HSLFException(e); + } + + PersistPtrHolder ptr = (PersistPtrHolder)interestingRecords.get(RecordTypes.PersistPtrIncrementalBlock); + UserEditAtom usr = (UserEditAtom)interestingRecords.get(RecordTypes.UserEditAtom); + + // persist ID is UserEditAtom.maxPersistWritten + 1 + int psrId = usr.getMaxPersistWritten() + 1; + + // Last view is now of the slide + usr.setLastViewType((short) UserEditAtom.LAST_VIEW_SLIDE_VIEW); + // increment the number of persistent objects + usr.setMaxPersistWritten(psrId); + + // Add the new slide into the last PersistPtr + // (Also need to tell it where it is) + int slideOffset = slideRecord.getLastOnDiskOffset(); + slideRecord.setLastOnDiskOffset(slideOffset); + ptr.addSlideLookup(psrId, slideOffset); + logger.log(POILogger.INFO, "New slide/object ended up at " + slideOffset); + + return psrId; + } + + public MasterSheet createMasterSheet() + throws IOException { + // TODO Auto-generated method stub + return null; + } + + public Resources getResources() { + // TODO Auto-generated method stub + return null; + } + } diff --cc src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java index 0000000000,d9f5b11ebe..cad0dcd3d2 mode 000000,100644..100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java @@@ -1,0 -1,362 +1,371 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.hslf.usermodel; + -import org.apache.poi.ddf.*; ++import java.awt.Rectangle; ++import java.util.ArrayList; ++import java.util.Collections; ++import java.util.Comparator; ++import java.util.Iterator; ++import java.util.List; ++ ++import org.apache.poi.ddf.EscherArrayProperty; ++import org.apache.poi.ddf.EscherContainerRecord; ++import org.apache.poi.ddf.EscherOptRecord; ++import org.apache.poi.ddf.EscherProperties; ++import org.apache.poi.ddf.EscherRecord; ++import org.apache.poi.ddf.EscherSimpleProperty; ++import org.apache.poi.ddf.EscherTextboxRecord; + import org.apache.poi.hslf.model.Line; -import org.apache.poi.hslf.usermodel.*; + import org.apache.poi.sl.usermodel.ShapeContainer; + import org.apache.poi.sl.usermodel.TableShape; + import org.apache.poi.util.LittleEndian; - -import java.util.*; -import java.util.List; -import java.awt.*; ++import org.apache.poi.util.Units; + + /** + * Represents a table in a PowerPoint presentation + * + * @author Yegor Kozlov + */ + public final class HSLFTable extends HSLFGroupShape implements TableShape { + + protected static final int BORDER_TOP = 1; + protected static final int BORDER_RIGHT = 2; + protected static final int BORDER_BOTTOM = 3; + protected static final int BORDER_LEFT = 4; + + protected static final int BORDERS_ALL = 5; + protected static final int BORDERS_OUTSIDE = 6; + protected static final int BORDERS_INSIDE = 7; + protected static final int BORDERS_NONE = 8; + + + protected HSLFTableCell[][] cells; + + /** + * Create a new Table of the given number of rows and columns + * + * @param numrows the number of rows + * @param numcols the number of columns + */ + public HSLFTable(int numrows, int numcols) { + super(); + + if(numrows < 1) throw new IllegalArgumentException("The number of rows must be greater than 1"); + if(numcols < 1) throw new IllegalArgumentException("The number of columns must be greater than 1"); + + int x=0, y=0, tblWidth=0, tblHeight=0; + cells = new HSLFTableCell[numrows][numcols]; + for (int i = 0; i < cells.length; i++) { + x = 0; + for (int j = 0; j < cells[i].length; j++) { + cells[i][j] = new HSLFTableCell(this); + Rectangle anchor = new Rectangle(x, y, HSLFTableCell.DEFAULT_WIDTH, HSLFTableCell.DEFAULT_HEIGHT); + cells[i][j].setAnchor(anchor); + x += HSLFTableCell.DEFAULT_WIDTH; + } + y += HSLFTableCell.DEFAULT_HEIGHT; + } + tblWidth = x; + tblHeight = y; + setAnchor(new Rectangle(0, 0, tblWidth, tblHeight)); + + EscherContainerRecord spCont = (EscherContainerRecord) getSpContainer().getChild(0); + EscherOptRecord opt = new EscherOptRecord(); + opt.setRecordId((short)0xF122); + opt.addEscherProperty(new EscherSimpleProperty((short)0x39F, 1)); + EscherArrayProperty p = new EscherArrayProperty((short)(0x4000 | 0x3A0), false, null); + p.setSizeOfElements(0x0004); + p.setNumberOfElementsInArray(numrows); + p.setNumberOfElementsInMemory(numrows); + opt.addEscherProperty(p); + List lst = spCont.getChildRecords(); + lst.add(lst.size()-1, opt); + spCont.setChildRecords(lst); + } + + /** + * Create a Table object and initilize it from the supplied Record container. + * + * @param escherRecord EscherSpContainer container which holds information about this shape + * @param parent the parent of the shape + */ + public HSLFTable(EscherContainerRecord escherRecord, ShapeContainer parent) { + super(escherRecord, parent); + } + + /** + * Gets a cell + * + * @param row the row index (0-based) + * @param col the column index (0-based) + * @return the cell + */ + public HSLFTableCell getCell(int row, int col) { + return cells[row][col]; + } + + public int getNumberOfColumns() { + return cells[0].length; + } + public int getNumberOfRows() { + return cells.length; + } + + protected void afterInsert(HSLFSheet sh){ + super.afterInsert(sh); + + EscherContainerRecord spCont = (EscherContainerRecord) getSpContainer().getChild(0); + List lst = spCont.getChildRecords(); + EscherOptRecord opt = (EscherOptRecord)lst.get(lst.size()-2); + EscherArrayProperty p = opt.lookup(0x3A0); + for (int i = 0; i < cells.length; i++) { + HSLFTableCell cell = cells[i][0]; - int rowHeight = cell.getAnchor().height*MASTER_DPI/POINT_DPI; ++ int rowHeight = Units.pointsToMaster(cell.getAnchor().height); + byte[] val = new byte[4]; + LittleEndian.putInt(val, 0, rowHeight); + p.setElement(i, val); + for (int j = 0; j < cells[i].length; j++) { + HSLFTableCell c = cells[i][j]; + addShape(c); + + Line bt = c.getBorderTop(); + if(bt != null) addShape(bt); + + Line br = c.getBorderRight(); + if(br != null) addShape(br); + + Line bb = c.getBorderBottom(); + if(bb != null) addShape(bb); + + Line bl = c.getBorderLeft(); + if(bl != null) addShape(bl); + + } + } + + } + + protected void initTable(){ + List shapeList = getShapeList(); + + Iterator shapeIter = shapeList.iterator(); + while (shapeIter.hasNext()) { + HSLFShape shape = shapeIter.next(); + if (shape instanceof HSLFAutoShape) { + HSLFAutoShape autoShape = (HSLFAutoShape)shape; + EscherTextboxRecord etr = autoShape.getEscherChild(EscherTextboxRecord.RECORD_ID); + if (etr != null) continue; + } + shapeIter.remove(); + } + + Collections.sort(shapeList, new Comparator(){ + public int compare( HSLFShape o1, HSLFShape o2 ) { + Rectangle anchor1 = o1.getAnchor(); + Rectangle anchor2 = o2.getAnchor(); + int delta = anchor1.y - anchor2.y; + if (delta == 0) delta = anchor1.x - anchor2.x; + // descending size + if (delta == 0) delta = (anchor2.width*anchor2.height)-(anchor1.width*anchor1.height); + return delta; + } + }); + + int y0 = (shapeList.isEmpty()) ? -1 : shapeList.get(0).getAnchor().y - 1; + int maxrowlen = 0; + List> lst = new ArrayList>(); + List row = null; + for (HSLFShape sh : shapeList) { + if(sh instanceof HSLFTextShape){ + Rectangle anchor = sh.getAnchor(); + if(anchor.y != y0){ + y0 = anchor.y; + row = new ArrayList(); + lst.add(row); + } + row.add(sh); + maxrowlen = Math.max(maxrowlen, row.size()); + } + } + cells = new HSLFTableCell[lst.size()][maxrowlen]; + for (int i = 0; i < lst.size(); i++) { + row = lst.get(i); + for (int j = 0; j < row.size(); j++) { + HSLFTextShape tx = (HSLFTextShape)row.get(j); + cells[i][j] = new HSLFTableCell(tx.getSpContainer(), getParent()); + cells[i][j].setSheet(tx.getSheet()); + } + } + } + + /** + * Assign the SlideShow this shape belongs to + * + * @param sheet owner of this shape + */ + public void setSheet(HSLFSheet sheet){ + super.setSheet(sheet); + if(cells == null) initTable(); + } + + /** + * Sets the row height. + * + * @param row the row index (0-based) + * @param height the height to set (in pixels) + */ + public void setRowHeight(int row, int height){ + int currentHeight = cells[row][0].getAnchor().height; + int dy = height - currentHeight; + + for (int i = row; i < cells.length; i++) { + for (int j = 0; j < cells[i].length; j++) { + Rectangle anchor = cells[i][j].getAnchor(); + if(i == row) anchor.height = height; + else anchor.y += dy; + cells[i][j].setAnchor(anchor); + } + } + Rectangle tblanchor = getAnchor(); + tblanchor.height += dy; + setAnchor(tblanchor); + + } + + /** + * Sets the column width. + * + * @param col the column index (0-based) + * @param width the width to set (in pixels) + */ + public void setColumnWidth(int col, int width){ + int currentWidth = cells[0][col].getAnchor().width; + int dx = width - currentWidth; + for (int i = 0; i < cells.length; i++) { + Rectangle anchor = cells[i][col].getAnchor(); + anchor.width = width; + cells[i][col].setAnchor(anchor); + + if(col < cells[i].length - 1) for (int j = col+1; j < cells[i].length; j++) { + anchor = cells[i][j].getAnchor(); + anchor.x += dx; + cells[i][j].setAnchor(anchor); + } + } + Rectangle tblanchor = getAnchor(); + tblanchor.width += dx; + setAnchor(tblanchor); + } + + /** + * Format the table and apply the specified Line to all cell boundaries, + * both outside and inside + * + * @param line the border line + */ + public void setAllBorders(Line line){ + for (int i = 0; i < cells.length; i++) { + for (int j = 0; j < cells[i].length; j++) { + HSLFTableCell cell = cells[i][j]; + cell.setBorderTop(cloneBorder(line)); + cell.setBorderLeft(cloneBorder(line)); + if(j == cells[i].length - 1) cell.setBorderRight(cloneBorder(line)); + if(i == cells.length - 1) cell.setBorderBottom(cloneBorder(line)); + } + } + } + + /** + * Format the outside border using the specified Line object + * + * @param line the border line + */ + public void setOutsideBorders(Line line){ + for (int i = 0; i < cells.length; i++) { + for (int j = 0; j < cells[i].length; j++) { + HSLFTableCell cell = cells[i][j]; + + if(j == 0) cell.setBorderLeft(cloneBorder(line)); + if(j == cells[i].length - 1) cell.setBorderRight(cloneBorder(line)); + else { + cell.setBorderLeft(null); + cell.setBorderLeft(null); + } + + if(i == 0) cell.setBorderTop(cloneBorder(line)); + else if(i == cells.length - 1) cell.setBorderBottom(cloneBorder(line)); + else { + cell.setBorderTop(null); + cell.setBorderBottom(null); + } + } + } + } + + /** + * Format the inside border using the specified Line object + * + * @param line the border line + */ + public void setInsideBorders(Line line){ + for (int i = 0; i < cells.length; i++) { + for (int j = 0; j < cells[i].length; j++) { + HSLFTableCell cell = cells[i][j]; + + if(j != cells[i].length - 1) + cell.setBorderRight(cloneBorder(line)); + else { + cell.setBorderLeft(null); + cell.setBorderLeft(null); + } + if(i != cells.length - 1) cell.setBorderBottom(cloneBorder(line)); + else { + cell.setBorderTop(null); + cell.setBorderBottom(null); + } + } + } + } + + private Line cloneBorder(Line line){ + Line border = createBorder(); + border.setLineWidth(line.getLineWidth()); + border.setLineDashing(line.getLineDashing()); + border.setLineColor(line.getLineColor()); + border.setLineCompound(line.getLineCompound()); + return border; + } + + /** + * Create a border to format this table + * + * @return the created border + */ + public Line createBorder(){ + Line line = new Line(this); + + EscherOptRecord opt = getEscherOptRecord(); + setEscherProperty(opt, EscherProperties.GEOMETRY__SHAPEPATH, -1); + setEscherProperty(opt, EscherProperties.GEOMETRY__FILLOK, -1); + setEscherProperty(opt, EscherProperties.SHADOWSTYLE__SHADOWOBSURED, 0x20000); + setEscherProperty(opt, EscherProperties.THREED__LIGHTFACE, 0x80000); + + return line; + } + } diff --cc src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextShape.java index 0000000000,55222cf474..e2f73066ef mode 000000,100644..100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextShape.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextShape.java @@@ -1,0 -1,777 +1,789 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.hslf.usermodel; + + import static org.apache.poi.hslf.record.RecordTypes.*; + + import java.awt.Rectangle; + import java.awt.font.FontRenderContext; + import java.awt.geom.Rectangle2D; + import java.io.IOException; + import java.util.*; + + import org.apache.poi.ddf.*; + import org.apache.poi.hslf.exceptions.HSLFException; + import org.apache.poi.hslf.record.*; + import org.apache.poi.sl.draw.DrawFactory; + import org.apache.poi.sl.draw.DrawTextShape; + import org.apache.poi.sl.usermodel.*; + import org.apache.poi.util.POILogger; ++import org.apache.poi.util.Units; + + /** + * A common superclass of all shapes that can hold text. + * + * @author Yegor Kozlov + */ + public abstract class HSLFTextShape extends HSLFSimpleShape implements TextShape { + + /** + * How to anchor the text + */ + /* package */ static final int AnchorTop = 0; + /* package */ static final int AnchorMiddle = 1; + /* package */ static final int AnchorBottom = 2; + /* package */ static final int AnchorTopCentered = 3; + /* package */ static final int AnchorMiddleCentered = 4; + /* package */ static final int AnchorBottomCentered = 5; + /* package */ static final int AnchorTopBaseline = 6; + /* package */ static final int AnchorBottomBaseline = 7; + /* package */ static final int AnchorTopCenteredBaseline = 8; + /* package */ static final int AnchorBottomCenteredBaseline = 9; + + /** + * How to wrap the text + */ + public static final int WrapSquare = 0; + public static final int WrapByPoints = 1; + public static final int WrapNone = 2; + public static final int WrapTopBottom = 3; + public static final int WrapThrough = 4; + + /** + * TextRun object which holds actual text and format data + */ + protected List _paragraphs = new ArrayList(); + + /** + * Escher container which holds text attributes such as + * TextHeaderAtom, TextBytesAtom ot TextCharsAtom, StyleTextPropAtom etc. + */ + protected EscherTextboxWrapper _txtbox; + + /** + * This setting is used for supporting a deprecated alignment + * + * @see + */ + boolean alignToBaseline = false; + + /** + * Used to calculate text bounds + */ + protected static final FontRenderContext _frc = new FontRenderContext(null, true, true); + + /** + * Create a TextBox object and initialize it from the supplied Record container. + * + * @param escherRecord EscherSpContainer container which holds information about this shape + * @param parent the parent of the shape + */ + protected HSLFTextShape(EscherContainerRecord escherRecord, ShapeContainer parent){ + super(escherRecord, parent); + + } + + /** + * Create a new TextBox. This constructor is used when a new shape is created. + * + * @param parent the parent of this Shape. For example, if this text box is a cell + * in a table then the parent is Table. + */ + public HSLFTextShape(ShapeContainer parent){ + super(null, parent); + _escherContainer = createSpContainer(parent instanceof HSLFGroupShape); + } + + /** + * Create a new TextBox. This constructor is used when a new shape is created. + * + */ + public HSLFTextShape(){ + this(null); + } + + /** + * Set default properties for the TextRun. + * Depending on the text and shape type the defaults are different: + * TextBox: align=left, valign=top + * AutoShape: align=center, valign=middle + * + */ + protected void setDefaultTextProperties(HSLFTextParagraph _txtrun){ + + } + + /** + * When a textbox is added to a sheet we need to tell upper-level + * PPDrawing about it. + * + * @param sh the sheet we are adding to + */ + protected void afterInsert(HSLFSheet sh){ + super.afterInsert(sh); + + storeText(); + + EscherTextboxWrapper _txtbox = getEscherTextboxWrapper(); + if(_txtbox != null){ + _escherContainer.addChildRecord(_txtbox.getEscherRecord()); + + PPDrawing ppdrawing = sh.getPPDrawing(); + ppdrawing.addTextboxWrapper(_txtbox); + // Ensure the escher layer knows about the added records + try { + _txtbox.writeOut(null); + } catch (IOException e){ + throw new HSLFException(e); + } + if(getAnchor().equals(new Rectangle()) && !"".equals(getText())) resizeToFitText(); + } + for (HSLFTextParagraph htp : _paragraphs) { + htp.setShapeId(getShapeId()); + } + sh.onAddTextShape(this); + } + + protected EscherTextboxWrapper getEscherTextboxWrapper(){ + if(_txtbox != null) return _txtbox; + + EscherTextboxRecord textRecord = getEscherChild(EscherTextboxRecord.RECORD_ID); + if (textRecord == null) return null; + + HSLFSheet sheet = getSheet(); + if (sheet != null) { + PPDrawing drawing = sheet.getPPDrawing(); + if (drawing != null) { + EscherTextboxWrapper wrappers[] = drawing.getTextboxWrappers(); + if (wrappers != null) { + for (EscherTextboxWrapper w : wrappers) { + // check for object identity + if (textRecord == w.getEscherRecord()) { + _txtbox = w; + return _txtbox; + } + } + } + } + } + + _txtbox = new EscherTextboxWrapper(textRecord); + return _txtbox; + } + + /** + * Adjust the size of the shape so it encompasses the text inside it. + * + * @return a Rectangle2D that is the bounds of this shape. + */ + public Rectangle2D resizeToFitText(){ + Rectangle2D anchor = getAnchor(); + if(anchor.getWidth() == 0.) { + logger.log(POILogger.WARN, "Width of shape wasn't set. Defaulting to 200px"); + anchor = new Rectangle2D.Double(anchor.getX(), anchor.getY(), 200, anchor.getHeight()); + setAnchor(anchor); + } + double height = getTextHeight(); + height += 1; // add a pixel to compensate rounding errors + + anchor.setRect(anchor.getX(), anchor.getY(), anchor.getWidth(), height); + setAnchor(anchor); + + return anchor; + } + + /** + * Returns the type of the text, from the TextHeaderAtom. + * Possible values can be seen from TextHeaderAtom + * @see org.apache.poi.hslf.record.TextHeaderAtom + */ + public int getRunType() { + getEscherTextboxWrapper(); + if (_txtbox == null) return -1; + List paras = HSLFTextParagraph.findTextParagraphs(_txtbox, getSheet()); + return (paras.isEmpty()) ? -1 : paras.get(0).getRunType(); + } + + /** + * Changes the type of the text. Values should be taken + * from TextHeaderAtom. No checking is done to ensure you + * set this to a valid value! + * @see org.apache.poi.hslf.record.TextHeaderAtom + */ + public void setRunType(int type) { + getEscherTextboxWrapper(); + if (_txtbox == null) return; + List paras = HSLFTextParagraph.findTextParagraphs(_txtbox, getSheet()); + if (!paras.isEmpty()) { + paras.get(0).setRunType(type); + } + } + + /** + * Returns the type of vertical alignment for the text. + * One of the Anchor* constants defined in this class. + * + * @return the type of alignment + */ + /* package */ int getAlignment(){ + EscherOptRecord opt = getEscherOptRecord(); + EscherSimpleProperty prop = getEscherProperty(opt, EscherProperties.TEXT__ANCHORTEXT); + int align = HSLFTextShape.AnchorTop; + if (prop == null){ + /** + * If vertical alignment was not found in the shape properties then try to + * fetch the master shape and search for the align property there. + */ + int type = getRunType(); + if(getSheet() != null && getSheet().getMasterSheet() != null){ + HSLFMasterSheet master = getSheet().getMasterSheet(); + HSLFTextShape masterShape = master.getPlaceholderByTextType(type); + if(masterShape != null) align = masterShape.getAlignment(); + } else { + //not found in the master sheet. Use the hardcoded defaults. + switch (type){ + case org.apache.poi.hslf.record.TextHeaderAtom.TITLE_TYPE: + case org.apache.poi.hslf.record.TextHeaderAtom.CENTER_TITLE_TYPE: + align = HSLFTextShape.AnchorMiddle; + break; + default: + align = HSLFTextShape.AnchorTop; + break; + } + } + } else { + align = prop.getPropertyValue(); + } + + alignToBaseline = (align == AnchorBottomBaseline || align == AnchorBottomCenteredBaseline + || align == AnchorTopBaseline || align == AnchorTopCenteredBaseline); + + return align; + } + + /** + * Sets the type of alignment for the text. + * One of the Anchor* constants defined in this class. + * + * @param align - the type of alignment + */ + /* package */ void setAlignment(Boolean isCentered, VerticalAlignment vAlign) { + int align[]; + switch (vAlign) { + case TOP: + align = new int[]{AnchorTop, AnchorTopCentered, AnchorTopBaseline, AnchorTopCenteredBaseline}; + break; + default: + case MIDDLE: + align = new int[]{AnchorMiddle, AnchorMiddleCentered, AnchorMiddle, AnchorMiddleCentered}; + break; + case BOTTOM: + align = new int[]{AnchorBottom, AnchorBottomCentered, AnchorBottomBaseline, AnchorBottomCenteredBaseline}; + break; + } + + int align2 = align[(isCentered ? 1 : 0)+(alignToBaseline ? 2 : 0)]; + + setEscherProperty(EscherProperties.TEXT__ANCHORTEXT, align2); + } + + @Override + public VerticalAlignment getVerticalAlignment() { + int va = getAlignment(); + switch (va) { + case AnchorTop: + case AnchorTopCentered: + case AnchorTopBaseline: + case AnchorTopCenteredBaseline: return VerticalAlignment.TOP; + case AnchorBottom: + case AnchorBottomCentered: + case AnchorBottomBaseline: + case AnchorBottomCenteredBaseline: return VerticalAlignment.BOTTOM; + default: + case AnchorMiddle: + case AnchorMiddleCentered: return VerticalAlignment.MIDDLE; + } + } + + /** + * @return true, if vertical alignment is relative to baseline + * this is only used for older versions less equals Office 2003 + */ + public boolean isAlignToBaseline() { + getAlignment(); + return alignToBaseline; + } + + /** + * Sets the vertical alignment relative to the baseline + * + * @param alignToBaseline if true, vertical alignment is relative to baseline + */ + public void setAlignToBaseline(boolean alignToBaseline) { + this.alignToBaseline = alignToBaseline; + setAlignment(isHorizontalCentered(), getVerticalAlignment()); + } + + @Override + public boolean isHorizontalCentered() { + int va = getAlignment(); + switch (va) { + case AnchorTopCentered: + case AnchorTopCenteredBaseline: + case AnchorBottomCentered: + case AnchorBottomCenteredBaseline: + case AnchorMiddleCentered: + return true; + default: + return false; + } + } + + public void setVerticalAlignment(VerticalAlignment vAlign) { + setAlignment(isHorizontalCentered(), vAlign); + } + + /** + * Sets if the paragraphs are horizontal centered + * + * @param isCentered true, if the paragraphs are horizontal centered + * A {@code null} values unsets this property. + * + * @see TextShape#isHorizontalCentered() + */ + public void setHorizontalCentered(Boolean isCentered){ + setAlignment(isCentered, getVerticalAlignment()); + } + + /** + * Returns the distance (in points) between the bottom of the text frame + * and the bottom of the inscribed rectangle of the shape that contains the text. + * Default value is 1/20 inch. + * + * @return the botom margin + */ + public double getBottomInset(){ - EscherOptRecord opt = getEscherOptRecord(); - EscherSimpleProperty prop = getEscherProperty(opt, EscherProperties.TEXT__TEXTBOTTOM); - int val = prop == null ? EMU_PER_INCH/20 : prop.getPropertyValue(); - return val/EMU_PER_POINT; ++ return getInset(EscherProperties.TEXT__TEXTBOTTOM, .05); + } + + /** + * Sets the botom margin. + * @see #getBottomInset() + * + * @param margin the bottom margin + */ + public void setBottomInset(double margin){ - setEscherProperty(EscherProperties.TEXT__TEXTBOTTOM, (int)(margin*EMU_PER_POINT)); ++ setInset(EscherProperties.TEXT__TEXTBOTTOM, margin); + } + + /** + * Returns the distance (in points) between the left edge of the text frame + * and the left edge of the inscribed rectangle of the shape that contains + * the text. + * Default value is 1/10 inch. + * + * @return the left margin + */ + public double getLeftInset(){ - EscherOptRecord opt = getEscherOptRecord(); - EscherSimpleProperty prop = getEscherProperty(opt, EscherProperties.TEXT__TEXTLEFT); - int val = prop == null ? EMU_PER_INCH/10 : prop.getPropertyValue(); - return val/EMU_PER_POINT; ++ return getInset(EscherProperties.TEXT__TEXTLEFT, .1); + } + + /** + * Sets the left margin. + * @see #getLeftInset() + * + * @param margin the left margin + */ + public void setLeftInset(double margin){ - setEscherProperty(EscherProperties.TEXT__TEXTLEFT, (int)(margin*EMU_PER_POINT)); ++ setInset(EscherProperties.TEXT__TEXTLEFT, margin); + } + + /** + * Returns the distance (in points) between the right edge of the + * text frame and the right edge of the inscribed rectangle of the shape + * that contains the text. + * Default value is 1/10 inch. + * + * @return the right margin + */ + public double getRightInset(){ - EscherOptRecord opt = getEscherOptRecord(); - EscherSimpleProperty prop = getEscherProperty(opt, EscherProperties.TEXT__TEXTRIGHT); - int val = prop == null ? EMU_PER_INCH/10 : prop.getPropertyValue(); - return val/EMU_PER_POINT; ++ return getInset(EscherProperties.TEXT__TEXTRIGHT, .1); + } + + /** + * Sets the right margin. + * @see #getRightInset() + * + * @param margin the right margin + */ + public void setRightInset(double margin){ - setEscherProperty(EscherProperties.TEXT__TEXTRIGHT, (int)(margin*EMU_PER_POINT)); ++ setInset(EscherProperties.TEXT__TEXTRIGHT, margin); + } + + /** + * Returns the distance (in points) between the top of the text frame + * and the top of the inscribed rectangle of the shape that contains the text. + * Default value is 1/20 inch. + * + * @return the top margin + */ + public double getTopInset(){ - EscherOptRecord opt = getEscherOptRecord(); - EscherSimpleProperty prop = getEscherProperty(opt, EscherProperties.TEXT__TEXTTOP); - int val = prop == null ? EMU_PER_INCH/20 : prop.getPropertyValue(); - return val/EMU_PER_POINT; ++ return getInset(EscherProperties.TEXT__TEXTTOP, .05); + } + + /** + * Sets the top margin. + * @see #getTopInset() + * + * @param margin the top margin + */ + public void setTopInset(double margin){ - setEscherProperty(EscherProperties.TEXT__TEXTTOP, (int)(margin*EMU_PER_POINT)); ++ setInset(EscherProperties.TEXT__TEXTTOP, margin); ++ } ++ ++ /** ++ * Returns the distance (in points) between the edge of the text frame ++ * and the edge of the inscribed rectangle of the shape that contains the text. ++ * Default value is 1/20 inch. ++ * ++ * @param propId the id of the inset edge ++ * @return the inset in points ++ */ ++ private double getInset(short propId, double defaultInch) { ++ EscherOptRecord opt = getEscherOptRecord(); ++ EscherSimpleProperty prop = getEscherProperty(opt, propId); ++ int val = prop == null ? (int)(Units.toEMU(Units.POINT_DPI)*defaultInch) : prop.getPropertyValue(); ++ return Units.toPoints(val); + } + ++ /** ++ * @param propId the id of the inset edge ++ * @param margin the inset in points ++ */ ++ private void setInset(short propId, double margin){ ++ setEscherProperty(propId, Units.toEMU(margin)); ++ } ++ + @Override + public boolean getWordWrap(){ + int ww = getWordWrapEx(); + return (ww != WrapNone); + } + + /** + * Returns the value indicating word wrap. + * + * @return the value indicating word wrap. + * Must be one of the Wrap* constants defined in this class. + * + * @see MSOWRAPMODE + */ + public int getWordWrapEx() { + EscherOptRecord opt = getEscherOptRecord(); + EscherSimpleProperty prop = getEscherProperty(opt, EscherProperties.TEXT__WRAPTEXT); + return prop == null ? WrapSquare : prop.getPropertyValue(); + } + + /** + * Specifies how the text should be wrapped + * + * @param wrap the value indicating how the text should be wrapped. + * Must be one of the Wrap* constants defined in this class. + */ + public void setWordWrap(int wrap){ + setEscherProperty(EscherProperties.TEXT__WRAPTEXT, wrap); + } + + /** + * @return id for the text. + */ + public int getTextId(){ + EscherOptRecord opt = getEscherOptRecord(); + EscherSimpleProperty prop = getEscherProperty(opt, EscherProperties.TEXT__TEXTID); + return prop == null ? 0 : prop.getPropertyValue(); + } + + /** + * Sets text ID + * + * @param id of the text + */ + public void setTextId(int id){ + setEscherProperty(EscherProperties.TEXT__TEXTID, id); + } + + /** + * @return the TextParagraphs for this text box + */ + public List getTextParagraphs(){ + if (!_paragraphs.isEmpty()) return _paragraphs; + + _txtbox = getEscherTextboxWrapper(); + if (_txtbox == null) { + _paragraphs.addAll(HSLFTextParagraph.createEmptyParagraph()); + _txtbox = _paragraphs.get(0).getTextboxWrapper(); + } else { + _paragraphs = HSLFTextParagraph.findTextParagraphs(_txtbox, getSheet()); + if (_paragraphs == null) { + // there are actually TextBoxRecords without extra data - see #54722 + _paragraphs = HSLFTextParagraph.createEmptyParagraph(_txtbox); + } + + if (_paragraphs.isEmpty()) { + logger.log(POILogger.WARN, "TextRecord didn't contained any text lines"); + } + // initParagraphsFromSheetRecords(); + // if (_paragraphs.isEmpty()) { + // List> llhtp = HSLFTextParagraph.findTextParagraphs(_txtbox); + // if (!llhtp.isEmpty()) { + // _paragraphs.addAll(llhtp.get(0)); + // } + // } + } + + for (HSLFTextParagraph p : _paragraphs) { + p.setParentShape(this); + } + + return _paragraphs; + } + + public void setSheet(HSLFSheet sheet) { + _sheet = sheet; + + // Initialize _txtrun object. + // (We can't do it in the constructor because the sheet + // is not assigned then, it's only built once we have + // all the records) + List paras = getTextParagraphs(); + if (paras != null) { + for (HSLFTextParagraph htp : paras) { + // Supply the sheet to our child RichTextRuns + htp.supplySheet(_sheet); + } + } + } + + // protected void initParagraphsFromSheetRecords(){ + // EscherTextboxWrapper txtbox = getEscherTextboxWrapper(); + // HSLFSheet sheet = getSheet(); + // + // if (sheet == null || txtbox == null) return; + // List> sheetRuns = _sheet.getTextParagraphs(); + // if (sheetRuns == null) return; + // + // _paragraphs.clear(); + // OutlineTextRefAtom ota = (OutlineTextRefAtom)txtbox.findFirstOfType(OutlineTextRefAtom.typeID); + // + // if (ota != null) { + // int idx = ota.getTextIndex(); + // for (List r : sheetRuns) { + // if (r.isEmpty()) continue; + // int ridx = r.get(0).getIndex(); + // if (ridx > idx) break; + // if (ridx == idx) _paragraphs.addAll(r); + // } + // if(_paragraphs.isEmpty()) { + // logger.log(POILogger.WARN, "text run not found for OutlineTextRefAtom.TextIndex=" + idx); + // } + // } else { + // int shapeId = getShapeId(); + // for (List r : sheetRuns) { + // if (r.isEmpty()) continue; + // if (r.get(0).getShapeId() == shapeId) _paragraphs.addAll(r); + // } + // } + // + // // ensure the same references child records of TextRun - see #48916 + //// if(_txtrun != null) { + //// for (int i = 0; i < child.length; i++) { + //// for (Record r : _txtrun.getRecords()) { + //// if (child[i].getRecordType() == r.getRecordType()) { + //// child[i] = r; + //// } + //// } + //// } + //// } + // } + + /* + // 0xB acts like cariage return in page titles and like blank in the others + char replChr; + switch(tha == null ? -1 : tha.getTextType()) { + case -1: + case TextHeaderAtom.TITLE_TYPE: + case TextHeaderAtom.CENTER_TITLE_TYPE: + replChr = '\n'; + break; + default: + replChr = ' '; + break; + } + + // PowerPoint seems to store files with \r as the line break + // The messes things up on everything but a Mac, so translate + // them to \n + String text = rawText.replace('\r','\n').replace('\u000b', replChr); + */ + + /** + * Return OEPlaceholderAtom, the atom that describes a placeholder. + * + * @return OEPlaceholderAtom or null if not found + */ + public OEPlaceholderAtom getPlaceholderAtom(){ + return getClientDataRecord(OEPlaceholderAtom.typeID); + } + + /** + * + * Assigns a hyperlink to this text shape + * + * @param linkId id of the hyperlink, @see org.apache.poi.hslf.usermodel.SlideShow#addHyperlink(Hyperlink) + * @param beginIndex the beginning index, inclusive. + * @param endIndex the ending index, exclusive. + * @see org.apache.poi.hslf.usermodel.HSLFSlideShow#addHyperlink(HSLFHyperlink) + */ + public void setHyperlink(int linkId, int beginIndex, int endIndex){ + //TODO validate beginIndex and endIndex and throw IllegalArgumentException + + InteractiveInfo info = new InteractiveInfo(); + InteractiveInfoAtom infoAtom = info.getInteractiveInfoAtom(); + infoAtom.setAction(org.apache.poi.hslf.record.InteractiveInfoAtom.ACTION_HYPERLINK); + infoAtom.setHyperlinkType(org.apache.poi.hslf.record.InteractiveInfoAtom.LINK_Url); + infoAtom.setHyperlinkID(linkId); + + _txtbox.appendChildRecord(info); + + TxInteractiveInfoAtom txiatom = new TxInteractiveInfoAtom(); + txiatom.setStartIndex(beginIndex); + txiatom.setEndIndex(endIndex); + _txtbox.appendChildRecord(txiatom); + + } + + @Override + public boolean isPlaceholder() { + OEPlaceholderAtom oep = getPlaceholderAtom(); + if (oep != null) return true; + + //special case for files saved in Office 2007 + RoundTripHFPlaceholder12 hldr = getClientDataRecord(RoundTripHFPlaceholder12.typeID); + if (hldr != null) return true; + + return false; + } + + + @Override + public Iterator iterator() { + return _paragraphs.iterator(); + } + + @Override + public Insets2D getInsets() { + Insets2D insets = new Insets2D(getTopInset(), getLeftInset(), getBottomInset(), getRightInset()); + return insets; + } + + @Override + public double getTextHeight(){ + DrawFactory drawFact = DrawFactory.getInstance(null); + DrawTextShape dts = drawFact.getDrawable(this); + return dts.getTextHeight(); + } + + @Override + public TextDirection getTextDirection() { + // TODO: determine vertical text setting + return TextDirection.HORIZONTAL; + } + + /** + * Returns the raw text content of the shape. This hasn't had any + * changes applied to it, and so is probably unlikely to print + * out nicely. + */ + public String getRawText() { + return HSLFTextParagraph.getRawText(getTextParagraphs()); + } + + /** + * Returns the text contained in this text frame, which has been made safe + * for printing and other use. + * + * @return the text string for this textbox. + */ + public String getText() { + String rawText = getRawText(); + return HSLFTextParagraph.toExternalString(rawText, getRunType()); + } + + + // Update methods follow + + /** + * Adds the supplied text onto the end of the TextParagraphs, + * creating a new RichTextRun for it to sit in. + * + * @param text the text string used by this object. + */ + public HSLFTextRun appendText(String text, boolean newParagraph) { + // init paragraphs + List paras = getTextParagraphs(); + return HSLFTextParagraph.appendText(paras, text, newParagraph); + } + + /** + * Sets (overwrites) the current text. + * Uses the properties of the first paragraph / textrun + * + * @param text the text string used by this object. + * + * @return the last text run of the splitted text + */ + public HSLFTextRun setText(String text) { + // init paragraphs + List paras = getTextParagraphs(); + HSLFTextRun htr = HSLFTextParagraph.setText(paras, text); + setTextId(text.hashCode()); + return htr; + } + + /** + * Saves the modified paragraphs/textrun to the records. + * Also updates the styles to the correct text length. + */ + protected void storeText() { + List paras = getTextParagraphs(); + HSLFTextParagraph.storeText(paras); + } + // Accesser methods follow + + /** + * Returns the array of all hyperlinks in this text run + * + * @return the array of all hyperlinks in this text run or null + * if not found. + */ + public List getHyperlinks() { + return HSLFHyperlink.find(this); + } + + + } diff --cc src/scratchpad/testcases/org/apache/poi/hslf/model/TestFreeform.java index 6ff4870386,cdbf28cb60..7b3b785444 --- a/src/scratchpad/testcases/org/apache/poi/hslf/model/TestFreeform.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestFreeform.java @@@ -43,10 -45,10 +45,10 @@@ public final class TestFreeform path1.lineTo(100, 200); path1.closePath(); - Freeform p = new Freeform(); + HSLFFreeformShape p = new HSLFFreeformShape(); p.setPath(path1); -- java.awt.Shape path2 = p.getOutline(); ++ java.awt.Shape path2 = p.getPath(); assertTrue(new Area(path1).equals(new Area(path2))); } @@@ -54,10 -57,10 +57,10 @@@ GeneralPath path1 = new GeneralPath(new Line2D.Double(100, 100, 200, 100)); - Freeform p = new Freeform(); + HSLFFreeformShape p = new HSLFFreeformShape(); p.setPath(path1); -- java.awt.Shape path2 = p.getOutline(); ++ java.awt.Shape path2 = p.getPath(); assertTrue(new Area(path1).equals(new Area(path2))); } @@@ -65,10 -69,10 +69,10 @@@ GeneralPath path1 = new GeneralPath(new Rectangle2D.Double(100, 100, 200, 50)); - Freeform p = new Freeform(); + HSLFFreeformShape p = new HSLFFreeformShape(); p.setPath(path1); -- java.awt.Shape path2 = p.getOutline(); ++ java.awt.Shape path2 = p.getPath(); assertTrue(new Area(path1).equals(new Area(path2))); } @@@ -76,10 -80,11 +80,11 @@@ * Avoid NPE in Freeform.getOutline() if either GEOMETRY__VERTICES or * GEOMETRY__SEGMENTINFO is missing, see Bugzilla 54188 */ + @Test public void test54188() { - Freeform p = new Freeform(); - GeneralPath path = (GeneralPath)p.getOutline(); + HSLFFreeformShape p = new HSLFFreeformShape(); - GeneralPath path = (GeneralPath)p.getOutline(); ++ GeneralPath path = p.getPath(); GeneralPath emptyPath = new GeneralPath(); assertEquals(emptyPath.getBounds2D(), path.getBounds2D()); } diff --cc src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java index 1740b46b40,fb49dbb1c4..70028ba4bd --- a/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java @@@ -130,6 -143,7 +143,6 @@@ public final class TestTable assertNotNull(tbl); - assertEquals(-1, tbl.getAnchor().y); - // handling changed in common sl, so it evaluates to 0 now - assertEquals(0, tbl.getAnchor().getY(), 0); ++ assertEquals(-1, tbl.getAnchor().getY(), 0); } } diff --cc src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextShape.java index 0000000000,07a1a68c05..365b89263e mode 000000,100644..100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextShape.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextShape.java @@@ -1,0 -1,213 +1,213 @@@ + /* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== */ + + package org.apache.poi.hslf.usermodel; + + import static org.junit.Assert.*; + + import java.io.*; + import java.util.*; + + import org.apache.poi.POIDataSamples; + import org.apache.poi.hslf.record.TextHeaderAtom; + import org.apache.poi.sl.usermodel.ShapeType; + import org.junit.Test; + + /** + * Verify behavior of TextShape and its sub-classes + * + * @author Yegor Kozlov + */ + public final class TestTextShape { + private static POIDataSamples _slTests = POIDataSamples.getSlideShowInstance(); + + @Test + public void createAutoShape(){ + HSLFTextShape shape = new HSLFAutoShape(ShapeType.TRAPEZOID); + assertNull(shape.getEscherTextboxWrapper()); + assertNotNull(shape.getTextParagraphs()); + assertNotNull(shape.getEscherTextboxWrapper()); + assertEquals("", shape.getText()); + assertEquals(-1, shape.getTextParagraphs().get(0).getIndex()); + } + + @Test + public void createTextBox(){ + HSLFTextShape shape = new HSLFTextBox(); + List paras = shape.getTextParagraphs(); + assertNotNull(paras); + assertNotNull(shape.getText()); + assertNotNull(shape.getEscherTextboxWrapper()); + + assertNotNull(shape.getTextParagraphs()); + assertNotNull(shape.getEscherTextboxWrapper()); + assertEquals("", shape.getText()); + + } + + /** + * Verify we can get text from TextShape in the following cases: + * - placeholders + * - normal TextBox object + * - text in auto-shapes + */ + @Test + public void read() throws IOException { + HSLFSlideShow ppt = new HSLFSlideShow(_slTests.openResourceAsStream("text_shapes.ppt")); + + List lst1 = new ArrayList(); + HSLFSlide slide = ppt.getSlides().get(0); + for (HSLFShape shape : slide.getShapes()) { + assertTrue("Expected TextShape but found " + shape.getClass().getName(), shape instanceof HSLFTextShape); + HSLFTextShape tx = (HSLFTextShape)shape; + List paras = tx.getTextParagraphs(); + assertNotNull(paras); + int runType = paras.get(0).getRunType(); + + ShapeType type = shape.getShapeType(); + String rawText = HSLFTextParagraph.getRawText(paras); + switch (type){ + case TEXT_BOX: + assertEquals("Text in a TextBox", rawText); + break; + case RECT: + if(runType == TextHeaderAtom.OTHER_TYPE) + assertEquals("Rectangle", rawText); + else if(runType == TextHeaderAtom.TITLE_TYPE) + assertEquals("Title Placeholder", rawText); + break; + case OCTAGON: + assertEquals("Octagon", rawText); + break; + case ELLIPSE: + assertEquals("Ellipse", rawText); + break; + case ROUND_RECT: + assertEquals("RoundRectangle", rawText); + break; + default: + fail("Unexpected shape: " + shape.getShapeName()); + + } + lst1.add(rawText); + } + + List lst2 = new ArrayList(); + for (List paras : slide.getTextParagraphs()) { + lst2.add(HSLFTextParagraph.getRawText(paras)); + } + + assertTrue(lst1.containsAll(lst2)); + } + + @Test + public void readWrite() throws IOException { + HSLFSlideShow ppt = new HSLFSlideShow(); + HSLFSlide slide = ppt.createSlide(); + + HSLFTextShape shape1 = new HSLFTextBox(); + shape1.setText("Hello, World!"); + slide.addShape(shape1); + + shape1.moveTo(100, 100); + + HSLFTextShape shape2 = new HSLFAutoShape(ShapeType.RIGHT_ARROW); + shape2.setText("Testing TextShape"); + slide.addShape(shape2); + shape2.moveTo(300, 300); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ppt.write(out); + out.close(); + + ppt = new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())); + slide = ppt.getSlides().get(0); + List shape = slide.getShapes(); + + assertTrue(shape.get(0) instanceof HSLFTextShape); + shape1 = (HSLFTextShape)shape.get(0); + assertEquals(ShapeType.TEXT_BOX, shape1.getShapeType()); + assertEquals("Hello, World!", shape1.getText()); + + assertTrue(shape.get(1) instanceof HSLFTextShape); + shape1 = (HSLFTextShape)shape.get(1); + assertEquals(ShapeType.RIGHT_ARROW, shape1.getShapeType()); + assertEquals("Testing TextShape", shape1.getText()); + } + + @Test + public void margins() throws IOException { + HSLFSlideShow ppt = new HSLFSlideShow(_slTests.openResourceAsStream("text-margins.ppt")); + + HSLFSlide slide = ppt.getSlides().get(0); + + Map map = new HashMap(); + for (HSLFShape shape : slide.getShapes()) { + if(shape instanceof HSLFTextShape){ + HSLFTextShape tx = (HSLFTextShape)shape; + map.put(tx.getText(), tx); + } + } + + HSLFTextShape tx; + + tx = map.get("TEST1"); - assertEquals(0.1, tx.getLeftInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); - assertEquals(0.1, tx.getRightInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); - assertEquals(0.39, tx.getTopInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); - assertEquals(0.05, tx.getBottomInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); ++ assertEquals(7.2, tx.getLeftInset(), 0); ++ assertEquals(7.2, tx.getRightInset(), 0); ++ assertEquals(28.34, tx.getTopInset(), 0.01); ++ assertEquals(3.6, tx.getBottomInset(), 0); + + tx = map.get("TEST2"); - assertEquals(0.1, tx.getLeftInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); - assertEquals(0.1, tx.getRightInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); - assertEquals(0.05, tx.getTopInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); - assertEquals(0.39, tx.getBottomInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); ++ assertEquals(7.2, tx.getLeftInset(), 0); ++ assertEquals(7.2, tx.getRightInset(), 0); ++ assertEquals(3.6, tx.getTopInset(), 0); ++ assertEquals(28.34, tx.getBottomInset(), 0.01); + + tx = map.get("TEST3"); - assertEquals(0.39, tx.getLeftInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); - assertEquals(0.1, tx.getRightInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); - assertEquals(0.05, tx.getTopInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); - assertEquals(0.05, tx.getBottomInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); ++ assertEquals(28.34, tx.getLeftInset(), 0.01); ++ assertEquals(7.2, tx.getRightInset(), 0); ++ assertEquals(3.6, tx.getTopInset(), 0); ++ assertEquals(3.6, tx.getBottomInset(), 0); + + tx = map.get("TEST4"); - assertEquals(0.1, tx.getLeftInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); - assertEquals(0.39, tx.getRightInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); - assertEquals(0.05, tx.getTopInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); - assertEquals(0.05, tx.getBottomInset()*HSLFShape.EMU_PER_POINT/HSLFShape.EMU_PER_INCH, 0.01); ++ assertEquals(7.2, tx.getLeftInset(), 0); ++ assertEquals(28.34, tx.getRightInset(), 0.01); ++ assertEquals(3.6, tx.getTopInset(), 0); ++ assertEquals(3.6, tx.getBottomInset(), 0); + } + + @Test + public void bug52599() throws IOException { + HSLFSlideShow ppt = new HSLFSlideShow(_slTests.openResourceAsStream("52599.ppt")); + + HSLFSlide slide = ppt.getSlides().get(0); + List sh = slide.getShapes(); + assertEquals(3, sh.size()); + + HSLFTextShape sh0 = (HSLFTextShape)sh.get(0); + assertNotNull(sh0.getTextParagraphs()); + assertEquals("", sh0.getText()); + + HSLFTextShape sh1 = (HSLFTextShape)sh.get(1); + assertNotNull(sh1.getTextParagraphs()); + assertEquals("", sh1.getText()); + + HSLFTextShape sh2 = (HSLFTextShape)sh.get(2); + assertEquals("this box should be shown just once", sh2.getText()); + assertEquals(-1, sh2.getTextParagraphs().get(0).getIndex()); + } + } diff --cc src/types/definitions/dml-shapeGeometry.xjb index 0000000000,43a0c2a687..8d05c62914 mode 000000,100644..100644 --- a/src/types/definitions/dml-shapeGeometry.xjb +++ b/src/types/definitions/dml-shapeGeometry.xjb @@@ -1,0 -1,7 +1,26 @@@ ++ ++ + + +