InDesign単体でも白オーバープリント

もしかして常識だったらどうしよう。まあ、自分メモとして書いておくことにしよう。
Windows版しかわからないのだけど、Macだとどうなんだろう?

InDesign単体なら大丈夫のはず

InDesignは白や紙色のオブジェクトにオーバープリント属性を設定できません。プリント属性パネルのチェックが触れなくなるし、もともと別の色でオーバープリントが設定されているのを白に変えると自動でチェックが外れます。CS2までは線と塗りの入れ替えによってオーバープリント属性が残ってしまう問題(参考:DTP-Sブログ-ひねもすデジタルビヘイビア: InDesignでも発生する白のオーバープリント)があったのですが、CS3からはその点も修正されています。

と思ったら、段落境界線に罠が

以下、Windows XP SP2、InDesign CS4(6.0.3)でやってます(CS1でも同様になります)。
私はこんな感じの囲み線を使った見出しをよく作ります。段落前境界線に色を設定し、段落後境界線を白にしてうまいこと重ねるとできます。(参考:2005-08-19 - 遠近法ノート

上に重ねる白い線の設定はこんな感じ。ちゃんとオーバープリントのチェックは触れなくなっています(なんか中に■があるけど、まあ、いいか)。

ここからが問題。たとえば配色に悩んでいて、いろいろいじっている間になぜかオーバープリントに設定してしまったりして……

やっぱ白でしょ、と色の設定を白に戻します。

オーバープリントのチェックは触れなくなり、最初の設定と同じ状態に見えます。
でも、ここでオーバープリントプレビューに切り換えてみると……

あばばばばば。真っ青です。

他にも

下線や取り消し線の色、あとは段落スタイル・文字スタイルの文字カラーなどでも同じようなことが起きています。文字カラーのほうはもっと恐ろしくて、チェックが完全に外れているように見えるのにオーバープリントになっています。
設定のON/OFFに関わらずパネルで同じように見えるっていうのは明らかにおかしいと思うんですけど、なんにしろオーバープリントまわりはやっぱり怖い((( ゚Д゚)))
CS4だとライブプリフライト機能で簡単に発見できるのが救いです……*1
やっぱり、よっぽどの理由がない限りオーバープリントは触っちゃだめってことですね。

*1:ただしデフォルトだとそこまで警告してくれない

InDesignの索引をCSVに書き出す(CS2〜CS4)

駆け込み寺の掲示板でこんなスレがあって……
InDesign の索引作成について - DTP駆け込み寺 新掲示板 (リニューアル後のページにリンクしてます)
索引の生成時に、入力した読みがなを一緒に書き出せないかという要望でした。
ちょうど索引あたりをいじりまわす勉強中だったので、ごにょっとスクリプト書いて貼り付けてみるなどしたのですが、グループ化したオブジェクトや入れ子になってるテキストフレームに索引マーカーがある可能性を完全に忘れ去っていました(;´д`)ゴメンネ スレ主

というわけでリベンジなのです

(function(){

  var sepChar = "," // CSV用セル区切り文字(任意)
  var pageNumSepChar = " "; // ページ番号の区切り文字(任意、2文字以上でもOK)

  var tmpIndex = app.activeDocument.indexes[0];
  tmpIndex.update(); // 一度索引を更新してページ数などをソート

  var str = ""; // 書き出すテキスト

  // 索引項目すべてについて処理
  for (var i = 0, t_len = tmpIndex.topics.length; i < t_len; i++) {

    var tmpTopic = tmpIndex.topics[i];
    str += tmpTopic.name + sepChar;
    str += tmpTopic.sortOrder + sepChar;

    // 参照先すべてのページ番号を取得していく
    for (var j = 0, ref_len = tmpTopic.pageReferences.length; j < ref_len; j++) {

      // とりあえずマーカーのあるテキストフレームの親を取得してみる
      var tmpObj = tmpTopic.pageReferences[j].sourceText.parentTextFrames[0].parent;

      // PageオブジェクトじゃなかったらPageオブジェクトが得られるまでさかのぼる
      // グループ化したオブジェクトや入れ子のテキストフレームに対応するため
      while (tmpObj.constructor.name != "Page") {
        if (tmpObj.parent.constructor.name != "Story") {
          tmpObj = tmpObj.parent;
        }
        else {
          tmpObj = tmpObj.parentTextFrames[0].parent;
        }
      }

      str += tmpObj.name;

      // 参照先がまだ残っていたらページ番号区切り文字を入れる
      str += (j != ref_len-1) ? pageNumSepChar : "";
    }

    str += "\n"; // 改行

  } // 項目ループここまで

  // テキスト書き出し(ファイル名を指定して保存)
  var file = File.saveDialog("ファイル書き出し","CSVファイル:*.csv");
  if (file) {
    file.open("w");
    file.write(str);
    file.close();
  }

  return;

})();

Windows XP SP2、InDesign CS4でのみ確認。CS2〜CS4までは動くと思います。たぶん。CSは索引関係かなり違うので無理です。
グループ化とか、入れ子とか、表とかもこれで大丈夫なはず。たぶん。whileがちょっと怖いので、万が一使うときはESTK上で動かしたほうがいいかも(無限ループになっても止められるから)。
しかし、なんていうか……変数名ってみんなどうやって決めてるのかなー?

ページ数が倒せない

「あるオブジェクトが配置されているページ」を得るのが結構たいへんなのですね。なんでだろう。
テキストフレームのparentプロパティがPageオブジェクトになるということがわかったので、索引マーカーのあるinsertionPointを含むテキストフレームを探して一つずつループしています。
参考にしたのはこちら(CS用っぽい)。試行錯誤したあとで発見したのだけど、よく見たらまんまだわ……。
(DTPtechNote:1253) [AS Indesign CS] print-current-page.as

そーいえば

Fileオブジェクトまわりはまた今度まとめよう、とか言ったきりなのを思い出した(;´д`)
ていうか私の環境がCS4に移りつつあってやる気が、その、そのうち……。

はてブはじめました

自分だけ知っていればいいことだったらあえて公開する必要はありませんが、自分のブックマークを公開するという行為が自然と他の人にも役に立つというのはすてきなことだと思います。

印刷・DTP従事者はみんなでソーシャルブックマークを使おう - M.C.P.C.

これを読んで深くうなずいたので、普段はlivedoor Clipを愛用している私ですが、DTP関係の記事だけはてなブックマークにも投稿することにしました。*1
http://b.hatena.ne.jp/chalcedony_htn/
DTP業界にいる人が使っているのはどっちかといえばはてブだなーと以前から思ってはいたのです(データの裏づけはないです)。でもまあそれはそれ、自分用だからいいや、と思って気にしていなかったのですが、下の一文を読んでちょっと考えが変わりました。

もし、同じブックマークを3人以上がすると、新着エントリーページに出てきます。このページは、印刷屋さん以外の人も見ているページですので、僕らの業界の活動を業界外の人に見ていただくいい機会だと思います。

印刷・DTP従事者はみんなでソーシャルブックマークを使おう - M.C.P.C.

確かに、ソーシャルブックマークサービスの場合は数が集まることにも意義があるのですよね。3桁超えのホッテントリになる必要はないでしょうが、DTPの記事が一つでも多く新着ページに載る手助けになれば……と思ったわけです。

コメントを書く

基本的にブクマコメントは書く派です。特に仕事用のブックマークは後で読み返したくなる記事が多い*2ので、キーワードをちりばめた要約を書いています。
タグのつけ方は人によって考え方がいろいろで正解はないと思うのですが、私の場合はだいたい人とかぶりそうなキーワードはタグに入れておいて、あとで自分が検索するときに使いそうな単語をコメントにたくさん入れておくって方法をとっています。「タグは他人のために、コメントは自分のために」って感じです。
はてなブックマークの検索機能は実はとても便利です。自分のブックマークページにある検索ボックスに単語を入力すれば、タグだけじゃなくて記事のタイトルや自分のつけたコメントの中の単語も探して見つけてくれます(しかもサクサク動く)。
タグつけ上手くいかない……って人は、コメントも一緒に活用するといいんじゃないかと思います。それでも、人に見つけてもらいやすくするにはやっぱりタグが大事だと思うけど。

ちなみに(蛇足)

はてブはコメントを100文字までしか表示できません(内部ではデータ持ってるみたいだけど)。その点livedoor Clipは1000文字までたっぷり書けるし、最近全文検索にも対応して便利になった*3……ごにょごにょ。*4
そのうち今までのDTP関連のクリップも移植しようと思ってますが、結構な数になってる気がしてめんどくさがっています。うん、でも私がんばる……。

*1:クロスポストはあんまり好きじゃないんで、まだちょっと迷ってますけど

*2:「こんなバグがあるのかーくわばらくわばら」ってブクマしておいて、あとでほんとにトラブルが起きたときに見たくなったり……

*3:ちょっと重い

*4:まあ、今となってはLDC使う理由には機能だけじゃなくてコミュニティの存在もあるんですけどね

DTP Booster Vol.2に行ってきた

アップルストア銀座で開催のセミナーに行ってきました。
定員が84名で立ち見がだいぶいたので、少なくとも120人以上は入ってたと思います。
以下、適当に感想など。まとまらないままだらだら書くのであしからず……

Illustratorスペシャ

今回のセミナーはIllustratorが中心、というかそれしかありませんでした。最初に使っているIllustratorのバージョンについて聞いていて、
CS3>>>>>CS4>CS2>CS1>>10>>8
CS3>>>>>CS4>CS2>10>8>CS1
という感じだったようです。*1具体的に言えば、CS3が6割くらい、CS4が25人くらい、CS2が15人ぐらい、と以下バージョンが下がるとだんだん減っていった模様。ちなみに、私はCSを持ってる10使いです。
大嘘書いてたので訂正。CSより10のが多かったそうです>< http://twitter.com/dtpbooster/status/2159622452

1.JavaScriptを使ってIllustratorを遊んでみよう(三村 克巳氏)

個人的にはこれを聞きに行った感じです。ただ、おそらく使ったことのない人向けになるんだろうなーと予想はしていて、実際そうでした。
最初に自動処理の導入状況についてアンケートがあって、アクションはかなりの人が使っているけどスクリプトとなるとがくっと数が減り、データ駆動型グラフィックスは使ってる人がいたのかどうか(私も最後のは使ってない)。スクリプト使ってる人の中でも、おそらく自分で作ってる人はもっと少ないんだろうなと思います。

Extendscript ToolKitはあまり使ったことがなかった(CS2から付属だったっけ?)ですが、直接実行できるのが便利そうでした。構文ハイライトもあるし。スクリプトの読み込みでいちいち再起動、を意識しないで作れるのは楽ですね。

同じことの繰り返しをしてる部分で1クリックでも減らすために、というのが何度も強調されてました。しかしいまいち会場の反応が鈍かった……。やっぱり難しそうに感じるのだろうか。デモでエラーが出たりしてたし。*2
思ったのは、やっぱりいきなりコードを貼り付けて実行……っていうのは敷居が高いんだということ。講演後に鷹野氏(「自分で作るのは面倒だからイヤ」って言い切ってたw)がメニューからスクリプトファイルを選んで実行したときはちょっと反応よかった感じでした。たくさんの人が使いやすくするんならファイルをダウンロードできるように配布するのがいいんでしょうね。私は怖くてできない。まだ。
最後に私も大好きな「イラレでべんり」さんが紹介されていて嬉しかったりしました。シンプルで便利なものがまとまっていて、全部入れておけば日常業務のちょっとしたところが楽になりますよね。このくらいシンプルなものの方が汎用性高くて使いやすいんだろうなーと思います。

時間切れでぱぱぱーっと過ぎ去ってしまったスライドを見るに、DOMについてなども触れる予定だったのかもしれません。あとはアプリケーション間の連携あたりの話をもう少し聞きたかったな。今の私の業務じゃ出番はなさそうだけど、知っておきたいと思っているのです。半分以上は興味本位ですけど。

2.Illustratorで光の表現(川端 亜衣氏)

マスカットのイラストとワイングラスのイラストに光の効果を、という実演でした。
光の表現は描画モードを使いこなすのが基本なのですが、実はいまいち苦手だったり。そのあたりの解説はほとんどなし。まあ、自分で調べればわかることですしね。

  • 「光の表現なのでRGBです」
  • ハイライトや影は、オブジェクトを直接グラデーションで塗るより、別にグラデーションのオブジェクトを作って透明効果で重ねた方が自然な立体感に仕上がる。
  • オブジェクトのアピアランスパレットで塗りを増やして別々の描画モードを指定することができる。
  • ひとつオブジェクトを作ったら、グラフィックスタイルに登録して再利用。
  • 「わりと勘で」
  • 「こういう細かいところがそれっぽく見せるコツです」
  • 小さい光の粒などはシンボルを作ってスプレーで散らす。シンボルリサイズでサイズを変更できる。
  • 画像の色を調整したいときなどでも、イラレに配置した上にグレーのオブジェクトを乗せて透明効果で重ねてやることでできる。もちろんその後ラスタライズなどするのが前提。
  • 「このまま印刷に持っていくと色が化けます」×2

その他細かい手順が大変参考になりました。目の前で出来上がっていくキラキラ表現に( ゚д゚)ポカーン状態でしたよ! 楽しかった!
ワイングラスの方はすでにブログで書かれた記事に近いものでした。あとで今日のセミナーの資料もネットに上げてくれるとのことですが*3、とりあえずここで復習できます。
イラレラボ illustrator-labo - Tutorial_イラレで光の表現
ご本人がおっしゃってたとおり「Photoshopでやればいいじゃんってのもある」作業ですが、ベクターデータにできること、オブジェクトごとに効果がつけられること、アピアランスを重ねられることなどがIllustratorの利点とのこと。私は凝ったものを描くことはほとんどないですが、ベクターデータの方が使いまわしが利くのでIllustratorの技を身につけたいなあと思います。

3.DTPにおけるオンラインストレージの活用(山口 和宏氏)

事前告知のなかった講演。といっても予定は5分だけ。
オンラインストレージサービスを使う利点について軽く触れたあと実演……のはずが、ログイン失敗により時間切れ。ううむ。カタログに載ってそうなこと以上の話はなかったかな……。

4.Illustratorでの文字組版(鷹野 雅弘氏)

だいぶ時間が押していたので、かなり巻いていました。
Illustratorにはバージョン間で大きな溝がいくつかあって、8から10の間に透明効果やアピアランスが追加され、10からCSではテキスト関連のエンジンが一新され、CS3とCS4では複数アートボードが新規追加されたという話が最初にありました。
今回の講演ではもちろんCS以降が前提ということで、10をメインに使ってる私が涙目に……。いつか移行はするでしょうけどね。
「以前のバージョンで手作業でやっていたことをアプリケーションの機能で」という事例などをいくつか説明していました。

  • 文字のグラデーションはアウトライン化せずにアピアランス
  • 文字揃えがデフォルトだと中央揃えになってるので注意
  • OTFの字形機能で作字を減らす(■に白抜きの文字とか)
  • レイヤー全体にアピアランスを適用することができる!
  • 段落スタイルを使えばいっぺんに修正が可能(ただし多用すると重くなる)
  • テキスト配置のときに空白行(改行文字だけの行)を削除することができる

などなど。うちではスタイルを作るほど文字の多いものはInDesignでやってますが、Illustratorでも同じ感覚でやれるらしいとわかりました。でも重いのかー。
CS4で追加された複数アートボードについても軽く触れられていました。スタイルやスウォッチなどを同期できる(というか、同じものを使える)のでいろいろ便利とのこと。ただ今のところ実用に堪えるかどうかは……*4ってとこらしい。溝は深いな。

InDesignスペシャル?

最後に、Illustratorスペシャルだった今回のセミナーに続いて、東京でInDesignスペシャル的なセミナーを行う予定との告知が!
時期もまだ未定ですが、7月か8月頃だとのこと。個人的にも業務的にも興味があるのでぜひ参加したいなーと思っています。*5

というわけで

いろいろ聞けてとても参考になりました。もちろんすでに知ってることもたくさんあったんですが、実演や会場の反応が見られたのがかなりの収穫です。
実は仕事始めて何年にもなるのに、こういうセミナーって初めてだったんですよね。どんな雰囲気かなーと内心緊張していました。講義っぽく聞くスタイルだったのは個人的には助かったかも。いつかは少人数のセミナーに出てみたい。今回質問とかできなかったしね。

あとは……30分前に着くのを目指していたのに、いつもどおりしっかり道に迷ってギリギリ10分くらい前に到着したとか。なんとか席に座れてよかったですが、肝を冷やしました……。でっかいリンゴのロゴ入ったビル見たときどれだけほっとしたことか。iPhone3GSほしい(方位磁石的な意味で)。
いろいろ疲れたけど楽しかったな。今度からもう少し積極的にセミナーを探してみることにしようと思います。
さて、おみやげにいただいた『PDF/X-1a 入稿マニュアル』をじっくり読みましょうかね。

*1:このへんの結果とはずいぶん違うなー。

*2:Extendscript ToolKitからの送信先イラレを選んでなかったのが原因だったのかな、あれは

*3:鷹野氏との
「今日の素材はダウンロードできるんでしょうか!」
「……できるようにしておきます!」
「いつから」
「……帰ったらすぐ!」ってやりとりに吹きましたw

*4:マイク外していろいろ言ってたw

*5:夏の高校野球の決勝に被らないことを祈るばかり……

自分のTwitterの使い方を書いたり

するのがちょっと前に流行った気がするのでいまさら書いてみるなどします。
これからはじめようとか思ってる人に役立つものではないのであしからず。

基本的には

独り言言っているだけです。今電車乗ったとか猫に会ったよヽ(゚∀゚*)ノとかファミチキ食べたいとかInDesignかわいいよInDesignとか、あとで読み返すと実にくだらない。*1
今見てるページのURLを貼ったりすることもあります。広めたりツッコミいれたりしたいけどブクマ(livedoor Clip!)するほどでもないものとか。*2
投稿数はたぶんだいぶ多いほう。そのあたり、始めたばかりの頃は結構気にしてました。今は開き直ってるけど一応プロフィールで注意喚起はしてる。

ツール類

家ではTweenを使ってます。別に何でも構わないんですけどね。気分しだいでTwitterFoxを使ったり、Webから直接POSTしたり。移動中はもばついったーにお世話になってます。
Greasemonkeyで自動/半自動投稿することもあります。今入れてるのは「またニコニコ動画見てる」「またWikipedia読んでる」、あとまたWikipe改造した「またやる夫スレまとめ読んでる」くらい。
タブ分けはいろいろ試したけど、結局(一部のよくしゃべるBOT以外)みんな一緒くたに表示しています。見逃したら見逃したで縁がなかったと思うことにしました。一期一会です。
見逃したくない人やキーワードはRSS購読で追ってます。

フォローとかリムーブとかブロックとか

どうぞお気軽に、とプロフィールに書かないのが私のジャスティスです。何もかも気軽にやるのがTwitterであると頑なに信じています。*3
たまに思いつきでえろスパムをブロックしますが、それ以外はブロックしていません。プロテクトにしない限りブロック意味ないし、そもそも「他の人のTLに自分のPOSTが表示されるのが嫌」というのがよくわからない。
フォロー返しも(今は)してません。

挨拶とか

あんまりしませんね。誰に対してもそうなので、無反応でも他意はありません。

BOT大好き

です。たくさんフォローしてます。文章を自動生成するたぐいのが特に好き。偶然の産物(と、それを実現するための作者さんの工夫)を楽しんでます。
あとはわかったーとかbombtterとか空目ったーとか、見知らぬ誰かの愉快な発言を見せてくれるものなど。
ちなみに、個人的にdoppelkunはBOTの中で別格だと思ってます。コンセプトが神すぎる。

ふぁぼり魔

名言迷言ネタ発言、なんでもティンと来たら迷わず☆をつけています。以前調査したところでは一日に150〜170くらいふぁぼっているらしいですね。250で規制でしたっけ……
閾値はかなり低いほうだと自覚してますが、あとで自分のふぁぼり見返してもやっぱり面白いと感じるので問題ないです。

ログ

心底くだらない自分の発言を見返すのが結構好きなので、LoudTwitterというサービスを使って一日ぶんのログを自動的に他ブログに投稿してます。はてダにも投稿できるらしいのですが、そればっかりで埋まりそうなのでやめました。
思ったこと全部書いてるわけじゃないけど、一日の出来事がだいたいまとまるので簡易日記になっています。


ここまで書いてみて

自分にとってTwitterは「日記ブログ」+「掲示板」+「情報収集ソース」である、というごくフツーの結論に至りました。

日記ブログ的に、自分のことをだらだら書く。
掲示板部分は、2chの常駐スレっぽい雰囲気。
情報収集は、RSS購読で。

一つの使い方に決めてしまうにはもったいない柔軟性だと思います。
ノイズが多いと言ってしまえばそうなんだけど、テーマを決めて情報発信しよう!!! って気張っちゃうと疲れてしまう私のような人間にはちょうどいいです。似たタイプの人が「疲れちゃうから何も書かない」→「たまには情報発信もする」になるなら、多少のノイズをスルーしてでも見る(あるいは丸ごと受け入れる)価値はありそうな気がします。

とかなんとか無理やり書いたけど、結局くだらない会話がそこらじゅうで飛びかうのが楽しいってだけだったりして。気が付けば私もまもなく投稿数が10,000に届こうかというところです。……はまりすぎだろJK。

*1:でも読み返す

*2:これをやってるおかげでニュースをクリップすることが減りました

*3:でもここで言ったら結局……

JavaScriptの条件付きコンパイル

コードの一部にIEでだけ実行する処理を入れたいときにちょっと便利っぽい「条件付きコンパイル」について覚えたので自分用にメモ。
Webでしか使えないのでさらっといきます。

基本

JavaScript内で「/* 〜〜 */」と書くとその部分はコメントになり、中になにか書いても実行されない。
ただしIE4+上で実行した場合は「@cc_on」と書くことで条件コンパイルが有効になり、「/*@ 〜〜 @*/」の中身や「//@ 〜〜」の行がコメントアウトされなくなる(=処理が実行される)。

/*@cc_on @*/
/*@
  alert("Hello IE!");
@*/

IE以外の場合はそのままコメントアウトされるので、なにごとも起こりません。
ちなみに「/*@cc_on @*/」のとこは「//@cc_on」でも可。*1

/*@cc_on
  alert("Hello IE!");
@*/

とか

/*@cc_on alert("Hello IE!"); @*/

とかって書くのもおk。

応用(@if...@elif...@else...@endステートメント

条件コンパイルが有効のとき、特殊な条件分岐の書き方ができる。
たとえばこんなの*2

/*@cc_on
  if (@_jscript_version >= 5.7) {
    alert("IE7以上ですね!");
  }
  else if (@_jscript_version >= 5.6) {
    alert("IE6ですね! そろそろ乗り換えたら?");
  }
  else {
    alert("ちょ、IE5.5以下とか……");
  }
@*/

↓こんな風に書ける。

/*@cc_on
  @if (@_jscript_version >= 5.7)
    alert("IE7以上ですね!");
  @elif (@_jscript_version >= 5.6)
    alert("IE6ですね! そろそろ乗り換えたら?");
  @else
    alert("ちょ、IE5.5以下とか……");
  @end
@*/

何の意味があるかというと、コメント区切りを工夫すれば「ある特定の環境のIE」と「それ以外の環境のIE + 他ブラウザ」とで分岐ができるようになるわけです。

/*@cc_on
  @if (@_jscript_version <= 5.6)
    alert("IE6以下ですね! そろそろ乗り換えたら?");
  @else @*/
    alert("IE7以上か、その他のブラウザですね。"); //★
  /*@end
@*/

4行目の後ろに「@*/」が付いているのがポイント。IE以外のブラウザでもここで一度コメント部分が終了するので、★のついた行はそのまま実行されます。もちろん「@_jscript_version <= 5.6」がfalseになったIEでもそれは同じ。あとは条件分岐を終了する@endをIEのみが処理するように「/*@ 〜 @*/」で囲んでやればおk。

……実際使うことがあるかどうかよくわからんけど、もし見かけたらこれを思い出すことにしよう。

さて、長い前フリでしたが

要するにこれです。

javascript:(function(){var%20a=/*@cc_on!@*/false?document.selection.createRange().text:window.getSelection().toString();location.href='http://clip.livedoor.com/clip/add?link='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)+'&tags='+''+'¬es='+((!!a)?encodeURIComponent('『'+a+'』'):'')+'&jump=ref';})();

livedoorクリップで元記事を引用するときに引用符をつけるブックマークレット

最初についてる「/*@cc_on!@*/」が条件付きコンパイル使った部分。
これはつまり論理否定演算子の「!」をコメントで囲んで、直後のfalseを「IEのときだけtrue」にしている。あとは単純に分岐してるだけ。
クロスブラウザにするなら、window.getSelection()が使えるかどうかで分岐なのかなあ」と思っていたのですが、こっちのが簡単ですね。最初見たとき*3リアルで顔が (@∀@)? ってなったのですが、調べてすっきりしましたとさ。

参考にしたのはこのあたりです。
http://www.javascriptkit.com/javatutors/conditionalcompile.shtml
http://msdn.microsoft.com/ja-jp/library/cc391875.aspx
http://www.tagindex.com/kakolog/q4bbs/1201/1523.html

ところでこいつを見てくれ。こいつをどう思う?

応用のところで書いた分岐は、ぐぐって見つかったいくつかのコードを参考にしているのだけど……

//@cc_on
/*@if (@_jscript_version <= 5.6)
    alert("IE6以下ですね! そろそろ乗り換えたら?");
  @else @*/
    alert("IE7以上か、その他のブラウザですね。");
  //@end

こうやって書けるんじゃあるまいか。と思った。そんだけ。

*1:もちろんこれ自体コメントアウトしておかないとエラーになる。

*2:ちなみに分岐条件に使ってる「@_jscript_version」は組み込み変数。IEのバージョンでもなくJavaScriptのバージョンでもなくJScriptのバージョンです。組み込み変数はこれ以外にもいろいろあるみたい。続きはMSDNで!

*3:正確に言えば見たことだけはあったけどさっぱり意味がわからなかった

livedoorクリップで元記事を引用するときに引用符をつけるブックマークレット

最終更新:2009/04/22

私の愛用するソーシャルブックマークサービスlivedoorクリップ。コメントが1000文字までたっぷり書けるのが私にとって最大の魅力であります。
何をそんなにたくさん書くのかというと、(1)要約(検索用キーワードを含めるので長くなる) (2)元記事の引用 (3)意見や感想 などです。いつも全部書いてるわけじゃないですが、100文字軽くオーバーとか当たり前です。

この中で意外とめんどくさいのが(2)の引用。公式のブックマークレットには「選択範囲をコメントにコピーする」ってオプションがあって、クリップ時のコメント欄に元記事で選択状態だったテキストを入れておくこともできるのですが、これだと引用符をつけてくれません。
というわけで自分で改造しました。

追記:添削してもらいました。最新版はこちら

// Firefox、Opera、Safari、GoogleChrome用
javascript:var%20a='';location.href='http://clip.livedoor.com/clip/add?link='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)+'&tags='+''+'&notes='+((!!(a=window.getSelection().toString()))?encodeURIComponent('『'+a+'』'):'')+'&jump=ref'

