diff options
Diffstat (limited to '')
-rwxr-xr-x | xml/best-match.sh | 98 |
1 files changed, 0 insertions, 98 deletions
diff --git a/xml/best-match.sh b/xml/best-match.sh deleted file mode 100755 index 580c29f..0000000 --- a/xml/best-match.sh +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/sh -# -# Find the (sub-)schema that best matches a desired version. -# -# Version numbers are assumed to be in the format X.Y, -# where X and Y are integers, and Y is no more than 3 digits, -# or the special value "next". -# - -# (Sub-)schema name (e.g. "resources") -base="$1"; shift - -# Desired version (e.g. "1.0" or "next") -target="$1"; shift - -# If not empty, append the best match as an XML externalRef to this file -# (otherwise, just echo the best match). Using readlink allows building -# from a different directory. -destination="$(readlink -f "$1")"; shift - -# Arbitrary text to print before XML (generally spaces to indent) -prefix="$1"; shift - -# Allow building from a different directory -cd "$(dirname $0)" - -list_candidates() { - ls -1 "${1}.rng" "${1}"-[0-9]*.rng 2>/dev/null -} - -version_from_filename() { - vff_filename="$1" - - case "$vff_filename" in - *-*.rng) - echo "$vff_filename" | sed -e 's/.*-\(.*\).rng/\1/' - ;; - *) - # special case for bare ${base}.rng, no -0.1's around anyway - echo 0.1 - ;; - esac -} - -filename_from_version() { - ffv_version="$1" - ffv_base="$2" - - if [ "$ffv_version" = "0.1" ]; then - echo "${ffv_base}.rng" - else - echo "${ffv_base}-${ffv_version}.rng" - fi -} - -# Convert version string (e.g. 2.10) into integer (e.g. 2010) for comparisons -int_version() { - echo "$1" | awk -F. '{ printf("%d%03d\n", $1,$2); }'; -} - -best="0.0" -for rng in $(list_candidates "${base}"); do - case ${rng} in - ${base}-${target}.rng) - # We found exactly what was requested - best=${target} - break - ;; - *-next.rng) - # "Next" schemas cannot be a best match unless directly requested - ;; - *) - v=$(version_from_filename "${rng}") - if [ $(int_version "${v}") -gt $(int_version "${best}") ]; then - # This version beats the previous best match - - if [ "${target}" = "next" ]; then - best=${v} - elif [ $(int_version "${v}") -lt $(int_version "${target}") ]; then - # This value is best only if it's still less than the target - best=${v} - fi - fi - ;; - esac -done - -if [ "$best" != "0.0" ]; then - found=$(filename_from_version "$best" "$base") - if [ -z "$destination" ]; then - echo "$(basename $found)" - else - echo "${prefix}<externalRef href=\"$(basename $found)\"/>" >> "$destination" - fi - exit 0 -fi - -exit 1 |