JavaScriptで目次を自動作成

JavaScriptで目次を自動作成してしまおうと、考えた。
もちろん、PHPを使ったって良いんだけれど、PHPはローカルでは確認できないので….
あらかじめ、目次項目にしたいものを<h4>タグにしておく。
もちろん、<h3>だって何だっていいんだが、混ぜたらだめである。
もうひとつ、あらかじめ、目次を置きたい場所に
<span id=mokuji></span>
を置いておく。
それからもうひとつ、<body>タグのオプションに
onLoad = “ol();”
を入れておく。
<body bgcolor = “#ffffff” onLoad = “ol();”>
といった具合である。
あとは、内部でも外部でもいいから、JavaScriptで次の関数を置いておくだけである。

function ol () {
var mokujilist = document.getElementsByTagName('h4');
//目次の見栄えはご自由に↓
var out = '<div style = "border:#dbf 1px solid;">';
//項目が少ないときは目次を作らない
if (mokujilist.length < 2) {
return;
}
for (var i = 0; i < mokujilist.length; i++) {
var idname = "mokuji" + i;
//h4タグから取得した文字列から改行を削除して、各々の目次を作成する。見栄えはご自由に。
out = out + ((i) ? '- ' : '')
+ '<a href = "#' + idname + '">'
+ mokujilist[i].innerHTML.replace(/\n/g, '')
+ '</a> ';
//h4タグにidを付ける
mokujilist[i].setAttribute ("id", idname);
}
document.getElementById("mokuji").innerHTML = out + '</div>';
}
楽典.comで活用中。

カテゴリー: コンピュータ | コメントする

onPropertyChange

ウェブページで、テキストボックスの内容を、もうひとつのテキストボックスに飛ばす、というのは、JavaScriptではお馴染みのパターン。
使うイベントハンドラは、onChange。
ところが、これが、IEで、思ったように動かないことがあることがわかった。
Submitボタンを押せば、飛ぶ。
ところが、Submitボタンを押さずに改行キーを押すと、直前の入力分が、飛ばない。
モジラ系、サファリ系、オペラでは、こういうことはない。
もちろん、普通のページでは、Submitボタンを押しても、改行キーを押しても、ページがすぐリロードしてしまうので、結果は似たようなもの。
でも、よく見ていると、Submitボタンを押したときには一瞬飛んでいるのが確認できるのに対して、改行キーの場合には飛んでいること自体が確認できない。
どういうときに違いが明確になるかというと、たとえば、飛ばし先を、frameを使って別ページにしているような場合。
<input type=”text” name=”thisBox” onChange=”parent.otherPage.document.forms.formID.theBox.value = this.form.thisBox.value;”>
なんてときだ。
ページがリロードしても、飛んだ結果は別ページの方に残るから。
入力したあとに、Submitボタンでなくても、どこかをマウスで空打ちするなど、明示的にフォーカスを外せば、正常にonChangeが発生する。
ところが、改行キーを押してしまうと、onChangeが発生しない。
なんとも不思議である。
そういえば、エクセルでも似たようなことがあったなあ、などとは思うが。
解決策はあればあるもので、onPropertyChangeというのを代わりに使えばいいらしい。
つまり、
<input type=”text” name=”thisBox” onChange=”parent.otherPage.document.forms.formID.theBox.value = this.form.thisBox.value;” onPropertyChange=”parent.otherPage.document.forms.formID.theBox.value = this.form.thisBox.value;”>
のように書き足すだけ。
あまり紹介されていないイベントハンドラだし、どうもIE以外では使えないようなのだが。
onPropertyChangeは、本来は、「プロパティーが変化したとき」だから、色が変わったりしたときに発生するらしいのだが、テキストボックスの中身が変わったときにも発生してくれる。
もっとも、onChangeが、フォーカスが外れたときにはじめてイベントが発生するのに、onPropertyChangeは1字入力するごとに発生する。
なんとも、ぜいたく、お節介すぎるのだが、実用としては、同じように使える。

カテゴリー: コンピュータ | onPropertyChange はコメントを受け付けていません

