view dstep/appkit/NSLayoutManager.d @ 22:f8a3b67adfcb

Removed duplicated methods
author Jacob Carlborg <doob@me.com>
date Tue, 09 Feb 2010 18:02:03 +0100
parents 19885b43130e
children b9de51448c6b
line wrap: on
line source

/**
 * Copyright: Copyright (c) 2009 Jacob Carlborg.
 * Authors: Jacob Carlborg
 * Version: Initial created: Sep 24, 2009 
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
 */
module dstep.appkit.NSLayoutManager;

import dstep.appkit.NSBox;
import dstep.appkit.NSCell;
import dstep.appkit.NSColor;
import dstep.appkit.NSEvent;
import dstep.appkit.NSFont;
import dstep.appkit.NSGlyphGenerator;
import dstep.appkit.NSImageCell;
import dstep.appkit.NSMatrix;
import dstep.appkit.NSParagraphStyle;
import dstep.appkit.NSRulerMarker;
import dstep.appkit.NSRulerView;
import dstep.appkit.NSTextContainer;
import dstep.appkit.NSTextField;
import dstep.appkit.NSTextStorage;
import dstep.appkit.NSTextTable;
import dstep.appkit.NSTextView;
import dstep.appkit.NSTypesetter;
import dstep.appkit.NSView;
import dstep.appkit.NSWindow;
import dstep.applicationservices.coregraphics.CGBase;
import dstep.foundation.NSArray;
import dstep.foundation.NSAttributedString;
import dstep.foundation.NSCoder;
import dstep.foundation.NSDictionary;
import dstep.foundation.NSGeometry;
import dstep.foundation.NSObjCRuntime;
import dstep.foundation.NSObject;
import dstep.foundation.NSRange;
import dstep.foundation.NSString;
import dstep.foundation.NSZone;
import dstep.objc.bridge.Bridge;
import dstep.objc.objc;

alias NSUInteger NSGlyphInscription;
alias NSInteger NSTypesetterBehavior;

enum
{
	NSGlyphAttributeSoft = 0,
	NSGlyphAttributeElastic = 1,
	NSGlyphAttributeBidiLevel = 2,
	NSGlyphAttributeInscribe = 5
}

enum
{
	NSGlyphInscribeBase = 0,
	NSGlyphInscribeBelow = 1,
	NSGlyphInscribeAbove = 2,
	NSGlyphInscribeOverstrike = 3,
	NSGlyphInscribeOverBelow = 4
}

enum
{
	NSTypesetterLatestBehavior = -1,
	NSTypesetterOriginalBehavior = 0,
	NSTypesetterBehavior_10_2_WithCompatibility = 1,
	NSTypesetterBehavior_10_2 = 2,
	NSTypesetterBehavior_10_3 = 3,
	NSTypesetterBehavior_10_4 = 4
}

