Skip to content

Commit

Permalink
we must never speak of this parse work.
Browse files Browse the repository at this point in the history
  • Loading branch information
schelcj committed Oct 1, 2012
1 parent 795a037 commit 954ac35
Show file tree
Hide file tree
Showing 2 changed files with 111 additions and 3 deletions.
62 changes: 59 additions & 3 deletions create.pl
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
use WWW::Mechanize;
use Net::Netrc;
use Readonly;
use File::Slurp;
use File::Temp;
use IO::Scalar;
use Data::Dumper;

Readonly::Scalar my $EMPTY => q{};
Expand All @@ -15,13 +18,66 @@
Readonly::Scalar my $DIRECTIONS => q{Hello World};
Readonly::Scalar my $SUMMARY => q{Goodbye World};

my $latex = $ARGV[0]; # TODO - use getopts
my $lesson_name = q{2013}; # TODO - get from command line arg
my $title = q{SPH Algebra Assesment for 2013}; # TODO - get from command line arg
my $agent = get_login_agent();
my $question_ref = parse_latex($latex);

create_lesson($lesson_name, $title);
my $resource_id = create_resource($lesson_name);
create_question($resource_id, $lesson_name, $question, @answers);

print Dumper $question_ref;
exit;

#create_lesson($lesson_name, $title);
#my $resource_id = create_resource($lesson_name);
#create_question($resource_id, $lesson_name, $question, @answers);

sub parse_latex {
my ($test) = @_;
my @questions = ();
my $question_ref = [];
my $contents = read_file($test);
my $temp_fh = File::Temp->new();

$contents =~ s/^(?:(.*)?\\begin{document})|(?:\\end{document})$//gs;

write_file($temp_fh->filename, $contents);

{
local $/ = q{%QUESTION };
foreach my $line (read_file($temp_fh)) {
push @questions, $line;
}
}

foreach my $question (@questions) {
next if $question !~ /^(?<number>\d+)/;
my $number = $+{number};
$question_ref->[$number]->{number} = $number;

{
local $/ = q{%};
my $question_fh = IO::Scalar->new(\$question);
foreach my $line ($question_fh->getlines) {

given ($line) {
when ($line =~ /^$number\n/) {
my @parts = grep {/^\\/} split(/\n/, $line);
map {$_ =~ s/^(.*) \\\\$/$1/g} @parts;
$question_ref->[$number]->{question} = join(qq{\n}, @parts);
}
when ($line =~ /^$number(?<answer>([A-D]))\n/) {
my $answer = $+{answer};
$line =~ s/^${number}${answer}\n(.*)(?:(?:\s+[\\]+\s+[\n%]+)|\n+$)/$1/g;
$question_ref->[$number]->{answers}->{$answer} = $line;
}
}
}
}
}

return $question_ref;
}

sub get_login_agent {
my $mach = Net::Netrc->lookup('cosign.umich.edu');
Expand Down
52 changes: 52 additions & 0 deletions parse.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#!/usr/bin/env perl

use Modern::Perl;
use File::Slurp;
use File::Temp;
use IO::Scalar;
use Data::Dumper;

my $test = $ARGV[0];
my @questions = ();
my $question_ref = [];
my $contents = read_file($test);
my $temp_fh = File::Temp->new();

$contents =~ s/^(?:(.*)?\\begin{document})|(?:\\end{document})$//gs;

write_file($temp_fh->filename, $contents);

{
local $/ = q{%QUESTION };
foreach my $line (read_file($temp_fh)) {
push @questions, $line;
}
}

foreach my $question (@questions) {
next if $question !~ /^(?<number>\d+)/;
my $number = $+{number};
$question_ref->[$number]->{number} = $number;

{
local $/ = q{%};
my $question_fh = IO::Scalar->new(\$question);
foreach my $line ($question_fh->getlines) {

given ($line) {
when ($line =~ /^$number\n/) {
my @parts = grep {/^\\/} split(/\n/, $line);
map {$_ =~ s/^(.*) \\\\$/$1/g} @parts;
$question_ref->[$number]->{question} = join(qq{\n}, @parts);
}
when ($line =~ /^$number(?<answer>([A-D]))\n/) {
my $answer = $+{answer};
$line =~ s/^${number}${answer}\n(.*)(?:(?:\s+[\\]+\s+[\n%]+)|\n+$)/$1/g;
$question_ref->[$number]->{answers}->{$answer} = $line;
}
}
}
}
}

print Dumper $question_ref;

0 comments on commit 954ac35

Please sign in to comment.