From d1832e5cd1b0e1d7178d113dafbd3fbd9bc6fd6b Mon Sep 17 00:00:00 2001 From: Yvan Lussaud Date: Tue, 3 Dec 2024 14:14:57 +0100 Subject: [PATCH] Improved CSS and HTML support: - better CSS class parsing - added support for pre HTML tag - added support for px font size - added support for MParagraph background color --- .../InitializeConfigurationsHandler.java | 4 +- .../m2doc/html/services/M2DocCSSParser.java | 97 +++++++++--- .../m2doc/html/services/M2DocHTMLParser.java | 18 ++- .../m2doc/html/services/Parser.java | 11 +- .../m2doc/element/MElementContainer.java | 19 ++- .../org/obeonetwork/m2doc/element/MTable.java | 16 -- .../impl/AbstractMElementContainer.java | 19 ++- .../m2doc/element/impl/MTableImpl.java | 17 +- .../m2doc/generator/M2DocEvaluator.java | 148 +++++++++++++++--- .../classMultiTags-expected-ast.txt | 11 ++ ...MultiTags-expected-generation-messages.txt | 0 .../classMultiTags-expected-generation.docx | Bin 0 -> 12277 bytes .../classMultiTags-expected-validation.docx | 0 .../classMultiTags-template.docx | Bin 0 -> 12294 bytes .../css/classMultiTags/classMultiTags.genconf | 2 + .../resources/css/classMultiTags/doc.html | 16 ++ .../resources/css/font-size_px/doc.html | 9 ++ .../font-size_px-expected-ast.txt | 11 ++ ...t-size_px-expected-generation-messages.txt | 0 .../font-size_px-expected-generation.docx | Bin 0 -> 12257 bytes .../font-size_px-expected-validation.docx | 0 .../font-size_px/font-size_px-template.docx | Bin 0 -> 12294 bytes .../css/font-size_px/font-size_px.genconf | 2 + .../css/preWithBackGroundColor/doc.html | 20 +++ .../preWithBackGroundColor-expected-ast.txt | 11 ++ ...oundColor-expected-generation-messages.txt | 0 ...thBackGroundColor-expected-generation.docx | Bin 0 -> 12362 bytes ...thBackGroundColor-expected-validation.docx | 0 .../preWithBackGroundColor-template.docx | Bin 0 -> 12294 bytes .../preWithBackGroundColor.genconf | 2 + .../resources/html/pre/doc.html | 20 +++ .../resources/html/pre/pre-expected-ast.txt | 11 ++ .../pre/pre-expected-generation-messages.txt | 0 .../html/pre/pre-expected-generation.docx | Bin 0 -> 12298 bytes .../html/pre/pre-expected-validation.docx | 0 .../resources/html/pre/pre-template.docx | Bin 0 -> 12294 bytes .../resources/html/pre/pre.genconf | 2 + 37 files changed, 385 insertions(+), 81 deletions(-) create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-expected-ast.txt create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-expected-generation-messages.txt create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-expected-generation.docx create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-expected-validation.docx create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-template.docx create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags.genconf create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/doc.html create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/doc.html create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-expected-ast.txt create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-expected-generation-messages.txt create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-expected-generation.docx create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-expected-validation.docx create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-template.docx create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px.genconf create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/doc.html create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-expected-ast.txt create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-expected-generation-messages.txt create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-expected-generation.docx create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-expected-validation.docx create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-template.docx create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor.genconf create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/doc.html create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/pre-expected-ast.txt create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/pre-expected-generation-messages.txt create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/pre-expected-generation.docx create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/pre-expected-validation.docx create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/pre-template.docx create mode 100644 tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/pre.genconf diff --git a/plugins/org.obeonetwork.m2doc.genconf.editor/src/org/obeonetwork/m2doc/genconf/editor/command/InitializeConfigurationsHandler.java b/plugins/org.obeonetwork.m2doc.genconf.editor/src/org/obeonetwork/m2doc/genconf/editor/command/InitializeConfigurationsHandler.java index 18957ceeb..887f3c2f3 100644 --- a/plugins/org.obeonetwork.m2doc.genconf.editor/src/org/obeonetwork/m2doc/genconf/editor/command/InitializeConfigurationsHandler.java +++ b/plugins/org.obeonetwork.m2doc.genconf.editor/src/org/obeonetwork/m2doc/genconf/editor/command/InitializeConfigurationsHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016 Obeo. + * Copyright (c) 2016, 2024 Obeo. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -23,7 +23,7 @@ import org.obeonetwork.m2doc.genconf.editor.GenconfEditorLauncher; /** - * Initialize configurations for documention generation. + * Initialize configurations for documentation generation. * * @author Nathalie Lepine */ diff --git a/plugins/org.obeonetwork.m2doc.html/src/org/obeonetwork/m2doc/html/services/M2DocCSSParser.java b/plugins/org.obeonetwork.m2doc.html/src/org/obeonetwork/m2doc/html/services/M2DocCSSParser.java index 25950dc60..e0ce09e20 100644 --- a/plugins/org.obeonetwork.m2doc.html/src/org/obeonetwork/m2doc/html/services/M2DocCSSParser.java +++ b/plugins/org.obeonetwork.m2doc.html/src/org/obeonetwork/m2doc/html/services/M2DocCSSParser.java @@ -243,10 +243,16 @@ public class M2DocCSSParser extends Parser { */ private static final int ALL_FONT_MODIFIERS_MASK = 0xFFFFFFFF; + /** + * The {@link Pattern} that parse a CSS comment. + */ + private static final Pattern CSS_COMMENT_PATTERN = Pattern.compile("/\\*.*?\\*/"); + /** * The {@link Pattern} that parse a CSS class. */ - private static final Pattern CSS_CLASS_PATTERN = Pattern.compile("([_a-zA-Z0-9.:]+\\s)+\\{([^\\}]*)\\}"); + private static final Pattern CSS_CLASS_PATTERN = Pattern + .compile("(([_a-zA-Z0-9.:\\->,\\[\\]()\"=@^* #+~$\n\r]+\\s)+)\\{([^\\}]*)\\}"); /** * The class name group from {@link #CSS_CLASS_PATTERN}. @@ -256,7 +262,7 @@ public class M2DocCSSParser extends Parser { /** * The CSS styles group from {@link #CSS_CLASS_PATTERN}. */ - private static final int CSS_CLASS_PATTERN_CSS_STYLES_GROUP = 2; + private static final int CSS_CLASS_PATTERN_CSS_STYLES_GROUP = 3; /** * The bold threshold for font weight. @@ -268,6 +274,11 @@ public class M2DocCSSParser extends Parser { */ private static final String REG_EXP_SPACES = "\\s+"; + /** + * The expression separating CSS class definition. + */ + private static final String CLASS_DEFINITION_SEPARATOR = ","; + /** * The style attribute. */ @@ -283,18 +294,56 @@ public class M2DocCSSParser extends Parser { public Map>> parseClasses(String cssClasses) { Map>> res = new LinkedHashMap<>(); - final Matcher matcher = CSS_CLASS_PATTERN.matcher(cssClasses); + final String cssNoComments = CSS_COMMENT_PATTERN.matcher(cssClasses).replaceAll(""); + final String cssNoAtRule = removeAtRules(cssNoComments); + + final Matcher matcher = CSS_CLASS_PATTERN.matcher(cssNoAtRule); while (matcher.find()) { final String classNames = matcher.group(CSS_CLASS_PATTERN_NAME_GROUP); - for (String className : classNames.split(REG_EXP_SPACES)) { - final Map> styles = parseStyles(matcher.group(CSS_CLASS_PATTERN_CSS_STYLES_GROUP)); - res.computeIfAbsent(className, n -> new LinkedHashMap>()).putAll(styles); + final Map> styles = parseStyles(matcher.group(CSS_CLASS_PATTERN_CSS_STYLES_GROUP)); + for (String name : classNames.split(CLASS_DEFINITION_SEPARATOR)) { + final String className = name.trim(); + if (className != null && !className.isEmpty()) { + res.computeIfAbsent(className.trim(), n -> new LinkedHashMap>()) + .putAll(styles); + } } } return res; } + /** + * Removes @ rules (@media, @scope, ...) form the given CSS. + * + * @param cssNoComments + * the CSS without comment + * @return the CSS without @ rules + */ + private String removeAtRules(String cssNoComments) { + final StringBuilder res = new StringBuilder(); + + boolean inAtRule = false; + int curlyBraceDepth = 0; + for (int i = 0; i < cssNoComments.length(); i++) { + final char current = cssNoComments.charAt(i); + if (current == '@') { + inAtRule = true; + } else if (inAtRule) { + if (current == '{') { + curlyBraceDepth++; + } else if (current == '}') { + curlyBraceDepth--; + inAtRule = curlyBraceDepth > 0; + } + } else { + res.append(current); + } + } + + return res.toString(); + } + /** * Merges the source CSS styles to the target CSS styles. * @@ -519,9 +568,9 @@ public void setStyle(Map> cssProperties, MStyle mStyle) { final List cssFontSizes = cssProperties.get(CSS_FONT_SIZE); if (cssFontSizes != null) { for (String cssFontSize : cssFontSizes) { - final int pixelSize = getPixels(cssFontSize); - if (pixelSize != -1) { - mStyle.setFontSize(pixelSize); + final int fontSize = fontSizeToPoint(cssFontSize); + if (fontSize != -1) { + mStyle.setFontSize(fontSize); } } } @@ -560,25 +609,37 @@ public void setStyle(Map> cssProperties, MStyle mStyle) { * the {@link MCell} */ public void setStyle(Map> cssProperties, MCell mCell) { + setContainerBackgroundColor(cssProperties, mCell); + final List cssWidths = cssProperties.get(CSS_WIDTH); + if (cssWidths != null) { + for (String cssWidth : cssWidths) { + setCellWidth(mCell, cssWidth); + } + } + setContainerStyle(cssProperties, mCell); + } + + /** + * Sets the given {@link MElementContainer} {@link MElementContainer#getBackgroundColor() background color}. + * + * @param cssProperties + * the CSS properties + * @param mContainer + * the {@link MElementContainer} + */ + public void setContainerBackgroundColor(Map> cssProperties, MElementContainer mContainer) { final List cssBackgroundColors = cssProperties.get(CSS_BACKGROUND_COLOR); if (cssBackgroundColors != null) { for (String cssBackgroundColor : cssBackgroundColors) { - mCell.setBackgroundColor(htmlToColor(cssBackgroundColor)); + mContainer.setBackgroundColor(htmlToColor(cssBackgroundColor)); } } final List cssBackgrounds = cssProperties.get(CSS_BACKGROUND); if (cssBackgrounds != null) { for (String cssBackground : cssBackgrounds) { - mCell.setBackgroundColor(htmlToColor(cssBackground)); + mContainer.setBackgroundColor(htmlToColor(cssBackground)); } } - final List cssWidths = cssProperties.get(CSS_WIDTH); - if (cssWidths != null) { - for (String cssWidth : cssWidths) { - setCellWidth(mCell, cssWidth); - } - } - setContainerStyle(cssProperties, mCell); } /** diff --git a/plugins/org.obeonetwork.m2doc.html/src/org/obeonetwork/m2doc/html/services/M2DocHTMLParser.java b/plugins/org.obeonetwork.m2doc.html/src/org/obeonetwork/m2doc/html/services/M2DocHTMLParser.java index 4e1c83b2f..ce33f49cb 100644 --- a/plugins/org.obeonetwork.m2doc.html/src/org/obeonetwork/m2doc/html/services/M2DocHTMLParser.java +++ b/plugins/org.obeonetwork.m2doc.html/src/org/obeonetwork/m2doc/html/services/M2DocHTMLParser.java @@ -103,6 +103,10 @@ public class M2DocHTMLParser extends Parser { */ private static final String BR_TAG = "br"; + /** + * The {@link Set} of
+ * continue tags. + */ private static final Set BR_CONTINUE_TAGS = initializeBrContinueTags(); /** @@ -215,6 +219,11 @@ public class M2DocHTMLParser extends Parser { */ private static final String CENTER_TAG = "center"; + /** + * The pre HTML tag. + */ + private static final String PRE_TAG = "pre"; + /** * Courier New font. */ @@ -1481,7 +1490,11 @@ private String trimFirst(String text) { private String text(TextNode textNode) { final String string = textNode.getWholeText(); StringBuilder sb = new StringBuilder(string.length()); - appendNormalisedWhitespace(sb, string, false); + if (PRE_TAG.equals(textNode.parent().nodeName())) { + sb.append(string); + } else { + appendNormalisedWhitespace(sb, string, false); + } return sb.toString(); } @@ -1549,6 +1562,9 @@ private MParagraph startElement(MParagraph parent, Context context, Element elem boolean isNumbering = false; if (P_TAG.equals(nodeName)) { res = createMParagraph(context, parent, element, null, null); + } else if (PRE_TAG.equals(nodeName)) { + res = createMParagraph(context, parent, element, null, null); + CSS_PARSER.setContainerBackgroundColor(context.cssProperties, (MParagraph) res); } else if (BLOCKQUOTE_TAG.equals(nodeName)) { if (element.childNodeSize() > 0 && element.childNode(0) instanceof TextNode) { TextNode textNode = (TextNode) element.childNode(0); diff --git a/plugins/org.obeonetwork.m2doc.html/src/org/obeonetwork/m2doc/html/services/Parser.java b/plugins/org.obeonetwork.m2doc.html/src/org/obeonetwork/m2doc/html/services/Parser.java index e375bd646..5db8eedaa 100644 --- a/plugins/org.obeonetwork.m2doc.html/src/org/obeonetwork/m2doc/html/services/Parser.java +++ b/plugins/org.obeonetwork.m2doc.html/src/org/obeonetwork/m2doc/html/services/Parser.java @@ -106,7 +106,7 @@ public abstract class Parser { /** * The font size regex. */ - private static final Pattern FONT_SIZE_PATTERN = Pattern.compile("([0-9]+(\\.[0-9]+)?)(pt)?"); + private static final Pattern FONT_SIZE_PATTERN = Pattern.compile("([0-9]+(\\.[0-9]+)?)(pt|px|em|%)?"); /** * The value group for {@link #FONT_SIZE_PATTERN}. @@ -365,7 +365,7 @@ protected int fontSizeToPoint(String fontSize) { final String unit = matcher.group(FONT_SIZE_PATTERN_UNIT_GROUP); if (unit == null || "pt".equals(unit)) { - // CHECKSTYLE:OFF + // CHECKSTYLE:OFF unit conversion switch ((int) value) { case 1: res = 7; @@ -395,6 +395,12 @@ protected int fontSizeToPoint(String fontSize) { res = 36; break; } + } else if ("px".equals(unit)) { + res = (int) (0.75d * value); + } else if ("em".equals(unit)) { + res = (int) (value * Double.valueOf(DEFAULT_FONT_SIZE)); + } else if ("%".equals(unit)) { + res = (int) ((value / 100d) * Double.valueOf(DEFAULT_FONT_SIZE)); } else { res = -1; } @@ -402,7 +408,6 @@ protected int fontSizeToPoint(String fontSize) { } else { res = -1; } - // CHECKSTYLE:ON return res; } diff --git a/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/MElementContainer.java b/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/MElementContainer.java index ac541e8c3..4f38fd77e 100644 --- a/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/MElementContainer.java +++ b/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/MElementContainer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018 Obeo. + * Copyright (c) 2018, 2024 Obeo. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -11,6 +11,8 @@ *******************************************************************************/ package org.obeonetwork.m2doc.element; +import java.awt.Color; + /** * A container for {@link MElement}. * @@ -107,4 +109,19 @@ enum HAlignment { */ void setHAlignment(HAlignment alignment); + /** + * Gets the background {@link Color}. + * + * @return the background {@link Color} if any, null otherwise + */ + Color getBackgroundColor(); + + /** + * Sets the background {@link Color}. + * + * @param color + * the new background {@link Color}, null for default + */ + void setBackgroundColor(Color color); + } diff --git a/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/MTable.java b/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/MTable.java index ebd8e8bcf..e6bb045e7 100644 --- a/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/MTable.java +++ b/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/MTable.java @@ -11,7 +11,6 @@ *******************************************************************************/ package org.obeonetwork.m2doc.element; -import java.awt.Color; import java.util.Collections; import java.util.List; @@ -232,21 +231,6 @@ enum WidthType { PCT } - /** - * Gets the background {@link Color}. - * - * @return the background {@link Color} if any, null otherwise - */ - Color getBackgroundColor(); - - /** - * Sets the background {@link Color}. - * - * @param color - * the new background {@link Color} - */ - void setBackgroundColor(Color color); - /** * Gets the {@link VAlignment vertical alignment}. * diff --git a/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/impl/AbstractMElementContainer.java b/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/impl/AbstractMElementContainer.java index df1fa4349..303070633 100644 --- a/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/impl/AbstractMElementContainer.java +++ b/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/impl/AbstractMElementContainer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018 Obeo. + * Copyright (c) 2018, 2024 Obeo. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -11,6 +11,8 @@ *******************************************************************************/ package org.obeonetwork.m2doc.element.impl; +import java.awt.Color; + import org.obeonetwork.m2doc.element.MElement; import org.obeonetwork.m2doc.element.MElementContainer; @@ -31,6 +33,11 @@ public abstract class AbstractMElementContainer implements MElementContainer { */ private HAlignment hAlign; + /** + * The background {@link Color}. + */ + private Color backgroundColor; + /** * Constructor. * @@ -61,4 +68,14 @@ public void setHAlignment(HAlignment alignement) { hAlign = alignement; } + @Override + public Color getBackgroundColor() { + return backgroundColor; + } + + @Override + public void setBackgroundColor(Color color) { + backgroundColor = color; + } + } diff --git a/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/impl/MTableImpl.java b/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/impl/MTableImpl.java index 60263b10a..150657c54 100644 --- a/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/impl/MTableImpl.java +++ b/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/impl/MTableImpl.java @@ -81,11 +81,6 @@ public void setHeightRule(HeightRule rule) { */ public static class MCellImpl extends AbstractMElementContainer implements MCell { - /** - * The background {@link Color}. - */ - private Color backgroundColor; - /** * The vertical alignment. */ @@ -121,17 +116,7 @@ public static class MCellImpl extends AbstractMElementContainer implements MCell */ public MCellImpl(MElement contents, Color backgroundColor) { super(contents); - this.backgroundColor = backgroundColor; - } - - @Override - public Color getBackgroundColor() { - return backgroundColor; - } - - @Override - public void setBackgroundColor(Color backgroundColor) { - this.backgroundColor = backgroundColor; + setBackgroundColor(backgroundColor); } @Override diff --git a/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/generator/M2DocEvaluator.java b/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/generator/M2DocEvaluator.java index be8fb373e..bb5f2cd6e 100644 --- a/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/generator/M2DocEvaluator.java +++ b/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/generator/M2DocEvaluator.java @@ -118,6 +118,7 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTNumbering; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow; @@ -1172,15 +1173,68 @@ private XWPFParagraph insertMPagination(XWPFParagraph paragraph, XWPFRun run, MP private XWPFParagraph insertMParagraph(IBody body, MParagraph paragraph, XWPFRun run) { final XWPFParagraph newParagraph = createNewParagraph(body, (XWPFParagraph) run.getParent()); + setParagraphStyleName(paragraph, newParagraph); + setParagraphHAlignment(paragraph, newParagraph); + setParagraphNumbering(paragraph, newParagraph); + setParagraphMargins(paragraph, newParagraph); + setParagraphDirection(paragraph, newParagraph); + setParagraphBorders(paragraph, newParagraph); + setParagraphBackgroundColor(paragraph, newParagraph); + + return insertObject(newParagraph, paragraph.getContents(), run); + } + + /** + * Sets the style name of the given {@link XWPFParagraph} according to the given {@link MParagraph}. + * + * @param paragraph + * the {@link MParagraph} + * @param newParagraph + * the {@link XWPFParagraph} + */ + private void setParagraphStyleName(MParagraph paragraph, final XWPFParagraph newParagraph) { if (paragraph.getStyleName() != null) { newParagraph.setStyle(paragraph.getStyleName()); } + } + + /** + * Sets the horizontal alignment of the given {@link XWPFParagraph} according to the given {@link MParagraph}. + * + * @param paragraph + * the {@link MParagraph} + * @param newParagraph + * the {@link XWPFParagraph} + */ + private void setParagraphHAlignment(MParagraph paragraph, final XWPFParagraph newParagraph) { if (paragraph.getHAlignment() != null) { newParagraph.setAlignment(getHAllignment(paragraph.getHAlignment())); } + } + + /** + * Sets the numbering of the given {@link XWPFParagraph} according to the given {@link MParagraph}. + * + * @param paragraph + * the {@link MParagraph} + * @param newParagraph + * the {@link XWPFParagraph} + */ + private void setParagraphNumbering(MParagraph paragraph, final XWPFParagraph newParagraph) { if (paragraph.getNumberingID() != null) { newParagraph.setNumID(BigInteger.valueOf(paragraph.getNumberingID())); } + } + + /** + * Sets the margins of the given {@link XWPFParagraph} according to the given {@link MParagraph}. + * + * @param paragraph + * the {@link MParagraph} + * @param newParagraph + * the {@link XWPFParagraph} + */ + private void setParagraphMargins(MParagraph paragraph, final XWPFParagraph newParagraph) { if (paragraph.getNumberingLevel() != null) { newParagraph.getCTP().getPPr().getNumPr().addNewIlvl() .setVal(BigInteger.valueOf(paragraph.getNumberingLevel())); @@ -1210,32 +1264,46 @@ private XWPFParagraph insertMParagraph(IBody body, MParagraph paragraph, XWPFRun newParagraph.setSpacingAfter(paragraph.getMarginLeft() * 14); // CHECKSTYLE:ON } - if (paragraph.getTextDirection() == Dir.LTR) { - if (newParagraph.getCTP().getPPr() == null) { - newParagraph.getCTP().addNewPPr(); - } - if (newParagraph.getCTP().getPPr().getBidi() == null) { - newParagraph.getCTP().getPPr().addNewBidi(); - } - final CTOnOff value = CTOnOff.Factory.newInstance(); - final STOnOff onOff = STOnOff.Factory.newInstance(); - onOff.setStringValue("off"); - value.xsetVal(onOff); - newParagraph.getCTP().getPPr().setBidi(value); - } else if (paragraph.getTextDirection() == Dir.RTL) { - if (newParagraph.getCTP().getPPr() == null) { - newParagraph.getCTP().addNewPPr(); + } + + /** + * Sets the background color of the given {@link XWPFParagraph} according to the given {@link MParagraph}. + * + * @param paragraph + * the {@link MParagraph} + * @param newParagraph + * the {@link XWPFParagraph} + */ + private void setParagraphBackgroundColor(MParagraph paragraph, final XWPFParagraph newParagraph) { + if (paragraph.getBackgroundColor() != null) { + final CTPPr ctppr; + if (newParagraph.getCTP().getPPr() != null) { + ctppr = newParagraph.getCTP().getPPr(); + } else { + ctppr = newParagraph.getCTP().addNewPPr(); } - if (newParagraph.getCTP().getPPr().getBidi() == null) { - newParagraph.getCTP().getPPr().addNewBidi(); + final CTShd ctshd; + if (ctppr.getShd() != null) { + ctshd = ctppr.getShd(); + } else { + ctppr.addNewShd(); + ctshd = ctppr.getShd(); } - final CTOnOff value = CTOnOff.Factory.newInstance(); - final STOnOff onOff = STOnOff.Factory.newInstance(); - onOff.setStringValue("on"); - value.xsetVal(onOff); - newParagraph.getCTP().getPPr().setBidi(value); + ctshd.setVal(STShd.CLEAR); + ctshd.setColor("auto"); + ctshd.setFill(hexColor(paragraph.getBackgroundColor())); } + } + /** + * Sets the borders of the given {@link XWPFParagraph} according to the given {@link MParagraph}. + * + * @param paragraph + * the {@link MParagraph} + * @param newParagraph + * the {@link XWPFParagraph} + */ + private void setParagraphBorders(MParagraph paragraph, final XWPFParagraph newParagraph) { final MBorder leftBorder = paragraph.getLeftBorder(); if (leftBorder != null) { newParagraph.setBorderLeft(leftBorder.getType().toPOI()); @@ -1288,8 +1356,42 @@ private XWPFParagraph insertMParagraph(IBody body, MParagraph paragraph, XWPFRun .setSz(BigInteger.valueOf(size * BORDER_SIZE_CONSTANT)); } } + } - return insertObject(newParagraph, paragraph.getContents(), run); + /** + * Sets the direction of the given {@link XWPFParagraph} according to the given {@link MParagraph}. + * + * @param paragraph + * the {@link MParagraph} + * @param newParagraph + * the {@link XWPFParagraph} + */ + private void setParagraphDirection(MParagraph paragraph, final XWPFParagraph newParagraph) { + if (paragraph.getTextDirection() == Dir.LTR) { + if (newParagraph.getCTP().getPPr() == null) { + newParagraph.getCTP().addNewPPr(); + } + if (newParagraph.getCTP().getPPr().getBidi() == null) { + newParagraph.getCTP().getPPr().addNewBidi(); + } + final CTOnOff value = CTOnOff.Factory.newInstance(); + final STOnOff onOff = STOnOff.Factory.newInstance(); + onOff.setStringValue("off"); + value.xsetVal(onOff); + newParagraph.getCTP().getPPr().setBidi(value); + } else if (paragraph.getTextDirection() == Dir.RTL) { + if (newParagraph.getCTP().getPPr() == null) { + newParagraph.getCTP().addNewPPr(); + } + if (newParagraph.getCTP().getPPr().getBidi() == null) { + newParagraph.getCTP().getPPr().addNewBidi(); + } + final CTOnOff value = CTOnOff.Factory.newInstance(); + final STOnOff onOff = STOnOff.Factory.newInstance(); + onOff.setStringValue("on"); + value.xsetVal(onOff); + newParagraph.getCTP().getPPr().setBidi(value); + } } /** diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-expected-ast.txt b/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-expected-ast.txt new file mode 100644 index 000000000..3f0e1f694 --- /dev/null +++ b/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-expected-ast.txt @@ -0,0 +1,11 @@ + +=== HEADER === + +=== BODY === + + A simple demonstration of a query : + [query: .fromHTMLURI('doc.html')] + End of demonstration. +=== FOOTER === + +=== TEMPLATES === \ No newline at end of file diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-expected-generation-messages.txt b/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-expected-generation-messages.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-expected-generation.docx b/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-expected-generation.docx new file mode 100644 index 0000000000000000000000000000000000000000..ec7c63065846c90b8836d07ade61dcd3a6792745 GIT binary patch literal 12277 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 Me5d%VQGNXTKgW49u>b%7 literal 0 HcmV?d00001 diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-expected-validation.docx b/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-expected-validation.docx new file mode 100644 index 000000000..e69de29bb diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-template.docx b/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/classMultiTags-template.docx new file mode 100644 index 0000000000000000000000000000000000000000..6cd09972fe0276716e182f8c4b8c9c202c3de243 GIT binary patch literal 12294 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%0AD|Ll6eqceLVJFgg`CN55t*^W_(p55$=C2UN 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 + diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/doc.html b/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/doc.html new file mode 100644 index 000000000..3e067b6c9 --- /dev/null +++ b/tests/org.obeonetwork.m2doc.html.tests/resources/css/classMultiTags/doc.html @@ -0,0 +1,16 @@ + + + + + +

This is a heading

+

This is a paragraph.

+ + + + diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/doc.html b/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/doc.html new file mode 100644 index 000000000..3d63d92f4 --- /dev/null +++ b/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/doc.html @@ -0,0 +1,9 @@ + + + + +

Some normal text Some CSS styled text Some normal text

+ + + + diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-expected-ast.txt b/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-expected-ast.txt new file mode 100644 index 000000000..3f0e1f694 --- /dev/null +++ b/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-expected-ast.txt @@ -0,0 +1,11 @@ + +=== HEADER === + +=== BODY === + + A simple demonstration of a query : + [query: .fromHTMLURI('doc.html')] + End of demonstration. +=== FOOTER === + +=== TEMPLATES === \ No newline at end of file diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-expected-generation-messages.txt b/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-expected-generation-messages.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-expected-generation.docx b/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-expected-generation.docx new file mode 100644 index 0000000000000000000000000000000000000000..1efd22dcbbad10ffa8f2d2fd4f3e56d586aa5e1b GIT binary patch literal 12257 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 literal 0 HcmV?d00001 diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-expected-validation.docx b/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-expected-validation.docx new file mode 100644 index 000000000..e69de29bb diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-template.docx b/tests/org.obeonetwork.m2doc.html.tests/resources/css/font-size_px/font-size_px-template.docx new file mode 100644 index 0000000000000000000000000000000000000000..119c94fca000e5f67b08632b3df03f444254eba4 GIT binary patch literal 12294 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%0AD|Ll6eqceLVJFgg`CN55t*^W_(p55$=C2UN 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 + diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/doc.html b/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/doc.html new file mode 100644 index 000000000..62f10fa1d --- /dev/null +++ b/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/doc.html @@ -0,0 +1,20 @@ + + + + +

Before some code

+
+	    if Toto == Titi
+	    {
+	        MyVar=True;
+	    }
+	    else
+	    {
+	        MyVar=False;
+	    }
+	
+

After some code

+ + + + diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-expected-ast.txt b/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-expected-ast.txt new file mode 100644 index 000000000..3f0e1f694 --- /dev/null +++ b/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-expected-ast.txt @@ -0,0 +1,11 @@ + +=== HEADER === + +=== BODY === + + A simple demonstration of a query : + [query: .fromHTMLURI('doc.html')] + End of demonstration. +=== FOOTER === + +=== TEMPLATES === \ No newline at end of file diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-expected-generation-messages.txt b/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-expected-generation-messages.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-expected-generation.docx b/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-expected-generation.docx new file mode 100644 index 0000000000000000000000000000000000000000..16e050544bb79bcef84a19f8e72e8a87f3a7f5ea GIT binary patch literal 12362 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 literal 0 HcmV?d00001 diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-expected-validation.docx b/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-expected-validation.docx new file mode 100644 index 000000000..e69de29bb diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-template.docx b/tests/org.obeonetwork.m2doc.html.tests/resources/css/preWithBackGroundColor/preWithBackGroundColor-template.docx new file mode 100644 index 0000000000000000000000000000000000000000..119c94fca000e5f67b08632b3df03f444254eba4 GIT binary patch literal 12294 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%0AD|Ll6eqceLVJFgg`CN55t*^W_(p55$=C2UN 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 + diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/doc.html b/tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/doc.html new file mode 100644 index 000000000..083d66ee8 --- /dev/null +++ b/tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/doc.html @@ -0,0 +1,20 @@ + + + + +

Before some code

+
+	    if Toto == Titi
+	    {
+	        MyVar=True;
+	    }
+	    else
+	    {
+	        MyVar=False;
+	    }
+	
+

After some code

+ + + + diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/pre-expected-ast.txt b/tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/pre-expected-ast.txt new file mode 100644 index 000000000..3f0e1f694 --- /dev/null +++ b/tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/pre-expected-ast.txt @@ -0,0 +1,11 @@ + +=== HEADER === + +=== BODY === + + A simple demonstration of a query : + [query: .fromHTMLURI('doc.html')] + End of demonstration. +=== FOOTER === + +=== TEMPLATES === \ No newline at end of file diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/pre-expected-generation-messages.txt b/tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/pre-expected-generation-messages.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/pre-expected-generation.docx b/tests/org.obeonetwork.m2doc.html.tests/resources/html/pre/pre-expected-generation.docx new file mode 100644 index 0000000000000000000000000000000000000000..a1dfed69507fbb99764d3d9e453041c07332f116 GIT binary patch literal 12298 zcmbVy1ymi&(r&QeF2UX1Htz23?(Ux8P6+Pq?he775Zv9}-2*&0_nv!l&-(xK)_b+r znwi}_U-g=*uCAJ%Pfij96y*a11jGl5FMjGDeiP)kYfV908z*BMCtan_cE*m{v~Jc` z^-4oF-Sh~*;(yFhGF;0kqxuTs4WJcYgM_sKm3j^8=yCJ1SQt#NWhDp1YXi*<*C$)Vb8bX3947h-k*yX~41&@{XiIXpuBuOO-A{&iO z^G7W{2f`+Zk5s|8-URDl zgn6FkBswFPmvoiyWbv$S3ss8uHT{XMn-;`gN4&bmZNI9W$WcrBgh)fqK>8f3#rkZken?hmzC z6A0xA6U%;Qm%Q_cAaWz}-7Vtdt~7LLj`5zM?Yi?5a|^gKXl_q55k?5i(adF_NL;i0 z$IQ@@5H%PW!UO&z18^ucOc|7;ye(|GL#8{9>=k|4FB1)}9IwWm42srizOD9-a+<^3 zUwvIiWjGt2_~cWdDsm%*5_=uyK1)XOwjdvn@$$(oQF~dJ{BYcDHfNuDwHi�)gZ} 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%0AD|Ll6eqceLVJFgg`CN55t*^W_(p55$=C2UN z1X6%$mN1U1M}1A2YWumApmabRR-);rFa^9CrRfD0;$_74c;vcYeJ;;{W!#!;ZvLjw zGRo3|b+)2yBQ$o>cfNl-K4oCV>~)|8IR4bm9Eb0cV| ztDvk(J8&N0a)0ce>g`_2>XY4;7!+6EJ=pkuLhDX;Sz$y>ePuNG9Wu=Ns@DvylNm0k zuJNL7=z==%tm3A}3w2rDdWnBgm=(6Wu2G@h2=(m8-Bmf5e3or??VuY|3=i%WAs3ht z8COwV^>G+$p!Z&<@FYOgd;RflcMAEbU#2+AY^;+pDPVYd>y*u9A+{h z(k!|5&S>voAbOwsY#uR-44*51O4=A!Oh&?0a<66Rtyy9Laeo1-3Zi)dYGBKh3jK^x zOCWsMddBFJzL@hW+&rRrfgtE&36Cq3E9j3B{N~2Fhsoq0kF-qgA0o2o;J{~yr*`$!Y4yu(t7jWG)`=U=jC<&KF?uP7*Q+I^_*#xN}1 zlvSv>%AeXH<|NwzQEa%fq$>o5w84yG)5*h!E~gleJ$pH9CvNx7_n0wNG8AXQ^mEcc zUW+V9nWfT8AznO4#O_m#ak?>}tz#BT$67I)s= z-_YP%n{A@2zCPeOA;1RRuLq!bsAxZnnk!p z0+vj)Vmj6@Y0=xU5jnH)Bf48D!4D0~FvkQ;S`+nB0w5|DV*R4i7JMy+Q$?Y~x;Gpt z%kr{8Q3&WCI83Df1Q`#R{|O2KB`XCQ(0S99jG4b!$ohr+bU~2@y9u%!Y!hu;6W`Xc z3XIcOs=<8Fx>VGDBso{rc0o~xxyib;DqE{jIc0)I3)thEiBwe2`vI!eM9Q_)VL>rr z`c%|qI61v=z(h**y`g-%*}7E4QoGSO1v7<)MI!3G(={h^kFD&%xA~Rile9Nd(Tj1$r}U;%`3KC!{w9-rEPmA}Tzy@I^g%a~8* zaaT|uK3v)Tw|W`%&wAO}+{DI&?vEqG`yTv>hD^+oFnR~k1)gX}Q*;9RXjOV8>q23$ z>(Y#^=JZxy_WV>N&+LeCQ%l}$SWpmo7)VmHe~_PKWnWR|Jq5IgeBle2t}ihLS;C1e zmasyG&?W}o*6j zexx_x(z+r$mv%7xVg3qV(F{`Sj3w(<`OC*2bSW-wl(t2>16Ge#Quk4=ttYmL=M5Yk z9YJ=gm^UYuka{^=D<-c?OIfl7L2i5Z14tci1_cUqTTJrb&ABxNzuaW1n0~}?bnS<* z18(Ec`QVgTSy`pct6Dy*8FXep0m84UU11(MO-vwk3{(|Z;GfIR;>QL#d%CTZt(`7u zLvR3@UXpxc5RgZ*8~aJl7jSXSz}a!PeZM+Bcz1@k_B4d=0ygMRd-H2){Ke;<;qmB# zZ5+?bU_c7z^(iLj*X{70Y3`)|c!$^ZV1n3q$K&<*86Nuj5-_|oAV*X<|7aWHvdlEx#DhZ zRo6&ie2pR|-BxW++=LM}1CBdv`Ood`Zec)CkQ7)F9K=@15i*4gBU@kL_NfYtwlVb+ zZHBN(p}e!Ppl)yG(RUo)!ytCaNZu*-=~}$+h|~&^x6O>4-NQKX(Rpy}x*Dfii6wP6 zw=$SPyI}FF7|=>m2)d_(kXVLDpJ4Ph55oq?5ZMa4mXAnnbAOoW@%_S6xMk&Tm*%Mx zpDwqLxL)4q`C`Y*b++!%CYDRE8h6Fz=z}%nuEJNH6Te4oeS~!)EmQ9}$5R-IQvyje zXFRZm)N|!Yp9agAw?N7Vx$%`=tp^O)Y);(%22o{0APkv)%NPwjz3GEXKFg>8f{dy;5j)xm9*-Vn8Tq`@T<=j?QY zy1UGxT>4d+#IprQLmM}b==?|JH?&Lp$*&1O5EPpq0q?hl6IsF6oftR~anid_Ki zM5q@zL^3>}I-XW@WZ$dQ7L#=pD7m%p0|hHq%ELF7Lv`p7PE(r6sa6sJ8y{Itl6c|5 z4-LARI<+ah&?3+LDiIe3)1=P4G_4bud-w6o>yXNom&^`+H{{T4A!3?kat;>^t9q{o z1Fu2FsZZr@I%W|xnu7cpc(b_2=<3-f=S=8k!dmRJK0&q>+6h|*w%@o6O|$Y$XKPe? zN^VR3>d~^7?YL zUOm$@Jn;3r(?sRJHc@InD_>2%kwJ^F{##N&`7J`%hBO0FMAtG3R)VSLeR>EfYgQSU)GasJk;5_D9;p0loFWNl^QAWSXTYjKv^&p zLX(5h=sFYeYG^o}wwGPVrfNNeee#X2+H-2AEt}^Akhd?}7k{v> zfPhgx{LOd%opJk4Tl-J>AK1_GQva#ocP{EXG52pteH-pKn(jY=zjGPisj7cV=Nq~1 zFZ$fSiL3ua|4zhv|0e&pG{1en{|o&m`|+Rf--&4d`PdvEe~16Y-TSA4-hBQ~u|J zpuqhb|2x&;pYY$Sw)efvzr`5yPxxOuoBss=9^LPS-QSW(@^A1z%e;T8_ +