const TNSTextViewSupport = `

	NSArray rulerMarkersForTextView (NSTextView view, NSParagraphStyle style, NSRulerView ruler)
	{
		return invokeObjcSelf!(NSArray, "rulerMarkersForTextView:paragraphStyle:ruler:", NSTextView, NSParagraphStyle, NSRulerView)(view, style, ruler);
	}

	NSView rulerAccessoryViewForTextView (NSTextView view, NSParagraphStyle style, NSRulerView ruler, bool isEnabled)
	{
		return invokeObjcSelf!(NSView, "rulerAccessoryViewForTextView:paragraphStyle:ruler:enabled:", NSTextView, NSParagraphStyle, NSRulerView, bool)(view, style, ruler, isEnabled);
	}

	bool layoutManagerOwnsFirstResponderInWindow (NSWindow window)
	{
		return invokeObjcSelf!(bool, "layoutManagerOwnsFirstResponderInWindow:", NSWindow)(window);
	}

	NSTextView firstTextView ()
	{
		return invokeObjcSelf!(NSTextView, "firstTextView");
	}

	NSTextView textViewForBeginningOfSelection ()
	{
		return invokeObjcSelf!(NSTextView, "textViewForBeginningOfSelection");
	}

	void drawBackgroundForGlyphRange (NSRange glyphsToShow, NSPoint origin)
	{
		return invokeObjcSelf!(void, "drawBackgroundForGlyphRange:atPoint:", NSRange, NSPoint)(glyphsToShow, origin);
	}

	void drawGlyphsForGlyphRange (NSRange glyphsToShow, NSPoint origin)
	{
		return invokeObjcSelf!(void, "drawGlyphsForGlyphRange:atPoint:", NSRange, NSPoint)(glyphsToShow, origin);
	}

	void showPackedGlyphs (char* glyphs, NSUInteger glyphLen, NSRange glyphRange, NSPoint point, NSFont font, NSColor color, NSSize printingAdjustment)
	{
		return invokeObjcSelf!(void, "showPackedGlyphs:length:glyphRange:atPoint:font:color:printingAdjustment:", char*, NSUInteger, NSRange, NSPoint, NSFont, NSColor, NSSize)(glyphs, glyphLen, glyphRange, point, font, color, printingAdjustment);
	}

	void showAttachmentCell (NSCell cell, NSRect rect, NSUInteger attachmentIndex)
	{
		return invokeObjcSelf!(void, "showAttachmentCell:inRect:characterIndex:", NSCell, NSRect, NSUInteger)(cell, rect, attachmentIndex);
	}

	void drawUnderlineForGlyphRange (NSRange glyphRange, NSInteger underlineVal, CGFloat baselineOffset, NSRect lineRect, NSRange lineGlyphRange, NSPoint containerOrigin)
	{
		return invokeObjcSelf!(void, "drawUnderlineForGlyphRange:underlineType:baselineOffset:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:", NSRange, NSInteger, CGFloat, NSRect, NSRange, NSPoint)(glyphRange, underlineVal, baselineOffset, lineRect, lineGlyphRange, containerOrigin);
	}

	void underlineGlyphRange (NSRange glyphRange, NSInteger underlineVal, NSRect lineRect, NSRange lineGlyphRange, NSPoint containerOrigin)
	{
		return invokeObjcSelf!(void, "underlineGlyphRange:underlineType:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:", NSRange, NSInteger, NSRect, NSRange, NSPoint)(glyphRange, underlineVal, lineRect, lineGlyphRange, containerOrigin);
	}

	void drawStrikethroughForGlyphRange (NSRange glyphRange, NSInteger strikethroughVal, CGFloat baselineOffset, NSRect lineRect, NSRange lineGlyphRange, NSPoint containerOrigin)
	{
		return invokeObjcSelf!(void, "drawStrikethroughForGlyphRange:strikethroughType:baselineOffset:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:", NSRange, NSInteger, CGFloat, NSRect, NSRange, NSPoint)(glyphRange, strikethroughVal, baselineOffset, lineRect, lineGlyphRange, containerOrigin);
	}

	void strikethroughGlyphRange (NSRange glyphRange, NSInteger strikethroughVal, NSRect lineRect, NSRange lineGlyphRange, NSPoint containerOrigin)
	{
		return invokeObjcSelf!(void, "strikethroughGlyphRange:strikethroughType:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:", NSRange, NSInteger, NSRect, NSRange, NSPoint)(glyphRange, strikethroughVal, lineRect, lineGlyphRange, containerOrigin);
	}

	//mixin ObjcBindMethod!(rulerMarkersForTextView, "rulerMarkersForTextView:paragraphStyle:ruler:");
	//mixin ObjcBindMethod!(rulerAccessoryViewForTextView, "rulerAccessoryViewForTextView:paragraphStyle:ruler:enabled:");
	//mixin ObjcBindMethod!(layoutManagerOwnsFirstResponderInWindow, "layoutManagerOwnsFirstResponderInWindow:");
	//mixin ObjcBindMethod!(firstTextView, "firstTextView");
	//mixin ObjcBindMethod!(textViewForBeginningOfSelection, "textViewForBeginningOfSelection");
	//mixin ObjcBindMethod!(drawBackgroundForGlyphRange, "drawBackgroundForGlyphRange:atPoint:");
	//mixin ObjcBindMethod!(drawGlyphsForGlyphRange, "drawGlyphsForGlyphRange:atPoint:");
	//mixin ObjcBindMethod!(showPackedGlyphs, "showPackedGlyphs:length:glyphRange:atPoint:font:color:printingAdjustment:");
	//mixin ObjcBindMethod!(showAttachmentCell, "showAttachmentCell:inRect:characterIndex:");
	//mixin ObjcBindMethod!(drawUnderlineForGlyphRange, "drawUnderlineForGlyphRange:underlineType:baselineOffset:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:");
	//mixin ObjcBindMethod!(underlineGlyphRange, "underlineGlyphRange:underlineType:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:");
	//mixin ObjcBindMethod!(drawStrikethroughForGlyphRange, "drawStrikethroughForGlyphRange:strikethroughType:baselineOffset:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:");
	//mixin ObjcBindMethod!(strikethroughGlyphRange, "strikethroughGlyphRange:strikethroughType:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:");

`;

const TNSLayoutManagerDelegate = `

	void layoutManagerDidInvalidateLayout (NSLayoutManager sender)
	{
		return invokeObjcSelf!(void, "layoutManagerDidInvalidateLayout:", NSLayoutManager)(sender);
	}

	void layoutManager (NSLayoutManager layoutManager, NSTextContainer textContainer, bool layoutFinishedFlag)
	{
		return invokeObjcSelf!(void, "layoutManager:didCompleteLayoutForTextContainer:atEnd:", NSLayoutManager, NSTextContainer, bool)(layoutManager, textContainer, layoutFinishedFlag);
	}

	NSDictionary layoutManager (NSLayoutManager layoutManager, NSDictionary attrs, bool toScreen, NSUInteger charIndex, NSRangePointer effectiveCharRange)
	{
		return invokeObjcSelf!(NSDictionary, "layoutManager:shouldUseTemporaryAttributes:forDrawingToScreen:atCharacterIndex:effectiveRange:", NSLayoutManager, NSDictionary, bool, NSUInteger, NSRangePointer)(layoutManager, attrs, toScreen, charIndex, effectiveCharRange);
	}

	//mixin ObjcBindMethod!(layoutManagerDidInvalidateLayout, "layoutManagerDidInvalidateLayout:");
	//mixin ObjcBindMethod!(layoutManager, "layoutManager:didCompleteLayoutForTextContainer:atEnd:");
	//mixin ObjcBindMethod!(layoutManager, "layoutManager:shouldUseTemporaryAttributes:forDrawingToScreen:atCharacterIndex:effectiveRange:");

`;

class NSLayoutManager : NSObject, INSCoding, INSGlyphStorage
{
	mixin (ObjcWrap);
	
	this (NSCoder aDecoder)
	{
		super(typeof(this).alloc.initWithCoder(aDecoder).objcObject);
	}
	
	void encodeWithCoder (NSCoder aCoder)
	{
		return invokeObjcSelf!(void, "encodeWithCoder:", NSCoder)(aCoder);
	}
	
	typeof(this) initWithCoder (NSCoder aDecoder)
	{
		return invokeObjcSelf!(typeof(this), "initWithCoder:", NSCoder)(aDecoder);
	}
	
