# New Ticket Created by Alberto Simoes # Please include the string: [perl #38066] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=38066 >
-- Alberto Simões - Departamento de Informática - Universidade do Minho Campus de Gualtar - 4710-057 Braga - Portugal
Index: languages/tcl/t/cmd_string.t =================================================================== --- languages/tcl/t/cmd_string.t (revision 10767) +++ languages/tcl/t/cmd_string.t (working copy) @@ -2,7 +2,7 @@ use strict; use lib qw(tcl/t t . ../lib ../../lib ../../../lib); -use Parrot::Test tests => 97; +use Parrot::Test tests => 109; use Parrot::Config; use Test::More; @@ -551,6 +551,86 @@ OUT + +language_output_is("tcl",<<'TCL',<<OUT,"string trimleft, bad args"); + string trimleft +TCL +wrong # args: should be "string trimleft string ?chars?" +OUT + +language_output_is("tcl",<<'TCL',<<OUT,"string trimleft, no chars"); + puts [string trimleft " \nfoo"] +TCL +foo +OUT + +language_output_is("tcl",<<'TCL',<<OUT,"string trimleft, char set"); + puts [string trimleft "abcfaoo" abc] +TCL +faoo +OUT + +language_output_is("tcl",<<'TCL',<<OUT,"string trimleft, char set, no match"); + puts [string trimleft "abcfaoo" z] +TCL +abcfaoo +OUT + + + +language_output_is("tcl",<<'TCL',<<OUT,"string trimright, bad args"); + string trimright +TCL +wrong # args: should be "string trimright string ?chars?" +OUT + +language_output_is("tcl",<<'TCL',<<OUT,"string trimright, no chars"); + puts [string trimright " foo "] +TCL + foo +OUT + +language_output_is("tcl",<<'TCL',<<OUT,"string trimright, char set"); + puts [string trimright "abcfaoo" ao] +TCL +abcf +OUT + +language_output_is("tcl",<<'TCL',<<OUT,"string trimright, char set, no match"); + puts [string trimright "abcfaoo" z] +TCL +abcfaoo +OUT + + + + + +language_output_is("tcl",<<'TCL',<<OUT,"string trim, bad args"); + string trim +TCL +wrong # args: should be "string trim string ?chars?" +OUT + +language_output_is("tcl",<<'TCL',<<OUT,"string trim, no chars"); + puts [string trim " \n foo "] +TCL +foo +OUT + +language_output_is("tcl",<<'TCL',<<OUT,"string trim, char set"); + puts [string trim "ooabacfaoo" ao] +TCL +bacf +OUT + +language_output_is("tcl",<<'TCL',<<OUT,"string trim, char set, no match"); + puts [string trim "abcfaoo" z] +TCL +abcfaoo +OUT + + # XXX - many of the classes are NOT tested here, and we rely # on the cvs tests from tcl for that. Index: languages/tcl/lib/commands/string.pir =================================================================== --- languages/tcl/lib/commands/string.pir (revision 10767) +++ languages/tcl/lib/commands/string.pir (working copy) @@ -192,6 +192,7 @@ + .sub "toupper" .param pmc argv @@ -713,3 +714,123 @@ .throw('wrong # args: should be "string is class ?-strict? ?-failindex var? str"') .end + + +.sub "trimleft" + .param pmc argv + + .local int argc + .local pmc retval + + argc = argv + if argc > 2 goto bad_args + if argc < 1 goto bad_args + + $S1 = argv[0] + $S2 = " \t\r\n" + + if argc == 1 goto trimleft_do + + $S2 = argv[1] + +trimleft_do: + .local string char + + char = substr $S1, 0, 1 + $I1 = index $S2, char + + if $I1 < 0 goto trimleft_done + substr $S1, 0, 1, "" + goto trimleft_do + +trimleft_done: + .return($S1) + +bad_args: + .throw ("wrong # args: should be \"string trimleft string ?chars?\"") + +.end + + + +.sub "trimright" + .param pmc argv + + .local int argc + .local pmc retval + + argc = argv + if argc > 2 goto bad_args + if argc < 1 goto bad_args + + $S1 = argv[0] + $S2 = " \t\r\n" + + if argc == 1 goto trimright_do + + $S2 = argv[1] + +trimright_do: + .local string char + + char = substr $S1, -1, 1 + $I1 = index $S2, char + + if $I1 < 0 goto trimright_done + chopn $S1, 1 + goto trimright_do + +trimright_done: + .return($S1) + +bad_args: + .throw ("wrong # args: should be \"string trimright string ?chars?\"") + +.end + +# here, I might use trimleft and trim right, but I think it is +# better to implement it here as it should be faster + +.sub "trim" + .param pmc argv + + .local int argc + .local pmc retval + + argc = argv + if argc > 2 goto bad_args + if argc < 1 goto bad_args + + $S1 = argv[0] + $S2 = " \t\r\n" + + if argc == 1 goto trim_do1 + + $S2 = argv[1] + +trim_do1: + .local string char + + char = substr $S1, -1, 1 + $I1 = index $S2, char + + if $I1 < 0 goto trim_do2 + chopn $S1, 1 + goto trim_do1 + +trim_do2: + char = substr $S1, 0, 1 + $I1 = index $S2, char + + if $I1 < 0 goto trim_done + substr $S1, 0, 1, "" + goto trim_do2 + +trim_done: + .return($S1) + +bad_args: + .throw ("wrong # args: should be \"string trim string ?chars?\"") + +.end +