About

  • Macintosh の自作ソフトウェアを公開しています。
  • 配布しているアプリケーションは、すべてフリーウェアかつソースコードを公開しています。
  • コメント、不具合の報告、ご要望を待っています。

Donation

このサイトで配布しているソフトを常用されている方は寄付をお願いします。

2016.05.28

01:08:13Permanent Link

Ruby の Nokogiri で読み込んだ XHTML を出力する

Ruby の Nokogiri は、HTML/XML の解析/生成/その他なんでもござれのすごいライブラリだ。Perl の HTML::Parser と HTML::TreeBuilder あわせたようなものと理解している。

先日、「Perl の HTML::TreeBuilder で元の HTML を出力する」という話をした。すなわち、HTML::TreeBuilder で HTML ファイルを読み込み、それを加工して出力するということの下準備というつもりです。入力したものをそのまま吐き出すことさえ、大変苦労した。おなじことを Ruby の Nokogiri ではどうなるだろうという話です。

結論から言えば、Nokogiri も読み込んだ XHTML を素直に吐き出してくれない。普通に to_xhtml メソッドで出力すると、Processing Instruction を Document Type Definition の後ろに出力してくれる。Processing Instruction はファイルの先頭にないと XSLT が適用されないので困る。

仕方がないので、次のスクリプトのように、Nokogiri::HTML のインスタンスから Processing Instruction を抜き出して自前で最初に出力するようにした。

#!/usr/bin/env ruby
# coding: utf-8

require 'rubygems'
require 'nokogiri'

doc =  Nokogiri::HTML <<-EOHTML
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<!-- comment1 -->
  <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>page title</title>
    <!-- comemnt2 -->
  </head>
  <body>
  <p>paragraph1</p>
  <ul>
  <li>item1</li>
  </ul>
  </body>
</html>
EOHTML
pi = doc.xpath('/processing-instruction()') 
puts pi.to_html # processing instruction を最初に出力
pi.remove
puts doc.to_xhtml(:encoding => 'UTF-8')

ストレートフォワードにはいかないけれど、HTML::TreeBuilder よりは圧倒的に素直に扱える。やっぱり、Ruby に浮気せざるえないか?

2016.05.27

20:43:03Permanent Link

TerminalCommander 3.0.1 : ターミナルでのシェルコマンドの実行支援

ターミナルでのシェルコマンドの実行を支援する AppleScript モジュールです。以下のような、複雑な処理を行いたいときにこのスクリプトはお役に立てるでしょう。

  • ターミナルウィンドウを追跡して、同じターミナルで何度もシェルコマンドを実行したい。
  • シェルコマンドの終了を待ってから、次の処理に移りたい。
  • シェルコマンドを実行するターミナルのシェルを指定したい。
  • ターミナルウィンドウのタイトルの設定、もしくは設定セットを指定したい。

2016.05.26

11:55:07Permanent Link

UnixScriptTools for mi 2.5.2 : テキストエディタ mi で Unix スクリプト(bash、Perl など)の開発および実行を支援

テキストエディタ mi で Unix スクリプト(bash、Perl、gnuplot、Octave など)の開発および実行を支援するアプリケーションおよびスクリプトのセットです。

mi の最前面のウィンドウの Unix スクリプトをコマンド一発でターミナルを起動して実行することができます。ターミナルでコマンドを入力する手間を省くことができ、スクリプトの開発効率を上げることができると思います。

さらに、対話型のプロセスをサポートします。ターミナルで対話型プロセスを起動し、そのプロセスに mi で選択しているテキストを送りつけることができます。

変更点 :

  • ターミナルが起動していない状態から、ターミナルでコマンドを実行する操作を行うと、2回目以降コマンドが実行できなくなる不具合を修正。
  • OS X 10.9 以降が必要です。

2016.05.15

09:51:46Permanent Link

TeX Tools for mi 4.0.6 : テキストエディタ mi を中心とした LaTeX 統合環境

テキストエディタ mi に中心とした LaTeX の統合環境を実現する TEX モードです。

mi は プログラム言語やTeX、HTML などのコード入力するのに便利な多くの機能(キーワードのカラー表示、モード機能など)を備えたテキストエディタです。TeX Tools fro mi は mi に付属の TEX モードより高機能なコンパイル、入力支援ツール、周辺のアプリケーション(PictPrinter, xdvi, Skim, プレビュー.app)との統合を提供します。

  • ツールパレットに表示されるボタン一発で、タイプセットからプレビュー、PDF の作成をまで自動で行えます(ツールパレット)。
  • log ファイルを解析して、ソースコートのエラー発生箇所にジャンプできるインデックスを生成します。\input や \includeを 使った TeX ソースファイルも、正しく log ファイルを解析します。
  • DVI プレビューア(PictPrinter、xdvi)で表示されているDVI ファイルと、mi で表示している TeX ソースファイルの間で、それぞれ対応する位置にジャンプする事ができます(source special 機能のサポート)。
  • PDF ビューアとして Skim を使えば、PDF と TeX ソースファイルの間で、対応する位置にジャンプできます。
  • dvips、bibtex、ebbなどをシェルコマンドの入力を全く行わずに、一連の作業を行うことができます。
  • 分割された TeX ソースを扱いやすくするための特別な機能があります。(%ParentFile Mechanism
  • 書類で使われているラベル一覧を表示して、書類中に簡単に参照を挿入することができます(リファレンスパレット)。
  • その他、多くの便利なスクリプトが付属します。

変更点:

  • ターミナルが起動していないときに、ターミナルでコマンドを実行すると、2回目以降コマンドが実行できなくなる不具合を修正。
  • HelpBook のフォルダレイアウトを新しいものにした。

MacBook Pro 2008 late の画面半分が映らなくなってしまいました (T-T)。画面半分のまま、心眼で作業をしております。

2016.05.13

11:54:52Permanent Link

TerminalControl.osaxSmartTitleGraveyard に移しました

二つのソフトがお蔵入りしました。

TerminalControlosax は、ターミナル.app のプロセスにスクリプティング機能追加を割り込ませることによって、ターミナル.app の 足りない AppleScript に関する機能を補うスクリプティング機能追加です。

OS X 10.11 で System Integrity Protection が導入されたことにより、スクリプティング機能追加をターミナル.app のプロセス内で実行できなくなってしまいました。危険な香りがしますが、既存アプリケーションの機能強化の強力な手段だったので、できなくなって誠に残念です。

もっぱら、Open in Terminal でターミナルのワーキングディレクトリを取得することが目的でしたが、幸いなことに別の仕組みを開発することができたのでお蔵入りです。

SmartTitle は、ターミナルのウィンドウのタイトルに、シェルの working directory のパスを自動的に表示するコマンドラインツールです。もともとはターミナル.app のウィンドウタイトルにマルチバイト(日本語の文字など)を含んだパスを設定するために作りました。

普通はエスケープシーケンスをつかって、ウインドウタイトルを変更するかと思いますが、OS X 10.6 以前では、エスケープシーケンスではマルチバイト文字をタイトルに設定できなかったんですね。そこで、エスケープシーケンスを使わずコマンドラインからターミナルウインドウタイトルを AppleScript/AppleEvent で変更するのがこの作品の肝です。

初期は、Shell と AppleScript で実装しており動作速度が遅く、コマンドを実行すると次のコマンドプロンプトの表示が遅くてストレスを感じていました。すべて Objective-C で実装し直すと十分にストレスの感じない環境になったと思います。

OS X 10.7 から、エスケープシーケンスでマルチバイト文字をタイトルに設定できるようになったので、お蔵入りです。

< Previous Topics