	typeof(this) copyWithZone (NSZone* zone)
	{
		return invokeObjcSelf!(typeof(this), "copyWithZone:", NSZone*)(zone);
	}

	NSLayoutManager init ()
	{
		id result = invokeObjcSelf!(id, "init");
		return result is this.objcObject ? this : (result !is null ? new NSLayoutManager(result) : null);
	}

	this ()
	{
		super(NSLayoutManager.alloc.init.objcObject);
	}

	NSTextStorage textStorage ()
	{
		return invokeObjcSelf!(NSTextStorage, "textStorage");
	}

	void setTextStorage (NSTextStorage textStorage)
	{
		return invokeObjcSelf!(void, "setTextStorage:", NSTextStorage)(textStorage);
	}

	NSAttributedString attributedString ()
	{
		return invokeObjcSelf!(NSAttributedString, "attributedString");
	}

	void replaceTextStorage (NSTextStorage newTextStorage)
	{
		return invokeObjcSelf!(void, "replaceTextStorage:", NSTextStorage)(newTextStorage);
	}

	NSGlyphGenerator glyphGenerator ()
	{
		return invokeObjcSelf!(NSGlyphGenerator, "glyphGenerator");
	}

	void setGlyphGenerator (NSGlyphGenerator glyphGenerator)
	{
		return invokeObjcSelf!(void, "setGlyphGenerator:", NSGlyphGenerator)(glyphGenerator);
	}

	NSTypesetter typesetter ()
	{
		return invokeObjcSelf!(NSTypesetter, "typesetter");
	}

	void setTypesetter (NSTypesetter typesetter)
	{
		return invokeObjcSelf!(void, "setTypesetter:", NSTypesetter)(typesetter);
	}

	Object delegate_ ()
	{
		return invokeObjcSelf!(Object, "delegate");
	}

	void setDelegate (Object delegate_)
	{
		return invokeObjcSelf!(void, "setDelegate:", Object)(delegate_);
	}

	NSArray textContainers ()
	{
		return invokeObjcSelf!(NSArray, "textContainers");
	}

	void addTextContainer (NSTextContainer container)
	{
		return invokeObjcSelf!(void, "addTextContainer:", NSTextContainer)(container);
	}

	void insertTextContainer (NSTextContainer container, NSUInteger index)
	{
		return invokeObjcSelf!(void, "insertTextContainer:atIndex:", NSTextContainer, NSUInteger)(container, index);
	}

	void removeTextContainerAtIndex (NSUInteger index)
	{
		return invokeObjcSelf!(void, "removeTextContainerAtIndex:", NSUInteger)(index);
	}

	void textContainerChangedGeometry (NSTextContainer container)
	{
		return invokeObjcSelf!(void, "textContainerChangedGeometry:", NSTextContainer)(container);
	}

	void textContainerChangedTextView (NSTextContainer container)
	{
		return invokeObjcSelf!(void, "textContainerChangedTextView:", NSTextContainer)(container);
	}

	void setBackgroundLayoutEnabled (bool flag)
	{
		return invokeObjcSelf!(void, "setBackgroundLayoutEnabled:", bool)(flag);
	}

	bool backgroundLayoutEnabled ()
	{
		return invokeObjcSelf!(bool, "backgroundLayoutEnabled");
	}

	void setUsesScreenFonts (bool flag)
	{
		return invokeObjcSelf!(void, "setUsesScreenFonts:", bool)(flag);
	}

	bool usesScreenFonts ()
	{
		return invokeObjcSelf!(bool, "usesScreenFonts");
	}

	void setShowsInvisibleCharacters (bool flag)
	{
		return invokeObjcSelf!(void, "setShowsInvisibleCharacters:", bool)(flag);
	}

	bool showsInvisibleCharacters ()
	{
		return invokeObjcSelf!(bool, "showsInvisibleCharacters");
	}

	void setShowsControlCharacters (bool flag)
	{
		return invokeObjcSelf!(void, "setShowsControlCharacters:", bool)(flag);
	}

	bool showsControlCharacters ()
	{
		return invokeObjcSelf!(bool, "showsControlCharacters");
	}

	void setHyphenationFactor (float factor)
	{
		return invokeObjcSelf!(void, "setHyphenationFactor:", float)(factor);
	}

	float hyphenationFactor ()
	{
		return invokeObjcSelf!(float, "hyphenationFactor");
	}

	void setDefaultAttachmentScaling (uint scaling)
	{
		return invokeObjcSelf!(void, "setDefaultAttachmentScaling:", uint)(scaling);
	}

	uint defaultAttachmentScaling ()
	{
		return invokeObjcSelf!(uint, "defaultAttachmentScaling");
	}

	void setTypesetterBehavior (int theBehavior)
	{
		return invokeObjcSelf!(void, "setTypesetterBehavior:", int)(theBehavior);
	}

	int typesetterBehavior ()
	{
		return invokeObjcSelf!(int, "typesetterBehavior");
	}

	NSUInteger layoutOptions ()
	{
		return invokeObjcSelf!(NSUInteger, "layoutOptions");
	}

	void setAllowsNonContiguousLayout (bool flag)
	{
		return invokeObjcSelf!(void, "setAllowsNonContiguousLayout:", bool)(flag);
	}

	bool allowsNonContiguousLayout ()
	{
		return invokeObjcSelf!(bool, "allowsNonContiguousLayout");
	}

	bool hasNonContiguousLayout ()
	{
		return invokeObjcSelf!(bool, "hasNonContiguousLayout");
	}

	void invalidateGlyphsForCharacterRange (NSRange charRange, NSInteger delta, NSRangePointer actualCharRange)
	{
		return invokeObjcSelf!(void, "invalidateGlyphsForCharacterRange:changeInLength:actualCharacterRange:", NSRange, NSInteger, NSRangePointer)(charRange, delta, actualCharRange);
	}

