Wat is TextBuilder?
TextBuilder is een klasse waarmee je via method chaining de facets (rich-text-annotaties) opbouwt die het AT Protocol van Bluesky definieert.
De tekst van een Bluesky-post is platte tekst, maar om mentions, links en hashtags weer te geven moet je een facets-array meesturen die de positie in de tekst (byte-offsets) en het type aangeeft. TextBuilder verzorgt deze offsetberekening en het opbouwen van de array automatisch.
Eenvoudige tekst maken
TextBuilder::make()
MetTextBuilder::make() maak je een instantie met een begintekst. De begintekst is optioneel.
text()
Mettext() voeg je tekst toe aan het einde.
newLine()
Voegt een regeleinde toe. Metcount geef je het aantal regels op (standaard: 1).
toPost()
Converteert deTextBuilder-instantie naar een Post-record. Je kunt deze rechtstreeks doorgeven aan Bluesky::post().
Post::build()
Je kunt ook een closure doorgeven aanPost::build(). De returnwaarde is dan een Post.
Mentions (@mention) toevoegen
Met mention() voeg je een mention-facet toe.
Automatische DID-resolutie
Als jedid weglaat, wordt de DID automatisch geresolved vanuit de handle (Bluesky::resolveHandle() wordt aangeroepen).
De DID expliciet opgeven
Als je de DID al kent, kun je die expliciet doorgeven en zo de API-aanroep vermijden.Links (URL’s) insluiten
Metlink() voeg je een link-facet toe.
uri weglaat, wordt text direct als URI gebruikt.
Hashtags toevoegen
Mettag() voeg je een hashtag-facet toe.
Samengestelde tekst bouwen
Door meerdere facets te combineren maak je rijke posttekst.Schrijven met Post::build()
Integratie met posts
Combineren met Bluesky::post()
Combineren met het Notification-kanaal
Je kuntPost::build() gebruiken in de toBluesky()-method van BlueskyChannel.
Facets automatisch detecteren
Je kunt@mention, URL’s en #hashtag in de tekst ook automatisch laten detecteren en de facets laten instellen.
Custom facets toevoegen
Met defacet()-method kun je rechtstreeks een willekeurige facet-array toevoegen.
Tekenlimieten en aandachtspunten
Byte-offsets en graphemes
De facet-indexen van het AT Protocol worden opgegeven als UTF-8-byte-offsets.TextBuilder berekent het aantal bytes intern met strlen().
Multibyte-tekens zoals Japans en emoji nemen meerdere bytes per teken in beslag, dus de offset wordt bepaald door het aantal bytes, niet het aantal tekens.
Tekenlimiet voor posts
Een Bluesky-post is beperkt tot maximaal 300 tekens in graphemes (zichtbare tekens). De limiet geldt in graphemes en niet in bytes, dus ook in het Japans kun je 300 tekens schrijven.TextBuilder zelf controleert het aantal tekens niet. Stuur je een post van meer dan 300 graphemes, dan geeft de AT Protocol-API een fout terug.Overzicht van methods
Source: src/RichText/TextBuilder.php