import type { NobjcObject } from "objc-js";
import type { _NSFont } from "./NSFont.js";
import type { _NSLayoutManager } from "./NSLayoutManager.js";
import type { _NSTextContainer } from "./NSTextContainer.js";
import type { _NSTextTab } from "./NSTextTab.js";
import type { _NSTypesetter } from "./NSTypesetter.js";
import type { _NSAttributedString } from "../Foundation/NSAttributedString.js";
import type { CGPoint } from "../structs/CGPoint.js";
import type { CGRect } from "../structs/CGRect.js";
import type { NSRange } from "../structs/NSRange.js";
import type { NSTypesetterBehavior } from "./NSTypesetterBehavior.js";
import type { NSWritingDirection } from "./NSWritingDirection.js";
export declare class _NSATSTypesetter extends _NSTypesetter {
    static alloc(): _NSATSTypesetter;
    static new(): _NSATSTypesetter;
    init(): _NSATSTypesetter;
    /**
     * Factory methods
     * @deprecated
     */
    static sharedTypesetter(): _NSATSTypesetter;
    /**
     * Use -getLineFragmentRect:usedRect:forStartingGlyphAtIndex:proposedRect:lineSpacing:paragraphSpacingBefore:paragraphSpacingAfter:remainingRect: instead
     * @deprecated
     */
    lineFragmentRectForProposedRect$remainingRect$(proposedRect: CGRect, remainingRect: NobjcObject): CGRect;
    /** Screen/printer font mapping */
    substituteFontForFont$(originalFont: _NSFont): _NSFont;
    /** Tab stops */
    textTabForGlyphLocation$writingDirection$maxLocation$(glyphLocation: number, direction: NSWritingDirection, maxLocation: number): _NSTextTab | null;
    setParagraphGlyphRange$separatorGlyphRange$(paragraphRange: NSRange, paragraphSeparatorRange: NSRange): void;
    /**
     * lineFragmentOrigin specifies the upper-left corner of line fragment rect. On return, set to the next origin. The method returns the next glyph index. Usually the index right after paragraph separator but can be inside the paragraph range (i.e. text container exhaustion)
     */
    layoutParagraphAtPoint$(lineFragmentOrigin: NobjcObject): number;
    /** Line/paragraph spacing */
    lineSpacingAfterGlyphAtIndex$withProposedLineFragmentRect$(glyphIndex: number, rect: CGRect): number;
    paragraphSpacingBeforeGlyphAtIndex$withProposedLineFragmentRect$(glyphIndex: number, rect: CGRect): number;
    paragraphSpacingAfterGlyphAtIndex$withProposedLineFragmentRect$(glyphIndex: number, rect: CGRect): number;
    /**
     * Forces NSLayoutManager to invalidate glyph cache in range when invalidating layout
     */
    setHardInvalidation$forGlyphRange$(flag: boolean, glyphRange: NSRange): void;
    /**
     * This method calculates the line fragment rect/line fragment used rect for blank lines theParagraphSeparatorGlyphRange with length == 0 indicates extra line fragment
     */
    getLineFragmentRect$usedRect$forParagraphSeparatorGlyphRange$atProposedOrigin$(lineFragmentRect: NobjcObject, lineFragmentUsedRect: NobjcObject, paragraphSeparatorGlyphRange: NSRange, lineOrigin: CGPoint): void;
    /** Called right before setLineFragmentRect:forGlyphRange:usedRect: */
    willSetLineFragmentRect$forGlyphRange$usedRect$baselineOffset$(lineRect: NobjcObject, glyphRange: NSRange, usedRect: NobjcObject, baselineOffset: NobjcObject): void;
    shouldBreakLineByWordBeforeCharacterAtIndex$(charIndex: number): boolean;
    shouldBreakLineByHyphenatingBeforeCharacterAtIndex$(charIndex: number): boolean;
    hyphenationFactorForGlyphAtIndex$(glyphIndex: number): number;
    hyphenCharacterForGlyphAtIndex$(glyphIndex: number): number;
    boundingBoxForControlGlyphAtIndex$forTextContainer$proposedLineFragment$glyphPosition$characterIndex$(glyphIndex: number, textContainer: _NSTextContainer, proposedRect: CGRect, glyphPosition: CGPoint, charIndex: number): CGRect;
    /**
     * Glyph data
     * @deprecated
     */
    getGlyphsInRange$glyphs$characterIndexes$glyphInscriptions$elasticBits$(glyphsRange: NSRange, glyphBuffer: NobjcObject, charIndexBuffer: NobjcObject, inscribeBuffer: NobjcObject, elasticBuffer: NobjcObject): number;
    /** Privmitive typesetting methods NSLayoutManager attributes */
    usesFontLeading(): boolean;
    setUsesFontLeading$(value: boolean): void;
    typesetterBehavior(): NSTypesetterBehavior;
    setTypesetterBehavior$(value: NSTypesetterBehavior): void;
    hyphenationFactor(): number;
    setHyphenationFactor$(value: number): void;
    /** NSTextContainer attributes */
    lineFragmentPadding(): number;
    setLineFragmentPadding$(value: number): void;
    /**
     * Controls whether to perform bi-directional processing. You can disable the layout stage if you know the parapgraph does not need this stage (i.e. the backing-store is in the display order) in -fillAttributesForGlyphsInRange:andParagraphSeparatorRange:.
     */
    bidiProcessingEnabled(): boolean;
    setBidiProcessingEnabled$(value: boolean): void;
    /** Note this method does not retain attrString */
    attributedString(): _NSAttributedString | null;
    setAttributedString$(value: _NSAttributedString | null): void;
    paragraphGlyphRange(): NSRange;
    paragraphSeparatorGlyphRange(): NSRange;
    /** Friend classes */
    layoutManager(): _NSLayoutManager | null;
    currentTextContainer(): _NSTextContainer | null;
}
