mirror of
https://github.com/wmjordan/PDFPatcher.git
synced 2026-10-19 06:21:06 +08:00
106 lines
2.8 KiB
C#
106 lines
2.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using PDFPatcher.Common;
|
|
|
|
namespace PDFPatcher.Model.PdfPath
|
|
{
|
|
public static class PathValue
|
|
{
|
|
public static double ToNumber(DocumentObject source, IPathValue value) {
|
|
double d;
|
|
switch (value.ValueType) {
|
|
case PathValueType.Expression:
|
|
var p = (value as IPathExpression).SelectObject(source);
|
|
if (p == null) {
|
|
return Double.NaN;
|
|
}
|
|
return Double.TryParse(p.FriendlyValue ?? p.LiteralValue, out d) ? d : Double.NaN;
|
|
case PathValueType.String:
|
|
return Double.TryParse((value as PathStringValue).Value, out d) ? d : Double.NaN;
|
|
case PathValueType.Number:
|
|
return (value as PathNumberValue).Value;
|
|
case PathValueType.Boolean:
|
|
return (value as PathBooleanValue).Value ? 1 : 0;
|
|
default:
|
|
return Double.NaN;
|
|
}
|
|
}
|
|
|
|
public static string ToString(DocumentObject source, IPathValue value) {
|
|
switch (value.ValueType) {
|
|
case PathValueType.Expression:
|
|
var p = (value as IPathExpression).SelectObject(source);
|
|
if (p == null) {
|
|
return String.Empty;
|
|
}
|
|
return p.FriendlyValue ?? p.LiteralValue ?? String.Empty;
|
|
case PathValueType.String:
|
|
return (value as PathStringValue).Value;
|
|
case PathValueType.Number:
|
|
return (value as PathNumberValue).Value.ToText();
|
|
case PathValueType.Boolean:
|
|
return (value as PathBooleanValue).ToString();
|
|
default:
|
|
return String.Empty;
|
|
}
|
|
}
|
|
|
|
public static bool ToBoolean(DocumentObject source, IPathValue value) {
|
|
switch (value.ValueType) {
|
|
case PathValueType.Expression:
|
|
return (value as IPathExpression).SelectObject(source) != null;
|
|
case PathValueType.String:
|
|
return (value as PathStringValue).Value.Length > 0;
|
|
case PathValueType.Number:
|
|
return (value as PathNumberValue).Value != 0;
|
|
case PathValueType.Boolean:
|
|
return (value as PathBooleanValue).Value;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
sealed class PathStringValue : IConstantPathValue
|
|
{
|
|
public PathValueType ValueType => PathValueType.String;
|
|
|
|
public string Value { get; private set; }
|
|
|
|
public string LiteralValue => Value;
|
|
|
|
public PathStringValue(string value) {
|
|
Value = value;
|
|
}
|
|
}
|
|
|
|
sealed class PathNumberValue : IConstantPathValue
|
|
{
|
|
public PathValueType ValueType => PathValueType.Number;
|
|
|
|
public double Value { get; private set; }
|
|
|
|
public string LiteralValue => Value.ToText();
|
|
|
|
public PathNumberValue(double value) {
|
|
Value = value;
|
|
}
|
|
}
|
|
|
|
sealed class PathBooleanValue : IConstantPathValue
|
|
{
|
|
public PathValueType ValueType => PathValueType.Boolean;
|
|
|
|
public bool Value { get; private set; }
|
|
|
|
public string LiteralValue => Value.ToString();
|
|
|
|
public PathBooleanValue(bool value) {
|
|
Value = value;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|