Commits on Sep 24, 2014
  1. Don't use Mocha in tests.

    committed Sep 24, 2014
  2. Ignore Gemfile.lock.

    committed Sep 24, 2014
  3. Add Gemfile for easy setup.

    committed Sep 24, 2014
Commits on Dec 19, 2010
  1. Add test cases for titleize.

    - Always test the empty string (0 byte size)
    - Add my favorite Disney movie of the moment
    committed Dec 19, 2010
  2. Correctly use the length in characters instead of bytes for titleize.

    - Fixes an illegal read because byte length is usually longer than character length.
    - Style cleanup of the code.
    committed Dec 19, 2010
  3. Mention Homebrew in the install instructions for Glib2.

    Thanks to Yury Korolev for mentioning this.
    committed Dec 19, 2010
  4. Complete the titleize tests.

    committed Dec 19, 2010
Commits on Dec 18, 2010
  1. @yury

    Add simple titleize support

    yury committed with Dec 16, 2010
Commits on Dec 9, 2009
Commits on Dec 8, 2009
Commits on Jul 26, 2009
  1. Make Unichars compile and run on Ruby 1.9.

    I'm not sure why you would want to use Unichars on 1.9 because 1.9's encoding
    support is good enough and certainly a lot faster than Unichars.
    
    Tip of the hat to: crishoj.
    committed Jul 26, 2009