	void invalidateLayoutForCharacterRange (NSRange charRange, NSRangePointer actualCharRange)
	{
		return invokeObjcSelf!(void, "invalidateLayoutForCharacterRange:actualCharacterRange:", NSRange, NSRangePointer)(charRange, actualCharRange);
	}

	void invalidateLayoutForCharacterRange (NSRange charRange, bool flag, NSRangePointer actualCharRange)
	{
		return invokeObjcSelf!(void, "invalidateLayoutForCharacterRange:isSoft:actualCharacterRange:", NSRange, bool, NSRangePointer)(charRange, flag, actualCharRange);
	}

	void invalidateDisplayForCharacterRange (NSRange charRange)
	{
		return invokeObjcSelf!(void, "invalidateDisplayForCharacterRange:", NSRange)(charRange);
	}

	void invalidateDisplayForGlyphRange (NSRange glyphRange)
	{
		return invokeObjcSelf!(void, "invalidateDisplayForGlyphRange:", NSRange)(glyphRange);
	}

	void textStorage (NSTextStorage str, NSUInteger editedMask, NSRange newCharRange, NSInteger delta, NSRange invalidatedCharRange)
	{
		return invokeObjcSelf!(void, "textStorage:edited:range:changeInLength:invalidatedRange:", NSTextStorage, NSUInteger, NSRange, NSInteger, NSRange)(str, editedMask, newCharRange, delta, invalidatedCharRange);
	}

	void ensureGlyphsForCharacterRange (NSRange charRange)
	{
		return invokeObjcSelf!(void, "ensureGlyphsForCharacterRange:", NSRange)(charRange);
	}

	void ensureGlyphsForGlyphRange (NSRange glyphRange)
	{
		return invokeObjcSelf!(void, "ensureGlyphsForGlyphRange:", NSRange)(glyphRange);
	}

	void ensureLayoutForCharacterRange (NSRange charRange)
	{
		return invokeObjcSelf!(void, "ensureLayoutForCharacterRange:", NSRange)(charRange);
	}

	void ensureLayoutForGlyphRange (NSRange glyphRange)
	{
		return invokeObjcSelf!(void, "ensureLayoutForGlyphRange:", NSRange)(glyphRange);
	}

	void ensureLayoutForTextContainer (NSTextContainer container)
	{
		return invokeObjcSelf!(void, "ensureLayoutForTextContainer:", NSTextContainer)(container);
	}

	void ensureLayoutForBoundingRect (NSRect bounds, NSTextContainer container)
	{
		return invokeObjcSelf!(void, "ensureLayoutForBoundingRect:inTextContainer:", NSRect, NSTextContainer)(bounds, container);
	}

	void insertGlyphs (NSGlyph* glyphs, NSUInteger length, NSUInteger glyphIndex, NSUInteger charIndex)
	{
		return invokeObjcSelf!(void, "insertGlyphs:length:forStartingGlyphAtIndex:characterIndex:", NSGlyph*, NSUInteger, NSUInteger, NSUInteger)(glyphs, length, glyphIndex, charIndex);
	}

	void insertGlyph (uint glyph, NSUInteger glyphIndex, NSUInteger charIndex)
	{
		return invokeObjcSelf!(void, "insertGlyph:atGlyphIndex:characterIndex:", uint, NSUInteger, NSUInteger)(glyph, glyphIndex, charIndex);
	}

	void replaceGlyphAtIndex (NSUInteger glyphIndex, uint newGlyph)
	{
		return invokeObjcSelf!(void, "replaceGlyphAtIndex:withGlyph:", NSUInteger, uint)(glyphIndex, newGlyph);
	}

	void deleteGlyphsInRange (NSRange glyphRange)
	{
		return invokeObjcSelf!(void, "deleteGlyphsInRange:", NSRange)(glyphRange);
	}

	void setCharacterIndex (NSUInteger charIndex, NSUInteger glyphIndex)
	{
		return invokeObjcSelf!(void, "setCharacterIndex:forGlyphAtIndex:", NSUInteger, NSUInteger)(charIndex, glyphIndex);
	}

	void setIntAttribute (NSInteger attributeTag, NSInteger val, NSUInteger glyphIndex)
	{
		return invokeObjcSelf!(void, "setIntAttribute:value:forGlyphAtIndex:", NSInteger, NSInteger, NSUInteger)(attributeTag, val, glyphIndex);
	}

	void invalidateGlyphsOnLayoutInvalidationForGlyphRange (NSRange glyphRange)
	{
		return invokeObjcSelf!(void, "invalidateGlyphsOnLayoutInvalidationForGlyphRange:", NSRange)(glyphRange);
	}

	NSUInteger numberOfGlyphs ()
	{
		return invokeObjcSelf!(NSUInteger, "numberOfGlyphs");
	}

	uint glyphAtIndex (NSUInteger glyphIndex, bool* isValidIndex)
	{
		return invokeObjcSelf!(uint, "glyphAtIndex:isValidIndex:", NSUInteger, bool*)(glyphIndex, isValidIndex);
	}

	uint glyphAtIndex (NSUInteger glyphIndex)
	{
		return invokeObjcSelf!(uint, "glyphAtIndex:", NSUInteger)(glyphIndex);
	}

	bool isValidGlyphIndex (NSUInteger glyphIndex)
	{
		return invokeObjcSelf!(bool, "isValidGlyphIndex:", NSUInteger)(glyphIndex);
	}