MacJPerl 5からMac OS Xのperlへの移植、つづき

前のブログの続き。
lengthを使ったperlコードだと、調整が必要。
たとえば、Mac OS Xのperlで

use utf8;
print length (‘あいうえお’);
print “\n”;

は「5」とUnicodeでの字数を表すが、

print length (‘あいうえお’);
print “\n”;

のようにuse utf8;がないと「15」と、ASCIIの字数、すなわちバイト数を表す。
これはじゃあMacJPerlではどうだったかというと、

print length (‘あいうえお’);
print “\n”;

が「10」を表示する。
ShiftJISでのバイト数。
文字のコードの問題をいえば、Unicodeで005cである「\」(バックスラッシュ)はShift-JISには変換できない。
Shift-JISの5cに変換できるのは、Unicodeで00a5の「¥」。

カテゴリー: コンピュータ | コメントする

MacJPerl 5のドロップレットをMac OS Xのperlに移植する

perlを使うのに、MacJPerl 5のドロップレットは便利だった。
過去形なのは、Mac OS Xでは使えないから。
だから、perlを使うたびに、せっかくMac OS Xにはperlが標準装備されているのにClassicのMacPerl5を使うという、変なことになっていた。
で、思い切ってひとつ、Mac OS Xに移植してみることにした。
MacJPerl 5のドロップレットは、一太郎の吐き出したshift-JISのテキストを加工して、違うファイル名のshift-JISテキストに書き換えるというもの。
オリジナルの一太郎ファイルには、いわゆる機種依存文字があって、それを機種依存でない、shift-JISで使える文字に書き換えている。
そんな機種依存文字はそもそもマックでは読めないだろうから、その部分は妥協して、一太郎ではき出すときにUnicodeテキストで吐き出させることに変更した。
まず、ドロップレットをMacJPerlで開いて、エディターにコピー&ペースト。
不思議だが、JeditXにペーストしたら思い切り文字化けしたので、Jedit4にペースト。
この状態で、このperlファイルにも、Windowsな機種依存文字が含まれているから、その部分は文字化けしている。
もちろん、その部分は、MacJPerlでも文字化けしていたが、特に問題はなかった。なんだかんだ言って、昔は単純だったんである。
その機種依存文字が含まれているものを、Jedit4できちんとUTF8に変換できるとは思えなかったので、いったん保存。
このファイルをWindowsに持っていって、一太郎で開く。
それを今度はUnicodeテキストとして保存。
もういちどマックに持ってきて、JeditXで開く。
ここで文字コードを調べたらUTF-16だった(一太郎のUnicodeテキストはUTF-16らしい)ので、UTF-8にして、改行コードもLFにして、保存し直す。
拡張子は「.pl。」
以上でまずは、ファイルのコード変換終了。
新しくできたファイルを今度は、Mac OS Xのperlで読めるようにする。
頭に

#!/usr/bin/perl
use utf8;
use Encode;

の3行を追加。
いったんファイルを閉じて、ターミナルを起動。
ターミナルで

chmod 755

とタイプしてから、さっき保存した新しいperlファイルをドロップして、returnをタイプする。
このターミナルの作業と、さっき加えた「#!/usr/bin/perl」のおかげで、ターミナルからこのperlファイルが起動できるようになる。
(この作業がないと、いちいちperlと打たなければならなくなる)
ちなみに、さっき加えた2行目はperlの内部コードにUTF-8を使えるようにするもの、3行目はshift-JISが使えるようにするためのもの。
この2行で、JPerlのような仕事ができるようになる。
openの行を書き換える。
入力のほうは

