Skip to content

Instantly share code, notes, and snippets.

@xatier
Created September 13, 2012 08:49
Show Gist options
  • Save xatier/3712983 to your computer and use it in GitHub Desktop.
Save xatier/3712983 to your computer and use it in GitHub Desktop.
use 5.012;
my @lines = ();
push @lines, <>;
my $one_line;
$one_line .= my_chomp($_) for (@lines);
#say $one_line;
my ($brr, $bb, $eb, $cen, $u, $flag) = (0, 0, 0, 0, 0, 0);
my @buf;
my $i = 0;
my $here;
while ($i < length $one_line) {
$here = $i;
my $c = substr $one_line, $here, 1;
push @buf, $c if $c ne "<";
my ($le_pos, $ge_pos);
if ($c eq "<") {
$le_pos = $here;
while ($here < length $one_line) {
my $cc = substr $one_line, $here, 1;
if ($cc eq ">") {
$ge_pos = $here;
my $tag = substr $one_line, $le_pos, $ge_pos - $le_pos + 1;
oh_yeah($one_line, $tag, $le_pos, $ge_pos);
goto out;
}
$here++;
}
}
out:
flush(\@buf);
$here++;
$i = $here;
}
flush(\@buf);
sub oh_yeah () {
my ($one_line, $tag, $le_pos, $ge_pos) = @_;
if ($tag =~ /<\/?br.*>/i) {
$brr++;
}
elsif ($tag =~ /<hr.*>/i) {
}
elsif ($tag =~ /<b.*>/i) {
$bb = 1;
}
elsif ($tag =~ /<\/b.*>/i) {
$eb = 1;
}
elsif ($tag =~ /<center.*>/i) {
$cen = 1;
}
elsif ($tag =~ /<\/center.*>/i) {
say "\n\t\t\t>> end_center <<";
$cen = 0;
}
elsif ($tag =~ /<u.*>/i) {
print "---- u ----";
$u = 1;
}
elsif ($tag =~ /<\/u.*>/i) {
print "---- end_u ----";
$u = 0;
}
else {
if ((substr $tag, 1, 1) eq " ") {
push @buf, $tag;
}
}
}
sub my_chomp () {
my $kerker = shift;
chomp $kerker;
return $kerker;
}
sub flush () {
my $buf_ref = shift;
my $buf_str;
$buf_str .= $_ for (@$buf_ref);
if ($brr >= 1) {
say "";
$brr--;
}
if ($bb == 1) {
print "BeginBOLD_";
$bb = 0;
}
elsif ($eb == 1) {
print "_EndBOLD";
$eb = 0;
}
else {
# foo
}
if ($cen == 1) {
$flag++;
say "\n\t\t\t>> center <<" if $flag == 1;
}
elsif ($cen == 0) {
$flag = 0;
}
else {
# foo
}
print $buf_str;
@$buf_ref = ();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment