bl791/IFDB / programming /tads2 /examples /replaceWith.t
bl791's picture
download
raw
4.07 kB
/* Copyright (c) 2000 by Kevin Forchione. All Rights Reserved. */
/*
* TADS ADV.T/STD.T LIBRARY EXTENSION
* REPLACEWITH.T
* version 1.0
*
* ReplaceWith provides an easy way to replace string search values
* with target values using regular expression searches.
*
*----------------------------------------------------------------------
* REQUIREMENTS
*
* + HTML TADS 2.3.0 or later
*
*----------------------------------------------------------------------
* IMPORTANT LIBRARY INTERFACE AND MODIFICATION
*
* None.
*
*----------------------------------------------------------------------
* COPYRIGHT NOTICE
*
* You may modify and use this file in any way you want, provided that
* if you redistribute modified copies of this file in source form, the
* copies must include the original copyright notice (including this
* paragraph), and must be clearly marked as modified from the original
* version.
*
*------------------------------------------------------------------------------
* REVISION HISTORY
*
* 09-Feb-2000: Creation.
*/
#define __REPLACEWITH_MODULE_
#pragma C+
#define RW_REPLACE_ONCE 1
#define RW_MATCH_WORD 2
#define RW_MATCH_CASE 4
#define RW_RET_NIL 8
/*
* replaceWith(value, target, replacement, flags)
*
* The function searches the value string, replacing the target string
* with the replacement string.
*
* Bit-flags can be passed to control the search.
*
* RW_REPLACE_ONCE replace only one occurrence of the target in the
* value string.
*
* The default for replaceWith() is to replace all occurrences
* of the target in the value string.
*
* RW_MATCH_WORD target must match whole words. For example:
*
* target 'get in' will search for '%<get>% *%<in%>'
* which will match 'get in the chair', but not
* 'get into the chair'
*
* RW_MATCH_CASE target must match the case in value.
*
* The default for replaceWith() is case-insensitive. A target
* string of 'get into' will match on 'GET INTO THE CAR' as
* well as 'Get into the car' unless RW_MATCH_CASE is used.
*
* RW_RET_NIL function returns nil if no match for the target found
*
* The default for replaceWith() returns the value unchanged.
* Using RW_RET_NIL will return the value only if replacement
* occurred; otherwise the function will return nil.
*/
replaceWith: function(value, target, replacement, ...)
{
local ret, new_value = '';
local valuesave, targetsave, replacementsave;
local flags = 0;
if (argcount > 3) flags = getarg(4);
if ((flags & RW_MATCH_WORD)!= 0)
{
local tmptarget = '%<';
tmptarget += replaceWith(target, ' ', '%> *%<');
tmptarget += '%>';
target = tmptarget;
}
do
{
if ((flags & RW_MATCH_CASE) == 0)
{
valuesave = value;
targetsave = target;
replacementsave = replacement;
value = lower(value);
target = lower(target);
replacement = lower(replacement);
}
ret = reSearch(target, value);
if ((flags & RW_MATCH_CASE) == 0)
{
value = valuesave;
target = targetsave;
replacement = replacementsave;
}
if (ret)
{
local len, tmp = '';
len = length(value) + 1;
if (ret[1] - 1)
tmp += substr(value, 1, ret[1]-1);
tmp += replacement;
new_value += tmp;
if (len - (ret[1]+ret[2]))
value = substr(value, ret[1]+ret[2], len - (ret[1]+ret[2]));
else
value = '';
if ((flags & RW_REPLACE_ONCE) != 0) break;
}
else if ((flags & RW_RET_NIL)!= 0
&& new_value == '')
return nil;
}
while( ret != nil);
new_value += value;
return new_value;
}

Xet Storage Details

Size:
4.07 kB
·
Xet hash:
44a2ca602f9ce6326997b72a73b48693f4e7bf823c9ecdd5e192e9c8b9769dab

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.