|  | /******************************************************************************* | 
|  | * You may amend and distribute as you like, but don't remove this header! | 
|  | * | 
|  | * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets. | 
|  | * See http://www.codeplex.com/EPPlus for details. | 
|  | * | 
|  | * Copyright (C) 2011  Jan Källman | 
|  | * | 
|  | * This library is free software; you can redistribute it and/or | 
|  | * modify it under the terms of the GNU Lesser General Public | 
|  | * License as published by the Free Software Foundation; either | 
|  | * version 2.1 of the License, or (at your option) any later version. | 
|  |  | 
|  | * This library is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 
|  | * See the GNU Lesser General Public License for more details. | 
|  | * | 
|  | * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php | 
|  | * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html | 
|  | * | 
|  | * All code and executables are provided "as is" with no warranty either express or implied. | 
|  | * The author accepts no liability for any damage or loss of business that this product may cause. | 
|  | * | 
|  | * Code change notes: | 
|  | * | 
|  | * Author							Change						Date | 
|  | * ****************************************************************************** | 
|  | * Jan Källman		                Initial Release		        2009-10-01 | 
|  | * Jan Källman		License changed GPL-->LGPL 2011-12-16 | 
|  | *******************************************************************************/ | 
|  | using System; | 
|  | using System.Collections.Generic; | 
|  | using System.Globalization; | 
|  | using System.Text; | 
|  | using System.Xml; | 
|  | using OfficeOpenXml.Drawing; | 
|  | using System.Drawing; | 
|  |  | 
|  | namespace OfficeOpenXml.Style | 
|  | { | 
|  | /// <summary> | 
|  | /// Linestyle | 
|  | /// </summary> | 
|  | public enum eUnderLineType | 
|  | { | 
|  | Dash, | 
|  | DashHeavy, | 
|  | DashLong, | 
|  | DashLongHeavy, | 
|  | Double, | 
|  | DotDash, | 
|  | DotDashHeavy, | 
|  | DotDotDash, | 
|  | DotDotDashHeavy, | 
|  | Dotted, | 
|  | DottedHeavy, | 
|  | Heavy, | 
|  | None, | 
|  | Single, | 
|  | Wavy, | 
|  | WavyDbl, | 
|  | WavyHeavy, | 
|  | Words | 
|  | } | 
|  | /// <summary> | 
|  | /// Type of font strike | 
|  | /// </summary> | 
|  | public enum eStrikeType | 
|  | { | 
|  | Double, | 
|  | No, | 
|  | Single | 
|  | } | 
|  | /// <summary> | 
|  | /// Used by Rich-text and Paragraphs. | 
|  | /// </summary> | 
|  | public class ExcelTextFont : XmlHelper | 
|  | { | 
|  | string _path; | 
|  | XmlNode _rootNode; | 
|  | internal ExcelTextFont(XmlNamespaceManager namespaceManager, XmlNode rootNode, string path, string[] schemaNodeOrder) | 
|  | : base(namespaceManager, rootNode) | 
|  | { | 
|  | SchemaNodeOrder = schemaNodeOrder; | 
|  | _rootNode = rootNode; | 
|  | if (path != "") | 
|  | { | 
|  | XmlNode node = rootNode.SelectSingleNode(path, namespaceManager); | 
|  | if (node != null) | 
|  | { | 
|  | TopNode = node; | 
|  | } | 
|  | } | 
|  | _path = path; | 
|  | } | 
|  | string _fontLatinPath = "a:latin/@typeface"; | 
|  | public string LatinFont | 
|  | { | 
|  | get | 
|  | { | 
|  | return GetXmlNodeString(_fontLatinPath); | 
|  | } | 
|  | set | 
|  | { | 
|  | CreateTopNode(); | 
|  | SetXmlNodeString(_fontLatinPath, value); | 
|  | } | 
|  | } | 
|  |  | 
|  | protected internal void CreateTopNode() | 
|  | { | 
|  | if (_path!="" && TopNode == _rootNode) | 
|  | { | 
|  | CreateNode(_path); | 
|  | TopNode = _rootNode.SelectSingleNode(_path, NameSpaceManager); | 
|  | } | 
|  | } | 
|  | string _fontCsPath = "a:cs/@typeface"; | 
|  | public string ComplexFont | 
|  | { | 
|  | get | 
|  | { | 
|  | return GetXmlNodeString(_fontCsPath); | 
|  | } | 
|  | set | 
|  | { | 
|  | CreateTopNode(); | 
|  | SetXmlNodeString(_fontCsPath, value); | 
|  | } | 
|  | } | 
|  | string _boldPath = "@b"; | 
|  | public bool Bold | 
|  | { | 
|  | get | 
|  | { | 
|  | return GetXmlNodeBool(_boldPath); | 
|  | } | 
|  | set | 
|  | { | 
|  | CreateTopNode(); | 
|  | SetXmlNodeString(_boldPath, value ? "1" : "0"); | 
|  | } | 
|  | } | 
|  | string _underLinePath = "@u"; | 
|  | public eUnderLineType UnderLine | 
|  | { | 
|  | get | 
|  | { | 
|  | return TranslateUnderline(GetXmlNodeString(_underLinePath)); | 
|  | } | 
|  | set | 
|  | { | 
|  | CreateTopNode(); | 
|  | SetXmlNodeString(_underLinePath, TranslateUnderlineText(value)); | 
|  | } | 
|  | } | 
|  | string _underLineColorPath = "a:uFill/a:solidFill/a:srgbClr/@val"; | 
|  | public Color UnderLineColor | 
|  | { | 
|  | get | 
|  | { | 
|  | string col = GetXmlNodeString(_underLineColorPath); | 
|  | if (col == "") | 
|  | { | 
|  | return Color.Empty; | 
|  | } | 
|  | else | 
|  | { | 
|  | return Color.FromArgb(int.Parse(col, System.Globalization.NumberStyles.AllowHexSpecifier)); | 
|  | } | 
|  | } | 
|  | set | 
|  | { | 
|  | CreateTopNode(); | 
|  | SetXmlNodeString(_underLineColorPath, value.ToArgb().ToString("X").Substring(2, 6)); | 
|  | } | 
|  | } | 
|  | string _italicPath = "@i"; | 
|  | public bool Italic | 
|  | { | 
|  | get | 
|  | { | 
|  | return GetXmlNodeBool(_italicPath); | 
|  | } | 
|  | set | 
|  | { | 
|  | CreateTopNode(); | 
|  | SetXmlNodeString(_italicPath, value ? "1" : "0"); | 
|  | } | 
|  | } | 
|  | string _strikePath = "@strike"; | 
|  | public eStrikeType Strike | 
|  | { | 
|  | get | 
|  | { | 
|  | return TranslateStrike(GetXmlNodeString(_strikePath)); | 
|  | } | 
|  | set | 
|  | { | 
|  | CreateTopNode(); | 
|  | SetXmlNodeString(_strikePath, TranslateStrikeText(value)); | 
|  | } | 
|  | } | 
|  | string _sizePath = "@sz"; | 
|  | public float Size | 
|  | { | 
|  | get | 
|  | { | 
|  | return GetXmlNodeInt(_sizePath) / 100; | 
|  | } | 
|  | set | 
|  | { | 
|  | CreateTopNode(); | 
|  | SetXmlNodeString(_sizePath, ((int)(value * 100)).ToString()); | 
|  | } | 
|  | } | 
|  | string _colorPath = "a:solidFill/a:srgbClr/@val"; | 
|  | public Color Color | 
|  | { | 
|  | get | 
|  | { | 
|  | string col = GetXmlNodeString(_colorPath); | 
|  | if (col == "") | 
|  | { | 
|  | return Color.Empty; | 
|  | } | 
|  | else | 
|  | { | 
|  | return Color.FromArgb(int.Parse(col, System.Globalization.NumberStyles.AllowHexSpecifier)); | 
|  | } | 
|  | } | 
|  | set | 
|  | { | 
|  | CreateTopNode(); | 
|  | SetXmlNodeString(_colorPath, value.ToArgb().ToString("X").Substring(2, 6)); | 
|  | } | 
|  | } | 
|  | #region "Translate methods" | 
|  | private eUnderLineType TranslateUnderline(string text) | 
|  | { | 
|  | switch (text) | 
|  | { | 
|  | case "sng": | 
|  | return eUnderLineType.Single; | 
|  | case "dbl": | 
|  | return eUnderLineType.Double; | 
|  | case "": | 
|  | return eUnderLineType.None; | 
|  | default: | 
|  | return (eUnderLineType)Enum.Parse(typeof(eUnderLineType), text); | 
|  | } | 
|  | } | 
|  | private string TranslateUnderlineText(eUnderLineType value) | 
|  | { | 
|  | switch (value) | 
|  | { | 
|  | case eUnderLineType.Single: | 
|  | return "sng"; | 
|  | case eUnderLineType.Double: | 
|  | return "dbl"; | 
|  | default: | 
|  | string ret = value.ToString(); | 
|  | return ret.Substring(0, 1).ToLower(CultureInfo.InvariantCulture) + ret.Substring(1, ret.Length - 1); | 
|  | } | 
|  | } | 
|  | private eStrikeType TranslateStrike(string text) | 
|  | { | 
|  | switch (text) | 
|  | { | 
|  | case "dblStrike": | 
|  | return eStrikeType.Double; | 
|  | case "sngStrike": | 
|  | return eStrikeType.Single; | 
|  | default: | 
|  | return eStrikeType.No; | 
|  | } | 
|  | } | 
|  | private string TranslateStrikeText(eStrikeType value) | 
|  | { | 
|  | switch (value) | 
|  | { | 
|  | case eStrikeType.Single: | 
|  | return "sngStrike"; | 
|  | case eStrikeType.Double: | 
|  | return "dblStrike"; | 
|  | default: | 
|  | return "noStrike"; | 
|  | } | 
|  | } | 
|  | #endregion | 
|  | /// <summary> | 
|  | /// Set the font style from a font object | 
|  | /// </summary> | 
|  | /// <param name="Font"></param> | 
|  | public void SetFromFont(Font Font) | 
|  | { | 
|  | LatinFont = Font.Name; | 
|  | ComplexFont = Font.Name; | 
|  | Size = Font.Size; | 
|  | if (Font.Bold) Bold = Font.Bold; | 
|  | if (Font.Italic) Italic = Font.Italic; | 
|  | if (Font.Underline) UnderLine = eUnderLineType.Single; | 
|  | if (Font.Strikeout) Strike = eStrikeType.Single; | 
|  | } | 
|  | } | 
|  | } |