--- /dev/null
+#
+# A helper class for parsing textual JS hashes into perl
+# hashes
+#
+# The parser is in jsarray.yp, to regenerate you'll need the Parse::YAPP
+# package. Use 'yapp -m videosite::jsarray -s jsarray.yp' to regenerate
+#
+
+package videosite::JSArrayParser;
+
+use Parse::Lex;
+use videosite::jsarray;
+use strict;
+
+my @tokens = (
+ COLON => '[:]',
+ RIGHTC => '[\}]',
+ LEFTC => '[\{]',
+ QUOTE => '[\"]',
+ COMMA => '[,]',
+ ID => '[\w_%\.\+-]+'
+);
+
+sub new {
+ my $class = shift;
+ my $self = {
+ '_PARSER' => videosite::jsarray->new(),
+ '_LEXER' => Parse::Lex->new(@tokens),
+ };
+
+ return bless($self, $class);
+}
+
+sub parse {
+ my $self = shift;
+ my $s = shift;
+ my @result;
+ my $l = $self->{'_LEXER'};
+
+ $l->from($s);
+ @result = $self->{'_PARSER'}->YYParse(
+ yylex => sub {
+ my $tok = $l->next();
+ return ('', undef) unless $tok;
+ return ('', undef) if $l->eoi();
+ return ($tok->name(), $tok->text());
+ },
+ yyerror => sub {
+ $_[0]->YYAbort();
+ },
+ yydebug => 0x0);
+ return $result[0]?{@{$result[0]}}:undef;
+}
+
+1;