From 247fe6f14f822d1e4cc8c36f5079fe30cf0a03f6 Mon Sep 17 00:00:00 2001
From: Reinhold Kainhofer <reinhold@kainhofer.com>
Date: Thu, 15 Jul 2010 19:02:43 +0200
Subject: [PATCH] Repetitions: Use correct repeat count indicated by f+ after
 the !

---
 pae2xml.pl                            | 12 +++++++++++-
 sample_files/Shortcuts-repetition.pae |  7 +++++++
 2 files changed, 18 insertions(+), 1 deletion(-)
 create mode 100644 sample_files/Shortcuts-repetition.pae

diff --git a/pae2xml.pl b/pae2xml.pl
index 212fa61..c0ed699 100755
--- a/pae2xml.pl
+++ b/pae2xml.pl
@@ -154,6 +154,16 @@ REST:         $rest\n";
   close OUT;
 }
 
+# Repeat $1 by a count of $2
+sub repeat {
+  (my $e, my $count) = @_;
+  my $res = "";
+  for (my $i=1; $i <= $count; ++$i)
+  {
+    $res .= $e;
+  }
+  return $res;
+}
 
 sub parse_notes {
   my ($notes, $keysig) = @_;
@@ -166,7 +176,7 @@ sub parse_notes {
     $notes = $1;
   }
 
-  $notes =~ s/!([^!]*)!/$1$1/gs;  # write out repetitions
+  $notes =~ s/!([^!]*)!(f*)/repeat($1, length($2)+1)/gse;  # write out repetitions
   $notes =~ s/\{([^\}]*)\}/$1/gs; # ignore beamings
   while ( $notes =~ s/(:?\/+:?|^)([^\/:]*)(:?\/+:?)i(:?\/+:?)/$1$2$3$2$4/gs) {}; # replace whole-measure repeats (i notation)
 
diff --git a/sample_files/Shortcuts-repetition.pae b/sample_files/Shortcuts-repetition.pae
new file mode 100644
index 0000000..95577ab
--- /dev/null
+++ b/sample_files/Shortcuts-repetition.pae
@@ -0,0 +1,7 @@
+Test Composer
+Test case for repetitions
+1.1.1: S repetitions
+plain&easy: %C-1@c$bB� '4A!'6BG!fff4A/
+
+Test Library
+00000000
\ No newline at end of file
-- 
GitLab