Pod-ToDocBook

 view release on metacpan or  search on metacpan

lib/Pod/ToDocBook/DoSequences.pm  view on Meta::CPAN

    "igrave" => "\xC3\xAD",    #   small i, grave accent
    "Iuml"   => "\xC3\x8F",    #   capital I, dieresis or umlaut mark
    "iuml"   => "\xC3\xAF",    #   small i, dieresis or umlaut mark
    "Ntilde" => "\xC3\x91",    #   capital N, tilde
    "ntilde" => "\xC3\xB1",    #   small n, tilde
    "Oacute" => "\xC3\x93",    #   capital O, acute accent
    "oacute" => "\xC3\xB3",    #   small o, acute accent
    "Ocirc"  => "\xC3\x94",    #   capital O, circumflex accent
    "ocirc"  => "\xC3\xB4",    #   small o, circumflex accent
    "Ograve" => "\xC3\x92",    #   capital O, grave accent
    "ograve" => "\xC3\xB2",    #   small o, grave accent
    "Oslash" => "\xC3\x98",    #   capital O, slash
    "oslash" => "\xC3\xB8",    #   small o, slash
    "Otilde" => "\xC3\x95",    #   capital O, tilde
    "otilde" => "\xC3\xB5",    #   small o, tilde
    "Ouml"   => "\xC3\x96",    #   capital O, dieresis or umlaut mark
    "ouml"   => "\xC3\xB6",    #   small o, dieresis or umlaut mark
    "szlig"  => "\xC3\x9F",    #   small sharp s, German (sz ligature)
    "THORN"  => "\xC3\x9E",    #   capital THORN, Icelandic
    "thorn"  => "\xC3\xBE",    #   small thorn, Icelandic
    "Uacute" => "\xC3\x9A",    #   capital U, acute accent
    "uacute" => "\xC3\xBA",    #   small u, acute accent
    "Ucirc"  => "\xC3\x9B",    #   capital U, circumflex accent
    "ucirc"  => "\xC3\xBB",    #   small u, circumflex accent
    "Ugrave" => "\xC3\x99",    #   capital U, grave accent
    "ugrave" => "\xC3\xB9",    #   small u, grave accent
    "Uuml"   => "\xC3\x9C",    #   capital U, dieresis or umlaut mark
    "uuml"   => "\xC3\xBC",    #   small u, dieresis or umlaut mark
    "Yacute" => "\xC3\x9D",    #   capital Y, acute accent
    "yacute" => "\xC3\xBD",    #   small y, acute accent
    "yuml"   => "\xC3\xBF",    #   small y, dieresis or umlaut mark

    "lchevron" => "\xC2\xAB",  #   left chevron (double less than)
    "rchevron" => "\xC2\xBB",  #   right chevron (double greater than)
);

sub _on_start_document {
    my ( $self, $data ) = @_;
    $self->SUPER::on_start_document($data);
}

sub on_start_element {
    my ( $self, $el ) = @_;
    my $lname = $el->local_name;
    return $el if $lname ne 'code';
    my $attr = $el->attrs_by_name;

    # delete <code> tag
    $el->delete_element;
    my $code = $attr->{name};

    if ( $code eq 'I' ) {
        $attr->{para} = $el->{TITLE};

        #diag Dumper $el;
    }
    $el;
}

#process conten of  code
sub on_cdata {
    my ( $self, $el, $text ) = @_;
    return $text unless $el->local_name eq 'code';

    #clean
    $text =~ s/^\w<(.*)>$/$1/;
    $el->{TITLE} = $text;

    #return $text;
    return undef;
}

sub process_L {
    my ( $self, $el ) = @_;
    my $attr  = $el->attrs_by_name;
    my $ltype = $attr->{type};

    if ( $ltype eq 'url' ) {
        my $ulink = $el->mk_element('ulink');
        $ulink->attrs_by_name->{url} = $attr->{linkto};
        $ulink->add_content( $self->mk_characters( $attr->{text} ) );
        return $ulink;
    }
    if ( $ltype eq 'pod' ) {
        my $link = $el->mk_element('link');
        $link->attrs_by_name->{linkend} = $attr->{linkto};
        $link->add_content( $el->mk_element('quote')
              ->add_content( $self->mk_characters( $attr->{text} ) ) );
        return $link;
    }

    #process man type
    my ( $title, $volnum ) = ( $attr->{text}, '' );
    if ( $title =~ /(.+?)\((.+)\)/xms ) {
        ( $title, $volnum ) = ( $1, "<manvolnum>$2</manvolnum>" );
    }
    return $self->mk_from_xml(
qq!<citerefentry><refentrytitle>$title</refentrytitle>$volnum</citerefentry>!
    );
    my $text = $el->{TITLE};
    return $el;
}

sub on_end_element {
    my ( $self, $el ) = @_;
    my $lname = $el->local_name;

    #skip
    return $el unless $lname eq 'code';
    my $attr = $el->attrs_by_name;
    my $code = $attr->{name};

    if ( $code =~ /^I|B$/ ) {

        #<emphasis role="italic">text</emphasis>
        ( my $emp = $el->mk_element('emphasis') )->attrs_by_name->{role} =
          $code eq 'B' ? 'bold' : 'italic';
        $emp->add_content( $self->mk_characters( $el->{TITLE} ) );
        return $emp;
    }
    elsif ( $code eq 'F' ) {
        return $el->mk_element('filename')
          ->add_content( $self->mk_characters( $el->{TITLE} ) );
    }
    elsif ( $code eq 'X' ) {
        return $el->mk_element('indexterm')
          ->add_content( $el->mk_element('primary')
              ->add_content( $self->mk_characters( $el->{TITLE} ) ) );
        return $self->mk_from_xml(
            qq!<indexterm><primary>$el->{TITLE}</primary></indexterm>!)

    }
    elsif ( $code eq 'Z' ) {
        return $self->mk_characters( $el->{TITLE} );
    }
    elsif ( $code eq 'C' ) {
        ( my $literal = $el->mk_element('literal') )->attrs_by_name->{role} =
          'code';
        $literal->add_content( $self->mk_cdata( $el->{TITLE} ) );
        return $literal;
    }
    elsif ( $code eq 'S' ) {
        my $str = $el->{TITLE};
        $str =~ s/\s(?![^<]*>)/&nbsp;/gx;
        return $self->mk_characters($str);
    }
    elsif ( $code eq 'E' ) {
        my $str = $el->{TITLE};
        if ( $str !~ /\A\w+\z/xms ) {
            die "invalide escape (E<$str>) at line: $el->{LINE_NUM}";
        }
        $str =
            exists( $HTML_Escapes{$str} ) ? $HTML_Escapes{$str}
          : $str =~ /^0x/xms   ? '&#' . hex($str) . ';'
          : $str =~ /^0/xms    ? '&#' . oct($str) . ';'
          : $str =~ /^\d+$/xms ? "&#$str;"
          : "\xC3$str;";
        return $self->mk_characters($str);
    }
    elsif ( $code eq 'L' ) {
        return $self->process_L($el);
    }
    $el;
}

1;

__END__

=head1 SEE ALSO

XML::ExtOn,  Pod::2::DocBook

=head1 AUTHOR

Zahatski Aliaksandr, <zag@cpan.org>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2009 by Zahatski Aliaksandr

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.8 or,
at your option, any later version of Perl 5 you may have available.


=cut



( run in 1.750 second using v1.01-cache-2.11-cpan-e93a5daba3e )