	NSUInteger characterIndexForGlyphAtIndex (NSUInteger glyphIndex)
	{
		return invokeObjcSelf!(NSUInteger, "characterIndexForGlyphAtIndex:", NSUInteger)(glyphIndex);
	}

	NSUInteger glyphIndexForCharacterAtIndex (NSUInteger charIndex)
	{
		return invokeObjcSelf!(NSUInteger, "glyphIndexForCharacterAtIndex:", NSUInteger)(charIndex);
	}

	NSInteger intAttribute (NSInteger attributeTag, NSUInteger glyphIndex)
	{
		return invokeObjcSelf!(NSInteger, "intAttribute:forGlyphAtIndex:", NSInteger, NSUInteger)(attributeTag, glyphIndex);
	}

	NSUInteger getGlyphsInRange (NSRange glyphRange, NSGlyph* glyphBuffer, NSUInteger* charIndexBuffer, NSGlyphInscription* inscribeBuffer, bool* elasticBuffer)
	{
		return invokeObjcSelf!(NSUInteger, "getGlyphsInRange:glyphs:characterIndexes:glyphInscriptions:elasticBits:", NSRange, NSGlyph*, NSUInteger*, NSGlyphInscription*, bool*)(glyphRange, glyphBuffer, charIndexBuffer, inscribeBuffer, elasticBuffer);
	}

	NSUInteger getGlyphsInRange (NSRange glyphRange, NSGlyph* glyphBuffer, NSUInteger* charIndexBuffer, NSGlyphInscription* inscribeBuffer, bool* elasticBuffer, char* bidiLevelBuffer)
	{
		return invokeObjcSelf!(NSUInteger, "getGlyphsInRange:glyphs:characterIndexes:glyphInscriptions:elasticBits:bidiLevels:", NSRange, NSGlyph*, NSUInteger*, NSGlyphInscription*, bool*, char*)(glyphRange, glyphBuffer, charIndexBuffer, inscribeBuffer, elasticBuffer, bidiLevelBuffer);
	}

	NSUInteger getGlyphs (NSGlyph* glyphArray, NSRange glyphRange)
	{
		return invokeObjcSelf!(NSUInteger, "getGlyphs:range:", NSGlyph*, NSRange)(glyphArray, glyphRange);
	}

	void setTextContainer (NSTextContainer container, NSRange glyphRange)
	{
		return invokeObjcSelf!(void, "setTextContainer:forGlyphRange:", NSTextContainer, NSRange)(container, glyphRange);
	}

	void setLineFragmentRect (NSRect fragmentRect, NSRange glyphRange, NSRect usedRect)
	{
		return invokeObjcSelf!(void, "setLineFragmentRect:forGlyphRange:usedRect:", NSRect, NSRange, NSRect)(fragmentRect, glyphRange, usedRect);
	}

	void setExtraLineFragmentRect (NSRect fragmentRect, NSRect usedRect, NSTextContainer container)
	{
		return invokeObjcSelf!(void, "setExtraLineFragmentRect:usedRect:textContainer:", NSRect, NSRect, NSTextContainer)(fragmentRect, usedRect, container);
	}

	void setLocation (NSPoint location, NSRange glyphRange)
	{
		return invokeObjcSelf!(void, "setLocation:forStartOfGlyphRange:", NSPoint, NSRange)(location, glyphRange);
	}

	void setLocations (NSPointArray locations, NSUInteger* glyphIndexes, NSUInteger count, NSRange glyphRange)
	{
		return invokeObjcSelf!(void, "setLocations:startingGlyphIndexes:count:forGlyphRange:", NSPointArray, NSUInteger*, NSUInteger, NSRange)(locations, glyphIndexes, count, glyphRange);
	}

	void setNotShownAttribute (bool flag, NSUInteger glyphIndex)
	{
		return invokeObjcSelf!(void, "setNotShownAttribute:forGlyphAtIndex:", bool, NSUInteger)(flag, glyphIndex);
	}

	void setDrawsOutsideLineFragment (bool flag, NSUInteger glyphIndex)
	{
		return invokeObjcSelf!(void, "setDrawsOutsideLineFragment:forGlyphAtIndex:", bool, NSUInteger)(flag, glyphIndex);
	}

	void setAttachmentSize (NSSize attachmentSize, NSRange glyphRange)
	{
		return invokeObjcSelf!(void, "setAttachmentSize:forGlyphRange:", NSSize, NSRange)(attachmentSize, glyphRange);
	}

	void getFirstUnlaidCharacterIndex (NSUInteger* charIndex, NSUInteger* glyphIndex)
	{
		return invokeObjcSelf!(void, "getFirstUnlaidCharacterIndex:glyphIndex:", NSUInteger*, NSUInteger*)(charIndex, glyphIndex);
	}

	NSUInteger firstUnlaidCharacterIndex ()
	{
		return invokeObjcSelf!(NSUInteger, "firstUnlaidCharacterIndex");
	}

	NSUInteger firstUnlaidGlyphIndex ()
	{
		return invokeObjcSelf!(NSUInteger, "firstUnlaidGlyphIndex");
	}

	NSTextContainer textContainerForGlyphAtIndex (NSUInteger glyphIndex, NSRangePointer effectiveGlyphRange)
	{
		return invokeObjcSelf!(NSTextContainer, "textContainerForGlyphAtIndex:effectiveRange:", NSUInteger, NSRangePointer)(glyphIndex, effectiveGlyphRange);
	}

	NSRect usedRectForTextContainer (NSTextContainer container)
	{
		return invokeObjcSelf!(NSRect, "usedRectForTextContainer:", NSTextContainer)(container);
	}

