/*
* Licensed to the Apache Software Foundation (ASF) Under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for Additional information regarding copyright ownership.
* The ASF licenses this file to You Under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed Under the License is distributed on an "AS Is" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations Under the License.
*/
/*
* Created on May 22, 2005
*
*/
namespace HH.WMS.Utils.NPOI.SS.Formula.Functions
{
using System;
using HH.WMS.Utils.NPOI.SS.Formula.Eval;
public abstract class SingleArgTextFunc : TextFunction
{
protected SingleArgTextFunc()
{
// no fields to initialise
}
public override ValueEval EvaluateFunc(ValueEval[] args, int srcCellRow, int srcCellCol)
{
if (args.Length != 1)
{
return ErrorEval.VALUE_INVALID;
}
String arg = EvaluateStringArg(args[0], srcCellRow, srcCellCol);
return Evaluate(arg);
}
public abstract ValueEval Evaluate(String arg);
}
/**
* @author Amol S. Deshmukh < amolweb at ya hoo dot com >
*/
public abstract class TextFunction : Function
{
protected static String EMPTY_STRING = "";
public static String EvaluateStringArg(ValueEval eval, int srcRow, int srcCol)
{
ValueEval ve = OperandResolver.GetSingleValue(eval, srcRow, srcCol);
return OperandResolver.CoerceValueToString(ve);
}
public static int EvaluateIntArg(ValueEval arg, int srcCellRow, int srcCellCol)
{
ValueEval ve = OperandResolver.GetSingleValue(arg, srcCellRow, srcCellCol);
return OperandResolver.CoerceValueToInt(ve);
}
public static double EvaluateDoubleArg(ValueEval arg, int srcCellRow, int srcCellCol) {
ValueEval ve = OperandResolver.GetSingleValue(arg, srcCellRow, srcCellCol);
return OperandResolver.CoerceValueToDouble(ve);
}
public ValueEval Evaluate(ValueEval[] args, int srcCellRow, int srcCellCol)
{
try
{
return EvaluateFunc(args, srcCellRow, srcCellCol);
}
catch (EvaluationException e)
{
return e.GetErrorEval();
}
}
internal static bool IsPrintable(char c)
{
int charCode = (int)c;
return charCode >= 32;
}
public abstract ValueEval EvaluateFunc(ValueEval[] args, int srcCellRow, int srcCellCol);
/* ---------------------------------------------------------------------- */
public static Function LEN = new Len();
public static Function LOWER = new Lower();
public static Function UPPER = new Upper();
/**
* @author Manda Wilson < wilson at c bio dot msk cc dot org >
*/
///
///An implementation of the TRIM function:
///
/// Removes leading and trailing spaces from value if evaluated operand value is string.
///
///
public static Function TRIM = new Trim();
/*
* @author Manda Wilson < wilson at c bio dot msk cc dot org >
*/
///
///An implementation of the MID function
///
///MID returns a specific number of
///characters from a text string, starting at the specified position.
///
/// Syntax: MID(text, start_num, num_chars)
///
public static Function MID = new Mid();
public static Function LEFT = new LeftRight(true);
public static Function RIGHT = new LeftRight(false);
public static Function CONCATENATE = new Concatenate();
public static Function EXACT = new Exact();
public static Function TEXT = new Text();
/**
* @author Torstein Tauno Svendsen (torstei@officenet.no)
*/
///
///Implementation of the FIND() function.
///
/// Syntax: FIND(Find_text, within_text, start_num)
///
/// FIND returns the character position of the first (case sensitive) occurrence of
/// Find_text inside within_text. The third parameter,
/// start_num, is optional (default=1) and specifies where to start searching
/// from. Character positions are 1-based.
///
public static Function FIND = new SearchFind(true);
///
///Implementation of the FIND() function. SEARCH is a case-insensitive version of FIND()
///
/// Syntax: SEARCH(Find_text, within_text, start_num)
///
///
public static Function SEARCH = new SearchFind(false);
public static Function CLEAN = new Clean();
public static Function CHAR = new CHAR();
}
}