1 /******************************************************************* 2 3 Part of the Fritzing project - http://fritzing.org 4 Copyright (c) 2007-2014 Fachhochschule Potsdam - http://fh-potsdam.de 5 6 Fritzing is free software: you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 Fritzing is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with Fritzing. If not, see <http://www.gnu.org/licenses/>. 18 19 ******************************************************************** 20 21 $Revision: 6984 $: 22 $Author: irascibl@gmail.com $: 23 $Date: 2013-04-22 23:44:56 +0200 (Mo, 22. Apr 2013) $ 24 25 ********************************************************************/ 26 27 #ifndef TEXTUTILS_H 28 #define TEXTUTILS_H 29 30 #include <QPointF> 31 #include <QDomElement> 32 #include <QSet> 33 #include <QMatrix> 34 #include <QTransform> 35 #include <QXmlStreamReader> 36 37 typedef QString (*CopyPinFunction)(int pin, const QString & argString, void * userData); 38 typedef QString (*MultiplyPinFunction)(int pin, double increment, double value); 39 40 class TextUtils 41 { 42 43 public: 44 static QSet<QString> getRegexpCaptures(const QString &pattern, const QString &textToSearchIn); 45 static QDomElement findElementWithAttribute(QDomElement element, const QString & attributeName, const QString & attributeValue); 46 static void findElementsWithAttribute(QDomElement & element, const QString & att, QList<QDomElement> & elements); 47 static double convertToInches(const QString & string, bool * ok, bool isIllustrator); 48 static double convertToInches(const QString & string); 49 static QString convertToPowerPrefix(double); 50 static double convertFromPowerPrefix(const QString & val, const QString & symbol); 51 static double convertFromPowerPrefixU(QString & val, const QString & symbol); 52 53 static QString replaceTextElement(const QString & svg, const QString & id, const QString & newValue); 54 static QByteArray replaceTextElement(const QByteArray & svg, const QString & id, const QString & newValue); 55 static QString replaceTextElements(const QString & svg, const QHash<QString, QString> &); 56 static bool squashElement(QDomDocument &, const QString & elementName, const QString & attName, const QRegExp & matchContent); 57 static QString mergeSvg(const QString & svg1, const QString & svg2, const QString & id, bool flip); 58 static QString mergeSvgFinish(QDomDocument & doc); 59 static bool mergeSvg(QDomDocument & doc1, const QString & svg, const QString & id); 60 static QString makeSVGHeader(double printerscale, double dpi, double width, double height); 61 static bool isIllustratorFile(const QString &fileContent); 62 static bool isIllustratorFile(const QByteArray &fileContent); 63 static bool isIllustratorDoc(const QDomDocument & doc); 64 static QString removeXMLEntities(QString svgContent); 65 static bool cleanSodipodi(QString &bytes); 66 static bool fixPixelDimensionsIn(QString &fileContent); 67 static bool addCopper1(const QString & filename, QDomDocument & doc, const QString & srcAtt, const QString & destAtt); 68 static void setSVGTransform(QDomElement &, QMatrix &); 69 static QString svgMatrix(const QMatrix &); 70 static QString svgMatrix(const QTransform &); 71 static QString svgTransform(const QString & svg, QTransform & transform, bool translate, const QString extra); 72 static bool getSvgSizes(QDomDocument & doc, double & sWidth, double & sHeight, double & vbWidth, double & vbHeight); 73 static bool findText(const QDomNode & node, QString & text); 74 static QString stripNonValidXMLCharacters(const QString & str); 75 static QString convertExtendedChars(const QString & str); 76 static QString escapeAnd(const QString &); 77 static QMatrix elementToMatrix(QDomElement & element); 78 static QMatrix transformStringToMatrix(const QString & transform); 79 static QList<double> getTransformFloats(QDomElement & element); 80 static QList<double> getTransformFloats(const QString & transform); 81 static QString svgNSOnly(QString svgContent); 82 static QString killXMLNS(QString svgContent); 83 static void gWrap(QDomDocument & domDocument, const QHash<QString, QString> & attributes); 84 static void slamStrokeAndFill(QDomElement &, const QString & stroke, const QString & strokeWidth, const QString & fill); 85 static QString slamStrokeAndFill(const QString & svg, const QString & stroke, const QString & strokeWidth, const QString & fill); 86 static QString incrementTemplate(const QString & filename, int pins, double unitIncrement, MultiplyPinFunction, CopyPinFunction, void * userData); 87 static QString incrementTemplateString(const QString & templateString, int pins, double increment, MultiplyPinFunction, CopyPinFunction, void * userData); 88 static QString standardCopyPinFunction(int pin, const QString & argString, void * userData); 89 static QString standardMultiplyPinFunction(int pin, double increment, double value); 90 static QString noCopyPinFunction(int pin, const QString & argString, void * userData); 91 static QString incMultiplyPinFunction(int pin, double increment, double value); 92 static QString incCopyPinFunction(int pin, const QString & argString, void * userData); 93 static QString negIncCopyPinFunction(int pin, const QString & argString, void * userData); 94 static double getViewBoxCoord(const QString & svg, int coord); 95 static QString makeLineSVG(QPointF p1, QPointF p2, double width, QString colorString, double dpi, double printerScale, bool blackOnly, bool dashed, const QVector<qreal> &); 96 static QString makeCubicBezierSVG(const QPolygonF & controlPoints, double width, QString colorString, double dpi, double printerScale, bool blackOnly, bool dashed, const QVector<qreal> &); 97 static QString makeRectSVG(QRectF r, QPointF offset, double dpi, double printerscale); 98 static QString makePolySVG(const QPolygonF & poly, QPointF offset, double width, QString colorString, double dpi, double printerScale, bool blackOnly); 99 static QPolygonF polygonFromElement(QDomElement & element); 100 static QString pointToSvgString(QPointF p, QPointF offset, double dpi, double printerScale); 101 static void replaceChildText(QDomNode & node, const QString & text); 102 static void replaceElementChildText(QDomElement & root, const QString & elementName, const QString & text); 103 static QString removeSVGHeader(QString & string); 104 //static QString getMacAddress(); 105 static QString expandAndFill(const QString & svg, const QString & color, double expandBy); 106 static void expandAndFillAux(QDomElement &, const QString & color, double expandBy); 107 static bool writeUtf8(const QString & fileName, const QString & text); 108 static int getPinsAndSpacing(const QString & expectedFileName, QString & spacingString); 109 static QSizeF parseForWidthAndHeight(QXmlStreamReader &, QRectF & viewBox, bool getViewBox); 110 static QSizeF parseForWidthAndHeight(QXmlStreamReader &); 111 static QSizeF parseForWidthAndHeight(const QString & svg, QRectF & viewBox, bool getViewBox); 112 static QSizeF parseForWidthAndHeight(const QString & svg); 113 static void gornTree(QDomDocument &); 114 static bool elevateTransform(QDomElement &); 115 static bool fixMuch(QString &svg, bool fixStrokeWidth); 116 static bool fixInternalUnits(QString & svg); 117 static bool fixFonts(QString & svg, const QString & destFont, bool & reallyFixed); 118 static void fixStyleAttribute(QDomElement & element); 119 static QString parseForModuleID(const QString & fzp); 120 static QString getRandText(); 121 static bool ensureViewBox(QDomDocument doc, double dpi, QRectF & rect, bool toInches, double & w, double & h, bool getwh); 122 static QString findAnchor(const QDomElement & text); 123 static double getStrokeWidth(QDomElement &, double defaultValue); 124 static void resplit(QStringList & names, const QString & split); 125 126 public: 127 static const QRegExp FindWhitespace; 128 static const QString SMDFlipSuffix; 129 static const QString MicroSymbol; 130 static const ushort MicroSymbolCode; 131 static const QString PowerPrefixesString; 132 static const QString CreatedWithFritzingString; 133 static const QString CreatedWithFritzingXmlComment; 134 static void collectLeaves(QDomElement & element, int & index, QVector<QDomElement> & leaves); 135 static void collectLeaves(QDomElement & element, QList<QDomElement> & leaves); 136 static const QRegExp floatingPointMatcher; 137 static const QString RegexFloatDetector; 138 static const QString AdobeIllustratorIdentifier; 139 140 protected: 141 static bool pxToInches(QDomElement &elem, const QString &attrName, bool isIllustrator); 142 static void squashNotElement(QDomElement & element, const QString & elementName, const QString & attName, const QRegExp & matchContent, bool & result); 143 static void initPowerPrefixes(); 144 static QDomElement copyText(QDomDocument & svgDom, QDomElement & parent, QDomElement & text, const QString & defaultX, const QString & defaultY, bool copyAttributes); 145 static void gornTreeAux(QDomElement &); 146 static bool noPatternAux(QDomDocument & svgDom, const QString & tag); 147 static bool noUseAux(QDomDocument & svgDom); 148 static bool tspanRemoveAux(QDomDocument & svgDom); 149 static void fixStyleAttribute(QDomElement & element, QString & style, const QString & attributeName); 150 static bool fixStrokeWidth(QDomDocument & svgDoc); 151 static bool fixViewBox(QDomElement & root); 152 static void chopNotDigits(QString &); 153 static void collectTransforms(QDomElement & root, QList<QDomElement> & transforms); 154 155 }; 156 157 #endif 158