Author: simon
Date: Tue Jan 27 14:57:17 2009
New Revision: 36070

Modified:
   branches/strings/pseudocode/ParrotEncoding/ParrotNative.pm
   branches/strings/pseudocode/ParrotString.pm

Log:
First stab at char indexing of NFG strings.


Modified: branches/strings/pseudocode/ParrotEncoding/ParrotNative.pm
==============================================================================
--- branches/strings/pseudocode/ParrotEncoding/ParrotNative.pm  (original)
+++ branches/strings/pseudocode/ParrotEncoding/ParrotNative.pm  Tue Jan 27 
14:57:17 2009
@@ -42,7 +42,20 @@
         # graphemes and graphemes are composed of multiple characters - 
         # this could be improved with caching later but we will 
         # do it the slow stupid way for now 
-        ...
+        my $i = $index;
+        my $grapheme_index = 0;
+        my $c;
+        while ($i >= 0) {
+            my $g = self.grapheme_at_index($str, $grapheme_index++);
+            #say "i is "~$i~" and grapheme is "~$g.perl;
+            for (@( $g )) {
+                #say " Char is "~$_~" and i is "~$i;
+                return $_ if $i == 0;
+                $i--;
+            }
+        }
+        Parrot_debug_string($str);
+        die "char_at_index walked off the end of the string";
     }
 
     method grapheme_at_index($str, $index) {

Modified: branches/strings/pseudocode/ParrotString.pm
==============================================================================
--- branches/strings/pseudocode/ParrotString.pm (original)
+++ branches/strings/pseudocode/ParrotString.pm Tue Jan 27 14:57:17 2009
@@ -124,8 +124,11 @@
 sub Parrot_string_character_equal($one, $two) {
     my $l = Parrot_string_length($one);
     return 0 if $l != Parrot_string_length($two);
-    for (0.. $l-1) {
-        return 0 if Parrot_string_index($one, $_) != Parrot_string_index($two, 
$_);
+    for (0.. $l-1) -> $char {
+        my $savechar = 0 + $char; # Work around rakudo weirdness
+        my $a = Parrot_string_index($one, $char);
+        my $b = Parrot_string_index($two, $savechar);
+        return 0 if $a != $b;
     }
     return 1;
 }

Reply via email to