【ティラノスクリプト】三点リーダー、ダッシュが連続するときに余白を詰めるマクロ

ティラノスクリプトのマクロを組んだので共有しますという記事です。

; ----------------------------------------------------------
/**
 * 2連続ダッシュを無理やりつなげる
*/
@macro name="Dash2"@iscript
    (function () {
        const t = '―';
        const r = '―― ';
        const chars = document.querySelectorAll('.char');
        const arr = Array.from(chars);
        arr.filter(str => {
            return str.textContent == t;
        }).map(str => {
            str.textContent = r;
            str.style.letterSpacing = '-3px';
            return str;
        });
    })();
@endscript
@endmacro
; ----------------------------------------------------------
/**
 * 4連続ダッシュを無理やりつなげる
*/
@macro name="Dash4"@iscript
    (function () {
        const t = '―';
        const r = '―――― ';
        const chars = document.querySelectorAll('.char');
        const arr = Array.from(chars);
        arr.filter(str => {
            return str.textContent == t;
        }).map(str => {
            str.textContent = r;
            str.style.letterSpacing = '-3px';
            return str;
        });
    })();
@endscript
@endmacro
; ----------------------------------------------------------
/**
 * 2連続三点リーダーを無理やりつなげる
*/
@macro name="Lead2"@iscript
    (function () {
        const t = '…';
        const r = '……';
        const chars = document.querySelectorAll('.char');
        const arr = Array.from(chars);
        arr.filter(str => {
            return str.textContent == t;
        }).map(str => {
            str.textContent = r;
            str.style.letterSpacing = 0;
            return str;
        });
    })();
@endscript
@endmacro
; ----------------------------------------------------------
/**
 * 4連続三点リーダーを無理やりつなげる
*/
@macro name="Lead4"@iscript
    (function () {
        const t = '…';
        const r = '…………';
        const chars = document.querySelectorAll('.char');
        const arr = Array.from(chars);
        arr.filter(str => {
            return str.textContent == t;
        }).map(str => {
            str.textContent = r;
            str.style.letterSpacing = 0;
            return str;
        });
    })();
@endscript
@endmacro

使い方

たとえば次のように書くと

[Dash2]なんてことだ[Lead2]!![p]
[Lead4][p]
[Dash4]よし。[p]

表示は

――なんてことだ……!![p]
…………。[p]
――――よし。[p]

という感じになります。

背景

三点リーダーとダッシュ

三点リーダーやダッシュは2連続で使うのが良しとされることが多い。

ダッシュが連続するときは、倍角ダッシュとか言ったりするとかなんとかで、こだわりを持つ人も少なくないようです。

ティラノスクリプトだとうまくいかない

……が、ティラノスクリプトでは、連続で使うと隙間が空いてしまう。

三点リーダーは1つで使うと3つの点は等間隔ですが、2連続だと隙間が空いて6つの点が等間隔ではなくなってしまいます。
ダッシュはもっと変。一本の長い線になってほしいのに、字間が空くと2本の線になってしまうんです。

それを解消してしよう、ということで組んだのが上記のマクロです。

マクロの仕組み

全部で4つマクロがありますが、

  • ダッシュか、三点リーダーか

  • 2連続か、4連続か

という2x2になっているだけで、挙動は同じです。ので、2連続ダッシュを例に説明します。

/**
 * 2連続ダッシュを無理やりつなげる
*/
@macro name="Dash2"// Point 1
@iscript
    (function () {
        const t = '―';   // Point 2
        const r = '―― ';  // Point 3
        const chars = document.querySelectorAll('.char');
        const arr = Array.from(chars);
        arr.filter(str => {
            return str.textContent == t;   // Point 4
        }).map(str => {
            str.textContent = r;
            str.style.letterSpacing = '-3px';  // Point 5
            return str;
        });
    })();
@endscript
@endmacro

ティラノスクリプトというのは、書かれたテキストが1文字ずつ表示されますよね。その1文字は、spanタグで1文字1文字が囲われます。

文字が1文字が1つのspanになる。spanとspanの間でスペースがまず空いてしまうわけです。<span>あ</span><span>い</span>とかね。

ので、とりあえず表示した「―」を「――」という2連続の形に置換します。<span>あい</span>みたいな感じにすると。それが Point 4あたり。

その後、Point 5で、レタースペーシングを調整します。筆者はMacを使っているのでMac上では0pxでも字間は詰まります。が、iPhoneでの動作確認をしたところ、-3pxがちょうどよかったので、-3pxにしています。

実際に使用する際には、メインに据えた環境で動作を見ながらpxを調整してください。

なおダッシュと三点リーダーで、同じデバイスでも少し差がありましたので、ダッシュは-3px、三点リーダーは0という差があります。

この記事が気に入ったらサポートをしてみませんか?