縦書き電子書籍のための縦中横

2024/2/11 [10:00:20] (日) 天気
image

青空文庫に限らず、縦書きのEPUB電子書籍を作る時に半角の英数字を縦にするための小ネタが今回のエントリ…なにを今さら、というネタで、縦書き文章で半角英数字の縦中横なんて当然。


それでもネタとして取り上げるのはビミョーに考えることがあって、たぶん、どんなことを縦中横にするのか、どうやってるのかがいろいろあるから。特にWEB経由の文章は半角英数字がてんこ盛り。全部対応するのはやってられないけど。

image

・一文字の英数字は全角の英数字にして縦表示にしたい。

・数字の3桁以上は縦中横にすると無理矢理感が強い。この場合はそのまま転がしておきたい。

↑このへんがこだわりどころ。


そのために使ってるのが以下のもの

置換する時にゴソゴソする必要があったのでメモ…「1 while〜」のあたり、たぶん5分後には忘れる


・perl

sub _tcy{
    my $self = shift;
    my $str = shift;

    return $str if $str =~ m![0-9][0-9][0-9]+!;
    $str =~ s!([a-zA-Z0-9\!\?][a-zA-Z0-9\!\?]+)!sprintf(qq{<span class="tcy">%s</span>}, $1)!eg;
    return $str;
}
sub h2z{
    my $self = shift;
    my $str = shift;

    $str =~ tr/a-zA-Z0-9\!\?/a-zA-Z0-9!?/;
    return $str;
}
sub add_tag{
    my $self = shift;
    my $str = shift;
                                                                                                                                                             
    $str =~ s!^([a-zA-Z0-9\!\?])([^a-zA-Z0-9\!\?])!$self->h2z($1) . $2!e;
    $str =~ s!([^a-zA-Z0-9\!\?])([a-zA-Z0-9\!\?])$!$1 . $self->h2z($2)!e;
    1 while $str =~ s!([^a-zA-Z0-9\!\?])([a-zA-Z0-9\!\?])([^a-zA-Z0-9\!\?])!$1 . $self->h2z($2) . $3!eg;
    $str =~ s!([a-zA-Z0-9\!\?][a-zA-Z0-9\!\?]+)!$self->_tcy($1)!eg;

    return $str;
}

・style sheet

.tcy {                                                                                                                                                       
  -webkit-text-combine: horizontal;
  -epub-text-combine:   horizontal;
}
<<2026/1>>
    123
45678910
11121314151617
18192021222324
25262728293031
検索:

【最近の20件】