// IE用……!
javascript:var%20a='';location.href='http://clip.livedoor.com/clip/add?link='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)+'&tags='+''+'&notes='+((!!(a=document.selection.createRange().text))?encodeURIComponent('『'+a+'』'):'')+'&jump=ref'

こんな感じでいいのかなあ。Windows版のFirefox3、Opera9、Safari4Chrome、IE6で確認。たぶんがんばれば共通にできたんだけど、面倒になりました。
選択中のテキストがない場合は引用符も入力されないようになっています。『』が引用符です。変更すればお好みのものを使えると思います。
ちなみに「非公開じゃなくても恥ずかしくないもん!」仕様*1になってますので、万が一使う場合はご注意あれ。

追記(最新版はここから)

ArcCosineさんが添削してくれました。いつもありがとう!
クロスブラウザ対応版です。

javascript:(function(){var%20a=/*@cc_on!@*/false?document.selection.createRange().text:window.getSelection().toString();location.href='http://clip.livedoor.com/clip/add?link='+encodeURIComponent(location.href)+'&amp;title='+encodeURIComponent(document.title)+'&tags='+''+'&notes='+((!!a)?encodeURIComponent('『'+a+'』'):'')+'&jump=ref';})();

/*@cc_on 〜 @*/のあたりはIE専用条件付きコンパイル。あと、無名関数を使ってお行儀良くなりました。条件付きコンパイルについては新たに覚えたので、それはまた別エントリで書こうと思います。

クロスブラウザじゃないほうを書き換えるとこうなるかな……

// Firefox、Opera、Safari、GoogleChrome用
javascript:(function(){var%20a=window.getSelection().toString();location.href='http://clip.livedoor.com/clip/add?link='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)+'&tags='+''+'&notes='+((!!a)?encodeURIComponent('『'+a+'』'):'')+'&jump=ref';})();

// IE用……!
javascript:(function(){var%20a=document.selection.createRange().text;location.href='http://clip.livedoor.com/clip/add?link='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)+'&tags='+''+'&notes='+((!!a)?encodeURIComponent('『'+a+'』'):'')+'&jump=ref';})();

しかしなんで先日の私は変数宣言と代入を分けてたんだろうね?(答え:公式のブックマークレットに引きずられた)

*1:(c)rancorさん 要するに公開設定