TextSystemOverview

Similar documents
Microsoft Word - MDOnline 2001.


NSDate NSCalendarDate NSObject NSDate NSCalendarDate NSDate NSCalendarDate NSDate NSCalendar NSDate date NSDate *d = [ NSDate date ]; // NSDate : + (i


Microsoft Word - MDOnline 2001.


) CoreImage 2013/5/25 iphone

Microsoft PowerPoint - Lecture_3

StringProgrammingGuide

V8.1新規機能紹介記事

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

sp2-2.indd

デジタル表現論・第6回

JAVA とテンプレート

PowerPoint Presentation

Applet java.lang.object java.awt.component java.awt.container java.awt.panel java.applet.applet

問題1 以下に示すプログラムは、次の処理をするプログラムである

Prog2_6th



好きですまえばし

橡07第1章1_H160203_.PDF

untitled

Microsoft Word - 第5回 基本データ構造2(連結リスト).doc

< F2D E E6A7464>

QW-3414

01_06.indd


ファイルを直接編集する画面を切り替えることができる. 図 3 標準のレイアウトを削除する (2) グラフィカル レイアウト画面で LinearLayout(Vertical) を追加するパレットウィンドウの レイアウト の中にある LinearLayout(Vertical) をドラッグして, 編集

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

Prog2_6th

Format text with styles

2003 Apple Computer, Inc. (Last Updated May 7, 2003)

< F2D B825082CC96E291E82E6A7464>

株式会社スタッフ アンド ブレーン Rev 1.0 ZyWALL USG シリーズ設定例 Windows OS での VPN 接続 (L2TP over IPSec VPN 接続 ) について 構成例 Windows OS での VPN 接続 インターネット 社内環境 回線終端装置 (ONU) WA

株式会社スタッフ アンド ブレーン Rev 1.0 次世代ファイアウォール USG シリーズ設定例 Windows OS での VPN 接続 (L2TP over IPSec VPN 接続 ) について 構成例 Windows OS での VPN 接続 インターネット 社内環境 USG 回線終端装置

PowerPoint Presentation

CocoaDrawingGuide

Q 23 A Q Q15 76 Q23 77


Lecture 3 Slides (January 12, 2010)

Gartner Day

WebOTX V6 J2EEアプリケーションのトラブルシューティング

tkk0408nari

Microsoft PowerPoint ppt

Java演習(4) -- 変数と型 --

J3866_00_H1_4.indd

J3867_00_H1_4.indd

Java言語 第1回


Design with themes — Part 1: The Basics

ボタンイベントアプリイベント処理を含むアプリとして, ボタンをもち, ボタンを押すと文字列を表示するアプリを作る. このアプリは,HelloWorld アプリを改造して作成するため, アプリ作成の途中からの手順を示す. 1. ボタンの設置 (1) レイアウトにボタンを追加するパレットの フォーム ウ

目 次 Java GUI 3 1 概要 クラス構成 ソースコード例 課題...7 i

Android Layout SDK プログラミング マニュアル

Prog2_10th