Commits on Dec 31, 2008
  1. Add documentation to the Unichars class and update the Chars document…

    …ation. Bump version to 0.4.
    committed Dec 31, 2008
  2. Add a simple memory test for memory profiling. # Please enter the com…

    …mit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # On branch master
    # Changes to be committed:
    # (use "git reset HEAD <file>..." to unstage)
    #
    #	new file: test/profile/data/rshmn10j.txt
    #	new file: test/profile/memory.rb
    #
    diff --git a/test/profile/data/rshmn10j.txt b/test/profile/data/rshmn10j.txt
    new file mode 100644
    index 0000000..63e7864
    --- /dev/null
    +++ b/test/profile/data/rshmn10j.txt
    @@ -0,0 +1 @@
    +
    The Project Gutenberg Etext of Rashomon by AKUTAGAWA Ryunosuke Copyright laws are changing all over the world, be sure to check the copyright laws for your country before posting these files!! Please take a look at the important information in this header. We encourage you to keep this file on your own disk, keeping an electronic path open for the next readers. Do not remove this. **Welcome To The World of Free Plain Vanilla Electronic Texts** **Etexts Readable By Both Humans and By Computers, Since 1971** *These Etexts Prepared By Hundreds of Volunteers and Donations* Information on contacting Project Gutenberg to get Etexts, and further information is included below. We need your donations. Rashomon by AKUTAGAWA Ryunosuke November, 1999 [Etext #1982] The Project Gutenberg Etext of Rashomon by AKUTAGAWA Ryunosuke ******This file should be named rshmn10j.txt or rshmn10j.zip****** Corrected EDITIONS of our etexts get a new NUMBER, rshmn11.txt VERSIONS based on separate sources get new LETTER, rshmn10k.txt This etext was prepared by Rick Davis, Ashigawa, Japan. Project Gutenberg Etexts are usually created from multiple editions, all of which are in the Public Domain in the United States, unless a copyright notice is included. Therefore, we usually do NOT keep any of these books in compliance with any particular paper edition. We are now trying to release all our books one month in advance of the official release dates, leaving time for better editing. Please note: neither this list nor its contents are final till midnight of the last day of the month of any such announcement. The official release date of all Project Gutenberg Etexts is at Midnight, Central Time, of the last day of the stated month. A preliminary version may often be posted for suggestion, comment and editing by those who wish to do so. To be sure you have an up to date first edition [xxxxx10x.xxx] please check file sizes in the first week of the next month. Since our ftp program has a bug in it that scrambles the date [tried to fix and failed] a look at the file size will have to do, but we will try to see a new copy has at least one byte more or less. Information about Project Gutenberg (one page) We produce about two million dollars for each hour we work. The time it takes us, a rather conservative estimate, is fifty hours to get any etext selected, entered, proofread, edited, copyright searched and analyzed, the copyright letters written, etc. This projected audience is one hundred million readers. If our value per text is nominally estimated at one dollar then we produce $2 million dollars per hour this year as we release thirty-six text files per month, or 432 more Etexts in 1999 for a total of 2000+ If these reach just 10% of the computerized population, then the total should reach over 200 billion Etexts given away this year. The Goal of Project Gutenberg is to Give Away One Trillion Etext Files by December 31, 2001. [10,000 x 100,000,000 = 1 Trillion] This is ten thousand titles each to one hundred million readers, which is only ‾5% of the present number of computer users. At our revised rates of production, we will reach only one-third of that goal by the end of 2001, or about 3,333 Etexts unless we manage to get some real funding; currently our funding is mostly from Michael Hart's salary at Carnegie-Mellon University, and an assortment of sporadic gifts; this salary is only good for a few more years, so we are looking for something to replace it, as we don't want Project Gutenberg to be so dependent on one person. We need your donations more than ever! All donations should be made to "Project Gutenberg/CMU": and are tax deductible to the extent allowable by law. (CMU = Carnegie- Mellon University). For these and other matters, please mail to: Project Gutenberg P. O. Box 2782 Champaign, IL 61825 When all other email fails. . .try our Executive Director: Michael S. Hart <hart@pobox.com> hart@pobox.com forwards to hart@prairienet.org and archive.org if your mail bounces from archive.org, I will still see it, if it bounces from prairienet.org, better resend later on. . . . We would prefer to send you this information by email. ****** To access Project Gutenberg etexts, use any Web browser to view http://promo.net/pg.  This site lists Etexts by
    
    author and by title, and includes information about how
    
    to get involved with Project Gutenberg.  You could also
    
    download our past Newsletters, or subscribe here.  This
    
    is one of our major sites, please email hart@pobox.com,
    
    for a more complete list of our various sites.
    
    
    
    To go directly to the etext collections, use FTP or any
    
    Web browser to visit a Project Gutenberg mirror (mirror
    
    sites are available on 7 continents; mirrors are listed
    
    at http://promo.net/pg).
    
    
    
    Mac users, do NOT point and click, typing works better.
    
    
    
    Example FTP session:
    
    
    
    ftp sunsite.unc.edu
    
    login: anonymous
    
    password: your@login
    
    cd pub/docs/books/gutenberg
    
    cd etext90 through etext99
    
    dir [to see files]
    
    get or mget [to get files. . .set bin for zip files]
    
    GET GUTINDEX.??  [to get a year's listing of books, e.g., GUTINDEX.99]
    
    GET GUTINDEX.ALL [to get a listing of ALL books]
    
    
    
    ***
    
    
    
    **Information prepared by the Project Gutenberg legal advisor**
    
    
    
    (Three Pages)
    
    
    
    
    
    ***START**THE SMALL PRINT!**FOR PUBLIC DOMAIN ETEXTS**START***
    
    Why is this "Small Print!" statement here?  You know: lawyers.
    
    They tell us you might sue us if there is something wrong with
    
    your copy of this etext, even if you got it for free from
    
    someone other than us, and even if what's wrong is not our
    
    fault.  So, among other things, this "Small Print!" statement
    
    disclaims most of our liability to you.  It also tells you how
    
    you can distribute copies of this etext if you want to.
    
    
    
    *BEFORE!* YOU USE OR READ THIS ETEXT
    
    By using or reading any part of this PROJECT GUTENBERG-tm
    
    etext, you indicate that you understand, agree to and accept
    
    this "Small Print!" statement.  If you do not, you can receive
    
    a refund of the money (if any) you paid for this etext by
    
    sending a request within 30 days of receiving it to the person
    
    you got it from.  If you received this etext on a physical
    
    medium (such as a disk), you must return it with your request.
    
    
    
    ABOUT PROJECT GUTENBERG-TM ETEXTS
    
    This PROJECT GUTENBERG-tm etext, like most PROJECT GUTENBERG-
    
    tm etexts, is a "public domain" work distributed by Professor
    
    Michael S. Hart through the Project Gutenberg Association at
    
    Carnegie-Mellon University (the "Project").  Among other
    
    things, this means that no one owns a United States copyright
    
    on or for this work, so the Project (and you!) can copy and
    
    distribute it in the United States without permission and
    
    without paying copyright royalties.  Special rules, set forth
    
    below, apply if you wish to copy and distribute this etext
    
    under the Project's "PROJECT GUTENBERG" trademark.
    
    
    
    To create these etexts, the Project expends considerable
    
    efforts to identify, transcribe and proofread public domain
    
    works.  Despite these efforts, the Project's etexts and any
    
    medium they may be on may contain "Defects".  Among other
    
    things, Defects may take the form of incomplete, inaccurate or
    
    corrupt data, transcription errors, a copyright or other
    
    intellectual property infringement, a defective or damaged
    
    disk or other etext medium, a computer virus, or computer
    
    codes that damage or cannot be read by your equipment.
    
    
    
    LIMITED WARRANTY; DISCLAIMER OF DAMAGES
    
    But for the "Right of Replacement or Refund" described below,
    
    [1] the Project (and any other party you may receive this
    
    etext from as a PROJECT GUTENBERG-tm etext) disclaims all
    
    liability to you for damages, costs and expenses, including
    
    legal fees, and [2] YOU HAVE NO REMEDIES FOR NEGLIGENCE OR
    
    UNDER STRICT LIABILITY, OR FOR BREACH OF WARRANTY OR CONTRACT,
    
    INCLUDING BUT NOT LIMITED TO INDIRECT, CONSEQUENTIAL, PUNITIVE
    
    OR INCIDENTAL DAMAGES, EVEN IF YOU GIVE NOTICE OF THE
    
    POSSIBILITY OF SUCH DAMAGES.
    
    
    
    If you discover a Defect in this etext within 90 days of
    
    receiving it, you can receive a refund of the money (if any)
    
    you paid for it by sending an explanatory note within that
    
    time to the person you received it from.  If you received it
    
    on a physical medium, you must return it with your note, and
    
    such person may choose to alternatively give you a replacement
    
    copy.  If you received it electronically, such person may
    
    choose to alternatively give you a second opportunity to
    
    receive it electronically.
    
    
    
    THIS ETEXT IS OTHERWISE PROVIDED TO YOU "AS-IS".  NO OTHER
    
    WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, ARE MADE TO YOU AS
    
    TO THE ETEXT OR ANY MEDIUM IT MAY BE ON, INCLUDING BUT NOT
    
    LIMITED TO WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
    
    PARTICULAR PURPOSE.
    
    
    
    Some states do not allow disclaimers of implied warranties or
    
    the exclusion or limitation of consequential damages, so the
    
    above disclaimers and exclusions may not apply to you, and you
    
    may have other legal rights.
    
    
    
    INDEMNITY
    
    You will indemnify and hold the Project, its directors,
    
    officers, members and agents harmless from all liability, cost
    
    and expense, including legal fees, that arise directly or
    
    indirectly from any of the following that you do or cause:
    
    [1] distribution of this etext, [2] alteration, modification,
    
    or addition to the etext, or [3] any Defect.
    
    
    
    DISTRIBUTION UNDER "PROJECT GUTENBERG-tm"
    
    You may distribute copies of this etext electronically, or by
    
    disk, book or any other medium if you either delete this
    
    "Small Print!" and all other references to Project Gutenberg,
    
    or:
    
    
    
    [1]  Only give exact copies of it.  Among other things, this
    
         requires that you do not remove, alter or modify the
    
         etext or this "small print!" statement.  You may however,
    
         if you wish, distribute this etext in machine readable
    
         binary, compressed, mark-up, or proprietary form,
    
         including any form resulting from conversion by word pro-
    
         cessing or hypertext software, but only so long as
    
         *EITHER*:
    
    
    
         [*]  The etext, when displayed, is clearly readable, and
    
              does *not* contain characters other than those
    
              intended by the author of the work, although tilde
    
              (‾), asterisk (*) and underline (_) characters may
    
              be used to convey punctuation intended by the
    
              author, and additional characters may be used to
    
              indicate hypertext links; OR
    
    
    
         [*]  The etext may be readily converted by the reader at
    
              no expense into plain ASCII, EBCDIC or equivalent
    
              form by the program that displays the etext (as is
    
              the case, for instance, with most word processors);
    
              OR
    
    
    
         [*]  You provide, or agree to also provide on request at
    
              no additional cost, fee or expense, a copy of the
    
              etext in its original plain ASCII form (or in EBCDIC
    
              or other equivalent proprietary form).
    
    
    
    [2]  Honor the etext refund and replacement provisions of this
    
         "Small Print!" statement.
    
    
    
    [3]  Pay a trademark license fee to the Project of 20% of the
    
         net profits you derive calculated using the method you
    
         already use to calculate your applicable taxes.  If you
    
         don't derive profits, no royalty is due.  Royalties are
    
         payable to "Project Gutenberg Association/Carnegie-Mellon
    
         University" within the 60 days following each
    
         date you prepare (or were legally required to prepare)
    
         your annual (or equivalent periodic) tax return.
    
    
    
    WHAT IF YOU *WANT* TO SEND MONEY EVEN IF YOU DON'T HAVE TO?
    
    The Project gratefully accepts contributions in money, time,
    
    scanning machines, OCR software, public domain etexts, royalty
    
    free copyright licenses, and every other sort of contribution
    
    you can think of.  Money should be paid to "Project Gutenberg
    
    Association / Carnegie-Mellon University".
    
    
    
    *END*THE SMALL PRINT! FOR PUBLIC DOMAIN ETEXTS*Ver.04.29.93*END*
    
    
    
    
    
    
    
    
    
    
    
    
    
    RASHOMON
    By AKUTAGAWA Ryunosuke
    
    A note from the digitizer
    
    This file is encoded in Japanese. Your computer must be Japanese-capable 
    to read it.
    
    The text was taken from a 1917 edition which is naturally written in the 
    traditional orthography with prewar kanji forms. I have taken the liberty 
    of using postwar orthography and kanji forms, and have also added 
    readings in parentheses where I considered them necessary.
    
    
    
    
    羅生門
    
    芥川龍之介
    
     或日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。 広い門
    の下には、この男の外に誰もいない。ただ、所々丹塗の剥げた、大きな円柱に、きりぎ
    りすが一匹とまっている。羅生門が、朱雀大路にある以上は、この男の外にも、雨やみ
    をする市女笠や揉烏帽子が、もう二三人はありそうなものである。それが、この男の外
    に誰もいない。
     何故かと云うと、この二三年、京都には、地震とか辻風とか火事とか饑饉とか云う災
    いがつづいて起こった。そこで洛中のさびれ方は一通りでない。旧記によると、仏像や
    仏具を打砕いて、その丹がついたり、金銀の箔(はく)がついたりした木を、路ばたに
    つみ重ねて薪の料(しろ)に売っていたと云うことである。洛中がその始末であるから、
    羅生門の修理などは、元より誰も捨てて顧みる者がなかった。するとその荒れ果てたの
    をよい事にして、狐狸(こり)が棲む。盗人が棲む。とうとうしまいには、引取り手の
    ない死人を、この門へ持って来て、捨てて行くと云う習慣さえ出来た。そこで、日の目
    が見えなくなると、誰でも気味を悪がって、この門の近所へは足ぶみをしない事になっ
    てしまったのである。
     その代り又鴉が何処からか、たくさん集まって来た。昼間見ると、その鴉が何羽とな
    く輪を描いて、高い鴟尾(しび)のまわりを啼きながら、飛びまわっている。殊に門の
    上の空が、夕焼けであかくなる時には、それが胡麻をまいたようにはっきり見えた。鴉
    は、勿論、門の上にある死人の肉を、啄みに来るのである。ーー尤も今日は、刻限が遅
    いせいか、一羽も見えない。唯、所々、崩れかかった、そうしてその崩れ目に長い草の
    はえた石段の上に、鴉の糞(くそ)が、点々と白くこびりついているのが見える。下人
    は七段ある石段の一番上の段に洗いざらした紺の襖(あお)の尻を据えて、右の頬に出
    来た、大きな面皰(にきび)を気にしながら、ぼんやり、雨のふるのを眺めているので
    ある。
     作者はさっき、「下人が雨やみを待っていた」と書いた。しかし、下人は、雨がやん
    でも格別どうしようと云う当てはない。ふだんなら、勿論、主人の家へ帰る可き筈であ
    る。所がその主人からは、四五日前に暇を出された。前にも書いたように、当時京都の
    町は一通りならず衰微していた。今この下人が、永年、使われていた主人から暇を出さ
    れたのも、この衰微の小さな余波に外ならない。だから、「下人が雨やみを待っていた」
    と云うよりも、「雨にふりこめられた下人が、行き所がなくて、途方にくれていた」と
    云う方が、適当である。その上、今日の空模様も少なからずこの平安朝の下人の
    Sentimentalismeに影響した。申(さる)の刻下がりからふり出した雨は、未だに上
    がるけしきがない。そこで、下人は、何を措いても差当たり明日の暮しをどうにかしよ
    うとしてーー云わばどうにもならない事を、どうにかしようとして、とりとめもない考
    えをたどりながら、さっきから朱雀大路にふる雨の音を聞くともなく聞いていた。
     雨は羅生門をつつんで、遠くから、ざあっと云う音をあつめてくる。夕闇は次第に空
    を低くして、見上げると、門の屋根が、斜めにつき出した甍(いらか)の先に、重たく
    うす暗い雲を支えている。
     どうにもならない事を、どうにかする為には、手段を選んでいる遑(いとま)はない。
    選んでいれば、築地(ついじ)の下か、道ばたの土の上で、饑死(うえじに)をするば
    かりである。そうして、この門の上へ持って来て、犬のように捨てられてしまうばかり
    である。選ばないとすればーー下人の考えは、何度も同じ道を低徊した揚句に、やっと
    この局所へ逢着した。しかしこの「すれば」は、いつもでたっても、結局「すれば」で
    あった。下人は、手段を選ばないという事を肯定しながらも、この「すれば」のかたを
    つける為に、当然、この後に来る可き「盗人になるより外に仕方がない」と云う事を、
    積極的に肯定するだけの、勇気が出ずにいたのである。
     下人は大きな嚏(くさめ)をして、それから、大儀そうに立上がった。夕冷えのする
    京都は、もう火桶が欲しい程の寒さである。風は門の柱と柱との間を、夕闇と共に遠慮
    なく、吹きぬける。丹塗の柱にとまっていたきりぎりすも、もうどこかへ行ってしまっ
    た。
     下人は、頸をちぢめながら、山吹の汗衫(かざみ)に重ねた、紺の襖の肩を高くして
    門のまわりを見まわした。雨風の患のない、人目にかかる惧のない、一晩楽にねられそ
    うな所があれば、そこでともかくも、夜を明かそうと思ったからである。すると、幸門
    の上の楼へ上る、幅の広い、之も丹を塗った梯子が眼についた。上なら、人がいたにし
    ても、どうせ死人ばかりである。下人は、そこで腰にさげた聖柄(ひじりづか)の太刀
    が鞘走らないように気をつけながら、藁草履をはいた足を、その梯子の一番下の段へふ
    みかけた。
     それから、何分かの後である。羅生門の楼の上へ出る、幅の広い梯子の中段に、一人
    の男が、猫のように身をちぢめて、息を殺しながら、上の容子を窺っていた。楼の上か
    らさす火の光が、かすかに、その男の右の頬をぬらしている。短い鬚(ひげ)の中に、
    赤く膿を持った面皰のある頬である。下人は、始めから、この上にいる者は、死人ばか
    りだと高を括っていた。それが、梯子を二三段上って見ると、上では誰か火をとぼして、
    しかもその火を其処此処と動かしているらしい。これは、その濁った、黄いろい光が、
    隅々に蜘蛛の巣をかけた天井裏に、ゆれながら映ったので、すぐにそれと知れたのであ
    る。この雨の夜に、この羅生門の上で、火をともしているからは、どうせ唯の者ではな
    い。
     下人は、宮守(やもり)のように足音をぬすんで、やっと急な梯子を、一番上の段ま
    で這うようにして上りつめた。そうして体を出来るだけ、平にしながら、頸を出来るだ
    け、前へ出して、恐る恐る、楼の内を覗いて見た。
     見ると、楼の内には、噂に聞いた通り、幾つかの屍骸(しがい)が、無造作に棄てて
    あるが、火の光の及ぶ範囲が、思ったより狭いので、数は幾つともわからない。唯、お
    ぼろげながら、知れるのは、その中に裸の屍骸と、着物を着た屍骸とがあると云う事で
    ある。勿論、中には女も男もまじっているらしい。そうして、その屍骸は皆、それが、
    嘗(かつて)、生きていた人間だと云う事実さえ疑われる程、土を捏ねて造った人形の
    ように、口を開いたり、手を延ばしたりして、ごろごろ床の上にころがっていた。しか
    も、肩とか胸とかの高くなっている部分に、ぼんやりした火の光をうけて、低くなって
    いる部分の影を一層暗くしながら、永久に唖(おし)の如く黙っていた。
     下人は、それらの屍骸の腐爛した臭気に思わず、鼻を掩った(おおった)。しかし、
    その手は、次の瞬間には、もう鼻を掩う事を忘れていた。或る強い感情が殆悉(ほとん
    どことごとく)この男の嗅覚を奪ってしまったからである。
     下人の眼は、その時、はじめて、其屍骸の中に蹲っている(うずくまっている)人間
    を見た。檜肌色(ひはだいろ)の着物を著た、背の低い、痩せた、白髪頭の、猿のよう
    な老婆である。その老婆は、右の手に火をともした松の木片を持って、その屍骸の一つ
    の顔を覗きこむように眺めていた。髪の毛の長い所を見ると、多分女の屍骸であろう。
     下人は、六分の恐怖と四分の好奇心とに動かされて、暫時は呼吸(いき)をするのさ
    え忘れていた。旧記の記者の語を借りれば、「頭身(とうしん)の毛も太る」ように感
    じたのである。すると、老婆は、松の木片を、床板の間に挿して、それから、今まで眺
    めていた屍骸の首に両手をかけると、丁度、猿の親が猿の子の虱(しらみ)をとるよう
    に、その長い髪の毛を一本ずつ抜きはじめた。髪は手に従って抜けるらしい。
     その髪の毛が、一本ずつ抜けるのに従って下人の心からは、恐怖が少しずつ消えて行っ
    た。そうして、それと同時に、その老婆に対するはげしい憎悪が、少しずつ動いて来た。
    いや、この老婆に対すると云っては、語弊があるかも知れない。寧(むしろ)、あらゆ
    る悪に対する反感が、一分毎に強さを増して来たのである。この時、誰かがこの下人に、
    さっき門の下でこの男が考えていた、饑死(うえじに)をするか盗人になるかと云う問
    題を、改めて持出したら、恐らく下人は、何の未練もなく、饑死を選んだ事であろう。
    それほど、この男の悪を憎む心は、老婆の床に挿した松の木片のように、勢よく燃え上
    がりだしていたのである。
     下人には、勿論、何故老婆が死人の髪の毛を抜くかわからなかった。従って、合理的
    には、それを善悪の何れに片づけてよいか知らなかった。しかし下人にとっては、この
    雨の夜に、この羅生門の上で、死人の髪の毛を抜くと云う事が、それだけで既に許す可
    らざる悪であった。勿論 下人は さっき迄自分が、盗人になる気でいた事なぞは と
    うに忘れているのである。
     そこで、下人は、両足に力を入れて、いかなり、梯子から上へ飛び上がった そうし
    て聖柄(ひじりづか)の太刀に手をかけながら、大股に老婆の前へ歩みよった。老婆が
    驚いたのは 云う迄もない。
     老婆は、一目下人を見ると、まるで弩(いしゆみ)にでも弾かれたように 飛び上がっ
    た。
     「おのれ、どこへ行く。」
     下人は、老婆が屍骸につまづきながら、慌てふためいて逃げようとする行手を塞いで、
    こう罵った。老婆は、それでも下人をつきのけて行こうとする。下人は又、それを行か
    すまいとして、押しもどす。二人は屍骸の中で、暫、無言のまま、つかみ合った。しか
    し勝負は、はじめから、わかっている。下人はとうとう、老婆の腕をつかんで、無理に
    そこへねじ倒した。丁度、鶏(とり)の脚のような、骨と皮ばかりの腕である。
     「何をしていた。さあ何をしていた。云え。云わぬと これだぞよ。」
     下人は、老婆をつき放すと、いきなり、太刀の鞘を払って、白い鋼(はがね)の色を
    その眼の前へつきつけた。けれども、老婆は黙っている。両手をわなわなふるわせて、
    肩で息を切りながら、眼を、眼球がまぶたの外へ出そうになる程、見開いて、唖のよう
    に執拗(しゅうね)く黙っている。これを見ると、下人は始めて明白にこの老婆の生死
    が、全然、自分の意志に支配されていると云う事を意識した。そうして、この意識は、
    今まではげしく燃えていた憎悪の心を何時(いつ)の間にか冷ましてしまった。後に残っ
    たのは、唯、或仕事をして、それが円満に成就した時の、安らかな得意と満足とがある
    ばかりである。そこで、下人は、老婆を、見下げながら、少し声を柔げてこう云った。
     「己は検非違使(けびいし)の庁の役人などではない。今し方この門の下を通りかかっ
    た旅の者だ。だからお前に縄をかけて、どうしようと云うような事はない。唯今時分、
    この門の上で、何をしていたのだか、それを己に話さえすればいいのだ。」
     すると、老婆は、見開いた眼を、一層大きくして、じっとその下人の顔を見守った。
    まぶたの赤くなった、肉食鳥のような、鋭い眼で見たのである。それから、皺で、殆、
    鼻と一つになった唇を何か物でも噛んでいるように動かした。細い喉で、尖った喉仏の
    動いているのが見える。その時、その喉から、鴉(からす)の啼くような声が、喘ぎ喘
    ぎ、下人の耳へ伝わって来た。
     「この髪を抜いてな、この女の髪を抜いてな、鬘(かつら)にしようと思うたの
    じゃ。」
     下人は、老婆の答が存外、平凡なのに失望した。そうして失望すると同時に、又前の
    憎悪が、冷な侮蔑と一しょに、心の中へはいって来た。すると その気色(けしき)が、
    先方へも通じたのであろう。老婆は、片手に、まだ屍骸の頭から奪(と)った長い抜け
    毛を持ったなり、蟇(ひき)のつぶやくような声で、口ごもりながら、こんな事を云っ
    た。
     成程、死人の髪の毛を抜くと云う事は、悪い事かね知れぬ。しかし、こう云う死人の
    多くは、皆 その位な事を、されてもいい人間ばかりである。現に、自分が今、髪を抜
    いた女などは、蛇を四寸ばかりずつに切って干したのを、干魚(ほしうお)だと云って、
    太刀帯(たちはき)の陣へ売りに行った。疫病にかかって死ななかったなら、今でも売
    りに行っていたかもしれない。しかも、この女の売る干魚は、味がよいと云うので、太
    刀帯たちが、欠かさず菜料に買っていたのである。自分は、この女のした事が悪いとは
    思わない。しなければ、饑死(えうじに)をするので、仕方がなくした事だからである。
    だから、又今、自分のしていた事も悪い事とは思わない。これもやはりしなければ、饑
    死をするので、仕方がなくする事だからである。そうして、その仕方がない事を、よく
    知っていたこの女は、自分のする事を許してくれるのにちがいないと思うからであ
    る。ーー老婆は、大体こんな意味の事を云った。
     下人は、太刀を鞘におさめて、その太刀の柄を左の手でおさえながら、冷然として、
    この話を聞いていた。勿論、 右の手では、赤く頬に膿を持た大きな面皰(にきび)を
    気にしながら、聞いているのである。しかし、之を聞いている中に、下人の心には、或
    勇気が生まれて来た。それは さっき、門の下でこの男に欠けていた勇気である。そう
    して、又さっき、この門の上へ上(あが)って、その老婆を捕えた時の勇気とは、全然、
    反対な方向に動こうとする勇気である。下人は、饑死をするか盗人になるかに迷わなかっ
    たばかりではない。その時のこの男の心もちから云えば、饑死などと云う事は、殆、考
    える事さえ出来ない程、意識の外に追い出されていた。
     「きっと、そうか。」
     老婆の話が完ると、下人は嘲(あざけ)るような声で念を押した。そうして、一足前
    へ出ると、不意に、右の手を面皰から離して、老婆の襟上(えりがみ)をつかみながら、
    こう云った。
     「では、己が引剥(ひはぎ)をしようと恨むまいな。己もそうしなければ、饑死をす
    る体なのだ。」
     下人は、すばやく、老婆の着物を剥ぎとった。それから、足にしがみつこうとする老
    婆を、手荒く屍骸の上へ蹴倒した。梯子の口までは、僅に五歩を数えるばかりである。
    下人は、剥ぎとった桧肌色の着物をわきにかかえて、またたく間に急な梯子を夜の底へ
    かけ下りた。
     暫、死んだように倒れていた老婆が、屍骸の中から、その裸の体を起こしたのは、そ
    れから間もなくの事である。老婆は、つぶやくような、うめくような声を立てながら、
    まだ燃えている火の光をたよりに、梯子の口まで、這って行った。そうして、そこから、
    短い白髪を倒(さかさま)にして、門の下を覗きこんだ。外には、唯、黒洞々(こくと
    うとう)たる夜があるばかりである。
     下人は、既に、雨を冒して、京都の町へ強盗を働きに急いでいた。
    \ No newline at end of file
    diff --git a/test/profile/memory.rb b/test/profile/memory.rb
    new file mode 100644
    index 0000000..b7bbae7
    --- /dev/null
    +++ b/test/profile/memory.rb
    @@ -0,0 +1,55 @@
    +# encoding: utf-8
    +
    +$:.unshift(File.expand_path('../../../ext/glib', __FILE__))
    +$:.unshift(File.expand_path('../../../lib', __FILE__))
    +
    +$KCODE = 'UTF8'
    +
    +require 'unichars'
    +
    +class MemoryTest
    +  DATA = File.read(File.expand_path('../data/rshmn10j.txt', __FILE__))
    +  
    +  def test_size
    +    chars(DATA).size
    +  end
    +  
    +  def test_upcase
    +    chars(DATA).upcase
    +  end
    +  
    +  def test_downcase
    +    chars(DATA).downcase
    +  end
    +  
    +  def test_reverse
    +    chars(DATA).reverse
    +  end
    +  
    +  def test_normalize
    +    Unichars::NORMALIZATION_FORMS.each do |form|
    +      chars(DATA).normalize(form)
    +    end
    +  end
    +  
    +  private
    +  
    +  def chars(string)
    +    Unichars.new(string)
    +  end
    +  
    +  def self.run
    +    suite = MemoryTest.new
    +    suite.methods.grep(/^test_/).each do |test|
    +      (ENV['TIMES'] || 1).to_i.times do
    +        suite.send(test)
    +      end
    +    end
    +  end
    +end
    +
    +if __FILE__ == $0
    +  at_exit do
    +    MemoryTest.run
    +  end
    +end
    \ No newline at end of file
    committed Dec 31, 2008
Commits on Dec 30, 2008
Commits on Dec 22, 2008
  1. Add Glib.utf8_normalize and a default normalization form.

    - Add Glib.utf8_normalize
    - Add Unichars.default_normalization_form
    committed Dec 22, 2008
Commits on Nov 24, 2008
  1. Fit enough for 0.2 (:

    committed Nov 24, 2008
  2. Add tests for the Chars class.

    Add tests for the Chars class. Fix a problem with method_missing. Use send instead of __send__.
    committed Nov 24, 2008
  3. Port back a basic Chars class from ActiveSupport::Multibyte.

    Copy parts of the Chars class from ActiveSupport::Multibyte to use when Multibyte can't be loaded. Implements a few methods to make the proxy work more transparently. Methods that would otherwise return a string now return an instance of their own class (Unichars).
    committed Nov 24, 2008
  4. Make the gem build and install.

    committed Nov 24, 2008
  5. Prepare for release.

    Add LICENSE and gemspec. Update README.
    committed Nov 24, 2008
  6. Make tests more practical.

    committed Nov 24, 2008
Commits on Sep 1, 2008
Commits on Jul 5, 2008
  1. Rename Gunichars => Glib.

    committed Jul 5, 2008
Commits on Jun 17, 2008
  1. Add upcase and downcase method.

    committed Jun 17, 2008