# Extension Module - XPathBuiltins

## Namespaces

The namespace for extensions defined in this document are:

Prefix | Namespace
--- | ---
`f` | `http://xmlns.4suite.org/ext`

The prefix is given for this document only. Any other prefix can be used within a particular stylesheet.

## Functions

Function | Syntax
--- | ---
f:base-uri | string f:base-uri(node-set)
f:bin-path | string f:bin-path()
f:cos | number f:cos(number)
f:decode | object f:decode(object, string)
f:degrees-to-rads | number f:degrees-to-rads(number)
f:encode | object f:encode(object, string)
f:ends-with | boolean f:ends-with(string, string)
f:escape-xml | string f:escape-xml(string)
f:fact | number f:fact(number)
f:generate-uuid | string f:generate-uuid()
f:if | object f:if(boolean, object, object)
f:import-string | string f:import-string(object)
f:indent | string f:indent(string, number, string)
f:join | string f:join(node-set, string)
f:match | string f:match(string, string)
f:normalize-eol | string f:normalize-eol(string)
f:ospath2uri | string f:ospath2uri(string)
f:parse-date | string f:parse-date(string, string)
f:parse-xml | node-set f:parse-xml(string, object)
f:pytime-to-exslt | string f:pytime-to-exslt(number)
f:random | number f:random(number, boolean)
f:range | node-set f:range(number, number)
f:replace | string f:replace(string, string, string)
f:resolve-path | string f:resolve-path(string, string)
f:resolve-url | string f:resolve-url(string, string)
f:sha-hash | string f:sha-hash(string)
f:share-path | string f:share-path()
f:sin | number f:sin(number)
f:strftime | string f:strftime(string, string)
f:uri2ospath | string f:uri2ospath(string)
f:version | string f:version()
f:wrap | string f:wrap(string, number)

## Functions

### Function - f:base-uri

#### Function Syntax

string f:base-uri(node-set)

Returns the base URI of the first node in the given node-set, or of the context node if no argument is given. If the given node-set is empty, an empty string is returned.

### Function - f:bin-path

#### Function Syntax

string f:bin-path()

Returns the system-dependent path of Fourthought binaries

### Function - f:cos

#### Function Syntax

number f:cos(number)

math.cos

### Function - f:decode

#### Function Syntax

object f:decode(object, string)

f:decode mirrors the Python decode function/method. It takes a foreign object that is a Python byte string, and an encoding, and returns another foreign object which is a Unicode object.

### Function - f:degrees-to-rads

#### Function Syntax

number f:degrees-to-rads(number)

Convert degrees to radians

### Function - f:encode

#### Function Syntax

object f:encode(object, string)

f:encode mirrors the Python encode function/method. It takes a foreign object that is a Unicode object, and an encoding, and returns another foreign object which is a Python byte string.

### Function - f:ends-with

#### Function Syntax

boolean f:ends-with(string, string)

Returns true if the string given in the first argument ends with the substring given in the second argument.

### Function - f:escape-xml

#### Function Syntax

string f:escape-xml(string)

Returns the given string with XML markup characters "&", "<" and ">" escaped as "&amp;", "&lt;" and "&gt;", respectively.

### Function - f:fact

#### Function Syntax

number f:fact(number)

Factorial

### Function - f:generate-uuid

#### Function Syntax

string f:generate-uuid()

Returns a random UUID string.

### Function - f:if

#### Function Syntax

object f:if(boolean, object, object)

If the first argument, when converted to a boolean, is true, returns the second argument. Otherwise, returns the third argument, or if the third argument is not given, returns an empty node-set.

### Function - f:import-string

#### Function Syntax

string f:import-string(object)

f:import-string takes a Unicode FO and returns an XPath string. It is an error if the FO contains illegal XML chars. (although eventually this function might be extended to recover from this error)

### Function - f:indent

#### Function Syntax

string f:indent(string, number, string)

f:indent() returns a string with each line of the text indented the given number of levels. For each level, the indent string, normally 2 spaces by default, is prepended to each line.

### Function - f:join

#### Function Syntax

string f:join(node-set, string)

Concatenates the string-values of the nodes in the given node-set, inserting the delimiter given in the optional second argument in between each string-value. The delimiter defaults to a space. See also: EXSLT's str:concat()

### Function - f:match

#### Function Syntax

string f:match(string, string)