	NSRect lineFragmentRectForGlyphAtIndex (NSUInteger glyphIndex, NSRangePointer effectiveGlyphRange)
	{
		return invokeObjcSelf!(NSRect, "lineFragmentRectForGlyphAtIndex:effectiveRange:", NSUInteger, NSRangePointer)(glyphIndex, effectiveGlyphRange);
	}

	NSRect lineFragmentUsedRectForGlyphAtIndex (NSUInteger glyphIndex, NSRangePointer effectiveGlyphRange)
	{
		return invokeObjcSelf!(NSRect, "lineFragmentUsedRectForGlyphAtIndex:effectiveRange:", NSUInteger, NSRangePointer)(glyphIndex, effectiveGlyphRange);
	}

	NSRect lineFragmentRectForGlyphAtIndex (NSUInteger glyphIndex, NSRangePointer effectiveGlyphRange, bool flag)
	{
		return invokeObjcSelf!(NSRect, "lineFragmentRectForGlyphAtIndex:effectiveRange:withoutAdditionalLayout:", NSUInteger, NSRangePointer, bool)(glyphIndex, effectiveGlyphRange, flag);
	}

	NSRect lineFragmentUsedRectForGlyphAtIndex (NSUInteger glyphIndex, NSRangePointer effectiveGlyphRange, bool flag)
	{
		return invokeObjcSelf!(NSRect, "lineFragmentUsedRectForGlyphAtIndex:effectiveRange:withoutAdditionalLayout:", NSUInteger, NSRangePointer, bool)(glyphIndex, effectiveGlyphRange, flag);
	}

	NSTextContainer textContainerForGlyphAtIndex (NSUInteger glyphIndex, NSRangePointer effectiveGlyphRange, bool flag)
	{
		return invokeObjcSelf!(NSTextContainer, "textContainerForGlyphAtIndex:effectiveRange:withoutAdditionalLayout:", NSUInteger, NSRangePointer, bool)(glyphIndex, effectiveGlyphRange, flag);
	}

	NSRect extraLineFragmentRect ()
	{
		return invokeObjcSelf!(NSRect, "extraLineFragmentRect");
	}

	NSRect extraLineFragmentUsedRect ()
	{
		return invokeObjcSelf!(NSRect, "extraLineFragmentUsedRect");
	}

	NSTextContainer extraLineFragmentTextContainer ()
	{
		return invokeObjcSelf!(NSTextContainer, "extraLineFragmentTextContainer");
	}

	NSPoint locationForGlyphAtIndex (NSUInteger glyphIndex)
	{
		return invokeObjcSelf!(NSPoint, "locationForGlyphAtIndex:", NSUInteger)(glyphIndex);
	}

	bool notShownAttributeForGlyphAtIndex (NSUInteger glyphIndex)
	{
		return invokeObjcSelf!(bool, "notShownAttributeForGlyphAtIndex:", NSUInteger)(glyphIndex);
	}

	bool drawsOutsideLineFragmentForGlyphAtIndex (NSUInteger glyphIndex)
	{
		return invokeObjcSelf!(bool, "drawsOutsideLineFragmentForGlyphAtIndex:", NSUInteger)(glyphIndex);
	}

	NSSize attachmentSizeForGlyphAtIndex (NSUInteger glyphIndex)
	{
		return invokeObjcSelf!(NSSize, "attachmentSizeForGlyphAtIndex:", NSUInteger)(glyphIndex);
	}

	void setLayoutRect (NSRect rect, NSTextBlock block, NSRange glyphRange)
	{
		return invokeObjcSelf!(void, "setLayoutRect:forTextBlock:glyphRange:", NSRect, NSTextBlock, NSRange)(rect, block, glyphRange);
	}

	void setBoundsRect (NSRect rect, NSTextBlock block, NSRange glyphRange)
	{
		return invokeObjcSelf!(void, "setBoundsRect:forTextBlock:glyphRange:", NSRect, NSTextBlock, NSRange)(rect, block, glyphRange);
	}

	NSRect layoutRectForTextBlock (NSTextBlock block, NSRange glyphRange)
	{
		return invokeObjcSelf!(NSRect, "layoutRectForTextBlock:glyphRange:", NSTextBlock, NSRange)(block, glyphRange);
	}

	NSRect boundsRectForTextBlock (NSTextBlock block, NSRange glyphRange)
	{
		return invokeObjcSelf!(NSRect, "boundsRectForTextBlock:glyphRange:", NSTextBlock, NSRange)(block, glyphRange);
	}

	NSRect layoutRectForTextBlock (NSTextBlock block, NSUInteger glyphIndex, NSRangePointer effectiveGlyphRange)
	{
		return invokeObjcSelf!(NSRect, "layoutRectForTextBlock:atIndex:effectiveRange:", NSTextBlock, NSUInteger, NSRangePointer)(block, glyphIndex, effectiveGlyphRange);
	}

	NSRect boundsRectForTextBlock (NSTextBlock block, NSUInteger glyphIndex, NSRangePointer effectiveGlyphRange)
	{
		return invokeObjcSelf!(NSRect, "boundsRectForTextBlock:atIndex:effectiveRange:", NSTextBlock, NSUInteger, NSRangePointer)(block, glyphIndex, effectiveGlyphRange);
	}

	NSRange glyphRangeForCharacterRange (NSRange charRange, NSRangePointer actualCharRange)
	{
		return invokeObjcSelf!(NSRange, "glyphRangeForCharacterRange:actualCharacterRange:", NSRange, NSRangePointer)(charRange, actualCharRange);
	}

	NSRange characterRangeForGlyphRange (NSRange glyphRange, NSRangePointer actualGlyphRange)
	{
		return invokeObjcSelf!(NSRange, "characterRangeForGlyphRange:actualGlyphRange:", NSRange, NSRangePointer)(glyphRange, actualGlyphRange);
	}

