blob: ade7974981901fcde84d3e110ef28ff278249e2e [file] [log] [blame]
/*******************************************************************************
* 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 2010-06-01
* Jan Källman License changed GPL-->LGPL 2011-12-16
*******************************************************************************/
using System.Collections.Immutable;
using System.Xml;
namespace OfficeOpenXml.Drawing.Vml;
/// <summary>
/// Horizontal Alingment
/// </summary>
public enum eTextAlignHorizontalVml {
Left,
Center,
Right,
}
/// <summary>
/// Vertical Alingment
/// </summary>
public enum eTextAlignVerticalVml {
Top,
Center,
Bottom,
}
/// <summary>
/// Linestyle
/// </summary>
public enum eLineStyleVml {
Solid,
Round,
Square,
Dash,
DashDot,
LongDash,
LongDashDot,
LongDashDotDot,
}
/// <summary>
/// Drawing object used for comments
/// </summary>
public class ExcelVmlDrawingBase : XmlHelper {
protected override ImmutableArray<string> SchemaNodeOrder { get; } = [
"fill",
"stroke",
"shadow",
"path",
"textbox",
"ClientData",
"MoveWithCells",
"SizeWithCells",
"Anchor",
"Locked",
"AutoFill",
"LockText",
"TextHAlign",
"TextVAlign",
"Row",
"Column",
"Visible",
];
internal ExcelVmlDrawingBase(XmlNode topNode, XmlNamespaceManager ns)
: base(ns, topNode) {}
public string Id {
get => GetXmlNodeString("@id");
set => SetXmlNodeString("@id", value);
}
/// <summary>
/// Alternative text to be displayed instead of a graphic.
/// </summary>
public string AlternativeText {
get => GetXmlNodeString("@alt");
set => SetXmlNodeString("@alt", value);
}
protected bool GetStyle(string style, string key, out string value) {
string[] styles = style.Split(';');
foreach (string s in styles) {
if (s.IndexOf(':') > 0) {
string[] split = s.Split(':');
if (split[0] == key) {
value = split[1];
return true;
}
} else if (s == key) {
value = "";
return true;
}
}
value = "";
return false;
}
protected string SetStyle(string style, string key, string value) {
string[] styles = style.Split(';');
string newStyle = "";
bool changed = false;
foreach (string s in styles) {
string[] split = s.Split(':');
if (split[0].Trim() == key) {
if (value.Trim()
!= "") //If blank remove the item
{
newStyle += key + ':' + value;
}
changed = true;
} else {
newStyle += s;
}
newStyle += ';';
}
if (!changed) {
newStyle += key + ':' + value;
} else {
newStyle = style.Substring(0, style.Length - 1);
}
return newStyle;
}
}