Returns true if the string given in the optional second argument (or the string-value of the context node if no second argument is given) matches the regular expression given in the first argument. See also: EXSLT's regexp:test() This function does differ from XSLT 2.0 match() function

### Function - f:normalize-eol

#### Function Syntax

string f:normalize-eol(string)

Normalizes end-of-line characters in input string, returning the normalized string. Normalization involves replacing " ", " " or " " with " "

### Function - f:ospath2uri

#### Function Syntax

string f:ospath2uri(string)

Returns the given OS path as a URI. The result varies depending on the underlying operating system.

### Function - f:parse-date

#### Function Syntax

string f:parse-date(string, string)

This function is similar to EXSLT's date:parse-date() except that it uses Python rather than Java conventions for the date formatting.

### Function - f:parse-xml

#### Function Syntax

node-set f:parse-xml(string, object)

f:parse-xml() parses the string-value of the given object as XML and returns a node-set whose sole item is the resulting parsed document's root node. The XML must be a well-formed document. src - the string or object to be parsed as XML. parameters - the name of a parameter set for the operation. The parameters argument is ignored for now. In the future, it will provide a way to specify a base URI for the resolution of relative URIs in entity declarations and XIncludes. Also for now, if the XML contains an encoding declaration, the declaration must specify UTF-8. An example: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:f="http://xmlns.4suite.org/ext" version="1.0" > <xsl:output method="text"/> <xsl:variable name="doc" select="'&lt;spam>eggs&lt;monty>python&lt;/monty>&lt;/spam>'"/> <xsl:template match="/"> <xsl:value-of select="f:parse-xml($doc)/spam/monty"/> </xsl:template> </xsl:stylesheet> ...run against any XML source should yield: python See also: XSLT (not XPath) extension function f:serialize-xml()

### Function - f:pytime-to-exslt

#### Function Syntax

string f:pytime-to-exslt(number)

Takes a Python time value as a number and returns a date/time as if from EXSLT date-time() t - a time stamp number, as from Python's time.time() if omitted, use the current time

### Function - f:random

#### Function Syntax

number f:random(number, boolean)

Returns a random number between 0 (inclusive) and max (exclusive). max defaults to 1. The first optional argument is a different value for max, and the second argument is a flag that, if set, causes the random number to be rounded to an integer. See also: EXSLT's math:random()

### Function - f:range

#### Function Syntax

node-set f:range(number, number)

Returns a node-set consisting of text nodes encapsulating integers in the numeric range bounded by the given low and high values.

### Function - f:replace

#### Function Syntax

string f:replace(string, string, string)

Returns the third argument string, which defaults to the string-value of the context node, with occurrences of the substring given in the first argument replaced by the string given in the second argument. See also: EXSLT's str:replace()

### Function - f:resolve-path

#### Function Syntax

string f:resolve-path(string, string)

Resolves a Posix-style path, such as the path portion of a URL, against a base. Similar to f:resolve-url, but allows the base to be just a path, not necessarily a full URL.

### Function - f:resolve-url

#### Function Syntax

string f:resolve-url(string, string)

Returns the relative URL ref given in the second argument resolved against the base given in the first argument. In case of URI processing error an empty string is returned

### Function - f:sha-hash

#### Function Syntax

string f:sha-hash(string)

Returns a SHA message digest of the given string, as a string of several groups of hex digits separated by '-'. See http://www.itl.nist.gov/fipspubs/fip180-1.htm for info on SHA.

### Function - f:share-path

#### Function Syntax

string f:share-path()

Returns the system-dependent path to modifiable data

### Function - f:sin

#### Function Syntax

number f:sin(number)

math.sin

### Function - f:strftime

#### Function Syntax

string f:strftime(string, string)

Returns the given ISO 8601 UTC date-time formatted according to the given format string as would be used by Python's time.strftime(). If no date-time string is given, the current time is used.

### Function - f:uri2ospath

#### Function Syntax

string f:uri2ospath(string)

Returns the given URI as an OS path. The result varies depending on the underlying operating system.

### Function - f:version

#### Function Syntax

string f:version()

Returns the 4Suite version number as a string.

### Function - f:wrap

#### Function Syntax

string f:wrap(string, number)

f:wrap() returns a string with the text reflowed so that each line fits within the given width. Existing linefeeds are preserved, but spaces are considered inter-word separators that can be collapsed. To reflow without preserving existing linefeeds, strip them first, e.g. with translate(text, '&#10;', ''). http://lists.fourthought.com/pipermail/4suite-dev/2002-December/000878.html