	NSRange glyphRangeForTextContainer (NSTextContainer container)
	{
		return invokeObjcSelf!(NSRange, "glyphRangeForTextContainer:", NSTextContainer)(container);
	}

	NSRange rangeOfNominallySpacedGlyphsContainingIndex (NSUInteger glyphIndex)
	{
		return invokeObjcSelf!(NSRange, "rangeOfNominallySpacedGlyphsContainingIndex:", NSUInteger)(glyphIndex);
	}

	NSRectArray rectArrayForCharacterRange (NSRange charRange, NSRange selCharRange, NSTextContainer container, NSUInteger* rectCount)
	{
		return invokeObjcSelf!(NSRectArray, "rectArrayForCharacterRange:withinSelectedCharacterRange:inTextContainer:rectCount:", NSRange, NSRange, NSTextContainer, NSUInteger*)(charRange, selCharRange, container, rectCount);
	}

	NSRectArray rectArrayForGlyphRange (NSRange glyphRange, NSRange selGlyphRange, NSTextContainer container, NSUInteger* rectCount)
	{
		return invokeObjcSelf!(NSRectArray, "rectArrayForGlyphRange:withinSelectedGlyphRange:inTextContainer:rectCount:", NSRange, NSRange, NSTextContainer, NSUInteger*)(glyphRange, selGlyphRange, container, rectCount);
	}

	NSRect boundingRectForGlyphRange (NSRange glyphRange, NSTextContainer container)
	{
		return invokeObjcSelf!(NSRect, "boundingRectForGlyphRange:inTextContainer:", NSRange, NSTextContainer)(glyphRange, container);
	}

	NSRange glyphRangeForBoundingRect (NSRect bounds, NSTextContainer container)
	{
		return invokeObjcSelf!(NSRange, "glyphRangeForBoundingRect:inTextContainer:", NSRect, NSTextContainer)(bounds, container);
	}

	NSRange glyphRangeForBoundingRectWithoutAdditionalLayout (NSRect bounds, NSTextContainer container)
	{
		return invokeObjcSelf!(NSRange, "glyphRangeForBoundingRectWithoutAdditionalLayout:inTextContainer:", NSRect, NSTextContainer)(bounds, container);
	}

	NSUInteger glyphIndexForPoint (NSPoint point, NSTextContainer container, CGFloat* partialFraction)
	{
		return invokeObjcSelf!(NSUInteger, "glyphIndexForPoint:inTextContainer:fractionOfDistanceThroughGlyph:", NSPoint, NSTextContainer, CGFloat*)(point, container, partialFraction);
	}

	NSUInteger glyphIndexForPoint (NSPoint point, NSTextContainer container)
	{
		return invokeObjcSelf!(NSUInteger, "glyphIndexForPoint:inTextContainer:", NSPoint, NSTextContainer)(point, container);
	}

	CGFloat fractionOfDistanceThroughGlyphForPoint (NSPoint point, NSTextContainer container)
	{
		return invokeObjcSelf!(CGFloat, "fractionOfDistanceThroughGlyphForPoint:inTextContainer:", NSPoint, NSTextContainer)(point, container);
	}

	NSUInteger getLineFragmentInsertionPointsForCharacterAtIndex (NSUInteger charIndex, bool aFlag, bool dFlag, CGFloat* positions, NSUInteger* charIndexes)
	{
		return invokeObjcSelf!(NSUInteger, "getLineFragmentInsertionPointsForCharacterAtIndex:alternatePositions:inDisplayOrder:positions:characterIndexes:", NSUInteger, bool, bool, CGFloat*, NSUInteger*)(charIndex, aFlag, dFlag, positions, charIndexes);
	}

	NSDictionary temporaryAttributesAtCharacterIndex (NSUInteger charIndex, NSRangePointer effectiveCharRange)
	{
		return invokeObjcSelf!(NSDictionary, "temporaryAttributesAtCharacterIndex:effectiveRange:", NSUInteger, NSRangePointer)(charIndex, effectiveCharRange);
	}

	void setTemporaryAttributes (NSDictionary attrs, NSRange charRange)
	{
		return invokeObjcSelf!(void, "setTemporaryAttributes:forCharacterRange:", NSDictionary, NSRange)(attrs, charRange);
	}

	void addTemporaryAttributes (NSDictionary attrs, NSRange charRange)
	{
		return invokeObjcSelf!(void, "addTemporaryAttributes:forCharacterRange:", NSDictionary, NSRange)(attrs, charRange);
	}

	void removeTemporaryAttribute (NSString attrName, NSRange charRange)
	{
		return invokeObjcSelf!(void, "removeTemporaryAttribute:forCharacterRange:", NSString, NSRange)(attrName, charRange);
	}

	Object temporaryAttribute (NSString attrName, NSUInteger location, NSRangePointer range)
	{
		return invokeObjcSelf!(Object, "temporaryAttribute:atCharacterIndex:effectiveRange:", NSString, NSUInteger, NSRangePointer)(attrName, location, range);
	}

	Object temporaryAttribute (NSString attrName, NSUInteger location, NSRangePointer range, NSRange rangeLimit)
	{
		return invokeObjcSelf!(Object, "temporaryAttribute:atCharacterIndex:longestEffectiveRange:inRange:", NSString, NSUInteger, NSRangePointer, NSRange)(attrName, location, range, rangeLimit);
	}

	NSDictionary temporaryAttributesAtCharacterIndex (NSUInteger location, NSRangePointer range, NSRange rangeLimit)
	{
		return invokeObjcSelf!(NSDictionary, "temporaryAttributesAtCharacterIndex:longestEffectiveRange:inRange:", NSUInteger, NSRangePointer, NSRange)(location, range, rangeLimit);
	}