open (ORIG, ‘<:encoding(utf16)', "$file");

出力の方は

open OUT, ‘>:encoding(shiftjis)’, $newfile;

(かっこはあってもなくても同じはずである。)
次に、改行コードの違いに対応する。
一太郎の吐き出したファイルは、CR+LF。
これをCRなMacJPerlで使えるようにするためには、LFをカットしていた。

s/\x0a//g;

ところが、Mac OS XのperlはLFなUnixだから、CRをカットするように書き換える。

s/\x0d//g;

これで、動く。
ところが、動かしてみると、いくつかのコードをshift-JISに変換できないというメッセージが出る。
「〜」と「-」の2文字。(他にも実はあるのかも知れないけれど、今回引っかかったのはこれだけ)
この2文字は、一太郎からshift-JISに出力すると変換して出力するのに、Unicodeに出力すると、shift-JISに変換できない方の文字コードを吐いてくるらしい。
仕方がないので、

tr/〜-/〜ー/;

の1行を追加。
….左と右とは、Unicodeでは文字コードが違う。
これで完成。
使い方
ターミナルを起動。
作ったperlファイルをターミナルにドロップ。
一太郎から吐き出した(変換したい)ファイルをターミナルにドロップ。
return。

続きを読む

カテゴリー: コンピュータ | タグ: , , | MacJPerl 5のドロップレットをMac OS Xのperlに移植する はコメントを受け付けていません

Red Cats

私がいちばんよく使うブラウザはFirefox 3rc
最初のうちはあまり対応しているアドオンがなかったが、最近は3に対応するアドオンも増えてきた。
で、ようやく先日、Red Catsというテーマが3に対応した。
(上のリンクは「ブルーフレーバー」だが、「グリーンフレーバー」もある。)
このテーマ、これまで、インストールしてあったものの、2.0では使えるのに使っていなかった。
でも、せっかく3に対応してきたのだから使ってみた。
うん。いい。
デザインがかわいい、とか以前に、とても使いやすいのだ。
これまでいろんなテーマを使ってきたが、「使いやすい」と思ったテーマはこれが初めて。
Firefox使いの方には、(バージョン2.0の方にも)おすすめである。

カテゴリー: コンピュータ | コメントする

iTunesの音飛びが直った-パソコン自体も調子よくなった

Windowsパソコンが、直った。
iTunesの音飛び、というところに、いちばん問題が出ていたが、ハードディスクのアクセスが遅い、というのが本当の症状だ、ということに、数日前から気づいていた。
音飛びは、ハードディスクにアクセスするたびに、パソコンがハードディスクに集中しちゃって、音を出すことを忘れてしまうことからだった。
だから、ハードディスクを速くすれば解決するだろう、と思っていた。
いろいろと調べるうち、このパソコンはいわゆるPIO病だということがわかった。
PIO病とは、ハードディスクの読み書きに問題があったとき、その問題をカウントして5回を超えると、PIOモードと言われる慎重モードになってしまって、アクセスが異常に遅くなり、しかもパソコンがそのアクセスに全神経を集中してしまう、というもの。
だから、年がら年中ハードディスクのアクセスランプが点滅しているし、点灯するたびに音も飛び、マウスカーソルも動かなくなる。
で、上のページに紹介されているとおり、レジストリエディタでレジストリをいじってみた。
もちろん、復元ポイントを設定してから。
そして、とっても、おそるおそる。
レジストリエディタを使うのは初めてじゃないが、やっぱり怖いんである。
で。
劇的に解決した。

カテゴリー: コンピュータ | コメントする

iTunes

iTunes for Windowsの音飛びが、最近ひどくて、かなり悩まされてきた。
QuickTimeの設定をセーフモードに変える、バージョンを6.0.5に落としてみる、サウンドボードのアップデートなど、一般的にいわれていることはやってみたけれどだめ。
Atokのバージョンを落とす、というのまでやってみたがダメ。
ところが、今日、一応の解決を見た。
iTunesで「表示」メニューから「イコライザを表示」させ、イコライザをoffにしたら、直った。
いや、完全に音飛びがなくなったわけではないが、音飛びするときのカリカリいうノイズが、ほとんどしなくなったから、音飛びしてもあまり気にならなくなった。
そして、もう一度イコライザをonにして効かせても、元には戻らなかった。
イコライザを最初に開いてみたときの設定はflat。
つまり、イコライザが効いていない状態。
とても不思議なことだが、コンピュータではまあ、こんなことはよくあることではある。
現在のiTunes のバージョンは7.6.2.9。
最新のはず。
それから、音飛びするのは、どうやらCPUのビジーの時というより、ハードディスクへのアクセス時のようだ。

カテゴリー: コンピュータ | コメントする

KDDIからの【重要なお知らせ】

KDDIから【重要なお知らせ】が来た。
重要なお知らせって、ろくなお知らせじゃないことが多い。
さて、どんなお知らせだ?
「KDDIクレジットコール サービス終了のお知らせ」
クレジットコールって、専用のカードを持っているか、特別な番号を頭に付ければ、公衆電話から、電話代後払いでかけられるというしくみ。
番号の場合は、普通の電話でもOK。
それが、「ご利用者数減少に伴い、2009年9月30日(水)をもってサービス提供を終了させていただくことになりました」のだそうだ。
利用者数減少か。
確かにそうだろうな。
携帯はずいぶん前から持っているが、通話料が高いから、以前は公衆電話を探してかけることが多かった。
そんなとき、テレホンカードの残額を気にしなくてすむクレジットコールは、お役立ちツールだった。
そして、普通にテレホンカードでかけたりするより、割安なことが多かった。
でも、最近は、公衆電話というものがほとんどないし、「電話をお借りします」なんていう習慣もなくなってきてしまったし。
だから、さすがに私も自宅からかけるとき以外はほとんど携帯でかけている。
クレジットコールを使ったのも、この1年で数回だろうな。
まあ、来年の秋まで、なんてお知らせをくれるなんて、ずいぶん気が長いというか、気が早いというか。
お知らせの最後に
「外出先からの電話利用の多いお客様には、au携帯電話をご利用いただけますので、ご紹介いたします。」
?
そりゃ、確かに、「利用者数の減少」は携帯のせいだろうけれど、だからって、かわりに携帯を買え、ってか?
それは違うんじゃない?

カテゴリー: 未分類 | コメントする

RC1

FireFox3が、RC1になった。
RCって?
公開候補、らしい。
いよいよ、正規版に近づいたってことだな。
ヘルプメニューの隣に「よく見るページ」というメニューができた。
クリックしてみたら、RC1にアップデートする前からのページがリストされてきている。
すでにβ5で準備されていたってこと?
へんなの。
と思ってよく見たら、スマートブックマークの「アクセスした回数の多いページ」と同じ中身だった。
同じような機能がダブっているの?

カテゴリー: コンピュータ | コメントする

SeaMonkey

Wikipediaを何となくブラウズしていて、SeaMonkeyというブラウザを見つけた。
このSeaMonkey、Mozillaの後継だと言うんだが。
え? Mozillaの後継はFirefoxだったんじゃないの?
さっそくMacintosh版をダウンロードして、インストールしてみた。
起動してびっくりした。
パーソナルツールバー(と言うらしい。つまり、ウィンドウ上部に並んでいるワンクリックブックマーク。リンクバー。)に、ずいぶんと懐かしいサイトが並んでいる。
もう何年も使っていないMozilla(Firefoxでない方の)のブックマークだ。
そういえば、Firefoxでは、Mozillaのブックマークが使えなかったんだっけ。
たしかにこれがMozillaの後継な訳だ。
ページの表示そのものは、Firefoxと何ら変わりない。
その一方で、MozillaのMのマークもあるし。
Firefoxにはない、ComposerやChatも、Thunderbirdに飛んでっちゃったMailも、ちゃんと備わっているらしい。
それなのに、気のせいか、Firefoxより軽いような気がする。
しばらく使ってみようかな。
一応、Windowsの方にもインストールした。
どっちもデフォルトで入っている以外のテーマが使えないが、ADBlock Plusだけはちゃんと使える。
というわけで、この日記はSeaMonkeyで書いてみた。
って、何か違う訳じゃないか……
いや、実はひとついいことがある。
Macintosh版Firefoxでmixi日記を書くと、顔文字のパレットの表示が崩れる(パレットに、日記を書く欄のスクロールバーがなぜか割り込む)のだが、それがない。
MacOSXでmixi日記を書く人にとっては、ベストチョイスかも。

カテゴリー: コンピュータ | コメントする