¥×¥í¥°¥é¥ß¥ó¥°±é½¬I Exercise on Programming I [1zh] ` `%%%`#`&12_`__~~~ alse


Prog2_5th

EnSight 10.1の新機能

人工知能入門

株式会社スタッフ アンド ブレーン Rev. 1.0 ZyWALL USG シリーズ設定例 Android を利用した L2TP over IPSec VPN 接続 について 構成例 Android を利用した L2TP over IPSec VPN 接続 インターネット 社内環境 回線終端装置 (

モバイルアプリを Azure で作る - データを扱う Azure Storage を利 してデータを保存する 本稿では PHP と Windows Azure を使って 画像などのファイルを扱うアプリケーションを開発する方法を説明します Windows Azure Platform では データの

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 ゲームプログラミング スプライトの衝突判定 スプライトの衝突判定 スプライトの衝突判定の例として インベーダーゲームのコードを 下記に示す PYTHON3 #coding: utf-8 import pygame from pygame.lo

JavaプログラミングⅠ

01-introduction.ppt

thesis.dvi

デジタル表現論・第4回

Smalltalk_

monologue Sound Librarian 取扱説明書

MyEventHandler actionhandler = new MyEventHandler(); m.addeventhandler(actionevent.any, actionhandler); // レイアウト BorderPane を生成 / 設定します BorderPane bp

Microsoft PowerPoint ppt

デザインパターン第一章「生成《

スクールCOBOL2002

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Prog2_6th

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

PowerPoint プレゼンテーション

netcdf

Java言語 第1回

C言語によるアルゴリズムとデータ構造

SimLab Plugins for SketchUp 評価版インストールおよびアクティベート方法 注意事項 評価版をお使い頂くには 評価用ライセンスでのアクティベートが必要です 評価用ライセンスファイルの取得を行い 手動でアクティベートする必要があります 各 SimLab プラグインは 評価用とし

Step1 ショートカットを作成する Step1 では デスクトップにショートカットを作成します ご利用のシステムに応じて 1 TurboLinux Client 2008 Basic (KDE) の場合 2 Ubuntu の場合をそれぞれ参照し 作成してください 1Tur

第2回

ASP.NET 2.0 Provider Model 概要

Swift1.key

K227 Java 2

2

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

_...j.f......_..

スライド 1

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

1. 目次 PixiModule ターミナルアプリ (ios 版 ) ソース説明 2. ios 版ご利用の前に ソースファイル内の用語の説明... 4 サンプル 4. ソースファイルの構成 Main.storyboard の説明 ViewControlle

Taro-korattsu.jtd

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

手書認識 グラフ描画 Step2-2 手書認識 : 認識結果を PaintPanel で描画する < 属性付き文字列 AttributedString> 標準出力では分かりにくいうえに認識結果を使えないので 認識するごとに PaintPanel に文字を描画することにする ここで 数式はただの文字列

Prog2_10th

PowerPoint プレゼンテーション

WebOTXマニュアル

< F2D82518E9F8AD CC95BD8D7388DA93AE2E6A7464>

Objective-C Objective-C C Toolbox API Cocoa Objective-C Java Carbon API C API Objective-C Java Pure Java Java AppleScript Java Objective-C Project Bui

Transcription:

テキストシステム アーキテクチャー ソフトウエア設計者にとって アプリケーションにおけるテキストの取り扱いという問題は 最も頭を悩ま せる要素です 最も 基本的な テキストシステムでも 入力 レイアウト 表示 編 集 コピー ペースト これらはサポートされていて当たり前です そのうえ最近は 単なるエ ディタ ワードプロセッサではなく でさえ複数のフォントやパラグラフ スタイル イメージの貼付に スペル チェックまで要求されるのです しかしここにCocoaがあります Cocoaのテキストシステムは上に挙げた全ての機能を提供します 加え て 相互接続が当然となったコンピュータワールドから次々と生み出される新たな要求 世界各国の固有文 字フォントやスクリプトシステムのサポート 非矩形領域へのレイアウト カーニングやリガチャーを含む 洗練されたタイプセットなどに応えます しかもCocoaのテキストシステムは これらの実現にあたってプ ログラマに特別な勉強を要求しません ほとんどのデベロッパは NSTextViewクラスの持つプログラミング インタフェースさえ学べばそれで十 分でしょう NSTextViewはユーザに対し テキストシステムへのインタフェースを提供するクラスです よりフレキシブルなインタフェースをご希望なら これに加えてNSTextStorageクラスとストレージ レイ ヤーについて学んでください そして これは当然ですが Mac OS Xの持つテキストシステムの全ての可 能性を余すところなく利用するには テキスト ハンドリング システムの全てを学ぶ必要があります 以下は ユーザインタフェース上層に ストレージ レイヤーを下層に配置してテキストシステムの機能を 図解したものです フォントパネル カラーパネル グリフ ジャネ レータ テキストヴュー ルーラーヴュー レイアウト マネージャ テキスト入力 タイプセッター テキスト コンテナ テキスト ストレージ Application Kitの数あるクラスの中で テキスト関係のクラスほど多様で複雑なものはありません その理 由は これらのクラスを利用するプログラマがほとんどサブクラスを作らずに済むような包括的なテキス ト ハンドリングを提供するべく設計されているからです

ABCabc123 ABCabc123 ABCabc123 ABCabc123

Q

#import <Cocoa/Cocoa.h> @interface MyDocument: NSDocument { IBOutlet NSTextView *textview; NSAttributedString *mstring; } @end if (mstring == nil) { mstring = [[NSAttributedString alloc] initwithstring:@""]; } - (NSAttributedString *) string { return [[mstring retain] autorelease]; } - (void) setstring: (NSAttributedString *) newvalue { if (mstring!= newvalue) { [newvalue retain]; if (mstring) [mstring release]; mstring = [newvalue copy]; [newvalue release]; } } #import <Cocoa/Cocoa.h>

@interface MyDocument: NSDocument { IBOutlet NSTextView *textview; NSAttributedString *mstring; } - (NSAttributedString *) string; - (void) setstring: (NSAttributedString *) value; @end

- (void) textdidchange: (NSNotification *) notification { [self setstring: [textview textstorage]]; } - (NSData *)datarepresentationoftype:(nsstring *)atype { NSData *data; [self setstring:[textview textstorage]]; data = [NSArchiver archiveddatawithrootobject:[self string]]; return data; } - (BOOL)loadDataRepresentation:(NSData *)data oftype:(nsstring *)atype { NSAttributedString *tempstring = [NSUnarchiver unarchiveobjectwithdata: data]; [self setstring:tempstring]; return YES; }

if ([self string]!= nil) { [[textview textstorage] setattributedstring: [self string]]; }

NSTextView *myview; NSString *mytext; NSRange endrange; endrange.location = [[myview textstorage] length]; endrange.length = 0; [myview replacecharactersinrange:endrange withstring:mytext]; endrange.length = [mytext length]; [myview scrollrangetovisible:endrange]; - (void)addattribute:(nsstring *)name value:(id)value range:(nsrange)arange NSFontManager *fontmanager = [NSFontManager sharedfontmanager]; unsigned idx = range.location; NSRange fontrange; NSFont *font; while (NSLocationInRange(idx, range)){ font = [attributedstring attribute:nsfontattributename atindex:idx longesteffectiverange:&fontrange inrange:range]; fontrange = NSIntersectionRange(fontRange, range); font = [fontmanager convertfont:font tohavetrait:nsboldfontmask]; [attributedstring addattribute:nsfontattributename value:font range:fontrange]; idx = NSMaxRange(fontRange); }

linefragmentrectforglyphatindex:effectiverange: locationforglyphatindex: usedrect = [layoutmanager usedrectfortextcontainer:textcontainer]; NSRect linefragmentrect = [layoutmanager linefragmentrectforglyphatindex:glyphindex effectiverange:null]; NSPoint viewlocation, layoutlocation = [layoutmanager locationforglyphatindex:glyphindex]; // Here layoutlocation is the location (in container coordinates) // where the glyph was laid out. layoutlocation.x += linefragmentrect.origin.x; layoutlocation.y += linefragmentrect.origin.y;

textstorage = [[NSTextStorage alloc] init]; NSAttributedString *attrstring = [NSAttributedString attributedstringfromrtf:[nsdata datawithcontentsoffile:filename]]; textstorage = [[NSTextStorage alloc] initwithattributedstring:attrstring];

NSLayoutManager *layoutmanager; layoutmanager = [[NSLayoutManager alloc] init]; [textstorage addlayoutmanager:layoutmanager]; [layoutmanager release]; NSRect cframe = [[thewindow contentview] frame]; NSTextContainer *container; container = [[NSTextContainer alloc] initwithcontainersize:cframe.size]; [layoutmanager addtextcontainer:container]; [container release]; NSTextView *textview = [[NSTextView alloc] initwithframe:cframe textcontainer:container]; [thewindow setcontentview:textview]; [thewindow makekeyandorderfront:nil]; [textview release];