	void addTemporaryAttribute (NSString attrName, Object value, NSRange charRange)
	{
		return invokeObjcSelf!(void, "addTemporaryAttribute:value:forCharacterRange:", NSString, Object, NSRange)(attrName, value, charRange);
	}

	NSFont substituteFontForFont (NSFont originalFont)
	{
		return invokeObjcSelf!(NSFont, "substituteFontForFont:", NSFont)(originalFont);
	}

	CGFloat defaultLineHeightForFont (NSFont theFont)
	{
		return invokeObjcSelf!(CGFloat, "defaultLineHeightForFont:", NSFont)(theFont);
	}

	CGFloat defaultBaselineOffsetForFont (NSFont theFont)
	{
		return invokeObjcSelf!(CGFloat, "defaultBaselineOffsetForFont:", NSFont)(theFont);
	}

	bool usesFontLeading ()
	{
		return invokeObjcSelf!(bool, "usesFontLeading");
	}

	void setUsesFontLeading (bool flag)
	{
		return invokeObjcSelf!(void, "setUsesFontLeading:", bool)(flag);
	}
	
	// NSTextViewSupport
	NSArray rulerMarkersForTextView (NSTextView view, NSParagraphStyle style, NSRulerView ruler)
	{
		return invokeObjcSelf!(NSArray, "rulerMarkersForTextView:paragraphStyle:ruler:", NSTextView, NSParagraphStyle, NSRulerView)(view, style, ruler);
	}

	NSView rulerAccessoryViewForTextView (NSTextView view, NSParagraphStyle style, NSRulerView ruler, bool isEnabled)
	{
		return invokeObjcSelf!(NSView, "rulerAccessoryViewForTextView:paragraphStyle:ruler:enabled:", NSTextView, NSParagraphStyle, NSRulerView, bool)(view, style, ruler, isEnabled);
	}

	bool layoutManagerOwnsFirstResponderInWindow (NSWindow window)
	{
		return invokeObjcSelf!(bool, "layoutManagerOwnsFirstResponderInWindow:", NSWindow)(window);
	}

	NSTextView firstTextView ()
	{
		return invokeObjcSelf!(NSTextView, "firstTextView");
	}

	NSTextView textViewForBeginningOfSelection ()
	{
		return invokeObjcSelf!(NSTextView, "textViewForBeginningOfSelection");
	}

	void drawBackgroundForGlyphRange (NSRange glyphsToShow, NSPoint origin)
	{
		return invokeObjcSelf!(void, "drawBackgroundForGlyphRange:atPoint:", NSRange, NSPoint)(glyphsToShow, origin);
	}

	void drawGlyphsForGlyphRange (NSRange glyphsToShow, NSPoint origin)
	{
		return invokeObjcSelf!(void, "drawGlyphsForGlyphRange:atPoint:", NSRange, NSPoint)(glyphsToShow, origin);
	}

	void showPackedGlyphs (char* glyphs, NSUInteger glyphLen, NSRange glyphRange, NSPoint point, NSFont font, NSColor color, NSSize printingAdjustment)
	{
		return invokeObjcSelf!(void, "showPackedGlyphs:length:glyphRange:atPoint:font:color:printingAdjustment:", char*, NSUInteger, NSRange, NSPoint, NSFont, NSColor, NSSize)(glyphs, glyphLen, glyphRange, point, font, color, printingAdjustment);
	}

	void showAttachmentCell (NSCell cell, NSRect rect, NSUInteger attachmentIndex)
	{
		return invokeObjcSelf!(void, "showAttachmentCell:inRect:characterIndex:", NSCell, NSRect, NSUInteger)(cell, rect, attachmentIndex);
	}

	void drawUnderlineForGlyphRange (NSRange glyphRange, NSInteger underlineVal, CGFloat baselineOffset, NSRect lineRect, NSRange lineGlyphRange, NSPoint containerOrigin)
	{
		return invokeObjcSelf!(void, "drawUnderlineForGlyphRange:underlineType:baselineOffset:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:", NSRange, NSInteger, CGFloat, NSRect, NSRange, NSPoint)(glyphRange, underlineVal, baselineOffset, lineRect, lineGlyphRange, containerOrigin);
	}

	void underlineGlyphRange (NSRange glyphRange, NSInteger underlineVal, NSRect lineRect, NSRange lineGlyphRange, NSPoint containerOrigin)
	{
		return invokeObjcSelf!(void, "underlineGlyphRange:underlineType:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:", NSRange, NSInteger, NSRect, NSRange, NSPoint)(glyphRange, underlineVal, lineRect, lineGlyphRange, containerOrigin);
	}

	void drawStrikethroughForGlyphRange (NSRange glyphRange, NSInteger strikethroughVal, CGFloat baselineOffset, NSRect lineRect, NSRange lineGlyphRange, NSPoint containerOrigin)
	{
		return invokeObjcSelf!(void, "drawStrikethroughForGlyphRange:strikethroughType:baselineOffset:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:", NSRange, NSInteger, CGFloat, NSRect, NSRange, NSPoint)(glyphRange, strikethroughVal, baselineOffset, lineRect, lineGlyphRange, containerOrigin);
	}

	void strikethroughGlyphRange (NSRange glyphRange, NSInteger strikethroughVal, NSRect lineRect, NSRange lineGlyphRange, NSPoint containerOrigin)
	{
		return invokeObjcSelf!(void, "strikethroughGlyphRange:strikethroughType:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:", NSRange, NSInteger, NSRect, NSRange, NSPoint)(glyphRange, strikethroughVal, lineRect, lineGlyphRange, containerOrigin);
	}
}