FBCALL FB_WCHAR *fb_WstrTrim ( const FB_WCHAR *src ) { FB_WCHAR *dst; const FB_WCHAR *p; ssize_t chars; if( src == NULL ) return NULL; chars = fb_wstr_Len( src ); if( chars <= 0 ) return NULL; p = fb_wstr_SkipCharRev( src, chars, _LC(' ') ); chars = fb_wstr_CalcDiff( src, p ); if( chars <= 0 ) return NULL; p = fb_wstr_SkipChar( src, chars, _LC(' ') ); chars -= fb_wstr_CalcDiff( src, p ); if( chars <= 0 ) return NULL; /* alloc temp string */ dst = fb_wstr_AllocTemp( chars ); if( dst != NULL ) { /* simple copy */ fb_wstr_Copy( dst, p, chars ); } return dst; }
/*:::::*/ FBCALL FB_WCHAR *fb_WstrRight ( const FB_WCHAR *src, int chars ) { FB_WCHAR *dst; int len, src_len; if( src == NULL ) return NULL; src_len = fb_wstr_Len( src ); if( (chars <= 0) || (src_len == 0) ) return NULL; if( chars > src_len ) len = src_len; else len = chars; /* alloc temp string */ dst = fb_wstr_AllocTemp( len ); if( dst != NULL ) { /* simple rev copy */ fb_wstr_Copy( dst, &src[src_len - len], len ); } return dst; }
FBCALL FB_WCHAR *fb_WstrTrimEx ( const FB_WCHAR *src, const FB_WCHAR *pattern ) { FB_WCHAR *dst; ssize_t len; const FB_WCHAR *p = src; if( src == NULL ) { return NULL; } { ssize_t len_pattern = fb_wstr_Len( pattern ); len = fb_wstr_Len( src ); if( len >= len_pattern ) { if( len_pattern==1 ) { p = fb_wstr_SkipChar( src, len, *pattern ); len -= fb_wstr_CalcDiff( src, p ); } else if( len_pattern != 0 ) { p = src; while (len >= len_pattern ) { if( fb_wstr_Compare( p, pattern, len_pattern )!=0 ) break; p += len_pattern; len -= len_pattern; } } } if( len >= len_pattern ) { if( len_pattern==1 ) { const FB_WCHAR *p_tmp = fb_wstr_SkipCharRev( p, len, *pattern ); len = fb_wstr_CalcDiff( p, p_tmp ); } else if( len_pattern != 0 ) { ssize_t test_index = len - len_pattern; while (len >= len_pattern ) { if( fb_wstr_Compare( p + test_index, pattern, len_pattern )!=0 ) break; test_index -= len_pattern; } len = test_index + len_pattern; } } } if( len > 0 ) { /* alloc temp string */ dst = fb_wstr_AllocTemp( len ); if( dst != NULL ) { /* simple copy */ fb_wstr_Copy( dst, p, len ); } else dst = NULL; } else dst = NULL; return dst; }
FBCALL FB_WCHAR *fb_WstrTrimAny ( const FB_WCHAR *src, const FB_WCHAR *pattern ) { const FB_WCHAR *pachText = NULL; FB_WCHAR *dst; ssize_t len; if( src == NULL ) { return NULL; } len = 0; { ssize_t len_pattern = fb_wstr_Len( pattern ); pachText = src; len = fb_wstr_Len( src ); while ( len != 0 ) { ssize_t i; for( i=0; i!=len_pattern; ++i ) { if( wcschr( pattern, *pachText )!=NULL ) { break; } } if( i==len_pattern ) { break; } --len; ++pachText; } while ( len != 0 ) { ssize_t i; --len; for( i=0; i!=len_pattern; ++i ) { if( wcschr( pattern, pachText[len] )!=NULL ) { break; } } if( i==len_pattern ) { ++len; break; } } } if( len > 0 ) { /* alloc temp string */ dst = fb_wstr_AllocTemp( len ); if( dst != NULL ) { /* simple copy */ fb_wstr_Copy( dst, pachText, len ); } else dst = NULL; } else dst = NULL; return dst; }